def waktu_main(nomor_soal, ruangan): nomor, tanya, waktu = soal[ruangan] if nomor == nomor_soal: for pion in playah[ruangan]["pemain"]: if not (pion in kebenaran[ruangan]["benar"]) and not (pion in kebenaran[ruangan]["salah"]): kebenaran[ruangan]["nyerah"].append(pion) if len(kebenaran[ruangan]["nyerah"]) > 0: line_bot_api.push_message(ruangan, TextSendMessage(text='Kak '+", ".join([panggil(sender) for sender in kebenaran[ruangan]["nyerah"]])+' menyerah dan tidak dapat mengikuti permainan lagi :('))
def handle_location_message(event): cinemaxxi.handle_location_message(event) if event.source.user_id in perintah: komando, waktu = perintah[event.source.user_id] if komando == "lokasi": line_bot_api.reply_message( event.reply_token, TextSendMessage(text='Kak ' + panggil(event.source.user_id) + ' sekarang berada di ' + event.message.address + ' ;)')) data = { 'nama_lokasi': event.message.address, 'latitude': event.message.latitude, 'longitude': event.message.longitude } db.child("pengguna").child(event.source.user_id).child( "tambahan").child("lokasi").set(data) del perintah[event.source.user_id]
def handle_postback(event): if isinstance(event.source, SourceGroup): kirim = event.source.sender_id elif isinstance(event.source, SourceRoom): kirim = event.source.room_id else: kirim = event.source.user_id sender = event.source.user_id try: if event.postback.data[0] == '/': data = event.postback.data[1:].split(" ",1) if len(data) > 1: cmd, args = data[0].lower(), data[1] else: cmd, args = data[0].lower(), "" if cmd == "main": pesan = TemplateSendMessage( alt_text='Kamu yakin?', template=ConfirmTemplate( text='Kamu akan diberikan beberapa soal yang berhubungan dengan film. Siapkah kamu menjawabnya?', actions=[ PostbackAction( label='Siap', text='Siapp, siapa takut?', data='/quiz ready' ), PostbackAction( label='Tidak', text='Belum, saya masih gatau apa-apa tentang film T_T', data='/quiz not ready' ) ] ) ) line_bot_api.reply_message(event.reply_token, pesan) elif cmd == 'nyerah': if kirim in playah: if sender in playah[kirim]["pemain"]: if sender in kebenaran[kirim]["nyerah"]:return if playah[kirim]["status"] == "mulai": kebenaran[kirim]["nyerah"].append(sender) line_bot_api.reply_message(event.reply_token, TextSendMessage(text='Kak '+panggil(sender)+' menyerah dan tidak dapat melanjutkan permainan :(')) else: try: nomor, tanya, waktu = soal[kirim] except: line_bot_api.reply_message(event.reply_token, TextSendMessage(text='Kak '+panggil(sender)+' tidak dalam permainan ._.')) return data = qz.child("Quiz").child("Skor Pribadi").child(sender).get().val() nama = line_bot_api.get_profile(sender).display_name poin = data["poin"] try: gambar = line_bot_api.get_profile(sender).picture_url except: gambar = "" line_bot_api.reply_message(event.reply_token, hasil_akhir(nama, nomor-1, poin, gambar)) del soal[kirim] del selesai[kirim] elif cmd == 'quiz': if args == 'ready': if event.source.type == 'user': try: data = qz.child("Quiz").child("Skor Pribadi").child(sender).get().val() poin = data["poin"] except: data = {"poin":0,"waktu":time.time()} qz.child("Quiz").child("Skor Pribadi").child(sender).set(data) pertanyaan = qz.child("Quiz").child("Pilihan").get().val() tanya = random.choice([i for i in pertanyaan]) pilihan = [i for i in pertanyaan[tanya]["Jawaban"]] film = pertanyaan[tanya]["Film"] try: gambar = pertanyaan[tanya]["Gambar"] except: gambar = "" nomor = 1 soal.update({kirim:[nomor, tanya, time.time()]}) selesai.update({kirim:[]}) selesai[kirim].append(tanya) line_bot_api.reply_message(event.reply_token, film_quiz("Pertanyaan "+str(nomor)+"/10", tanya, film, pilihan, gambar)) else: line_bot_api.reply_message(event.reply_token, pemain(aturan)) playah.update({kirim:{"status":"pending","pemain":[]}}) t = Timer(60, cek_pemain, [kirim]) t.start() else: line_bot_api.reply_message(event.reply_token, TextSendMessage(text='Kabarin kalau udah siap ya kak ;D')) elif cmd == 'join': durasi = time.time() - float(args) try: status = playah[kirim]["status"] except: line_bot_api.reply_message(event.reply_token, mulai_permainan()) return if sender in playah[kirim]["pemain"]: line_bot_api.reply_message(event.reply_token, TextSendMessage(text='Kak '+panggil(sender)+' sudah memasuki permainan ._.')) return if status == 'pending': if durasi < 30*60: #30 menit playah[kirim]["pemain"].append(sender) try: main = qz.child("Quiz").child("Skor").child(kirim).child(sender).get().val() poin = main["poin"] except: data = {"poin":0,"waktu":time.time()} qz.child("Quiz").child("Skor").child(kirim).child(sender).set(data) line_bot_api.reply_message(event.reply_token, TextSendMessage(text='Kak '+panggil(sender)+' telah bergabung ;D')) if len(playah[kirim]["pemain"]) == 5: line_bot_api.push_message(kirim, [ TextSendMessage(text='5 pemain telah terkumpul ;D'), TextSendMessage(text='Kalian bisa menunggu atau langsung memulai permainan'), TextSendMessage(text='Ketik /mulai jika ingin memulai permainan ;)') ] ) else: line_bot_api.reply_message(event.reply_token, TextSendMessage(text='Waktu untuk bergabung sudah habis kak '+panggil(sender)+' :(')) else: line_bot_api.reply_message(event.reply_token, TextSendMessage(text='Kak '+panggil(sender)+' tidak dapat bergabung karena permainan sedang berlangsung ;)')) elif cmd == 'jawab': if kirim in soal: nomor, tanya, waktu = soal[kirim] bertanya = qz.child("Quiz").child("Pilihan").get().val() bertanya = bertanya[tanya] try: menjawab = bertanya["Jawaban"][args] except: line_bot_api.reply_message(event.reply_token, TextSendMessage(text='Tidak ada pilihan yang kak '+panggil(sender)+' pilih di soal ini :(')) return if event.source.type == 'user': if menjawab == 'Benar': data = qz.child("Quiz").child("Skor Pribadi").child(sender).get().val() poin = data["poin"] + 1 qz.child("Quiz").child("Skor Pribadi").child(sender).set({"poin":poin,"waktu":time.time()}) pertanyaan = qz.child("Quiz").child("Pilihan").get().val() tanya = random.choice([i for i in pertanyaan]) while tanya in selesai[kirim]: tanya = random.choice([i for i in pertanyaan]) selesai[kirim].append(tanya) pilihan = [i for i in pertanyaan[tanya]["Jawaban"]] film = pertanyaan[tanya]["Film"] try: gambar = pertanyaan[tanya]["Gambar"] except: gambar = "" if nomor < 10: nomor = nomor + 1 soal.update({kirim:[nomor, tanya, time.time()]}) line_bot_api.reply_message(event.reply_token, [ TextSendMessage(text='Kak '+panggil(sender)+' benar ;D'), film_quiz("Pertanyaan "+str(nomor)+"/10", tanya, film, pilihan, gambar) ] ) else: data = qz.child("Quiz").child("Skor Pribadi").get().val() nama = line_bot_api.get_profile(sender).display_name poin = data[sender]["poin"] skorlist = {} for p in data: skornya = data[p]["poin"] waktu = data[p]["waktu"] skorlist.update({p:[skornya, waktu]}) line_bot_api.reply_message(event.reply_token, hasil_akhir(nama, nomor, poin, skorlist)) del soal[kirim] del selesai[kirim] else: data = qz.child("Quiz").child("Skor Pribadi").child(sender).get().val() nama = line_bot_api.get_profile(sender).display_name poin = data["poin"] try: gambar = line_bot_api.get_profile(sender).picture_url except: gambar = "" line_bot_api.reply_message(event.reply_token, [ TextSendMessage(text='Kak '+panggil(sender)+' salah :('), hasil_akhir(nama, nomor-1, poin, gambar) ] ) del soal[kirim] del selesai[kirim] else: main = qz.child("Quiz").child("Skor").child(kirim).child(sender).get().val() try: poin = main["poin"] except: poin = 0 if sender not in playah[kirim]["pemain"]:return benar = kebenaran[kirim]["benar"] salah = kebenaran[kirim]["salah"] nyerah = kebenaran[kirim]["nyerah"] if sender in benar or sender in salah or sender in nyerah:return if menjawab == 'Benar': if sender not in benar or sender not in salah or sender not in nyerah: if len(kebenaran[kirim]["benar"]) == 0: poin += 5 kebenaran[kirim]["benar"].append(sender) line_bot_api.reply_message(event.reply_token, TextSendMessage(text='Kak '+panggil(sender)+' benar dan mendapatkan 5 poin. Total: '+str(poin)+' poin ;D')) elif len(kebenaran[kirim]["benar"]) == 1: poin += 3 kebenaran[kirim]["benar"].append(sender) line_bot_api.reply_message(event.reply_token, TextSendMessage(text='Kak '+panggil(sender)+' benar dan mendapatkan 3 poin. Total: '+str(poin)+' poin ;D')) elif len(kebenaran[kirim]["benar"]) == 2: poin += 1 kebenaran[kirim]["benar"].append(sender) line_bot_api.reply_message(event.reply_token, TextSendMessage(text='Kak '+panggil(sender)+' benar dan mendapatkan 1 poin. Total: '+str(poin)+' poin ;D')) else: kebenaran[kirim]["benar"].append(sender) line_bot_api.reply_message(event.reply_token, TextSendMessage(text='Kak '+panggil(sender)+' benar ;)')) else: if (sender not in kebenaran[kirim]["benar"]) or (sender not in kebenaran[kirim]["salah"]) or (sender not in kebenaran[kirim]["nyerah"]): poin = poin - 1 kebenaran[kirim]["salah"].append(sender) line_bot_api.reply_message(event.reply_token, TextSendMessage(text='Kak '+panggil(sender)+' salah, dikurangi 1 poin. :(\nTotal: '+str(poin)+' poin.')) if nomor < 10: benar = len(kebenaran[kirim]["benar"]) salah = len(kebenaran[kirim]["salah"]) nyerah = len(kebenaran[kirim]["nyerah"]) if (benar + salah + nyerah) == len(playah[kirim]["pemain"]): pertanyaan = qz.child("Quiz").child("Pilihan").get().val() tanya = random.choice([i for i in pertanyaan]) pilihan = [i for i in pertanyaan[tanya]["Jawaban"]] film = pertanyaan[tanya]["Film"] try: gambar = pertanyaan[tanya]["Gambar"] except: gambar = "" nomor = nomor + 1 soal.update({kirim:[nomor, tanya, time.time()]}) line_bot_api.push_message(kirim, film_quiz("Pertanyaan "+str(nomor)+"/10", tanya, film, pilihan, gambar)) nyerah = [i for i in kebenaran[kirim]["nyerah"]] kebenaran.update({kirim:{"benar":[],"salah":[],"nyerah":nyerah}}) t = Timer(60, waktu_main, (nomor, kirim)) t.start() else: skornya = qz.child("Quiz").child("Skor").child(kirim).get().val() skor_trakhir = {} for u in skornya: total_skor = skornya[u]["poin"] + poin skor_trakhir.update({u:total_skor}) line_bot_api.reply_message(event.reply_token, skor_akhir(skor_trakhir)) del playah[kirim] del kebenaran[kirim] data = {"poin":poin,"waktu":time.time()} qz.child("Quiz").child("Skor").child(kirim).child(sender).set(data) except Exception as e: try: et, ev, tb = sys.exc_info() lineno = tb.tb_lineno fn = tb.tb_frame.f_code.co_filename if sender != owner: line_bot_api.reply_message(event.reply_token, [ TextSendMessage(text='Oopps.. '+namaBot.capitalize()+' ada kesalahan kak :('), TextSendMessage(text='Tapi tenang kak, laporan kesalahan ini terkirim ke owner untuk diperbaiki ;D') ] ) line_bot_api.push_message(owner, TextSendMessage(text="[Expectation Failed] %s Line %i - %s"% (fn, lineno, str(e)))) except: line_bot_api.push_message(owner, TextSendMessage(text="Undescribeable error detected!!"))
def handle_message(event): if isinstance(event.source, SourceGroup): kirim = event.source.sender_id elif isinstance(event.source, SourceRoom): kirim = event.source.room_id else: kirim = event.source.user_id sender = event.source.user_id text = event.message.text try: if sender in perintah: komando, waktu = perintah[sender] if komando == 'Cari film imdb': line_bot_api.reply_message( event.reply_token, TextSendMessage(text='Sebentar kak ' + panggil(sender) + ', ' + namaBot.capitalize() + ' sedang menyiapkan hasil pencarian ;)')) pencarian.update({text: []}) for i in search_movie_imdb(text): pencarian[text].append(i) hasil = pencarian[text] if len(hasil) > 10: hasil = hasil[:9] kirimin = list() for r in hasil: kirimin.append(r) kirimin.append( BubbleContainer(body=BoxComponent( layout='vertical', spacing='sm', contents=[ ButtonComponent(action=PostbackAction( label='Selanjutnya', text='Selain itu?', data='/imdb ' + text.replace(' ', '+') + ' 9'), flex=1, gravity='center') ]))) pesan = FlexSendMessage( alt_text='Hasil pencarian: ' + text, contents=CarouselContainer(contents=kirimin)) else: pesan = FlexSendMessage( alt_text='Hasil pencarian: ' + text, contents=CarouselContainer(contents=hasil)) line_bot_api.push_message(sender, pesan) del perintah[sender] if text == 'Cek film dong': line_bot_api.reply_message( event.reply_token, TextSendMessage(text='Kak ' + panggil(sender) + ' mau cari film apa?')) perintah.update({sender: ['Cari film imdb', time.time()]}) except Exception as e: try: et, ev, tb = sys.exc_info() lineno = tb.tb_lineno fn = tb.tb_frame.f_code.co_filename if sender != owner: line_bot_api.reply_message(event.reply_token, [ TextSendMessage(text='Oopps.. ' + namaBot.capitalize() + ' ada kesalahan kak :('), TextSendMessage( text= 'Tapi tenang kak, laporan kesalahan ini terkirim ke owner untuk diperbaiki ;D' ) ]) line_bot_api.push_message( owner, TextSendMessage(text="[Expectation Failed] %s Line %i - %s" % (fn, lineno, str(e)))) except: line_bot_api.push_message( owner, TextSendMessage(text="Undescribeable error detected!!"))
def handle_message(event): try: if isinstance(event.source, SourceGroup): kirim = event.source.sender_id elif isinstance(event.source, SourceRoom): kirim = event.source.room_id else: kirim = event.source.user_id sender = event.source.user_id text = event.message.text # MENGAMBIL INPUTAN PENGGUNA if sender in perintah: komando, waktu = perintah[sender] # MENAMPILKAN BIOSKOP DI KOTA if komando == "Cek bioskop": try: cinema = cinema21.Cinema21() kota = text.lower() for y in cinema.cities()[0]: if kota == y[1].lower(): kode = y[0] terdekat = cinema.city_cinemas(kode) premiere = terdekat[0] xxi = terdekat[1] imax = terdekat[2] res = list() if len(premiere) > 0: for film in premiere: bioskop = film[4] kode = film[0] keterangan = film[6].replace('\r', '') res.append( BubbleContainer( header=BoxComponent( layout='vertical', contents=[ TextComponent(text=bioskop, size='lg', align='center', weight='bold', color='#f4f4f4', wrap=True) ]), hero=ImageComponent( url= 'https://i.postimg.cc/28r8Vsnt/premiere.png', size='full', aspect_ratio='3:1', aspect_mode='cover'), body=BoxComponent(layout='vertical', contents=[ TextComponent( text=keterangan, margin='lg', size='sm', align='center', color='#e4e4e4', wrap=True) ]), footer=BoxComponent( layout='horizontal', contents=[ ButtonComponent( action=PostbackAction( text='Mau liat film di ' + bioskop.capitalize() + ' dong', label='Lihat Film', data='/cek_bioskop ' + kode), color='#860000', style='primary') ]), styles=BubbleStyle( header=BlockStyle( background_color='#000000'), body=BlockStyle( background_color='#000000'), footer=BlockStyle( background_color='#000000')))) if len(xxi) > 0: for film in xxi: bioskop = film[4] kode = film[0] keterangan = film[6].replace('\r', '') res.append( BubbleContainer( header=BoxComponent( layout='vertical', contents=[ TextComponent(text=bioskop, size='lg', align='center', weight='bold', color='#f4f4f4', wrap=True) ]), hero=ImageComponent( url= 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTiTQHHaE05tNJ7cNhMbE6DmB0EXBHe0HnbRULKt0YpG9-uc5v5', size='full', aspect_ratio='3:1', aspect_mode='cover'), body=BoxComponent(layout='vertical', contents=[ TextComponent( text=keterangan, margin='lg', size='sm', align='center', color='#e4e4e4', wrap=True) ]), footer=BoxComponent( layout='horizontal', contents=[ ButtonComponent( action=PostbackAction( text='Mau liat film di ' + bioskop.capitalize() + ' dong', label='Lihat Film', data='/cek_bioskop ' + kode), color='#860000', style='primary') ]), styles=BubbleStyle( header=BlockStyle( background_color='#000000'), body=BlockStyle( background_color='#000000'), footer=BlockStyle( background_color='#000000')))) if len(imax) > 0: for film in imax: bioskop = film[4] kode = film[0] keterangan = film[6].replace('\r', '') res.append( BubbleContainer( header=BoxComponent( layout='vertical', contents=[ TextComponent(text=bioskop, size='lg', align='center', weight='bold', color='#f4f4f4', wrap=True) ]), hero=ImageComponent( url= 'https://i.postimg.cc/nLY3cQxg/imax.png', size='full', aspect_ratio='3:1', aspect_mode='cover'), body=BoxComponent(layout='vertical', contents=[ TextComponent( text=keterangan, margin='lg', size='sm', align='center', color='#e4e4e4', wrap=True) ]), footer=BoxComponent( layout='horizontal', contents=[ ButtonComponent( action=PostbackAction( text='Mau liat film di ' + bioskop.capitalize() + ' dong', label='Lihat Film', data='/cek_bioskop ' + kode), color='#860000', style='primary') ]), styles=BubbleStyle( header=BlockStyle( background_color='#000000'), body=BlockStyle( background_color='#000000'), footer=BlockStyle( background_color='#000000')))) hasil = FlexSendMessage( alt_text="Bioskop di " + text, contents=CarouselContainer(contents=res)) line_bot_api.reply_message(event.reply_token, hasil) except Exception as e: try: et, ev, tb = sys.exc_info() lineno = tb.tb_lineno fn = tb.tb_frame.f_code.co_filename if sender != owner: line_bot_api.reply_message(event.reply_token, [ TextSendMessage(text='Oopps.. ' + namaBot.capitalize() + ' ada kesalahan kak :('), TextSendMessage( text= 'Tapi tenang kak, laporan kesalahan ini terkirim ke owner untuk diperbaiki ;D' ) ]) line_bot_api.push_message( owner, TextSendMessage( text="[Expectation Failed] %s Line %i - %s" % (fn, lineno, str(e)))) except: line_bot_api.push_message( owner, TextSendMessage( text="Undescribeable error detected!!")) del perintah[sender] # CHAT BIASA if text == "Cek film bioskop": data = db.child("pengguna").get().val()[sender] try: lokasi = data["tambahan"]["lokasi"] lat = lokasi["latitude"] lng = lokasi["longitude"] line_bot_api.push_message(kirim, bioskop_terdekat(lat, lng)) except: perintah.update( {sender: ['Cek bioskop terdekat', time.time()]}) line_bot_api.reply_message( event.reply_token, TextSendMessage(text="Share lokasi dulu kak " + panggil(sender) + ", nanti kucarikan bioskop terdekat ;)", quick_reply=QuickReply(items=[ QuickReplyButton(action=LocationAction( label='Share lokasi')) ]))) except Exception as e: try: et, ev, tb = sys.exc_info() lineno = tb.tb_lineno fn = tb.tb_frame.f_code.co_filename if sender != owner: line_bot_api.reply_message(event.reply_token, [ TextSendMessage(text='Oopps.. ' + namaBot.capitalize() + ' ada kesalahan kak :('), TextSendMessage( text= 'Tapi tenang kak, laporan kesalahan ini terkirim ke owner untuk diperbaiki ;D' ) ]) line_bot_api.push_message( owner, TextSendMessage(text="[Expectation Failed] %s Line %i - %s" % (fn, lineno, str(e)))) except: line_bot_api.push_message( owner, TextSendMessage(text="Undescribeable error detected!!"))
def handle_postback(event): sender = event.source.user_id try: if event.postback.data[0] == '/': data = event.postback.data[1:].split(" ", 1) if len(data) > 1: cmd, args = data[0].lower(), data[1] else: cmd, args = data[0].lower(), "" if cmd == "pengingat": try: data = db.child("pengguna").child(sender).child( "tambahan").get().val() zona = data["zona_waktu"] sekarang = datetime.today() if sekarang.minute < 10: menit = '0' + str(sekarang.minute) else: menit = str(sekarang.minute) if sekarang.hour < 10: jam = '0' + str(sekarang.hour) else: jam = str(sekarang.hour) pesan = TemplateSendMessage( alt_text='Liat pengingat atau mau nambahin pengingat?', template=ButtonsTemplate( title='Pengingat', text='Mau cek atau nambahin pengingat?', actions=[ PostbackAction(label='Cek Pengingat', text='Mau cek pengingat', data='/cek_pengingat'), DatetimePickerAction( label='Tambah pengingat', text='Mau nambahin pengingat', data='/tambah_pengingat', mode='datetime', initial=str(sekarang.year) + '-' + str(sekarang.month) + '-' + str(sekarang.day + 1) + 't' + jam + ':' + menit, min=str(sekarang.date()) + 't' + jam + ':' + menit) ])) line_bot_api.reply_message(event.reply_token, pesan) except: line_bot_api.reply_message(event.reply_token, [ TextSendMessage( text='Kak ' + panggil(sender) + ' belum menentukan zona waktu, silahkan dipilih dulu ;D' ), indozone() ]) elif cmd == 'zona': try: data = db.child("pengguna").child(sender).child( "tambahan").get().val() sekarang = data["zona_waktu"] except: sekarang = "" if not sekarang == "": if args != sekarang: konfirm = TemplateSendMessage( alt_text='Kamu ingin mengubah zona waktu kamu?', template=ConfirmTemplate( text='Kamu ingin mengubah zona waktu kamu dari ' + sekarang + ' ke ' + args.upper() + '?', actions=[ PostbackAction(label='Iya', text='Iya', data='/ubah_zona_waktu ' + args), PostbackAction( label='Tidak', text='Tidak', data='/ubah_zona_waktu tidak') ])) line_bot_api.reply_message(event.reply_token, konfirm) else: line_bot_api.reply_message( event.reply_token, TextSendMessage(text='Zona waktu kak ' + panggil(sender) + ' sudah ' + args.upper() + ' :|')) else: db.child("pengguna").child(sender).child("tambahan").child( "zona_waktu").set(args.upper()) line_bot_api.reply_message( event.reply_token, TextSendMessage(text='Zona waktu kak ' + panggil(sender) + ' berhasil diset ;D')) if sender in remind_me: status, kalender = remind_me[sender] if status == 'pending': t_timestamp = time.mktime( datetime.strptime( kalender, "%Y-%m-%dT%H:%M").timetuple()) MENIT = 60 JAM = MENIT * 60 if args.upper() == 'WITA': t_timestamp = t_timestamp + (1 * JAM) elif args.upper() == 'WIT': t_timestamp = t_timestamp + (2 * JAM) durasi = t_timestamp - time.time() if int(durasi) <= 20: line_bot_api.push_message( sender, [ TextSendMessage( text='Maaf kak ' + panggil(sender) + ', waktunya udah lewat :('), TextSendMessage( text='Silahkan pilih waktu lagi ;D' ) ]) del remind_me[sender] else: remind_me.update( {sender: ['sukses', kalender]}) line_bot_api.push_message( sender, TextSendMessage( text='Kak ' + panggil(sender) + ' mau diingatkan apa pada tanggal ' + tgl + ' bulan ' + bulan(int(bln)) + ' tahun ' + thn + ' jam ' + jamku + '?')) elif cmd == 'zona_waktu': line_bot_api.reply_message(event.reply_token, indozone()) elif cmd == 'ubah_zona_waktu': try: sekarang = db.child("pengguna").child(sender).child( "tambahan").child("zona_waktu").get().val() if args != 'tidak': if sekarang.lower() == args: line_bot_api.reply_message( event.reply_token, TextSendMessage(text="Kak " + panggil(sender) + " sudah " + args.upper() + " :|")) else: db.child("pengguna").child(sender).child( "tambahan").child("zona_waktu").update( args.upper()) line_bot_api.reply_message( event.reply_token, TextSendMessage(text='Zona waktu kak ' + panggil(sender) + ' berhasil diubah menjadi ' + args.upper() + ' ;D')) else: line_bot_api.reply_message( event.reply_token, TextSendMessage(text='Zona waktu kak ' + panggil(sender) + ' tetap ' + sekarang + ' ;D')) except: line_bot_api.reply_message(event.reply_token, [ TextSendMessage(text='Kak ' + panggil(sender) + ' belum menentukan zona waktu :('), TextSendMessage( text='Silahkan pilih zona waktu terlebih dahulu ;D' ), indozone() ]) elif cmd == 'tambah_pengingat': kalender = event.postback.params['datetime'] t_timestamp = time.mktime( datetime.strptime(kalender, "%Y-%m-%dT%H:%M").timetuple()) durasi = t_timestamp - time.time() if int(durasi) <= 0: line_bot_api.reply_message(event.reply_token, [ TextSendMessage(text='Maaf kak ' + panggil(sender) + ', waktunya udah lewat :('), TextSendMessage(text='Silahkan pilih waktu lagi ;D') ]) return try: status = 'sukses' data = db.child("pengguna").child(sender).child( "tambahan").get().val() zona_waktu = data["zona_waktu"] tanggal, jamku = kalender.split("T") thn, bln, tgl = tanggal.split('-') line_bot_api.reply_message( event.reply_token, TextSendMessage(text='Kak ' + panggil(sender) + ' mau diingatkan apa pada tanggal ' + tgl + ' bulan ' + bulan(int(bln)) + ' tahun ' + thn + ' jam ' + jamku + '?')) except: status = 'pending' line_bot_api.reply_message(event.reply_token, [ TextSendMessage( text='Maaf kak, kak ' + panggil(sender) + ' belum memberitahu zona waktu kakak :('), TextSendMessage(text='Silahkan dipilih dulu kak ;D'), indozone() ]) remind_me.update({sender: [status, kalender]}) elif cmd == 'cek_pengingat': try: sekarang = datetime.today() if sekarang.minute < 10: menit = '0' + str(sekarang.minute) else: menit = str(sekarang.minute) if sekarang.hour < 10: jam = '0' + str(sekarang.hour) else: jam = str(sekarang.hour) kumpulan = list() atur = {} reminder = db.child("pengguna").child(sender).child( "tambahan").child("pengingat").get().val() for alarm in reminder: waktu = reminder[alarm]["jam"] tanggal = reminder[alarm]["tanggal"] waktu_alarm = tanggal + " " + waktu t_timestamp = time.mktime( datetime.strptime(waktu_alarm, "%d-%m-%Y %H:%M").timetuple()) durasi = t_timestamp - time.time() atur.update({durasi: [alarm, tanggal, waktu]}) tambahan = db.child("pengguna").child(sender).child( "tambahan").get().val() zona_waktu = tambahan["zona_waktu"] diatur = [i for i in atur.keys()] diatur.sort() for r in diatur: alarm, tanggal, waktu = atur[r] kumpulan.append( BoxComponent( layout='baseline', margin='sm', contents=[ TextComponent( text=reminder[alarm]["tanggal"], size='xs', align='center'), TextComponent(text=reminder[alarm]["jam"], size='xs', align='center'), TextComponent(text=alarm, size='xs', align='center', wrap=True) ])) jadwal = BubbleContainer( direction='ltr', body=BoxComponent( layout='vertical', contents=[ TextComponent(text='PENGINGAT', align='center', weight='bold', color='#aaaaaa'), SeparatorComponent(margin='md'), TextComponent( text='Berikut ini pengingat kak ' + panggil(sender) + ' ;D', size='sm', align='start', gravity='top', margin='md', wrap=True), BoxComponent(layout='baseline', contents=[ TextComponent( text='Zona Waktu', size='xs', color='#7b7b7b'), TextComponent(text=zona_waktu, flex=2, size='xs', color='#7b7b7b') ]), SeparatorComponent(margin='lg'), BoxComponent( layout='vertical', margin='sm', contents=[ BoxComponent( layout='baseline', contents=[ TextComponent(text='Tanggal', size='xs', align='center', weight='bold', color='#939393'), TextComponent(text='Jam', size='xs', align='center', weight='bold', color='#939393'), TextComponent(text='Agenda', size='xs', align='center', weight='bold', color='#939393') ]), SeparatorComponent(margin='xs'), BoxComponent(layout='vertical', margin='sm', contents=kumpulan) ]) ]), footer=BoxComponent( layout='horizontal', contents=[ ButtonComponent(action=DatetimePickerAction( label='Tambah pengingat', text='Mau nambahin pengingat', data='/tambah_pengingat', mode='datetime', initial=str(sekarang.year) + '-' + str(sekarang.month) + '-' + str(sekarang.day + 1) + 't' + jam + ':' + menit, min=str(sekarang.date()) + 't' + jam + ':' + menit), color='#ffffff', height='sm') ]), styles=BubbleStyle(footer=BlockStyle( background_color='#00318d'))) kirim = FlexSendMessage(alt_text='Pengingat', contents=jadwal) line_bot_api.reply_message(event.reply_token, kirim) except: line_bot_api.reply_message( event.reply_token, TextSendMessage(text='Kamu tidak memiliki pengingat.')) except Exception as e: try: et, ev, tb = sys.exc_info() lineno = tb.tb_lineno fn = tb.tb_frame.f_code.co_filename line_bot_api.push_message( sender, TextSendMessage(text="[Expectation Failed] %s Line %i - %s" % (fn, lineno, str(e)))) except: line_bot_api.push_message( sender, TextSendMessage(text="Undescribeable error detected!!"))
def handle_message(event): sender = event.source.user_id text = event.message.text try: startTime = time.time() cmds.handle_message(event) cinemaxxi.handle_message(event) yify_torrent.handle_message(event) quiz.handle_message(event) notif.handle_message(event) imdbthing.handle_message(event) gid = event.source.sender_id #get group_id profil = line_bot_api.get_profile(sender) try: nama = panggil(sender) #Ini buat nama except: data = { 'nama': line_bot_api.get_profile(event.source.user_id).display_name, 'foto': line_bot_api.get_profile(event.source.user_id).picture_url, 'status': line_bot_api.get_profile(event.source.user_id).status_message, 'waktu_add': time.time() } db.child("pengguna").child(event.source.user_id).set(data) gambar = profil.picture_url #Ini profile picture status = profil.status_message #Ini status di line def stimey(total_seconds): try: MINUTE = 60 HOUR = MINUTE * 60 DAY = HOUR * 24 days = int(total_seconds / DAY) hours = int((total_seconds % DAY) / HOUR) minutes = int((total_seconds % HOUR) / MINUTE) seconds = int(total_seconds % MINUTE) string = list() if days > 0: string.append(str(days) + " hari") if hours > 0: string.append(str(hours) + " jam") if minutes > 0: string.append(str(minutes) + " menit") if seconds > 0: string.append(str(seconds) + " detik") else: if len(string) == 0: string.append("0 detik") if len(string) > 1: return ", ".join(string[:-1]) + ", dan " + string[-1] else: return ", ".join(string) except Exception as e: try: et, ev, tb = sys.exc_info() lineno = tb.tb_lineno fn = tb.tb_frame.f_code.co_filename if sender != owner: line_bot_api.reply_message(event.reply_token, [ TextSendMessage(text='Oopps.. ' + namaBot.capitalize() + ' ada kesalahan kak :('), TextSendMessage( text= 'Tapi tenang kak, laporan kesalahan ini terkirim ke owner untuk diperbaiki ;D' ) ]) line_bot_api.push_message( owner, TextSendMessage( text="[Expectation Failed] %s Line %i - %s" % (fn, lineno, str(e)))) except: line_bot_api.push_message( owner, TextSendMessage( text="Undescribeable error detected!!")) if isinstance(event.source, SourceGroup): kirim = gid elif isinstance(event.source, SourceRoom): kirim = event.source.room_id else: kirim = sender def balas(args): line_bot_api.reply_message(event.reply_token, TextSendMessage(text=args)) def message(args): line_bot_api.push_message(kirim, TextSendMessage(text=args)) def img(args): line_bot_api.push_message( kirim, ImageSendMessage(original_content_url=args, preview_image_url=args)) if sender in perintah: komando, waktu = perintah[sender] if komando == "panggilan": if text == "Ubah nama panggilan": return db.child("pengguna").child(sender).child("tambahan").child( "panggilan").set(text) line_bot_api.reply_message( event.reply_token, TextSendMessage( text="Mulai sekarang kakak akan kupanggil " + text + " ;D")) del perintah[sender] if text.lower() == namaBot: pesan = FlexSendMessage( alt_text="Menu", contents=CarouselContainer(contents=[ BubbleContainer( styles=BubbleStyle(header=BlockStyle( background_color='#223e7c')), header=BoxComponent(layout='vertical', contents=[ TextComponent(text='MENU', align='center', color='#ffffff') ]), body=BoxComponent( layout='vertical', spacing='md', contents=[ BoxComponent( layout='horizontal', spacing='sm', contents=[ BoxComponent( layout='vertical', spacing='sm', contents=[ ImageComponent( url= 'https://i.postimg.cc/k4ybdVvm/movie-icon-11.png', align='center', action=MessageAction( label='Film', text='Nonton film kuy' )), TextComponent(text='Film', size='xs', align='center') ]), BoxComponent( layout='vertical', spacing='sm', contents=[ ImageComponent( url='https://goo.gl/Rtqc1r', align='center', action=MessageAction( label='Drama', text= 'Mau nonton drama nih') ), TextComponent(text='Drama', size='xs', align='center') ]), BoxComponent( layout='vertical', spacing='sm', contents=[ ImageComponent( url='https://goo.gl/S9GjL7', align='center', action=MessageAction( label='YouTube', text= 'Mau nonton YouTube')), TextComponent(text='YouTube', size='xs', align='center') ]) ]), BoxComponent( layout='horizontal', spacing='sm', contents=[ BoxComponent( layout='vertical', spacing='sm', contents=[ ImageComponent( url= 'https://i.postimg.cc/DzD04rPf/70.png', align='center', action=PostbackAction( label='Main', text='Main kuy', data='/main')), TextComponent(text='Permainan', size='xs', align='center') ]), BoxComponent( layout='vertical', spacing='sm', contents=[ ImageComponent( url= 'https://i.postimg.cc/q75v5Q3X/69.png', align='center', action=PostbackAction( label='Pengingat', text='Atur pengingat', data='/pengingat')), TextComponent(text='Pengingat', wrap=True, size='xs', align='center') ]), BoxComponent( layout='vertical', spacing='sm', contents=[ ImageComponent( url= 'https://i.postimg.cc/YqqXtBh6/settings-3-icon.png', align='center', action=PostbackAction( label='Pengaturan', text='Pengaturan', data='/pengaturan')), TextComponent( text='Pengaturan', size='xs', align='center', wrap=True) ]) ]) ]), footer=BoxComponent( layout='baseline', contents=[ TextComponent(text='© YRP', size='xxs', align='start'), TextComponent( text=namaBot.capitalize() + ' ' + os.environ.get('HEROKU_RELEASE_VERSION'), size='xxs', align='end') ])) ])) line_bot_api.reply_message( event.reply_token, [TextComponent(text="Kamu ingin apa hari ini?"), pesan]) elif text == "Nonton film kuy": balas("Ini aku punya beberapa fungsi kalau kak " + nama + " mau nonton film ;)") line_bot_api.push_message(kirim, mau_nonton()) elif namaBot in text.lower( ) and not text.lower() == namaBot and not sender in cmds.perintah: if "apa" in text.lower(): if text.lower()[len(text) - 1] == "?": balas( random.choice([ "Ya", "Tidak", "Terkadang", "Mungkin", "Coba tanya lagi", "Entah", "Hmm..." ])) else: balas("Situ bertanya?") #=====[ LEAVE GROUP OR ROOM ]========== elif 'get out' == text.lower() or 'bye' == text.lower(): if sender != owner: balas("STFU!") return if isinstance(event.source, SourceGroup): line_bot_api.reply_message( event.reply_token, TextSendMessage(text='Good Bye Cruel World')) line_bot_api.leave_group(event.source.group_id) elif isinstance(event.source, SourceRoom): line_bot_api.reply_message( event.reply_token, TextSendMessage(text='Good Bye Cruel World')) line_bot_api.leave_room(event.source.room_id) else: line_bot_api.reply_message(event.reply_token, TextSendMessage(text="No!")) ################################################ elif text.lower() == "who am i?": #message("You're "+nama) line_bot_api.reply_message(event.reply_token, TextSendMessage(text="You're " + nama)) line_bot_api.push_message( kirim, ImageSendMessage(original_content_url=gambar, preview_image_url=gambar)) elif text[0] == "=": data = text[1:].split(" ", 1) if len(data) > 1: cmd, args = data[0].lower(), data[1] else: cmd, args = data[0].lower(), "" if cmd == "e": if sender != owner: message('STFU!') return try: ret = eval(args) if ret == None: message("Done.") return message(str(ret)) except Exception as e: try: et, ev, tb = sys.exc_info() lineno = tb.tb_lineno fn = tb.tb_frame.f_code.co_filename message("[Expectation Failed] %s Line %i - %s" % (fn, lineno, str(e))) except: message("Undescribeable error detected!!") #=====[ FLEX MESSAGE ]========== elif text == 'flex': bubble = BubbleContainer( direction='ltr', hero=ImageComponent( url= 'https://i.pinimg.com/originals/0b/45/54/0b45541af3e8d77e23498c1bc8d552f6.jpg', size='full', aspect_ratio='20:13', aspect_mode='cover', action=URIAction( uri='http://line.me/ti/p/~freedom_for_all', label='label')), body=BoxComponent( layout='vertical', contents=[ # title TextComponent(text='Noir', weight='bold', size='xl'), # review BoxComponent( layout='baseline', margin='md', contents=[ IconComponent( size='sm', url='https://example.com/gold_star.png'), IconComponent( size='sm', url='https://example.com/grey_star.png'), IconComponent( size='sm', url='https://example.com/gold_star.png'), IconComponent( size='sm', url='https://example.com/gold_star.png'), IconComponent( size='sm', url='https://example.com/grey_star.png'), TextComponent(text='4.0', size='sm', color='#999999', margin='md', flex=0) ]), # info BoxComponent( layout='vertical', margin='lg', spacing='sm', contents=[ BoxComponent( layout='baseline', spacing='sm', contents=[ TextComponent(text='Place', color='#aaaaaa', size='sm', flex=1), TextComponent( text='Ujung Pandang, Indonesia', wrap=True, color='#666666', size='sm', flex=5) ], ), BoxComponent( layout='baseline', spacing='sm', contents=[ TextComponent(text='Time', color='#aaaaaa', size='sm', flex=1), TextComponent( text="10:00 - 23:00", wrap=True, color='#666666', size='sm', flex=5, ), ], ), ], ) ], ), footer=BoxComponent( layout='vertical', spacing='sm', contents=[ # separator SeparatorComponent(), # websiteAction ButtonComponent( style='link', height='sm', action=URIAction( label='Noir', uri="https://line.me/ti/p/~freedom_for_all")) ]), ) message = FlexSendMessage(alt_text="Hi there!", contents=bubble) line_bot_api.reply_message(event.reply_token, message) #======================================================================================================================= ############ ERROR HANDLING ############ except LineBotApiError as e: print(e.status_code) print(e.error.message) print(e.error.details)
def handle_postback(event): cmds.handle_postback(event) yify_torrent.handle_postback(event) cinemaxxi.handle_postback(event) notif.handle_postback(event) quiz.handle_postback(event) imdbthing.handle_postback(event) sender = event.source.user_id if isinstance(event.source, SourceGroup): kirim = gid elif isinstance(event.source, SourceRoom): kirim = event.source.room_id else: kirim = sender try: if event.postback.data[0] == '/': data = event.postback.data[1:].split(" ", 1) if len(data) > 1: cmd, args = data[0].lower(), data[1] else: cmd, args = data[0].lower(), "" if cmd == "pengaturan": line_bot_api.reply_message(event.reply_token, pengaturan(sender)) elif cmd == "lokasi": line_bot_api.reply_message( event.reply_token, TextSendMessage(text='Share lokasi dulu kak ' + panggil(sender) + ' ;)', quick_reply=QuickReply(items=[ QuickReplyButton(action=LocationAction( label='Share lokasi')) ]))) perintah.update({sender: ['lokasi', time.time()]}) elif cmd == "nick": if args == sender: gunakan = args else: gunakan = sender line_bot_api.reply_message( event.reply_token, TextSendMessage(text="Kak " + panggil(gunakan) + " mau dipanggil apa?")) perintah.update({sender: ['panggilan', time.time()]}) elif cmd == "tanggal_lahir": if args == sender: gunakan = args else: gunakan = sender db.child("pengguna").child(gunakan).child("tambahan").child( "tanggal_lahir").set(event.postback.params['date']) sekarang = datetime.datetime.utcfromtimestamp(time.time()) tanggal = int(sekarang.strftime('%d')) bulan = int(sekarang.strftime('%m')) tahun = int(sekarang.strftime('%Y')) utahun, ubulan, utanggal = event.postback.params['date'].split( '-') umur = tahun - int(utahun) if tanggal < int(utanggal): if bulan < int(ubulan): umur = umur - 1 line_bot_api.reply_message( event.reply_token, TextSendMessage(text="Kak " + panggil(gunakan) + " sekarang berumur " + str(umur) + " tahun ;D")) except Exception as e: try: et, ev, tb = sys.exc_info() lineno = tb.tb_lineno fn = tb.tb_frame.f_code.co_filename if sender != owner: line_bot_api.reply_message(event.reply_token, [ TextSendMessage(text='Oopps.. ' + namaBot.capitalize() + ' ada kesalahan kak :('), TextSendMessage( text= 'Tapi tenang kak, laporan kesalahan ini terkirim ke owner untuk diperbaiki ;D' ) ]) line_bot_api.push_message( owner, TextSendMessage(text="[Expectation Failed] %s Line %i - %s" % (fn, lineno, str(e)))) except: line_bot_api.push_message( owner, TextSendMessage(text="Undescribeable error detected!!"))