You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Discord.py使用wait_for时如何在用户答案错误时让机器人发消息

Discord.py 代码修改方案

原来的check函数仅过滤内容为hello的同频道消息,所有不符合要求的回复都会被wait_for直接忽略,自然无法触发错误提示。你可以调整check的校验逻辑,先只限定「回复由触发$greet指令的用户、在同一频道发送」,拿到用户的任意回复后再判断内容是否符合要求即可。

修改后的完整代码如下:

@client.event
async def on_message(message):
    # 忽略机器人自身发送的消息,避免触发死循环
    if message.author == client.user:
        return
    if message.content.startswith('$greet'):
        channel = message.channel
        # 记录触发指令的用户
        trigger_user = message.author
        await channel.send('Say hello!')

        # 调整check规则:仅校验同用户、同频道,不限制回复内容
        def check(m):
            return m.author == trigger_user and m.channel == channel

        # 监听获取符合校验规则的用户回复
        msg = await client.wait_for('message', check=check)
        # 单独判断回复内容是否符合要求
        if msg.content == 'hello':
            await channel.send(f'Hello {msg.author}!')
        else:
            await channel.send('回复错误,请输入正确内容「hello」')

额外优化说明:

  • 新增的机器人自身消息过滤是Discord.py开发的通用最佳实践,可避免机器人误触发自身的指令逻辑
  • 调整后的check规则同时解决了原代码的逻辑漏洞:原代码只要是同频道任意用户发送hello都会触发问候,现在只会响应触发$greet指令的特定用户
  • 如果需要给用户回复加超时限制,可给wait_for添加timeout参数,示例:await client.wait_for('message', check=check, timeout=30),超时后会抛出asyncio.TimeoutError,你可以添加try...except块捕获该异常,自定义超时提示内容

内容的提问来源于stack exchange,提问作者QWERTY

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 22:24:04