Как мне исправить мою программу, если она не сообщает мне о каких-либо ошибках

#python #discord.py #discord.py-rewrite

#python #discord.py

Вопрос:

моя программа не выдает никаких ошибок, сообщающих мне, что не так, но я пытаюсь назначить мне роль при вводе.роль просто говорит «нет»… уходи

код:

 async def role(ctx):
    if ctx.message.author == 'ItsJustLogic#9893':
        user = ctx.message.author
        await user.add_roles('The Great Mountain Chicken')
        await ctx.send('done')
    else:
        await ctx.send('no... go away')
  

Комментарии:

1. Вы уверены ctx.message.author ItsJustLogic#9893 , что это так? Я бы добавил журнал или точку останова для просмотра.

2. Возможно, все в порядке, если он не говорит вам, что что-то не так. Кажется, что «говорю «нет… «уйти» — это допустимое поведение для вашего кода. Вам следует лучше объяснить, что вы пытаетесь сделать, какой результат вы ожидаете и что вы получаете. И, как говорит @Phix, делайте все, что вам нужно, чтобы быть уверенным, что вы знаете, что ваш код действительно делает (через отладчик, операторы печати или операторы журнала).

3. В документах говорится, что он должен вызвать либо Forbidden или HTTPException , если что-то произошло.

Ответ №1:

ctx.message.author возвращает вас discord.Member , чтобы вы не могли сравнить его со строкой. Вы должны использовать ctx.author.name и ctx.author.discriminator . name возвращает вам имя, в данном случае это ItsJustLogic , и discriminator возвращает вас 9893 . Таким образом, вы можете проверить свое имя, объединив их.

Кроме того, вы не можете добавить роль с именем роли, вы должны получить роль с discord.utils.get или guild.get_role() затем вы можете добавить роль.

 async def role(ctx):
    member = ctx.author
    if f'{member.name}#{member.discriminator}' == 'ItsJustLogic#9893':
        role = discord.utils.get(ctx.guild.roles, name='The Great Mountain Chicken')
        # or you can use role = ctx.guild.get_role(role id)
        await member.add_roles(role)
        await ctx.send('done')
    else:
        await ctx.send('no... go away')