Esempio n. 1
0
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()