Форум сайта python.su
Всем Доброго времени суток!
Гуру Python, пожалуйста помогите разобраться в вопросе, так я только изучаю язык и еще не все понимаю слету….
Пишу телеграм бот, задача бота мониторить RTMP поток. С определенным интервалом отправлять сообщение о статусе потока. В случае пропадания потока отправлять сообщение, что поток отвалился и т.д.
Чего я добился в результате:
1. запускаю бот (/start) получаю сообщение “Бот для мониторинга RTMP-потоков запущен!”
2. далее команда (/check) получаю сообщение “Поток доступен”. Если я отключаю поток, то ничего не меняется при команде чек получаю тот же ответ “Поток доступен”. Понимаю, что реально по ссылке на поток ничего не мониторятся и просто в боте выполняется одна команда.
Пожалуйста подскажите, что не так делаю или в какую сторону смотреть ?
Версии:
Python 3.11.4
python-telegram-bot 13.13 только в этом варианте получилось запустить бота. На версии 20хх постоянная ошибка на токен.
Пример части кода:
import telegram from telegram.ext import Updater, CommandHandler import pyrtmp import time import logging bot = telegram.Bot(token='7956906719:AAGQ60y6qJhFnS8y8P9FMDt-x5sfFabYzBM') def start(update, context): context.bot.send_message(chat_id=update.effective_chat.id, text="Бот для мониторинга RTMP-потоков запущен!") def check_stream(update, context): # URL потока stream_url = 'rtmp://cdn-br2.live-tv.cloud:1935/tgtv/1080i' try: conn = pyrtmp.RTMP(stream_url) conn.connect() conn.close() context.bot.send_message(chat_id=update.effective_chat.id, text="Поток доступен!") except Exception as e: context.bot.send_message(chat_id=update.effective_chat.id, text=f"Ошибка при проверке потока: {str(e)}") except Exception as e: update.message.reply_text(f"Ошибка при проверке потока: {str(e)}") def check_stream(update, context): while True: try: update.message.reply_text("Поток доступен.") except Exception as e: update.message.reply_text(f"Ошибка при проверке потока: {str(e)}") time.sleep(300) # Проверка каждые 300 секунд def error(update, context): """Log Errors caused by Updates.""" logging.warning('Update "%s" caused error "%s"', update, context.error) updater = Updater(token='7956906719:AAGQ60y6qJhFnS8y8P9FMDt-x5sfFabYzBM', use_context=True) dispatcher = updater.dispatcher start_handler = CommandHandler('start', start) check_handler = CommandHandler('check', check_stream) dispatcher.add_handler(start_handler) dispatcher.add_handler(check_handler) updater.start_polling() updater.idle() #if __name__ == '__main__': # main()
Отредактировано RTDVTV (Янв. 26, 2025 01:30:24)
Офлайн
RTDVTVНу у тебя работает функция с while True. Делай функции с разными именами. То же самое исключений касается. В блоке try … except … должны отлавливаться разные классы исключений.
Пожалуйста подскажите, что не так делаю или в какую сторону смотреть ?
Отредактировано py.user.next (Янв. 26, 2025 05:25:44)
Офлайн
py.user.nextПожалуйста можно какой ни будь пример для большего понимания ?
Офлайн
RTDVTVВот у этой функции поменяй имя
Пожалуйста можно какой ни будь пример для большего понимания ?
RTDVTVdef check_stream(update, context): while True: try: update.message.reply_text("Поток доступен.") except Exception as e: update.message.reply_text(f"Ошибка при проверке потока: {str(e)}") time.sleep(300) # Проверка каждые 300 секунд
def check_stream_disable(update, context): while True: try: update.message.reply_text("Поток доступен.") except Exception as e: update.message.reply_text(f"Ошибка при проверке потока: {str(e)}") time.sleep(300) # Проверка каждые 300 секунд
Офлайн
py.user.nextПоменял. После рестарта бота вот такая ошибка:
Офлайн
Для исправления сделал следующее:
Изменил import pyrtmp на “pyrtmp.rtmp”
import telegram from telegram.ext import Updater, CommandHandler import pyrtmp.rtmp import time import logging
def check_stream(update, context): # URL потока stream_url = ['rtmp://cdn-br2.xxxxxxxxxxxxxxxxxxv/1080i'] try: conn = pyrtmp.rtmp(stream_url) conn.connect() conn.close() context.bot.send_message(chat_id=update.effective_chat.id, text="Поток доступен!") except Exception as e: context.bot.send_message(chat_id=update.effective_chat.id, text=f"Ошибка при проверке потока: {str(e)}") except Exception as e: update.message.reply_text(f"Ошибка при проверке потока: {str(e)}")
Отредактировано RTDVTV (Янв. 29, 2025 22:21:27)
Офлайн
RTDVTVЭто что за модуль? Это же сервер.
Ошибка при проверке потока: module ‘pyrtmp’ has no attribute ‘RTMP’
Отредактировано py.user.next (вчера 07:42:30)
Офлайн