@Vlad_Lop12

Как получить id канала в винтиках?

Всем привет!
Подскажите, пожалуйста.
У меня есть команда через которую юзер передаёт id канала. Раньше она работала нормально. Решил разложить бота на винтики и теперь выдаёт ошибку.

Код:
class Test(commands.Cog):
    def __init__(self, client):
        self.client = client

    @commands.command()
    async def test(self, ctx, arg):  
            channel = await client.get_guild(arg)
            await channel.send('Я написал в канал, который ты указал!')


Ошибка:
discord.ext.commands.errors.CommandInvokeError: Command raised an exception: NameError: name 'client' is not defined
NameError: name 'client' is not defined


Я наверное понимаю, что ошибка в том, что я использую client для получения id канала. Перепробовал много вариантов так и не смог заменить. (Документацию читаю и python тоже изучаю)

Спасибо!
  • Вопрос задан
  • 93 просмотра
Решения вопроса 1
Две проблемы:
Первая, и основная - переменная client не определена, о чём и говорит ошибка. В данном контексте вам нужно брать client из класса, в котором находится команда: self.client
Вторая - discord.Bot.get_guild принимает в качестве аргумента - ID сервера, типа int
discord.py по умолчанию, если не указан тип переменной в команде - передаёт её напрямую как строку (str). Используйте конвертеры для автоматической конвертации аргументов. Помните также, что функция get_guild (как и большая часть остальных get_ функций) - не асинхронная, и не работает с await
@commands.command()
async def test(self, ctx, arg: int):
    channel = self.client.get_guild(arg)
    await channel.send("Я написал в канал, который ты указал!")
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы