@belugasinister

Как контролировать двух телеграм ботов одним Python процессом?

У меня есть два телеграм бота, которые состоят из:

1. App.py:

import telebot

from telebot import types

API_TOKEN = 'XXXXXXXXXXXXX'

bot = telebot.TeleBot(API_TOKEN, threaded=False)

import driverbot_main, driverbot_callbacks

bot.polling()


2. Main.py (запуск этого модуля оживляет бота) :

from telebot.apihelper import delete_webhook
from driverbot_app import bot as bot
from telebot import types


@bot.message_handler(commands=['start'])
def start(message):

	try:

		markup = types.ReplyKeyboardMarkup(resize_keyboard=True, one_time_keyboard = False)
		item1 = types.KeyboardButton("Main menu")
		item2 = types.KeyboardButton("Settings")

		markup.add(item1,item2)

		bot.send_message(message.chat.id, "Welcome!".format(message.from_user, bot.get_me()),
			parse_mode='html', reply_markup=markup)

	except:
		pass


3. Callbacks.py:

from driverbot_app import bot as bot
from telebot import types


@bot.callback_query_handler(func=lambda call: call.data == 'wash_car')
def query(call):

	keyboard = types.InlineKeyboardMarkup()
	item1 = types.InlineKeyboardButton('5 min', callback_data = '5min')
	item2 = types.InlineKeyboardButton('15 min', callback_data = '15min')

	keyboard.add(item1,item2)

	bot.send_message(call.message.chat.id, 'Location recieved. When do you want to wash your car?', parse_mode = 'html', reply_markup = keyboard)


Оба бота имеют идентичную структуру но нацелены на разыне аудитории и задачи. Я бы хотел чтобы их объеденил общий процесс и позволил информации и тригерам перетекать из одного бота к другому. Как можно реализовать оранжевый блок из диаграммы ниже? :

61a36ebcd0ff2812739773.png
  • Вопрос задан
  • 201 просмотр
Пригласить эксперта
Ответы на вопрос 2
HemulGM
@HemulGM
Delphi Developer, сис. админ
Запускать код ботов в разных потоках. У питона с этим так себе. Так что не дури, запускай два процесса.
Ответ написан
@rPman
Покопался в исходниках
в них все что нужно подготовлено для нормальной асинхронщины, но собственно главный метод обработки не вывернут на изнанку, чтобы можно было сделать что то типа:
bot1 = telebot.AsyncTeleBot(API_TOKEN1, threaded=False)
bot2 = telebot.AsyncTeleBot(API_TOKEN2, threaded=False)
...
loop = asyncio.get_event_loop()
loop.create_task(bot1.pooling_step())
loop.create_task(bot2.pooling_step())
loop.run_forever()

смотри код метода _process_polling, и создай свой pooling_step только в нем должно быть только что что в оригинальном внутри цикла while, что то типа
if updates:
                    self.offset = updates[-1].update_id + 1
                    self._loop_create_task(self.process_new_updates(updates)) # Seperate task for processing updates
                if interval: await asyncio.sleep(interval)

непонятно почему создатели библиотеки это не сделали сами, возможно еще не успели или я не правильно понял их код?
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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