如何在discord.py中使用wait_for重写

时间:2020-08-07 10:56:55

标签: discord discord.py discord.py-rewrite

我一直在制作一个不和谐的机器人,并尝试制作使用反应的命令。我已经看到使用wait_for是实现这一目标的最佳方法。如果有人可以提供以下示例:

•通过反应来扮演角色

•使用反应来创建频道

•使用反应来编辑消息

如果您可以逐行分解代码,以便我可以学习它(如果仅复制粘贴),那么将不胜感激。预先谢谢你

2 个答案:

答案 0 :(得分:0)

该文档有很好的解释,但起初可能很难理解, 通常,反应角色是这样完成的(如果我们暂时不使用数据库):

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)

答案 1 :(得分:0)

这是我通常在执行检查时使用的

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

如果需要,您还可以列出可以做出反应的用户列表,并在检查中检查该用户是否在用户中 不和谐的话,你可以做成员==用户