Last active
June 22, 2020 14:52
-
-
Save WisnuDS/b87aee2e3bc71d7295cba7d34f8cf7fd to your computer and use it in GitHub Desktop.
Bot for Smart Lurah Application
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import os | |
import logging | |
from datetime import datetime | |
from telegram.ext import Updater, CommandHandler, MessageHandler, Filters | |
import time | |
import requests | |
import json | |
import re | |
BASE_URL = "http://127.0.0.1:8000/api/" | |
logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', | |
level=logging.INFO) | |
logger = logging.getLogger(__name__) | |
def error_callback(update, context): | |
logger.warning('Update "%s" caused error "%s"', update, context.error) | |
user_activity = {} | |
status_syarat = {} | |
def brain(update, context): | |
chat_id = update.message.chat_id | |
activity = user_activity[chat_id].get('activity') | |
if activity == 'registration': | |
data = user_activity[chat_id].get("data") | |
if data.get('name') is None: | |
if update.message.text is not None: | |
user_activity[chat_id]['data']['name'] = update.message.text | |
context.bot.send_message(chat_id=chat_id, text="Silahkan kirim foto ktp anda") | |
else: | |
context.bot.send_message(chat_id=chat_id, | |
text="Anda salah mengirimkan data, seharusnya data yang anda kirim adalah nama anda") | |
elif data.get('url_ktp_photo') is None: | |
if update.message.photo is not None: | |
path = "/" + str(chat_id) + "/registration" | |
try: | |
os.makedirs(os.getcwd() + path) | |
except FileExistsError: | |
pass | |
file_id = update.message.photo[-1].file_id | |
new_file = context.bot.get_file(file_id) | |
fix_path = os.getcwd() + path + "/" + "ktp" + '_' + str(time.time()).replace('.', '_') + '.jpg' | |
user_activity[chat_id]['data']['url_ktp_photo'] = fix_path | |
new_file.download(fix_path) | |
context.bot.send_message(chat_id=chat_id, | |
text="Silahkan Kirim foto diri anda dengan memegang ktp (wajah harus nampak jelas)") | |
else: | |
context.bot.send_message(chat_id=chat_id, | |
text="Anda salah mengirimkan data, seharusnya data yang anda kirim adalah foto ktp anda") | |
elif data.get('url_self_photo') is None: | |
if update.message.photo is not None: | |
path = "/" + str(chat_id) + "/registration" | |
file_id = update.message.photo[-1].file_id | |
new_file = context.bot.get_file(file_id) | |
fix_path = os.getcwd() + path + "/" + "self" + '_' + str(time.time()).replace('.', '_') + '.jpg' | |
user_activity[chat_id]['data']['url_self_photo'] = fix_path | |
new_file.download(fix_path) | |
data = user_activity[chat_id].get('data') | |
print(data) | |
response = requests.post(BASE_URL + "users/", json=data) | |
print(response.json()) | |
context.bot.send_message(chat_id=chat_id, | |
text="Data Anda telah direcord, selanjutnya data anda akan diverifikasi oleh petugas") | |
user_activity[chat_id].clear() | |
else: | |
context.bot.send_message(chat_id=chat_id, | |
text="Anda salah mengirimkan data, seharusnya data yang anda kirim adalah foto diri anda") | |
elif activity == 'syarat': | |
if str(update.message.text).isdigit(): | |
response = requests.get(BASE_URL + 'services/' + str(update.message.text) + '/') | |
json_response = response.json() | |
text = 'Persyaratan yang dibutuhkan untuk mengurus ' + json_response['type_service'] + "\n" | |
i = 1 | |
for data in json_response['detail']: | |
id, name = str(data).split('.') | |
text1 = '{}. {}\n'.format(i, name) | |
text += text1 | |
i += 1 | |
context.bot.send_message(chat_id=chat_id, text=text) | |
user_activity[chat_id].clear() | |
else: | |
context.bot.send_message(chat_id=chat_id, text="Format Inputan yang anda masukan salah, masukan ulang") | |
elif activity == 'pelayanan': | |
if user_activity[chat_id]['state'] == 'chose': | |
if str(update.message.text).isdigit(): | |
response = requests.get(BASE_URL + 'services/' + str(update.message.text) + '/') | |
json_response = response.json() | |
user_response = get_id_user(chat_id) | |
arrangement_data = { | |
"user": "http://127.0.0.1:8000/api/users/{}/".format(user_response['id']), | |
"service": json_response['url'], | |
"date": "{}".format(datetime.today().strftime('%Y-%m-%d')), | |
"status": "not verified" | |
} | |
print(arrangement_data) | |
arrangement = requests.post(BASE_URL + "arrangements/", json=arrangement_data) | |
user_activity[chat_id]["data"] = [] | |
for detail in json_response['detail']: | |
id, name = str(detail).split('.') | |
new_file = { | |
"arrangement": "{}".format(arrangement.json()['url']), | |
"requirement": "http://127.0.0.1:8000/api/service-requirements/{}/".format(id), | |
"url_file": None | |
} | |
user_activity[chat_id]["data"].append(new_file) | |
print(user_activity) | |
id, nama = json_response['detail'][0].split(".") | |
path = "/" + str(chat_id) + "/" + json_response['type_service'] + "_" + str(time.time()).replace('.', | |
'_') | |
try: | |
os.makedirs(os.getcwd() + path) | |
user_activity[chat_id]['path'] = os.getcwd() + path | |
except FileExistsError: | |
print("Fail Create Folder") | |
user_activity[chat_id]['state'] = 'upload' | |
context.bot.send_message(chat_id=chat_id, text="Silahkan Upload " + nama) | |
else: | |
context.bot.send_message(chat_id=chat_id, text="Inputan Anda tidak sesuai") | |
elif user_activity[chat_id]['state'] == 'upload': | |
print(user_activity) | |
if update.message.photo is not None: | |
for data in range(len(user_activity[chat_id]['data'])): | |
if user_activity[chat_id]['data'][data]['url_file'] is None: | |
file_id = update.message.photo[-1].file_id | |
new_file = context.bot.get_file(file_id) | |
fix_path = user_activity[chat_id]['path'] + "/data" + '_' + str(time.time()).replace('.', | |
'_') + '.jpg' | |
user_activity[chat_id]['data'][data]['url_file'] = "{}".format(fix_path) | |
print("Ini Test : ") | |
print(user_activity) | |
new_file.download(fix_path) | |
if data != len(user_activity[chat_id]['data']) - 1: | |
requirement = requests.get(user_activity[chat_id]['data'][data + 1]['requirement']) | |
context.bot.send_message(chat_id=chat_id, | |
text="Silahkan Kirim " + requirement.json()['name_requirement']) | |
else: | |
for file in user_activity[chat_id]['data']: | |
requests.post(BASE_URL + "file-requirement/", json=file) | |
context.bot.send_message(chat_id=chat_id, | |
text="Berkas Anda akan segera diproses dan diverifikasi. Mohon bersabar") | |
user_activity[chat_id].clear() | |
break | |
else: | |
context.bot.send_message(chat_id=chat_id, | |
text="Anda salah mengirimkan data, seharusnya data yang anda kirim adalah foto. Silahkan Kirim dengan benar") | |
else: | |
context.bot.send_message(chat_id=chat_id, text="Anda kebingungan?") | |
def list_pelayanan(): | |
response = requests.get(BASE_URL + 'services/') | |
json_response = response.json() | |
text = '' | |
for data in json_response: | |
text1 = str(data['id']) + '. ' + data['type_service'] + '\n' | |
text += text1 | |
return text | |
def pelayanan(update, context): | |
chat_id = update.message.chat_id | |
if cek_user(chat_id): | |
pelayanan_list = list_pelayanan() | |
text = "Pilih Surat Yang Ingin di Urus :\n\n" + pelayanan_list | |
user_activity[chat_id] = { | |
'activity': 'pelayanan', | |
'state': 'chose', | |
} | |
context.bot.send_message(chat_id=chat_id, text=text) | |
else: | |
context.bot.send_message(chat_id=chat_id, | |
text="Anda belum melakukan registrasi, silahkan registrasi dengan /registrasi") | |
def syarat(update, context): | |
chat_id = update.message.chat_id | |
if cek_user(chat_id): | |
status_syarat[chat_id] = True | |
pelayanan_list = list_pelayanan() | |
text = "Pilih Surat Yang Ingin di Urus untuk melihat persyaratan :\n\n" + pelayanan_list | |
user_activity[chat_id] = { | |
'activity': 'syarat' | |
} | |
context.bot.send_message(chat_id=chat_id, text=text) | |
else: | |
context.bot.send_message(chat_id=chat_id, | |
text="Anda belum melakukan registrasi, silahkan registrasi dengan /registrasi") | |
def cek_user(telegram_id): | |
data = {"telegram_id": telegram_id} | |
response = requests.post(BASE_URL + 'cek-register/', json=data) | |
return response.json()['status'] | |
def get_id_user(telegram_id): | |
data = {"telegram_id": telegram_id} | |
response = requests.post(BASE_URL + 'cek-register/', json=data) | |
return response.json() | |
def do_registration(chat_id): | |
user_activity[chat_id] = { | |
'activity': 'registration', | |
'data': { | |
"telegram_id": str(chat_id), | |
"name": None, | |
"status": "unverified", | |
"url_ktp_photo": None, | |
"url_self_photo": None | |
} | |
} | |
return "Silahkan ketik nama lengkap anda" | |
def registration(update, context): | |
chat_id = update.message.chat_id | |
if cek_user(chat_id): | |
context.bot.send_message(chat_id=chat_id, text="Id anda telah terdaftar dalam database") | |
else: | |
if chat_id in user_activity: | |
context.bot.send_message(chat_id=chat_id, | |
text="Registrasi tidak dapat dilakukan karena anda berada pada aktifitas lain") | |
else: | |
text = do_registration(chat_id) | |
context.bot.send_message(chat_id=chat_id, text=text) | |
def start(update, context): | |
chat_id = update.message.chat_id | |
context.bot.send_message(chat_id=chat_id, text="Selamat Datang Pada Smart Lurah Bot. Apabila anda belum melakukan " | |
"registrasi, silahkan lakukan registrasi dengan mengetik " | |
"/registrasi . Jika anda telah melakukan registrasi, anda dapat " | |
"melihat petunjuk pemakaian dengan mengetik /info") | |
def info(update, context): | |
chat_id = update.message.chat_id | |
context.bot.send_message(chat_id=chat_id, text= | |
"""Berikut tutorial dalam menggunakan bot ini untuk mengurus berkas yang dibutuhkan: | |
1. Silahkan Lihat berkas persyaratan untuk mengurus surat yang anda inginkan dengan mengetik /syarat. | |
2. Persiapkan semua berkas persyaratan yang dibutuhkan | |
3. Apabila berkas persyaratan telah siap maka anda dapat melakukan permintaan pelayanan surat dengan mengetik /pelayanan | |
4. Selanjutnya pilih surat apa yang ingin anda urus | |
5. Kemudian isi dan upload berkas persyaratan sesuai instruksi bot | |
6. Setelah selesai upload, silahkan tunggu verifikasi dari petugas pelayanan kelurahan | |
7. Apabila berkas anda tidak lolos registrasi maka anda akan mendapat pesan penolakan dengan alasan penolakan. Perbaiki berkas sesuai instruksi yang telah diberitahukan oleh petugas pelayanan kelurahan.Kemudian lakukan pengajuan ulang mulai nomor 3 | |
8. Apabila berkas anda lolos verifikasi maka tunggu lagi pemberitahuan untuk mengambil berkas dikelurahan | |
9. Setelah mendapat pesan bahwa surat telah dapat diambil maka pergilah ke kelurahan dengan membawa berkas persyaratan pada nomor 2 dalam bentuk fisik sebagai verifikasi pengambilan surat | |
10. Setelah berkas fisik lolos verifikasi maka anda akan menerima surat yang anda butuhkan""") | |
def main(): | |
updater = Updater('', use_context=True)#Untuk id bot saya sembunyikan karena takut disalah gunakan orang lain | |
dp = updater.dispatcher | |
dp.add_handler(CommandHandler('start', start)) | |
dp.add_handler(CommandHandler('info', info)) | |
dp.add_handler(CommandHandler('syarat', syarat)) | |
dp.add_handler(CommandHandler('registrasi', registration)) | |
dp.add_handler(CommandHandler('pelayanan', pelayanan)) | |
dp.add_handler(MessageHandler(Filters.all, brain)) | |
dp.add_error_handler(error_callback) | |
updater.start_polling() | |
updater.idle() | |
if __name__ == '__main__': | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment