def handle_message(event): print(event.message) if event.message.text.lower() in ['codejob','soho','nctu_talk']: if event.message.text.lower() == 'codejob': board = 'CodeJob' elif event.message.text.lower() == 'soho': board = 'soho' elif event.message.text.lower() == 'nctu_talk': board = 'NCTU_TALK' aritcles = getCaseJobArticles(board) action_list = [] for article in aritcles: action_list.append(URITemplateAction( label=article['title'], uri='https://www.ptt.cc'+article['link'])) buttons_message = TemplateSendMessage( alt_text='PTT {0}'.format(board), template=ButtonsTemplate( thumbnail_image_url='https://i.imgur.com/prgAiYk.jpg', title='PTT {0}'.format(board), text='選選選', actions=action_list) ) line_bot_api.reply_message( event.reply_token, buttons_message ) return 0 if event.message.text.lower() in ['tech_job','soft_job','stupidclown']: if event.message.text.lower() == 'tech_job': board = 'Tech_job' elif event.message.text.lower() == 'soft_job': board = 'Soft_Job' elif event.message.text.lower() == 'stupidclown': board = 'StupidClown' aritcles = getDiscussionArticles(board) action_list = [] for article in aritcles: action_list.append(URITemplateAction( label=article['title'], uri='https://www.ptt.cc'+article['link'])) buttons_message = TemplateSendMessage( alt_text='PTT {0}'.format(board), template=ButtonsTemplate( thumbnail_image_url='https://i.imgur.com/WBdWmBt.jpg', title='PTT {0}'.format(board), text='選選選', actions=action_list ) ) line_bot_api.reply_message( event.reply_token, buttons_message ) return 0 caseJobBoard = CarouselColumn( thumbnail_image_url='https://i.imgur.com/tUiZQdV.png', title='Menu', text='Please select', actions=[ MessageTemplateAction( label='CodeJob', text='CodeJob' ), MessageTemplateAction( label='soho', text='soho' ), MessageTemplateAction( label='NCTU_TALK', text='NCTU_TALK' ) ] ) discussionBoard = CarouselColumn( thumbnail_image_url='https://i.imgur.com/QgxjXUf.jpg', title='Discussion board', text='Please select', actions=[ MessageTemplateAction( label='Soft Job', text='Soft_job' ), MessageTemplateAction( label='Tech Job', text='Tech_job' ), MessageTemplateAction( label='StupidClown', text='StupidClown' ) ] ) carousel_template_message = TemplateSendMessage( alt_text='PTT cralwer', template=CarouselTemplate( columns=[ caseJobBoard, discussionBoard ] ) ) print(carousel_template_message) line_bot_api.reply_message( event.reply_token, carousel_template_message)
def postback_process(userid, data, DB, event): """ input: 1. userid 2. data 3. DB 4. event return: 1. [message] """ ret = "NA" user_data = data.get_user(userid) # 填問卷的過程 # QC丟問題,相對題號 if event.postback.data == 'Quick': ret = [ confirm_push(data.get_all_users(), userid, event.postback.data, DB) ] elif event.postback.data == 'Standard': ct_container = ct_push(data.get_all_users(), userid, 1, 0, DB) #把4類別加進來 carousel_template = CarouselTemplate(columns=ct_container) ret = [ TemplateSendMessage(alt_text='詳細災情回覆問卷', template=carousel_template) ] # 四類丟問題,相對題號 elif event.postback.data in ['Normal', 'Indoors', 'Corridor', 'Outdoors']: ret = [ confirm_push(data.get_all_users(), userid, event.postback.data, DB) ] # 戳題目的confirm template的時候 try: parse = extract(event.postback.data) # [0]是類別;[1]是相對題號;[2]是沒問題/待改進 cat, Q, ans = parse data.set_user_current(userid, (cat, Q)) last = len(DB.get_category(cat)) # 處理carousel template # 填完該類別最後一題且最後一題是沒問題 if Q == last and ans == 'OK': data.set_user_status(userid, "00") data.add_user_answered(userid, cat, Q) output = data.get_user_feedback(userid) print('進入【(第一次)類別TEMPVIEW】') print(f"\n\n====\ncat: |{cat}\nOutput: |{output}\n") ret = cat_tempview_confirm(cat, output, DB) # 推第一次類別修改tempview confirm template # ct_container = ct_push(data.get_all_users(), userid, 1, 0, DB) # QC填完 if cat == "Quick" and Q == last: print('進入【最終TEMPVIEW】──QC的路,不要怕上一句話,因為她是必經之路') output = data.get_user_feedback(userid) ret = tempview_confirm(output, DB) # 推第一次最終修改tempview confirm template # 處理題目的confirm template # 待改進的話,或是非該類別的最後一題 else: ret = [next(data.get_all_users(), userid, parse, DB)[0]] status = next(data.get_all_users(), userid, parse, DB)[1] data.set_user_status(userid, status) except Exception as e: # exc_type, exc_obj, exc_tb = sys.exc_info() # fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1] # print('ERROR:', exc_type, exc_obj, fname, exc_tb.tb_lineno) # print(event.postback.data) if event.postback.data == 'edit=NO': data.set_user_status(userid, "00") output = data.get_user_feedback(userid) print(f"\n\n\nAARRR!!!{output}\n\n\n") build, room = data.get_user_building(userid) print(f"\n\n\nBBRRR!!!{(build, room)}\n\n\n") for feed in range(len(output)): output[feed] += (build, ) output[feed] += (room, ) DB.get_feedback(output, userid, data.get_user_building(userid)[0]) #寫進資料庫 print('進入【最終修改答案不修改】,結束問卷') print( f"\n========================\nThis is feedback:\n{output}\n========================\n" ) ret = [ TextSendMessage(text="已收到您的回覆~謝謝您的貢獻!"), StickerSendMessage(package_id=11537, sticker_id=52002739), ] data.remove_user(userid) if event.postback.data == 'edit=OK': print('進入【最終修改答案要修改】,要求輸入修改題號') data.set_user_status(userid, "20") ret = [ TextSendMessage(text="請問您要修改哪一題呢?"), TextSendMessage(text="【注意】:當您填寫快速檢核時,不能修改其他四類問題;反之亦然。"), TextSendMessage( text= "請按照下列格式填寫:\n一般檢查(Normal)簡寫為N\n室內(Indoors)簡寫為I\n走廊(Corridor)簡寫為C\n室外(Outdoors)簡寫為O\n再加上題號,例如:\nN7(一般檢查的第七題)" ), ] if event.postback.data == 'cat_edit=NO': print('進入【類別修改答案不修改】,丟出類別選單') ct_container = ct_push(data.get_all_users(), userid, 1, 1, DB) if ct_container == "All cats have already checked!": # 類別全部修改過後,進入最終環節 print('進入【最終TEMPVIEW】──標準填完了唷,不要怕上一句話,因為她是必經之路') output = data.get_user_feedback(userid) ret = tempview_confirm(output, DB) else: carousel_template = CarouselTemplate(columns=ct_container) ret = [ TemplateSendMessage(alt_text='問卷選單', template=carousel_template) ] if 'cat_edit=OK' in event.postback.data: print('進入【類別修改答案要修改】,要求輸入修改題號') data.set_user_status(userid, "10") ## 避免戳 Normal1, Indoors1, Corridor1, Outdoors1 的時候類別被鎖住 cate = str(event.postback.data).split( ';')[1] if ';' in event.postback.data else '' print('\n===<%s>===\n' % cate) relq = user_data["current"][1] _ = (cate, relq) if cate != '' else user_data["current"] data.set_user_current(userid, _) ret = [ TextSendMessage(text="請問您要修改哪一題呢?"), TextSendMessage(text="【注意】:只能修改當前題組,欲修改其他題組,請於所有問題答畢後修改"), TextSendMessage( text= "請按照下列格式填寫:\n一般檢查(Normal)簡寫為N\n室內(Indoors)簡寫為I\n走廊(Corridor)簡寫為C\n室外(Outdoors)簡寫為O\n再加上題號,例如:\nN7(一般檢查的第七題)" ), ] # 類別修改答案的過程 if 'cat_revise=' in event.postback.data and 'OK' in event.postback.data: # 沒問題 print('進入【類別修改答案沒問題】,丟出cat_tempview') output = data.get_user_feedback(userid) ret = cat_tempview_confirm(user_data["current"][0], output, DB) # 把它目前的回答推個confirm template給他看看 elif 'cat_revise=' in event.postback.data and 'NO' in event.postback.data: # 待改進 print('進入【類別修改答案待改進】,請簡述災情') ret = [TextSendMessage(text="請簡述災情")] data.set_user_status(userid, "11") # 最終修改答案的過程 if 'all_revise=' in event.postback.data and 'OK' in event.postback.data: # 沒問題 print('進入【最後修改答案沒問題】,丟出tempview') output = data.get_user_feedback(userid) ret = tempview_confirm(output, DB) # 把它目前的回答推個confirm template給他看看 elif 'all_revise=' in event.postback.data and 'NO' in event.postback.data: # 待改進 print('進入【最後修改答案待改進】,請簡述災情') ret = [TextSendMessage(text="請簡述災情")] data.set_user_status(userid, "21") # 重設帳號或不設 if event.postback.data == 'account_reset': delete_userid_db(userid, DB) account[userid] = { 'userid': userid, 'name': 0, 'county': 0, 'school': 0, 'phone': 0 } ret = [TextSendMessage(text="請問您尊姓大名?")] account_q = 1 elif event.postback.data == 'account_remain': ret = [TextSendMessage(text="好的,謝謝😁")] return ret
def handle_message(event): text = event.message.text if text == "学部再登録": userid = event.source.user_id user_db.del_userinfo(userid) # user情報を削除 line_bot_api.reply_message(event.reply_token, [ TextSendMessage(text="現在登録されていた学部は削除されました。"), TextSendMessage( text="もう一度下のボタンから学部を選択してください。", quick_reply=QuickReply(items=[ QuickReplyButton( action=PostbackAction(label=major, data=major)) for major in major_list ])) ]) elif text == "送信フォーム": line_bot_api.reply_message( event.reply_token, TemplateSendMessage( alt_text="送信フォーム", template=ButtonsTemplate( text="送信フォーム", image_size="cover", actions=[ URIAction(uri="https://forms.gle/cAMusm8ZN8i4SmbL8", label="ご感想、ご要望はこちら") ]))) elif text == "ゼミ協": line_bot_api.reply_message( event.reply_token, TextSendMessage(text="https://lin.ee/bOegrZ3\n上記のリンクより友だち追加できます!")) #教官または講義名いずれかが送信されたとき.もしくはもう一度探すとき elif "_" not in text or "でもう一度探す" in text: if "でもう一度探す" in text: text = text.split("_")[0] teacherList = onihotoke_db.searchTeacher(text, False) #教員列からワードを検索 lectureList = onihotoke_db.searchLecture(text, False) #講義列からワードを検索 kibutsuList = [] #2つのリストを結合 1つは空であるはず. kibutsuList.extend(teacherList) kibutsuList.extend(lectureList) #検索結果が空でないとき,その検索結果をlabelにもつボタンを送信. if kibutsuList: #kibutsuListの要素数が20を超えないようにする. if len(kibutsuList) > 19: kibutsuList = random.sample( kibutsuList, 19) #一応シャッフルする.何回か表示すればすべての講義を見れるように. kibutsuList.extend(["でもう一度探す"]) #20個目 buttons_templates = [] roop = (len(kibutsuList) + 3) // 4 #最大4つまで表示できるテンプレートを何回表示すればいいか. for i in range(roop): #その回数だけ回す. if i == roop - 1: #最後は4つ以下になるからスライス部分を変える必要あり. buttons_templates.append( ButtonsTemplate(title='講義名を選択してください', text='choose the lecture name', actions=[ MessageAction( label=text + " " + name[:10], text=text + "_" + name) for name in kibutsuList[4 * i:] ])) break buttons_templates.append( ButtonsTemplate( title='講義名を選択してください', text='choose the lecture name', actions=[ MessageAction(label=text + " " + name[:10], text=text + "_" + name) for name in kibutsuList[4 * i:4 * (i + 1)] ])) try: line_bot_api.reply_message(event.reply_token, [ TemplateSendMessage(alt_text='講義を選択してください', template=buttons_template) for buttons_template in buttons_templates ]) # slackに報告 requests.post(SLACKBOT_SEARCH_KEYWORD, data=json.dumps({'text': "検索ワード : " + text})) except: line_bot_api.reply_message( event.reply_token, TextSendMessage(text="エラーのため講義情報を表示できません。エラーは報告済みです。")) # slackに報告 requests.post(SLACKBOT_ERROR_KEYWORD, data=json.dumps({'text': "エラー検索ワード : " + text})) # 該当する講義がなかったとき else: line_bot_api.reply_message( event.reply_token, TextSendMessage(text='該当する講義情報が見つかりませんでした。')) # slackに報告 requests.post(SLACKBOT_ERROR_KEYWORD, data=json.dumps({'text': "見つからなかった検索ワード : " + text})) #教官名と講義名のどちらも送信されたとき、その講義の鬼仏情報をユーザーに送信 elif "_" in text: texts = text.split("_") #『教官名_講義名』 という入力を期待している kibutsuList = onihotoke_db.searchAll(texts[0], texts[1].split(",")[0]) print(texts[1].split(",")[0]) #講義情報の辞書のリスト # print(kibutsuList) if kibutsuList: if len(kibutsuList) > 10: kibutsuList = random.sample( kibutsuList, 10) #一応シャッフルする.何回か表示すればすべての講義を見れるように. try: line_bot_api.reply_message( event.reply_token, FlexSendMessage(alt_text='鬼仏情報', contents=CarouselContainer([ gen_card_onihotoke(dic) for dic in kibutsuList ]))) # slackに報告 requests.post(SLACKBOT_SEARCH_KEYWORD, data=json.dumps({'text': "検索ワード : " + text})) except: line_bot_api.reply_message( event.reply_token, TextSendMessage(text="エラーのため講義情報を表示できません。エラーは報告済みです。")) # slackに報告 SLACKBOT_WEBHOOK_URL = os.environ["SLACKBOT_ERROR_KEYWORD"] requests.post(SLACKBOT_ERROR_KEYWORD, data=json.dumps({'text': "エラー検索ワード : " + text})) # 該当する講義がなかったとき else: line_bot_api.reply_message( event.reply_token, TextSendMessage(text='該当する講義情報が見つかりませんでした。')) # slackに報告 SLACKBOT_WEBHOOK_URL = os.environ["SLACKBOT_ERROR_KEYWORD"] requests.post(SLACKBOT_ERROR_KEYWORD, data=json.dumps({'text': "見つからなかった検索ワード : " + text})) #検索結果が空だったとき、その旨をユーザーに送信 else: line_bot_api.reply_message(event.reply_token, TextSendMessage(text='教官名または講義名を入力してください.')) # slackに報告 SLACKBOT_WEBHOOK_URL = os.environ["SLACKBOT_ERROR_KEYWORD"] requests.post(SLACKBOT_ERROR_KEYWORD, data=json.dumps({'text': "たぶん適当な検索ワード : " + text}))
def handle_text_message(event): text = event.message.text if text == 'profile': if isinstance(event.source, SourceUser): profile = line_bot_api.get_profile(event.source.user_id) line_bot_api.reply_message( event.reply_token, [ TextSendMessage(text='Display name: ' + profile.display_name), TextSendMessage(text='Status message: ' + profile.status_message) ] ) else: line_bot_api.reply_message( event.reply_token, TextSendMessage(text="Bot can't use profile API without user ID")) elif text == 'bye': if isinstance(event.source, SourceGroup): line_bot_api.reply_message( event.reply_token, TextSendMessage(text='Leaving group')) line_bot_api.leave_group(event.source.group_id) elif isinstance(event.source, SourceRoom): line_bot_api.reply_message( event.reply_token, TextSendMessage(text='Leaving group')) line_bot_api.leave_room(event.source.room_id) else: line_bot_api.reply_message( event.reply_token, TextSendMessage(text="Bot can't leave from 1:1 chat")) elif text == 'confirm': confirm_template = ConfirmTemplate(text='Do it?', actions=[ MessageAction(label='Yes', text='Yes!'), MessageAction(label='No', text='No!'), ]) template_message = TemplateSendMessage( alt_text='Confirm alt text', template=confirm_template) line_bot_api.reply_message(event.reply_token, template_message) elif text == 'buttons': buttons_template = ButtonsTemplate( title='My buttons sample', text='Hello, my buttons', actions=[ URIAction(label='Go to line.me', uri='https://line.me'), PostbackAction(label='ping', data='ping'), PostbackAction(label='ping with text', data='ping', text='ping'), MessageAction(label='Translate Rice', text='米') ]) template_message = TemplateSendMessage( alt_text='Buttons alt text', template=buttons_template) line_bot_api.reply_message(event.reply_token, template_message) elif text == 'carousel': carousel_template = CarouselTemplate(columns=[ CarouselColumn(text='hoge1', title='fuga1', actions=[ URIAction(label='Go to line.me', uri='https://line.me'), PostbackAction(label='ping', data='ping') ]), CarouselColumn(text='hoge2', title='fuga2', actions=[ PostbackAction(label='ping with text', data='ping', text='ping'), MessageAction(label='Translate Rice', text='米') ]), ]) template_message = TemplateSendMessage( alt_text='Carousel alt text', template=carousel_template) line_bot_api.reply_message(event.reply_token, template_message) elif text == 'image_carousel': image_carousel_template = ImageCarouselTemplate(columns=[ ImageCarouselColumn(image_url='https://via.placeholder.com/1024x1024', action=DatetimePickerAction(label='datetime', data='datetime_postback', mode='datetime')), ImageCarouselColumn(image_url='https://via.placeholder.com/1024x1024', action=DatetimePickerAction(label='date', data='date_postback', mode='date')) ]) template_message = TemplateSendMessage( alt_text='ImageCarousel alt text', template=image_carousel_template) line_bot_api.reply_message(event.reply_token, template_message) elif text == 'imagemap': pass elif text == 'flex': bubble = BubbleContainer( direction='ltr', hero=ImageComponent( url='https://example.com/cafe.jpg', size='full', aspect_ratio='20:13', aspect_mode='cover', action=URIAction(uri='http://example.com', label='label') ), body=BoxComponent( layout='vertical', contents=[ # title TextComponent(text='Brown Cafe', 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='Shinjuku, Tokyo', 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=[ # callAction, separator, websiteAction SpacerComponent(size='sm'), # callAction ButtonComponent( style='link', height='sm', action=URIAction(label='CALL', uri='tel:000000'), ), # separator SeparatorComponent(), # websiteAction ButtonComponent( style='link', height='sm', action=URIAction(label='WEBSITE', uri="https://example.com") ) ] ), ) message = FlexSendMessage(alt_text="hello", contents=bubble) line_bot_api.reply_message( event.reply_token, message ) else: line_bot_api.reply_message( event.reply_token, TextSendMessage(text=event.message.text))
def Build(self): bLen = len(self.buttons) if bLen == 0: return ([], None) carousels = [] while bLen > 15: carousels.append( TemplateSendMessage(alt_text=self.altTextHeader, template=CarouselTemplate(columns=[]))) car = carousels[-1] for k in range(1, 16): button = self.buttons.pop(0) colLen = len(car.template.columns) if colLen == 0: car.template.columns.append( CarouselColumn(text=self.columnText, actions=[])) elif len(car.template.columns[-1].actions) == 3: car.template.columns.append( CarouselColumn(text=self.columnText, actions=[])) car.template.columns[-1].actions.append( MessageTemplateAction(label=button.label, text=button.text)) car.alt_text = (car.alt_text + button.altTextEntry)[:400] bLen = bLen - 15 cbLen = 0 cols = 0 rows = 0 if bLen > 4: for i in range(1, 5): div = bLen // i if div > 3: continue if cbLen < div * i: cbLen = div * i cols = i rows = div elif cbLen == div * i and div > rows: cbLen = div * i cols = i rows = div bbLen = bLen - cbLen if cbLen > 0: carousels.append( TemplateSendMessage(alt_text=self.altTextHeader, template=CarouselTemplate(columns=[]))) count = 0 for button in self.buttons: count = count + 1 if count > cbLen: break car = carousels[-1] colLen = len(car.template.columns) if colLen == 0: car.template.columns.append( CarouselColumn(text=self.columnText, actions=[])) elif len(car.template.columns[-1].actions) == rows: if colLen == cols: carousels.append( TemplateSendMessage( alt_text=self.altTextHeader, template=CarouselTemplate(columns=[]))) car = carousels[-1] car.template.columns.append( CarouselColumn(text=self.columnText, actions=[])) car.template.columns[-1].actions.append( MessageTemplateAction(label=button.label, text=button.text)) car.alt_text = (car.alt_text + button.altTextEntry)[:400] car = carousels[-1] colLen = len(car.template.columns) if colLen == 0 or (colLen == 1 and len(car.template.columns[-1].actions) == 0): carousels.remove(car) elif len(car.template.columns[-1].actions) == 0: car.template.columns.remove(car.template.columns[-1]) but = None if bbLen > 0: but = TemplateSendMessage(alt_text=self.altTextHeader, template=ButtonsTemplate( text=self.columnText, actions=[])) for val in self.buttons[cbLen:]: but.template.actions.append( MessageTemplateAction(label=val.label, text=val.text)) but.alt_text = (but.alt_text + val.altTextEntry)[:400] return [carousels, but]
def message_text(event): text = event.message.text acak = np.arange(14) np.random.shuffle(acak) if text == 'Kategori': buttons_template = ButtonsTemplate( text='Daftar Kategori Berita', actions=[ MessageTemplateAction(label='Tekno', text='tekno'), MessageTemplateAction(label='Bisnis', text='bisnis'), MessageTemplateAction(label='Otomotif', text='otomotif'), MessageTemplateAction(label='Bantuan', text='bantu') ]) template_message = TemplateSendMessage(alt_text='Daftar Kategori', template=buttons_template) line_bot_api.reply_message(event.reply_token, template_message) elif text == 'bye astro' or text == 'Bye Astro': if isinstance(event.source, SourceGroup): line_bot_api.reply_message(event.reply_token, TextMessage(text='Kakak jahat :(')) line_bot_api.leave_group(event.source.group_id) elif isinstance(event.source, SourceRoom): line_bot_api.reply_message(event.reply_token, TextMessage(text='Jahat :(')) line_bot_api.leave_room(event.source.room_id) else: line_bot_api.reply_message(event.reply_token, TextMessage(text="gabisa ih :p")) elif text == 'creator' or text == 'Creator': if isinstance(event.source, SourceGroup): line_bot_api.reply_message( event.reply_token, TextMessage(text='http://line.me/ti/p/OdcxbZg6gQ')) elif text == 'tekno': databerita = listBerita("http://tekno.kompas.com/business") daftarberita = databerita.daftarBerita() carousel_template = CarouselTemplate(columns=[ CarouselColumn( text=daftarberita[acak[0]]['judul'], actions=[ PostbackTemplateAction(label="Ringkas", data=daftarberita[acak[0]]['link'], text='ringkas'), URITemplateAction(label='Baca berita asli', uri=daftarberita[acak[0]]['link']) ]), CarouselColumn( text=daftarberita[acak[1]]['judul'], actions=[ PostbackTemplateAction(label="Ringkas", data=daftarberita[acak[1]]['link'], text='ringkas'), URITemplateAction(label='Baca berita asli', uri=daftarberita[acak[1]]['link']) ]), CarouselColumn( text=daftarberita[acak[2]]['judul'], actions=[ PostbackTemplateAction(label="Ringkas", data=daftarberita[acak[2]]['link'], text='ringkas'), URITemplateAction(label='Baca berita asli', uri=daftarberita[acak[2]]['link']) ]), CarouselColumn( text=daftarberita[acak[3]]['judul'], actions=[ PostbackTemplateAction(label="Ringkas", data=daftarberita[acak[3]]['link'], text='ringkas'), URITemplateAction(label='Baca berita asli', uri=daftarberita[acak[3]]['link']) ]) ]) template_message = TemplateSendMessage(alt_text='Daftar Berita Tekno', template=carousel_template) line_bot_api.reply_message(event.reply_token, template_message) elif text == 'bisnis': databerita = listBerita("http://bisniskeuangan.kompas.com/bisnis") daftarberita = databerita.daftarBerita() carousel_template = CarouselTemplate(columns=[ CarouselColumn( text=daftarberita[acak[0]]['judul'], actions=[ PostbackTemplateAction(label="Ringkas", data=daftarberita[acak[0]]['link'], text='ringkas'), URITemplateAction(label='Baca berita asli', uri=daftarberita[acak[0]]['link']) ]), CarouselColumn( text=daftarberita[acak[1]]['judul'], actions=[ PostbackTemplateAction(label="Ringkas", data=daftarberita[acak[1]]['link'], text='ringkas'), URITemplateAction(label='Baca berita asli', uri=daftarberita[acak[1]]['link']) ]), CarouselColumn( text=daftarberita[acak[2]]['judul'], actions=[ PostbackTemplateAction(label="Ringkas", data=daftarberita[acak[2]]['link'], text='ringkas'), URITemplateAction(label='Baca berita asli', uri=daftarberita[acak[2]]['link']) ]), CarouselColumn( text=daftarberita[acak[3]]['judul'], actions=[ PostbackTemplateAction(label="Ringkas", data=daftarberita[acak[3]]['link'], text='ringkas'), URITemplateAction(label='Baca berita asli', uri=daftarberita[acak[3]]['link']) ]) ]) template_message = TemplateSendMessage(alt_text='Daftar Berita Bisnis', template=carousel_template) line_bot_api.reply_message(event.reply_token, template_message) elif text == 'otomotif': databerita = listBerita("http://otomotif.kompas.com/news") daftarberita = databerita.daftarBerita() carousel_template = CarouselTemplate(columns=[ CarouselColumn( text=daftarberita[acak[0]]['judul'], actions=[ PostbackTemplateAction(label="Ringkas", data=daftarberita[acak[0]]['link'], text='ringkas'), URITemplateAction(label='Baca berita asli', uri=daftarberita[acak[0]]['link']) ]), CarouselColumn( text=daftarberita[acak[1]]['judul'], actions=[ PostbackTemplateAction(label="Ringkas", data=daftarberita[acak[1]]['link'], text='ringkas'), URITemplateAction(label='Baca berita asli', uri=daftarberita[acak[1]]['link']) ]), CarouselColumn( text=daftarberita[acak[2]]['judul'], actions=[ PostbackTemplateAction(label="Ringkas", data=daftarberita[acak[2]]['link'], text='ringkas'), URITemplateAction(label='Baca berita asli', uri=daftarberita[acak[2]]['link']) ]), CarouselColumn( text=daftarberita[acak[3]]['judul'], actions=[ PostbackTemplateAction(label="Ringkas", data=daftarberita[acak[3]]['link'], text='ringkas'), URITemplateAction(label='Baca berita asli', uri=daftarberita[acak[3]]['link']) ]) ]) template_message = TemplateSendMessage( alt_text='Daftar Berita Otomotif', template=carousel_template) line_bot_api.reply_message(event.reply_token, template_message) elif "kompas.com/read" in text: linkBerita = Berita(text) rangkuman = linkBerita.rangkumanBerita() teks = ' '.join(rangkuman) if (len(teks) > 2): line_bot_api.reply_message(event.reply_token, TextSendMessage(text=teks)) else: line_bot_api.reply_message( event.reply_token, TextSendMessage( text="maaf, link yang anda kirim tidak valid ")) elif text == 'Bantu' or text == 'bantu': line_bot_api.reply_message( event.reply_token, TextSendMessage( text= '\'Kategori\' >> untuk list Kategori \n\'Bantu\' >> list command yang ada \n\'bye astro\' >> mengusirku dari group \n\'Ping\' >> ngecek aku masih hidup ato nggak :P' )) elif text == 'ringkas': line_bot_api.reply_message(event.reply_token, TextSendMessage(text='Meringkas...')) elif text == 'Ping' or text == 'ping': buttons_template = ButtonsTemplate( text='Ping aku', actions=[PostbackTemplateAction(label='ping', data='ping')]) template_message = TemplateSendMessage(alt_text='ping', template=buttons_template) line_bot_api.reply_message(event.reply_token, template_message) else: profile = line_bot_api.get_profile(event.source.user_id) line_bot_api.reply_message( event.reply_token, TextSendMessage(text="Hi " + profile.display_name + "\n" + event.message.text + ":)")) '''
def handle_text_message(event): inp_raw = event.message.text inp = inp_raw.lower() inp_split = inp.split() profile = susunhurufbot.get_profile(event.source.user_id) def reply_txt(msg): susunhurufbot.reply_message(event.reply_token,TextSendMessage(text=msg)) def reply_img(link): susunhurufbot.reply_message(event.reply_token,ImageSendMessage(original_content_url=link,preview_image_url=link)) if inp == '/help': carousel_template_message = TemplateSendMessage( alt_text='Bantuan umum', template=CarouselTemplate( columns=[ CarouselColumn( thumbnail_image_url='https://example.com/item1.jpg', title='Susun Kata Game', text='Tap salah satu', actions=[ MessageTemplateAction( label='Mulai Sekarang', text='/play' ), MessageTemplateAction( label='Aturan Main', text='/rule' ), MessageTemplateAction( label='Leaderboards', text='/leaderboard')]), CarouselColumn( thumbnail_image_url='https://example.com/item4.jpg', title='Lain - lain', text='Tap salah satu', actions=[ MessageTemplateAction( label='Tentang admin', text='/admin' ), MessageTemplateAction( label='Keluarkan aku', text='/leave' ), URITemplateAction( label='Kirim feedback', uri='http://s.id/FeedbackSusunHurufBot')]) ] ) ) susunhurufbot.reply_message(event.reply_token, carousel_template_message) # ------------------------------------------- Lain - Lain ------------------------------------------ # if inp == '/admin': about_button = TemplateSendMessage( alt_text='Info Admin', template=ButtonsTemplate( thumbnail_image_url='https://dl.dropboxusercontent.com/s/xjgb1az7tt7p7h3/admin_logo.png', title='Admin Susun Huruf Bot', text= 'Pradipta Gitaya (21 Tahun)', actions=[ MessageTemplateAction( label='Hubungi Admin', text= '/contactadmin' ), MessageTemplateAction( label='Catatan Admin', text= '/adminnotes' ),])) susunhurufbot.reply_message(event.reply_token, about_button) elif inp == '/adminnotes': reply_txt(admin_note_msg) elif inp == '/contactadmin': reply_txt(about_msg) elif inp == '/leave': def kick(): confirm_template = ConfirmTemplate(text='Keluarkan bot dari obrolan?', actions=[ MessageTemplateAction(label='Iya', text='Pergi sana!'), MessageTemplateAction(label='Tidak', text='Jangan keluarkan!'),]) template_message = TemplateSendMessage(alt_text='Konfirmasi kick', template=confirm_template) return susunhurufbot.reply_message(event.reply_token, template_message) if isinstance(event.source, SourceGroup): kick() elif isinstance(event.source, SourceRoom): kick() else: reply_txt('Ini chat 1:1 , gimana caranya aku bisa keluar dari sini coba :(') elif inp == ('Pergi sana!'.lower()): # Bot kick confirmation reply_txt('Sampai jumpa ~') if isinstance(event.source, SourceGroup): susunhurufbot.leave_group(event.source.group_id) elif isinstance(event.source, SourceRoom): susunhurufbot.leave_room(event.source.room_id) elif inp == ('Jangan keluarkan!'.lower()): # Bot kick confirmation return 'OK'
def absen(msg): # Current = 1534496457 + (3600 * 7) # print("\n\nReal Time: 17/08/2018 16.00\n") # print("Current TS:", Current, "\nCurrent Time:", datetime.datetime.utcfromtimestamp(Current).strftime('%d/%m/%Y %H:%M:%S'), "\n\n") # REPEAT The Same String Manipulation remove_absenmsg = msg.replace("/absen ", "") grouped_msg = remove_absenmsg.split(" ") date_raw = grouped_msg[0] patokanWaktuBesok = int(time.time()) + 3601 if date_raw == 'besok': date_raw = datetime.datetime.utcfromtimestamp( patokanWaktuBesok).strftime('%d/%m/%Y') date_raw = int( time.mktime( datetime.datetime.strptime( date_raw, "%d/%m/%Y").timetuple())) + (3600 * 31) date_raw = str( datetime.datetime.utcfromtimestamp(date_raw).strftime('%d/%m/%Y')) target_date = time.mktime( datetime.datetime.strptime(date_raw, "%d/%m/%Y").timetuple()) target_date = str(target_date) target_date = target_date.replace(".0", "") target_date = int(target_date) target_date = target_date + (3600 * 13) target_date_rdb = datetime.datetime.utcfromtimestamp(target_date).strftime( '%d/%m/%Y') target_date_rdb = target_date_rdb.replace("/", "") reminder_date = target_date - (3600 * 9) keterangan = "" for i in range(1, len(grouped_msg)): keterangan += grouped_msg[i] + " " target_date_str = str(target_date_rdb) # keterangan = "'" + keterangan + "'" initiator = "'" + chatfeatures.absen_name + "'" current_date = int(time.time()) + (3600 * 7) template_text = 'Keterangan: ' + keterangan + "(oleh " + str( chatfeatures.absen_name) + ")" eventdatesql = str( datetime.datetime.utcfromtimestamp(target_date).strftime('%d/%m/%Y')) daysql = str(hari(eventdatesql)) sqlrdate = "'" + daysql + ", " + eventdatesql + "'" # ================= # PROCEDURAL SQLITE # ================= # Create table create_abs_table = '''CREATE TABLE IF NOT EXISTS abs_''' + target_date_str + ''' (type text, val text)''' sqlite_query(create_abs_table) # Insert the initial data sql_insert_date_unix = "INSERT INTO abs_" + target_date_str + " VALUES ('target-date-unix', " + str( target_date) + ")" sql_insert_table = "INSERT INTO abs_" + target_date_str + " VALUES ('target-date', " + "'" + target_date_str + "'" + ")" sql_insert_rdate = "INSERT INTO abs_" + target_date_str + " VALUES ('readable-date', " + sqlrdate + ")" sql_insert_ket = "INSERT INTO abs_" + target_date_str + " VALUES ('keterangan', " + "'" + keterangan + "'" + ")" sql_insert_initiator = "INSERT INTO abs_" + target_date_str + " VALUES ('initiator', " + initiator + ")" sqlite_query(sql_insert_date_unix) sqlite_query(sql_insert_table) sqlite_query(sql_insert_rdate) sqlite_query(sql_insert_ket) sqlite_query(sql_insert_initiator) if chatfeatures.absen_group is not None: sql_insert_groupid = "INSERT INTO abs_" + target_date_str + " VALUES ('group-id', " + "'" + str( chatfeatures.absen_group) + "'" + ")" sqlite_query(sql_insert_groupid) else: sql_insert_groupid = "INSERT INTO abs_" + target_date_str + " VALUES ('group-id', " + "'" + " " + "'" + ")" sqlite_query(sql_insert_groupid) # Get keterangan event_date = str( datetime.datetime.utcfromtimestamp(target_date).strftime('%d/%m/%Y')) day = str(hari(event_date)) # ket = sqlite_select_once("SELECT val FROM abs_" + target_date_str + " WHERE type='keterangan'") absen_template = TemplateSendMessage( alt_text='Pesan Absen', template=ButtonsTemplate( title=day + ", " + event_date, text=template_text, actions=[ MessageAction(label='Hadir', text='#absen ' + target_date_str + ' Hadir'), MessageAction(label='Tidak Hadir', text='#absen ' + target_date_str + ' Tidak_Hadir'), MessageAction(label='Izin', text='#absen ' + target_date_str + ' Izin'), MessageAction(label='Sakit', text='#absen ' + target_date_str + ' Sakit'), ])) return absen_template
def handle_text_message(event): text = event.message.text if text == 'profile': if isinstance(event.source, SourceUser): profile = line_bot_api.get_profile(event.source.user_id) line_bot_api.reply_message(event.reply_token, [ TextSendMessage(text='Display name: ' + profile.display_name), TextSendMessage(text='Status message: ' + profile.status_message), TextSendMessage(text='user_id: ' + profile.user_id), TextSendMessage(text='test picture url: ' + profile.picture_url) ]) else: line_bot_api.reply_message( event.reply_token, TextSendMessage( text="Bot can't use profile API without user ID")) elif text == 'bye': if isinstance(event.source, SourceGroup): line_bot_api.reply_message(event.reply_token, TextSendMessage(text='Leaving group')) line_bot_api.leave_group(event.source.group_id) elif isinstance(event.source, SourceRoom): line_bot_api.reply_message(event.reply_token, TextSendMessage(text='Leaving group')) line_bot_api.leave_room(event.source.room_id) else: line_bot_api.reply_message( event.reply_token, TextSendMessage(text="Bot can't leave from 1:1 chat")) elif text == 'confirm': confirm_template = ConfirmTemplate(text='Do it?', actions=[ MessageAction(label='Yes', text='Yes!'), MessageAction(label='No', text='No!'), ]) template_message = TemplateSendMessage(alt_text='Confirm alt text', template=confirm_template) line_bot_api.reply_message(event.reply_token, template_message) elif text == 'Bot': confirm_template = ConfirmTemplate( text='Photo of Miyuu or Osaka trip?', actions=[ MessageAction(label='Miyuu !', text='Miyuu'), MessageAction(label='Osaka Trip !', text='Osaka'), ]) template_message = TemplateSendMessage(alt_text='Confirm alt text', template=confirm_template) line_bot_api.reply_message(event.reply_token, template_message) elif text == 'buttons': buttons_template = ButtonsTemplate( title='My buttons sample', text='Hello, my buttons', actions=[ URIAction(label='Go to line.me', uri='https://line.me'), PostbackAction(label='ping', data='ping'), PostbackAction(label='ping with text', data='ping', text='ping'), MessageAction(label='Translate Rice', text='米') ]) template_message = TemplateSendMessage(alt_text='Buttons alt text', template=buttons_template) line_bot_api.reply_message(event.reply_token, template_message) elif text == 'carousel': carousel_template = CarouselTemplate(columns=[ CarouselColumn(text='hoge1', title='fuga1', actions=[ URIAction(label='Go to line.me', uri='https://line.me'), PostbackAction(label='ping', data='ping') ]), CarouselColumn(text='hoge2', title='fuga2', actions=[ PostbackAction(label='ping with text', data='ping', text='ping'), MessageAction(label='Translate Rice', text='米') ]), ]) template_message = TemplateSendMessage(alt_text='Carousel alt text', template=carousel_template) line_bot_api.reply_message(event.reply_token, template_message) elif text == 'Osaka': carousel_template = CarouselTemplate(columns=[ CarouselColumn( thumbnail_image_url= 'https://s3-us-west-2.amazonaws.com/awsrobomakerhelloworld-154344673743-bundlesbucket-1n2aine7xqbt8/image/osaka1024.jpg', title='Osaka1', text='Cooool', actions=[ PostbackAction( label='Colorful town', text='Cooool', data='Cooool') ]), CarouselColumn( thumbnail_image_url= 'https://s3-us-west-2.amazonaws.com/awsrobomakerhelloworld-154344673743-bundlesbucket-1n2aine7xqbt8/image/osaka2-1024.jpg', title='Osaka2', text='Women power', actions=[ PostbackAction( label='Castle', text='Women power', data='Women power') ]), CarouselColumn( thumbnail_image_url= 'https://s3-us-west-2.amazonaws.com/awsrobomakerhelloworld-154344673743-bundlesbucket-1n2aine7xqbt8/image/osaka3-1024.jpg', title='Osaka3', text='Where is this?', actions=[ PostbackAction(label='Some place !!', text='Where is this?', data='Where is this?') ]), CarouselColumn( thumbnail_image_url= 'https://s3-us-west-2.amazonaws.com/awsrobomakerhelloworld-154344673743-bundlesbucket-1n2aine7xqbt8/image/osaka4-1024.jpg', title='Osaka4', text='Nice Castle', actions=[ PostbackAction(label='Another GirlPow', text='Nice Castle', data='Nice Castle') ]), CarouselColumn( thumbnail_image_url= 'https://s3-us-west-2.amazonaws.com/awsrobomakerhelloworld-154344673743-bundlesbucket-1n2aine7xqbt8/image/osaka5-1024.jpg', title='Osaka5', text='Full face !!', actions=[ PostbackAction(label='Osaka member', text='Full face !!', data='Full face !!') ]), CarouselColumn( thumbnail_image_url= 'https://s3-us-west-2.amazonaws.com/awsrobomakerhelloworld-154344673743-bundlesbucket-1n2aine7xqbt8/image/osaka6-1024.jpg', title='Osaka6', text='Tired ??', actions=[ PostbackAction( label='Mom Power!!', text='Tired ??', data='Tired ??') ]) ]) template_message = TemplateSendMessage(alt_text='Carousel alt text', template=carousel_template) line_bot_api.reply_message(event.reply_token, template_message) elif text == 'Miyuu': carousel_template = CarouselTemplate(columns=[ CarouselColumn( thumbnail_image_url= 'https://s3-us-west-2.amazonaws.com/awsrobomakerhelloworld-154344673743-bundlesbucket-1n2aine7xqbt8/image/miyuu1024-1.jpg', text='Miyuu#1', actions=[ PostbackAction( label='Best Friend', text='Elvis', data='Elvis') ]), CarouselColumn( thumbnail_image_url= 'https://s3-us-west-2.amazonaws.com/awsrobomakerhelloworld-154344673743-bundlesbucket-1n2aine7xqbt8/image/miyuu1024-2.jpg', text='Miyuu#2', actions=[ PostbackAction(label='GreatWolfLodge', text='Water park', data='Water park') ]), CarouselColumn( thumbnail_image_url= 'https://s3-us-west-2.amazonaws.com/awsrobomakerhelloworld-154344673743-bundlesbucket-1n2aine7xqbt8/image/miyuu1024-3.jpg', text='Miyuu#3', actions=[ PostbackAction( label='Miyuu Cycle', text='Arcade', data='Arcade') ]), CarouselColumn( thumbnail_image_url= 'https://s3-us-west-2.amazonaws.com/awsrobomakerhelloworld-154344673743-bundlesbucket-1n2aine7xqbt8/image/miyuu1024-4.jpg', text='Miyuu#4', actions=[ PostbackAction( label='Bath Time', text='Love It', data='Love It') ]), CarouselColumn( thumbnail_image_url= 'https://s3-us-west-2.amazonaws.com/awsrobomakerhelloworld-154344673743-bundlesbucket-1n2aine7xqbt8/image/miyuu1024-5.jpg', text='Miyuu#5', actions=[ PostbackAction( label='The Gang', text='The Gang', data='The Gang') ]) ]) template_message = TemplateSendMessage(alt_text='Carousel alt text', template=carousel_template) line_bot_api.reply_message(event.reply_token, template_message) elif text == 'image_carousel': image_carousel_template = ImageCarouselTemplate(columns=[ ImageCarouselColumn( image_url='https://via.placeholder.com/1024x1024', action=DatetimePickerAction(label='datetime', data='datetime_postback', mode='datetime')), ImageCarouselColumn( image_url='https://via.placeholder.com/1024x1024', action=DatetimePickerAction( label='date', data='date_postback', mode='date')) ]) template_message = TemplateSendMessage( alt_text='ImageCarousel alt text', template=image_carousel_template) line_bot_api.reply_message(event.reply_token, template_message) elif text == 'Where is mom': location_message = LocationSendMessage(type='Where is Mom?', title='Mom home', address='Mom', latitude=13.799750, longitude=100.641546) line_bot_api.reply_message(event.reply_token, location_message) elif text == 'flex': bubble = BubbleContainer( direction='ltr', hero=ImageComponent(url='https://example.com/cafe.jpg', size='full', aspect_ratio='20:13', aspect_mode='cover', action=URIAction(uri='http://example.com', label='label')), body=BoxComponent( layout='vertical', contents=[ # title TextComponent(text='Brown Cafe', 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='Shinjuku, Tokyo', 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=[ # callAction, separator, websiteAction SpacerComponent(size='sm'), # callAction ButtonComponent( style='link', height='sm', action=URIAction(label='CALL', uri='tel:000000'), ), # separator SeparatorComponent(), # websiteAction ButtonComponent(style='link', height='sm', action=URIAction( label='WEBSITE', uri="https://example.com")) ]), ) message = FlexSendMessage(alt_text="hello", contents=bubble) line_bot_api.reply_message(event.reply_token, message) elif text == 'quick_reply': line_bot_api.reply_message( event.reply_token, TextSendMessage( text='Quick reply', quick_reply=QuickReply(items=[ QuickReplyButton( action=PostbackAction(label="label1", data="data1")), QuickReplyButton( action=MessageAction(label="label2", text="text2")), QuickReplyButton(action=DatetimePickerAction( label="label3", data="data3", mode="date")), QuickReplyButton(action=CameraAction(label="label4")), QuickReplyButton(action=CameraRollAction(label="label5")), QuickReplyButton(action=LocationAction(label="label6")), ]))) else: pass
def handle_postback(event): if event.postback.data == 'ping': line_bot_api.reply_message( event.reply_token, TextSendMessage(text='pong')) elif event.postback.data == 'edit': edit_menu = CarouselTemplate( columns=[ CarouselColumn( thumbnail_image_url='https://stat.ameba.jp/user_images/20161210/17/dsgkomatsu2/e4/8e/j/o0860121713818171577.jpg?caw=800', title='A Shop', text='Hello!', actions=[ PostbackTemplateAction( label='menu1', text='postback text1', data='action=buy&itemid=1'), MessageTemplateAction( label='menu2', text='message text1'), URITemplateAction( label='Calling', uri='tel:090-6118-6328' )]), CarouselColumn( thumbnail_image_url='https://s3-us-west-2.amazonaws.com/lineapitest/hamburger_240.jpeg', title='Tadano Restraunt', text='Welcome!', actions=[ PostbackTemplateAction( label='menu1', text='postback text1', data='action=buy&itemid=1'), MessageTemplateAction( label='menu2', text='message text1'), URITemplateAction( label='uri1', uri='http://example.com/1' )]), CarouselColumn( thumbnail_image_url='https://s3-us-west-2.amazonaws.com/lineapitest/hamburger_240.jpeg', title='this is menu2', text='description2', actions=[ PostbackTemplateAction( label='postback2', text='postback text2', data='action=buy&itemid=2'), MessageTemplateAction( label='message2', text='message text2'), URITemplateAction( label='uri2', uri='http://example.com/2')]) ]) template_message = TemplateSendMessage( alt_text='Carousel text', template=edit_menu) line_bot_api.reply_message(event.reply_token, template_message) # elif event.postback.data == 'confirm': else: line_bot_api.reply_message( event.reply_token, TextSendMessage(text=event.postback.data))
def location_command_handler(self): obj_location = GooglePlaceWebAPIWrapper( GLOBALS.GOOGLE_PLACES_API_W_SVC_KEY) dict_result = obj_location.get(self._event.message.latitude, self._event.message.longitude) lst_carousel_column = [] lst_db_record_requests = [] while dict_result: luck_place = random.choice(dict_result) dict_result.remove(luck_place) try: the_lat = luck_place['geometry']['location']['lat'] the_lng = luck_place['geometry']['location']['lng'] the_name = luck_place['name'] the_addr = luck_place['vicinity'] navigation_uri = 'https://www.google.com.tw/maps/place/%s,%s' % ( the_lat, the_lng) postback_thumbnail_image_url = GoogleStaticMapsAPIWrapper( url=flask.request.base_url.replace( 'callback', 'googlemap')).get(the_lat, the_lng, the_name, self._event.reply_token) the_search = ' '.join([the_addr, the_name]) params_string = urlencode({'q': the_search}, quote_via=quote_plus) google_for_it_uri = '?'.join( ['https://www.google.com.tw/search', params_string]) objCarouselColumn = CarouselColumn( thumbnail_image_url=postback_thumbnail_image_url, title=u'%s' % the_name, text=u'%s' % the_addr, actions=[ URITemplateAction(label=MESSAGE.MAP_NAVI_BTN, uri=navigation_uri), URITemplateAction(label=MESSAGE.MAP_NAVI_SRCH, uri=google_for_it_uri) ]) lst_carousel_column.append(objCarouselColumn) lst_db_record_requests.append({ 'id': len(lst_carousel_column), 'center': '%s,%s' % (the_lat, the_lng), 'name': the_name }) if len(lst_carousel_column) > 2: break except LineBotApiError as e: app.logger.error(luck_place) continue if len(lst_carousel_column) > 0: image_carousel_template_message = TemplateSendMessage( alt_text=MESSAGE.POST_BACK_ALT, template=CarouselTemplate(columns=lst_carousel_column)) self._line.reply_message(self._event.reply_token, image_carousel_template_message) self._fb.update_one({ 'type': 'gmap_token', 'key': self._event.reply_token, 'time': self._timestamp, 'requests': lst_db_record_requests }) else: self._replyText(CommonError.NO_AVALIABLE_DATA.get_msg()) app.logger.info('Leave location handler')
def scheduleAbsen(absen_id): print('Scheduling absen notifier for', absen_id) absen_data = feature_utils.sqlite_select_all('SELECT val FROM ' + absen_id) data_absen = [] for data in absen_data: data_absen.append(data[0]) print(data_absen) currentTime = getCurrentIndoTime() targetTime = int(data_absen[0]) targetTime += 7200 reminderTime = targetTime - (3600 * 11) print('Now scheduling', absen_id) print('Current Time: ', currentTime) print('Target Time: ', targetTime) reminder_msg = 'Daftar Kehadiran: ' dead_msg = 'Daftar kehadiran terakhir untuk absen ' + data_absen[ 3] + ' yang direncanakan pada ' + data_absen[2] + ':\n' data_kehadiran = feature_utils.sqlite_select_all('SELECT * FROM ' + absen_id) datak = [] for data in data_kehadiran: datak.append(data[0] + ', ' + data[1]) print(datak) for attedants in range(6, len(data_kehadiran)): reminder_msg += '\n' + str(attedants - 5) + '. ' + datak[attedants] dead_msg += '\n' + str(attedants - 5) + '. ' + datak[attedants] reminder_msg = reminder_msg.replace('(', '') reminder_msg = reminder_msg.replace(')', '') dead_msg = dead_msg.replace('(', '') dead_msg = dead_msg.replace(')', '') dead_msg += '\n\nData absen tersebut akan dihapus.' absen_template = TemplateSendMessage( alt_text='Pesan Pengingat Absen', template=ButtonsTemplate( title='Pengingat Absen: ' + str(data_absen[2]), text=str(data_absen[3]) + "(oleh " + str(data_absen[4]) + ")", actions=[ MessageAction(label='Hadir', text='#absen ' + str(data_absen[1]) + ' Hadir'), MessageAction(label='Tidak Hadir', text='#absen ' + str(data_absen[1]) + ' Tidak_Hadir'), MessageAction(label='Izin', text='#absen ' + str(data_absen[1]) + ' Izin'), MessageAction(label='Sakit', text='#absen ' + str(data_absen[1]) + ' Sakit'), ])) ### FOR TEST PURPOSE ### # currentTime = reminderTime + 2 # IF REMINDER TIME HITS if (currentTime >= reminderTime and currentTime <= (reminderTime + 600)): # Send Reminder MSG print('Sending reminder msg for id', data_absen[1]) sendPushMessage(data_absen[5], [absen_template, TextSendMessage(str(reminder_msg))]) # IF REMINDER 2 TRIGGERED if (currentTime >= (targetTime - 7200) and currentTime <= (targetTime - 6600)): # Send Reminder MSG print('Sending reminder msg for id', data_absen[1]) sendPushMessage(data_absen[5], [absen_template, TextSendMessage(str(reminder_msg))]) # IF ABSEN IS GOING TO 'DEAD' if (currentTime >= targetTime): # Send Final Push MSG Here!!! print('Sending dead msg and deleting', data_absen[1]) sendPushMessage(data_absen[5], TextSendMessage(str(dead_msg))) # Delete the absen from DB feature_utils.sqlite_query('DROP TABLE IF EXISTS abs_' + str(data_absen[1]))
def Rule_Based_Engine(event): str = event.message.text strupper = str.upper() # Help if "HELP" in strupper: Help_Result = TextSendMessage(text="目前可以使用:\n" "● 查詢TPS儲存環電流\n => TPS+Current\n\n"\ #"● 查詢Front End狀態\n => FE+Status \n\n"\ "● 查詢XBPM數值\n => XBPM+FE段數 \n\n"\ "● 查詢前端區真空狀態\n => Vacuum+Status+FE段數\n\n"\ "● Interlock功能:\n"\ "----所有狀態----\n"\ "=> Interlock+All\n" "----單站狀態----\n"\ "=> Interlock+Status\n+FE段數\n"\ "----警示點位----\n"\ "=> Interlock+Alarm\n+FE段數") return Help_Result # Reply TPS Current if "TPS" in strupper and "CURRENT" in strupper: Get_TPS_Current = float(caget('TPS:BeamCurrent')) TPS_Current_Result = TextSendMessage( text="TPS Current:\n%.4f mA" % Get_TPS_Current) return TPS_Current_Result # Reply All FE Status if "INTERLOCK" in strupper and "ALL" in strupper: FE02_S = caget('VacFE-Status:02', use_monitor=False) FE05_S = caget('VacFE-Status:05', use_monitor=False) FE09_S = caget('VacFE-Status:09', use_monitor=False) FE21_S = caget('VacFE-Status:21', use_monitor=False) FE23_S = caget('VacFE-Status:23', use_monitor=False) FE24_S = caget('VacFE-Status:24', use_monitor=False) FE25_S = caget('VacFE-Status:25', use_monitor=False) FE41_S = caget('VacFE-Status:41', use_monitor=False) FE44_S = caget('VacFE-Status:44', use_monitor=False) FE45_S = caget('VacFE-Status:45', use_monitor=False) text = "FE各段狀態如下 :\n" +\ "● FE-02 Status: %s \n" % FE02_S +\ "● FE-05 Status: %s \n" % FE05_S +\ "● FE-09 Status: %s \n" % FE09_S +\ "● FE-21 Status: %s \n" % FE21_S +\ "● FE-23 Status: %s \n" % FE23_S +\ "● FE-24 Status: %s \n" % FE24_S +\ "● FE-25 Status: %s \n" % FE25_S +\ "● FE-41 Status: %s \n" % FE41_S +\ "● FE-44 Status: %s \n" % FE44_S +\ "● FE-45 Status: %s" % FE45_S text = text.replace("Error!**", "❗️") text = text.replace("Normal", "✔️") Interlock_All_Result = TextSendMessage(text=text) return Interlock_All_Result # interlock+STATUS+number if "VALVE" in strupper and "STATUS" in strupper and "FE" in strupper: # unfinished str = event.message.text FE_number = re.sub("\D", "", str) # take out FE number print('Interlock Index:%s' % FE_number) if bool(FE_number) == True: # try: Valve_Status_Text = Valve_Status(FE_number) if Valve_Status_Text == 0: return 0 else: Valve_Status_Result = TextSendMessage(text=Valve_Status_Text) return Valve_Status_Result else: print("No Index:No FE number in text") return 0 # interlock+FALSE+number if "INTERLOCK" in strupper and "ALARM" in strupper: # unfinished try: str = event.message.text FE_number = re.sub("\D", "", str) # take out FE number print('Interlock Index:%s' % FE_number) if bool(FE_number) == True: error_text = FE_Diagnosis(FE_number) if error_text == 0: return 0 else: Error_Result = TextSendMessage(text=error_text) return Error_Result else: print("No Index:No FE number in text") except: print("Error") return 0 if "XBPM" in strupper and "FE" in strupper: # unfinished str = event.message.text FE_number = re.sub("\D", "", str) # take out FE number print('XBPM index:%s' % FE_number) if bool(FE_number) == True: try: # Use EPICS to get XBPM value XBPM_1X, XBPM_1Y, XBPM_2X, XBPM_2Y = XBPM_Status(FE_number) # Use LINE message API reply method return the result XBPM_Reuslt = TextSendMessage(text="FE%s XBPM Position:\n" % FE_number + "● 1X: %s um\n" % XBPM_1X + "● 1Y: %s um\n" % XBPM_1Y + "● 2X: %s um\n" % XBPM_2X + "● 2Y: %s um" % XBPM_2Y) return XBPM_Reuslt except: print("No Index") return 0 else: print("No Index") return 0 # -----------------------------------------------------------------------------20181227 if "VACUUM" in strupper and "STATUS" in strupper: str = event.message.text FE_number = re.sub("\D", "", str) print('Vacuum index:%s' % FE_number) if bool(FE_number) == True: Vacuum_msg = FE_VacPresure(FE_number) print(Vacuum_msg) if Vacuum_msg == 0: return 0 else: Vacuum_Result = TextSendMessage(text=Vacuum_msg) return Vacuum_Result else: print("No Index") return 0 if "TEMP" in strupper and "STATUS" in strupper: str = event.message.text FE_number = re.sub("\D", "", str) print('Temp index:%s' % FE_number) if bool(FE_number) == True: Temp_msg = FE_Temp(FE_number) print(Temp_msg) if Temp_msg == 0: return 0 else: TEMP_Result = TextSendMessage(text=Temp_msg) return TEMP_Result else: print("No Index") return 0 if "ID" in strupper and "GAP" in strupper and "FE" in strupper: str = event.message.text FE_number = re.sub("\D", "", str) print('ID index:%s' % FE_number) if bool(FE_number) == True: ID_Gap_msg = ID_Gap_Result(FE_number) ID_Gap = TextSendMessage(text=ID_Gap_msg) return ID_Gap else: print("No Index") return 0 if "CAROUSEL" in strupper and "TEMP" in strupper: TEMP_carousel = TemplateSendMessage( alt_text='Carousel template', template=FE_Temp_Carousel()) return TEMP_carousel if "CAROUSEL" in strupper and "INTERLOCK" in strupper: INTERLOCK_carousel = TemplateSendMessage( alt_text='Carousel template', template=Interlock_Carousel()) return INTERLOCK_carousel if "CAROUSEL" in strupper and "VACUUM" in strupper: VACUUM_carousel = TemplateSendMessage( alt_text='Carousel template', template=FE_Vacuum_Carousel()) return VACUUM_carousel if "CAROUSEL" in strupper and "VALVE" in strupper: carousel_template_message = TemplateSendMessage( alt_text='Carousel template', template=FE_Valve_Carousel()) return carousel_template_message if "CAROUSEL" in strupper and "XBPM" in strupper: carousel_template_message = TemplateSendMessage( alt_text='Carousel template', template=XBPM_Carousel()) return carousel_template_message if "CAROUSEL" in strupper and "ID" in strupper: carousel_template_message = TemplateSendMessage( alt_text='ID Gap Status', template=ID_Gap_Carousel()) return carousel_template_message return 0
def user_guide(): return TemplateSendMessage( alt_text='【使用說明書 ver 2.0】', template=CarouselTemplate(columns=[ CarouselColumn( thumbnail_image_url='https://i.imgur.com/02b6MnB.jpg', title=' - 【使用說明書】 - ', text='!使用說明書、!help、!說明書', actions=[ PostbackTemplateAction( label='說明書', text='!help', data='action=buy&itemid=1'), MessageTemplateAction(label='readme', text='!help'), # URITemplateAction( # label='uri1', # uri='http://example.com/1' # ) ]), CarouselColumn( thumbnail_image_url='https://i.imgur.com/02b6MnB.jpg', title=' - 【健康教育類】 - ', text='!教育/調教、!看圖、!智乃看圖片、!給智乃看圖、!智乃看圖圖、〖修復中〗!忘記', actions=[ PostbackTemplateAction(label='學習文字', text='!教育 ?', data='action=buy&itemid=1'), MessageTemplateAction(label='學習圖片', text='!學圖 ?'), # URITemplateAction( # label='uri1', # uri='http://example.com/1' # ) ]), CarouselColumn( thumbnail_image_url='https://i.imgur.com/02b6MnB.jpg', title=' - 【算命抽籤類】 - ', text='!機率、!抽數字', actions=[ PostbackTemplateAction( label='機率', text='!機率 ?', data='action=buy&itemid=1'), MessageTemplateAction(label='抽數字', text='!抽數字 ?'), # URITemplateAction( # label='uri1', # uri='http://example.com/1' # ) ]), CarouselColumn( thumbnail_image_url='https://i.imgur.com/02b6MnB.jpg', title=' - 【遊戲抽抽類】 - ', text='!抽抽、!終極密碼、!幾A幾B、小遊戲、機會命運', actions=[ PostbackTemplateAction( label='小遊戲', text='小遊戲', data='action=buy&itemid=1'), MessageTemplateAction(label='小遊戲', text='小遊戲'), # URITemplateAction( # label='uri1', # uri='http://example.com/1' # ) ]), CarouselColumn( thumbnail_image_url='https://i.imgur.com/02b6MnB.jpg', title=' - 【不知幹嘛類】 - ', text='貼圖辣、母湯、母湯電影版', actions=[ PostbackTemplateAction( label='貼圖辣', text='貼圖辣', data='action=buy&itemid=1'), MessageTemplateAction(label='貼圖辣', text='貼圖辣'), # URITemplateAction( # label='uri1', # uri='http://example.com/1' # ) ]), CarouselColumn( thumbnail_image_url='https://i.imgur.com/02b6MnB.jpg', title=' - 【如果覺得太吵的話】 -', text='!開關', actions=[ PostbackTemplateAction( label='讓智乃說話', text='!說話', data='action=buy&itemid=1'), MessageTemplateAction(label='請智乃閉嘴', text='!閉嘴'), # URITemplateAction( # label='uri1', # uri='http://example.com/1' # ) ]), CarouselColumn( thumbnail_image_url='https://i.imgur.com/02b6MnB.jpg', title=' - 【如果壞掉了要維修】 - ', text='!壞掉啦、呼叫四月、呼叫工程師', actions=[ PostbackTemplateAction(label='壞掉啦!!!', text='呼叫工程師', data='action=buy&itemid=1'), MessageTemplateAction(label='呼叫工程師', text='呼叫工程師'), # URITemplateAction( # label='uri1', # uri='http://example.com/1' # ) ]), CarouselColumn( thumbnail_image_url='https://i.imgur.com/02b6MnB.jpg', title=' - 【散步打排名 1】 - ', text='即時排名/即時戰況/排名/分數/戰況/score、%數/%、一位差、分數差', actions=[ PostbackTemplateAction( label='test', text='test', data='action=buy&itemid=1'), MessageTemplateAction(label='test', text='test'), # URITemplateAction( # label='uri1', # uri='http://example.com/1' # ) ]), CarouselColumn( thumbnail_image_url='https://i.imgur.com/02b6MnB.jpg', title=' - 【散步打排名 2】 - ', text='場數差、追擊時間/脫褲子、時速、場速、活動進度/進度、剩餘時間', actions=[ PostbackTemplateAction( label='test', text='test', data='action=buy&itemid=1'), MessageTemplateAction(label='test', text='test'), # URITemplateAction( # label='uri1', # uri='http://example.com/1' # ) ]), CarouselColumn( thumbnail_image_url='https://i.imgur.com/02b6MnB.jpg', title=' - 【散步打排名 3】 - ', text='房號/room/rm/R/r、r1/room1、r2/room2、!pt、!fire、!stone、!lz', actions=[ PostbackTemplateAction( label='test', text='test', data='action=buy&itemid=1'), MessageTemplateAction(label='test', text='test'), # URITemplateAction( # label='uri1', # uri='http://example.com/1' # ) ]) ]))
def process_postback_event(event): # print(event) query_string_dict = parse_qs(event.postback.data) user_id = str(event.source.user_id) # print(user_id) print(query_string_dict) try: # user_id=str(event.source.user_id) value = query_string_dict.get('tag')[0] Field = query_string_dict.get('name')[0] print(Field, value) sql = f''' UPDATE line_bot_db.user_linebot_record SET {Field}="{value}" WHERE userid="{user_id}"; ''' db.engine.execute(sql) except Exception as a: # print(a) callback # 取得data內的資料 # data 如果action 有在內的話 if "action" in query_string_dict: if query_string_dict.get('action')[0] == 'init': check = init_user_profile(user_id) print(check) elif query_string_dict.get('action')[0] == 'recommend': Produclist = [] from get_tfidf_recommendation import get_tfidf_recommendation try: get_user_search = f''' SELECT user_index FROM line_bot_db.user_linebot_record WHERE userid='{user_id}';''' index = db.engine.execute(get_user_search).fetchall()[0][0] recommedation_list = get_tfidf_recommendation(index) #print(recommedation_list) for Product_ID in recommedation_list: # print(Product_ID) search_id = f'''SELECT * FROM eb103.ikea_cl_test_f7 WHERE Product_number="{Product_ID}"''' Product = db.engine.execute(search_id).fetchall() d, a = {}, [] for rowproxy in Product: for column, value in rowproxy.items(): d = {**d, **{column: value}} a.append(d) #print(a[0]) Product_number = a[0]['Product_number'] Product_imageurl = a[0]['funiture_url'] #print(Product_imageurl) Product_title = a[0]['title'] Product_summy = a[0]['Product_Information'] Product_url = a[0]['url'] # print(Product_number) Carouse = \ CarouselColumn( thumbnail_image_url=f"{Product_imageurl}", title=f'{Product_title}', text=f'{Product_summy}', actions=[ PostbackTemplateAction( label='查看商品', text=f'{Product_url}', data=f'tag={Product_number}&name=user_index') # ,URITemplateAction( # label='uri1', # uri='http://example.com/1' # ) ] ) Produclist.append(Carouse) #print(Produclist) result_message_array = TemplateSendMessage( alt_text='Carousel template', template=CarouselTemplate( columns=Produclist ) ) line_bot_api.reply_message( event.reply_token, result_message_array ) except Exception: # 查詢pages值12321 search_sql = f''' SELECT * FROM line_bot_db.user_search WHERE userid="{user_id}"; ''' data_search = db.engine.execute(search_sql).fetchall() if data_search == []: # 預設pages 值 page = 0 insert_sql = f''' INSERT INTO line_bot_db.user_search(userid,pages) VALUES ("{user_id}",{page});''' db.engine.execute(insert_sql) # 查詢結果如果不為空值 則將結果取出dict elif data_search != []: e, c = {}, [] for data in data_search: for column, value in data.items(): e = {**e, **{column: value}} c.append(e) # 將page 取出放入sql內 page = (c[0]['pages']) sql=f'''SELECT * FROM eb103.ikea_cl_test_f7 ORDER BY rand() LIMIT 4,4''' Carouselist = [] data = (db.engine.execute(sql).fetchall()) d, a = {}, [] for rowproxy in data: for column, value in rowproxy.items(): d = {**d, **{column: value}} a.append(d) for i in a: all = dict(i) # index user_index = all['MyUnknownColumn'] # 商品名稱 title = all['title'] # 商品ID product_number = all['Product_number'] print(product_number) # 商品種類 object_type = all['category'] # 商品介紹 Product_summy = all['Product_Information'] # fileall = '商品介紹: ' + product_number + summary + object_type # 商品連結 url = all['url'] # 商品價格 price = all['price'] # 商品照片 images = all['funiture_url'] # object_string = object_string.replace("[", "").replace("]", "").replace("'", "") # object_string = object_string.split(',') # # print(object_string) Carouse = \ CarouselColumn( thumbnail_image_url=images, title=f'{title}', text=f'{Product_summy}', actions=[ PostbackTemplateAction( label='查看商品', text=f'{url}', data=f'tag={product_number}&name=user_index') # ,URITemplateAction( # label='uri1', # uri='http://example.com/1' # ) ] ) Carouselist.append(Carouse) # 下一頁 result_message_array = TemplateSendMessage( alt_text='Carousel template', template=CarouselTemplate( columns=Carouselist ) ) line_bot_api.reply_message( event.reply_token, result_message_array ) else: pass if 'folder' in query_string_dict: # print(query_string_dict.get('folder')) # if query_string_dict.get('folder')[0]=='Furniture': # # if query_string_dict.get('tag')[0]=='nextpage': # # sql = f''' # # SELECT * FROM line_bot_db.csv2 Limit 4,4; # # ''' # # else: # page = 0 # search_sql=f''' # SELECT pages from line_bot_db.user_search WHERE userid="{user_id}"; # ''' # data_search=db.engine.execute(search_sql).fetchall() # if data_search==[]: # # insert_sql=f''' # INSERT INTO line_bot_db.user_search(userid,pages) # VALUES ("{user_id}",{page});''' # # # db.engine.execute(insert_sql) # # # elif data_search !=[]: # e,c ={},[] # for data in data_search: # for column,value in data.items(): # e={**e,**{column:value}} # c.append(e) # page=(c[0]['pages']) # # sql = f''' # SELECT * FROM eb103.ikea_test Limit {page},4 ; # ''' # page +=4 # UPdate=f''' # UPDATE user_search # SET pages={page} # WHERE userid="{user_id}"; # ''' # db.engine.execute(UPdate) # Carouselist = [] # data = (db.engine.execute(sql).fetchall()) # d,a={},[] # for rowproxy in data: # for column,value in rowproxy.items(): # d={**d,**{column:value}} # a.append(d) # # #print(a[0]['images'][0]) # # object_string=dict(a[0]) # # print(type(object_string)) # # print(object_string['title']) # #str轉list # #object_string=object_string.replace("[", "").replace("]", "").replace("'", "") # #object_string=object_string.split(',') # #print(object_string[0]) # #print(type(object_string)) # print((a)) # for i in a: # all=dict(i) # title =all['title'] # product_number=all['Product number']+'\n' # object_type=all['type']+'\n' # summary=all['summary']+'\n' # fileall='商品介紹: '+product_number+summary+object_type # url=all['url'] # # object_string = all['interior_photo'] # # # object_string = object_string.replace("[", "").replace("]", "").replace("'", "") # # object_string = object_string.split(',') # # # # print(object_string) # # Carouse=\ # CarouselColumn( # thumbnail_image_url=object_string , # title=f'{title}', # text=f'{fileall}', # actions=[ # PostbackTemplateAction( # label='查看商品', # text=f'{url}', # data='tag=回傳商品的點擊率'), # # URITemplateAction( # # label='uri1', # # uri='http://example.com/1' # # ) # # # ] # ) # Carouselist.append(Carouse) # nextpage=CarouselColumn( # thumbnail_image_url='https://cdn.stocksnap.io/img-thumbs/960w/autumn-trees_FMKZ57EIMQ.jpg', # title='都沒有你要的?', # text='看看下一頁', # actions=[ # PostbackTemplateAction( # label='下一頁', # text='看看商品上架', # data='folder=Furniture&tag=nextpage'), # # PostbackTemplateAction( # # label='下一頁', # # text='看看商品上架', # # data='folder=Furniture&tag=nextpage' # # ) # ] # ) # Carouselist.append(nextpage) # result_message_array = TemplateSendMessage( # alt_text='Carousel template', # template=CarouselTemplate( # columns=Carouselist # ) # ) # # # # else: result_message_array = [] replyJsonPath = 'material/' + query_string_dict.get('folder')[0] + "/reply.json" # print(replyJsonPath) #路徑 result_message_array = detect_json_array_to_new_message_array(replyJsonPath) # print(result_message_array) line_bot_api.reply_message( event.reply_token, result_message_array ) # 如果data 內有end 則輸出輪播商品 elif 'end' in query_string_dict: # user_id = str(event.source.user_id) # 取出使用者查詢條件dict data_search_sql = f''' SELECT * FROM line_bot_db.user_linebot_record WHERE userid="{user_id}"; ''' data = (db.engine.execute(data_search_sql).fetchall()) d, a = {}, [] for rowproxy in data: for column, value in rowproxy.items(): d = {**d, **{column: value}} a.append(d) print(a) all = dict(a[0]) style = all['style'] category = all['category'] price = all['price'] colour = all['colour'] # 查詢pages值 search_sql = f''' SELECT * FROM line_bot_db.user_search WHERE userid="{user_id}"; ''' data_search = db.engine.execute(search_sql).fetchall() # print(data_search) # 查詢結果如果是空值 初始化值寫入 if data_search == []: # 預設pages 值 page = 0 insert_sql = f''' INSERT INTO line_bot_db.user_search(userid,pages) VALUES ("{user_id}",{page});''' db.engine.execute(insert_sql) # 查詢結果如果不為空值 則將結果取出dict elif data_search != []: e, c = {}, [] for data in data_search: for column, value in data.items(): e = {**e, **{column: value}} c.append(e) # 將page 取出放入sql內 page = (c[0]['pages']) # print(page) # sql放入指定條件變數 sql = f''' SELECT * FROM eb103.ikea_cl_test_f7 WHERE style="{style}" AND category="{category}" AND (new_color_1 LIKE "%%{colour}%%" OR new_color_1 LIKE "%%{colour}%%" OR new_color_1 LIKE "%%{colour}%%") AND price {price} ORDER BY rand() LIMIT {page},4 ''' print(sql) # 每次查詢加4 並更新寫入Mysql page += 4 # print(page) UPdate = f''' UPDATE line_bot_db.user_search SET pages={page} WHERE userid="{user_id}"; ''' db.engine.execute(UPdate) # 查詢 Carouselist = [] data = (db.engine.execute(sql).fetchall()) d, a = {}, [] for rowproxy in data: for column, value in rowproxy.items(): d = {**d, **{column: value}} a.append(d) # print(a[0]['images'][0]) # object_string=dict(a[0]) # print(type(object_string)) # print(object_string['title']) # str轉list # object_string=object_string.replace("[", "").replace("]", "").replace("'", "") # object_string=object_string.split(',') # print(object_string[0]) # print(type(object_string)) print(a) for i in a: all = dict(i) # index user_index = all['MyUnknownColumn'] # 商品名稱 title = all['title'] # 商品ID product_number = all['Product_number'] print(product_number) # 商品種類 object_type = all['category'] # 商品介紹 Product_summy = all['Product_Information'] # fileall = '商品介紹: ' + product_number + summary + object_type # 商品連結 url = all['url'] # 商品價格 price = all['price'] # 商品照片 images = all['funiture_url'] # object_string = object_string.replace("[", "").replace("]", "").replace("'", "") # object_string = object_string.split(',') # # print(object_string) Carouse = \ CarouselColumn( thumbnail_image_url=images, title=f'{title}', text=f'{Product_summy}', actions=[ PostbackTemplateAction( label='查看商品', text=f'{url}', data=f'tag={product_number}&name=user_index') # ,URITemplateAction( # label='uri1', # uri='http://example.com/1' # ) ] ) Carouselist.append(Carouse) # 下一頁 nextpage = CarouselColumn( thumbnail_image_url='https://cdn.stocksnap.io/img-thumbs/960w/autumn-trees_FMKZ57EIMQ.jpg', title='都沒有你要的?', text='看看下一頁', actions=[ PostbackTemplateAction( label='下一頁', text='看看商品上架', data='end=nextpage'), # PostbackTemplateAction( # label='下一頁', # text='看看商品上架', # data='folder=Furniture&tag=nextpage' # ) ] ) Carouselist.append(nextpage) result_message_array = TemplateSendMessage( alt_text='Carousel template', template=CarouselTemplate( columns=Carouselist ) ) line_bot_api.reply_message( event.reply_token, result_message_array ) # linkRichMenuId = open("material/" + query_string_dict.get('menu')[0] + '/rich_menu_id', 'r').read() # line_bot_api.link_rich_menu_to_user(event.source.user_id, linkRichMenuId) # # replyJsonPath = 'material/' + query_string_dict.get('menu')[0] + "/reply.json" # result_message_array = detect_json_array_to_new_message_array(replyJsonPath) # # line_bot_api.reply_message( # event.reply_token, # result_message_array # ) # data 型態如果有 information 在 query_string_dict內 elif 'information' in query_string_dict: # 使用者資料 # conn = pymysql.connect(host=host, port=port, user=user, passwd=passwd, db=db) # cursor = conn.cursor() # # 抓取使用者id user_profile = line_bot_api.get_profile(event.source.user_id) # userID = str(user_profile.user_id) print(user_id) # init_user_profile(userID) try: @app.route('/html1/<userID>', methods=['GET']) def html2(userID): return render_template('surveyweb.html', ID=user_id) @app.route('/submit', methods=['POST']) def submit(): user_ID = request.values.get('user_ID') name = str(request.values.get('name')) email = str(request.values.get('email')) gender = int(request.form.get('gender')) age = str(request.form.get('age')) print(user_ID, name, email, gender, age) sql = f''' UPDATE line_bot_db.lineuser SET self_name="{name}",email="{email}",gender={gender} ,age="{age}" WHERE userid="{user_ID}" ''' db.engine.execute(sql) return '資料更改完成' except: pass # usedb=f'USE line_bot_db;' # db.engine.execute(usedb) sql = f''' SELECT * FROM line_bot_db.lineuser WHERE userid="{user_id}"; ''' try: data = list((db.engine.execute(sql).fetchall())[0]) data1 = '名字:' + data[1] + '\n' data2 = '信箱:' + data[2] + '\n' if data[3] == '1': data[3] = '男' else: data[3] = '女' data3 = '性別:' + data[3] + '\n' if data[4] == 'age1': data[4] = '未滿20歲' elif data[4] == 'age2': data[4] = '20~29歲' elif data[4] == 'age3': data[4] = '30~39歲' elif data[4] == 'age4': data[4] = '40~49歲' elif data[4] == 'age5': data[4] = '50歲以上' data4 = '年齡:' + data[4] + '\n' falldata = data1 + data2 + data3 + data4 print(falldata) message = [TextSendMessage(falldata), TemplateSendMessage( alt_text="confirm template", template=ButtonsTemplate( title='你的基本資料', text='以上為個人資料', actions=[ # PostbackTemplateAction( # type="postback", # label='看看商品上架', # text="看看商品上架-傢俱", # data='folder=Furniture' # ), URITemplateAction( label='重新輸入資料', uri=f"https://{server_url}/html1/{user_id}", ) ] ) ) ] except: message = TemplateSendMessage( alt_text="confirm template", template=ButtonsTemplate( title='你的基本資料', text="尚未輸入資料", actions=[ # PostbackTemplateAction( # type="postback", # label='看看商品上架', # text="看看商品上架-傢俱", # data='folder=Furniture' # ), URITemplateAction( label='輸入資料', uri=f"https://{server_url}/html1/{user_id}", ) ] ) ) line_bot_api.reply_message( event.reply_token, message)
def handle_message(event): if event.message.text == "リクエスト": food = Foodstuff().get_food() recipes = Recipe().get_recipes(food) notes = [ CarouselColumn( thumbnail_image_url=recipes[0]["image"], title=recipes[0]["recipe"], text=f"{food}のレシピ", actions=[URIAction(label='Go!!', uri=recipes[0]["link"])]), CarouselColumn( thumbnail_image_url=recipes[1]["image"], title=recipes[1]["recipe"], text=f"{food}のレシピ", actions=[URIAction(label='Go!!', uri=recipes[1]["link"])]), CarouselColumn( thumbnail_image_url=recipes[2]["image"], title=recipes[2]["recipe"], text=f"{food}のレシピ", actions=[URIAction(label='Go!!', uri=recipes[2]["link"])]) ] messages = TemplateSendMessage( alt_text='template', template=CarouselTemplate(columns=notes), ) line_bot_api.reply_message(event.reply_token, messages=messages) if "食材" in event.message.text: food = event.message.text.replace("食材", "") recipes = Recipe().get_recipes(food) notes = [ CarouselColumn( thumbnail_image_url=recipes[0]["image"], title=recipes[0]["recipe"], text=f"{food}のレシピ", actions=[URIAction(label='Go!!', uri=recipes[0]["link"])]), CarouselColumn( thumbnail_image_url=recipes[1]["image"], title=recipes[1]["recipe"], text=f"{food}のレシピ", actions=[URIAction(label='Go!!', uri=recipes[1]["link"])]), CarouselColumn( thumbnail_image_url=recipes[2]["image"], title=recipes[2]["recipe"], text=f"{food}のレシピ", actions=[URIAction(label='Go!!', uri=recipes[2]["link"])]) ] messages = TemplateSendMessage( alt_text='template', template=CarouselTemplate(columns=notes), ) line_bot_api.reply_message(event.reply_token, messages=messages) if event.message.text == "How To": msg = '''「リクエスト」と言ってもらえれば12月のレシピを提案します\n「食材」のあとに使用したい食材を入力するとそのレシピを提案します''' line_bot_api.reply_message(event.reply_token, TextSendMessage(text=msg))
def handle_message(event): get_text = event.message.text print(get_text[:6]) if get_text == '講義': #User_ID = event.source.user_id #line_bot_api.reply_message(event.reply_token, User_ID) line_bot_api.push_message( event.source.user_id, TemplateSendMessage(alt_text="課程講義", template=handout.handout())) print('Reply User ID =>' + event.source.user_id) elif get_text[:9] == '小幫手wiki搜尋': search_text = get_text[9:] url = wiki_api.wiki_search(search_text) line_bot_api.reply_message( event.reply_token, TextMessage(text='以下是小幫手幫您找到的網址:\n\n👉👉 ' + str(url))) elif get_text == '小幫手顯示講義': #Group_ID = source.group_id #line_bot_api.reply_message(event.reply_token, Group_ID) line_bot_api.push_message( event.source.group_id, TemplateSendMessage(alt_text="課程講義", template=handout.handout())) elif get_text == '小幫手明天的課表' or get_text[:6] == '小幫手明天上': a = datetime.date.today() + datetime.timedelta(days=1) tmr_month = a.month tmr_day = a.day class_list = timetable.timetable(tmr_month, tmr_day) if len(class_list) == 3: content1 = class_list[0] content2 = class_list[1] content3 = class_list[2].strip('\n') timetable_text = "🆕 新消息:\n\n✏️ 明天課程: {}\n\n✏️ 提醒事項: {}\n\n✏️ 夜輔: {} ".format( content1, content2, content3) line_bot_api.push_message(event.source.group_id, TextMessage(text=timetable_text)) elif len(class_list) == 2: content1 = class_list[0] content2 = class_list[1] timetable_text = "🆕 新消息:\n\n✏️ 明天課程: {}\n\n✏️ 提醒事項: {}\n\n✏️ 夜輔: ❌".format( content1, content2) line_bot_api.push_message(event.source.group_id, TextMessage(text=timetable_text)) elif len(class_list) == 1: content1 = class_list[0] timetable_text = "🆕 新消息:\n\n✏️ 明天課程: ❌ \n\n✏️ 提醒事項: {}\n\n✏️ 夜輔: ❌ ".format( content1) line_bot_api.push_message(event.source.group_id, TextMessage(text=timetable_text)) elif get_text == '小幫手昨天的課表' or get_text[:6] == '小幫手昨天上': a = datetime.date.today() + datetime.timedelta(days=-1) tmr_month = a.month tmr_day = a.day class_list = timetable.timetable(tmr_month, tmr_day) if len(class_list) == 3: content1 = class_list[0] content2 = class_list[1] content3 = class_list[2].strip('\n') timetable_text = "🆕 新消息:\n\n✏️ 昨天課程: {}\n\n✏️ 提醒事項: {}\n\n✏️ 夜輔: {} ".format( content1, content2, content3) line_bot_api.push_message(event.source.group_id, TextMessage(text=timetable_text)) elif len(class_list) == 2: content1 = class_list[0] content2 = class_list[1] timetable_text = "🆕 新消息:\n\n✏️ 昨天課程: {}\n\n✏️ 提醒事項: {}\n\n✏️ 夜輔: ❌".format( content1, content2) line_bot_api.push_message(event.source.group_id, TextMessage(text=timetable_text)) elif len(class_list) == 1: content1 = class_list[0] timetable_text = "🆕 新消息:\n\n✏️ 昨天課程: ❌ \n\n✏️ 提醒事項: {}\n\n✏️ 夜輔: ❌ ".format( content1) line_bot_api.push_message(event.source.group_id, TextMessage(text=timetable_text)) elif get_text[:3] == '小幫手' and get_text[8:10] == '課表': month = int(get_text[3]) day = int(get_text[5:7]) print("get {} 月 {} 日".format(month, day)) class_list = timetable.timetable(month, day) if len(class_list) == 3: content1 = class_list[0] content2 = class_list[1] content3 = class_list[2].strip('\n') timetable_text = "🆕 新消息: {} 月 {} 日\n\n✏️ 課程: {}\n\n✏️ 提醒事項: {}\n\n✏️ 夜輔: {} ".format( month, day, content1, content2, content3) line_bot_api.push_message(event.source.group_id, TextMessage(text=timetable_text)) elif len(class_list) == 2: content1 = class_list[0] content2 = class_list[1] timetable_text = "🆕 新消息: {} 月 {} 日\n\n✏️ 課程: {}\n\n✏️ 提醒事項: {}\n\n✏️ 夜輔: ❌ ".format( month, day, content1, content2) line_bot_api.push_message(event.source.group_id, TextMessage(text=timetable_text)) elif len(class_list) == 1: content1 = class_list[0] timetable_text = "🆕 新消息: {} 月 {} 日\n\n✏️ 課程: ❌ \n\n✏️ 提醒事項: {}\n\n✏️ 夜輔: ❌ ".format( month, day, content1) line_bot_api.push_message(event.source.group_id, TextMessage(text=timetable_text)) elif event.message.text == '/help': help_text = r"🆕🆕 目前功能:\n\n👉 講義: 小幫手顯示講義\n\n👉 查詢指定時間課表: 小幫手X月XX日課表\n\n👉明日課表: 小幫手明天的課表\n\n👉 昨日課表: 小幫手昨天的課表\n\n👉 維基百科: 小幫手wiki搜尋(keywords) \n\n👉 Help : \help" line_bot_api.reply_message(event.reply_token, TextMessage(text=help_text))
def handle_text_message(event): text=event.message.text if isinstance(event.source, SourceGroup): subject = line_bot_api.get_group_member_profile(event.source.group_id, event.source.user_id) set_id = event.source.group_id elif isinstance(event.source, SourceRoom): subject = line_bot_api.get_room_member_profile(event.source.room_id, event.source.user_id) set_id = event.source.room_id else: subject = line_bot_api.get_profile(event.source.user_id) set_id = event.source.user_id def split1(text): return text.split('/wolfram ', 1)[-1] def split2(text): return text.split('/kbbi ', 1)[-1] def split3(text): return text.split('/echo ', 1)[-1] def split4(text): return text.split('/wolframs ', 1)[-1] def split5(text): return text.split('/trans ', 1)[-1] def split6(text): return text.split('/wiki ', 1)[-1] def split7(text): return text.split('/wikilang ', 1)[-1] def split8(text): return text.split('/urban ', 1)[-1] def split9(text): return text.split('/ox ', 1)[-1] def ox(keyword): oxdict_appid = ('7dff6c56') oxdict_key = ('41b55bba54078e9fb9f587f1b978121f') word = quote(keyword) url = ('https://od-api.oxforddictionaries.com:443/api/v1/entries/en/{}'.format(word)) req = requests.get(url, headers={'app_id': oxdict_appid, 'app_key': oxdict_key}) if "No entry available" in req.text: return 'No entry available for "{}".'.format(word) req = req.json() result = '' i = 0 for each_result in req['results']: for each_lexEntry in each_result['lexicalEntries']: for each_entry in each_lexEntry['entries']: for each_sense in each_entry['senses']: if 'crossReferenceMarkers' in each_sense: search = 'crossReferenceMarkers' else: search = 'definitions' for each_def in each_sense[search]: i += 1 result += '\n{}. {}'.format(i, each_def) if i == 1: result = 'Definition of {}:\n'.format(keyword) + result[4:] else: result = 'Definitions of {}:'.format(keyword) + result return result def wolfram(query): wolfram_appid = ('83L4JP-TWUV8VV7J7') url = 'https://api.wolframalpha.com/v2/result?i={}&appid={}' return requests.get(url.format(quote(query), wolfram_appid)).text def wolframs(query): wolfram_appid = ('83L4JP-TWUV8VV7J7') url = 'https://api.wolframalpha.com/v2/simple?i={}&appid={}' return url.format(quote(query), wolfram_appid) def trans(word): sc = 'en' to = 'id' if word[0:].lower().strip().startswith('sc='): sc = word.split(', ', 1)[0] sc = sc.split('sc=', 1)[-1] word = word.split(', ', 1)[1] if word[0:].lower().strip().startswith('to='): to = word.split(', ', 1)[0] to = to.split('to=', 1)[-1] word = word.split(', ', 1)[1] if word[0:].lower().strip().startswith('sc='): sc = word.split(', ', 1)[0] sc = sc.split('sc=', 1)[-1] word = word.split(', ', 1)[1] return translator.translate(word, src=sc, dest=to).text def wiki_get(keyword, set_id, trim=True): try: wikipedia.set_lang(wiki_settings[set_id]) except KeyError: wikipedia.set_lang('en') try: result = wikipedia.summary(keyword) except wikipedia.exceptions.DisambiguationError: articles = wikipedia.search(keyword) result = "{} disambiguation:".format(keyword) for item in articles: result += "\n{}".format(item) except wikipedia.exceptions.PageError: result = "{} not found!".format(keyword) else: if trim: result = result[:2000] if not result.endswith('.'): result = result[:result.rfind('.')+1] return result def wiki_lang(lang, set_id): langs_dict = wikipedia.languages() if lang in langs_dict.keys(): wiki_settings[set_id] = lang return ("Language has been changed to {} successfully." .format(langs_dict[lang])) return ("{} not available!\n" "See meta.wikimedia.org/wiki/List_of_Wikipedias for " "a list of available languages, and use the prefix " "in the Wiki column to set the language." .format(lang)) def find_kbbi(keyword, ex=True): try: entry = KBBI(keyword) except KBBI.TidakDitemukan as e: result = str(e) else: result = "Definisi {}:\n".format(keyword) if ex: result += '\n'.join(entry.arti_contoh) else: result += str(entry) return result def urban(keyword, ex=True): try: entry = udtop(keyword) except (TypeError, AttributeError, udtop.TermNotFound) : result = "{} definition not found in urbandictionary.".format(keyword) else: result = "{} definition:\n".format(keyword) if ex: result += str(entry) else: result += entry.definition return result if text == '/help': line_bot_api.reply_message( event.reply_token, TextSendMessage('I will be here for you')) elif text == '/leave': if isinstance(event.source, SourceGroup): line_bot_api.reply_message( event.reply_token, TextSendMessage('I am leaving the group...')) line_bot_api.leave_group(event.source.group_id) elif isinstance(event.source, SourceRoom): line_bot_api.reply_message( event.reply_token, TextSendMessage('I am leaving the group...')) line_bot_api.leave_room(event.source.room_id) else: line_bot_api.reply_message( event.reply_token, TextSendMessage('>_< cannot do...')) elif text == '/about': line_bot_api.reply_message( event.reply_token, TextSendMessage("Hello, my name is Reika \n" "Nice to meet you... \n" "source code: https://github.com/Vetrix/ZERO")) elif text == '/cmd': line_bot_api.reply_message( event.reply_token, TextSendMessage("Without parameters: \n" "/about, /help, /profile, /leave, /lang \n" "/confirm, /buttons, /search image, \n" "/manga, /dots, /track, /bet \n" "/image_carousel, /imagemap \n" "\n" "With parameters: \n" "/echo, /kbbi, /wolfram, /wolframs, \n" "/trans, /wiki, /wikilang, /urban, /ox")) elif text == '/lang': line_bot_api.reply_message( event.reply_token, TextSendMessage("Language for translation see here \n" "https://github.com/Vetrix/ZERO/blob/master/Lang.txt")) elif text == '/manga': line_bot_api.reply_message( event.reply_token, TextSendMessage("mangaku.in")) elif text == '/dots': line_bot_api.reply_message( event.reply_token, TextSendMessage("https://www.instagram.com/dotaindonesia2/")) elif text == '/track': line_bot_api.reply_message( event.reply_token, TextSendMessage("http://dota2.prizetrac.kr/international2018")) elif text == '/bet': line_bot_api.reply_message( event.reply_token, TextSendMessage("dota2.com/predictions")) elif text == '/search image': line_bot_api.reply_message( event.reply_token, TextSendMessage("Try this up \n" "https://reverse.photos/")) elif text == '/profile': if isinstance(event.source, SourceGroup): try: profile = line_bot_api.get_group_member_profile(event.source.group_id, event.source.user_id) result = ("Display name: " + profile.display_name + "\n" + "Profile picture: " + profile.picture_url + "\n" + "User_ID: " + profile.user_id) except LineBotApiError: pass line_bot_api.reply_message( event.reply_token, TextSendMessage(result)) elif isinstance(event.source, SourceRoom): try: profile = line_bot_api.get_room_member_profile(event.source.room_id, event.source.user_id) result = ("Display name: " + profile.display_name + "\n" + "Profile picture: " + profile.picture_url + "\n" + "User_ID: " + profile.user_id) except LineBotApiError: pass line_bot_api.reply_message( event.reply_token, TextSendMessage(result)) else: try: profile = line_bot_api.get_profile(event.source.user_id) result = ("Display name: " + profile.display_name + "\n" + "Profile picture: " + profile.picture_url + "\n" + "User_ID: " + profile.user_id) if profile.status_message: result += "\n" + "Status message: " + profile.status_message except LineBotApiError: pass line_bot_api.reply_message( event.reply_token, TextSendMessage(result)) elif text=='/kbbi': line_bot_api.reply_message( event.reply_token, TextSendMessage('command /kbbi {input}')) elif text=='/urban': line_bot_api.reply_message( event.reply_token, TextSendMessage('command /urban {input}')) elif text=='/ox': line_bot_api.reply_message( event.reply_token, TextSendMessage('command /ox {input}')) elif text=='/wolfram': line_bot_api.reply_message( event.reply_token, TextSendMessage('command /wolfram {input}')) elif text=='/trans': line_bot_api.reply_message( event.reply_token, TextSendMessage('command /trans sc={}, to={}, {text}')) elif text=='/wiki': line_bot_api.reply_message( event.reply_token, TextSendMessage('command /wiki {text}')) elif text=='/wikilang': line_bot_api.reply_message( event.reply_token, TextSendMessage('command /wikilang {language_id}')) elif text == '/confirm': confirm_template = ConfirmTemplate(text='Do it?', actions=[ MessageTemplateAction(label='Yes', text='Yes!'), MessageTemplateAction(label='No', text='No!'), ]) template_message = TemplateSendMessage( alt_text='Confirm alt text', template=confirm_template) line_bot_api.reply_message(event.reply_token, template_message) elif text == '/buttons': buttons_template = ButtonsTemplate( title='My buttons sample', text='Hello, my buttons', actions=[ URITemplateAction( label='Go to line.me', uri='https://line.me'), PostbackTemplateAction(label='ping', data='ping'), PostbackTemplateAction( label='ping with text', data='ping', text='ping'), MessageTemplateAction(label='Translate Rice', text='米') ]) template_message = TemplateSendMessage( alt_text='Buttons alt text', template=buttons_template) line_bot_api.reply_message(event.reply_token, template_message) elif text == '/image_carousel': image_carousel_template = ImageCarouselTemplate(columns=[ ImageCarouselColumn(image_url='https://via.placeholder.com/1024x1024', action=DatetimePickerTemplateAction(label='datetime', data='datetime_postback', mode='datetime')), ImageCarouselColumn(image_url='https://via.placeholder.com/1024x1024', action=DatetimePickerTemplateAction(label='date', data='date_postback', mode='date')) ]) template_message = TemplateSendMessage( alt_text='ImageCarousel alt text', template=image_carousel_template) line_bot_api.reply_message(event.reply_token, template_message) elif text == '/imagemap': pass elif text[0:].lower().strip().startswith('/wolfram '): line_bot_api.reply_message( event.reply_token, TextSendMessage(wolfram(split1(text)))) elif text[0:].lower().strip().startswith('/wolframs '): line_bot_api.reply_message( event.reply_token, ImageSendMessage(original_content_url= wolframs(split4(text)), preview_image_url= wolframs(split4(text)))) elif text[0:].lower().strip().startswith('/kbbi '): line_bot_api.reply_message( event.reply_token, TextSendMessage(find_kbbi(split2(text)))) elif text[0:].lower().strip().startswith('/urban '): line_bot_api.reply_message( event.reply_token, TextSendMessage(urban(split8(text)))) elif text[0:].lower().strip().startswith('/ox '): line_bot_api.reply_message( event.reply_token, TextSendMessage(ox(split9(text)))) elif text[0:].lower().strip().startswith('/echo ') : line_bot_api.reply_message( event.reply_token, TextSendMessage(split3(text))) elif text[0:].lower().strip().startswith('/trans ') : line_bot_api.reply_message( event.reply_token, TextSendMessage(trans(split5(text)))) elif text[0:].lower().strip().startswith('/wiki ') : line_bot_api.reply_message( event.reply_token, TextSendMessage(wiki_get(split6(text), set_id=set_id))) elif text[0:].lower().strip().startswith('/wikilang ') : line_bot_api.reply_message( event.reply_token, TextSendMessage(wiki_lang(split7(text), set_id=set_id)))
def kick(): confirm_template = ConfirmTemplate(text='Keluarkan bot dari obrolan?', actions=[ MessageTemplateAction(label='Iya', text='Pergi sana!'), MessageTemplateAction(label='Tidak', text='Jangan keluarkan!'),]) template_message = TemplateSendMessage(alt_text='Konfirmasi kick', template=confirm_template) return susunhurufbot.reply_message(event.reply_token, template_message)
from linebot.models import ConfirmTemplate from linebot.models import MessageTemplateAction from linebot.models import PostbackTemplateAction from linebot.models import TemplateSendMessage confirmations = [{ "id":"example", "payload":TemplateSendMessage( alt_text='Confirm template', template=ConfirmTemplate( text='Are you sure?', actions=[ PostbackTemplateAction( label='postback', text='postback text', data='action=buy&itemid=1' ), MessageTemplateAction( label='message', text='message text' ) ] ) ) }] def composeConfirm(alt_text, text, option1, option2): if option1['type'] == "postback": opt1_payload = PostbackTemplateAction( label=option1['label'], # text=option1['text'],
def handle_text_message(event): text = event.message.text if text == 'profile': if isinstance(event.source, SourceUser): profile = line_bot_api.get_profile(event.source.user_id) line_bot_api.reply_message(event.reply_token, [ TextSendMessage(text='Display name: ' + profile.display_name), TextSendMessage(text='Status message: ' + str(profile.status_message)) ]) else: line_bot_api.reply_message( event.reply_token, TextSendMessage( text="Bot can't use profile API without user ID")) elif text == 'quota': quota = line_bot_api.get_message_quota() line_bot_api.reply_message(event.reply_token, [ TextSendMessage(text='type: ' + quota.type), TextSendMessage(text='value: ' + str(quota.value)) ]) elif text == 'quota_consumption': quota_consumption = line_bot_api.get_message_quota_consumption() line_bot_api.reply_message(event.reply_token, [ TextSendMessage(text='total usage: ' + str(quota_consumption.total_usage)), ]) elif text == 'push': line_bot_api.push_message(event.source.user_id, [ TextSendMessage(text='PUSH!'), ]) elif text == 'multicast': line_bot_api.multicast([event.source.user_id], [ TextSendMessage(text='THIS IS A MULTICAST MESSAGE'), ]) elif text == 'broadcast': line_bot_api.broadcast([ TextSendMessage(text='THIS IS A BROADCAST MESSAGE'), ]) elif text.startswith('broadcast '): # broadcast 20190505 date = text.split(' ')[1] print("Getting broadcast result: " + date) result = line_bot_api.get_message_delivery_broadcast(date) line_bot_api.reply_message(event.reply_token, [ TextSendMessage(text='Number of sent broadcast messages: ' + date), TextSendMessage(text='status: ' + str(result.status)), TextSendMessage(text='success: ' + str(result.success)), ]) elif text == 'bye': if isinstance(event.source, SourceGroup): line_bot_api.reply_message(event.reply_token, TextSendMessage(text='Leaving group')) line_bot_api.leave_group(event.source.group_id) elif isinstance(event.source, SourceRoom): line_bot_api.reply_message(event.reply_token, TextSendMessage(text='Leaving group')) line_bot_api.leave_room(event.source.room_id) else: line_bot_api.reply_message( event.reply_token, TextSendMessage(text="Bot can't leave from 1:1 chat")) elif text == 'image': url = request.url_root + '/static/logo.png' app.logger.info("url=" + url) line_bot_api.reply_message(event.reply_token, ImageSendMessage(url, url)) elif text == 'confirm': confirm_template = ConfirmTemplate(text='Do it?', actions=[ MessageAction(label='Yes', text='Yes!'), MessageAction(label='No', text='No!'), ]) template_message = TemplateSendMessage(alt_text='Confirm alt text', template=confirm_template) line_bot_api.reply_message(event.reply_token, template_message) elif text == 'buttons': buttons_template = ButtonsTemplate( title='My buttons sample', text='Hello, my buttons', actions=[ URIAction(label='Go to line.me', uri='https://line.me'), PostbackAction(label='ping', data='ping'), PostbackAction(label='ping with text', data='ping', text='ping'), MessageAction(label='Translate Rice', text='米') ]) template_message = TemplateSendMessage(alt_text='Buttons alt text', template=buttons_template) line_bot_api.reply_message(event.reply_token, template_message) elif text == 'carousel': carousel_template = CarouselTemplate(columns=[ CarouselColumn(text='hoge1', title='fuga1', actions=[ URIAction(label='Go to line.me', uri='https://line.me'), PostbackAction(label='ping', data='ping') ]), CarouselColumn(text='hoge2', title='fuga2', actions=[ PostbackAction(label='ping with text', data='ping', text='ping'), MessageAction(label='Translate Rice', text='米') ]), ]) template_message = TemplateSendMessage(alt_text='Carousel alt text', template=carousel_template) line_bot_api.reply_message(event.reply_token, template_message) elif text == 'image_carousel': image_carousel_template = ImageCarouselTemplate(columns=[ ImageCarouselColumn( image_url='https://via.placeholder.com/1024x1024', action=DatetimePickerAction(label='datetime', data='datetime_postback', mode='datetime')), ImageCarouselColumn( image_url='https://via.placeholder.com/1024x1024', action=DatetimePickerAction( label='date', data='date_postback', mode='date')) ]) template_message = TemplateSendMessage( alt_text='ImageCarousel alt text', template=image_carousel_template) line_bot_api.reply_message(event.reply_token, template_message) elif text == 'imagemap': pass elif text == 'flex': bubble = BubbleContainer( direction='ltr', hero=ImageComponent(url='https://example.com/cafe.jpg', size='full', aspect_ratio='20:13', aspect_mode='cover', action=URIAction(uri='http://example.com', label='label')), body=BoxComponent( layout='vertical', contents=[ # title TextComponent(text='Brown Cafe', 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='Shinjuku, Tokyo', 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=[ # callAction, separator, websiteAction SpacerComponent(size='sm'), # callAction ButtonComponent( style='link', height='sm', action=URIAction(label='CALL', uri='tel:000000'), ), # separator SeparatorComponent(), # websiteAction ButtonComponent(style='link', height='sm', action=URIAction( label='WEBSITE', uri="https://example.com")) ]), ) message = FlexSendMessage(alt_text="hello", contents=bubble) line_bot_api.reply_message(event.reply_token, message) elif text == 'flex_update_1': bubble_string = """ { "type": "bubble", "body": { "type": "box", "layout": "vertical", "contents": [ { "type": "image", "url": "https://scdn.line-apps.com/n/channel_devcenter/img/flexsnapshot/clip/clip3.jpg", "position": "relative", "size": "full", "aspectMode": "cover", "aspectRatio": "1:1", "gravity": "center" }, { "type": "box", "layout": "horizontal", "contents": [ { "type": "box", "layout": "vertical", "contents": [ { "type": "text", "text": "Brown Hotel", "weight": "bold", "size": "xl", "color": "#ffffff" }, { "type": "box", "layout": "baseline", "margin": "md", "contents": [ { "type": "icon", "size": "sm", "url": "https://scdn.line-apps.com/n/channel_devcenter/img/fx/review_gold_star_28.png" }, { "type": "icon", "size": "sm", "url": "https://scdn.line-apps.com/n/channel_devcenter/img/fx/review_gold_star_28.png" }, { "type": "icon", "size": "sm", "url": "https://scdn.line-apps.com/n/channel_devcenter/img/fx/review_gold_star_28.png" }, { "type": "icon", "size": "sm", "url": "https://scdn.line-apps.com/n/channel_devcenter/img/fx/review_gold_star_28.png" }, { "type": "icon", "size": "sm", "url": "https://scdn.line-apps.com/n/channel_devcenter/img/fx/review_gray_star_28.png" }, { "type": "text", "text": "4.0", "size": "sm", "color": "#d6d6d6", "margin": "md", "flex": 0 } ] } ] }, { "type": "box", "layout": "vertical", "contents": [ { "type": "text", "text": "¥62,000", "color": "#a9a9a9", "decoration": "line-through", "align": "end" }, { "type": "text", "text": "¥42,000", "color": "#ebebeb", "size": "xl", "align": "end" } ] } ], "position": "absolute", "offsetBottom": "0px", "offsetStart": "0px", "offsetEnd": "0px", "backgroundColor": "#00000099", "paddingAll": "20px" }, { "type": "box", "layout": "vertical", "contents": [ { "type": "text", "text": "SALE", "color": "#ffffff" } ], "position": "absolute", "backgroundColor": "#ff2600", "cornerRadius": "20px", "paddingAll": "5px", "offsetTop": "10px", "offsetEnd": "10px", "paddingStart": "10px", "paddingEnd": "10px" } ], "paddingAll": "0px" } } """ message = FlexSendMessage(alt_text="hello", contents=json.loads(bubble_string)) line_bot_api.reply_message(event.reply_token, message) elif text == 'quick_reply': line_bot_api.reply_message( event.reply_token, TextSendMessage( text='Quick reply', quick_reply=QuickReply(items=[ QuickReplyButton( action=PostbackAction(label="label1", data="data1")), QuickReplyButton( action=MessageAction(label="label2", text="text2")), QuickReplyButton(action=DatetimePickerAction( label="label3", data="data3", mode="date")), QuickReplyButton(action=CameraAction(label="label4")), QuickReplyButton(action=CameraRollAction(label="label5")), QuickReplyButton(action=LocationAction(label="label6")), ]))) elif text == 'link_token' and isinstance(event.source, SourceUser): link_token_response = line_bot_api.issue_link_token( event.source.user_id) line_bot_api.reply_message(event.reply_token, [ TextSendMessage(text='link_token: ' + link_token_response.link_token) ]) elif text == 'insight_message_delivery': today = datetime.date.today().strftime("%Y%m%d") response = line_bot_api.get_insight_message_delivery(today) if response.status == 'ready': messages = [ TextSendMessage(text='broadcast: ' + str(response.broadcast)), TextSendMessage(text='targeting: ' + str(response.targeting)), ] else: messages = [TextSendMessage(text='status: ' + response.status)] line_bot_api.reply_message(event.reply_token, messages) elif text == 'insight_followers': today = datetime.date.today().strftime("%Y%m%d") response = line_bot_api.get_insight_followers(today) if response.status == 'ready': messages = [ TextSendMessage(text='followers: ' + str(response.followers)), TextSendMessage(text='targetedReaches: ' + str(response.targeted_reaches)), TextSendMessage(text='blocks: ' + str(response.blocks)), ] else: messages = [TextSendMessage(text='status: ' + response.status)] line_bot_api.reply_message(event.reply_token, messages) elif text == 'insight_demographic': response = line_bot_api.get_insight_demographic() if response.available: messages = [ "{gender}: {percentage}".format(gender=it.gender, percentage=it.percentage) for it in response.genders ] else: messages = [TextSendMessage(text='available: false')] line_bot_api.reply_message(event.reply_token, messages) else: line_bot_api.reply_message(event.reply_token, TextSendMessage(text=event.message.text))
def handle_message(event): global website_name global question global registering_question global registered global during_survey global done global point global ans_count global tips if (event.message.text != 'ยัง'): if (registered == False): # table = get_table('users') print("Answer: " + event.message.text) if (len(registering_question) != 0): messages = [registering_question.pop(0)] # if (event.message.text == 'ช'): # table.update_item(Key={'user-id': get_current_user_id()}, AttributeUpdates={'gender': {'Value':'male','Action':'PUT'}}) # elif (event.message.text == '10/04/1992'): # table.update_item(Key={'user-id': get_current_user_id()}, AttributeUpdates={'dob': {'Value': event.message.text, 'Action': 'PUT'}, 'age':{'Value': 25, 'Action': 'PUT'}}) # elif (event.message.type == 'location'): # table.update_item(Key={'user-id': get_current_user_id()}, AttributeUpdates={'address': {'Value':event.message.address, 'Action':'PUT'}, 'latitude': {'Value':event.message.latitude, 'Action':'PUT'}, 'longitude': {'Value':event.message.longitude, 'Action':'PUT'}}) else: # if (event.message.text == '4'): # table.update_item(Key={'user-id': get_current_user_id()}, AttributeUpdates={'family-mem-no': {'Value':event.message.text, 'Action': 'PUT'}}) registered = True messages = [ 'ยินดีด้วย คุณได้กรอกประวัติเรียบร้อยแล้ว!', 'หากพร้อมแล้ว สามารถพิม "เริ่ม" ได้เลย' ] else: if (during_survey == True or event.message.text == 'เริ่ม'): # table = get_table('survey-answer') if not question and done is False: question = get_questionnaire(get_current_user_id()) if (len(question) != 0): during_survey = True messages = [question.pop(0)] if (len(question) == 0): done = True if (event.message.text != 'เริ่ม'): ans_count = ans_count + 1 print("Answer: " + event.message.text) # table.put_item(Item={'survey-id':'s001', 'answer-id': ans_count, 'user-id': 1, 'ans': event.message.text}) else: ans_count = ans_count + 1 print("Answer: " + event.message.text) # table.put_item(Item={'survey-id':'s001', 'answer-id': ans_count, 'user-id': 1, 'ans': event.message.text}) done = False during_survey = False point = point + 10 messages = [ 'Done!', 'ยินดีด้วย คุณได้ {} points!'.format(point), 'สามารถเช็คคะแนนล่าสุดของตัวเองได้โดยพิมว่า "คะแนน"' ] elif (event.message.text == 'คะแนน'): messages = [ 'ตอนนี้คุณมีคะแนนอยู่ทั้งหมด {} คะแนน'.format(point), 'หากต้องการแลกรางวัล สามารถพิม "{} ได้ทันที"'.format( 'แลกรางวัล') ] elif (event.message.text == 'แลกรางวัล'): messages = ['แลกได้ที่ www.{}.com/redeem'.format(website_name)] elif (event.message.text == 'tips'): messages = [random.choice(tips)['text']] else: messages = [ 'พิม "เริ่ม" ได้เสมอ เมื่อต้องการเริ่มเก็บคะแนนจากการทำแบบสอบถาม' ] else: messages = ['หากพร้อมแล้ว สามารถพิมคำว่า "สมัคร" ได้ตลอดเวลา'] if (messages[0] != 'do you love energy'): line_bot_api.reply_message( event.reply_token, [TextSendMessage(text=msg) for msg in messages]) else: line_bot_api.reply_message( event.reply_token, TemplateSendMessage(alt_text='Buttons template', template=ButtonsTemplate( title=messages[0], text='Please select', actions=[ MessageTemplateAction(label='A lot', text='3'), MessageTemplateAction(label='so so', text='2'), MessageTemplateAction(label='nah', text='1') ])))
def handle_text_message(event): text = event.message.text # 送られてきた言葉が植物の名前だった場合は、それをキャッシュし「なに?」と返す if user_data.plant_exists(text): current_plant = text line_bot_api.reply_message(event.reply_token, TextSendMessage(text='なに?')) if text == 'profile': if isinstance(event.source, SourceUser): profile = line_bot_api.get_profile(event.source.user_id) line_bot_api.reply_message(event.reply_token, [ TextSendMessage(text='なまえ: ' + profile.display_name), TextSendMessage(text='一言: ' + profile.status_message) ]) else: line_bot_api.reply_message( event.reply_token, TextSendMessage(text="「ユーザIDがないとこのコマンドは使えません」")) elif text == 'bye': if isinstance(event.source, SourceGroup): line_bot_api.reply_message(event.reply_token, TextSendMessage(text='またね、今までありがとう')) line_bot_api.leave_group(event.source.group_id) elif isinstance(event.source, SourceRoom): line_bot_api.reply_message(event.reply_token, TextSendMessage(text='またね、今までありがとう')) line_bot_api.leave_room(event.source.room_id) else: line_bot_api.reply_message(event.reply_token, TextSendMessage(text="ぼくはここから動けないよ...")) elif text == 'confirm': confirm_template = ConfirmTemplate(text='これでいい?', actions=[ MessageAction(label='Yes', text='はい!'), MessageAction(label='No', text='いいえ'), ]) template_message = TemplateSendMessage(alt_text='Confirm alt text', template=confirm_template) line_bot_api.reply_message(event.reply_token, template_message) elif text == 'buttons': buttons_template = ButtonsTemplate( title='My buttons sample', text='Hello, my buttons', actions=[ URIAction(label='Go to line.me', uri='https://line.me'), PostbackAction(label='ping', data='ping'), PostbackAction(label='ping with text', data='ping', text='ping'), MessageAction(label='Translate Rice', text='米') ]) template_message = TemplateSendMessage(alt_text='Buttons alt text', template=buttons_template) line_bot_api.reply_message(event.reply_token, template_message) elif text == 'carousel': carousel_template = CarouselTemplate(columns=[ CarouselColumn(text='hoge1', title='fuga1', actions=[ URIAction(label='Go to line.me', uri='https://line.me'), PostbackAction(label='ping', data='ping') ]), CarouselColumn(text='hoge2', title='fuga2', actions=[ PostbackAction(label='ping with text', data='ping', text='ping'), MessageAction(label='Translate Rice', text='米') ]), ]) template_message = TemplateSendMessage(alt_text='Carousel alt text', template=carousel_template) line_bot_api.reply_message(event.reply_token, template_message) elif text == 'image_carousel': image_carousel_template = ImageCarouselTemplate(columns=[ ImageCarouselColumn( image_url='https://via.placeholder.com/1024x1024', action=DatetimePickerAction(label='datetime', data='datetime_postback', mode='datetime')), ImageCarouselColumn( image_url='https://via.placeholder.com/1024x1024', action=DatetimePickerAction( label='date', data='date_postback', mode='date')) ]) template_message = TemplateSendMessage( alt_text='ImageCarousel alt text', template=image_carousel_template) line_bot_api.reply_message(event.reply_token, template_message) elif text == 'imagemap': pass elif text == 'flex': bubble = BubbleContainer( direction='ltr', hero=ImageComponent(url='https://example.com/cafe.jpg', size='full', aspect_ratio='20:13', aspect_mode='cover', action=URIAction(uri='http://example.com', label='label')), body=BoxComponent( layout='vertical', contents=[ # title TextComponent(text='Brown Cafe', 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='Shinjuku, Tokyo', 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=[ # callAction, separator, websiteAction SpacerComponent(size='sm'), # callAction ButtonComponent( style='link', height='sm', action=URIAction(label='CALL', uri='tel:000000'), ), # separator SeparatorComponent(), # websiteAction ButtonComponent(style='link', height='sm', action=URIAction( label='WEBSITE', uri="https://example.com")) ]), ) message = FlexSendMessage(alt_text="hello", contents=bubble) line_bot_api.reply_message(event.reply_token, message) elif text == 'quick_reply': line_bot_api.reply_message( event.reply_token, TextSendMessage( text='Quick reply', quick_reply=QuickReply(items=[ QuickReplyButton( action=PostbackAction(label="label1", data="data1")), QuickReplyButton( action=MessageAction(label="label2", text="text2")), QuickReplyButton(action=DatetimePickerAction( label="label3", data="data3", mode="date")), QuickReplyButton(action=CameraAction(label="label4")), QuickReplyButton(action=CameraRollAction(label="label5")), QuickReplyButton(action=LocationAction(label="label6")), ]))) # ユーザからビーコンの設定を行う elif text == 'beacon': BeaconWhisperEvent(event.reply_token, line_bot_api, user_data).configBeaconMsg() # 植物を削除するときの命令 elif text == 'remove' or text == 'delete': if current_plant is not None: confirm_template = ConfirmTemplate( text=current_plant + "の情報を削除します\n本当によろしいですか?\n", actions=[ PostbackAction(label='Yes', data='delete_plant ' + current_plant, displayText='はい'), PostbackAction(label='No', data='delete_plant_cancel ' + current_plant, displayText='いいえ'), ]) else: line_bot_api.reply_message(event.reply_token, TextSendMessage(text='植物が選択されていません')) elif text == 'disconnect' and current_plant is not None: plant_animator.disconnect() line_bot_api.reply_message(event.reply_token, TextMessage(text=current_plant + ":またね")) # 植物情報(plant)のアプデをかける elif text == 'update': plant_animator.update() if current_plant is None: line_bot_api.reply_message(event.reply_token, TextSendMessage(text='どの植物に呼びかけますか?')) # text.split()[0] in (create, register) elif text.split()[0] in ('create', 'register'): plant_animator.register_plant(text.split[1]) line_bot_api.reply_message(event.reply_token, TextSendMessage(text='植物の名前を決めてあげてください!')) # この処理は工事中↑ # 方針としては一番最後にelse: で入れて、textを"create hoge"みたいに入れてもらってsplitして入れればい何とかなる(きもいけど) else: line_bot_api.reply_message(event.reply_token, TextSendMessage(text=event.message.text))
def get_template(input_text): endDate = datetime.today().strftime('%Y-%m-%d') startDate = (datetime.today() - timedelta(days=30)).strftime('%Y-%m-%d') if input_text == "[reset]": return TextSendMessage( text='你可以輸入任何人名,例如:蔡英文,我就會統計出他/她最近最常發生的事件種類, 並提供進一步查詢。', quick_reply=QuickReply( items=[ QuickReplyButton( action=MessageAction(label="蔡英文", text="蔡英文") ), QuickReplyButton( action=MessageAction(label="韓國瑜", text="韓國瑜") ), QuickReplyButton( action=MessageAction(label="郭台銘", text="郭台銘") )] )) elif ":" not in input_text: events = get_events(input_text, startDate, endDate) if len(events) == 0: return TextSendMessage( text='沒有這個人,或他/她的新聞數太少QAQ') elif len(events) <= 9: all_columns = [] all_actions = [] for i in range(len(events)): all_actions.append(MessageTemplateAction( label="...".join(events[i]['term'].split()) + " (" + str(events[i]["freq"]) + ")", text=input_text + ":" + events[i]['term'] )) if (i + 1) % 3 == 0: all_columns.append(CarouselColumn( title='{}相關新聞事件'.format(input_text), text='點選可獲得相關新聞', actions=all_actions )) all_actions = [] else: events = events[:8] all_columns = [] all_actions = [] for i in range(9): if i == 8: all_actions.append(MessageTemplateAction( label="more", text="更多事件" + ":" + str(8) + ":" + input_text )) else: all_actions.append(MessageTemplateAction( label="...".join(events[i]['term'].split()) + " (" + str(events[i]["freq"]) + ")", text=input_text + ":" + events[i]['term'] )) if (i + 1) % 3 == 0: all_columns.append(CarouselColumn( title='{}相關新聞事件'.format(input_text), text='點選可獲得相關新聞', actions=all_actions )) all_actions = [] buttons_template = TemplateSendMessage( alt_text='Carousel template', template=CarouselTemplate( columns=all_columns ) ) return buttons_template elif "更多事件" in input_text: _, id_event, input_text = input_text.split(":") id_event = int(id_event) events = get_events(input_text, startDate, endDate) action_lst = [] for i in range(3): action_lst.append(MessageTemplateAction( label="...".join(events[id_event + i]['term'].split()) + " (" + str(events[id_event]["freq"]) + ")", text=input_text + ":" + events[id_event + i]['term'] )) if len(events[id_event + 3:]) > 3: action_lst.append(MessageTemplateAction( label="more", text="更多事件" + ":" + str(id_event + 3) + ":" + input_text )) buttons_template = TemplateSendMessage( alt_text='Buttons Template', template=ButtonsTemplate( title='{}相關新聞事件'.format(input_text), text='點選可獲得相關新聞', actions=action_lst ) ) return buttons_template elif "more" in input_text: _, id, key, events = input_text.split(":") id = int(id) news = get_news(key, events, startDate, endDate) news_lst = news["data"][id:id + 3] id = id + 3 isMore = len(news["data"][id:]) != 0 flex_template = news_template_flex(news_lst, events, key, id, isMore) return flex_template else: key, events = input_text.split(":") news = get_news(key, events, startDate, endDate) news_lst = news["data"][:3] id = 3 isMore = len(news["data"]) > 3 flex_template = news_template_flex(news_lst, events, key, id, isMore) return flex_template
def handle_text_message(event): text = event.message.text if text == 'profile': if isinstance(event.source, SourceUser): profile = line_bot_api.get_profile(event.source.user_id) line_bot_api.reply_message(event.reply_token, [ TextSendMessage(text='Display name: ' + profile.display_name), TextSendMessage(text='Status message: ' + profile.status_message) ]) else: line_bot_api.reply_message( event.reply_token, TextMessage(text="Bot can't use profile API without user ID")) elif text == 'bye': if isinstance(event.source, SourceGroup): line_bot_api.reply_message(event.reply_token, TextMessage(text='Leaving group')) line_bot_api.leave_group(event.source.group_id) elif isinstance(event.source, SourceRoom): line_bot_api.reply_message(event.reply_token, TextMessage(text='Leaving group')) line_bot_api.leave_room(event.source.room_id) else: line_bot_api.reply_message( event.reply_token, TextMessage(text="Bot can't leave from 1:1 chat")) elif text == 'confirm': confirm_template = ConfirmTemplate( text='Do it?', actions=[ MessageTemplateAction(label='Yes', text='Yes!'), MessageTemplateAction(label='No', text='No!'), ]) template_message = TemplateSendMessage(alt_text='Confirm alt text', template=confirm_template) line_bot_api.reply_message(event.reply_token, template_message) elif text == 'buttons': buttons_template = ButtonsTemplate( title='My buttons sample', text='Hello, my buttons', actions=[ URITemplateAction(label='Go to line.me', uri='https://line.me'), PostbackTemplateAction(label='ping', data='ping'), PostbackTemplateAction(label='ping with text', data='ping', text='ping'), MessageTemplateAction(label='Translate Rice', text='米') ]) template_message = TemplateSendMessage(alt_text='Buttons alt text', template=buttons_template) line_bot_api.reply_message(event.reply_token, template_message) elif text == 'carousel': carousel_template = CarouselTemplate(columns=[ CarouselColumn(text='hoge1', title='fuga1', actions=[ URITemplateAction(label='Go to line.me', uri='https://line.me'), PostbackTemplateAction(label='ping', data='ping') ]), CarouselColumn( text='hoge2', title='fuga2', actions=[ PostbackTemplateAction( label='ping with text', data='ping', text='ping'), MessageTemplateAction(label='Translate Rice', text='米') ]), ]) template_message = TemplateSendMessage(alt_text='Buttons alt text', template=carousel_template) line_bot_api.reply_message(event.reply_token, template_message) elif text == 'imagemap': pass else: line_bot_api.reply_message(event.reply_token, TextSendMessage(text=event.message.text))
def callback(request): sent_json = json.loads(request.body) sent_message = sent_json['events'][0]['message']['text'] reply_token = sent_json['events'][0]['replyToken'] user_id = sent_json['events'][0]['source']['userId'] headers = {'Authorization': f'Bearer {ACCESS_TOKEN}'} result = requests.get(f'https://api.line.me/v2/bot/profile/{user_id}', headers=headers) user_name = json.loads(result.text)['displayName'] try: if sent_message == 'メニュー': categories = Category.objects.all() columns = [] for category in categories: actions = [] for dish in category.dish_set.all(): ma = MessageAction(label=dish.name, text=dish.name) actions.append(ma) cm = CarouselColumn( thumbnail_image_url= 'https://1.bp.blogspot.com/-D2I7Z7-HLGU/Xlyf7OYUi8I/AAAAAAABXq4/jZ0035aDGiE5dP3WiYhlSqhhMgGy8p7zACNcBGAsYHQ/s1600/no_image_square.jpg', title=category.name, text='description1', actions=actions) columns.append(cm) message = TemplateSendMessage( alt_text='Carousel template', template=CarouselTemplate(columns=columns)) # オーダー受付中のときのみ注文を受け付ける elif Dish.objects.filter(name=sent_message).first(): dish = Dish.objects.filter(name=sent_message).first() order = Order.objects.filter(customer=user_id, status=0).first() if not order: order = Order(customer=user_id) order.save() order_detail = OrderDetail.objects.filter( order=order, dish__name=sent_message).first() if order_detail: order_detail.amount = order_detail.amount + 1 else: order_detail = OrderDetail(order=order, dish=dish, amount=1) order_detail.save() message = TextSendMessage(text='他にご注文はありますか?') elif Order.objects.filter(customer=user_id, status=0).first()\ and sent_message == '完了': order = Order.objects.filter(customer=user_id, status=0).first() if not order: # 新しいオーダーを作る order = Order(customer=user_id) order.save() order_details = order.orderdetail_set.all() message = TextSendMessage( text= f'{order.ordered_at:%Y年%m月%d日 %H時%M分}に注文を受け付けました。\n{output_order_details(order_details)}' ) # 注文完了 order.status = 1 order.save() else: message = TextSendMessage( text=f'{user_name}さん いらっしゃいませ。\n「メニュー」と送信すると、注文を開始できます。') except Exception: message = TextSendMessage( text=f'{user_name}さん いらっしゃいませ。\n「メニュー」と送信すると、注文を開始できます。') traceback.print_exc() line_bot_api.reply_message(reply_token, message)
def on_postback(event): user_id = event.source.user_id reply_token = event.reply_token post_data = event.postback.data if post_data == "工学部": line_bot_api.reply_message(event.reply_token, [ TextSendMessage( text="下のボタンから学科を選択してください。", quick_reply=QuickReply(items=[ QuickReplyButton( action=PostbackAction(label=major, data=major)) for major in major_list["工学部"] ])) ]) elif post_data == "ヘルプ": line_bot_api.reply_message(event.reply_token, [ TextSendMessage(text="""再登録をしたいとき・・・ 下の「学部再登録」のボタンを押してください。もう一度下にボタンが出現します。\n ご感想、エラー報告・・・ 「送信フォーム」のボタンを押してください。Googleフォームが現れ、匿名で送信できます。\n 鬼仏情報の投稿・・・ 「トンペー鬼仏表」のボタンを押してください。サイトに移動します。\n 経済学部の方・・・ 「ゼミ協」とテキストを送信してください。ゼミ協(東北大学経済学部)が運営するLINEbotの紹介リンクを送信します。"""), TemplateSendMessage( alt_text="選択ボタン", template=ButtonsTemplate( text="以下から選択してください", image_size="cover", actions=[ MessageAction(text="学部再登録", label="学部再登録"), URIAction(uri="https://forms.gle/XmjrKMPacj9H7nDH9", label="送信フォーム"), URIAction(uri="https://www.tonpe.site/toppages/index", label="トンペー鬼仏表") ])) ]) # 絞り込み検索 elif post_data[-1] == "論" or post_data[-1] == "学" or post_data[-1] == "語": lecture_group = post_data user_major = get_usermajor(user_id) if user_major: lecture_info = syllabus_db.search_lecture_info( lecture_group, user_major) # 講義情報の辞書のリストが返ってくる if (user_major == "機知" or user_major == "情物" or user_major == "化バイ" or user_major == "材料" or user_major == "建築" or user_major == "理") and post_data == "自然科学": line_bot_api.reply_message( event.reply_token, TextSendMessage(text="工,理は件数が多いため表示できません")) if len(lecture_info) < 10: line_bot_api.reply_message(event.reply_token, [ FlexSendMessage(alt_text='シラバス情報', contents=CarouselContainer([ gen_card_syllabus(dic, post_data) for dic in lecture_info[:10] ])), TextSendMessage(text=f"上記{len(lecture_info)}件の講義が見つかりました") ]) elif 10 < len(lecture_info) and len(lecture_info) <= 20: line_bot_api.reply_message(event.reply_token, [ FlexSendMessage(alt_text='シラバス情報', contents=CarouselContainer([ gen_card_syllabus(dic, post_data) for dic in lecture_info[:10] ])), FlexSendMessage(alt_text='シラバス情報', contents=CarouselContainer([ gen_card_syllabus(dic, post_data) for dic in lecture_info[10:20] ])), TextSendMessage(text=f"上記{len(lecture_info)}件の講義が見つかりました") ]) elif 20 < len(lecture_info) and len(lecture_info) <= 30: line_bot_api.reply_message(event.reply_token, [ FlexSendMessage(alt_text='シラバス情報', contents=CarouselContainer([ gen_card_syllabus(dic, post_data) for dic in lecture_info[:10] ])), FlexSendMessage(alt_text='シラバス情報', contents=CarouselContainer([ gen_card_syllabus(dic, post_data) for dic in lecture_info[10:20] ])), FlexSendMessage(alt_text='シラバス情報', contents=CarouselContainer([ gen_card_syllabus(dic, post_data) for dic in lecture_info[20:30] ])), TextSendMessage(text=f"上記{len(lecture_info)}件の講義が見つかりました") ]) # 所属登録が済んでいない場合 else: line_bot_api.reply_message(event.reply_token, TextSendMessage(text="所属を登録してください")) else: # ユーザ情報をDBに格納 if post_data[-1] == "部": user_major = post_data[0] else: user_major = post_data user_db.add_userinfo(user_major, user_id) line_bot_api.reply_message( event.reply_token, TextSendMessage(text=post_data + "で登録しました!"))
def handle_postback_event(event): postback_data = event.postback.data print('postback_data: {}'.format(postback_data)) if postback_data == 'mode=run_test': job_template = run_test.display_test_job_menu(data='start_test={}', image_url='run.jpg') line_bot_api.reply_message(event.reply_token, messages=TemplateSendMessage( alt_text='Job List', template=job_template)) if postback_data == 'mode=rerun_test': failed_job_template = run_test.display_failed_test_menu() line_bot_api.reply_message(event.reply_token, messages=TemplateSendMessage( alt_text='Failed Job List', template=failed_job_template)) if postback_data == 'mode=latest_result': job_template = run_test.display_test_job_menu( data='latest_result={}', image_url='latest_result.png') line_bot_api.reply_message(event.reply_token, messages=TemplateSendMessage( alt_text='Job List', template=job_template)) if postback_data == 'mode=test_stat': job_template = run_test.display_test_job_menu(data='test_stat={}', image_url='stat.jpg') line_bot_api.reply_message(event.reply_token, messages=TemplateSendMessage( alt_text='Job List', template=job_template)) if 'start_test=' in postback_data or 'rerun_test=' in postback_data: job_name = postback_data.split('=')[1] build_result = jenkins.build_job(job_name) if build_result: line_bot_api.reply_message( event.reply_token, messages=TextSendMessage( text='Trigger Job:{0} Please Wait...'.format(job_name))) else: line_bot_api.reply_message( event.reply_token, messages=TextSendMessage( text='Trigger Job: {0} Failed!'.format(job_name))) if 'test_stat=' in postback_data: job_name = postback_data.split('=')[1] job_url = os.getenv('JENKINS_URL') + '/job/' + job_name + '/' data = jenkins.get_test_result_history(job_url) bubble_container = statistic.generate_test_stat_message(data) line_bot_api.reply_message(event.reply_token, messages=FlexSendMessage( 'Test Result', contents=bubble_container)) if 'latest_result=' in postback_data: job_name = postback_data.split('=')[1] job_url = os.getenv('JENKINS_URL') + '/job/' + job_name + '/' latest_result_data = jenkins.get_test_latest_result(job_url) carousel_container = test_result.generate_latest_result( latest_result_data) line_bot_api.reply_message(event.reply_token, messages=FlexSendMessage( alt_text='Latest Result', contents=carousel_container)) if 'detail_job=' in postback_data: job_name = postback_data.split('&')[0].split('=')[1] build_no = postback_data.split('&')[1].split('=')[1] test_name = postback_data.split('&')[2].split('=')[1] job_url = os.getenv('JENKINS_URL') + '/job/' + job_name + '/' test_result_data = jenkins.get_test_detail_by_name( job_url, build_no, test_name) messages = [] video_link = video_url.format(job_name, build_no, test_name) messages.append( VideoSendMessage(original_content_url=video_link, preview_image_url=video_link)) if test_result_data['errorDetails'] is not None: messages.append( TextSendMessage(text='{0}: FAILED!\nErrorMessage:{1}'.format( test_name, test_result_data['errorDetails']))) else: messages.append( TextSendMessage(text='{}: PASSED!'.format(test_name))) line_bot_api.reply_message(event.reply_token, messages=messages)
def handle_message(event): global countt Listentext = event.message.text Listentext = Listentext.lower() helptable="請輸入關鍵字來獲得更多訊息:\n-> 觀看自介影片:video\n-> 查看我的個人網頁:myweb\n-> 查看我的Github:github\n\n更詳盡的自我介紹請輸入:aboutme" if countt == 0: message = TextSendMessage(text=("Hello, 大家好~~\n我是廖莉祺(Claire Liao)\n"+helptable)) line_bot_api.reply_message(event.reply_token, message) countt = 1 elif countt==1: if Listentext=="video": message = VideoSendMessage( type="video", original_content_url='https://www.csie.ntu.edu.tw/~b04902046/profile_web_1.mp4', preview_image_url='https://www.csie.ntu.edu.tw/~b04902046/cx617.jpg' ) line_bot_api.reply_message(event.reply_token, message) elif "myweb" == Listentext: message = TemplateSendMessage( alt_text='Buttons template', template=ButtonsTemplate( thumbnail_image_url='https://xiao617.github.io/csx_linker/cx617.jpg', title='Myweb', text='View my web!', actions=[ URITemplateAction( label='view my web', uri='https://www.csie.ntu.edu.tw/~b04902046/' ) ] ) ) line_bot_api.reply_message(event.reply_token, message) elif "github" == Listentext: message = TemplateSendMessage( alt_text='Buttons template', template=ButtonsTemplate( thumbnail_image_url='https://avatars0.githubusercontent.com/u/9919?s=280&v=4', title='My Github', text='All my work is on github!', actions=[ URITemplateAction( label='view my github', uri='https://github.com/xiao617' ) ] ) ) line_bot_api.reply_message(event.reply_token, message) elif "aboutme" == Listentext: message = TextSendMessage(text="hello,我是廖莉祺\n目前就讀台大資工\n(你可以問我研究相關的問題\n或是輸入:返回)") line_bot_api.reply_message(event.reply_token, message) countt = 2 elif "123" == Listentext: hint = "我會唸詩還會說笑話啊" message = TextSendMessage(text=hint) stickerr = StickerSendMessage( package_id='1', sticker_id='2' ) line_bot_api.reply_message(event.reply_token, (message,stickerr)) countt = 3 else: message = TextSendMessage(text=helptable) line_bot_api.reply_message(event.reply_token, message) elif countt==2: if "返回" in Listentext: message = TextSendMessage(text=helptable) line_bot_api.reply_message(event.reply_token, message) countt = 1 elif "研究細節" in Listentext: myresearch = "computer vision:\n我主要是做Motion recognition\n以及360 image detection\nrobotics:\n是做機器人的控制\n特別是使用pepper\n\n如果你想知道我的研究經歷\n歡迎跟我聊,\n或是輸入:返回" message = TextSendMessage(text=myresearch) line_bot_api.reply_message(event.reply_token, message) elif "研究經歷" in Listentext: myresearch = "我目前是在台大傅立成教授的智慧機器人實驗室以及中研院劉庭祿教授的電腦視覺實驗室\n\n2017/2~now:智慧機器人實驗室\n2018/1~now:電腦視覺實驗室\n\n輸入:返回\n或是使用help" message = TextSendMessage(text=myresearch) line_bot_api.reply_message(event.reply_token, message) elif ("research" in Listentext) or ("Research" in Listentext) or ("研究" in Listentext) or ("專題" in Listentext): myresearch = "我的專題領域是:\n-> computer vision &\n-> robotics\n如果你想進一步了解\n可以跟我聊聊研究細節\n(如果你不知道該說什麼\n也可以使用help)" message = TextSendMessage(text=myresearch) line_bot_api.reply_message(event.reply_token, message) else: researchtable = "這部分你可以跟我聊聊:\n\t1.研究\n\t2.研究細節\n\t3.研究經歷\n\n或是輸入:返回" message = TextSendMessage(text=researchtable) line_bot_api.reply_message(event.reply_token, message)
def on_messaging(event): text = event.message.text reply_token = event.reply_token user_id = event.source.user_id profiles = line_bot_api.get_profile(user_id=user_id) display_name = profiles.display_name if text == "吸いたい!": # DBへの保存 try: sql = "select * from " + REMOTE_DB_TB + " where user_id='" + str( user_id) + "';" c.execute(sql) ret = c.fetchall() if len(ret) == 0: status = 1 sql = "insert into " + REMOTE_DB_TB + " values ('" + str( user_id) + "','" + str( display_name) + "','none', 'none', 'none', 'none');" # メッセージの送信 buttons_template = ButtonsTemplate(title='初めまして!', \ text='あなたについて少し教えてくれますか?', \ actions=[PostbackAction(label='あなたについての質問に答える', data='answer'),PostbackAction(label='やっぱりやめておく', data='no')]) template_message = TemplateSendMessage( alt_text='welcome', template=buttons_template) line_bot_api.reply_message(event.reply_token, template_message) elif len(ret) == 1: sql_status = "select * from " + REMOTE_DB_TB3 + " where user_id='" + str( user_id) + "';" c.execute(sql_status) ret_status = c.fetchall() #status=str(int(ret_status[0][0])+1) dt_now = str(datetime.datetime.now())[0:10] ret_df = pd.DataFrame(ret_status) latest = str(max(ret_df[1]))[0:10] if dt_now == latest: status = len( [str(i) for i in ret_df[1] if latest in str(i)]) + 1 elif dt_now != latest: status = 1 #status = str(len(ret_status)+1) #sql="update "+REMOTE_DB_TB+ " set status = '"+str(status)+"' WHERE user_id = '"+str(user_id)+"';" # メッセージの送信 buttons_template = ButtonsTemplate(title='おかえりなさい!', \ text='今日は'+str(status)+"回ご利用しています", \ actions=[PostbackAction(label='喫煙タイプを選ぶ', data='chat'),PostbackAction(label='やっぱりやめておく', data='no')]) template_message = TemplateSendMessage( alt_text='welcomeback', template=buttons_template) line_bot_api.reply_message(event.reply_token, template_message) c.execute(sql) conn.commit() finally: pass # conn.close() # c.close() elif text == "やめておく": line_bot_api.reply_message(event.reply_token, TextSendMessage(text="我慢できたあなたはえらい!")) elif text == "データ": line_bot_api.reply_message( event.reply_token, ImageSendMessage( #original_content_url="https://1.bp.blogspot.com/-eaDZ7sDP9uY/Xhwqlve5SUI/AAAAAAABXBo/EcI2C2vim7w2WV6EYy3ap0QLirX7RPohgCNcBGAsYHQ/s400/pose_syanikamaeru_man.png", #preview_image_url="https://1.bp.blogspot.com/-eaDZ7sDP9uY/Xhwqlve5SUI/AAAAAAABXBo/EcI2C2vim7w2WV6EYy3ap0QLirX7RPohgCNcBGAsYHQ/s400/pose_syanikamaeru_man.png")) original_content_url= "https://uploda1.ysklog.net/uploda/7dc2bc1fbd.png", preview_image_url= "https://uploda1.ysklog.net/uploda/7dc2bc1fbd.png"))