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

discord.py中reply命令无法接收完整多词消息参数的问题

问题原因

discord.py 框架下的命令默认按空格分割用户输入的指令后缀内容,按照函数声明的参数顺序依次赋值。你当前实现的reply命令仅定义了id、message两个位置参数,当用户输入!reply XXXXX Test 1时,参数匹配逻辑如下:

  • 指令后第一段空格分隔的内容XXXXX 被赋值给id参数
  • 第二段空格分隔的内容Test 被赋值给message参数
  • 第三段及之后的内容(本例中的1)没有对应的参数接收,会被框架直接丢弃,因此无法被正常捕获。
    另外你现有代码的私信发送逻辑存在写法错误:DMChannel.send是类方法不能直接调用,获取到目标用户对象后,直接调用用户实例的send方法即可发送私信。
修复方法

在message参数前添加*标记,discord.py 识别到该标记后,会自动将id参数之后的所有剩余输入(包含空格)全部传入message参数,同时修正私信发送的错误写法即可。

修复后的完整代码:

@bot.command()
async def reply(ctx, id, *, message):
    found = False

    with open('data.json', 'r') as f:
        data = json.load(f)

    for entry in data:
        # 注意:如果data.json中存储的message_id是整数类型,需要将输入的id转为int再比对,即 int(id) == entry["message_id"],避免类型不匹配导致查找失败
        if entry["message_id"] == id:
            found = True
            user_id = entry["user_id"]
            user = await bot.fetch_user(user_id)

            emb = discord.Embed(title=message)
            # 修正私信发送调用方式
            await user.send(embed=emb)
            await ctx.send("replied to user")

    if not found:
        await ctx.send("This id doesn't exist or has already been answered")

补充提示:如果需要对回复内容做长度限制、敏感词过滤,可以在拿到message参数后自行添加校验逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 21:24:08