def action(telegram_item, display_on_empty=True): """ action for /ulangtahun command """ now = datetime.now() list_ulangtahun = user.get_users_by_birthday(now) if len(list_ulangtahun) > 0: list_msg = "\n".join([ str(idx+1) + \ f". {item[0]}" + \ (f"({item[2]})" if item[2] is not None else "") + \ f" - {item[1]}" for idx, item in enumerate(list_ulangtahun) ]) msg = """"{}" Yeaaay, Happy Birthday hari ini ({}) buat : {} Semoga sehat selalu, dimudahkan rezekinya, dilancarkan setiap urusannya, dan semakin ngabreet. Wish you all the best 🥳🎂❤️ """.format( random.choice(msg_ulangtahun), now.strftime('%d-%m-%Y'), list_msg, ) return bot.reply_message(telegram_item, msg) else: print('tidak ada yang ulang tahun hari ini') if display_on_empty: return bot.reply_message(telegram_item, msg_no_ulangtahun)
def action_setalias(telegram_item): """ action for /whatsnew command """ # parse input if 'text' in telegram_item['message']: input_text = telegram_item['message']['text'] input_text = input_text.split(' ', maxsplit=1)[1] # start from after first ' ' val = input_text.split('|') res, msg = user.set_alias(val[0].strip(), val[1].strip() ) print('hasil setalias:', res, msg) bot.reply_message(telegram_item, msg, is_direct_reply=True) return None if not res else res
def action_cekabsensi(telegram_item): """ action for /cekabsensi command """ now = datetime.now() attendance_list = user.get_users_attendance(now.strftime('%Y-%m-%d')) attendance_msg = '' row_num = 1 for row in sorted(attendance_list): if not row[3]: attendance_msg += "{}. {} ({})\n".format(row_num, row[1], row[2]) row_num += 1 msg = """#INFOABSENSI Halo DigiTeam! Presensi kehadiran dan laporan harianmu adalah tanggung jawab sekaligus syarat untuk administrasi penggajian. Berikut nama yang belum Check In hari ini ({}/{}). {} Yuk, maksimalkan aplikasi DigiTeam untuk mudahkan pekerjaanmu! Semangat dan sehat selalu! Hatur nuhun! """.format(now.strftime('%d-%m-%Y'), now.strftime('%H:%M'), attendance_msg) return bot.reply_message(telegram_item, msg)
def action_whatsnew(telegram_item): """ action for /whatsnew command """ # banyak karakter yang perlu di escape agar lolos parsing markdown di telegram. ref: https://core.telegram.org/bots/api#markdownv2-style msg = """Update per 25 September 2020: \- Beberapa perubahan pesan error untuk peserta yang kosong dan salah format \- Command baru `/tambah` untuk menambahkan peserta di laporan yang sudah disubmit """ return bot.reply_message(telegram_item, msg, is_markdown=True)
def action_listproject(telegram_item): """ action for /listproject command """ # banyak karakter yang perlu di escape agar lolos parsing markdown di telegram. ref: https://core.telegram.org/bots/api#markdownv2-style msg = "List project\-project di aplikasi DigiTeam saat ini:\n" key_list = sorted(list(groupware.PROJECT_LIST.keys())) for item in key_list: msg += "\- `{}`\n".format(groupware.PROJECT_LIST[item]['originalName']) return bot.reply_message(telegram_item, msg, is_markdown=True)
def action_whatsnew(telegram_item): """ action for /whatsnew command """ # banyak karakter yang perlu di escape agar lolos parsing markdown di telegram. ref: https://core.telegram.org/bots/api#markdownv2-style msg = """\#UPDATERILIS Per tanggal 26 November 2021, ada beberapa perubahan: \- Perbaikan command `/setalias`\. Untuk mencegah konflik dari alias yang sama, sekarang akan muncul pesan error jika kamu mencoba mendaftarkan user alias yang sudah ada sebelumnya\. \- Untuk command `/checkin` dan `/checkout` sekarang secara default akan menggunakan akun user yang mengirimkan command tersebut, sehingga kamu tidak perlu menyebutkan user kamu sendiri\. """ return bot.reply_message(telegram_item, msg, is_markdown=True)
def action_reload(telegram_item): """ action for /reload_data command """ if db.CONNECTION is not None: db.CONNECTION.close() try: setup() except Exception as e: print(e) print(traceback.print_exc()) bot.process_error(telegram_item, e) return None return bot.reply_message(telegram_item, 'reload success')
def action_cekabsensi(telegram_item): """ action for /cekabsensi command """ now = datetime.now() attendance_list = user.get_users_attendance(now.strftime('%Y-%m-%d')) attendance_msg = '' divisi = None input_data = telegram_item['message']['text'].strip().split(' ') \ if 'text' in telegram_item['message'] \ else [] if len(input_data) > 1: divisi = input_data[1].lower() attendance_list = [ row for row in attendance_list if row[4][:2].lower() == divisi[:2] ] row_num = 1 for row in sorted(attendance_list): if not row[3]: attendance_msg += "{}. {} ({})\n".format(row_num, row[1], row[2]) row_num += 1 if (len(attendance_msg) > 1): msg = """ Halo DigiTeam! Presensi kehadiran dan laporan harianmu adalah tanggung jawab sekaligus syarat untuk administrasi penggajian. Berikut nama-nama yang belum Check In hari ini ({}/{}). {} Yuk, maksimalkan aplikasi DigiTeam untuk mudahkan pekerjaanmu! Semangat dan sehat selalu! Hatur nuhun! """.format(now.strftime('%d-%m-%Y'), now.strftime('%H:%M'), attendance_msg) else: msg = """ Yeaaay, presensi hari ini ({}) sudah lengkap! {} orang sudah mengisi presensi hari ini. Terima kasih banyak buat dedikasi dan kontribusi Digiteam semua untuk mengakselerasi digitalisasi di Jawa Barat. Tetap jaga iman, imun & aman, ya, teman-teman 🥳🥳🥳 """.format(now.strftime('%d-%m-%Y'), len(attendance_list)) if divisi is None: msg = "#INFOABSENSI" + msg else: msg = f"#INFOABSENSI DIVISI {divisi.upper()}" + msg return bot.reply_message(telegram_item, msg)
def action_checkout(item): """ action for /checkout command """ # parse input if 'caption' in item['message']: input_text = item['message']['caption'] elif 'text' in item['message']: input_text = item['message']['text'] lines = input_text.split("\n") first_params = lines[0] first_params = first_params[first_params.find(' ')+1 :] # start from after first ' ' first_params = first_params.split('|') # split with '|' if len(first_params) != 1 : bot.process_error(item, 'Wrong format') return current_time = datetime.now(timezone('Asia/Jakarta')) current_time_utc = current_time.astimezone(timezone('UTC')) checkoutDateTimeFormat = current_time_utc.strftime('%Y-%m-%dT%H:%M:%I.000Z') dateNow = current_time.strftime('%Y-%m-%d') hourMinuteNow = current_time.strftime('%H:%M') username = first_params[0].strip() data = { 'date': checkoutDateTimeFormat, } getToken = user.get_user_token(username) req = requests.post( url=CHECKOUT_URL, headers={ 'Authorization': 'Bearer ' + getToken, }, data=data ) msg = "%s | Checkout Pukul %s %s" % (username , hourMinuteNow, bot.EMOJI_SUCCESS) responseMessage = json.loads(req.text) if req.status_code >= 300: errors = "%s | Checkout Gagal | %s %s " % (username, responseMessage["message"], bot.EMOJI_FAILED) return bot.process_error(item, errors) else: return bot.reply_message(item, msg)
def action_help(telegram_item): """ action for /help command """ input_words = telegram_item['message']['text'].split(' ') pre_msg = '' if len(input_words) < 2 : command = 'default' else: command = input_words[1].lower() if command not in msg: pre_msg = 'Help untuk command `{}` tidak ditemukan\. '.format(command) command = 'default' # create 2 column keyboard layout keyboard=[] i = 0 for cmd in msg.keys(): if cmd == 'default': continue if i%2 == 0 : keyboard.append([]) keyboard[i//2].append({ 'text': '/help ' + cmd }) i = i + 1 keyboard_data = None if command != 'default' else { 'reply_markup' : { # create 2 row keyboard layout 'keyboard': keyboard, 'one_time_keyboard' : True, 'selective': False, 'resize_keyboard': True, }, } return bot.reply_message( telegram_item, pre_msg + msg[command], is_markdown=True, is_direct_reply=True, custom_data=keyboard_data )
def action_checkin(item, peserta=None): """ action for /checkin command """ # parse input if 'caption' in item['message']: input_text = item['message']['caption'] elif 'text' in item['message']: input_text = item['message']['text'] lines = input_text.split("\n") first_params = lines[0] first_params = first_params[first_params.find(' ') + 1:] # start from after first ' ' first_params = first_params.split('|') # split with '|' if len(first_params) != 2: bot.process_error(item, 'Wrong format') return current_time = datetime.now(timezone('Asia/Jakarta')) current_time_utc = current_time.astimezone(timezone('UTC')) checkinDateTimeFormat = current_time_utc.strftime('%Y-%m-%dT%H:%M:%I.000Z') dateNow = current_time.strftime('%Y-%m-%d') hourMinuteNow = current_time.strftime('%H:%M') username = first_params[0].strip() location = first_params[1].strip().upper() locationAvailable = ['WFH', 'WFO', 'PERJADIN'] if location in locationAvailable: data = { 'date': checkinDateTimeFormat, 'location': location, 'message': "HADIR", 'note': "", } getToken = user.get_user_token(username) req = requests.post(url=CHECKIN_URL, headers={ 'Authorization': 'Bearer ' + getToken, }, data=data) msg = "%s | HADIR %s Pukul %s %s %s" % ( username, dateNow, hourMinuteNow, bot.EMOJI_SUCCESS, location) responseMessage = json.loads(req.text) if req.status_code >= 300: errors = "%s | Checkin Gagal | %s %s " % ( username, responseMessage["message"], bot.EMOJI_FAILED) return bot.process_error(item, errors) else: return bot.reply_message(item, msg) else: msg = "Checkin gagal | Jenis kehadiran anda tidak sesuai" return bot.reply_message(item, msg)
def action_about(telegram_item): """ action for /about command """ # banyak karakter yang perlu di escape agar lolos parsing markdown di telegram. ref: https://core.telegram.org/bots/api#markdownv2-style msg = """Halo\! Aku adalah {}\. Aku ditugaskan untuk membantu melakukan rekap evidence gambar, nama proyek, dan nama task laporan harian otomatis ke aplikasi digiteam groupware\. Silahkan ketik di kolom chat `/help` untuk melihat command\-command yang bisa aku lakukan\! """.format( bot.BOT_NICKNAME) return bot.reply_message(telegram_item, msg, is_markdown=True)