Discord Бот выдающий роль по необходимому сообщению?

import discord
from discord import utils
import const
from discord.ext import commands
class MyClient(discord.Client):
    async def on_ready(self):
        print('Загрузился {0}!'.format(self.user))
    async def on_message(self, message):
        if message.content.startswith('1'):
            channel = message.channel
            user=message.author.id
            await bot.add_roles(user,898612321755230260)
bot = MyClient()
bot.run(const.TOKEN)

Выходит ошибка AttributeError: 'MyClient' object has no attribute 'add_roles'
  • Вопрос задан
  • 151 просмотр
Решения вопроса 1
shurshur
@shurshur
Сисадмин, просто сисадмин...
add_roles - метод класса discord.Member, а не discord.Client. Соответственно, его надо вызывать от правильного объекта. В данном случае самый простой способ получить инстанс Member отправителя данного сообщения - это обратиться к message.author:

await message.author.add_roles(role)

При этом role тут должно быть не id роли, а объект discord.Role. Который можно получить методом get_role класса discord.Guild. А его для Member можно получить из поля guild.

Итого получается, что нам надо:

author = message.author
guild = author.guild
role = guild.get_role(898612321755230260)
await author.add_roles(role)


Или если собрать в одну строчку:

await message.author.add_roles(message.author.guild.get_role(898612321755230260))
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы