Created
March 20, 2021 05:09
-
-
Save mkpoli/19791fc286959e6929be12a88c7fe962 to your computer and use it in GitHub Desktop.
(python-telegram-bot) Python Telegram Bot Delete Message after Seconds Decorator
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import os | |
| import time | |
| from telegram import Update, Message | |
| from telegram.ext import CallbackContext, Dispatcher, Updater, CommandHandler | |
| from typing import Callable | |
| def _delete_after(delay: int, message: Message): | |
| """Delete message after specified seconds. | |
| Args: | |
| delay (int): Delay in secs | |
| message (Message): Message to delete | |
| """ | |
| time.sleep(delay) | |
| message.delete() | |
| return | |
| def delete_after(delay: int) -> Callable[[Callable[..., Message]], Callable[..., None]]: | |
| def decorator(func: Callable[..., Message]) -> Callable[..., None]: | |
| def wrapper(*args, **kwargs) -> None: | |
| sent_message = func(*args, **kwargs) | |
| if not isinstance(sent_message, Message): | |
| raise TypeError('Message sender is not returning sent message') | |
| dispatcher = Dispatcher.get_instance() | |
| dispatcher.run_async(_delete_after, delay, sent_message) | |
| return wrapper | |
| return decorator | |
| # Delete the message after 5 secs | |
| @delete_after(5) | |
| def send_some_message(update: Update, context: CallbackContext) -> Message: | |
| return update.effective_message.reply_text('Hello! I’m going in to disappear in 5 secs!') | |
| # Then register it as a CommandHandler in dispatcher | |
| def main(): | |
| TOKEN = os.environ.get('TELEGRAM_BOT_TOKEN') | |
| updater = Updater(token=TOKEN) | |
| dispatcher = updater.dispatcher | |
| COMMAND_HANDLERS = [ | |
| CommandHandler('test', send_some_message) | |
| ] | |
| for handler in COMMAND_HANDLERS: | |
| dispatcher.add_handler(handler) | |
| updater.start_polling() | |
| updater.idle() | |
| if __name__ == '__main__': | |
| main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment