[*] 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()