'Int'对象在Discord.py命令上没有属性'id'错误

时间:2019-03-08 22:56:44

标签: python discord discord.py-rewrite

我正在做一个简单的审核机器人,该命令之一用于使用Discord.py操作某人(将其角色提升为主持人)。

这是有问题的命令,位于齿轮内部(命令为discord.ext.commands):

commands.command(name='mod', hidden = True)
#just the mods, the bot role and the server creator can use this command, hence why the decorator below:
@commands.has_any_role("role1","role2", "role3")
async def mod(self, ctx, member:discord.Member = None):
    try:
        if member == None:
            await ctx.send('no argument given')      
        elif member == ctx.message.author:
            await ctx.send('You already are moderator')
        else:
            await discord.Member.add_roles(392763334052544522, atomic=True)
    except Exception as e:
        await ctx.send(f"There was an error while trying to elevate {member}. Exception: {e}") 
        print("\n" + f"There was an error while {ctx.message.author} tried to elevate {member}. Exception: {e}") 

机器人本身可以完美加载。尝试运行!mod @ username#1234时,由于我在命令上设置的异常捕获,该命令显示在终端上

  

(Mydiscorduser)尝试提升时发生错误   (另一个不愉快的用户)。例外:“ int”对象没有属性“ id”

2 个答案:

答案 0 :(得分:1)

您需要获取代表角色的role对象,并传递该对象而不是id。

role = ctx.guild.get_role(392763334052544522)
await member.add_roles(role, atomic=True)

答案 1 :(得分:0)

您基本上需要一些东西来为您提供discord.Memberdiscord.Role的实例,因此您必须为member实例做discord.Member,因为您已经在其中参数转换器和ctx.guild.get_role(392763334052544522),因此它将是await member.add_roles(ctx.guild.get_role(392763334052544522), atomic=True)