diff options
| author | Max Audron <audron@cocaine.farm> | 2023-08-11 16:51:35 +0200 |
|---|---|---|
| committer | Max Audron <audron@cocaine.farm> | 2023-08-11 16:51:35 +0200 |
| commit | 5828af9fc19e18dc85e49fcc1a251a7eb25d909c (patch) | |
| tree | c70c3e52237c08d3fdcb2f1269c524c25e3feeb8 /modules/matrix/patches | |
init
Diffstat (limited to 'modules/matrix/patches')
3 files changed, 129 insertions, 0 deletions
diff --git a/modules/matrix/patches/heisenbridge_channel_name.patch b/modules/matrix/patches/heisenbridge_channel_name.patch new file mode 100644 index 0000000..130f96b --- /dev/null +++ b/modules/matrix/patches/heisenbridge_channel_name.patch @@ -0,0 +1,13 @@ +diff --git i/heisenbridge/channel_room.py w/heisenbridge/channel_room.py +index 119dad0..f1a17f6 100644 +--- i/heisenbridge/channel_room.py ++++ w/heisenbridge/channel_room.py +@@ -207,7 +207,7 @@ class ChannelRoom(PrivateRoom): + self.hidden_room_id = self.serv.hidden_room.id + + self.id = await self.network.serv.create_room( +- f"{visible_name} ({self.network.name})", ++ f"{visible_name}", + "", + [self.network.user_id], + self.hidden_room_id, diff --git a/modules/matrix/patches/heisenbridge_private_name.patch b/modules/matrix/patches/heisenbridge_private_name.patch new file mode 100644 index 0000000..6cff153 --- /dev/null +++ b/modules/matrix/patches/heisenbridge_private_name.patch @@ -0,0 +1,13 @@ +diff --git i/heisenbridge/private_room.py w/heisenbridge/private_room.py +index d8118e8..6d33a3e 100644 +--- i/heisenbridge/private_room.py ++++ w/heisenbridge/private_room.py +@@ -466,7 +466,7 @@ class PrivateRoom(Room): + if self.id is None: + irc_user_id = await self.network.serv.ensure_irc_user_id(self.network.name, displayname, update_cache=False) + self.id = await self.network.serv.create_room( +- "{} ({})".format(displayname, self.network.name), ++ "{}".format(displayname), + "Private chat with {} on {}".format(displayname, self.network.name), + [self.network.user_id, irc_user_id], + ) diff --git a/modules/matrix/patches/heisenbridge_user_presence.patch b/modules/matrix/patches/heisenbridge_user_presence.patch new file mode 100644 index 0000000..a5fc96d --- /dev/null +++ b/modules/matrix/patches/heisenbridge_user_presence.patch @@ -0,0 +1,103 @@ +diff --git i/heisenbridge/__main__.py w/heisenbridge/__main__.py +index d59febd..4898955 100644 +--- i/heisenbridge/__main__.py ++++ w/heisenbridge/__main__.py +@@ -28,6 +28,7 @@ from mautrix.errors import MUserInUse + from mautrix.types import EventType + from mautrix.types import JoinRule + from mautrix.types import Membership ++from mautrix.types import PresenceState + from mautrix.util.bridge_state import BridgeState + from mautrix.util.bridge_state import BridgeStateEvent + from mautrix.util.config import yaml +@@ -192,6 +193,19 @@ class BridgeAppService(AppService): + + return ret + ++ def set_user_state(self, user_id, away, status=None): ++ if user_id not in self._users: ++ return ++ ++ presence = PresenceState.ONLINE ++ if away: ++ presence = PresenceState.UNAVAILABLE ++ ++ async def later(): ++ await self.az.intent.user(user_id).set_presence(presence=presence, status=status) ++ ++ asyncio.ensure_future(later()) ++ + async def cache_user(self, user_id, displayname): + # start by caching that the user_id exists without a displayname + if user_id not in self._users: +diff --git i/heisenbridge/channel_room.py w/heisenbridge/channel_room.py +index 119dad0..3e0651d 100644 +--- i/heisenbridge/channel_room.py ++++ w/heisenbridge/channel_room.py +@@ -478,6 +478,9 @@ class ChannelRoom(PrivateRoom): + + asyncio.ensure_future(autocmd(self)) + ++ # Run a WHO on the channel to get initial away status ++ self.network.conn.who(target=event.target) ++ + return + + # ensure, append, invite and join +diff --git i/heisenbridge/network_room.py w/heisenbridge/network_room.py +index 3c20654..2758462 100644 +--- i/heisenbridge/network_room.py ++++ w/heisenbridge/network_room.py +@@ -139,7 +139,7 @@ class NetworkRoom(Room): + self.tls_cert = None + self.rejoin_invite = True + self.rejoin_kick = False +- self.caps = ["message-tags", "chghost", "znc.in/self-message"] ++ self.caps = ["message-tags", "chghost", "znc.in/self-message", "away-notify"] + self.forward = False + self.backoff = 0 + self.backoff_task = None +@@ -1378,6 +1378,7 @@ class NetworkRoom(Room): + self.conn.add_global_handler("338", self.on_whoisrealhost) # is actually using host + self.conn.add_global_handler("away", self.on_away) + self.conn.add_global_handler("endofwhois", self.on_endofwhois) ++ self.conn.add_global_handler("whoreply", self.on_whoreply) + + # tags + self.conn.add_global_handler("tagmsg", self.on_pass_or_ignore) +@@ -1936,9 +1937,34 @@ class NetworkRoom(Room): + data = self.whois_data[event.arguments[0].lower()] + data["realhost"] = event.arguments[1] + ++ def on_whoreply(self, conn, event) -> None: ++ data = self.whois_data[event.arguments[4].lower()] ++ data["nick"] = event.arguments[4] ++ data["user"] = event.arguments[1] ++ data["host"] = event.arguments[2] ++ if "G" in event.arguments[5]: ++ data["away"] = True ++ elif "H" in event.arguments[5]: ++ data["away"] = False ++ # data["realname"] = event.arguments[4] ++ ++ nick, mode = self.serv.strip_nick(data["nick"]) ++ irc_user_id = self.serv.irc_user_id(self.name, data["nick"]) ++ self.serv.set_user_state(irc_user_id, data["away"]) ++ + def on_away(self, conn, event) -> None: ++ nick, mode = self.serv.strip_nick(event.arguments[0]) ++ irc_user_id = self.serv.irc_user_id(self.name, event.arguments[0]) ++ + if event.arguments[0].lower() in self.whois_data: +- self.whois_data[event.arguments[0].lower()]["away"] = event.arguments[1] ++ if len(event.arguments) > 1: ++ self.whois_data[event.arguments[0].lower()]["away"] = True ++ self.whois_data[event.arguments[0].lower()]["awaymsg"] = event.arguments[1] ++ self.serv.set_user_state(irc_user_id, True, event.arguments[1]) ++ else: ++ self.whois_data[event.arguments[0].lower()]["away"] = False ++ self.whois_data[event.arguments[0].lower()]["awaymsg"] = "" ++ self.serv.set_user_state(irc_user_id, False) + else: + self.send_notice(f"{event.arguments[0]} is away: {event.arguments[1]}") + |
