我一直在学习如何使用 Discord.py 创建一个不和谐的机器人,我想改进我的机器人中的命令。我想要做到这一点的方法之一是添加“等待”时间。这将执行以下操作:
我当前的代码只是处理命令,我不知道如何创建“等待”时间。这是下面的代码:
```python
@commands.command()
async def hello(a: str):
await ctx.send(f"hello {a}")
```
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")
如果用户做出反应: