Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
v2.1.3
  • Loading branch information
brucewzj99 committed Jul 15, 2023
commit bfba390badf4c6c2602eb576c26e8f9bdc41182a
3 changes: 2 additions & 1 deletion bot/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ class ConversationState(Enum):
SUBPAYMENT,
QUICK_ADD,
QUICK_ADD_CATEGORY,
QUICK_ADD_TRANSPORT,
CONFIG_SETUP,
CONFIG_CATEGORY,
CONFIG_SUBCATEGORY,
Expand All @@ -31,4 +32,4 @@ class ConversationState(Enum):
INCOME,
WORK_PLACE,
CPF,
) = range(23)
) = range(24)
37 changes: 0 additions & 37 deletions bot/firebase.py

This file was deleted.

11 changes: 0 additions & 11 deletions bot/firebase_config.py

This file was deleted.

56 changes: 31 additions & 25 deletions bot/google_sheet.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,13 @@
overall_range = "!M13:O25"

tracker_range = "Tracker!B3:E3"
tracker_transport_1 = "G"
tracker_transport_2 = "H"
tracker_others_1 = "I"
tracker_others_2 = "J"
quick_add_range = "Tracker!G3:J3"
quick_others_range = "Tracker!I3:J13"
quick_transport_range = "Tracker!G3:H3"
quick_transport_range = "Tracker!G3:H13"


def get_main_dropdown_value(sheet_id, entry_type):
Expand All @@ -37,15 +41,13 @@ def get_main_dropdown_value(sheet_id, entry_type):
range = others_main_range
else:
range = payment_main_range
# Make the request
results = (
sheets_api.spreadsheets()
.values()
.get(spreadsheetId=sheet_id, range=range)
.execute()
)

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

if entry_type == EntryType.TRANSPORT:
Expand All @@ -64,15 +66,13 @@ def get_sub_dropdown_value(sheet_id, main_value, entry_type):
range = others_sub_range
else:
range = payment_sub_range
# Make the request
results = (
sheets_api.spreadsheets()
.values()
.batchGet(spreadsheetId=sheet_id, ranges=range)
.execute()
)

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

dropdown = []
Expand Down Expand Up @@ -111,7 +111,6 @@ def get_new_row(sheet_id, month):


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

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

def update_quick_add_settings(sheet_id, entry_type, payment, type):
if entry_type == EntryType.TRANSPORT:
range_name = quick_transport_range
range_1 = tracker_transport_1
range_2 = tracker_transport_2
else:
last_row = (
sheets_api.spreadsheets()
.values()
.get(
spreadsheetId=sheet_id,
range="Tracker!I:J",
)
.execute()
.get("values", [])
range_1 = tracker_others_1
range_2 = tracker_others_2

last_row = (
sheets_api.spreadsheets()
.values()
.get(
spreadsheetId=sheet_id,
range=f"Tracker!{range_1}:{range_2}",
)
last_row = len(last_row) + 1
range_name = f"Tracker!I{last_row}:J{last_row}"
.execute()
.get("values", [])
)
last_row = len(last_row) + 1
range_name = f"Tracker!{range_1}{last_row}:{range_2}{last_row}"
new_row = [payment, type]
body = {"values": [new_row]}
sheets_api.spreadsheets().values().update(
Expand All @@ -254,8 +256,11 @@ def update_quick_add_settings(sheet_id, entry_type, payment, type):
).execute()


def get_quick_add_others(sheet_id):
range_name = quick_others_range
def get_quick_add_list(sheet_id, entry_type):
if entry_type == EntryType.TRANSPORT:
range_name = quick_transport_range
else:
range_name = quick_others_range
response = (
sheets_api.spreadsheets()
.values()
Expand All @@ -264,11 +269,11 @@ def get_quick_add_others(sheet_id):
)

values = response.get("values", [])
others_list = []
settings_list = []
for other in values:
merged_str = ", ".join(other)
others_list.append(merged_str)
return others_list
settings_list.append(merged_str)
return settings_list


def get_day_transaction(sheet_id, month, date):
Expand Down Expand Up @@ -359,11 +364,12 @@ def update_income(sheet_id, month, row_data):
).execute()
return True


