Отправка сообщений из синхронного потока в боте Python Discord - PullRequest
0 голосов
/ 28 февраля 2019

Я разрабатываю бот Discord в Python 3.6 с использованием библиотеки discord.py, и у меня возникли проблемы при попытке отправить сообщение на определенный канал из создаваемых мной потоков.

По сути, у меня естьнекоторые потоки отслеживают веб-сайты, и я хотел бы вызвать функцию (которую я передаю потокам), которая отправляет сообщение одному конкретному каналу, когда я замечаю изменение на веб-сайте.

Сначала я попытался вызватьclient.send_message() напрямую без async / await, но это не сработало вообще, поэтому я написал функцию async / await, отправляющую сообщение (проверил, и оно работает), но снова у меня возникли проблемы с вызовом из потоков, поэтому я закончилпередача бот-клиента в мои потоки и вызов self.bot_client.loop.create_task(self.sendmsgfunction(msg)).Это работает, но невероятно медленно (отправка сообщения занимает около 15 секунд, и в любом случае это, вероятно, неправильный способ) по сравнению со временем, которое требуется боту для ответа на сообщение с помощью обычной функции @bot.event.

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

Есть идеи?

1 Ответ

0 голосов
/ 16 июля 2019

Если вы хотите отправить сообщение на определенный канал, сначала вы должны получить объект канала.

channel = discord.utils.get(ctx.guild.channels, id=channel_id_here)

Затем вы можете просто сделать

await channel.send()
...