Jun-11-2023, 02:58 PM
Hi, I have a telegram bot code in which you enter a number, and it counts down from that number to zero.
I need to create a queue to execute the count_to_zero function, so that if another number is recorded during the operation of the function, the bot will send a message that the number has been added to the queue, and the number is in the list, after which it counted the old one, then waited 5 seconds and started counting the new one.
I tried to write using manuals and examples, but I failed because of the asynchrony of the function
I need to create a queue to execute the count_to_zero function, so that if another number is recorded during the operation of the function, the bot will send a message that the number has been added to the queue, and the number is in the list, after which it counted the old one, then waited 5 seconds and started counting the new one.
I tried to write using manuals and examples, but I failed because of the asynchrony of the function
import time from telegram import ForceReply, Update from telegram.constants import ParseMode from telegram.ext import Application, CommandHandler, ContextTypes, MessageHandler, filters async def start(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None: await update.message.reply_html("Send me a number and I'll count from it to zero") async def echo(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None: msg = update.message.text if msg.isdigit(): msg = int(msg) if msg > 0: await count_to_zero(msg, update) async def count_to_zero(num, update): for i in range(num, -1, -1): await update.message.reply_text(i) time.sleep(2) def main() -> None: # Create the Application and pass it your bot's token. application = Application.builder().token(TOKEN).build() # on different commands - answer in Telegram application.add_handler(CommandHandler("start", start)) # on non command i.e message - echo the message on Telegram application.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, echo)) # Run the bot until the user presses Ctrl-C application.run_polling() if __name__ == "__main__": main()