如何搭建为语音频道用户分配不重复游戏角色的Discord机器人
Discord随机角色分配机器人实现指南
前期准备
- 访问Discord开发者平台创建应用,生成机器人账号并获取专属Token,Token不得泄露给任何第三方
- 为机器人开启以下权限:
SendMessages、EmbedLinks、ReadMessageHistory、ViewVoiceStates,同时在Privileged Gateway Intents板块开启Server Members Intent和Voice States Intent,否则无法正常读取语音频道用户列表 - 开发环境新手推荐使用Python + discord.py v2.x框架,先执行
pip install discord.py完成依赖安装
核心逻辑实现
以下是可直接运行的最小示例代码,你可以根据自己的需求修改:
import discord from discord.ext import commands import random # 预设游戏角色列表,可自行修改替换 CHAR_LIST = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J"] # 配置机器人Intents intents = discord.Intents.default() intents.voice_states = True intents.message_content = True bot = commands.Bot(command_prefix="!", intents=intents) @bot.event async def on_ready(): print(f"机器人已登录,账号:{bot.user}") @bot.command(name="pickchars") async def pick_chars(ctx): # 检查指令发送者是否在语音频道 if not ctx.author.voice: await ctx.send("你需要先加入一个语音频道才能使用该指令") return # 获取当前语音频道的所有非机器人用户 voice_channel = ctx.author.voice.channel voice_members = [member for member in voice_channel.members if not member.bot] member_count = len(voice_members) # 检查角色池是否足够分配 if member_count > len(CHAR_LIST): await ctx.send(f"当前语音频道有{member_count}名用户,角色池仅剩余{len(CHAR_LIST)}个角色,无法完成分配") return # 随机抽取不重复角色并配对 picked_chars = random.sample(CHAR_LIST, member_count) assign_result = dict(zip(voice_members, picked_chars)) # 构建Embed消息 embed = discord.Embed( title="游戏角色分配结果", color=discord.Color.blue() ) for member, char in assign_result.items(): embed.add_field(name=member.display_name, value=f"分配角色:{char}", inline=False) # 发送结果 await ctx.send(embed=embed) # 替换成你自己的机器人Token后运行 bot.run("你的机器人Token")
测试与调整
- 把机器人邀请到你的服务器,确保权限配置正确
- 先加入任意语音频道,在指令频道发送
!pickchars即可触发分配 - 你可以自行调整Embed的样式,比如修改颜色、添加服务器图标、修改标题文案,也可以扩充角色列表适配更多游戏
注意事项
- 不要把机器人Token硬编码在代码里上传到公共代码仓库,建议存到本地环境变量或者单独的保密配置文件中
- 如果需要支持多服务器独立配置角色列表,可以引入本地JSON文件或者轻量数据库做存储
- 可以新增指令比如
!addchar、!removechar来动态调整角色池,不用每次修改代码重启机器人
内容的提问来源于stack exchange,提问作者Darksider32
相关产品推荐
相关产品推荐

