diff --git a/src/Server.ts b/src/Server.ts index f324b69..f7f53fd 100644 --- a/src/Server.ts +++ b/src/Server.ts @@ -196,6 +196,9 @@ export class Server { case 'm.room.canonical_alias': this.updateRoomName(nextEvent, targetChannel); break; + case 'm.room.encrypted': + this.handleEncryptedMessage(nextEvent, targetChannel); + break; case 'm.room.guest_access': this.handleMatrixGuestAccess(nextEvent, targetChannel); break; @@ -208,10 +211,9 @@ export class Server { case 'm.room.member': this.handleMatrixMember(nextEvent, targetChannel); break; - case 'm.room.message': { + case 'm.room.message': this.handleMatrixMessage(nextEvent, targetChannel); break; - } case 'm.room.power_levels': this.handleMatrixPL(nextEvent, targetChannel); break; @@ -250,7 +252,8 @@ export class Server { case 'org.matrix.msc3381.poll.start': break; default: - console.log(`${targetChannel.name}: ${nextEvent}`); + console.log(`${targetChannel.name}:`); + console.log(nextEvent); break; } } @@ -303,6 +306,24 @@ export class Server { }) } + handleEncryptedMessage(event: any, targetChannel: Channel) { + const sourceUser = this.getOrCreateMatrixUser(event["sender"]); + if (!targetChannel.matrixUsers.has(sourceUser.nick)) { + targetChannel.matrixUsers.set(sourceUser.nick, sourceUser); + const prefix = sourceUser.getMask(); + const joinTags = new Map([["account", sourceUser.accountName], ['time', new Date(event["origin_server_ts"]).toISOString()]]) + this.sendToAllWithCap('extended-join', prefix, "JOIN", [targetChannel.name, sourceUser.accountName, sourceUser.realname], joinTags); + this.sendToAllWithoutCap('extended-join', prefix, "JOIN", [targetChannel.name], joinTags); + } + const messageTags = new Map(); + messageTags.set('msgid', event["event_id"]); + messageTags.set('time', new Date(event["origin_server_ts"]).toISOString()); + messageTags.set('account', sourceUser.accountName); + this.clients.forEach((channel) => { + channel.sendMessage(sourceUser.getMask(), 'NOTICE', [targetChannel.name, "Sent an encrypted message, use another client to view"], messageTags); + }); + } + handleMatrixGuestAccess(event: any, targetChannel: Channel) { const rule = event["content"]?.["guest_access"]; if (!rule) {