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

如何用discord.py制作可启停的回声机器人?解决代码报错问题

Discord机器人echo命令实现方案

错误原因

你遇到的AttributeError是因为**Context对象(ctx)没有content属性**——content是Message对象的专属属性,用于存储消息内容。你的代码错误混淆了上下文对象与消息对象,同时逻辑也未实现“重复消息直到收到stop”的核心需求。

修复后的代码

async def echo(ctx):
    channel = ctx.channel
    author = ctx.author

    def check(m):
        # 仅响应触发命令的用户在同一频道发送的消息,排除机器人自身消息避免循环
        return m.author == author and m.channel == channel and not m.author.bot

    await ctx.send("已开启echo模式,发送`stop`可结束")
    
    while True:
        # 等待目标用户发送消息
        msg = await bot.wait_for('message', check=check)
        if msg.content.lower() == 'stop':
            await ctx.send("echo模式已结束")
            break
        # 重复用户发送的消息
        await ctx.send(msg.content)

代码说明

  • 移除了*args,因为k!echo命令不需要额外参数
  • check函数精准过滤消息来源,确保只处理触发命令的用户在同一频道的输入
  • 通过while True循环实现持续监听,直到用户发送stop(不区分大小写)才终止循环
  • 每次收到非stop的消息,直接重复发送该内容

原代码问题点

  1. ctx.content无效:ctx是命令上下文,若要获取触发命令的消息内容需用ctx.message.content,但这并非需求中需要重复的后续消息
  2. 逻辑不完整:原代码仅等待一条消息就结束,未实现“持续重复直到stop”的循环逻辑
  3. 未排除机器人自身消息:若不做过滤,机器人发送的重复消息会被自身wait_for捕获,引发无限循环

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 11:33:12