Discord.py - 遍历成员角色的问题

Discord.py - Issue iterating over member roles

我正在尝试遍历 discord 服务器上的所有成员。这样做时,我想查找具有特定角色的成员并使用 writer.writerow([members.name, members.id, members.joined_at, 'ASSIGNED']) 写入 excel 文件,否则使用 writer.writerow([members.name, members.id, members.joined_at]).

写入

目前,我能够做到这一点,但是,它会多次写入同一用户(取决于他们分配了多少个角色 - 如果他们有 3 个,则同一用户的信息被写入 3 次)。关于如何写用户信息的任何建议 once?

运行 Python 和 Discord.py 的最新版本。

import discord
import csv

intents = discord.Intents.default()
intents.members = True
client = discord.Client(intents=intents)

@client.event
async def on_ready():
    guild = client.get_guild(guild_id)

    with open('joindate.csv', 'w', encoding='utf-8') as f:
        writer = csv.writer(f)
        
        for members in guild.members:
            for role in members.roles:
                if role.id == 934989847247085568:
                    writer.writerow([members.name,members.id,members.joined_at, 'ASSIGNED'])
                else:
                    writer.writerow([members.name,members.id,members.joined_at])
       
            
client.run('token')

您可以使用 discord.utils.get() 获取您的角色,然后检查用户是否拥有该角色,而不是遍历所有用户的角色。这样您就可以避免遍历所有角色并多次写入一个用户。

@client.event
async def on_ready():
    guild = client.get_guild(guild_id)
    specific_role = discord.utils.get(guild.roles, id=934989847247085568) # the role id you are looking for

    with open('joindate.csv', 'w', encoding='utf-8') as f:
        writer = csv.writer(f)
        
        for members in guild.members:
            if specific_role in members.roles: # if the user has the role
                writer.writerow([members.name, members.id, members.joined_at, 'ASSIGNED'])
            else: # otherwise
                writer.writerow([members.name, members.id, members.joined_at])