def get_overall(sheet_id, month):
result = (
sheets_api.spreadsheets()
.values()
.get(spreadsheetId=sheet_id, range=f"{month}{overall_range}")
.execute()
)
return result.get("values", [])
return result.get("values", [])
100 changes: 60 additions & 40 deletions bot/telegram_bot.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import os
from telegram import Update, InlineKeyboardButton, InlineKeyboardMarkup
from telegram import Update, InlineKeyboardButton, InlineKeyboardMarkup, ParseMode
from telegram.ext import (
CommandHandler,
ConversationHandler,
Expand All @@ -24,7 +24,10 @@
def create_inline_markup(list):
keyboard_markup_list = []
for reply in list:
keyboard_markup_list.append([InlineKeyboardButton(reply, callback_data=reply)])
if reply:
keyboard_markup_list.append(
[InlineKeyboardButton(reply, callback_data=reply)]
)
return InlineKeyboardMarkup(keyboard_markup_list)


Expand Down Expand Up @@ -74,7 +77,7 @@ def start(update, context):
)
return CS.RESET_UP
else:
update.message.reply_text(SETUP_TEXT)
update.message.reply_text(SETUP_TEXT, parse_mode=ParseMode.HTML)
return CS.SET_UP
except Exception as e:
update.message.reply_text(ERROR_TEXT)
Expand Down Expand Up @@ -110,7 +113,7 @@ def reset_up(update, context) -> int:
reply = update.callback_query.data
update.callback_query.answer()
if reply == "Yes":
update.callback_query.message.reply_text(SETUP_TEXT)
update.callback_query.message.reply_text(SETUP_TEXT, parse_mode=ParseMode.HTML)
return CS.SET_UP
else:
update.callback_query.edit_message_text(END_TEXT, reply_markup=None)
Expand Down Expand Up @@ -141,43 +144,35 @@ def config_handler(update, context) -> int:
return ConversationHandler.END
update.callback_query.edit_message_text(reply, reply_markup=None)
if reply == "Change Google Sheet":
update.callback_query.message.reply_text(SETUP_TEXT)
update.callback_query.message.reply_text(SETUP_TEXT, parse_mode=ParseMode.HTML)
return CS.SET_UP
else:
try:
if reply == "Configure Quick Transport":
context.user_data["config"] = EntryType.TRANSPORT
msg = f"This is your current Transport settings.\n"
setting_list = gs.get_quick_add_settings(
context.user_data["sheet_id"], context.user_data["config"]
)
# Retrieve current settings
if setting_list == None:
msg = f"{msg}Default Payment: None\nDefault Type: None\n"
else:
msg = f"{msg}Default Payment: {setting_list[0]}\nDefault Type: {setting_list[1]}\n"
msg = f"{msg}Do you want to update it?"
update.callback_query.message.reply_text(
msg, reply_markup=create_inline_markup(["Yes", "No"])
)
return CS.CONFIG_SETUP
msg = QUICK_TRANSPORT_TEXT
limit = QUICK_TRANSPORT_LIMIT
elif reply == "Configure Quick Others":
context.user_data["config"] = EntryType.OTHERS
msg = QUICK_OTHER_TEXT
setting_list = gs.get_quick_add_others(context.user_data["sheet_id"])
keyboard_list = []
if setting_list == None:
msg = f"{msg}No settings found\n"
else:
for setting in setting_list:
msg = f"{msg}{setting}\n"
if len(setting_list) < QUICK_OTHER_LIMIT:
keyboard_list.append("Add new")
keyboard_list.append("Cancel")
update.callback_query.message.reply_text(
msg, reply_markup=create_inline_markup(keyboard_list)
)
return CS.CONFIG_SETUP
limit = QUICK_OTHER_LIMIT

setting_list = gs.get_quick_add_list(
context.user_data["sheet_id"], context.user_data["config"]
)
keyboard_list = []
if setting_list == None:
msg = f"{msg}No settings found\n"
else:
for setting in setting_list:
msg = f"{msg}{setting}\n"
if len(setting_list) < limit:
keyboard_list.append("Add new")
keyboard_list.append("Cancel")
update.callback_query.message.reply_text(
msg, reply_markup=create_inline_markup(keyboard_list)
)
return CS.CONFIG_SETUP
except Exception as e:
update.callback_query.message.reply_text(ERROR_TEXT)
return ConversationHandler.END
Expand Down Expand Up @@ -550,13 +545,24 @@ def add_transport(update, context):
update.message.reply_text(QUICK_SETUP_TRANSPORT)
return ConversationHandler.END
else:
context.user_data["payment"] = setting_list[0]
context.user_data["category"] = setting_list[1]
update.message.reply_text(
f"Quick Add Transport\nDefault Payment: {setting_list[0]}\nDefault Type: {setting_list[1]}"
+ "\n\nPlease enter as follow: [price],[start],[end]\n e.g. 2.11, Home, Work"
setting_list = gs.get_quick_add_list(
context.user_data["sheet_id"], context.user_data["entry_type"]
)
return CS.QUICK_ADD
if len(setting_list) == 1:
payment, category = setting_list[0].split(",")
context.user_data["payment"] = payment
context.user_data["category"] = category
update.message.reply_text(
f"Quick Add Transport\nDefault Payment: {payment}\nDefault Type: {category}"
+ "\n\nPlease enter as follow: [price],[start],[end]\n e.g. 2.11, Home, Work"
)
return CS.QUICK_ADD
else:
update.message.reply_text(
"Quick Add Transport, please choose your category.",
reply_markup=create_inline_markup(setting_list),
)
return CS.QUICK_ADD_TRANSPORT


def add_others(update, context):
Expand All @@ -575,7 +581,9 @@ def add_others(update, context):
update.message.reply_text(QUICK_SETUP_OTHER)
return ConversationHandler.END
else:
setting_list = gs.get_quick_add_others(context.user_data["sheet_id"])
setting_list = gs.get_quick_add_list(
context.user_data["sheet_id"], context.user_data["entry_type"]
)
update.message.reply_text(
"Quick Add Others, please choose your category.",
reply_markup=create_inline_markup(setting_list),
Expand All @@ -595,6 +603,17 @@ def quick_add_category(update, context) -> int:
return CS.QUICK_ADD


def quick_add_transport(update, context) -> int:
reply = update.callback_query.data
context.user_data["payment"], context.user_data["category"] = reply.split(",")
update.callback_query.answer()
update.callback_query.edit_message_text(
f'Quick Add Transport\nDefault Payment: {context.user_data["payment"]}\nDefault Type: {context.user_data["category"]}'
+ "\n\nPlease enter as follow: [price],[start],[end]\n e.g. 2.11, Home, Work"
)
return CS.QUICK_ADD


def quick_add(update, context) -> int:
reply = update.message.text
try:
Expand Down Expand Up @@ -800,6 +819,7 @@ def setup_handlers(dispatcher):
quick_add_states = {
CS.QUICK_ADD: [MessageHandler(Filters.text & ~Filters.command, quick_add)],
CS.QUICK_ADD_CATEGORY: [CallbackQueryHandler(quick_add_category)],
CS.QUICK_ADD_TRANSPORT: [CallbackQueryHandler(quick_add_transport)],
}

# Retrieve transaction-related states and handlers
Expand Down
Loading