Discord.py 让机器人根据 csv 文件添加角色

问题描述

所以我对 Python、discord.py 和一般编程都不熟悉,但我将 discord 作为学习的好机会。所以请原谅我的文盲。

我已经在互联网上零零碎碎地组装了一个机器人,它按预期工作。但是我现在在尝试添加特定功能时被难住了。

就上下文而言,我是管理员discord 服务器是一个视频游戏发布服务器,因此我们将其用于 beta 测试和反馈收集。对于即将进行的 Beta 测试,我们希望自动将“beta-test”角色添加用户列表(一个 .csv 文件)中,以便他们可以访问特定频道和命令。

问题在于文件读取部分。我可以通过打开 .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 个不同的用户名称格式不同:

  1. discord 名称 + 鉴别器(例如:User#123,服务器中的真实用户
  2. discord 名称(例如:用户、服务器中的真实用户名
  3. 不存在的用户(以确保机器人发现异常)
  4. 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 文件修改此代码

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...