Discord.py 让机器人根据 csv 文件添加角色
Discord.py Getting a bot to add role based on csv file
所以我是 Python、Discord.py 和一般编程的新手,但我使用 Discord 作为学习的好机会。所以请原谅我的文盲。
我在互联网上零零碎碎地组装了一个机器人,它按预期工作。但是我现在在尝试添加特定功能时感到很困惑。
就上下文而言,我作为管理员的 Discord 服务器是一个视频游戏发布服务器,因此我们将其用于 Beta 测试和反馈收集。对于即将进行的 Beta 测试,我们希望自动向用户列表(一个 .csv 文件)添加一个“Beta 测试”角色,这将使他们能够访问特定的频道和命令。
问题出在文件读取部分。我可以通过打开 .csv 文件并打印或将其内容发送到特定频道来获取机器人,但它无法将任何打印名称识别为服务器成员。
首先,这是代码:
discord.Intents.default()
@bot.command(name='addrole', hidden=True)
@has_permissions(administrator=True)
async def add_beta_role(ctx, role='beta-test'):
with open('./beta_list.csv', 'r+') as beta_role_file:
for item in beta_role_file:
print(f'{item}')
guild = discord.utils.find(lambda g : g.id == ctx.guild, bot.guilds)
member = discord.utils.find(lambda m : m.id == item, ctx.guild.members)
if role is not None:
if member is not None:
await member.add_roles()
print(f'{role} added to {member}')
else:
print(f'Member not found.')
else:
print(f'Role not found.')
我使用的 .csv 文件包含 4 行,用于 4 个不同的用户,具有不同格式的名称:
- Discord 名称 + 鉴别符(例如:User#123,服务器中的真实用户)
- Discord 名称(例如:用户,服务器中的真实用户名)
- 不存在的用户(以确保机器人发现异常)
- Discord ID(例如:123456789,服务器中的真实用户ID)
我的输出是:
User1
Member not found.
User2
Member not found.
User3
Member not found.
User4
Member not found.
我希望机器人能够根据 .csv 文件中的用户列表找到服务器成员,但它不起作用。我曾尝试修改代码,让机器人先将列表发送到 Discord 频道,然后使用消息内容查找 Discord 成员,但我的运气并不好。
如果有人能指出如何做或问题出在哪里,我将不胜感激
编辑:为清楚起见进行了编辑
您不能只遍历 csv 文件来获取项目。
Python 有一个很棒的内置功能 csv library 可以做到这一点。
import csv
with open('./beta_list.csv', 'r+') as beta_role_file:
reader = csv.reader(beta_role_file)
for row in reader:
print(row)
使用您的 csv 文件修改此代码
所以我是 Python、Discord.py 和一般编程的新手,但我使用 Discord 作为学习的好机会。所以请原谅我的文盲。
我在互联网上零零碎碎地组装了一个机器人,它按预期工作。但是我现在在尝试添加特定功能时感到很困惑。
就上下文而言,我作为管理员的 Discord 服务器是一个视频游戏发布服务器,因此我们将其用于 Beta 测试和反馈收集。对于即将进行的 Beta 测试,我们希望自动向用户列表(一个 .csv 文件)添加一个“Beta 测试”角色,这将使他们能够访问特定的频道和命令。
问题出在文件读取部分。我可以通过打开 .csv 文件并打印或将其内容发送到特定频道来获取机器人,但它无法将任何打印名称识别为服务器成员。
首先,这是代码:
discord.Intents.default()
@bot.command(name='addrole', hidden=True)
@has_permissions(administrator=True)
async def add_beta_role(ctx, role='beta-test'):
with open('./beta_list.csv', 'r+') as beta_role_file:
for item in beta_role_file:
print(f'{item}')
guild = discord.utils.find(lambda g : g.id == ctx.guild, bot.guilds)
member = discord.utils.find(lambda m : m.id == item, ctx.guild.members)
if role is not None:
if member is not None:
await member.add_roles()
print(f'{role} added to {member}')
else:
print(f'Member not found.')
else:
print(f'Role not found.')
我使用的 .csv 文件包含 4 行,用于 4 个不同的用户,具有不同格式的名称:
- Discord 名称 + 鉴别符(例如:User#123,服务器中的真实用户)
- Discord 名称(例如:用户,服务器中的真实用户名)
- 不存在的用户(以确保机器人发现异常)
- Discord ID(例如:123456789,服务器中的真实用户ID)
我的输出是:
User1
Member not found.
User2
Member not found.
User3
Member not found.
User4
Member not found.
我希望机器人能够根据 .csv 文件中的用户列表找到服务器成员,但它不起作用。我曾尝试修改代码,让机器人先将列表发送到 Discord 频道,然后使用消息内容查找 Discord 成员,但我的运气并不好。
如果有人能指出如何做或问题出在哪里,我将不胜感激
编辑:为清楚起见进行了编辑
您不能只遍历 csv 文件来获取项目。 Python 有一个很棒的内置功能 csv library 可以做到这一点。
import csv
with open('./beta_list.csv', 'r+') as beta_role_file:
reader = csv.reader(beta_role_file)
for row in reader:
print(row)
使用您的 csv 文件修改此代码