有没有办法在没有服务器机器人的情况下只获取成员?
@bot.command()
async def stats(ctx):
guild = bot.get_guild("guild")
await ctx.send(f'{guild.member_count}')
当我运行此代码时,它会发送一条消息,其中包含包括机器人在内的成员数量。我希望它只向我发送真实的会员数(没有机器人)!
答案 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 中自由选择加入或退出它们。但是,members
是 privileged intent。为了订阅它,您还需要在 Discord 的开发者网络界面中启用它:
答案 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)
注意:这假设您已激活所有必要的意图。