Discord.py机器人触发_best命令随机@用户总提及自身如何解决
问题原因
- 未开启服务器成员权限意图。Discord出于用户隐私保护的规则,默认禁止机器人获取服务器完整成员列表,若你未在开发者后台开启
SERVER MEMBERS INTENT、也未在代码中声明启用成员意图,调用channel.members只会返回机器人自身的信息,随机选择时自然只会选中自己。 - 未过滤机器人账号。就算开启了完整的成员获取权限,成员列表默认包含机器人自身,随机选择时仍有概率命中自身账号。
解决方法
- 开启开发者后台的权限开关
- 打开Discord Developer Portal,进入对应Bot的应用管理页面
- 切换到「Bot」标签,下拉到Privileged Gateway Intents区域,打开
SERVER MEMBERS INTENT选项的开关
- 调整代码逻辑
首先在Bot初始化部分,显式声明启用成员意图:
然后修改原命令逻辑,过滤掉所有Bot账号:import discord import random # 声明启用成员意图 intents = discord.Intents.default() intents.members = True # 初始化客户端,如果用commands.Bot写法对应调整intents参数即可 client = discord.Client(intents=intents)if message.content.startswith('_best'): channel = message.channel # 过滤掉所有机器人账号,只保留普通用户 valid_members = [member for member in channel.members if not member.bot] if not valid_members: await message.channel.send("当前频道没有可@的普通用户") return random_member = random.choice(valid_members) await message.channel.send(f'{random_member.mention} is the best')
内容的提问来源于stack exchange,提问作者Aaron
相关产品推荐
相关产品推荐

