From fde0118d38cd29f334212009822bfa9d93017466 Mon Sep 17 00:00:00 2001 From: emerson Date: Tue, 7 Dec 2021 12:15:03 -0500 Subject: [PATCH] send topic changes to IRC, fixes #4 --- README.md | 2 +- src/Channel.ts | 18 ++++++++++++++++-- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 333727f..fdd7285 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,7 @@ That said, it is usable for basic chatting. | Channel kicks | ✅ | ❌ || | Channel bans | 🟨 | ❌ | Bans show up on IRC as kicks | | Channel invites | ✅ | ❌ || -| Channel topics | ❌ | ❌ || +| Channel topics | ✅ | ❌ || | Channel powers | ❌ | ❌ || | Encrypted rooms | ❌ | ❌ || | Message replies (IRCv3) | ❌ | ❌ || diff --git a/src/Channel.ts b/src/Channel.ts index 6be3fe0..b2eeeaf 100644 --- a/src/Channel.ts +++ b/src/Channel.ts @@ -266,8 +266,22 @@ export class Channel { } handleMatrixTopic(event: any) { - this.topic.set("text", event["content"]["topic"]); - this.topic.set("timestamp", event["origin_server_ts"].toString()) + const topicText = event["content"]?.["topic"]; + if (!topicText) + return; + const topicSetter = this.server.getOrCreateMatrixUser(event["sender"]); + const topicTS: string = event["origin_server_ts"].toString(); + this.topic.set("text", topicText); + this.topic.set("timestamp", topicTS.substring(0,10)) + this.topic.set('setter', topicSetter.nick); + + const messageTags = new Map(); + messageTags.set('msgid', event["event_id"]); + messageTags.set('account', topicSetter.accountName); + messageTags.set('time', new Date(event["origin_server_ts"]).toISOString()) + this.ircUsers.forEach((user) => { + user.sendToAll(topicSetter.getMask(), 'TOPIC', [this.name, topicText], messageTags); + }); } handleMatrixJoinRule(event: any) {