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

如何用discord.py区分普通用户与机器人并实现服务器统计命令

解决discord.py区分机器人与普通用户并创建统计频道的方案

核心逻辑:区分机器人与普通用户

discord.py的Member对象自带bot属性,可直接判断成员是否为机器人。注意不要用client.users统计——它是机器人能看到的所有平台用户,而非当前服务器的成员,应使用interaction.guild获取目标服务器的成员数据。

完整实现代码

@client.tree.command(name='stats', description='set up stats for the server (for sheepie or airone only)')
async def stats(interaction: discord.Interaction):
    # 权限校验:仅允许指定用户执行
    allowed_user_names = ["SheepieGamer20", "Airone"]
    if interaction.user.name not in allowed_user_names:
        await interaction.response.send_message("无权限使用该命令!", ephemeral=True)
        return

    guild = interaction.guild
    if not guild:
        await interaction.response.send_message("该命令仅支持服务器内使用!", ephemeral=True)
        return

    # 统计数据
    total_members = guild.member_count
    bot_count = sum(1 for member in guild.members if member.bot)
    human_count = total_members - bot_count

    # 创建统计用语音频道(语音频道名称支持动态更新,适合展示实时数据)
    channel_configs = [
        f"👥 普通成员: {human_count}",
        f"🤖 机器人: {bot_count}",
        f"📊 总人数: {total_members}"
    ]

    for channel_name in channel_configs:
        await guild.create_voice_channel(channel_name)

    await interaction.response.send_message("统计频道创建完成!", ephemeral=True)

关键细节说明

  • 用interaction.guild锁定当前执行命令的服务器,确保统计范围准确
  • 遍历guild.members,通过member.bot筛选机器人并计数
  • 利用服务器自带的member_count属性获取总人数,减去机器人数得到普通用户数
  • 添加权限校验逻辑,符合你仅允许指定用户使用的需求
  • 选择创建语音频道是因为文本频道名称无法动态修改,后续可通过定时任务更新语音频道名称实现数据实时同步

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 12:47:13