Запуск django проекта с ТГ-ботом внутри

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

Есть небольшая АПИ на джанго. Запускаю стандартно через python manage.py runserver на локальном машине. Работает.

Захотел включить в проект ТГ-бота. Для начала самый простой функционал:

import telebot

API_KEY = API_KEY_BOT
bot = telebot.TeleBot(API_KEY)

@bot.message_handler(content_types=['text'])
def start(message):
    bot.send_message(message.from_user.id, 'Hello')

bot.remove_webhook()
bot.polling(none_stop=True, interval=0)

Так вот. Проект без бота запускается и работает. Бот отдельно от проекта тоже запускается и работает. Но, когда я добавляю файл с ботом в проект, то при python manage.py runserver просто тормозится на

Watching for file changes with StatReloader
Performing system checks...

Когда я комментирую 2 последние строки из бота - ожидаемо, сервер стартует, но без бота)) Подскажите, каким образом мне лучше поступить, чтобы в джанго проекте ещё и бот работал?

Ответы

▲ 0

Запускайте бот в отдельном потоке-демоне. Вызов bot.polling блокирующий и потому занимает поток и не дает django выполняться (т.е. слушать порт, обрабатывать входящие запросы и т.д.):

from threading import Thread
 
...

def bot_thread():                
   bot.remove_webhook()
   bot.polling(none_stop=True, interval=0)
t = Thread(target=bot_thread)
t.setDaemon(True)
t.start()

Но имейте ввиду, что лучше веб часть и бота разделить, об этом подробней тут.