python - 机器人发送大量消息 - Discord.Py
问题描述
我想在 discord.py 中创建一个命令,该命令稍后会检测到附加消息,但在正确检测到消息后,机器人不知道为什么它开始发送垃圾邮件,这是我的代码:
@client.command(aliases = ['dragon-panic'])
async def dp(ctx):
await ctx.send("Welcome to the dragon panic. Scheme win is below. Drag 3 cards.\n" +
"\n Dragon Cards: Fire, Iron, Forest, Sea, Mountain")
await ctx.send("Fire beats Forest\nFire beats Mountain\nForest beats Sea\nForest beats Iron" +
"\nSea beats Fire\nSea beats Mountain\nMountain beats Forest\nMountain beats Iron" +
"\nIron beats Fire\nIron beats Sea")
dragon = ['fire', 'forest', 'sea', 'mountain', 'iron']
@client.event
async def on_message(message):
for i in "dragon":
if 'Fire' in message.content:
await ctx.send('You picked Fire Dragon')
break
elif 'Forest' in message.content:
await ctx.send('You picked Forest Dragon')
break
elif 'Sea' in message.content:
await ctx.send('You picked Sea Dragon')
break
elif 'Mountain' in message.content:
await ctx.send('You picked Mountain Dragon')
break
elif 'Iron' in message.content:
await ctx.send('You picked Iron Dragon')
else:
await ctx.send('No dragon with that name!')
break
break
解决方案
正如@Łukasz Kwieciński 指出的那样,不要将事件放在命令中;您的on_message
事件应该独立于任何命令之外。相反,您应该使用wait_for
. 用这个替换你的代码,它应该可以正常工作:
@client.command(aliases = ['dragon-panic'])
async def dp(ctx):
await ctx.send("Welcome to the dragon panic. Scheme win is below. Drag 3 cards.\n" +
"\n Dragon Cards: Fire, Iron, Forest, Sea, Mountain")
await ctx.send("Fire beats Forest\nFire beats Mountain\nForest beats Sea\nForest beats Iron" +
"\nSea beats Fire\nSea beats Mountain\nMountain beats Forest\nMountain beats Iron" +
"\nIron beats Fire\nIron beats Sea")
dragon = ['Fire', 'Forest', 'Sea', 'Mountain', 'Iron']
def check(m):
return m.channel == ctx.channel and m.author == ctx.author
try:
message = await client.wait_for('message', timeout=7.0, check=check)
except asyncio.TimeoutError:
await ctx.send('Dragon not picked in time')
else:
for i in dragon:
if i.lower() in message.content.lower():
await ctx.send(f'You picked {i} Dragon')
break
else:
await ctx.send('No dragon with that name!')
timeout=7.0
限制命令等待下一条消息的时间 - 在本例中为 7 秒。您可以将其修改为您自己的时间值。在此示例中,如果用户在 7 秒内没有响应,则机器人将打印出Dragon not picked in time
.
推荐阅读
- c# - 通过列表
从“WebInterfaceProject”中的控制器到“DataLibraryProject”中的处理器方法 - python - 使用依赖条件过滤 DataFrame 中的行
- powershell - 如何在powershell中为herestring/heredoc设置编码?
- mysql - 如何避免多个程序写入同一个数据库的无效数据?
- javascript - 使用 React Hooks 引用 DOM 元素
- r - 将季度数据分解为 R 中的每日数据保持值?
- python - Python 看门狗,在 event.modification 上观察目录并重命名文件
- sql - 将 msdb.dbo.sysjobsteps.command 过滤到单独的列中
- laravel - Laravel 中不存在方法链接
- php - 出现错误“'字段列表'中的未知列'文本'”