使用discord.py无法向特定频道发送消息的问题求助
帮你修复Discord机器人的消息监听问题
嘿,刚上手discord.py踩点小坑太正常了,我帮你捋捋代码里的问题,然后给你修复后的版本~
你的代码里的几个核心问题
- 异步调用没加
await:bot.send_message是异步函数,必须用await关键字调用,不然程序会直接报错。而且在新版本的discord.py里,这个方法已经被废弃了,现在推荐直接用频道对象的send方法,更简洁直观。 - 没排除机器人自身的消息:如果不处理这个,你的机器人发送嵌入消息后,
on_message事件会再次捕获这条消息,导致无限循环发送相同的内容,这肯定不是你想要的结果。 - 事件监听的习惯用法:虽然
@bot.listen()可以监听on_message事件,但社区更常用@bot.event装饰器来绑定这个核心事件,写法更统一。
修复后的完整代码
@bot.event async def on_message(message): # 先排除机器人自己发的消息,避免无限循环 if message.author == bot.user: return messagecontent = message.content chan = message.channel if messagecontent.startswith("--"): pass else: embed = discord.Embed(title="Gathering Response...", color=0x00ffff) # 用await调用频道的send方法,这是新版本的正确写法 msg = await chan.send(embed=embed)
额外说明
- 关于版本兼容:如果你还在使用discord.py的旧版本(非常不推荐,旧版本已经停止维护了),那
bot.send_message也需要加await,写法是await bot.send_message(destination=chan, embed=embed),但强烈建议你升级到最新的稳定版,避免后续遇到更多兼容性问题。 - 扩展功能:如果之后你想在
startswith("--")的分支里处理命令,其实discord.py有专门的命令装饰器@bot.command(),比自己用on_message判断更方便,你可以后续了解下这个特性~
内容的提问来源于stack exchange,提问作者Nat L
相关产品推荐
相关产品推荐

