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

Discord机器人Cogs中on_message事件无法发送图片的问题

问题排查与解决

核心错误点及修复:

  1. 字符串比较逻辑错误
    代码里的str(message.content).lower == "pic"写法错误,lower是字符串方法,必须调用(加括号lower())才能得到小写字符串,否则是在比较方法对象和字符串,永远不会匹配触发条件。
    正确写法:

    if message.content.lower() == "pic":
    
  2. 消息发送方法错误
    第一个代码里的await message.send不符合Discord.py的API规范,Message对象没有send方法,应该调用消息所在频道的send方法:

    await message.channel.send("text", file=discord.File('picture.png'))
    
  3. 频道ID类型错误
    第二个代码里self.client.get_channel("channel id")存在类型问题,频道ID必须是整数类型,不能传字符串,否则无法获取有效频道对象。如果需要固定频道发送,应写成:

    channel = self.client.get_channel(123456789012345678)  # 替换为实际数字ID
    
  4. 文件路径验证
    确保picture.png文件存在于机器人运行的当前工作目录下,或者使用绝对路径(比如/home/user/bot/picture.png),否则Discord.py找不到文件会导致发送失败。

修复后的完整示例(回复触发消息的频道):

@commands.Cog.listener()
async def on_message(self, message):
    # 避免机器人响应自身消息,防止循环
    if message.author == self.client.user:
        return
    if message.content.lower() == "pic":
        try:
            await message.channel.send("text", file=discord.File('picture.png'))
        except FileNotFoundError:
            await message.channel.send("图片文件不存在!")
    # 若Cog中还有其他命令,必须添加此行,否则命令会被阻塞
    await self.client.process_commands(message)

额外注意事项:

  • 确保机器人拥有发送消息和上传文件的频道权限。
  • 若使用Discord.py v2.x版本,确认导入的是discord.File(v2.x兼容该写法)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 02:04:59