forked from hastagAB/Awesome-Python-Scripts
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbot.py
executable file
·128 lines (107 loc) · 4.15 KB
/
bot.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
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()