Как мой бот может предоставить пользователю роль с помощью команды

#python #python-3.x #discord.py

#python #python-3.x #discord.py

Вопрос:

Например, я хочу, чтобы, если я ввожу!Cuff @user, чтобы этот пользователь получил роль cuff. Кто-нибудь знает, как это сделать?

 if message.content.startswith('!cuff'):
    args = message.content.split(' ')
    if len(args) == 2:
        member: Member = discord.utils.find(lambda m: args[1] in m.name, message.guild.members)
        if member:
            role = get(message.server.roles, name='Cuff')
            await client.add_roles('{}'.format(member.name))
 

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

1. Что вы пробовали до сих пор?

2. Вы можете отредактировать свой пост, чтобы вставить туда свой код.

3. Можете ли вы отредактировать свой пост с помощью своего кода?

4. Нет, это всегда пишется так искаженно

5. Я имел в виду ваш вопрос. Edit Под вашим вопросом есть кнопка.

Ответ №1:

Если вы хотите создать команду, вы должны использовать discord.ext.commands вместо on_message event . Затем вы можете discord.Member легко получить объект с помощью передачи аргументов.

Кроме того, client у объекта нет атрибута add_roles . Вы должны использовать discord.Member.add_roles(role) , и message у объекта нет атрибута server , guild вместо этого он есть.

 from discord.ext import commands

client = commands.Bot(command_prefix="!")

@client.command()
async def cuff(ctx, member: discord.Member=None):
    if not member:
        return # or you can send message to the channel that says "you have to pass member argument"
    role = get(ctx.guild.roles, name='Cuff')
    await member.add_roles(role)
 

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

1. Ошибка атрибута: модуль ‘discord.message’ не имеет атрибута ‘guild’

2. Какая версия discord.py вы употребляете?

3. Версия Python 3.7.4

4. Я имел в виду, используете ли вы repl.it или rewrite версию discord.py . Если переписать, то какую версию rewrite (1.4.x, 1.5.x и т.д.) Вы используете?

5. Я думаю, что это должно быть ctx.guild.roles , message не определено