允许不和谐等待反应?

问题描述 投票:0回答:1

我一直在学习如何使用 Discord.py 创建一个不和谐的机器人,我想改进我的机器人中的命令。我想要做到这一点的方法之一是添加“等待”时间。这将执行以下操作:

  1. 等待用户通过反应向机器人输入数据。
  2. 如果用户给出反应,则处理响应;如果用户未给出反应,则处理不同的响应。

我当前的代码只是处理命令,我不知道如何创建“等待”时间。这是下面的代码:

```python
@commands.command()
async def hello(a: str):
     await ctx.send(f"hello {a}")
```
python python-3.x discord.py command
1个回答
1
投票

wait_for

检测反应的方法是使用

wait_for
功能。这将执行指定的操作,然后等待直到时间过去。您还可以执行一项检查来查看是否满足条件。在下面的示例中,我使用了
add_reaction
这是discord.py 文档中的页面。

下面我附加了一些代码,将列表中的反应添加到消息中并等待反应。然后,机器人将用户的帐户名和反应索引添加到带有分隔符的文本文件中。对于您想要的响应,只需更改

else
语句中的代码即可。

代码

import discord
from discord.ext import commands #<---- Importing Libraries
import asyncio


intents = discord.Intents.default()
intents.members = True            #<----- All the intents
intents.reactions = True

bot = commands.Bot(command_prefix='?')

@bot.command(pass_context=True) 
async def name(ctx):
    file_ = open("Storage/names.txt", "a")
    channel = ctx.channel
    react = ["🇦","🇧","🇨"]    #<----- The reactions being added
    
    mes = await channel.send('Send me that reaction, mate')   #<---- The message with the reactions
    for tmp in react:
        await mes.add_reaction(tmp)   #<---- Adding all of the reactions

    def check(reaction, user):
        return user == ctx.author and str(reaction.emoji) in react  #<---- The check performed

    try:
        reaction, user = await bot.wait_for('reaction_add', timeout=10.0, check=check) #<--- Waiting for the reaction
    except asyncio.TimeoutError:  #<---- If the user doesn't respond
        await channel.send('👎')
    else:
        i = react.index(str(reaction))
        entry = str(i) + "|" + str(ctx.author) + "\n"   #<------- The response if there is a reaction
        file_.write(entry)
        file_.close()
        await ctx.send("Done!")

bot.run("TOKEN")

测试

如果用户没有做出反应:

如果用户做出反应:

© www.soinside.com 2019 - 2024. All rights reserved.