Skip to content

Instantly share code, notes, and snippets.

@mkpoli
Created March 20, 2021 05:09
Show Gist options
  • Select an option

  • Save mkpoli/19791fc286959e6929be12a88c7fe962 to your computer and use it in GitHub Desktop.

Select an option

Save mkpoli/19791fc286959e6929be12a88c7fe962 to your computer and use it in GitHub Desktop.
(python-telegram-bot) Python Telegram Bot Delete Message after Seconds Decorator
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