命令 discord.py 中的客户端事件
Posted
技术标签:
【中文标题】命令 discord.py 中的客户端事件【英文标题】:Client Event in command discord.py 【发布时间】:2021-06-12 22:16:20 【问题描述】:我目前正在制作一个带有教程的不和谐机器人,我希望如果成员键入“下一步”,则下一步发送。
代码:
async def pytutorial(ctx):
embed=discord.Embed(title="Help for Wolf-Hosting Bot", description="panel.wolf-hosting.nl", color=0x0400ff)
embed.set_thumbnail(url="https://cdn.discordapp.com/icons/807978904727191572/0704feeefd7a91c1abb2c37f9c9cc4f4.webp?size=256")
embed.add_field(name="Welcome to the Wolf Hosting python tutorial!", value="We are first going to start with chosing an editor. I prefer using VSCode.", inline=True)
embed.add_field(name='Type "next" for the next step.', value="Don't include the """, inline=True)
embed.add_field(name="Download VSCode:", value="https://code.visualstudio.com/download", inline=False)
await ctx.send(embed=embed)
@client.event
async def on_message(message):
if "next" in message.content:
embed=discord.Embed(title="Help for Wolf-Hosting Bot", description="panel.wolf-hosting.nl", color=0x0400ff)
embed.set_thumbnail(url="https://cdn.discordapp.com/icons/807978904727191572/0704feeefd7a91c1abb2c37f9c9cc4f4.webp?size=256")
embed.add_field(name="Installing discord.py", value='First click on Terminal in VSCode. Type "py -3 -m pip install -U discord.py".', inline=True)
embed.add_field(name='Type "next" for the next step.', value="Don't include the """, inline=True)
embed.add_field(name="More advanced explaining:", value="https://discordpy.readthedocs.io/en/latest/intro.html#installing", inline=False)
await ctx.send(embed=embed)
问题:on_message 事件一直在运行,人们无法再运行其他命令。 问题:如何在命令中创建一个事件(或者更好的方式来编写这个 xd)
【问题讨论】:
我想你在找wait_for
【参考方案1】:
等待消息或任何 discord.py 事件可以通过bot.wait_for
完成
@bot.command() #assuming bot since you haven't specified
async def command(ctx):
#show help or some embed here
try:
msg = await bot.wait_for('message', check = lambda x: 'next' in x.content and x.author == ctx.author, timeout = 30) #use self.bot.wait_for in cogs
except asyncio.TimeoutError:
await ctx.send('You took too long to respond')
finally:
#do other stuff here
await msg.channel.send('hi')
使用bot.wait_for
:
-
第一个参数是你等待的事件,这样的事件都传
事件检查,检查函数采用与
on_event
函数相同的参数。例如 on_message
将 message
作为参数。
检查函数应该返回一个布尔值。如果消息包含next
并且作者与命令作者相同,我们的检查函数返回true。
timeout 参数告诉机器人等待多长时间,如果超时,asyncio.TimeoutError
被引发,我们通过 try 和 except 捕获它。
参考资料:
bot.wait_for discord.py events【讨论】:
没有string.contains
这样的东西,在python中使用了in
关键字,所以你应该使用x.content.contains('next')
而不是x.content.contains('next')
。而且他使用的是client
而不是bot
已编辑,抱歉以上是关于命令 discord.py 中的客户端事件的主要内容,如果未能解决你的问题,请参考以下文章
discord.py bot 找到要删除的频道消息,但显示其客户端 ID 与我的相同
关闭 Discord 机器人连接而不终止命令行 (discord.py)