Реализовать Telegram bot в несколько файлов?

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

Всем привет, учусь разрабатывать telegram ботов на основе библиотеки telebot, код вышел достаточно массивным, и хочу его как-то разделить на файлы, пример: есть файл main.py и register.py

main.py:

import config
import registr
import telebot

bot = telebot.TeleBot(config.token)


@bot.message_handler(commands=['start'])
def getmsg(m):
    bot.send_message(m.from_user.id, "Привет!")
    bot.register_next_step_handler(m, registr.step_one)

def ending(m):
    bot.send_message(m.from_user.id, "Конец!")

if __name__ == "__main__":
    bot.polling(none_stop=True, interval=0)

registr.py

import config
import main
import telebot

bot = telebot.TeleBot(config.token)

@bot.message_handler()
def step_one(m):
    bot.send_message(m.from_user.id, "Шаг 1!")
    bot.register_next_step_handler(m, step_second)

@bot.message_handler()
def step_second(m):
    bot.send_message(m.from_user.id, "Шаг 2!")
    bot.register_next_step_handler(m, main.ending)

Суть проблемы в том, что когда запускается функция step_one в файле registr.py, то сообщение выводится, а дальше возвращается в main.py... а если добавить в конце registr.py строчку bot.polling(none_stop = True), то вывод "Привет" нету, а сразу выводится "Шаг 1!" в step_one в файле registr.py, словно он игнорирует строчку с выводом "Привет!"...

Ответы

▲ 0Принят

Суть проблемы в том, что когда запускается функция step_one в файле registr.py, то сообщение выводится, а дальше возвращается в main.py...

Это не проблема, а особенность работы в проекте с несколькими файлами. Вы импортируете функции в файле registr.py и используете их в main.py

а если добавить в конце registr.py строчку bot.polling(none_stop = True)

В дополнительном файле с функциями не должно быть bot.pollig(), как не должно быть и строчки bot = telebot.TeleBot(config.token). Инициализация бота должна производиться один раз, допустим в main.py, используйте второй файл как библиотеку фукций.