Как заставить моего бота отправлять сообщения по определенному каналу в discord.py

ПРОБЛЕМА

Я не знаю, где я ошибаюсь, но приведенный ниже код, кажется, выдает мне ошибку NoneType, хотя я использовал эту вещь и в других своих винтиках.

КОД

@tasks.loop(seconds=10.0)
async def remind(self):
    remind_channel = self.bot.get_channel(#id of channel)    
    await remind_channel.send("Passed")

ОШИБКА

'NoneType' object has no attribute 'send'

Я уверен, что в идентификаторе канала нет ошибки, а также я новичок в задачах, поэтому, если эта проблема возникает из-за этого, как мне ее решить?

Это буквально означает, что канал не найден. Дважды проверьте, правильно ли вы ввели идентификатор канала.

Dominik 21.03.2022 21:23

Да, я сделал, и я проверяю это трижды :(

ClawX69 21.03.2022 21:53

Также это тот же канал, который я использовал в своей командной функции чуть выше задач, и он отлично работает.

ClawX69 21.03.2022 21:54

Попробуйте добавить await self.bot.wait_until_ready() перед назначением remind_channel

TheFungusAmongUs 21.03.2022 21:55
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
4
60
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

NoneType в этом случае означает, что либо идентификатор канала недействителен, либо канал отсутствует в кеше бота, потому что он сейчас запускается или что-то в этом роде.

Но в большинстве случаев канала просто нет в кеше бота.

Вы должны добавить await self.client.wait_until_ready() в начале задачи, чтобы дождаться готовности кеша бота.

Как это:

@tasks.loop(seconds=10.0)
async def remind(self):
    await self.client.wait_until_ready()
    remind_channel = self.bot.get_channel(#id of channel)    
    await remind_channel.send("Passed")

Источники

Другие вопросы по теме