Created
May 6, 2020 16:27
-
-
Save Aniketh01/15c9349a22f0d7d72eb9e29d65317f82 to your computer and use it in GitHub Desktop.
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 logging | |
from telegram.ext import Updater, CommandHandler | |
KILL = 0 | |
# Enable logging | |
logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', | |
level=logging.INFO) | |
logger = logging.getLogger(__name__) | |
# Define a few command handlers. These usually take the two arguments update and | |
# context. Error handlers also receive the raised TelegramError object in error. | |
def start(update, context): | |
update.message.reply_text('Hi! Use /set <seconds> to set a timer') | |
def alarm(context): | |
"""Send the alarm message.""" | |
default_dir = '/var/log/nawab/' | |
job = context.job | |
global KILL | |
with open(default_dir+"tid_store.txt", "r") as fp: | |
for line in fp: | |
if KILL == 0: | |
context.bot.send_message(job.context, text=str(line)) | |
else: | |
KILL = 0 | |
print("breaking") | |
break | |
def set_timer(update, context): | |
"""Add a job to the queue.""" | |
chat_id = update.message.chat_id | |
try: | |
# Add job to queue and stop current one if there is a timer already | |
if 'job' in context.chat_data: | |
old_job = context.chat_data['job'] | |
old_job.schedule_removal() | |
new_job = context.job_queue.run_repeating(alarm, 2, context=chat_id) | |
context.chat_data['job'] = new_job | |
update.message.reply_text('successfully started!') | |
except (IndexError, ValueError): | |
update.message.reply_text('Usage: /set <seconds>') | |
def unset(update, context): | |
"""Remove the job if the user changed their mind.""" | |
if 'job' not in context.chat_data: | |
update.message.reply_text('You have no active timer') | |
return | |
global KILL | |
job = context.chat_data['job'] | |
job.schedule_removal() | |
del context.chat_data['job'] | |
KILL = 1 | |
update.message.reply_text('Timer successfully unset!') | |
def error(update, context): | |
"""Log Errors caused by Updates.""" | |
logger.warning('Update "%s" caused error "%s"', update, context.error) | |
def main(): | |
"""Run bot.""" | |
# Create the Updater and pass it your bot's token. | |
# Make sure to set use_context=True to use the new context based callbacks | |
# Post version 12 this will no longer be necessary | |
updater = Updater("Token", use_context=True) | |
# Get the dispatcher to register handlers | |
dp = updater.dispatcher | |
# on different commands - answer in Telegram | |
dp.add_handler(CommandHandler("start", start)) | |
dp.add_handler(CommandHandler("help", start)) | |
dp.add_handler(CommandHandler("set", set_timer, | |
pass_job_queue=True, | |
pass_chat_data=True)) | |
dp.add_handler(CommandHandler("unset", unset, pass_chat_data=True)) | |
# log all errors | |
dp.add_error_handler(error) | |
# Start the Bot | |
updater.start_polling() | |
# Block until you press Ctrl-C or the process receives SIGINT, SIGTERM or | |
# SIGABRT. This should be used most of the time, since start_polling() is | |
# non-blocking and will stop the bot gracefully. | |
updater.idle() | |
if __name__ == '__main__': | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment