def list_owed_button(bot, update, user_data): query = update.callback_query chat_id = str(query.message.chat_id) message_here = strings.errButtonMsg reply_markup = None if query.data.startswith("owers"): ower = query.data[5:] user_data["oweower"] = ower owed = helper.loadjson(loc_owedjson) keyboard = helper.make_keyboard(owed[chat_id][ower].keys(), "owees") message_here = msgListMoneyOwedIndiv.format(ower) reply_markup = InlineKeyboardMarkup(keyboard) elif query.data.startswith("owees"): owed = helper.loadjson(loc_owedjson) ower = user_data["oweower"] owee = query.data[5:] message_here = ower + " owes " + owee + " " + Bot.CURRENCY \ + str(owed[chat_id][ower][owee]) user_data.pop("oweower") # cleanup else: message_here = strings.errUnknownCallback bot.editMessageText(text=message_here, chat_id=query.message.chat_id, message_id=query.message.message_id, reply_markup=reply_markup)
def list_owed(bot, update, args): owed = helper.loadjson(loc_owedjson) chat_id = str(update.message.chat_id) reply_markup = None try: owed[chat_id] except KeyError: owed[chat_id] = {} if len(args) == 0: keyboard = helper.make_keyboard(owed[chat_id].keys(), "owers") reply_markup = InlineKeyboardMarkup(keyboard) res = msgListMoneyOwed elif len(args) == 1: if args[0] == "all": # if arg1 is "all", print all debts if len(owed[chat_id]) == 0: res = msgNoDebts else: res = msgListMoneyOwed for ower in owed[chat_id]: res += helper.print_owed(owed, chat_id, ower) else: # else, print debts of name try: res = msgListMoneyOwedIndiv.format(args[0]) res += helper.print_owed(owed, chat_id, args[0]) except KeyError: res = args[0] + " has no debts!" else: res = strings.errBadFormat update.message.reply_text(res, reply_markup=reply_markup)
def owes_helper(chat_id, ower, owee, amount): owed = helper.loadjson(loc_owedjson) try: owed[chat_id] except KeyError: owed[chat_id] = {} try: owed[chat_id][ower] except KeyError: owed[chat_id][ower] = {} print("Added new ower: " + ower + ".") try: owed[chat_id][ower][owee] except KeyError: owed[chat_id][ower][owee] = 0 print("Added new owee for ower " + ower + ".") owed[chat_id][ower][owee] += float(amount) result = owed[chat_id][ower][owee] # check whether owed sum is now 0 and removes if necessary if owed[chat_id][ower][owee] == 0: owed[chat_id][ower].pop(owee) if owed[chat_id][ower] == {}: owed[chat_id].pop(ower) if owed[chat_id] == {}: owed.pop(chat_id) helper.dumpjson(loc_owedjson, owed) return result
def inline_owes(bot, update, args, user_data): owed = helper.loadjson(loc_owedjson) chat_id = str(update.message.chat_id) res = "" if len(args) == 0: try: keyboard = helper.make_keyboard(owed[chat_id].keys(), "") res = msgCurrentOwers except KeyError: res = msgNoDebts keyboard = [] reply_markup = InlineKeyboardMarkup(keyboard) update.message.reply_text(res, reply_markup=reply_markup) return OWER elif len(args) == 1: if args[0] == "all": update.message.reply_text(strings.errAllName) return ConversationHandler.END try: res = msgWhoOwedTo.format(args[0]) keyboard = helper.make_keyboard(owed[chat_id][args[0]].keys(), "") except KeyError: keyboard = [] user_data["ower"] = args[0] reply_markup = InlineKeyboardMarkup(keyboard) update.message.reply_text(res, reply_markup=reply_markup) return OWEE elif len(args) == 2: if args[0] == "all" or args[1] == "all": update.message.reply_text(strings.errAllName) return ConversationHandler.END user_data["ower"] = args[0] user_data["owee"] = args[1] update.message.reply_text(msgHowMuch.format(args[0], args[1])) return AMOUNT elif len(args) == 3: if args[0] == "all" or args[1] == "all": update.message.reply_text(strings.errAllName) else: try: amount = owes_helper(chat_id, args[0], args[1], args[2]) update.message.reply_text(args[0] + " now owes " + args[1] + " " + Bot.CURRENCY + str(amount) + ".") except ValueError: update.message.reply_text(strings.errNotInt) else: update.message.reply_text(strings.errBadFormat) return ConversationHandler.END
def rm_command(bot, update, args): cmds = helper.loadjson(loc_cmdsjson) chat_id = str(update.message.chat_id) if len(args) == 1: # remove command from command repo cmd_name = "/" + args[0] try: del cmds[chat_id][cmd_name] helper.dumpjson(loc_cmdsjson, cmds) print("removed command \"" + cmd_name + "\".") except KeyError: return
def all_notes(bot, update, args): notes = helper.loadjson(loc_notesjson) chat_id = str(update.message.chat_id) try: notes[chat_id] except KeyError: notes[chat_id] = {} msg = "No notes in this chat." if len(notes[chat_id]) > 0: msg = msgNotesForChat for note in notes[chat_id]: msg += "\n" + note update.message.reply_text(msg)
def clear(bot, update, args): owed = helper.loadjson(loc_owedjson) chat_id = str(update.message.chat_id) sender = update.message.from_user try: owed[chat_id] except KeyError: owed[chat_id] = {} if sender.id != Bot.OWNER_ID: update.message.reply_text(strings.errNotAdmin) print(strings.errUnauthCommand.format(sender.username)) return if len(args) == 1 and args[0] == "all": helper.dumpjson(loc_bckpjson, owed) owed.pop(chat_id) update.message.reply_text(msgAllDebtsCleared) print(msgAllDebtsClearedTerm) elif len(args) == 2: try: owed[chat_id][args[0]] except KeyError: update.message.reply_text(strings.errNoOwer + args[0]) return if args[1] == "all": owed[chat_id].pop(args[0]) print(msgDebtsOfCleared.format(args[0])) else: owed[chat_id][args[0]].pop(args[1]) update.message.reply_text( msgDebtsOfToCleared.format(args[0], args[1])) # remove from database if no debts if owed[chat_id] == {}: owed.pop(chat_id) elif owed[chat_id][args[0]] == {}: owed[chat_id].pop(args[0]) else: update.message.reply_text(strings.errBadFormat) helper.dumpjson(loc_owedjson, owed)
def get_note(bot, update, args): notes = helper.loadjson(loc_notesjson) chat_id = str(update.message.chat_id) try: notes[chat_id] except KeyError: notes[chat_id] = {} if len(args) == 1: msg = "" try: msg = notes[chat_id][args[0]] except KeyError: msg = errNoNoteFound + args[0] update.message.reply_text(msg) else: update.message.reply_text(strings.errBadFormat)
def handle_user_command(bot, update): cmds = helper.loadjson(loc_cmdsjson) chat_id = str(update.message.chat_id) command_text = update.message.text command_list = command_text.split() if len(command_list) >= 1: try: cmd_name = command_list[0] del command_list[0] no_first_elem = " ".join(command_list) msg = cmds[chat_id][cmd_name] + " " + no_first_elem update.message.reply_text(msg) except KeyError: # default to unknown commands handler Bot.unknown(bot, update) else: update.message.reply_text(errBadFormat)
def ower_button(bot, update, user_data): owed = helper.loadjson(loc_owedjson) query = update.callback_query chat_id = str(query.message.chat_id) ower = query.data # this is the name pressed user_data["ower"] = ower try: keyboard = helper.make_keyboard(owed[chat_id][ower].keys(), "") except KeyError: keyboard = [] reply = InlineKeyboardMarkup(keyboard) bot.editMessageText(text=msgWhoOwedTo.format(ower), chat_id=query.message.chat_id, message_id=query.message.message_id, reply_markup=reply) return OWEE
def save_note(bot, update, args): notes = helper.loadjson(loc_notesjson) chat_id = str(update.message.chat_id) try: notes[chat_id] except KeyError: notes[chat_id] = {} if len(args) >= 2: # add note to note repo notename = args[0] del args[0] note_data = " ".join(args) notes[chat_id][notename] = note_data print("Added new note \"" + notename + "\" with content \"" + note_data + "\".") else: update.message.reply_text(strings.errBadFormat) helper.dumpjson(loc_notesjson, notes)
def add_command(bot, update, args): cmds = helper.loadjson(loc_cmdsjson) chat_id = str(update.message.chat_id) try: cmds[chat_id] except KeyError: cmds[chat_id] = {} if len(args) == 1: update.message.reply_text(no_cmd_text_given) elif len(args) >= 2: # add command to command repo cmd_name = "/" + args[0] del args[0] cmd_data = " ".join(args) cmds[chat_id][cmd_name] = cmd_data print("Added new cmd \"" + cmd_name + "\" with content \"" + cmd_data + "\".") else: update.message.reply_text(errBadFormat) helper.dumpjson(loc_cmdsjson, cmds)