Задать вопрос
@kefirich

Как при on message отправить сообщение от другого бота?

У меня есть функция, которая запускает второго бота. Я хочу сделать так, чтобы при ивенте on_message у первого бота, второй отправлял сообщение.
Отвечает первый. Как пофиксить?
class BotHandler:
    def __init__(self, token: str):
        self.token = token
        intents = disnake.Intents.all()
        self.bot = disnake.Client(intents=intents)

        @self.bot.event
        async def on_ready():
            print(f"'{self.bot.user.name}' is online!")

    async def start(self):
        await self.bot.start(self.token)

    async def make_func(self, func):
        self.func = func
        print('succesull')
        self.func

async def send_msg(channel):
    await channel.send('pong!!')

@bot.event
async def on_message(message):
    guild_db = guilds.find_one({'guild': str(message.guild.id)})
    if message.content == '!ping':
        if guild_db['token']:
            await BotHandler(guild_db['token']).make_func(await send_msg(message.channel))
        else:
            await message.channel.send('pong!')
  • Вопрос задан
  • 45 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
fenrir1121
@fenrir1121 Куратор тега discord.py
Начни с документации
Это сделать можно, но исключительно костылями, в результате чего будет теряться какой-нибудь функционал. При этом я не могу придумать ни одной задачи, которая могла бы требовать подобной странной системы из двух ботов, так что есть ощущение что вы делаете что-то не то и стоит детализировать задачу.

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

Второй подход, это запустить оба бота как подпроцессы с общением через каналы или очереди.
При этом подходе оба бота будут конкурировать за доступ потому что GIL.

Третий и наиболее адекватный подход в том, чтобы 2 независимых бота общались через шину данных, например RabbitMQ.
Ответ написан
Ваш ответ на вопрос

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

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