Separate broadcast messages from regular messages
This commit is contained in:
		
							parent
							
								
									f3d3736b12
								
							
						
					
					
						commit
						6b2d49f630
					
				@ -174,3 +174,13 @@ export class EventMessage implements Conversation.EventMessage {
 | 
				
			|||||||
    constructor(readonly text: string, readonly time: Date = new Date()) {
 | 
					    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()) {}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -2,7 +2,7 @@ import {queuedJoin} from '../fchat/channels';
 | 
				
			|||||||
import {decodeHTML} from '../fchat/common';
 | 
					import {decodeHTML} from '../fchat/common';
 | 
				
			||||||
// import { CharacterCacheRecord } from '../learn/profile-cache';
 | 
					// import { CharacterCacheRecord } from '../learn/profile-cache';
 | 
				
			||||||
import { AdManager } from './ads/ad-manager';
 | 
					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 core from './core';
 | 
				
			||||||
import { Channel, Character, Conversation as Interfaces } from './interfaces';
 | 
					import { Channel, Character, Conversation as Interfaces } from './interfaces';
 | 
				
			||||||
import l from './localize';
 | 
					import l from './localize';
 | 
				
			||||||
@ -944,7 +944,8 @@ export default function(this: any): Interfaces.State {
 | 
				
			|||||||
    connection.onMessage('BRO', async(data, time) => {
 | 
					    connection.onMessage('BRO', async(data, time) => {
 | 
				
			||||||
        if(data.character !== undefined) {
 | 
					        if(data.character !== undefined) {
 | 
				
			||||||
            const content = decodeHTML(data.message.substr(data.character.length + 24));
 | 
					            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 state.consoleTab.addMessage(message);
 | 
				
			||||||
            await core.notifications.notify(state.consoleTab, l('events.broadcast.notification', data.character), content,
 | 
					            await core.notifications.notify(state.consoleTab, l('events.broadcast.notification', data.character), content,
 | 
				
			||||||
                characterImage(data.character), 'attention');
 | 
					                characterImage(data.character), 'attention');
 | 
				
			||||||
 | 
				
			|||||||
@ -24,12 +24,17 @@ export namespace Conversation {
 | 
				
			|||||||
        readonly type: Message.Type.Event
 | 
					        readonly type: Message.Type.Event
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    export interface BcastMessage extends BaseMessage {
 | 
				
			||||||
 | 
					        readonly type: Message.Type.Bcast
 | 
				
			||||||
 | 
					        readonly sender: Character;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    export interface ChatMessage extends BaseMessage {
 | 
					    export interface ChatMessage extends BaseMessage {
 | 
				
			||||||
        readonly isHighlight: boolean
 | 
					        readonly isHighlight: boolean
 | 
				
			||||||
        readonly sender: Character
 | 
					        readonly sender: Character
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    export type Message = EventMessage | ChatMessage;
 | 
					    export type Message = BcastMessage | EventMessage | ChatMessage;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    export interface SFCMessage extends EventMessage {
 | 
					    export interface SFCMessage extends EventMessage {
 | 
				
			||||||
        sfc: Connection.ServerCommands['SFC'] & {confirmed?: true}
 | 
					        sfc: Connection.ServerCommands['SFC'] & {confirmed?: true}
 | 
				
			||||||
@ -42,7 +47,8 @@ export namespace Conversation {
 | 
				
			|||||||
            Ad,
 | 
					            Ad,
 | 
				
			||||||
            Roll,
 | 
					            Roll,
 | 
				
			||||||
            Warn,
 | 
					            Warn,
 | 
				
			||||||
            Event
 | 
					            Event,
 | 
				
			||||||
 | 
					            Bcast
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -41,7 +41,7 @@ const userPostfix: {[key: number]: string | undefined} = {
 | 
				
			|||||||
                createElement(UserView, {props: {character: message.sender, channel: this.channel}}),
 | 
					                createElement(UserView, {props: {character: message.sender, channel: this.channel}}),
 | 
				
			||||||
                userPostfix[message.type] !== undefined ? createElement('span', { class: 'message-post' }, userPostfix[message.type]) : ' '
 | 
					                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;
 | 
					        const isAd = message.type === Conversation.Message.Type.Ad && !this.logs;
 | 
				
			||||||
        children.push(createElement(BBCodeView(core.bbCodeParser),
 | 
					        children.push(createElement(BBCodeView(core.bbCodeParser),
 | 
				
			||||||
 | 
				
			|||||||
@ -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 sender: {readonly name: string}
 | 
				
			||||||
    readonly text: string
 | 
					    readonly text: string
 | 
				
			||||||
    readonly time: Date
 | 
					    readonly time: Date
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user