как заставить бота назначать роли при заданной команде

#discord.py

#discord.py

Вопрос:

я пытаюсь заставить бота назначить роль «торговый центр» и удалить роль «учебный зал». Однако он продолжает возвращать ошибку

Игнорирование исключения в on_message Traceback (последний последний вызов): File «C:UsersfrostAppDataLocalProgramsPythonPython38-32libsite-packagesdiscordclient.py «, строка 333, в файле _run_event ожидает coro(*args, **kwargs) «D:GalaxyConflux Mastergcclient.py «, строка 89, в on_message role.id = 798193741403127818 Ошибка атрибута: объект ‘str’ не имеет атрибута ‘id’

выполняемый код выглядит следующим образом

 @client.event
async def on_message(message):
    if message.content.startswith(gccmd.cmd_prfx   'mall'):
        role = 'Mall'
        role.id = 798193741403127818
        await message.author.add_roles(role.id)
 

я пробовал много разных подходов, но каждый из них приводил к аналогичной ошибке.
Я просто отключил часть role = ‘Mall’, но это тоже не сработало.

Как я могу преобразовать идентификатор роли в фактический идентификатор?

Большое спасибо! ~ Проблеск

Ответ №1:

вот пример, который показывает вам, как добавить роль и удалить ее.

 @client.command()
async def mall(ctx):
    # if prefix is '-' you'd type: -mall
    await user.remove_roles(@ROLE_ID)
    await user.add_roles(@ROLE_ID)
    await ctx.send("Mall role added!")

@client.command()
async def home(ctx):
    # if prefix is '-' you'd type: -home
    await user.remove_roles(@ROLE_ID)
    await user.add_roles(@ROLE_ID)
    await ctx.send("Home role added!") 
 

Если вы хотите удалить несколько ролей, вам нужно просто добавить туда все роли, которые вы хотите удалить, а затем добавить ту, которую вы хотите.

Например, если вы направляетесь в торговый центр из своего дома, он удаляет все роли, включая роль дома, и добавляет роль торгового центра.

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

1. Для этого нужны discord.Member указатели типа и discord.Role , иначе произойдет то же самое.

2. я хочу сделать так, чтобы пользователь мог делать это самостоятельно, например, если бы они хотели роль торгового центра, они могли бы ввести что-то вроде. -goto mall предполагается, что это похоже на движение, когда они ПЕРЕХОДЯТ на новый канал и покидают старый. возможно ли это?

3. Я только что отредактировал его. Это то, что вы искали? Если нет, я думаю, вам нужно уточнить, что именно вам нужно немного больше.