X-Git-Url: http://git.kaliko.me/?a=blobdiff_plain;f=sid%2Fsid.py;h=7d2f4b7b362fc166c2cf2c98cd112bda44067f17;hb=e1ff749af5e6fa7f31308d685f3a67b487f8f170;hp=d412ac4ad65d362b0427cdafb35a2f6485e8e7bd;hpb=16a1747dce0c01b1659cb5e287254bcd434000ed;p=sid.git diff --git a/sid/sid.py b/sid/sid.py index d412ac4..7d2f4b7 100644 --- a/sid/sid.py +++ b/sid/sid.py @@ -1,20 +1,8 @@ # -*- coding: utf-8 -*- - -# Copyright (C) 2007-2012 Thomas Perl -# Copyright (C) 2010, 2011 Anaël Verrier -# Copyright (C) 2014, 2015, 2020 kaliko - -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, version 3 only. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . +# SPDX-FileCopyrightText: 2007-2012 Thomas Perl +# SPDX-FileCopyrightText: 2010, 2011 Anaël Verrier +# SPDX-FileCopyrightText: 2014, 2015, 2020, 2023 kaliko +# SPDX-License-Identifier: GPL-3.0-or-later import inspect @@ -23,7 +11,7 @@ import traceback import slixmpp -from sid import __url__ +from sid import __url__, __doc__ def botcmd(*args, **kwargs): @@ -90,6 +78,9 @@ class MUCBot(slixmpp.ClientXMPP): self.add_event_handler('message', self.message) self.add_event_handler('got_online', self._view) + # Handles disconnection + self.add_event_handler('disconnected', self.disconn) + # Discover bot internal command (ie. help) for name, value in inspect.getmembers(self): if inspect.ismethod(value) and \ @@ -110,6 +101,12 @@ class MUCBot(slixmpp.ClientXMPP): self.log.setLevel(log_level) self.log.debug('set logger, log level : %s', log_level) + def disconn(self, event): + """disconnected handler""" + msg = ": %s" % event if event else "‽" + self.log.info('Disconnected from server%s', msg) + self.connect() + def message(self, msg): """Messages handler @@ -123,9 +120,11 @@ class MUCBot(slixmpp.ClientXMPP): body = msg['body'].strip() if not body.startswith(MUCBot.prefix): return - if msg['from'] not in self.__seen: - self.log.warning('Will not handle message from unseen jid: %s', msg['from']) - #return + self.log.debug(msg['from']) + if msg['from'] not in self.__seen and msg['type'] == 'chat': + self.log.warning('Will not handle direct message' + 'from unseen jid: %s', msg['from']) + return args = body[1:].split() cmd = args.pop(0) if cmd not in self.commands: @@ -161,11 +160,13 @@ class MUCBot(slixmpp.ClientXMPP): """ await self.get_roster() self.send_presence() - self.plugin['xep_0045'].join_muc(self.room, + await self.plugin['xep_0045'].join_muc_wait(self.room, self.nick, + # Do not fetch history + seconds=0, # If a room password is needed, use: # password=the_room_password, - wait=True) + ) def register_bot_plugin(self, plugin_cls): """Registers plugin, takes a class, the method instanciates the plugin @@ -199,6 +200,7 @@ class MUCBot(slixmpp.ClientXMPP): Automatically assigned to the "help" command.""" help_cmd = ('Type {}help '.format(self.prefix) + ' to get more info about that specific command.\n\n' + + f'DOC: {__doc__}\n' + f'SRC: {__url__}') if not args: if self.__doc__: