Пример #1
0
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 :('))
Пример #2
0
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]
Пример #3
0
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!!"))
Пример #4
0
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!!"))
Пример #5
0
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!!"))
Пример #6
0
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!!"))
Пример #7
0
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)
Пример #8
0
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!!"))