Discord bot无法使用discord.py向用户添加角色

时间:2020-05-16 12:03:03

标签: python discord discord.py

我只是想让我的机器人在不一致的情况下向用户添加角色。虽然语法看起来很简单,但显然我做错了事。我是python的新手,所以我希望一些正确方向的指针!

active_record

在此示例中,他成功检索了成员,他找不到Egg角色,并且未添加该角色。 [编辑:我更正了该行以检索角色,该行有效,但仍然没有添加角色。添加了错误处理程序]

2 个答案:

答案 0 :(得分:2)

关键问题是add_roles()将角色添加到Member对象而不是用户。

进行了一些调整...

  1. 更改了获取ID以获取成员并返回成员对象。
  2. 将命令的名称更改为add_role(),以避免使用角色作为命令和变量。
  3. 已更改为await member.add_roles(role)

尝试:

def get_member(discordname):
    for guild in bot.guilds:
        for member in guild.members:
            if member.name == discordname:
                return member


@bot.command(name='add_role')
async def add_role(ctx):
    await ctx.message.channel.send("Testing roles")
    member = get_member("Waldstein")
    print(f'member is {member} type {type(member)}')
    role = get(ctx.guild.roles, name="Egg")
    print("role: ", role.name)
    await member.add_roles(role)
    print("done")

答案 1 :(得分:0)

为了答案,我正在写整个discord.utils.get而不是get。这是您的命令重写:

import discord

@bot.command()
async def role(ctx):
    await ctx.send("Testing roles!")
    member = discord.utils.get(bot.get_all_members(), name="Waldstein")
             # be careful when getting objects via their name, as if there are duplicates,
             # then it might not return the one you expect

    print(f"id: {member.id}")
    print(f"member: {member}")
    role = discord.utils.get(ctx.guild.roles, name="Egg") # you can do it by ID as well
    print(f"role: {role.name}")
    await member.add_roles(role) # adding to a member object, not a user
    print("Done!")

如果这不起作用,请尝试打印出类似这样的内容:

print(ctx.guild.roles)

,它应该返回机器人可以看到的每个角色。这样您可以手动调试它。

可能导致此问题的一件事是,如果机器人没有必要的权限,或者它的角色是以下,则您尝试获取的角色即鸡蛋处于位置1在层次结构中,机器人的最高角色是在位置2。


参考: