-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMintos Telegram Bot.py
140 lines (102 loc) · 6.06 KB
/
Mintos Telegram 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
128
129
130
131
132
133
134
135
136
137
138
139
140
import os
from dotenv import load_dotenv
import pandas as pd
from telegram.ext import Updater, CommandHandler, CallbackQueryHandler
from telegram import InlineKeyboardButton, InlineKeyboardMarkup
from emoji import emojize
from getLoans import getLoans
check = emojize(":white_check_mark:", use_aliases=True)
cross = emojize(":x:", use_aliases=True)
# Load dbs
LO_db = pd.read_csv("LO_db.csv")
user_db = pd.read_csv("user_db.csv")
def start(update, context):
main_menu_keyboard = [[InlineKeyboardButton('Check Current Rates', callback_data='getLoansbtn')]
, [InlineKeyboardButton('Choose LOs', callback_data='chooseLOsbtn')]
, [InlineKeyboardButton('Help', callback_data='help')]]
start_rmarkup = InlineKeyboardMarkup(main_menu_keyboard, resize_keyboard=True)
update.message.reply_text(text = 'Welcome to the Mintos Bot. Please select from the options below.'
, reply_markup=start_rmarkup)
def start_over(update, context):
query = update.callback_query
query.answer()
main_menu_keyboard = [[InlineKeyboardButton('Check Current Rates', callback_data='getLoansbtn')]
, [InlineKeyboardButton('Choose LOs', callback_data='chooseLOsbtn')]
, [InlineKeyboardButton('Help', callback_data='help')]]
start_rmarkup = InlineKeyboardMarkup(main_menu_keyboard, resize_keyboard=True)
query.edit_message_text(text = 'Welcome back to the beginning. Please select from the options below.'
, reply_markup=start_rmarkup)
def help(update, context):
query = update.callback_query
query.answer()
help_keyboard = [[InlineKeyboardButton('GitHub Link', url='https://github.com/hugoncosta/mintos-telegram-bot')]
, [InlineKeyboardButton('Go Back', callback_data='startover')]]
help_rmarkup = InlineKeyboardMarkup(help_keyboard, resize_keyboard = True)
query.edit_message_text(text = "Simple bot to keep track of your fav LOs. Get PM/SM data on demand."
, reply_markup=help_rmarkup)
def getLoansbtn(update, context):
query = update.callback_query
query.answer()
chat_id = query['message']['chat']['id']
user_db = pd.read_csv("user_db.csv")
getloans_keyboard = [[InlineKeyboardButton('Check Again', callback_data='getLoansbtn')]
, [InlineKeyboardButton('Change your LOs', callback_data='chooseLOsbtn')]
, [InlineKeyboardButton('Go Back', callback_data='startover')]]
getloans_rmarkup = InlineKeyboardMarkup(getloans_keyboard
, resize_keyboard=True)
query.edit_message_text(text = getLoans(user_db[user_db["chat_id"] == chat_id]["LO"].to_list())
, reply_markup=getloans_rmarkup)
def chooseLOsbtn(update, context):
query = update.callback_query
query.answer()
user_db = pd.read_csv("user_db.csv")
chat_id = query['message']['chat']['id']
LOs_keyboard = []
for LO in LO_db["LO"].to_list():
if LO in user_db[(user_db.chat_id == chat_id)]["LO"].to_list():
LOs_keyboard.append([InlineKeyboardButton(LO + ' - ' + cross, callback_data=LO.replace(' ', '_') + '-remove-changeLOs')])
else:
LOs_keyboard.append([InlineKeyboardButton(LO + ' - ' + check, callback_data=LO.replace(' ', '_') + '-add-changeLOs')])
LOs_keyboard.append([InlineKeyboardButton('Go Back', callback_data='startover')])
LOs_rmarkup = InlineKeyboardMarkup(LOs_keyboard, resize_keyboard=False)
query.edit_message_text(text='Which LOs do you want to keep track of?', reply_markup=LOs_rmarkup)
def changeLOs(update, context):
query = update.callback_query
query.answer()
user_db = pd.read_csv("user_db.csv")
chat_id = query['message']['chat']['id']
chosen_LO = query.data.split('-')[0].replace('_', ' ')
action = query.data.split('-')[1]
if action == 'add':
user_db = user_db.append({'chat_id': chat_id, 'LO': chosen_LO}, ignore_index=True)
else:
user_db = user_db[user_db["chat_id"] == chat_id][user_db["LO"] != chosen_LO]
user_db.to_csv('user_db.csv', index=False)
LOs_keyboard = []
for LO in LO_db["LO"].to_list():
if LO in user_db[(user_db.chat_id == chat_id)]["LO"].to_list():
LOs_keyboard.append([InlineKeyboardButton(LO + ' - ' + cross, callback_data=LO.replace(' ', '_') + '-remove-changeLOs')])
else:
LOs_keyboard.append([InlineKeyboardButton(LO + ' - ' + check, callback_data=LO.replace(' ', '_') + '-add-changeLOs')])
LOs_keyboard.append([InlineKeyboardButton('Go Back', callback_data='startover')])
LOs_rmarkup = InlineKeyboardMarkup(LOs_keyboard, resize_keyboard=False)
if action == 'add':
query.edit_message_text(text=chosen_LO + ' has been added. Any other change?', reply_markup=LOs_rmarkup)
else:
query.edit_message_text(text=chosen_LO + ' has been removed. Any other change?', reply_markup=LOs_rmarkup)
def main():
load_dotenv('.env')
updater = Updater(token=os.getenv('bot_api'), use_context=True)
dispatcher = updater.dispatcher
dispatcher.add_handler(CommandHandler('start', start))
dispatcher.add_handler(CallbackQueryHandler(chooseLOsbtn, pattern='^' + 'chooseLOsbtn' + '$'))
dispatcher.add_handler(CallbackQueryHandler(changeLOs, pattern=r'^[a-zA-Z]+_[a-zA-Z]+-[a-zA-Z]+-changeLOs$'))
dispatcher.add_handler(CallbackQueryHandler(changeLOs, pattern=r'^[a-zA-Z]+_[a-zA-Z]+_[a-zA-Z]+-[a-zA-Z]+-changeLOs$'))
dispatcher.add_handler(CallbackQueryHandler(changeLOs, pattern=r'^[a-zA-Z]+-[a-zA-Z]+-changeLOs$'))
dispatcher.add_handler(CallbackQueryHandler(getLoansbtn, pattern='^' + 'getLoansbtn' + '$'))
dispatcher.add_handler(CallbackQueryHandler(start_over, pattern='^' + 'startover' + '$'))
dispatcher.add_handler(CallbackQueryHandler(help, pattern='^' + 'help' + '$'))
updater.start_polling()
updater.idle()
if __name__ == '__main__':
main()