使用Discord Py命令赋予角色的问题

时间:2020-02-26 13:02:41

标签: python discord.py

我已经发出命令设置某人的角色,但是,这会引发错误。

Command raised an exception: AttributeError: 'str' object has no attribute 'add_roles'

我做错了什么吗?我正在使用最新的不和谐py版本。

@bot.command()
async def set_role(ctx,member = None,val: int = None):
    ab = member
    ab = ab.replace("<","")
    ab = ab.replace(">","")
    ab = ab.replace("@","")
    ab = ab.replace("!","")
    user = bot.get_user(int(ab))
    if val == 1:
        role = discord.utils.get(ctx.guild.roles, name="Test")
        await user.add_roles(role)
        await ctx.send('Updated')

2 个答案:

答案 0 :(得分:2)

user = bot.get_user(int(ab))

这将创建一个用户对象。它不隶属于行会/不和谐服务器。根据设计,您无法执行add_roles
成为您的漫游器可能不与此用户共享行会的原因。否则您的漫游器可能与此用户共享多个行会。但是,它怎么知道您实际上在处理哪个行会呢?

您需要创建一个成员对象。这可以通过以下方式完成:

member = ctx.guild.get_member(int(ab))

现在有了成员对象,可以等待add_roles。

await member.add_roles(role)

https://discordpy.readthedocs.io/en/latest/api.html#discord.Member.add_roles

答案 1 :(得分:0)

要为成员提供角色,您需要提供成员和角色名称作为输入。 例如:

" ?set_role @clay#9871 示例"

机器人将从公会角色中搜索角色名称“example” 如果机器人没有找到角色,它将发送“找不到角色”,这就是“尝试”和“除外”

@bot.command()
async def set_role(ctx,member :discord.Member,role):
    try:
      add_role= discord.utils.get(ctx.guild.roles, name=role)
      await member.add_roles(add_role)      
      await ctx.send('Updated')
    except:
      await ctx.send("role not found!")