Skip to content

Commit bfba390

Browse files
committed
v2.1.3
1 parent 2449636 commit bfba390

File tree

8 files changed

+121
-126
lines changed

8 files changed

+121
-126
lines changed

bot/common.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ class ConversationState(Enum):
2121
SUBPAYMENT,
2222
QUICK_ADD,
2323
QUICK_ADD_CATEGORY,
24+
QUICK_ADD_TRANSPORT,
2425
CONFIG_SETUP,
2526
CONFIG_CATEGORY,
2627
CONFIG_SUBCATEGORY,
@@ -31,4 +32,4 @@ class ConversationState(Enum):
3132
INCOME,
3233
WORK_PLACE,
3334
CPF,
34-
) = range(23)
35+
) = range(24)

bot/firebase.py

Lines changed: 0 additions & 37 deletions
This file was deleted.

bot/firebase_config.py

Lines changed: 0 additions & 11 deletions
This file was deleted.

bot/google_sheet.py

Lines changed: 31 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,13 @@
2424
overall_range = "!M13:O25"
2525

2626
tracker_range = "Tracker!B3:E3"
27+
tracker_transport_1 = "G"
28+
tracker_transport_2 = "H"
29+
tracker_others_1 = "I"
30+
tracker_others_2 = "J"
2731
quick_add_range = "Tracker!G3:J3"
2832
quick_others_range = "Tracker!I3:J13"
29-
quick_transport_range = "Tracker!G3:H3"
33+
quick_transport_range = "Tracker!G3:H13"
3034

3135

3236
def get_main_dropdown_value(sheet_id, entry_type):
@@ -37,15 +41,13 @@ def get_main_dropdown_value(sheet_id, entry_type):
3741
range = others_main_range
3842
else:
3943
range = payment_main_range
40-
# Make the request
4144
results = (
4245
sheets_api.spreadsheets()
4346
.values()
4447
.get(spreadsheetId=sheet_id, range=range)
4548
.execute()
4649
)
4750

48-
# Get the values from the result
4951
values = results.get("values", [])
5052

5153
if entry_type == EntryType.TRANSPORT:
@@ -64,15 +66,13 @@ def get_sub_dropdown_value(sheet_id, main_value, entry_type):
6466
range = others_sub_range
6567
else:
6668
range = payment_sub_range
67-
# Make the request
6869
results = (
6970
sheets_api.spreadsheets()
7071
.values()
7172
.batchGet(spreadsheetId=sheet_id, ranges=range)
7273
.execute()
7374
)
7475

75-
# Get the values from the result
7676
value_ranges = results.get("valueRanges", [])
7777

7878
dropdown = []
@@ -111,7 +111,6 @@ def get_new_row(sheet_id, month):
111111

112112

