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

求助:Discord图片编辑机器人无法处理带命令发送的图片

问题分析与解决

核心问题:自定义on_message阻塞命令处理

你定义了on_message事件但未调用命令处理核心方法,导致@bot.command()装饰的命令无法被触发。Discord.py中,自定义on_message会覆盖默认的命令处理流程,必须手动调用await bot.process_commands(message),否则机器人只会执行on_message内的逻辑,不会响应命令。

修复步骤

  1. 修改on_message事件,添加命令处理逻辑:
@bot.event
async def on_message(message):
    print(f"message from {message.author} what he said {message.content}")
    # 必须添加此行,否则命令不会被处理
    await bot.process_commands(message)
  1. 优化命令逻辑,解决并发冲突与异常问题:
    固定文件名example.png在多用户同时使用时会出现文件冲突,建议改用临时文件;同时增加异常捕获,避免机器人因网络或图片处理错误崩溃:
import tempfile
from PIL import Image
import requests
import discord
import os

@bot.command()
async def AmetyStsteve(ctx):
    if not ctx.message.attachments:
        await ctx.send('Send Image Pls')
        return
    
    attachment = ctx.message.attachments[0]
    # 只处理图片类型文件
    if not attachment.content_type.startswith('image/'):
        await ctx.send('Please send an image file!')
        return
    
    try:
        # 使用临时文件避免并发冲突
        with tempfile.NamedTemporaryFile(suffix='.png', delete=False) as temp_file:
            # 流式下载图片到临时文件
            response = requests.get(attachment.url, stream=True)
            response.raise_for_status()  # 捕获HTTP请求错误
            for chunk in response.iter_content(chunk_size=8192):
                temp_file.write(chunk)
            
            # 打开并处理图片(此处替换为你的编辑逻辑)
            with Image.open(temp_file.name) as img:
                img.save(temp_file.name)
            
            # 发送处理后的图片
            await ctx.send(file=discord.File(temp_file.name))
    except Exception as e:
        await ctx.send(f'Error processing image: {str(e)}')
    finally:
        # 确保临时文件被删除
        if 'temp_file' in locals() and os.path.exists(temp_file.name):
            os.unlink(temp_file.name)
  1. 确认命令调用正确性
    检查发送命令的格式是否匹配机器人前缀(比如默认前缀!,则发送!AmetyStsteve),且命令名拼写完全一致。若想让命令忽略大小写,可在创建bot时设置:
bot = commands.Bot(command_prefix=commands.when_mentioned_or('!'), case_insensitive=True)

额外排查点

  • 确认机器人拥有读取消息、发送消息、上传文件的频道权限
  • 检查机器人是否在消息所在频道中,且未被静音/禁言

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 21:45:04