Discord机器人Cogs中on_message事件无法发送图片的问题
问题排查与解决
核心错误点及修复:
字符串比较逻辑错误
代码里的str(message.content).lower == "pic"写法错误,lower是字符串方法,必须调用(加括号lower())才能得到小写字符串,否则是在比较方法对象和字符串,永远不会匹配触发条件。
正确写法:if message.content.lower() == "pic":消息发送方法错误
第一个代码里的await message.send不符合Discord.py的API规范,Message对象没有send方法,应该调用消息所在频道的send方法:await message.channel.send("text", file=discord.File('picture.png'))频道ID类型错误
第二个代码里self.client.get_channel("channel id")存在类型问题,频道ID必须是整数类型,不能传字符串,否则无法获取有效频道对象。如果需要固定频道发送,应写成:channel = self.client.get_channel(123456789012345678) # 替换为实际数字ID文件路径验证
确保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
相关产品推荐
相关产品推荐

