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])
我正在尝试遍历 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])