import json import requests import time import urllib from dbhelper import DBHelper import datetime import os db = DBHelper() TOKEN = os.environ['TOKEN'] URL = "https://api.telegram.org/bot{}/".format(TOKEN) def get_url(url): response = requests.get(url) content = response.content.decode("utf8") return content def get_json_from_url(url): content = get_url(url) js = json.loads(content) return js def get_updates(offset=None): url = URL + "getUpdates" if offset: url += "?offset={}".format(offset) js = get_json_from_url(url) return js def get_last_update_id(updates): update_ids = [] for update in updates["result"]: update_ids.append(int(update["update_id"])) return max(update_ids) def handle_updates(updates): text = "" for update in updates["result"]: try: text = update["message"]["text"] except Exception as e: pass chat = update["message"]["chat"]["id"] if text.startswith("/delete"): t = text.split(" ") if len(t) < 2: send_message("Delete Item Properly.", chat) else: items = db.get_items(chat) if items == []: send_message("Nothing to Delete.", chat) elif t[1] in items[0]: db.delete_item(t[1], chat) send_message("Item " + t[1] + " Deleted Successfully.", chat) else: send_message("Item Not Found.", chat) elif text == "/start": send_message("Send /help to show help.", chat) elif text == "/help": message = "Send /add item_name due_date(dd-mm-yyyy) to add an item.\nSend /show to display items in to-do list.\nSend /due to check remaining days of each item.\nSend /delele to delete item." send_message(message, chat) elif text == "/show": items = db.get_items(chat) if items == []: send_message("Nothing to show.", chat) for i in range(len(items)): message = items[i][0] + " " + items[i][1] send_message(message, chat) elif text == "/due": items = db.get_items(chat) due = [0 for _ in range(0, len(items))] if items == []: send_message("Nothing to show.", chat) today = datetime.datetime.today().strftime("%d-%m-%Y") for i in range(0, len(items)): due[i] = (datetime.datetime.strptime(items[i][1], "%d-%m-%Y") - datetime.datetime.strptime(today, "%d-%m-%Y")).days message = items[i][0] + " " + str(due[i]) + " days Remaining" send_message(message, chat) elif text.startswith("/add"): t = text.split(" ") if len(t) < 3: send_message("Insert Item Properly.\nSend /add item_name due_date to add an item.", chat) elif len(t[1]) < 1 or len(t[2]) < 1: send_message("Insert Item Properly.\nSend /add item_name due_date to add an item.", chat) else: db.add_item(t[1], t[2], chat) send_message("Item " + t[1] + " Inserted Successfully.", chat) else: send_message("Not a valid Input.", chat) def get_last_chat_id_and_text(updates): num_updates = len(updates["result"]) last_update = num_updates - 1 text = updates["result"][last_update]["message"]["text"] chat_id = updates["result"][last_update]["message"]["chat"]["id"] return text, chat_id def send_message(text, chat_id, reply_markup=None): text = urllib.parse.quote_plus(text) url = URL + "sendMessage?text={}&chat_id={}&parse_mode=Markdown".format(text, chat_id) if reply_markup: url += "&reply_markup={}".format(reply_markup) get_url(url) def main(): db.setup() last_update_id = None while True: updates = get_updates(last_update_id) if len(updates["result"]) > 0: last_update_id = get_last_update_id(updates) + 1 handle_updates(updates) time.sleep(0.5) if __name__ == '__main__': main()