• Телебот.Как выполнить в основном файле .py команды из другого .py файла?

    Vindicar
    @Vindicar
    RTFM!
    Твоя проблема в том, что ты в каждом файле определил объект bot, и в итоге каждый файл подписывается на своего бота... но работает только бот из main.py, так как он определяется ПОСЛЕДНИМ и переписывает имя bot на себя. Так что bot.infinity_polling() в итоге запускает только бота из main.py, а остальные боты остаются незапущенными.
    Можно схитрить и заставить все файлы использовать один объект бота. Например, переписав вспомогательные файлы таким образом:
    # commands.py
    def register_commands(bot):
      # функция register_commands должна присутствовать в каждом файле,
      # и содержать вложенные объявления обработчиков событий.
      # bot - объект бота, на котором регаются обработчики. 
      # таким же способом можно пробросить другие глобальные объекты программы.
      # очень важно, чтобы функция вызывалась РОВНО один раз в программе!
      # дальше пошли обработчики...
      @bot.message_handler(commands=['version'])
      def version_message(message):
          bot.send_message(message.chat.id, 'Текущая версия бота 1.0')
          bot.send_message(message.chat.id, 'Что умеет эта версия?\n1.Что-то точно умеет')

    Тогда в main.py будет что-то вроде...
    import commands
    import weather
    
    bot = telebot.TeleBot(.................)
    
    # заставляем модули объявить и зарегистрировать свои обработчики
    commands.register_commands(bot)
    weather.register_commands(bot)
    
    # дальше идут местные обработчики
    @bot.message_handler(content_types=['text'])
    def send_text(message):
        if message.text.lower() in a:
            bot.send_message(message.chat.id, 'Привет, создатель')
        elif message.text.lower() =='ghbdtn':
             bot.send_message(message.chat.id, 'Тебе тоже привет, раскладку переключи')
        elif message.text.lower() in b:
            bot.send_message(message.chat.id, 'Прощай, создатель ')
    
    # ну и запускаем бота
    bot.infinity_polling()
    Ответ написан
    Комментировать
  • Почему перестали работать команды в Python?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Такие большие декораторы должны быть определены где нибудь в самом низу @bot.message_handler(content_types=['text'])

    Что происходит: пишите /test, библиотека ищет, в какую функцию закинуть это сообщение. И отправляет все это в def send_text(message):, потому что /test хоть и выглядит как команда, все же является текстом. Поэтому срабатывает верхний декоратор, который ловит все текстовые сообщения.
    Ответ написан
    Комментировать