export class Messages { constructor() { this.channels = {}; } inChannel(channel) { return this.channels[channel] || []; } addMessage(message) { let { channel, ...payload } = message; let channel_id = channel.id; this.updateChannel(channel_id, (messages) => [...messages, payload]); return this; } addMessages(channel, payloads) { this.updateChannel(channel, (messages) => [...messages, ...payloads]); return this; } deleteMessage(channel, message) { let messages = this.messages(channel).filter((msg) => msg.message.id != message); this.channels[channel] = messages; } deleteChannel(id) { delete this.channels[id]; return this; } updateChannel(channel, callback) { let messages = callback(this.inChannel(channel)); messages.sort((a, b) => a.at - b.at); this.channels[channel] = messages; } }