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

使用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)

额外说明

  1. 关于版本兼容:如果你还在使用discord.py的旧版本(非常不推荐,旧版本已经停止维护了),那bot.send_message也需要加await,写法是await bot.send_message(destination=chan, embed=embed),但强烈建议你升级到最新的稳定版,避免后续遇到更多兼容性问题。
  2. 扩展功能:如果之后你想在startswith("--")的分支里处理命令,其实discord.py有专门的命令装饰器@bot.command(),比自己用on_message判断更方便,你可以后续了解下这个特性~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:48:14