Translate video conferences to links and send unknown command numeric

This commit is contained in:
luk3yx
2022-05-15 15:21:08 +12:00
parent 1b0bce0440
commit 1d34f87ef3
2 changed files with 29 additions and 12 deletions

View File

@@ -12,7 +12,7 @@ import functools, html.parser, itertools, json, math, re, threading, time, uuid
import miniirc, requests, traceback # type: ignore
ver = (0, 0, 3)
ver = (0, 0, 4)
__version__ = '.'.join(map(str, ver))
@@ -460,16 +460,7 @@ class Matrix(miniirc.IRC):
def _main(self) -> None:
try:
if miniirc.ver >= (2, 0, 0):
self.handle_msg(miniirc.IRCMessage('001', ('', '', ''), {}, [
self.current_nick,
f'Welcome to Matrix {self.current_nick}'
]))
else:
self._handle('001', ('001', '001', '001'), {}, [
self.current_nick,
f':Welcome to Matrix {self.current_nick}'
])
self.__numeric('001', f'Welcome to Matrix {self.current_nick}')
next_batch: Optional[str] = None
while self.connected:
@@ -578,6 +569,9 @@ class Matrix(miniirc.IRC):
self.debug(self.__post(f'join/{_url_quote(args[0])}'))
elif cmd == 'PART' and len(args) == 1:
self.debug(self.__post(f'{self._get_room_url(args[0])}/leave'))
elif self.connected:
self.debug('Unknown command:', cmd)
self.__numeric('421', cmd, 'Unknown command')
def __send_tagmsg(self, channel: str, tags: dict[Any, Any]) -> None:
if tags.get('+draft/react') and tags.get('+draft/reply'):
@@ -604,6 +598,11 @@ class Matrix(miniirc.IRC):
self.handle_msg(miniirc.IRCMessage(
command, (sender, sender, sender), tags, args
))
def __numeric(self, numeric: str, *args: str) -> None:
self.handle_msg(miniirc.IRCMessage(
numeric, ('', '', ''), {}, [self.current_nick, *args]
))
else:
def __irc_msg(self, event: _Event, command: str, args: list[str],
tags: Optional[dict[str, str]] = None, *,
@@ -618,6 +617,11 @@ class Matrix(miniirc.IRC):
self._handle(command, (sender, sender, sender), tags, args)
def __numeric(self, numeric: str, *args: str) -> None:
raw_args = [self.current_nick, *args]
raw_args[-1] = ':' + raw_args[-1]
self._handle(numeric, (numeric, numeric, numeric), {}, raw_args)
@_register_event('m.room.message')
def _message_event(self, room_id: str, event: _Event) -> None:
if ('echo-message' not in self.active_caps and
@@ -693,6 +697,19 @@ class Matrix(miniirc.IRC):
'+draft/reply': relates_to.event_id[str]
})
@_register_event('im.vector.modular.widgets')
def _widget_event(self, room_id: str, event: _Event) -> None:
if event.content.type == 'jitsi':
data = event.content.data
msg = (f'\x01ACTION started a video conference: https://'
f'{data.domain[str]}/{data.conferenceId[str]}\x01')
elif event.unsigned.prev_content.type == 'jitsi':
msg = '\x01ACTION ended a video conference\x01'
else:
return
self.__irc_msg(event, 'PRIVMSG', [room_id, msg], {})
# Helpers
@classmethod
def _login(cls, homeserver: str, username: str, password: str) -> str:

View File

@@ -5,7 +5,7 @@ from setuptools import setup
setup(
name='miniirc_matrix',
version='0.0.3',
version='0.0.4',
py_modules=['miniirc_matrix'],
author='luk3yx',
description='A Matrix wrapper for miniirc.',