如何用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的消息,直接重复发送该内容
原代码问题点
ctx.content无效:ctx是命令上下文,若要获取触发命令的消息内容需用ctx.message.content,但这并非需求中需要重复的后续消息- 逻辑不完整:原代码仅等待一条消息就结束,未实现“持续重复直到stop”的循环逻辑
- 未排除机器人自身消息:若不做过滤,机器人发送的重复消息会被自身
wait_for捕获,引发无限循环
内容的提问来源于stack exchange,提问作者user22936811
相关产品推荐
相关产品推荐

