У объекта 'Int' нет атрибута 'ошибка id' в команде Discord.py - PullRequest
1 голос
/ 09 марта 2019

У меня простой бот для модерации, одна из команд которого используется для опроса кого-либо (повышения его роли до модератора) с использованием Discord.py.

Это рассматриваемая команда, которая находится внутриcog (командами являются 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) пытался поднять (anotherdiscorduser),Исключение: объект 'int' не имеет атрибута 'id'

Ответы [ 2 ]

1 голос
/ 09 марта 2019

Вам нужно получить объект role, представляющий роль, и передать его вместо идентификатора.

role = ctx.guild.get_role(392763334052544522)
await member.add_roles(role, atomic=True)
0 голосов
/ 10 марта 2019

Вам в основном нужно что-то, что дает вам экземпляр discord.Member и discord.Role, поэтому вы должны сделать member для экземпляра discord.Member, потому что у вас уже есть это в конвертере аргументов и ctx.guild.get_role(392763334052544522), так что будет await member.add_roles(ctx.guild.get_role(392763334052544522), atomic=True).

...