如何获得在线会员数量?

Posted

技术标签:

【中文标题】如何获得在线会员数量?【英文标题】:How to get a number of online members? 【发布时间】:2019-12-13 15:56:26 【问题描述】:

我有一个命令计算成员和机器人并分别输出它们。然后我想输出在线用户的数量。这可能吗?

此命令获取成员和机器人计数

if message.content.startswith('<count'):    
        membersInServer = message.guild.members
        channel = message.channel
        # Filter to the list, returns a list of bot-members
        botsInServer = list(filter(filterOnlyBots, membersInServer))
        botsInServerCount = len(botsInServer)
        # (Total Member count - bot count) = Total user count
        usersInServerCount = message.guild.member_count - botsInServerCount
        msg = discord.Embed(title="Amount of Human Members in this Discord:", description=usersInServerCount, color=0x00FD00)
        msg.add_field(name="Amount of Bot Users in this Discord:",value=botsInServerCount, inline=False)
        await channel.send(embed=msg)
def filterOnlyBots(member):
    return member.bot

我已经尝试过 client.member.status 并且只返回 Online

【问题讨论】:

【参考方案1】:

每个Member has a status property,您可以使用它来检查status is offline是否。 然后您可以按离线状态过滤您的membersInServer

        onlineMembersInServer = list(filter(filterOnlyOnlineMembers, membersInServer))

        onlineMembersCount = len(onlineMembersInServer)

# Somewhere...
def filterOnlyOnlineMembers(member):
    return member.status != 'offline'

请注意,它计算在线用户和机器人如果您只想过滤在线用户,您可以将过滤器更改为:

# Set the filter to be a non-offline member, and the member not being a bot.
def filterOnlyOnlineMembers(member):
    return member.status != 'offline' and not member.bot

请注意,如果服务器很大,这可能会出现性能问题。

编辑

正如@Patrick Haugh 提到的,你可以把它变成一个 1-liner

sum(member.status!=discord.Status.offline and not member.bot for member in message.guild.members)

【讨论】:

我在尝试时收到return member.status != member.status.offline AttributeError: '_EnumValue_Status' object has no attribute 'offline' 错误。而且由于我已经分配了botsInServerCount = len(botsInServer),所以留下onlineMembersCount = len(botsInServer) 分配但未使用。 编辑了我的答案。显然Status 是一个类,而不是一个枚举。另外,我应该用len(onlineMembersInServer) 来计算服务器中的在线会员数量,而不是len(botsInServer) return member.status != 'offline' &amp;&amp; !member.bot 必须更改为 return member.status != 'offline' and member.status != member.bot 否则我收到无效的语法。然而,它返回总用户数大声笑。即使使用return member.status != 'offline' 无效的语法是因为我使用了&amp;&amp; 而不是and 关键字,这是我的错。 member.status != member.bot 应改为 !member.bot,或 member.bot == false。最后,请确保您在过滤时使用了过滤功能。 您可以通过 sum(member.status==discord.Status.online and not member.bot for member in message.guild.members) 之类的方式一步完成此操作

以上是关于如何获得在线会员数量?的主要内容,如果未能解决你的问题,请参考以下文章

sql如何计算会员在线时长

Java精品项目源码第87期在线课程会员系统

在线php试题库,在线考试系统,会员管理,一键导入

如何重新排列qq好友

爱奇艺VIP会员免费共享谁能借用一下?

phpcms v9前台会员中心在线投稿显示“栏目禁止投稿”,在线投稿不能发布文章