Python-Telegram-Bot-Inline-Tasten reagieren nach langer (~ 5+ Stunden) Verzögerung nichtPython

Python-Programme
Anonymous
 Python-Telegram-Bot-Inline-Tasten reagieren nach langer (~ 5+ Stunden) Verzögerung nicht

Post by Anonymous »

Ich entwickle eine Python-Anwendung (mit PySIDE6 für die GUI), die mithilfe von Python-Telegram-Bot Version 13.7 über Telegramm mit Benutzern interagiert. Die Anwendung führt automatisierte Workflows aus, die viele Stunden dauern können. Daher habe ich ein Status -Nachrichtensystem über Telegramm eingerichtet. Manchmal benötigt sie während des Vorgangs Benutzereingaben über Telegramm, wenn eine Funktion eine Wand oder möglicherweise einige Eingaben für eine Funktion vom Benutzer geändert werden muss. Ich mache dies derzeit über Inline -Tastatur / Schaltflächen, um dem Benutzer eine anfängliche Option zu präsentieren, um einen Eingang zu ändern oder den Vorgang zu stoppen. Wenn er eine Eingabe ändern möchte, erhalten sie Schaltflächen jeder potenziellen Eingabe, um sie zu ändern, und geben Sie dann einen Wert ein, um diese Variable zu ändern. Ich muss dem Benutzer über Telegramm Optionen mithilfe von Inline -Tastaturschaltflächen Optionen vorlegen und diese Schaltflächen reagieren lassen, auch wenn der Benutzer nicht mit der Nachricht interagiert (z. B. 8+ Stunden, möglicherweise über Nacht), da der Benutzer diese Nachricht um 1 Uhr morgens um 1 Uhr morgens erhalten hat und zum Beispiel einschlafen kann. Nach einigen Stunden. Wenn der Benutzer auf eine "alte" Taste klickt:

[*] Telegramm zeigt die Ladeanimation auf der Taste auf unbestimmte Zeit oder oben im Chat an, aber nichts passiert
[*] Der Rückruf meines Bots. Explizit vom Python-Telegram-Bot -Fehlerbehandler der Bibliothek in vielen Fällen angemeldet, wenn dies geschieht. Um dies zu mildern, habe ich in meiner Anwendung einen Aktualisierungsmechanismus implementiert: < /p>

Meine Anwendung verfolgt Nachrichten mit Schaltflächen. /> Löschen Sie die alte Nachricht mit bot.delete_message () .
Senden Sie eine vollständig neue Nachricht mit demselben Textinhalt und frisch generierten Inline -Schaltflächen mit Bot.send_message () . /> < /li>
< /ol>
Als ich dies ursprünglich getestet habe, schien es für einen 1 -Stunden -Test zu funktionieren, dann einen 2 -stündigen Test und dann sogar einen 7 -Stunden -Test und die Tasten blieben noch scheinbar reaktionsschnell. Das Versagen scheint jedoch immer noch auf neuem Basis auftreten zu können, nachdem dieser neue Code für eine Weile ausgeführt wurde. Insbesondere wenn der PC das Skript oder die kompilierte EXE -Datei ausführt (obwohl ich nicht schlafen kann) und ich nicht in meinem Haus bin, verwende ich nur eine Mobilfunkverbindung, um mit der Anwendung zu kommunizieren. Es scheint dann mehr zu scheitern, und ich bin mir nicht sicher, ob dies ein Zufall oder etwas ist, das ich ansprechen muss.

Code: Select all

updater.start_polling()
)
Ich frage mich, ob jemand bei diesem Problem helfen kann. Gibt es eine zuverlässigere Möglichkeit, langlebige interaktive Auswahlmöglichkeiten über Telegrammschaltflächen mit PTB V13.7 zu bewältigen? Fehlt mir etwas Grundlegendes an den Lebenszyklen für Rückrufabfragen oder Polling Persistenz? Resort), um sicherzustellen, dass die Schaltflächen nach vielen Stunden funktionieren? Es startet den Bot, sendet eine Nachricht mit Schaltflächen an eine bestimmte Chat -ID, wartet 8 Stunden und protokolliert, ob der Rückruf empfangen wird.

Code: Select all

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()

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post