diff --git a/bot.py b/bot.py index 7ecb454..d92084a 100755 --- a/bot.py +++ b/bot.py @@ -81,11 +81,10 @@ class Bot: def save_settings(self): module_settings = dict() for modulename, moduleobject in self.modules.items(): - if "get_settings" in dir(moduleobject): - try: - module_settings[modulename] = moduleobject.get_settings() - except Exception: - traceback.print_exc(file=sys.stderr) + try: + module_settings[modulename] = moduleobject.get_settings() + except Exception: + traceback.print_exc(file=sys.stderr) data = {self.appid: self.version, 'module_settings': module_settings} self.set_account_data(data) @@ -96,12 +95,11 @@ class Bot: return for modulename, moduleobject in self.modules.items(): if data['module_settings'].get(modulename): - if "set_settings" in dir(moduleobject): - try: - moduleobject.set_settings( - data['module_settings'][modulename]) - except Exception: - traceback.print_exc(file=sys.stderr) + try: + moduleobject.set_settings( + data['module_settings'][modulename]) + except Exception: + traceback.print_exc(file=sys.stderr) async def message_cb(self, room, event): # Figure out the command @@ -118,7 +116,7 @@ class Bot: moduleobject = self.modules.get(command) - if moduleobject.enabled and ("matrix_message" in dir(moduleobject)): + if moduleobject.enabled: try: await moduleobject.matrix_message(bot, room, event) except CommandRequiresAdmin: @@ -153,7 +151,7 @@ class Bot: module = importlib.import_module('modules.' + modulename) module = reload(module) cls = getattr(module, 'MatrixModule') - return cls() + return cls(modulename) except ModuleNotFoundError: print('Module ', modulename, ' failed to load!') traceback.print_exc(file=sys.stderr) @@ -183,11 +181,10 @@ class Bot: self.pollcount = self.pollcount + 1 for modulename, moduleobject in self.modules.items(): if moduleobject.enabled: - if "matrix_poll" in dir(moduleobject): - try: - await moduleobject.matrix_poll(bot, self.pollcount) - except Exception: - traceback.print_exc(file=sys.stderr) + try: + await moduleobject.matrix_poll(bot, self.pollcount) + except Exception: + traceback.print_exc(file=sys.stderr) await asyncio.sleep(10) def set_account_data(self, data): @@ -221,15 +218,14 @@ class Bot: print("NOTE: check MATRIX_ACCESS_TOKEN or set MATRIX_PASSWORD") sys.exit(2) - def init(self): - self.matrix_user = os.getenv('MATRIX_USER') - self.matrix_pass = os.getenv('MATRIX_PASSWORD') - matrix_server = os.getenv('MATRIX_SERVER') - bot_owners = os.getenv('BOT_OWNERS') - access_token = os.getenv('MATRIX_ACCESS_TOKEN') - join_on_invite = os.getenv('JOIN_ON_INVITE') + self.matrix_user = os.getenv('MATRIX_USER') + self.matrix_pass = os.getenv('MATRIX_PASSWORD') + matrix_server = os.getenv('MATRIX_SERVER') + bot_owners = os.getenv('BOT_OWNERS') + access_token = os.getenv('MATRIX_ACCESS_TOKEN') + join_on_invite = os.getenv('JOIN_ON_INVITE') if matrix_server and self.matrix_user and bot_owners: self.client = AsyncClient(matrix_server, self.matrix_user) @@ -255,22 +251,18 @@ class Bot: print(f'Starting {len(enabled_modules)} modules..') for modulename, moduleobject in self.modules.items(): if moduleobject.enabled: - print('Starting', modulename, '..') - if "matrix_start" in dir(moduleobject): - try: - moduleobject.matrix_start(bot) - except Exception: - traceback.print_exc(file=sys.stderr) + try: + moduleobject.matrix_start(bot) + except Exception: + traceback.print_exc(file=sys.stderr) def stop(self): print(f'Stopping {len(self.modules)} modules..') for modulename, moduleobject in self.modules.items(): - print('Stopping', modulename, '..') - if "matrix_stop" in dir(moduleobject): - try: - moduleobject.matrix_stop(bot) - except Exception: - traceback.print_exc(file=sys.stderr) + try: + moduleobject.matrix_stop(bot) + except Exception: + traceback.print_exc(file=sys.stderr) async def run(self): if not self.client.access_token: diff --git a/modules/bot.py b/modules/bot.py index 39fc2a5..eaaf5bf 100644 --- a/modules/bot.py +++ b/modules/bot.py @@ -4,11 +4,12 @@ from modules.common.module import BotModule class MatrixModule(BotModule): - def __init__(self): - super().__init__() + def __init__(self, name): + super().__init__(name) self.enable() def matrix_start(self, bot): + super().matrix_start(bot) self.starttime = datetime.now() async def matrix_message(self, bot, room, event): diff --git a/modules/common/module.py b/modules/common/module.py index aaa62bf..db39f2e 100644 --- a/modules/common/module.py +++ b/modules/common/module.py @@ -25,8 +25,9 @@ class BotModule(ABC): """ - def __init__(self): + def __init__(self, name): self.enabled = False + self.name = name def matrix_start(self, bot): """Called once on startup @@ -34,7 +35,7 @@ class BotModule(ABC): :param bot: a reference to the bot :type bot: Bot """ - pass + print('Starting', self.name, '..') @abstractmethod async def matrix_message(self, bot, room, event): @@ -55,7 +56,7 @@ class BotModule(ABC): :param bot: a reference to the bot :type bot: Bot """ - pass + print('Stopping', self.name, '..') async def matrix_poll(self, bot, pollcount): """Called every 10 seconds diff --git a/modules/common/pollingservice.py b/modules/common/pollingservice.py index 88623a0..bedac51 100644 --- a/modules/common/pollingservice.py +++ b/modules/common/pollingservice.py @@ -5,7 +5,8 @@ from modules.common.module import BotModule class PollingService(BotModule): - def __init__(self): + def __init__(self, name): + super().__init__(name) self.known_ids = set() self.account_rooms = dict() # Roomid -> [account, account..] self.next_poll_time = dict() # Roomid -> datetime, None = not polled yet diff --git a/modules/help.py b/modules/help.py index dc77952..2914165 100644 --- a/modules/help.py +++ b/modules/help.py @@ -3,8 +3,8 @@ from modules.common.module import BotModule class MatrixModule(BotModule): - def __init__(self): - super().__init__() + def __init__(self, name): + super().__init__(name) self.enable() async def matrix_message(self, bot, room, event): @@ -17,7 +17,7 @@ class MatrixModule(BotModule): msg = msg + ' - ' + moduleobject.help() + '\n' except AttributeError: pass - msg + msg + '\n' + msg = msg + '\n' msg = msg + "\nAdd your own commands at https://github.com/vranki/hemppa" await bot.send_text(room, msg) diff --git a/modules/loc.py b/modules/loc.py index 7e1217f..6fb6c1d 100644 --- a/modules/loc.py +++ b/modules/loc.py @@ -7,6 +7,7 @@ class MatrixModule(BotModule): bot = None def matrix_start(self, bot): + super().matrix_start(bot) self.bot = bot bot.client.add_event_callback(self.unknown_cb, RoomMessageUnknown) diff --git a/modules/off/googlecal.py b/modules/off/googlecal.py index 0a49cfd..b778acf 100644 --- a/modules/off/googlecal.py +++ b/modules/off/googlecal.py @@ -22,6 +22,7 @@ from modules.common.module import BotModule class MatrixModule(BotModule): def matrix_start(self, bot): + super().matrix_start(bot) self.bot = bot self.SCOPES = ['https://www.googleapis.com/auth/calendar.readonly'] self.credentials_file = "credentials.json" diff --git a/modules/off/ig.py b/modules/off/ig.py index 15a4226..7ec3e46 100644 --- a/modules/off/ig.py +++ b/modules/off/ig.py @@ -11,8 +11,8 @@ from modules.common.pollingservice import PollingService class MatrixModule(PollingService): - def __init__(self): - super().__init__() + def __init__(self, name): + super().__init__(name) self.instagram = Instagram() self.service_name = 'Instagram' diff --git a/modules/off/twitter.py b/modules/off/twitter.py index 4479368..0582ea7 100644 --- a/modules/off/twitter.py +++ b/modules/off/twitter.py @@ -9,8 +9,8 @@ from modules.common.pollingservice import PollingService # https://github.com/taspinar/twitterscraper/tree/master/twitterscraper class MatrixModule(PollingService): - def __init__(self): - super().__init__() + def __init__(self, name): + super().__init__(name) self.service_name = 'Twitter' async def poll_implementation(self, bot, account, roomid, send_messages): diff --git a/modules/off/url.py b/modules/off/url.py index 3f37e56..8d4a775 100644 --- a/modules/off/url.py +++ b/modules/off/url.py @@ -30,6 +30,7 @@ class MatrixModule(BotModule): """ Register callback for all RoomMessageText events on startup """ + super().matrix_start(bot) self.bot = bot bot.client.add_event_callback(self.text_cb, RoomMessageText) diff --git a/modules/ping.py b/modules/ping.py index a40f425..a6acbc3 100755 --- a/modules/ping.py +++ b/modules/ping.py @@ -15,7 +15,7 @@ class MatrixModule(BotModule): # print ("adding trailing https") url = "https://" + url - print(url) + print("ping:", url) start = timer() try: