diff --git a/chat/common.ts b/chat/common.ts index f7038ca..7f5254e 100644 --- a/chat/common.ts +++ b/chat/common.ts @@ -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()) {} +} diff --git a/chat/conversations.ts b/chat/conversations.ts index 148ebc9..23bb4ff 100644 --- a/chat/conversations.ts +++ b/chat/conversations.ts @@ -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'); diff --git a/chat/interfaces.ts b/chat/interfaces.ts index 8d3c120..477c6c8 100644 --- a/chat/interfaces.ts +++ b/chat/interfaces.ts @@ -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 } } diff --git a/chat/message_view.ts b/chat/message_view.ts index 51fff7d..a74180f 100644 --- a/chat/message_view.ts +++ b/chat/message_view.ts @@ -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), diff --git a/electron/filesystem.ts b/electron/filesystem.ts index 4d216a6..9a21384 100644 --- a/electron/filesystem.ts +++ b/electron/filesystem.ts @@ -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