Как использовать wait_for в переписывании discord.py - PullRequest
1 голос
/ 07 августа 2020

Я делал диссонанса бота и пробовал делать команды, использующие реакции. Я видел, что использование wait_for - лучший способ добиться именно этого. Если бы кто-нибудь мог привести несколько примеров:

• Использование реакций для определения ролей

• Использование реакций для создания канала

• Использование реакций для редактирования сообщения

Если бы вы могли разбить код построчно, чтобы я мог выучить его, просто скопировав вставку, это было бы очень признательно. Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 07 августа 2020

Это то, что я обычно использую, поскольку он реализует проверки

message = ctx.send("message")
reactions = [...]
def check(r:discord.reaction, u:discord.user):
    checker = message.id == reaction.message.id
    checker = checker and u == message.author
    checker = checker and r in reactions
    return checker

while true:
    reaction, user = await self.bot.wait_for("reaction_add",check=check)
    if reaction == reactions[0]:
        ctx.send("reaction one")
    elif reaction == reactions[1]:
        ctx.send("reaction two")
    elif reaction == reactions[2]:
        break

Если вы хотите, вы также можете иметь список пользователей, которые могут реагировать, и в проверке проверять, находится ли пользователь в разногласиях с вами может сделать member == user

0 голосов
/ 07 августа 2020

В документации есть отличное объяснение, но сначала может быть трудно понять, обычно роли реакции выполняются следующим образом (если мы пока оставим базы данных):

reaction, user = await self.bot.wait_for('reaction')

if str(reaction.emoji) == '?':
    role = discord.utils.get(ctx.guild.roles, name='thumbsup')
    await user.add_roles(role)

elif str(reaction.emoji) == '?':
    role = discord.utils.get(ctx.guild.roles, name='thumbsdown')
    await user.add_roles(role)  

, но этот код можно оптимизировать таким образом, он также имитирует базу данных:

reaction, user = await self.bot.wait_for('reaction')
roles = {'?': 'thumbsup', '?': 'thumbsdown'}

role = discord.utils.get(ctx.guild.roles, name=roles[str(reaction.emoji)])
await user.add_roles(role)
...