import { Server } from "./Server.js"; import { MatrixUser } from "./MatrixUser.js"; import { IRCUser } from "./IRCUser.js"; import { IRCMessage } from "./Message.js"; export class Channel { private server: Server public name: string private matrixUsers: Map private ircUsers: Map private nickToMXid: Map private powerLevels: Map private topic: Map; private modes: Map private messages: Map; private tsToEventId: Map; constructor(public roomId: string, initialIRCUser: IRCUser) { this.server = initialIRCUser.server this.name = roomId; this.matrixUsers = new Map(); this.ircUsers = new Map(); this.ircUsers.set(initialIRCUser.nick, initialIRCUser); this.nickToMXid = new Map(); this.powerLevels = new Map(); this.topic = new Map([['text', ''], ['timestamp', '0']]); this.modes = new Map(); this.modes.set('n', ''); this.messages = new Map(); this.tsToEventId = new Map(); } handleMatrixEvent(event: any) { if (!event["type"]) return; if (event["type"] === "m.room.member") { const thisMatrixUser = this.server.getOrCreateMatrixUser(event["sender"]); this.matrixUsers.set(thisMatrixUser.nick, thisMatrixUser); } else if (event["type"] === "m.room.topic") { this.topic.set("text", event["content"]["topic"]); this.topic.set("timestamp", event["origin_server_ts"].toString()) } else if (event["type"] === "m.room.power_levels") { const allUsers = event["content"]["users"]; for (const [mxid, pl] of Object.entries(allUsers)) { const thisMatrixUser = this.server.getOrCreateMatrixUser(event["sender"]); this.matrixUsers.set(thisMatrixUser.nick, thisMatrixUser); this.powerLevels.set(thisMatrixUser.nick, Number(pl)); } } else { console.log(event); } } }