Python-Telegram-бот-встроенные кнопки без реагирования после длинной (~ 5+ часов) задержкаPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Python-Telegram-бот-встроенные кнопки без реагирования после длинной (~ 5+ часов) задержка

Сообщение Anonymous »

Я разрабатываю приложение Python (используя Pyside6 для графического интерфейса), которое взаимодействует с пользователями через Telegram с использованием Python-telegram-bot версия 13.7. Приложение запускает автоматические рабочие процессы, которые могут занять много часов, и поэтому я настраиваю систему сообщений типа статуса через Telegram, иногда ему нужен ввод пользователя через Telegram во время процесса, если функция достигает стены или, возможно, некоторые входы для функции, которые нуждаются в изменении пользователем. В настоящее время я делаю это с помощью встроенных клавиатур / кнопок, чтобы представить пользователю начальную опцию, чтобы изменить вход или остановить процесс, если они решат изменить вход, им дают кнопки каждого потенциального ввода для изменения, а затем введите значение, чтобы изменить эту переменную. Мне нужно представить пользователю опции через Telegram, используя встроенные кнопки для клавиатуры, и эти кнопки остаются отзывчивыми, даже если пользователь не взаимодействует с сообщением в течение длительного периода (например, 8+ часов, потенциально в течение ночи), поскольку пользователь мог получить это сообщение в 1 утра, например, и не спят, а затем не иметь шансов ответить, до того, как они станут на следующий день, в качестве чистого примера. не отвечает через несколько часов. Когда пользователь нажимает кнопку «Старая»:

[*] Телеграмма часто показывает анимацию загрузки на кнопке на неопределенный срок или в верхней части чата, но ничего не происходит
[*]. Явно зарегистрированный по обработчику ошибок библиотеки Python-telegram во многих случаях, когда это происходит. Чтобы смягчить это, я реализовал механизм обновления в своем приложении: < /p>

Мое приложение отслеживает сообщения, отправляемые кнопками. /> Удалить старое сообщение с помощью bot.delete_message () .
Отправить полностью новое сообщение с одним и тем же текстовым содержимым и свежеприготовленными встроенными кнопками, используя новое сообщение. /> < /li>
< /ol>
Когда я изначально проверил это, он, казалось, работал для 1 -часового теста, затем 2 -часовой тест, а затем даже 7 -часовой тест, и кнопки все еще оставались отзывчивыми, по -видимому. Тем не менее, сбой по -прежнему происходит на основе Refular, теперь на некоторое время запустив этот новый код. Особенно, когда компьютер запускает сценарий или скомпилированный файл EXE (хотя настраивается не для сна), и я не в своем доме, поэтому просто использую сотовое соединение для связи с приложением. Похоже, что он терпит неудачу больше, и я не уверен, что это совпадение или что-то, что мне нужно обратиться.updater.start_polling())
Мне интересно, может ли кто-нибудь помочь с этой проблемой, есть ли более надежный способ обработки долгоживущих интерактивных вариантов с помощью кнопок Telegram с PTB V13.7? Я упускаю что -то фундаментальное в жизненных циклах жизни запросов на вызов или постоянстве опроса?
могли бы перерывы в сети или краткие циклы сна ПК (несмотря на настройки мощности) привести к провалу, которые нелегко восстановить по умолчанию библиотеки, что приводит к пропущенным обратным вызовам, даже после пересмотра? Resort) Чтобы обеспечить работу кнопок через много часов? Он запускает бот, отправляет сообщение с кнопками на конкретный идентификатор чата, ожидает 8 часов и входит в журнал, будет ли получен обратный вызов.import os
import time
import logging
import threading
from telegram import Update, InlineKeyboardButton, InlineKeyboardMarkup, Bot
# Assumes pip install python-telegram-bot==13.7 (or your specific v13 version)
from telegram.ext import Updater, CommandHandler, CallbackQueryHandler, CallbackContext, MessageHandler, Filters
from dotenv import load_dotenv # Optional: pip install python-dotenv

# --- Configuration ---
load_dotenv() # Load .env file if it exists
BOT_TOKEN = os.getenv("TELEGRAM_BOT_TOKEN", "YOUR_BOT_TOKEN") # None:
"""Handles button clicks."""
global last_callback_data
query = update.callback_query
logger.info(f"--- Button Callback Received (Data: {query.data}) ---")

try:
query.answer()
except Exception as e:
logger.warning(f"Could not answer callback query: {e}")

last_callback_data = query.data
logger.info(f"Stored callback data: {last_callback_data}")

try:
query.edit_message_text(text=f"✅ Selection received: {query.data}\n(Processed: {time.strftime('%H:%M:%S')})")
except Exception as e:
logger.warning(f"Could not edit message: {e}")

callback_received_event.set()
logger.info(f"--- Button Callback Finished ---")

def text_handler(update: Update, context: CallbackContext) -> None:
logger.info(f"Ignoring text message from {update.effective_user.id}")

def error_handler(update: object, context: CallbackContext) -> None:
logger.error(f'Update "{update}" caused error "{context.error}"', exc_info=context.error)

# --- Main ---
def main() -> None:
if not BOT_TOKEN or BOT_TOKEN == "YOUR_BOT_TOKEN":
print("ERROR: Telegram Bot Token not found.")
print("Set the BOT_TOKEN variable or use a .env file.")
return
if not isinstance(TARGET_CHAT_ID, int) or TARGET_CHAT_ID == 123456789:
print("ERROR: Please replace TARGET_CHAT_ID with your integer chat ID.")
return

# Ensure use_context=True for PTB v13.x
updater = Updater(BOT_TOKEN, use_context=True)
dispatcher = updater.dispatcher

dispatcher.add_handler(CommandHandler("start", start))
dispatcher.add_handler(CommandHandler("sendmre", send_mre_message_command))
dispatcher.add_handler(CallbackQueryHandler(button_callback))
dispatcher.add_handler(MessageHandler(Filters.text & ~Filters.command, text_handler))
dispatcher.add_handler(error_handler)

logger.info("Starting bot polling...")
updater.start_polling()
logger.info("Bot polling started.")
print("Bot started. Send /start to the bot, then /sendmre.")
print(f"(Test message will be sent to Chat ID: {TARGET_CHAT_ID})")
print(f"Wait 8+ hours after the message appears, then click a button.")
print("Check console logs for callback details. Press Ctrl+C to stop.")

updater.idle()
logger.info("Bot stopping.")

if __name__ == '__main__':
main()


Подробнее здесь: https://stackoverflow.com/questions/795 ... ours-delay
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Бот Telegram для отправки автоматического сообщения каждые n часов с помощью python-telegram-bot
    Anonymous » » в форуме Python
    0 Ответы
    64 Просмотры
    Последнее сообщение Anonymous
  • Telegram-бот — выкидывание пользователей с помощью библиотеки python-telegram-bot
    Anonymous » » в форуме Python
    0 Ответы
    27 Просмотры
    Последнее сообщение Anonymous
  • Telegram-бот Python (telegram.ext)
    Anonymous » » в форуме Python
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Telegram-бот — выкидывание пользователей с помощью библиотеки python-telegram-bot
    Anonymous » » в форуме Python
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous
  • Бот Telegram возвращает telegram.error.TimedOut: тайм-аут пула
    Anonymous » » в форуме Python
    0 Ответы
    117 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»