AHikaru
@AHikaru

Почему перестали работать команды в Python?

Пытаюсь разобраться в Python и telebot, команды /start и текстовое обращение "привет/пока" работали и работают исправно, команды /test1, /test2 работали , но не работали остальные две, я их немного подкорректировал, они начали работать, но после перезапуска программы, перестало работать все, кроме команды /start и текстового обращения "привет/пока". Подскажите что не так
import telebot
import sys
from requests import get
from config3 import TOKEN


bot = telebot.TeleBot(TOKEN);

@bot.message_handler(commands=['start'])
def start(message):
  bot.send_message(message.chat.id, 'Команда старт!')

@bot.message_handler(content_types=['text'])
def send_text(message):
    if message.text.lower() == 'привет':
        bot.send_message(message.chat.id, 'Привет, мой создатель')
    elif message.text.lower() == 'пока':
        bot.send_message(message.chat.id, 'Прощай, создатель')

@bot.message_handler(commands=['test'])
def test_q(message):
  bot.send_message(message.chat.id, 'ТЕСТ1')
  bot.send_photo(message.chat.id, get('https://ie.wampi.ru/2021/12/12/kitten0.jpg').content)

@bot.message_handler(commands=['test2'])
def test_w(message):
  bot.send_message(message.chat.id, 'ТЕСТ2')
  bot.send_photo(message.chat.id, photo=open('demo-media\pics\kitten1.jpg', 'rb'))

@bot.message_handler(commands=['test3'])
def test_e(message):
  bot.send_message(message.chat.id, 'ТЕСТ3')
  voice=open(r'demo-media\ogg\test3.ogg', 'rb')
  bot.send_voise(message.chat.id, voise)
  voise.close()

@bot.message_handler(commands=['test4'])
def test_r(message):
    bot.send_message(message.chat.id, 'ТЕСТ4')
    audio = open(r'D:\Python\bot3\demo-media\music\Mneskin_-_Beggin_52795146.mp3', 'rb')
    bot.send_audio(message.chat.id, audio)
    audio.close()

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

Что происходит: пишите /test, библиотека ищет, в какую функцию закинуть это сообщение. И отправляет все это в def send_text(message):, потому что /test хоть и выглядит как команда, все же является текстом. Поэтому срабатывает верхний декоратор, который ловит все текстовые сообщения.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
mlt_melt
@mlt_melt
Попробуй в конце вместо bot.polling() указать
bot.polling(none_stop=True)
Или поставь функцию test_q() после всех команд
Проблема в том, что у тебя скрипт идет по порядку. Сначала start, потом функция test_q(), на которой он останавливается, ожидая сообщений. А только после переходит к остальным командам
Ответ написан
Комментировать
@fox777777777
Первые должны идти commands=...
потом уже content_type=...
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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