From fa7748794fb3d005ea29b6310f4cfd0fa40c412f Mon Sep 17 00:00:00 2001 From: emerson Date: Tue, 7 Dec 2021 08:51:31 -0500 Subject: [PATCH] Basic privmsg sending --- src/Channel.ts | 7 ++++--- src/Client.ts | 3 +-- src/IRCUser.ts | 5 +---- src/Message.ts | 1 - src/Server.ts | 12 +++++++++++- 5 files changed, 17 insertions(+), 11 deletions(-) diff --git a/src/Channel.ts b/src/Channel.ts index 482bc88..837829b 100644 --- a/src/Channel.ts +++ b/src/Channel.ts @@ -131,8 +131,10 @@ export class Channel { this.handleMatrixMember(event); break; case 'm.room.message': { - if (this.eventIDsSeen.has(event["event_id"])) + if (this.eventIDsSeen.has(event["event_id"])) { + console.log(`duplicate event_id: ${event["event_id"]}`); return; + } this.eventIDsSeen.add(event["event_id"]); this.handleMatrixMessage(event); break; @@ -199,8 +201,7 @@ export class Channel { msgArray.forEach((msg: string) => { if (msg) { this.ircUsers.forEach((user) => { - //@ts-ignore - user.sendToAll(sender.getMask(), ircCommand, [this.name, msg], tags) + user.sendToAll(thisMatrixUser.getMask(), ircCommand, [this.name, msg], tags) }); } }); diff --git a/src/Client.ts b/src/Client.ts index 04a393b..a333dee 100644 --- a/src/Client.ts +++ b/src/Client.ts @@ -187,7 +187,7 @@ export class Client { return; if (rooms['join']) { for (const roomId of Object.keys(rooms.join)) { - const targetChannel = this.server.matrixRooms.get(roomId) || new Channel(roomId, this.server); + const targetChannel = this.server.getOrCreateIRCChannel(roomId); this.user.channels.set(targetChannel.name, targetChannel); rooms.join[roomId].state.events.forEach((nextEvent: any) => targetChannel.routeMatrixEvent(nextEvent)); } @@ -195,7 +195,6 @@ export class Client { if (this.user === null) return; this.user.nextBatch = data.next_batch; - console.log(this.user.nextBatch); this.user.addClient(this, message.tags); }) } diff --git a/src/IRCUser.ts b/src/IRCUser.ts index 9bbfd74..ebe7747 100644 --- a/src/IRCUser.ts +++ b/src/IRCUser.ts @@ -43,12 +43,9 @@ export class IRCUser { } addClient(client: Client, passedTags: Map) { - console.log('adding client'); this.clients.add(client); if (this.nextBatch !== "") { - console.log('nextBatch is good'); for (const channel of this.channels.values()) { - console.log('joining channel'); channel.joinNewIRCClient(client, passedTags); } } @@ -66,7 +63,7 @@ export class IRCUser { const rooms = data.rooms; if (rooms && rooms['join']) { for (const roomId of Object.keys(rooms.join)) { - const targetChannel = this.server.matrixRooms.get(roomId) || new Channel(roomId, this.server); + const targetChannel = this.server.getOrCreateIRCChannel(roomId); rooms.join[roomId].timeline.events.forEach((nextEvent: any) => { targetChannel.routeMatrixEvent(nextEvent) }); diff --git a/src/Message.ts b/src/Message.ts index 52ec361..ef76f5d 100644 --- a/src/Message.ts +++ b/src/Message.ts @@ -101,7 +101,6 @@ export function parseIRCMessage(rawLine: string) { if (restOfMessage.indexOf(' ') === -1) { command = restOfMessage; - console.log(parsedTags, prefix, command, params); return new IRCMessage(parsedTags, prefix, command, params); } diff --git a/src/Server.ts b/src/Server.ts index 49c955f..e7555d1 100644 --- a/src/Server.ts +++ b/src/Server.ts @@ -22,7 +22,7 @@ export class Server { this.nickToMxid = new Map(); } - getOrCreateIRCUser(mxid: string, accessToken: string) { + getOrCreateIRCUser(mxid: string, accessToken: string): IRCUser { const maybeUser = this.ircUsers.get(mxid); if (maybeUser) { return maybeUser; @@ -30,6 +30,16 @@ export class Server { return new IRCUser(mxid, accessToken, this); } + getOrCreateIRCChannel(roomId: string): Channel { + const maybeChannel = this.matrixRooms.get(roomId); + if (maybeChannel) + return maybeChannel; + + const newChannel = new Channel(roomId, this); + this.matrixRooms.set(roomId, newChannel); + return newChannel; + } + getOrCreateMatrixUser(mxid: string): MatrixUser { let maybeMatrixUser = this.matrixUsers.get(mxid); if (maybeMatrixUser) {