def reset(bot, update, user_data): _ = User.get_my_lang(update) kbd_main_menu = default_menu(_) user_data.clear() models.User.flush_members(update.message.chat_id) models.User.flush_payments(update.message.chat_id) update.message.reply_text(_("Let's Start ..."), reply_markup=kbd_main_menu) return CHOOSING
def bad_command(bot, update, user_data): _ = User.get_my_lang(update) kbd_main_menu = default_menu(_) update.message.reply_text(_("I couldn't understand!"), reply_markup=kbd_main_menu) for admin_id in ADMIN_IDS: bot.forwardMessage(chat_id=admin_id, from_chat_id=update.message.chat_id, message_id=update.message.message_id) return states.CHOOSING
def add_member_cb(bot, update, user_data=None): _ = User.get_my_lang(update) kbd_main_menu = default_menu(_) text = update.message.text contact = update.message.contact if contact: logging.info('ADD_MEMBER_CB received:[contact] %s', contact.first_name) member = contact.first_name else: logging.info('ADD_MEMBER_CB received: %s', text) member = text models.User.add_members(update.message.chat_id, member) bot.sendMessage(chat_id=update.message.chat_id, text=_('Aha'), reply_markup=kbd_main_menu) return CHOOSING
def show_help(bot, update, user_data): help = { b'fa': ''' من يك ربات هستم كه براى انجام حساب كتاب هاى مشترك ميتونم بهت كمك كنم. كار كردن با من خيلى ساده هست. ١- اول دكمه 'شروع حساب كتاب جديد' رو بزن. با اين كار من آماده انجام كار ميشم. ٢- دكمه 'افزودن فرد' رو بزن. با زدن اين دكمه من اسم اشخاصى كه توى اين حساب كتاب شريك و سهيم هستند رو ازت ميپرسم. وقتى دكمه 'افزودن فرد' رو ميزنى من اسم شخاص سهيم در حساب كتاب فعلى رو ازت ميپرسم و به ليست افراد اضافه ميكنم. نكته مهم: توصيه ميكنم قبل وارد كردن هزينه ها اول همه افراد سهيم رو با استفاده از اين دكمه وارد كنى. ٣- حالا كه همه افراد رو وارد كردى نوبت به وارد كردن هزينه هاى انجام شده ميرسه. براى اين كهر دكمه 'افزودن هزينه' رو بزن. - وقتى اين دكمه رو زدى من ازت ميپرسم كه چه كسى اين هزينه رو انجام داده و ليست همه افراد رو نشونت ميدم تا بتونى اون شخص رو از بينشون انتخاب كنى. (مثلاً على) - وقتى شخص مورد نظر انتخاب شد حالا ازت ميپرسم كه چقدر هزينه كرده و يه صفحه كليد نشونت ميدم تا بتونى مبلغ هزينه شده رو وارد كنى. يادت باشه بعد از اينكه هزينه رو وارد كردى دكمه تيك سبزرنگ پايين صفحه رو بزن. - حالا وقتشه كه به من بگى اين هزينه براى كيا انجام شده. يعنى چه افرادى تو اين هزينه خاص سهيم هستن. (مثلاً اگه على ١٠٠٠٠ تومن دادن و براى ٤ نفر بستنى خريده اينجا رو اسم تك تك اون افراد كليك كن. من همون لحظه به صورت همزمان بهت نشون ميدم كه هر شخص چند درصد از هزينه رو سهيم هست. نكته مهم: اگه اسم كسى رو اشتباه انتخاب كردى براى اينكه از ليست اين هزينه حذفش كنى كافيه يه بار ديگه روش كليك كنى. نكته مهم: همه هزينه ها رو به اين روش وارد كن. ٤- حالا كه همه هزينه ها رو وارد كردى وقتشه تا من به حساب كتابا برسم. دكمه 'نمايش نتايج رو بزن' تا من به صورت مختصر و مفيد بهت نشون بدم كه هر كسى چقدر به چه كسى بدهكار هست. ''', b'en': '''Hey Buddy! Im here to help you and your friends settle expenses after a night out or any other sort of gathering. Its so simple, just follow these few steps: 1- Press the “Start” or “Restart” button to begin the process. 2- Press the “Add member” button and add as many people as you want to the list of people who are involved. 3- Once you’ve added all members, press the “Add Payment” button to start adding transactions and expenses. (Here you will tell me who paid how much for whom). 4- Finally when you are done entering all the payments, simply press the “Show results” button so i can quickly figure out who owes whom. THAT SIMPLE! 5- This bot is available in both English and Persian languages. If you will your language to be supported by our bot, please contact us. ''' } _ = User.get_my_lang(update) kbd_main_menu = default_menu(_) update.message.reply_text(help[User.get_lang(update.message.chat_id or b'en')], reply_markup=kbd_main_menu)
def show_result(bot, update, user_data): _ = User.get_my_lang(update) kbd_main_menu = default_menu(_) response = '' botan.track(update.message, 'show result') members = models.User.get_members(update.message.chat_id) payments = models.User.get_payments(update.message.chat_id) for payer, payee, amount in optimized(calculate_owns(members, payments)): response += _('User %s :arrow_right: %s :moneybag: %s\n') % ( payer, payee, amount) if not response: response = _('The result is empty') update.message.reply_text(emojize(response, True), reply_markup=kbd_main_menu) send_ads(bot, update, user_data) return CHOOSING
def list_transactions(bot, update, user_data): _ = User.get_my_lang(update) response = '' payments = models.User.get_payments(update.message.chat_id) for payment in payments: response += _('*%s* pays %s for *%s* ') % ( payment['payee'], locale.format('%0.2f', payment['amount'], grouping=True), ','.join( payment['beneficiary'])) if payment.get('description'): response += '_[%s]_' % payment['description'] response += '.\n' if not response: response = _('The result is empty') kbd_main_menu = default_menu(_) update.message.reply_text(response, parse_mode='Markdown', reply_markup=kbd_main_menu) return CHOOSING
def submit_payment(bot, update, user_data): _ = User.get_my_lang(update) kbd_main_menu = default_menu(_) if update.message.text in ['Cancel', _('Cancel')]: update.message.reply_text(_("Payment Cancelled"), reply_markup=kbd_main_menu) else: if not user_data['uncommitted_payment']['beneficiary']: return get_amount(bot, update, user_data, user_data['uncommitted_payment']['amount']) update.message.reply_text(_("Payment Added"), reply_markup=kbd_main_menu) payment = user_data['uncommitted_payment'].copy() payment['description'] = payment['description'][1:] models.User.add_payment(update.message.chat_id, payment) user_data['uncommitted_payment'] = {} return CHOOSING
def start(bot, update, user_data=None): _ = User.get_my_lang(update) kbd_main_menu = default_menu(_) for ids in ADMIN_IDS: bot.sendMessage( chat_id=ids, text='New user joined. %s %s (@%s)' % (update.message.chat.first_name, update.message.chat.last_name, update.message.chat.username)) logging.info('START chat: %s', update.message.chat_id) botan.track(update.message, '/start') user_data.clear() models.User.flush_members(update.message.chat_id) models.User.flush_payments(update.message.chat_id) models.User.set_first_use(update.message.chat_id) models.Bot.add_member(update.message.chat_id) return choose_lang(bot, update)
def choose_lang_cb(bot, update, user_data=None): query = update.callback_query if query and query.data == 'fa': models.User.set_lang(query.message.chat_id, 'fa') else: models.User.set_lang(query.message.chat_id, 'en') _ = User.get_my_lang(update) kbd_main_menu = default_menu(_) bot.answerCallbackQuery(query.id) bot.editMessageText(text=_("You choose English for your default lang"), chat_id=query.message.chat_id, message_id=query.message.message_id) if get_first_use(query.message.chat_id): show_help(bot, update.callback_query, None) bot.sendMessage(text=_('OK Lets start'), chat_id=query.message.chat_id, reply_markup=kbd_main_menu) return states.CHOOSING
def add_payment(bot, update, user_data=None): _ = User.get_my_lang(update) kbd_main_menu = default_menu(_) members = models.User.get_members(update.message.chat_id) if not members: update.message.reply_text(_('Please add some members first!'), reply_markup=kbd_main_menu) return CHOOSING user_data['uncommitted_payment'] = { 'beneficiary': set(), 'amount': 0, 'description': '', 'payee': '' } kbd_members = InlineKeyboardMarkup( [[InlineKeyboardButton(x, callback_data=x)] for x in members]) update.message.reply_text(_('Who Paid? '), reply_markup=kbd_members) return ADD_PAYMENT