class SarcasmBot(object): instance = None def __init__(self): assert SarcasmBot.instance is None SarcasmBot.instance = self self.bot = None self.loop = aio.get_event_loop() self.msg_loop = None def start(self, token): self.bot = telepot.aio.DelegatorBot(token, [ include_callback_query_chat_id(pave_event_space())( per_chat_id(), create_open, SarcasmUser, timeout=10), ]) self.msg_loop = MessageLoop(self.bot) self.loop.create_task(MessageLoop(self.bot).run_forever()) self.loop.run_forever() def stop(self): SarcasmBot.instance = None if self.msg_loop: self.msg_loop.cancel() self.msg_loop = None def __enter__(self): return self def __exit__(self, type, value, tb): self.stop()
class ShoppingBot(object): instance = None def __init__(self, verbose=False): assert ShoppingBot.instance is None ShoppingBot.instance = self self.verbose = verbose self.bot = None self.loop = aio.get_event_loop() self.msg_loop = None self.callbacks = {} def start(self, token): self.bot = telepot.aio.DelegatorBot(token, [ include_callback_query_chat_id(pave_event_space())( per_chat_id(), create_open, ShoppingUser, timeout=10), ]) self.msg_loop = MessageLoop(self.bot) self.loop.create_task(self.msg_loop.run_forever()) self.loop.run_forever() def stop(self): ShoppingBot.instance = None if self.msg_loop: self.msg_loop.cancel() self.msg_loop = None @classmethod def is_verbose(cls): return cls.instance.verbose @classmethod def add_callback(cls, event, cb): assert event in ('cmd', 'add-product', 'flag-product', 'end') cls.instance.callbacks[event] = cls.instance.callbacks.get(event, []) cls.instance.callbacks[event].append(cb) @classmethod async def trigger(cls, event, user, *args, **kwargs): assert event in ('cmd', 'add-product', 'flag-product', 'end') result = True for cb in cls.instance.callbacks.get(event, []): cur = await cb(cls.instance.bot, user, *args, **kwargs) result = result & (cur is None or cur) if result is False: return False return result def __enter__(self): return self def __exit__(self, type, value, tb): self.stop()