【问题标题】:How to extract user info of all members of discord via discord.py bot?如何通过 discord.py bot 提取所有不和谐成员的用户信息?
【发布时间】:2022-01-13 01:51:57
【问题描述】:

我第一次在这里问一个问题,所以请指导我。我已经开始涉足服务器的 discord.py。我主要只需要一个不和谐服务器上所有成员的列表。

我的整个代码:

import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('GC_TEST_TOKEN')
GUILD = os.getenv('GC_TEST_GUILD')

client = discord.Client()

@client.event
async def on_ready():
    for guild in client.guilds:
        if guild.name == GUILD:
            break

    print(
        f'{client.user} is connected to the following guild:\n'
        f'{guild.name}(id: {guild.id})\n'
    )

    members = '\n - '.join([member.name for member in guild.members])
    print(f'Guild Members:\n - {members}')

client.run(TOKEN)
    print(
        f'{client.user} is connected to the following guild:\n'
        f'{guild.name}(id: {guild.id})\n'
    )

    members = '\n - '.join([member.name for member in guild.members])
    print(f'Guild Members:\n - {members}')

client.run(TOKEN)

另外,如果您能帮我获取会员的在线\离线状态,那将非常有帮助。对其进行了研究,我不确定是否可以使用列表。我是一个初学者,如果有一些愚蠢的错误,请原谅我。

【问题讨论】:

  • 你想让用户信息被公会分开吗?服务器和频道一样吗?

标签: python discord discord.py


【解决方案1】:
channel = client.get_channel(1234567890) #gets the channel you want to get the list from

members = channel.members #finds members connected to the channel

memids = [] #(list)
memstatus = []

for member in members:
    memids.append(member.id)
    memstatus.append(member.status)

print(memids) #print info

参考:(discord.py) Getting a list of all of the members in a specific voice channel

【讨论】:

    【解决方案2】:

    在这里的人的帮助下,我得到了答案。代码是:

    import os
    import discord
    
    TOKEN = os.getenv('GC_TEST_TOKEN')
    GUILD = os.getenv('GC_TEST_GUILD')
    
    intents = discord.Intents.default()
    intents.members = True
    intents.presences = True
    
    client = discord.Client(intents=intents)
    
    @client.event
    async def on_ready():
        for guild in client.guilds:
            if guild.name == GUILD:
    
              print(
                f'{client.user} is connected to the following guild:\n'
              f'{guild.name}\n'
              )
    
        members = '\n - '.join([f"{member.name} ({member.status})" for member in guild.members])
        print(f'Guild Members:\n - {members}')
    
    client.run(TOKEN)
    

    【讨论】:

    • 请接受答案,让其他人知道您的问题已得到解答,而不是将其粘贴为另一个答案。
    【解决方案3】:
    1. 您不能使用client.run(TOKEN) 两次。将它放在代码末尾。
    2. 我建议检查 guild.id 而不是 guild.name,因为您的服务器名称可以更改。
    3. 如果您使用的是os.getenv,则不必导入和使用dotenv
    4. 如果您想从您的机器人所在的所有服务器中打印成员,请删除以下行:if guild.name == GUILD:。否则,它将仅打印来自 GUILD 的成员。
    import os   
    import discord
    
    TOKEN = os.getenv('GC_TEST_TOKEN')
    GUILD = os.getenv('GC_TEST_GUILD')
    
    # enabling intents
    intents = discord.Intents.default()
    intents.members = True
    intents.presences = True
    
    client = discord.Client(intents=intents)
    
    @client.event
    async def on_ready():
        for guild in client.guilds:
            if guild.name == GUILD:
    
                print(
                    f'{client.user} is connected to the following guild:\n'
                    f'{guild.name}\n'
                )
    
                members = '\n - '.join([f"{member.name} ({member.status})" for member in guild.members])
                print(f'Guild Members:\n - {members}')
    
    client.run(TOKEN)
    

    记得开启intents.membersintents.presence

    【讨论】:

    • 你不需要为这样的东西启用状态。
    • @Timi 如果您想获得会员的状态(在线/离线),您必须这样做。否则它将始终脱机打印。
    • 感谢@RiveN。这就像一个魅力。
    猜你喜欢
    • 2021-12-04
    • 1970-01-01
    • 2018-05-23
    • 2021-02-26
    • 2021-09-05
    • 2019-10-24
    • 2020-11-13
    • 2021-01-21
    • 2019-04-14
    相关资源
    最近更新 更多