Telebot сообщения пишутся в одного бота при подключении нескольких

Рейтинг: 0Ответов: 1Опубликовано: 07.04.2023

В 1-ом варианте когда пишешь сообщения любому боту всегда отвечает 2-ой. Как сделать 1-ый вариант так же как 2-ой (где, которому боту пишешь, тот и отвечает), но с помощью цикла?

import telebot
from threading import Thread

option = 1
bot = [
    'TOKEN_1',
    'TOKEN_2'
]

for i in range(len(bot)):
    bot[i] = telebot.TeleBot(bot[i], parse_mode = "MarkdownV2")

if option == 1:
    # 1
    for i in range(len(bot)):
        @bot[i].message_handler(content_types = ['text'])
        def main(message):
            bot[i].send_message(message.chat.id, 'message')
        
        Thread(target = bot[i].infinity_polling).start()
elif option == 2:
    # 2
    @bot[0].message_handler(content_types = ['text'])
    def main(message):
        bot[0].send_message(message.chat.id, 'message')

    @bot[1].message_handler(content_types = ['text'])
    def main(message):
        bot[1].send_message(message.chat.id, 'message')
    
    Thread(target = bot[0].infinity_polling).start()
    Thread(target = bot[1].infinity_polling).start()

print('end_of_commands')

Ответы

▲ 0

Решение вот такое:

import telebot
from threading import Thread

bot = [
    'TOKEN_1',
    'TOKEN_2'
]

def createIndividualFunction(bot):
    def main(message):
        bot.send_message(message.chat.id, 'message')
    return main

for i in range(len(bot)):
    bot[i] = telebot.TeleBot(bot[i], parse_mode = "MarkdownV2")
    bot[i].message_handler(func=lambda message: True)(createIndividualFunction(bot[i]))
    Thread(target = bot[i].infinity_polling).start()

print('end_of_commands')