[*] Телеграмма часто показывает анимацию загрузки на кнопке на неопределенный срок или в верхней части чата, но ничего не происходит
[*]. Явно зарегистрированный по обработчику ошибок библиотеки 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"
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