Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Discord 如何获得大量在线会员?_Discord_Python 3.7_Discord.py_Discord.py Rewrite - Fatal编程技术网

Discord 如何获得大量在线会员?

Discord 如何获得大量在线会员?,discord,python-3.7,discord.py,discord.py-rewrite,Discord,Python 3.7,Discord.py,Discord.py Rewrite,我有一个计算成员和机器人并分别输出的命令。然后我想输出在线用户的数量。这可能吗 此命令获取成员和bot计数 if message.content.startswith('<count'): membersInServer = message.guild.members channel = message.channel # Filter to the list, returns a list of bot-members

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

此命令获取成员和bot计数

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,它只返回每个联机

,您可以使用它来检查。 然后,您可以按脱机状态筛选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提到的,您可以将其制作成一行

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

我将获得一名返回会员。状态!=member.status.offline AttributeError:“\u EnumValue\u status”对象在我尝试此操作时没有属性“offline”错误。因为我已经分配了botsInServerCount=lenbotsInServer,所以只分配了onlineMembersCount=lenbotsInServer,但没有使用。编辑了我的答案。显然,Status是一个类,而不是枚举。另外,我应该在服务器上使用lenonlineMembersInServer来计算服务器中的在线成员数,而不是lenbotsInServerreturn member.status!='离线&!必须更改member.bot以返回member.status!='脱机”和member.status!=member.bot或我收到无效语法。然而,即使使用return member.status,它也会返回用户总数lol!='offline’无效的语法是由于我使用了&&而不是and关键字,这是我的错误。会员身份!=应该是member.bot!改为member.bot,或member.bot==false。最后,请确保在筛选时使用该函数进行筛选。对于message.guild.members中的成员,您可以使用summember.status==discord.status.online而不是member.bot这样的命令一步完成此操作