113113
def create_date(sheet_id, day, month, first_row):
114-
# Update date in column A
115114
body = {"values": [[day]]}
116115
range_name = f"{month}!A{first_row}"
117116
sheets_api.spreadsheets().values().update(
@@ -138,7 +137,6 @@ def create_entry(sheet_id, month, row_tracker, row_data):
138137
sheet_column_end = "G"
139138
data = [price] + remarks_list + [category, payment]
140139

141-
# Write the message to the Google Sheet
142140
body = {"values": [data]}
143141
range_name = (
144142
f"{month}!{sheet_column_start}{row_tracker}:{sheet_column_end}{row_tracker}"
@@ -230,20 +228,24 @@ def get_quick_add_settings(sheet_id, entry_type):
230228

231229
def update_quick_add_settings(sheet_id, entry_type, payment, type):
232230
if entry_type == EntryType.TRANSPORT:
233-
range_name = quick_transport_range
231+
range_1 = tracker_transport_1
232+
range_2 = tracker_transport_2
234233
else:
235-
last_row = (
236-
sheets_api.spreadsheets()
237-
.values()
238-
.get(
239-
spreadsheetId=sheet_id,
240-
range="Tracker!I:J",
241-
)
242-
.execute()
243-
.get("values", [])
234+
range_1 = tracker_others_1
235+
range_2 = tracker_others_2
236+
237+
last_row = (
238+
sheets_api.spreadsheets()
239+
.values()
240+
.get(
241+
spreadsheetId=sheet_id,
242+
range=f"Tracker!{range_1}:{range_2}",
244243
)
245-
last_row = len(last_row) + 1
246-
range_name = f"Tracker!I{last_row}:J{last_row}"
244+
.execute()
245+
.get("values", [])
246+
)
247+
last_row = len(last_row) + 1
248+
range_name = f"Tracker!{range_1}{last_row}:{range_2}{last_row}"
247249
new_row = [payment, type]
248250
body = {"values": [new_row]}
249251
sheets_api.spreadsheets().values().update(
@@ -254,8 +256,11 @@ def update_quick_add_settings(sheet_id, entry_type, payment, type):
254256
).execute()
255257

256258

257-
def get_quick_add_others(sheet_id):
258-
range_name = quick_others_range
259+
def get_quick_add_list(sheet_id, entry_type):
260+
if entry_type == EntryType.TRANSPORT:
261+
range_name = quick_transport_range
262+
else:
263+
range_name = quick_others_range
259264
response = (
260265
sheets_api.spreadsheets()
261266
.values()
@@ -264,11 +269,11 @@ def get_quick_add_others(sheet_id):
264269
)
265270

266271
values = response.get("values", [])
267-
others_list = []
272+
settings_list = []
268273
for other in values:
269274
merged_str = ", ".join(other)
270-
others_list.append(merged_str)
271-
return others_list
275+
settings_list.append(merged_str)
276+
return settings_list
272277

273278

274279
def get_day_transaction(sheet_id, month, date):
@@ -359,11 +364,12 @@ def update_income(sheet_id, month, row_data):
359364
).execute()
360365
return True
361366

367+
362368
def get_overall(sheet_id, month):
363369
result = (
364370
sheets_api.spreadsheets()
365371
.values()
366372
.get(spreadsheetId=sheet_id, range=f"{month}{overall_range}")
367373
.execute()
368374
)
369-
return result.get("values", [])
375+
return result.get("values", [])

bot/telegram_bot.py

Lines changed: 60 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import os
2-
from telegram import Update, InlineKeyboardButton, InlineKeyboardMarkup
2+
from telegram import Update, InlineKeyboardButton, InlineKeyboardMarkup, ParseMode
33
from telegram.ext import (
44
CommandHandler,
55
ConversationHandler,
@@ -24,7 +24,10 @@
2424
def create_inline_markup(list):
2525
keyboard_markup_list = []
2626
for reply in list:
27-
keyboard_markup_list.append([InlineKeyboardButton(reply, callback_data=reply)])
27+
if reply:
28+
keyboard_markup_list.append(
29+
[InlineKeyboardButton(reply, callback_data=reply)]
30+
)
2831
return InlineKeyboardMarkup(keyboard_markup_list)
2932

3033

@@ -74,7 +77,7 @@ def start(update, context):
7477
)
7578
return CS.RESET_UP
7679
else:
77-
update.message.reply_text(SETUP_TEXT)
80+
update.message.reply_text(SETUP_TEXT, parse_mode=ParseMode.HTML)
7881
return CS.SET_UP
7982
except Exception as e:
8083
update.message.reply_text(ERROR_TEXT)
@@ -110,7 +113,7 @@ def reset_up(update, context) -> int:
110113
reply = update.callback_query.data
111114
update.callback_query.answer()
112115
if reply == "Yes":
113-
update.callback_query.message.reply_text(SETUP_TEXT)
116+
update.callback_query.message.reply_text(SETUP_TEXT, parse_mode=ParseMode.HTML)
114117
return CS.SET_UP
115118
else:
116119
update.callback_query.edit_message_text(END_TEXT, reply_markup=None)
@@ -141,43 +144,35 @@ def config_handler(update, context) -> int:
141144
return ConversationHandler.END
142145
update.callback_query.edit_message_text(reply, reply_markup=None)
143146
if reply == "Change Google Sheet":
144-
update.callback_query.message.reply_text(SETUP_TEXT)
147+
update.callback_query.message.reply_text(SETUP_TEXT, parse_mode=ParseMode.HTML)
145148
return CS.SET_UP
146149
else:
147150
try:
148151
if reply == "Configure Quick Transport":
149152
context.user_data["config"] = EntryType.TRANSPORT
150-
msg = f"This is your current Transport settings.\n"
151-
setting_list = gs.get_quick_add_settings(
152-
context.user_data["sheet_id"], context.user_data["config"]
153-
)
154-
# Retrieve current settings
155-
if setting_list == None:
156-
msg = f"{msg}Default Payment: None\nDefault Type: None\n"
157-
else:
158-
msg = f"{msg}Default Payment: {setting_list[0]}\nDefault Type: {setting_list[1]}\n"
159-
msg = f"{msg}Do you want to update it?"
160-
update.callback_query.message.reply_text(
161-
msg, reply_markup=create_inline_markup(["Yes", "No"])
162-
)
163-
return CS.CONFIG_SETUP
153+
msg = QUICK_TRANSPORT_TEXT
154+
limit = QUICK_TRANSPORT_LIMIT
164155
elif reply == "Configure Quick Others":
165156
context.user_data["config"] = EntryType.OTHERS
166157
msg = QUICK_OTHER_TEXT
167-
setting_list = gs.get_quick_add_others(context.user_data["sheet_id"])
168-
keyboard_list = []
169-
if setting_list == None:
170-
msg = f"{msg}No settings found\n"
171-
else:
172-
for setting in setting_list:
173-
msg = f"{msg}{setting}\n"
174-
if len(setting_list) < QUICK_OTHER_LIMIT:
175-
keyboard_list.append("Add new")
176-
keyboard_list.append("Cancel")
177-
update.callback_query.message.reply_text(
178-
msg, reply_markup=create_inline_markup(keyboard_list)
179-
)
180-
return CS.CONFIG_SETUP
158+
limit = QUICK_OTHER_LIMIT
159+
160+
setting_list = gs.get_quick_add_list(
161+
context.user_data["sheet_id"], context.user_data["config"]
162+
)
163+
keyboard_list = []
164+
if setting_list == None:
165+
msg = f"{msg}No settings found\n"
166+
else:
167+
for setting in setting_list:
168+
msg = f"{msg}{setting}\n"
169+
if len(setting_list) < limit:
170+
keyboard_list.append("Add new")
171+
keyboard_list.append("Cancel")
172+
update.callback_query.message.reply_text(
173+
msg, reply_markup=create_inline_markup(keyboard_list)
174+
)
175+
return CS.CONFIG_SETUP
181176
except Exception as e:
182177
update.callback_query.message.reply_text(ERROR_TEXT)
183178
return ConversationHandler.END
@@ -550,13 +545,24 @@ def add_transport(update, context):
550545
update.message.reply_text(QUICK_SETUP_TRANSPORT)
551546
return ConversationHandler.END
552547
else:
553-
context.user_data["payment"] = setting_list[0]
554-
context.user_data["category"] = setting_list[1]
555-
update.message.reply_text(
556-
f"Quick Add Transport\nDefault Payment: {setting_list[0]}\nDefault Type: {setting_list[1]}"
557-
+ "\n\nPlease enter as follow: [price],[start],[end]\n e.g. 2.11, Home, Work"
548+
setting_list = gs.get_quick_add_list(
549+
context.user_data["sheet_id"], context.user_data["entry_type"]
558550
)
559-
return CS.QUICK_ADD
551+
if len(setting_list) == 1:
552+
payment, category = setting_list[0].split(",")
553+
context.user_data["payment"] = payment
554+
context.user_data["category"] = category
555+
update.message.reply_text(
556+
f"Quick Add Transport\nDefault Payment: {payment}\nDefault Type: {category}"
557+
+ "\n\nPlease enter as follow: [price],[start],[end]\n e.g. 2.11, Home, Work"
558+
)
559+
return CS.QUICK_ADD
560+
else:
561+
update.message.reply_text(
562+
"Quick Add Transport, please choose your category.",
563+
reply_markup=create_inline_markup(setting_list),
564+
)
565+
return CS.QUICK_ADD_TRANSPORT
560566

561567

562568
def add_others(update, context):
@@ -575,7 +581,9 @@ def add_others(update, context):
575581
update.message.reply_text(QUICK_SETUP_OTHER)
576582
return ConversationHandler.END
577583
else:
578-
setting_list = gs.get_quick_add_others(context.user_data["sheet_id"])
584+
setting_list = gs.get_quick_add_list(
585+
context.user_data["sheet_id"], context.user_data["entry_type"]
586+
)
579587
update.message.reply_text(
580588
"Quick Add Others, please choose your category.",
581589
reply_markup=create_inline_markup(setting_list),
@@ -595,6 +603,17 @@ def quick_add_category(update, context) -> int:
595603
return CS.QUICK_ADD
596604

597605

606+
def quick_add_transport(update, context) -> int:
607+
reply = update.callback_query.data
608+
context.user_data["payment"], context.user_data["category"] = reply.split(",")
609+
update.callback_query.answer()
610+
update.callback_query.edit_message_text(
611+
f'Quick Add Transport\nDefault Payment: {context.user_data["payment"]}\nDefault Type: {context.user_data["category"]}'
612+
+ "\n\nPlease enter as follow: [price],[start],[end]\n e.g. 2.11, Home, Work"
613+
)
614+
return CS.QUICK_ADD
615+
616+
598617
def quick_add(update, context) -> int:
599618
reply = update.message.text
600619
try:
@@ -800,6 +819,7 @@ def setup_handlers(dispatcher):
800819
quick_add_states = {
801820
CS.QUICK_ADD: [MessageHandler(Filters.text & ~Filters.command, quick_add)],
802821
CS.QUICK_ADD_CATEGORY: [CallbackQueryHandler(quick_add_category)],
822+
CS.QUICK_ADD_TRANSPORT: [CallbackQueryHandler(quick_add_transport)],
803823
}
804824

805825
# Retrieve transaction-related states and handlers

0 commit comments

Comments
 (0)