Как проверить содержание реакции в discord.py? - PullRequest
2 голосов
/ 16 июня 2020

Я создаю тикет-систему. И мне нужно подтверждение с помощью команды /close. Но как мне это сделать? Я попробовал это с оператором if, но это не сработало. Вот что у меня:

@bot.command(name='Close', aliases=['close'])
async def close(ctx):
    if ctx.message.channel.name.startswith('ticket'):
        msg = 'The ticket is closed. If you aren\'t done yet react to this message with ?, if you are react with ?️'
        embed = discord.Embed(title='Closed ticket', description=msg)
        message = await ctx.send(content=None, embed=embed)
        await message.add_reaction('?')
        await message.add_reaction('?️')
        await ctx.message.channel.set_permissions(ctx.author, send_messages=False)
        reaction = await bot.wait_for('reaction')
        if reaction.content == '?️':
            countdown = await ctx.send('**Ticket will be closed in 10 seconds**')
            await asyncio.sleep(1)
            await countdown.edit(content='**Ticket will be closed in 9 seconds**')
            await asyncio.sleep(1)
            await countdown.edit(content='**Ticket will be closed in 8 seconds**')
            await asyncio.sleep(1)
            await countdown.edit(content='**Ticket will be closed in 7 seconds**')
            await asyncio.sleep(1)
            await countdown.edit(content='**Ticket will be closed in 6 seconds**')
            await asyncio.sleep(1)
            await countdown.edit(content='**Ticket will be closed in 5 seconds**')
            await asyncio.sleep(1)
            await countdown.edit(content='**Ticket will be closed in 4 seconds**')
            await asyncio.sleep(1)
            await countdown.edit(content='**Ticket will be closed in 3 seconds**')
            await asyncio.sleep(1)
            await countdown.edit(content='**Ticket will be closed in 2 seconds**')
            await asyncio.sleep(1)
            await countdown.edit(content='**Ticket will be closed in 1 second**')
            await asyncio.sleep(1)
            await ctx.message.channel.delete()
        if reaction.content == '?':
            await ctx.send('**Ticket reopened**')
            await ctx.message.channel.set_permissions(ctx.autor, send_messages=True)
    else:
        await ctx.send('This isnt a ticket')

И я даже не получал ошибок?

1 Ответ

0 голосов
/ 17 июня 2020

Ожидая добавления реакции, вы должны использовать "reaction_add" вместо "reaction":

@bot.command(...)
async def close(ctx):
    # Code

    # A check is usually encouraged when in a public channel,
    # but for a private channel with just one or two members, it should be fine
    reaction, user = await bot.wait_for("reaction_add")
    # Do some stuff

Два значения фактически возвращаются из этого wait_for, как показано на пример документации - reaction и user.

Кроме того, объект discord.Reaction не имеет атрибута content.
Вы действительно будете искать str(reaction) вместо:

enter image description here


Ссылки:

...