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

Discord.py机器人触发_best命令随机@用户总提及自身如何解决

问题原因
  • 未开启服务器成员权限意图。Discord出于用户隐私保护的规则,默认禁止机器人获取服务器完整成员列表,若你未在开发者后台开启SERVER MEMBERS INTENT、也未在代码中声明启用成员意图,调用channel.members只会返回机器人自身的信息,随机选择时自然只会选中自己。
  • 未过滤机器人账号。就算开启了完整的成员获取权限,成员列表默认包含机器人自身,随机选择时仍有概率命中自身账号。
解决方法
  1. 开启开发者后台的权限开关
    • 打开Discord Developer Portal,进入对应Bot的应用管理页面
    • 切换到「Bot」标签,下拉到Privileged Gateway Intents区域,打开SERVER MEMBERS INTENT选项的开关
  2. 调整代码逻辑
    首先在Bot初始化部分,显式声明启用成员意图:
    import discord
    import random
    
    # 声明启用成员意图
    intents = discord.Intents.default()
    intents.members = True
    
    # 初始化客户端,如果用commands.Bot写法对应调整intents参数即可
    client = discord.Client(intents=intents)
    
    然后修改原命令逻辑,过滤掉所有Bot账号:
    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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 12:45:03