Separate broadcast messages from regular messages

This commit is contained in:
Mr. Stallion 2023-02-24 12:31:33 -08:00
parent f3d3736b12
commit 6b2d49f630
5 changed files with 23 additions and 6 deletions

View File

@ -174,3 +174,13 @@ export class EventMessage implements Conversation.EventMessage {
constructor(readonly text: string, readonly time: Date = new Date()) {
}
}
export class BroadcastMessage implements Conversation.BcastMessage {
readonly id = ++messageId;
readonly type = Conversation.Message.Type.Bcast;
readonly score = 0;
filterMatch = false;
constructor(readonly text: string, readonly sender: Character, readonly time: Date = new Date()) {}
}

View File

@ -2,7 +2,7 @@ import {queuedJoin} from '../fchat/channels';
import {decodeHTML} from '../fchat/common';
// import { CharacterCacheRecord } from '../learn/profile-cache';
import { AdManager } from './ads/ad-manager';
import { characterImage, ConversationSettings, EventMessage, Message, messageToString } from './common';
import { characterImage, ConversationSettings, EventMessage, BroadcastMessage, Message, messageToString } from './common';
import core from './core';
import { Channel, Character, Conversation as Interfaces } from './interfaces';
import l from './localize';
@ -944,7 +944,8 @@ export default function(this: any): Interfaces.State {
connection.onMessage('BRO', async(data, time) => {
if(data.character !== undefined) {
const content = decodeHTML(data.message.substr(data.character.length + 24));
const message = new EventMessage(l('events.broadcast', `[user]${data.character}[/user]`, content), time);
const char = core.characters.get(data.character);
const message = new BroadcastMessage(l('events.broadcast', `[user]${data.character}[/user]`, content), char, time);
await state.consoleTab.addMessage(message);
await core.notifications.notify(state.consoleTab, l('events.broadcast.notification', data.character), content,
characterImage(data.character), 'attention');

View File

@ -24,12 +24,17 @@ export namespace Conversation {
readonly type: Message.Type.Event
}
export interface BcastMessage extends BaseMessage {
readonly type: Message.Type.Bcast
readonly sender: Character;
}
export interface ChatMessage extends BaseMessage {
readonly isHighlight: boolean
readonly sender: Character
}
export type Message = EventMessage | ChatMessage;
export type Message = BcastMessage | EventMessage | ChatMessage;
export interface SFCMessage extends EventMessage {
sfc: Connection.ServerCommands['SFC'] & {confirmed?: true}
@ -42,7 +47,8 @@ export namespace Conversation {
Ad,
Roll,
Warn,
Event
Event,
Bcast
}
}

View File

@ -41,7 +41,7 @@ const userPostfix: {[key: number]: string | undefined} = {
createElement(UserView, {props: {character: message.sender, channel: this.channel}}),
userPostfix[message.type] !== undefined ? createElement('span', { class: 'message-post' }, userPostfix[message.type]) : ' '
);
if(message.isHighlight) classes += ' message-highlight';
if('isHighlight' in message && message.isHighlight) classes += ' message-highlight';
}
const isAd = message.type === Conversation.Message.Type.Ad && !this.logs;
children.push(createElement(BBCodeView(core.bbCodeParser),

View File

@ -26,7 +26,7 @@ function writeFile(p: fs.PathLike | number, data: string | NodeJS.ArrayBufferVie
}
}
export type Message = Conversation.EventMessage | {
export type Message = Conversation.EventMessage | Conversation.BcastMessage | {
readonly sender: {readonly name: string}
readonly text: string
readonly time: Date