#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')