RuntimeError (никогда не ожидался) при использовании discord.py - PullRequest
0 голосов
/ 29 мая 2020

Я хочу добавить своему боту команду опроса, которая принимает параметры opt1 и opt2, добавить две реакции для встраивания, и у пользователей есть expir время проголосовать, а затем он отправит сообщение, у которого из вариантов было больше голосов, но у меня ошибка: RuntimeError: coroutine 'poll.<locals>.whowin' was never awaited. Не знаю как исправить! Я пробовал некоторые решения, но они не работали. Вот мой код:

@commands.cooldown(1, 45, commands.BucketType.guild)
async def poll(ctx, title, opt1, opt2, expir):
    try:
        expir = float(expir)
        if expir > 120:
            await ctx.send('Expiration time cannot be greater than 120 seconds.')
            return False
    except:
        await ctx.send('Error while converting `expir` parameter.')
        return False
    pollEmbed=discord.Embed(
        title=title,
        description='React with role below:',
        colour=discord.Colour.blue()
    )
    pollEmbed.add_field(name='Option 1', value=opt1)
    pollEmbed.add_field(name='Option 2', value=opt2)
    thisEmbed = await ctx.send(embed=pollEmbed)
    await discord.Message.add_reaction(thisEmbed, emoji='1\U000020e3')
    await discord.Message.add_reaction(thisEmbed, emoji='2\U000020e3')

    async def whowin():
        if len(users1) > len(users2):
            await ctx.send('People most voted for: {0}'.format(opt1))
            return True
        elif len(users1) < len(users2):
            await ctx.send('People most voted for: {0}'.format(opt2))
            return True
        else:
            await ctx.send('There\'s a tie!')
            return True

    pollTimer = Timer(expir, whowin)
    pollTimer.start()

@bot.event
async def on_reaction_add(reaction, user):
    if discord.Reaction.message == thisEmbed:
        if discord.Reaction.emoji == '1\U000020e3':
            users1.append(user)
        else:
            users2.append(user)

Хотя я знал ответ на вторую ошибку (NameError): я пытался сделать thisEmbed глобальным. На данный момент это исправлено, но все еще есть RuntimeError.

1 Ответ

0 голосов
/ 29 мая 2020

Из приведенного вами кода я не уверен, что Timer делает со вторым параметром, но поскольку whowin - это сопрограмма (т.е. async def), вам нужно будет вызвать и ждать it:

pollTimer = Timer(expir, await whowin())

Однако, если вы передаете функцию в свой класс Timer, то я предполагаю, что вы не ждали ее там.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...