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

Discord.py:基于消息/图片关键词自动分配角色的实现求助

Discord 验证机器人(文本+图片关键词触发角色分配)解决方案

一、现有机器人选项

市面上多数现成Discord机器人仅支持文本关键词触发角色分配,同时支持图片关键词识别的几乎没有,暂时找不到完全匹配需求的成品机器人。如果不想从零开发,可以尝试自定义性较强的机器人平台,但需要自行配置OCR识别规则,操作复杂度不低,因此更推荐自行开发。

二、自行开发基础指引(新手友好)

1. 环境准备

先安装必要的依赖库,以及本地OCR引擎:

  • 安装Python库:pip install discord.py pytesseract pillow requests
  • 安装Tesseract OCR引擎:根据你的操作系统下载安装(Windows需手动添加环境变量,或在代码中指定引擎路径)

2. 核心代码示例

以下是实现核心功能的极简代码,注释清晰,适合新手修改:

import discord
from discord.ext import commands
import pytesseract
from PIL import Image
import requests
from io import BytesIO

# 启用消息内容权限,这是读取消息的必要设置
intents = discord.Intents.default()
intents.message_content = True
bot = commands.Bot(command_prefix='!', intents=intents)

# 自定义关键词与对应角色的映射,按需修改
KEYWORD_ROLE_MAP = {
    "验证通过": "已验证用户",
    "专属准入码": "正式成员"
}

# 可选:如果Windows下Tesseract没在环境变量里,指定路径
# pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'

@bot.event
async def on_ready():
    print(f'机器人已登录:{bot.user.name}')

@bot.event
async def on_message(message):
    # 忽略机器人自身发送的消息
    if message.author.bot:
        return
    
    # 1. 检查文本消息中的关键词
    for keyword, role_name in KEYWORD_ROLE_MAP.items():
        if keyword in message.content:
            # 找到对应角色
            target_role = discord.utils.get(message.guild.roles, name=role_name)
            if target_role:
                await message.author.add_roles(target_role)
                await message.channel.send(f"已为你分配角色:{role_name}")
            return
    
    # 2. 检查消息中的图片,提取文本并匹配关键词
    for attachment in message.attachments:
        if attachment.content_type.startswith('image/'):
            # 下载图片到内存
            img_response = requests.get(attachment.url)
            img = Image.open(BytesIO(img_response.content))
            # 提取图片中的文本(支持中文,需确保Tesseract安装了中文语言包)
            extracted_text = pytesseract.image_to_string(img, lang='chi_sim')
            # 匹配关键词
            for keyword, role_name in KEYWORD_ROLE_MAP.items():
                if keyword in extracted_text:
                    target_role = discord.utils.get(message.guild.roles, name=role_name)
                    if target_role:
                        await message.author.add_roles(target_role)
                        await message.channel.send(f"识别图片关键词成功,已分配角色:{role_name}")
            return
    
    # 处理其他命令(如果有的话)
    await bot.process_commands(message)

# 替换成你的机器人Token,从Discord开发者后台获取
bot.run('YOUR_BOT_TOKEN_HERE')

3. 关键注意事项

  • 在Discord开发者后台,给机器人开启「服务器成员特权」和「消息内容权限」,否则无法读取消息和管理角色
  • Tesseract需要安装对应语言包才能识别中文,安装时勾选中文选项,或后续手动添加
  • 确保机器人在服务器中有「管理角色」的权限,且机器人的角色位置要高于要分配的角色,否则无法添加角色

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 21:15:31