Esempio n. 1
0
def _sqlite_adapters():
    def adapt_ieee(eui64):
        return str(eui64)

    aiosqlite.register_adapter(t.EUI64, adapt_ieee)
    aiosqlite.register_adapter(t.ExtendedPanId, adapt_ieee)

    def convert_ieee(s):
        return t.EUI64.convert(s.decode())

    aiosqlite.register_converter("ieee", convert_ieee)
Esempio n. 2
0
    def __init__(self, bot):
        self.bot = bot
        aiosqlite.register_adapter(commands.Command, lambda x: pickle.dumps(x))
        bot.loop.create_task(self.cmd_init())

        async def react_and_wait(msg: discord.Message, **kwargs) -> tuple:
            """
            Allows for users to respond with either a string or an emoji representation of it.
            The kwarg should be written as {"str_repr"=emoji}.
            """
            for emote in kwargs.values():
                await msg.add_reaction(emote)

            def check_msg(_msg):
                return all(
                    (_msg.content in kwargs.keys(),
                     _msg.channel == msg.channel, _msg.author == msg.author))

            def check_reaction(_reaction, user):
                return all((_reaction.emoji in kwargs.keys(),
                            _reaction.message == msg, user == msg.author))

            # ?tag wait_for multiple in dpy for more info
            done, pending = await asyncio.wait(
                (self.bot.wait_for("message", check=check_msg),
                 self.bot.wait_for("reaction_add", check=check_reaction)),
                return_when=asyncio.FIRST_COMPLETED,
                timeout=60  # TODO: Configurable timeout
            )
            try:
                coro = done.pop().result()
            except IndexError:
                return await msg.channel.send("Choice timed out.")

            for future in done:
                future.exception()
            for future in pending:
                future.cancel()

            if isinstance(coro, discord.Message):
                return coro.content, "message", coro
            else:
                reaction, _ = coro
                return {v: k
                        for k, v in kwargs.items()
                        }.get(str(reaction.emoji)), "reaction_add", coro

        bot.react_and_wait = react_and_wait