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

discord.py中wait_for参数解析及DM用户输入采集代码优化

wait_for 参数含义说明
  • 第一个位置参数'message'是discord.py内置的事件类型标识:用于告诉wait_for方法需要监听「用户发送聊天消息」这一特定事件,而非按钮点击、表情回应、服务器成员变动等其他机器人可捕获的交互行为。对应事件触发时,方法会返回一个完整的discord.Message对象,包含消息内容、发送者、发送频道等全部属性。
  • check=check(ctx.author) 是自定义的事件过滤规则:核心是传入一个校验函数,只有满足函数内判断条件的事件,才会被wait_for捕获。参考代码中传入的check(ctx.author)是开发者自行封装的工具函数,常规逻辑是校验触发事件的用户是否为指令发起者,避免将其他用户发送的无关消息误识别为目标输入,是交互流程防混淆的必要逻辑。
现有代码问题排查与优化方案

原有代码存在几个必现的运行错误,对应优化点如下:

  • 未定义check校验函数:check(ctx.author)并非discord.py内置方法,直接调用会触发名称未定义报错
  • set_footer传参格式错误:该方法要求必须通过text=关键字传入页脚文本,直接将字符串作为位置参数传入会触发类型错误
  • 消息接收范围不匹配:交互流程设定为用户在DM内回复,但未校验消息是否来自指定用户、是否为DM频道消息,极易误接收公屏上的无关内容
  • 取值逻辑错误:wait_for返回的是完整消息实例,并非用户输入的纯文本,直接将该实例作为发送内容,只会输出无意义的类实例字符串
  • 无异常捕获:当用户在30秒内未回复时,wait_for会抛出超时异常,直接导致指令运行崩溃

优化后可正常运行的完整代码:

import discord
from discord.ext import commands
import asyncio

# 自定义校验函数:仅接收指定用户在DM频道发送的消息
def check_dm_reply(author: discord.User):
    def match_condition(message: discord.Message):
        # 两个判断条件:发消息的人是指令发起者,且消息发送在DM频道
        return message.author == author and isinstance(message.channel, discord.DMChannel)
    return match_condition

@client.command()
async def event(ctx):
    try:
        await ctx.send("Prompt will continue in DMs.")
        embed = discord.Embed(
            title="Event Prompt",
            description="Please specify the type of event."
        )
        # 修正set_footer传参格式,明确超时提示
        embed.set_footer(text="Prompt will expire in 30 seconds")
        await ctx.author.send(embed=embed)

        # 等待用户的DM回复
        received_msg = await client.wait_for(
            'message',
            check=check_dm_reply(ctx.author),
            timeout=30
        )
        # 提取用户输入的纯文本内容
        event_type = received_msg.content
        await ctx.send(f"Recorded event type: {event_type}")
    except asyncio.TimeoutError:
        # 捕获超时场景,给用户发送提示
        await ctx.author.send("Prompt expired. Please re-run the command to try again.")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 20:36:11