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
相关产品推荐
相关产品推荐

