Пример #1
0
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)
Пример #2
0
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
Пример #3
0
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)
Пример #4
0
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)
Пример #5
0
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)
Пример #6
0
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)
Пример #7
0
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')
Пример #8
0
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)
Пример #9
0
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)
Пример #10
0
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
    )
Пример #11
0
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)
Пример #12
0
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)