12
12
import miniirc , requests , traceback # type: ignore
13
13
14
14
15
- ver = (0 , 0 , 3 )
15
+ ver = (0 , 0 , 4 )
16
16
__version__ = '.' .join (map (str , ver ))
17
17
18
18
@@ -460,16 +460,7 @@ def disconnect(self) -> None:
460
460
461
461
def _main (self ) -> None :
462
462
try :
463
- if miniirc .ver >= (2 , 0 , 0 ):
464
- self .handle_msg (miniirc .IRCMessage ('001' , ('' , '' , '' ), {}, [
465
- self .current_nick ,
466
- f'Welcome to Matrix { self .current_nick } '
467
- ]))
468
- else :
469
- self ._handle ('001' , ('001' , '001' , '001' ), {}, [
470
- self .current_nick ,
471
- f':Welcome to Matrix { self .current_nick } '
472
- ])
463
+ self .__numeric ('001' , f'Welcome to Matrix { self .current_nick } ' )
473
464
474
465
next_batch : Optional [str ] = None
475
466
while self .connected :
@@ -578,6 +569,9 @@ def send(self, cmd: str, *args: str, force: Optional[bool] = None,
578
569
self .debug (self .__post (f'join/{ _url_quote (args [0 ])} ' ))
579
570
elif cmd == 'PART' and len (args ) == 1 :
580
571
self .debug (self .__post (f'{ self ._get_room_url (args [0 ])} /leave' ))
572
+ elif self .connected :
573
+ self .debug ('Unknown command:' , cmd )
574
+ self .__numeric ('421' , cmd , 'Unknown command' )
581
575
582
576
def __send_tagmsg (self , channel : str , tags : dict [Any , Any ]) -> None :
583
577
if tags .get ('+draft/react' ) and tags .get ('+draft/reply' ):
@@ -604,6 +598,11 @@ def __irc_msg(self, event: _Event, command: str, args: list[str],
604
598
self .handle_msg (miniirc .IRCMessage (
605
599
command , (sender , sender , sender ), tags , args
606
600
))
601
+
602
+ def __numeric (self , numeric : str , * args : str ) -> None :
603
+ self .handle_msg (miniirc .IRCMessage (
604
+ numeric , ('' , '' , '' ), {}, [self .current_nick , * args ]
605
+ ))
607
606
else :
608
607
def __irc_msg (self , event : _Event , command : str , args : list [str ],
609
608
tags : Optional [dict [str , str ]] = None , * ,
@@ -618,6 +617,11 @@ def __irc_msg(self, event: _Event, command: str, args: list[str],
618
617
619
618
self ._handle (command , (sender , sender , sender ), tags , args )
620
619
620
+ def __numeric (self , numeric : str , * args : str ) -> None :
621
+ raw_args = [self .current_nick , * args ]
622
+ raw_args [- 1 ] = ':' + raw_args [- 1 ]
623
+ self ._handle (numeric , (numeric , numeric , numeric ), {}, raw_args )
624
+
621
625
@_register_event ('m.room.message' )
622
626
def _message_event (self , room_id : str , event : _Event ) -> None :
623
627
if ('echo-message' not in self .active_caps and
@@ -693,6 +697,19 @@ def _reaction_event(self, room_id: str, event: _Event) -> None:
693
697
'+draft/reply' : relates_to .event_id [str ]
694
698
})
695
699
700
+ @_register_event ('im.vector.modular.widgets' )
701
+ def _widget_event (self , room_id : str , event : _Event ) -> None :
702
+ if event .content .type == 'jitsi' :
703
+ data = event .content .data
704
+ msg = (f'\x01 ACTION started a video conference: https://'
705
+ f'{ data .domain [str ]} /{ data .conferenceId [str ]} \x01 ' )
706
+ elif event .unsigned .prev_content .type == 'jitsi' :
707
+ msg = '\x01 ACTION ended a video conference\x01 '
708
+ else :
709
+ return
710
+
711
+ self .__irc_msg (event , 'PRIVMSG' , [room_id , msg ], {})
712
+
696
713
# Helpers
697
714
@classmethod
698
715
def _login (cls , homeserver : str , username : str , password : str ) -> str :
0 commit comments