Discord.py 在没有机器人的情况下获取服务器成员

时间:2021-05-28 20:55:49

标签: python discord.py

有没有办法在没有服务器机器人的情况下只获取成员?

@bot.command()
async def stats(ctx):
    guild = bot.get_guild("guild")

    await ctx.send(f'{guild.member_count}')

当我运行此代码时,它会发送一条消息,其中包含包括机器人在内的成员数量。我希望它只向我发送真实的会员数(没有机器人)!

3 个答案:

答案 0 :(得分:2)

您可以使用:

members = 0
for member in ctx.guild.members:
    if not member.bot:
        members += 1

使用 .bot 检查帐户是否为机器人。

答案 1 :(得分:0)

您需要启用 members 意图(以便您的机器人可以看到整个成员列表,而不仅仅是其自身),然后计算成员列表中非机器人的数量。方法如下...

from discord import Intents
from discord.ext.commands import Bot

# Enable the default intents, then specifically enable "members".
intents = Intents.default()
intents.members = True

# Initialize the bot with our customized intents object.
bot = Bot(command_prefix='!', intents=intents)

@bot.command()
async def stats(ctx):
    # Booleans can be added up; True is 1 and False is 0.
    num_members = sum(not member.bot for member in ctx.guild.members)
    # Sending an integer is fine; we don't need to convert it to a
    # string first.
    await ctx.send(num_members)

bot.run(TOKEN)

对于大多数 intents,您的机器人可以直接从 Python 中自由选择加入或退出它们。但是,membersprivileged intent。为了订阅它,您还需要在 Discord 的开发者网络界面中启用它:

Enabling members intent

答案 2 :(得分:-2)

您可以使用 discord.Guild.members property 获取公会中的所有成员。然后,使用 discord.Member.bot 检查每个成员是否是机器人。

这将是:

humans = []
for member in ctx.guild.members:
    if not member.bot:
        humans.append(member)
num_humans = len(humans)

或者,对于列表理解爱好者:

humans = [m for m in ctx.guild.members if not m.bot]
num_humans = len(humans)

注意:这假设您已激活所有必要的意图。