def message(line_event): text = "画像を送信してください" line_bot_api.reply_message(line_event.reply_token, TextSendMessage(text=text))
def handle_message(event): if event.message.type is not 'audio': # 入ってきたものがaudio以外だったら、デフォルトメッセージを返す start_youtube_time = time.time() for i in range(1, MAX_RETRY): try: line_bot_api.reply_message( event.reply_token, # トークンとテキストで紐づけてる TextSendMessage(text='あなたと一緒にコード解析するよー!\n' 'LINEで録音して送ってみてね。\n' '容量の小さいmp3ファイルも解析できるよ')) upload_s3.sign_s3('/tmp/analize_log//{}'.format(logging_file), 'mico/log/{}'.format(logging_file)) break except LineBotApiError as e: logger.error('LineBotApiError: {}'.format(e)) logger.error('retry: {0}/{1}'.format(i, MAX_RETRY)) line_bot_api.reply_message( event.reply_token, # トークンとテキストで紐づけてる TextSendMessage(text='あなたと一緒にコード解析するよー!\n' 'LINEで録音して送ってみてね\n' '容量の小さいmp3ファイルも解析できるよ\n')) upload_s3.sign_s3('/tmp/analize_log//{}'.format(logging_file), 'mico/log/{}'.format(logging_file)) return 'ok' # logger.info('Message ID: {}'.format(str(event.message.id))) # # return 'ok' logger.info('Message ID: {}'.format(str(event.message.id))) upload_s3.sign_s3('/tmp/analize_log//{}'.format(logging_file), 'mico/log/{}'.format(logging_file)) # オーディオデータ(バイナリ形式。'audio/x-m4a')を取得する message_content = line_bot_api.get_message_content(event.message.id) # tmpディレクトリに保存 input_file_path = '/tmp/{}.m4a'.format(event.message.id) logger.info('Receive m4a file name: {}'.format(str(input_file_path))) upload_s3.sign_s3('/tmp/analize_log//{}'.format(logging_file), 'mico/log/{}'.format(logging_file)) if os.path.exists('/tmp/') is not True: logger.info('make temporary directory') os.mkdir('/tmp/') line_bot_api.push_message( event.source.user_id, # トークンとテキストで紐づけてる TextSendMessage(text='解析してみるよー!\n' '終わったら話しかけるねー。\n' '1分経ってもお返事が来なかったら、もう少し短いファイルを送ってみてくれるかな?')) start_chunk = time.time() with open(input_file_path, 'wb') as fd: for i in range(MAX_RETRY): # m4aバイナリの書き込みに失敗したら、5回までリトライ処理入れる try: for chunk in message_content.iter_content(): fd.write(chunk) break except: logger.error('LineBotApiError: {}'.format( traceback.format_exc())) logger.error('retry: {0}/{1}'.format(i, MAX_RETRY)) sleep(i * 5) end_chunk = time.time() - start_chunk logger.info('chunk time: {}'.format(end_chunk)) start_conv_mp3 = time.time() # S3にアップロード upload_s3.sign_s3(input_file_path, 'mico/m4a/{}.m4a'.format(event.message.id)) # m4aバイナリファイルをローカルに保存し、mp3バイナリファイルに変換する chunk_mp3 = song_upload.m4a_to_mp3(input_file_path) end_conv_mp3 = time.time() - start_conv_mp3 logger.info('converted time: {} [sec]'.format(end_conv_mp3)) start_analize = time.time() chord_analize_response = mp3_to_response(chunk_mp3) end_analize = time.time() - start_analize logger.info('Analize time: {} [sec]'.format(end_analize)) # push API使えないバージョン # line_bot_api.reply_message( # event.reply_token, # トークンとテキストで紐づけてる # TextSendMessage( # text= # str(chord_analize_response) # ) # ) line_bot_api.push_message( event.source.user_id, # トークンとテキストで紐づけてる TextSendMessage(text=str(chord_analize_response))) logger.info( 'Success! Sent response for user: {}'.format(chord_analize_response)) # S3にアップロード upload_s3.sign_s3('/tmp/analize_log//{}'.format(logging_file), 'mico/log/{}'.format(logging_file)) return 'ok'
def pushTextMessage(line_id, message): line_bot_api.push_message(line_id, TextSendMessage(text=message))
def send_text_message(reply_token, text): line_bot_api = LineBotApi(channel_access_token) line_bot_api.reply_message(reply_token, TextSendMessage(text=text)) return "OK"
profile = line_bot_api.get_profile(event.source.sender_id) line_bot_api.reply_message( event.reply_token, [ TextSendMessage(text="Nama: " + profile.display_name), TextSendMessage(text="Status bio: " + profile.status_message) ] ) else: line_bot_api.reply_message( event.reply_token, TextSendMessage(text="Bot can"t use profile in group chat")) if text == "!coss-bye": if isinstance(event.source, SourceGroup): line_bot_api.reply_message( event.reply_token, TextSendMessage(text="Bye semuanya :D")) line_bot_api.leave_group(event.source.group_id) elif isinstance(event.source, SourceRoom): line_bot_api.reply_message( event.reply_token, TextSendMessage(text="Bye semuanya :D")) line_bot_api.leave_room(event.source.room_id) else: line_bot_api.reply_message( event.reply_token, TextSendMessage(text="Command ini tidak bisa dipakai dalam private chat :(")) #=====[ SEARCH ID LINE ]============= elif "!idline: " in event.message.text: skss = event.message.text.replace("/idline: ", "") sasa = "http://line.me/R/ti/p/~" + skss text_message = TextSendMessage(text=sasa) line_bot_api.reply_message(event.reply_token, text_message)
def handle_join(event): line_bot_api.reply_message( event.reply_token, TextSendMessage(text='Joined this ' + event.source.type))
def handle_beacon(event): line_bot_api.reply_message( event.reply_token, TextSendMessage(text='Got beacon event. hwid=' + event.beacon.hwid))
def handle_message(event): text = event.message.text #simplify for receove message sender = event.source.user_id #get user_id gid = event.source.sender_id #get group_id #=====[ LEAVE GROUP OR ROOM ]==========[ ARSYBAI ]====================== if "/yt" in text: separate = text.split(" ") search = text.replace(separate[0] + " ", "") url = requests.get( "http://api.w3hills.com/youtube/search?keyword={}&api_key=86A7FCF3-6CAF-DEB9-E214-B74BDB835B5B" .format(search)) data = url.json() no = 0 result = "Search" for anu in data["videos"]: no += 1 result += "\n{}. {}\n{}".format(str(no), str(anu["title"]), str(anu["webpage"])) result += "\nall{}".format(str(len(data["videos"]))) line_bot_api.reply_message(event.reply_token, TextSendMessage(text=result)) if "/news" in text: try: separate = text.split(" ") country = text.replace(separate[0] + " ", "") if (separate == None): country == "th" user_agent = {'User-agent': 'Mozilla/5.0'} url = requests.get( "https://newsapi.org/v2/top-headlines?country={}&apiKey=763b6fc67a594a4e9e0f9d29303f83dd" .format(country)) data = url.json() result = "New Releases" for anu in data["articles"]: if len(result) > 500: line_bot_api.reply_message(event.reply_token, TextSendMessage(text=result)) else: result += "\n" + anu["title"] + "\n" + anu["url"] + "\n" line_bot_api.reply_message(event.reply_token, TextSendMessage(text=result)) except Exception as Error: line_bot_api.reply_message(event.reply_token, TextSendMessage(text=Error)) if "/snews" in text: separate = text.split(" ") searchx = text.replace(separate[0] + " ", "") search = searchx gs = goslate.Goslate() search = gs.translate(searchx, 'en') r = requests.get("http://www.google.co.th/search?q=" + search + "&tbm=nws") content = r.text news_summaries = [] soup = BeautifulSoup(content, "html.parser") st_divs = soup.findAll("div", {"class": "st"}) g_divs = soup.findAll("div", {"class": "g"}) trs = "News about " + searchx news_d = [] for g_div in g_divs: news_d.append(g_div.text) for st_div in st_divs: news_summaries.append(st_div.text) for i in news_summaries: for x in news_d: try: if len(trs) > 600: line_bot_api.reply_message(event.reply_token, TextSendMessage(text=trs)) else: gs = goslate.Goslate() x = gs.translate(x, 'en') trs += "\n\n" + x + "\nRead more at" except Exception as error: line_bot_api.reply_message(event.reply_token, TextSendMessage(text=error)) line_bot_api.reply_message(event.reply_token, TextSendMessage(text=trs)) if text == "/bye": if (event.source.user_id == "U2c7d1341178eed8c93c23e914cbcb6a0"): confirm_template_message = TemplateSendMessage( alt_text='God message', template=ConfirmTemplate( text='Will remove the bot? Are you sure?', actions=[ PostbackAction(label='sure', text='goodbye', data='action=buy&itemid=1'), MessageAction(label='Not', text='...') ])) line_bot_api.reply_message(event.reply_token, confirm_template_message) else: line_bot_api.reply_message( event.reply_token, TextSendMessage(text="This user is not allowed.")) if "/ti/g/" in text: link_re = re.compile( '(?:line\:\/|line\.me\/R)\/ti\/g\/([a-zA-Z0-9_-]+)?') links = link_re.findall(text) n_links = [] for l in links: if l not in n_links: n_links.append(l) for ticket_id in n_links: group = line_bot_api.findGroupByTicket(ticket_id) line_bot_api.acceptGroupInvitationByTicket(group.id, ticket_id) if text == '/contact': buttons_template_message = TemplateSendMessage( alt_text='God message', template=ButtonsTemplate( thumbnail_image_url= 'https://gamingroom.co/wp-content/uploads/2017/11/CyCYOArUoAA2T6d.jpg', title='Contact', text='contact', actions=[ PostbackAction(label='Line', text='http://line.me/ti/p/~1535915621_', data='action=buy&itemid=1'), MessageAction(label="Facebook", text='https://www.facebook.com/DPunisher'), URIAction(label='Contact', uri='http://line.me/ti/p/~1535915621_') ])) line_bot_api.reply_message(event.reply_token, buttons_template_message) bubble = BubbleContainer( direction='ltr', hero=ImageComponent( url= 'http://images4.fanpop.com/image/photos/15800000/Animes-anime-cuties-15887436-1400-875.jpg', size='full', aspect_ratio='20:13', aspect_mode='cover', action=URIAction(uri='http://line.me/ti/p/~esci_', label='@')), body=BoxComponent( layout='vertical', contents=[ # title TextComponent(text='PASUNx', weight='bold', size='xl'), # review # 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='Bangkok, Thailand', 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="00:00 - 23:59", wrap=True, color='#666666', size='sm', flex=5, ), ], ), ], ) ], ), footer=BoxComponent( layout='vertical', spacing='sm', contents=[ # separator SeparatorComponent(), # websiteAction ButtonComponent(style='link', height='sm', action=URIAction( label='contact', uri="https://line.me/ti/p/~esci_")) ]), ) #message = FlexSendMessage(alt_text="God message", contents=bubble) #line_bot_api.reply_message( # event.reply_token, # buttons_template_message #) if '/wiki ' in text: try: wiki = text.replace("/wiki ", "") wikipedia.set_lang("en") pesan = "Wikipedia About" pesan += wikipedia.page(wiki).title pesan += "\n\n" pesan += wikipedia.summary(wiki, sentences=1) pesan += "\n\nRead more\n" pesan += wikipedia.page(wiki).url titlex = wikipedia.page(wiki).title textx = wikipedia.summary(wiki, sentences=1) urlx = wikipedia.page(wiki).url line_bot_api.reply_message(event.reply_token, TextSendMessage(text=pesan)) except: try: pesan = "Over limit message! Please click the link below to read more.\n" pesan += wikipedia.page(wiki).url line_bot_api.reply_message(event.reply_token, TextSendMessage(text=pesan)) except Exception as e: line_bot_api.reply_message(event.reply_token, TextSendMessage(text=str(e))) if text == "/kick": line_bot_api.kickoutFromGroup(0, event.source.group_id, "Udaa0a2f396dd41e4398b106d903d92fd") if text == "/2kick": line_bot_api.kickoutFromGroup(event.source.group_id, "u541bbaba15d68f3a652106a0de5a3e94") if text == "/3kick": line_bot_api.kickoutFromGroup(0, event.source.group_id, "u541bbaba15d68f3a652106a0de5a3e94") if text == "/4kick": line_bot_api.kickoutFromGroup(event.source.group_id, "Udaa0a2f396dd41e4398b106d903d92fd") if text == '/gid': profile = line_bot_api.get_profile(event.source.user_id) #line_bot_api.reply_message(event.reply_token,TextSendMessage(text=profile.display_name)) line_bot_api.reply_message(event.reply_token, TextSendMessage(text=event.source.group_id)) #line_bot_api.reply_message(event.reply_token,TextSendMessage(text=profile.picture_url)) #line_bot_api.reply_message(event.reply_token,TextSendMessage(text=profile.status_message)) if text == '/id': profile = line_bot_api.get_profile(event.source.user_id) #line_bot_api.reply_message(event.reply_token,TextSendMessage(text=profile.display_name)) line_bot_api.reply_message(event.reply_token, TextSendMessage(text=event.source.user_id)) #line_bot_api.reply_message(event.reply_token,TextSendMessage(text=profile.picture_url)) #line_bot_api.reply_message(event.reply_token,TextSendMessage(text=profile.status_message)) if text == '/bio': profile = line_bot_api.get_profile(event.source.user_id) #line_bot_api.reply_message(event.reply_token,TextSendMessage(text=profile.display_name)) #line_bot_api.reply_message(event.reply_token,TextSendMessage(text=event.source.user_id)) #line_bot_api.reply_message(event.reply_token,TextSendMessage(text=profile.picture_url)) line_bot_api.reply_message( event.reply_token, TextSendMessage(text=profile.status_message)) if text == '/pic': profile = line_bot_api.get_profile(event.source.user_id) #line_bot_api.reply_message(event.reply_token,TextSendMessage(text=profile.display_name)) #line_bot_api.reply_message(event.reply_token,TextSendMessage(text=event.source.user_id)) line_bot_api.reply_message(event.reply_token, TextSendMessage(text=profile.picture_url)) #line_bot_api.reply_message(event.reply_token,TextSendMessage(text=profile.status_message)) if text == '/name': profile = line_bot_api.get_profile(event.source.user_id) line_bot_api.reply_message(event.reply_token, TextSendMessage(text=profile.display_name)) #line_bot_api.reply_message(event.reply_token,TextSendMessage(text=event.source.user_id)) #line_bot_api.reply_message(event.reply_token,TextSendMessage(text=profile.picture_url)) #line_bot_api.reply_message(event.reply_token,TextSendMessage(text=profile.status_message)) if text == 'goodbye': if (event.source.user_id == "U2c7d1341178eed8c93c23e914cbcb6a0"): if isinstance(event.source, SourceGroup): line_bot_api.reply_message(event.reply_token, TextSendMessage(text='Outgoing...')) line_bot_api.leave_group(event.source.group_id) elif isinstance(event.source, SourceRoom): line_bot_api.reply_message(event.reply_token, TextSendMessage(text='Outgoing...')) line_bot_api.leave_room(event.source.room_id) else: line_bot_api.reply_message( event.reply_token, TextSendMessage( text="The bot can not leave chat. 1:1 have")) elif "/idline " in event.message.text: skss = event.message.text.replace('/idline ', '') sasa = "http://line.me/R/ti/p/~" + skss text_message = TextSendMessage(text=sasa) line_bot_api.reply_message(event.reply_token, text_message) elif '/check' in text: originURLx = text.split(" ") originURL = text.replace(originURLx[0] + " ", "") result = requests.get( "http://shorturlbyzefyrinusx.000webhostapp.com/api/check.php?id=" + originURL + "&type=api").text line_bot_api.reply_message(event.reply_token, TextSendMessage(text=result)) elif '/shorturl' in text: originURLx = text.split(" ") originURL = text.replace(originURLx[0] + " ", "") result = requests.get( "http://shorturlbyzefyrinusx.000webhostapp.com/api/urlshorten.php?url=" + originURL).text buttons_template_message = TemplateSendMessage( alt_text='God message', template=ButtonsTemplate( thumbnail_image_url= 'https://gamingroom.co/wp-content/uploads/2017/11/CyCYOArUoAA2T6d.jpg', title='RESULT', text=result, actions=[ PostbackAction(label='information URL', text='/check ' + result, data='action=buy&itemid=1'), MessageAction(label="URL", text=result), URIAction(label='turns on URL', uri=result) ])) line_bot_api.reply_message(event.reply_token, buttons_template_message) elif '/help' in text: line_bot_api.reply_message(event.reply_token, TextSendMessage(text=helpmessage)) elif '/test' in text: buttons_template_message = TemplateSendMessage( alt_text='Buttons template', template=ButtonsTemplate( thumbnail_image_url='https://example.com/image.jpg', title='Menu', text='God message', actions=[ PostbackAction(label='postback', text='postback text', data='action=buy&itemid=1'), MessageAction(label='message', text='message text'), URIAction(label='uri', uri='http://example.com/') ])) line_bot_api.reply_message(event.reply_token, image_carousel_template_message)
def handle_message(event): message = TextSendMessage(text=(event.message.text + "喜歡男人")) message = message line_bot_api.reply_message(event.reply_token, message)
def setUp(self): self.tested = LineBotApi('channel_secret') # test data self.text_message = TextSendMessage(text='Hello, world') self.message = [{"type": "text", "text": "Hello, world"}]
def handle_text_message(event): # default msg = event.message.text #message from user # 針對使用者各種訊息的回覆 Start ========= line_bot_api.reply_message(event.reply_token, TextSendMessage(text=msg))
def handle_message(event): access = Access.query.get(1) all_access = Access.query.get(2) lagi_pelajaran_ipa = Access.query.get(3) accessible = access.accessible user_message = event.message.text user_message_lower = user_message.lower() reply_token = event.reply_token account = LineAccount.query.filter_by( account_id=event.source.user_id).first() if not account: account = LineAccount(account_id=event.source.user_id) try: account.name = line_bot_api.get_profile( account.account_id).display_name except LineBotApiError: pass db.session.add(account) db.session.commit() elif not account.name: try: account.name = line_bot_api.get_profile( account.account_id).display_name except LineBotApiError: pass else: db.session.commit() if event.source.type == "group": group = LineGroup.query.get(event.source.group_id) if not group: group = LineGroup(id=event.source.group_id) group.name = line_bot_api.get_group_summary(group.id).group_name db.session.add(group) db.session.commit() if user_message_lower == "/bye": line_bot_api.leave_group(group.id) return if (account.tic_tac_toe and account.tic_tac_toe.is_playing ) or user_message_lower == "/tictactoe": if account.tic_tac_toe_id == group.id or not account.tic_tac_toe: if tictactoe.play(group.id, account, user_message, reply_token, line_bot_api): return elif event.source.type == "room": if user_message_lower == "/bye": line_bot_api.leave_room(event.source.room_id) return if (account.tic_tac_toe and account.tic_tac_toe.is_playing ) or user_message_lower == "/tictactoe": if account.tic_tac_toe_id == event.source.room_id or not account.tic_tac_toe: if tictactoe.play(event.source.room_id, account, user_message, reply_token, line_bot_api): return if (account.tic_tac_toe and account.tic_tac_toe.is_playing and account.tic_tac_toe_id == account.account_id) \ or user_message_lower == "/tictactoecomp": tictactoe.play(account.account_id, account, user_message, reply_token, line_bot_api, True) return if account.is_add_question: account.is_add_question = False db.session.commit() add_answer(account.question_id, user_message) line_bot_api.reply_message( reply_token, TextSendMessage(get_question_str(account.question_id))) elif "dupan!" in user_message_lower: account.tweet_phase = "img ask" account.next_tweet_msg = util.filter_tweet(user_message) account.last_tweet_req = util.datetime_now_string() db.session.commit() line_bot_api.reply_message( reply_token, TextSendMessage( "Want to attach an image?\n\n" f"/yes {get_emoji_str('0x1000A5')} or /no {get_emoji_str('0x1000A6')}\n" "/canceltweet to cancel ❌", quick_reply=QuickReply(items=[ QuickReplyButton(action=MessageAction("YES", "/yes")), QuickReplyButton(action=MessageAction("NO", "/no")), QuickReplyButton( action=MessageAction("CANCEL", "/canceltweet")) ]))) elif user_message_lower == "snmptn": day, hour, minute, second = util.get_delta_time(2021, 3, 22, 15) countdown = f"{day} hari {hour} jam {minute} menit {second} detik lagi." line_bot_api.reply_message( reply_token, TemplateSendMessage( alt_text=f"Pengumuman SNMPTN\n" f"🕒 {countdown} 😲", template=ButtonsTemplate( thumbnail_image_url= 'https://statik.tempo.co/data/2019/12/01/id_893849/893849_720.jpg', title='Pengumuman SNMPTN', text=f"{countdown}.", actions=[ URIAction(label='Live Countdown', uri='https://snmptn.arsaizdihar.com/') ]))) elif user_message_lower == "sbmptn": day, hour, minute, second = util.get_delta_time(2021, 6, 14) line_bot_api.reply_message( reply_token, TextSendMessage( text=f"PENGUMUMAN SBMPTN\n" f"{get_emoji_str('0x100071')}" f"{day} hari {hour} jam " f"{minute} menit {second} detik lagi {get_emoji_str('0x100032')}" )) elif user_message_lower == "ppkb": day, hour, minute, second = util.get_delta_time(2021, 3, 26, 13) line_bot_api.reply_message( reply_token, TextSendMessage( text=f"PENGUMUMAN PPKB\n" f"{get_emoji_str('0x100071')}" f"{day} hari {hour} jam " f"{minute} menit {second} detik lagi {get_emoji_str('0x100032')}" )) elif user_message_lower == "/testtweet": test = test_tweet() if test: line_bot_api.reply_message(reply_token, TextSendMessage("success")) else: line_bot_api.reply_message(reply_token, TextSendMessage("fail")) elif re.match("/youtube +[^ ]", user_message_lower): query = re.sub("/youtube +([^ ])", r"\1", user_message, flags=re.IGNORECASE) title, url = get_youtube_url(query) line_bot_api.reply_message(reply_token, TextSendMessage(text=f"{title}\n{url}")) elif user_message_lower == "/meme": response = requests.get('https://meme-api.herokuapp.com/gimme') url = response.json()['url'] line_bot_api.reply_message( reply_token, ImageSendMessage(original_content_url=url, preview_image_url=url)) elif user_message_lower.startswith("/number"): if user_message_lower == "/number": message = "Keywords: \n" \ "- /number (number)\n" \ "- /number/random" else: res_type = random.choice(('math', 'trivia')) req = user_message_lower[7:] if req == "/random": response = requests.get('http://numbersapi.com/random/' + res_type) message = response.text else: try: req = int(req) except ValueError: message = "Invalid request" else: response = requests.get('http://numbersapi.com/' + str(req) + "/" + res_type) message = response.text line_bot_api.reply_message(reply_token, TextSendMessage(text=message)) elif user_message_lower == "/cat": response = requests.get("https://api.thecatapi.com/v1/images/search") data = response.json() url = data[0]['url'] line_bot_api.reply_message(reply_token, ImageSendMessage(url, url)) elif user_message_lower == "/tweet28fess": account.tweet_phase = "from" account.next_tweet_msg = "from: " account.last_tweet_req = util.datetime_now_string() db.session.commit() line_bot_api.reply_message( reply_token, TextSendMessage( f"from: \n\n/canceltweet to cancel ❌", quick_reply=QuickReply(items=[ QuickReplyButton( action=MessageAction("CANCEL", "/canceltweet")) ]))) elif user_message_lower == "/tumbal" and event.source.type == "group": group = LineGroup.query.get(event.source.group_id) if not group: group = LineGroup(id=event.source.group_id) db.session.add(group) group.name = line_bot_api.get_group_summary(group.id).group_name if group.phase == "tumbal": user_name = line_bot_api.get_group_member_profile( event.source.group_id, event.source.user_id).display_name if user_name not in group.data.split("\n"): group.data += "\n" + user_name group.member_ids += "\n" + event.source.user_id else: group.phase = "tumbal" group.data = line_bot_api.get_group_member_profile( event.source.group_id, event.source.user_id).display_name group.member_ids = event.source.user_id line_bot_api.reply_message( reply_token, TextSendMessage("Daftar Tumbal" + "\n" + group.data)) db.session.commit() elif user_message_lower == "/tumbalkelar" and event.source.type == "group": group = LineGroup.query.get(event.source.group_id) if group: if group.phase == "tumbal" and group.data: member_ids = group.member_ids.split("\n") member = line_bot_api.get_group_member_profile( event.source.group_id, random.choice(member_ids)) if member.picture_url: messages = [ TextSendMessage("Yang jadi tumbal: " + member.display_name), ImageSendMessage(member.picture_url, member.picture_url) ] else: messages = TextSendMessage("Yang jadi tumbal: " + member.display_name), line_bot_api.reply_message(reply_token, messages=messages) group.data = "" group.phase = "" group.member_ids = "" db.session.commit() elif re.match("/google +[^ ]", user_message_lower): query = re.sub("/google +([^ ])", r"\1", user_message, flags=re.IGNORECASE) results = search_google(query) message = "" for result in results: message += f"{result['title']}\n{result['description']}\n{result['link']}\n\n" message = message[:-2] line_bot_api.reply_message(reply_token, TextSendMessage(message)) elif user_message_lower.startswith( "/pilih ") and ", " in user_message_lower: pilihan = user_message[7:].split(", ") line_bot_api.reply_message(reply_token, TextSendMessage(random.choice(pilihan))) elif user_message_lower.startswith("/kerangajaib "): random.seed(user_message_lower) random_range = random.random() if random_range <= 0.4: answer = "iya" elif random_range <= 0.8: answer = "tidak" elif random_range <= 0.98: answer = "bisa jadi" else: answer = "siapa lu nanya2" line_bot_api.reply_message(reply_token, TextSendMessage(answer)) random.seed() elif re.match("/balik +[^ ]", user_message_lower): message = " ".join("".join(reversed(x)) for x in re.sub( "/balik +([^ ])", r"\1", user_message, flags=re.IGNORECASE).split( " ")) line_bot_api.reply_message(reply_token, TextSendMessage(message)) elif re.match("/mirror +[^ ]", user_message_lower): trans = str.maketrans( 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', 'ɐqɔpǝɟɓɥᴉſʞๅɯuodbɹsʇnʌʍxʎzⱯꓭꓛꓷƎꓞꓨHIſꓘꓶWNOꓒῸꓤSꓕꓵꓥMX⅄Z') message = re.sub("/mirror +([^ ])", r"\1", user_message, flags=re.IGNORECASE).translate(trans) line_bot_api.reply_message(reply_token, TextSendMessage(message)) elif user_message_lower == "/balik": if account.tweet_phase == "balik": account.tweet_phase = "" line_bot_api.reply_message(reply_token, TextSendMessage("Balik mode off")) else: account.tweet_phase = "balik" line_bot_api.reply_message(reply_token, TextSendMessage("Balik mode on")) db.session.commit() elif user_message_lower == "/mirror": if account.tweet_phase == "mirror": account.tweet_phase = "" line_bot_api.reply_message(reply_token, TextSendMessage("Mirror mode off")) else: account.tweet_phase = "mirror" line_bot_api.reply_message(reply_token, TextSendMessage("Mirror mode on")) db.session.commit() elif re.match("(/addq|/addqa|/addqs) +[^ ]", user_message_lower): if ((account.ipa_access or account.ips_access) and accessible) or account.is_superuser or account.is_adder: account.is_add_question = True groups = re.match(r"(/addq|/addqa|/addqs) +([^ ][\s\S]+)", user_message, flags=re.IGNORECASE) query = groups.group(1).lower() is_ipa = query == "/addqa" is_ips = query == "/addqs" if not is_ipa and not is_ips: is_ipa = True if not lagi_pelajaran_ipa.accessible: is_ips = True question = groups.group(2) question_id = add_question(question, is_ipa, is_ips) if question_id: line_bot_api.reply_message( reply_token, TextSendMessage( f"Question Added. ID: {question_id}\nAnswer: ")) account.question_id = question_id db.session.commit() else: line_bot_api.reply_message( reply_token, TextSendMessage( f"Question already exist.\n{search_question(question, is_ipa, is_ips)}" )) else: line_bot_api.reply_message(reply_token, TextSendMessage("Access Denied.")) elif re.match(r"/addans +[\d]+ +[^ ]", user_message_lower): if ((account.ipa_access or account.ips_access) and accessible) or account.is_superuser or account.is_adder: groups = re.match(r"/addans +([\d]+) +([^ ][\s\S]+)", user_message, flags=re.IGNORECASE) question_id = groups.group(1) answer = groups.group(2) if add_answer(question_id, answer, True): message = get_question_str(question_id) else: message = "ID invalid" line_bot_api.reply_message(reply_token, TextSendMessage(message)) else: line_bot_api.reply_message(reply_token, TextSendMessage("Access Denied.")) elif user_message_lower == "/soalganti": if ( (account.ipa_access or account.ips_access) and accessible ) or account.is_superuser or all_access.accessible or account.is_adder: line_bot_api.reply_message( reply_token, TextSendMessage( get_changed_questions(account.ipa_access, account.ips_access, account.is_superuser))) else: line_bot_api.reply_message(reply_token, TextSendMessage("Access Denied.")) elif re.match("(/searchq|/sq) +[^ ]", user_message_lower): if ( (account.ipa_access or account.ips_access) and accessible ) or account.is_superuser or all_access.accessible or account.is_adder: message = search_question( re.sub("(/searchq|/sq) +([^ ])", r"\2", user_message, flags=re.IGNORECASE), account.ipa_access, account.ips_access, account.is_superuser) if len(message) > 5000: message = "Too many results." line_bot_api.reply_message(reply_token, TextSendMessage(message)) else: line_bot_api.reply_message(reply_token, TextSendMessage("Access Denied.")) elif re.match(r"/getq +\d+", user_message_lower): if ( (account.ipa_access or account.ips_access) and accessible ) or account.is_superuser or all_access.accessible or account.is_adder: question_id = re.sub(r"/getq +(\d+)", r"\1", user_message) line_bot_api.reply_message( reply_token, TextSendMessage(get_question_str(question_id))) else: line_bot_api.reply_message(reply_token, TextSendMessage("Access Denied.")) else: if account: phase = account.tweet_phase if phase and phase == "balik": message = " ".join("".join(reversed(x)) for x in user_message.split(" ")) line_bot_api.reply_message(reply_token, TextSendMessage(message)) if phase == "mirror": trans = str.maketrans( 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', 'ɐqɔpǝɟɓɥᴉſʞๅɯuodbɹsʇnʌʍxʎzⱯꓭꓛꓷƎꓞꓨHIſꓘꓶWNOꓒῸꓤSꓕꓵꓥMX⅄Z') message = user_message.translate(trans) line_bot_api.reply_message(reply_token, TextSendMessage(message)) elif phase: if user_message_lower == "/canceltweet": util.clear_account_tweet_data(account) line_bot_api.reply_message( reply_token, TextSendMessage("Tweet Cancelled")) else: if util.check_timeout(account.last_tweet_req, 300): now = util.datetime_now_string() account.last_tweet_req = now if phase == "from": account.tweet_phase = "to" account.next_tweet_msg += user_message + "\nto: " line_bot_api.reply_message( reply_token, TextSendMessage( f"to: \n\n/canceltweet to cancel ❌", quick_reply=QuickReply(items=[ QuickReplyButton(action=MessageAction( "CANCEL", "/canceltweet")) ]))) if phase == "to": account.tweet_phase = "text" account.next_tweet_msg += user_message + "\n" line_bot_api.reply_message( reply_token, TextSendMessage( f"message: \n\n/canceltweet to cancel ❌", quick_reply=QuickReply(items=[ QuickReplyButton(action=MessageAction( "CANCEL", "/canceltweet")) ]))) if phase == "text": msg = util.filter_tweet(account.next_tweet_msg + user_message) account.tweet_phase = "img ask" account.next_tweet_msg = msg line_bot_api.reply_message( reply_token, TextSendMessage( "Want to attach an image?\n\n" f"/yes {get_emoji_str('0x1000A5')} or /no {get_emoji_str('0x1000A6')}\n" "/canceltweet to cancel ❌", quick_reply=QuickReply(items=[ QuickReplyButton(action=MessageAction( "YES", "/yes")), QuickReplyButton( action=MessageAction("NO", "/no")), QuickReplyButton(action=MessageAction( "CANCEL", "/canceltweet")) ]))) if phase == "img ask": if user_message_lower == "/yes": account.img_soon = True account.tweet_phase = "img" line_bot_api.reply_message( reply_token, TextSendMessage( "Send an image within 5 min.\n\n" f"/canceltweet to cancel ❌", quick_reply=QuickReply(items=[ QuickReplyButton( action=MessageAction( "CANCEL", "/canceltweet")) ]))) elif user_message_lower == "/no": account.tweet_phase = "confirm" line_bot_api.reply_message( reply_token, TextSendMessage( "❗❗CONFIRMATION❗❗\n\n" f"{account.next_tweet_msg}\n\n" f"/send to tweet ✉️\n" f"/canceltweet to cancel ❌", quick_reply=QuickReply(items=[ QuickReplyButton( action=MessageAction( "SEND", "/send")), QuickReplyButton( action=MessageAction( "CANCEL", "/canceltweet")) ]))) if phase.startswith( "confirm") and user_message_lower == "/send": if account.img_soon: msg_media_id = phase.split(" ")[-1] pic = line_bot_api.get_message_content( msg_media_id) file = io.BytesIO(pic.content) url = tweet(account.next_tweet_msg, file, account=account) file.close() else: url = tweet(account.next_tweet_msg, account=account) util.clear_account_tweet_data(account) if url.startswith("https"): account.last_tweet = now message = f"Tweet Posted.\nurl: {url}" else: message = url line_bot_api.reply_message( reply_token, TextSendMessage(message)) else: util.clear_account_tweet_data(account) db.session.commit() if account.account_id == MY_LINE_ID: if user_message_lower.startswith("/getid "): search_name = user_message[7:] accounts = LineAccount.query.filter( LineAccount.name.ilike(f"%{search_name}%")) if accounts: msg_ids = '\n'.join( [search_account.account_id for search_account in accounts]) line_bot_api.reply_message(reply_token, TextSendMessage(f"ID:\n{msg_ids}")) else: line_bot_api.reply_message( reply_token, TextSendMessage("No account found.")) elif user_message_lower.startswith("/addacca "): requested_account = LineAccount.query.get(user_message[9:]) requested_account.ipa_access = True db.session.commit() line_bot_api.reply_message( reply_token, TextSendMessage( f"{requested_account.name} added to MIPA access")) elif user_message_lower.startswith("/addaccs "): requested_account = LineAccount.query.get(user_message[9:]) requested_account.ips_access = True db.session.commit() line_bot_api.reply_message( reply_token, TextSendMessage( f"{requested_account.name} added to IPS access")) elif user_message_lower.startswith("/removeacca "): requested_account = LineAccount.query.get(user_message[12:]) requested_account.ipa_access = False db.session.commit() line_bot_api.reply_message( reply_token, TextSendMessage( f"{requested_account.name} removed from MIPA access")) elif user_message_lower.startswith("/removeaccs "): requested_account = LineAccount.query.get(user_message[12:]) requested_account.ips_access = False db.session.commit() line_bot_api.reply_message( reply_token, TextSendMessage( f"{requested_account.name} removed from IPS access")) elif user_message_lower.startswith("/delq "): question_id = user_message_lower[6:] if question_id.isnumeric(): line_bot_api.reply_message( reply_token, TextSendMessage(delete_question(question_id))) elif user_message_lower == "/delqall": delete_all() line_bot_api.reply_message(reply_token, TextSendMessage("All Question deleted")) elif user_message_lower == "/allacc": all_accounts = LineAccount.query.filter( or_(LineAccount.ipa_access, LineAccount.ips_access)).all() line_bot_api.reply_message( reply_token, TextSendMessage("\n".join([acc.name for acc in all_accounts]))) elif user_message_lower == "/allacca": all_accounts = LineAccount.query.filter( LineAccount.ipa_access).all() line_bot_api.reply_message( reply_token, TextSendMessage("\n".join([acc.name for acc in all_accounts]))) elif user_message_lower == "/allaccs": all_accounts = LineAccount.query.filter( LineAccount.ips_access).all() line_bot_api.reply_message( reply_token, TextSendMessage("\n".join([acc.name for acc in all_accounts]))) elif user_message_lower == "/qaccess": access.accessible = not access.accessible message = "All access enabled" if access.accessible else "All access disabled" db.session.commit() line_bot_api.reply_message(reply_token, TextSendMessage(message)) elif user_message_lower == "/qallaccess": all_access.accessible = not all_access.accessible message = "All access for everyone enabled" if all_access.accessible else "All access for everyone disabled" db.session.commit() line_bot_api.reply_message(reply_token, TextSendMessage(message)) elif user_message_lower == "/ipamode": lagi_pelajaran_ipa.accessible = not lagi_pelajaran_ipa.accessible message = "MIPA enabled" if lagi_pelajaran_ipa.accessible else "MIPA disabled" db.session.commit() line_bot_api.reply_message(reply_token, TextSendMessage(message)) elif user_message_lower == "/joingroup": group_access = Access.query.get(4) group_access.accessible = not group_access.accessible db.session.commit() message = "Join group enabled" if group_access.accessible else "Join group disabled" line_bot_api.reply_message(reply_token, TextSendMessage(message))
def selectedQuestion(event, index, uuid, line_bot_api): text = "" buttons_template = "" #從1開始才是第1題的答案 if index != 0: f = open(path + "/" + uuid + ".txt", 'a') #把答案寫進檔案裡 f.write(event.message.text + "\n") if index == 0: text = "您的姓名:" elif index == 1: buttons_template = TemplateSendMessage( alt_text="Buttons Template", template=ButtonsTemplate(title=" ", text=str(index + 1) + ". 您的性別:", actions=[ MessageTemplateAction(label="男", text="男"), MessageTemplateAction(label="女", text="女") ])) elif index == 2: buttons_template = TemplateSendMessage( alt_text="Buttons Template", template=ButtonsTemplate(title=" ", text=str(index + 1) + ". 您是否期望有固定座位:", actions=[ MessageTemplateAction(label="是,每個人都有", text="是,每個人都有"), MessageTemplateAction( label="是,但不用每個人都有", text="是,但不用每個人都有"), MessageTemplateAction(label="否", text="否") ])) elif index == 3: buttons_template = TemplateSendMessage( alt_text="Buttons Template", template=ButtonsTemplate(title=" ", text=str(index + 1) + ". 您所期望實驗室的人數:", actions=[ MessageTemplateAction(label="1~5人", text="1~5人"), MessageTemplateAction(label="6~10人", text="6~10人"), MessageTemplateAction(label="11~15人", text="11~15人"), MessageTemplateAction( label="16人以上", text="16人以上", ) ])) elif index == 4: buttons_template = TemplateSendMessage( alt_text="Buttons Template", template=ButtonsTemplate(title=" ", text=str(index + 1) + ". 您預計待在實驗室的時間:", actions=[ MessageTemplateAction(label="1~3天", text="1~3天"), MessageTemplateAction(label="4~6天", text="4~6天"), MessageTemplateAction(label="每天", text="每天") ])) elif index == 5: buttons_template = TemplateSendMessage( alt_text="Buttons Template", template=ButtonsTemplate(title=" ", text=str(index + 1) + ". 您期望與指導教授開會的頻率:", actions=[ MessageTemplateAction(label="每週一次", text="每週一次"), MessageTemplateAction(label="兩週一次", text="兩週一次"), MessageTemplateAction(label="無固定", text="無固定"), MessageTemplateAction( label="其他", text="其他", ) ])) line_bot_api.reply_message(event.reply_token, buttons_template) return "continue" elif index == 6: buttons_template = TemplateSendMessage( alt_text="Carousel template", template=CarouselTemplate(columns=[ CarouselColumn(title=str(index + 1) + ". 您預計的論文時程:", text=" ", actions=[ MessageTemplateAction(label="碩一上開始,碩一下結束", text="碩一上開始,碩一下結束"), MessageTemplateAction(label="碩一上開始,碩二上結束", text="碩一上開始,碩二上結束"), MessageTemplateAction(label="碩一上開始,碩二下結束", text="碩一上開始,碩二下結束") ]), CarouselColumn(title=str(index + 1) + ". 您預計的論文時程:", text=" ", actions=[ MessageTemplateAction(label="碩一下開始,碩二上結束", text="碩一下開始,碩二上結束"), MessageTemplateAction(label="碩一下開始,碩二下結束", text="碩一下開始,碩二下結束"), MessageTemplateAction(label="碩二上開始,碩二下結束", text="碩二上開始,碩二下結束") ]) ])) elif index == 7: text = "您擁有哪些專長/專業:" elif index == 8: text = "您有哪些興趣/嗜好:" elif index == 9: text = "您的人格特質/個性:" elif index == 10: text = "您預計的論文領域及研究方向:" elif index == 11: text = "您所期望指導教授的領導風格:" elif index == 12: text = "您所期望實驗室的氣氛/氛圍:" elif index == 13: text = "您期望實驗室有哪些聚餐或活動(例如:桌遊、期末聚餐等):" elif index == 14: text = "您參與過的專題、計劃或競賽領域:" elif index == 15: text = "您曾經或現在工作、實習或打工的產業及領域有哪些:" elif index == 16: text = "在就讀研究所這段期間,有哪些其他規劃(例如:交換、雙聯、實習、提畢、延畢等):" elif index == 17: text = "您所期望畢業後的工作產業及領域:" elif index == 18: text = "您期望能在實驗室中學習到哪些事物:" elif index == 19: text = "您對自我的期望與目標:" elif index == 20: text = "我們已收到您的資料,謝謝您的耐心填答,請稍等媒合結果" line_bot_api.reply_message(event.reply_token, TextSendMessage(text)) #回傳結束符號 return "end" else: text = "您好" if text == "": line_bot_api.reply_message(event.reply_token, buttons_template) else: line_bot_api.reply_message( event.reply_token, TextSendMessage(str(index + 1) + ". " + text)) return "continue"
def handle_message(event): seg_list = jieba.cut(event.message.text) lineBotaAPI.reply_message(event.reply_token, TextSendMessage(text=", ".join(seg_list)))
def sendFlex(event): #彈性配置 try: bubble = BubbleContainer( direction='ltr', #項目由左向右排列 header=BoxComponent( #標題 layout='vertical', contents=[ TextComponent(text='冰火飲料', weight='bold', size='xxl'), ]), hero=ImageComponent( #主圖片 url='https://i.imgur.com/3sBRh08.jpg', size='full', aspect_ratio='792:555', #長寬比例 aspect_mode='cover', ), body=BoxComponent( #主要內容 layout='vertical', contents=[ TextComponent(text='評價', size='md'), BoxComponent( layout='baseline', #水平排列 margin='md', contents=[ IconComponent( size='lg', url='https://i.imgur.com/GsWCrIx.png'), TextComponent(text='25 ', size='sm', color='#999999', flex=0), IconComponent( size='lg', url='https://i.imgur.com/sJPhtB3.png'), TextComponent(text='14', size='sm', color='#999999', flex=0), ]), BoxComponent( layout='vertical', margin='lg', contents=[ BoxComponent( layout='baseline', contents=[ TextComponent(text='營業地址:', color='#aaaaaa', size='sm', flex=2), TextComponent(text='台北市信義路14號', color='#666666', size='sm', flex=5) ], ), SeparatorComponent(color='#0000FF'), BoxComponent( layout='baseline', contents=[ TextComponent(text='營業時間:', color='#aaaaaa', size='sm', flex=2), TextComponent(text="10:00 - 23:00", color='#666666', size='sm', flex=5), ], ), ], ), BoxComponent(layout='horizontal', margin='xxl', contents=[ ButtonComponent( style='primary', height='sm', action=URIAction( label='電話聯絡', uri='tel:0987654321'), ), ButtonComponent( style='secondary', height='sm', action=URIAction( label='查看網頁', uri="http://www.e-happy.com.tw")) ]) ], ), footer=BoxComponent( #底部版權宣告 layout='vertical', contents=[ TextComponent(text='Copyright@ehappy studio 2019', color='#888888', size='sm', align='center'), ]), ) message = FlexSendMessage(alt_text="彈性配置範例", contents=bubble) line_bot_api.reply_message(event.reply_token, message) except: line_bot_api.reply_message(event.reply_token, TextSendMessage(text='發生錯誤!'))
def single_push(id, msg): #新聞類別 line_bot_api.push_message(id, TextSendMessage(text=msg))
def handle_follow(event): line_bot_api.reply_message( event.reply_token, TextSendMessage(text='Got follow event'))
def splitname(self, line): line_bot_api = self.line_bot_api event = self.event events = self.events user = self.user print(user) eventText = event.message.text trigger = "Mc3 inputchamp " s = eventText[eventText.find(trigger) + len(trigger):] # 4-nebula-4 30 pieces = s.split() # ['4-nebula-4', '30'] champ = pieces[0] sig = pieces[1] profile = line_bot_api.get_profile(user) name = (profile.display_name) print(name) print(champ) print(sig) champ_prestige = get_prestige_for_champion(champ, sig) if champ_prestige is None: line_bot_api.reply_message( event.reply_token, TextSendMessage( text= "Oops! You've entered an invalid champion or signature level." )) # this breaks out of our branch without exiting the bot script cur = None try: print(champ_prestige) cur = conn.cursor(cursor_factory=psycopg2.extras.DictCursor) # get the user's information if it exists cur.execute( """SELECT lineid, summoner_name, champ_data FROM prestige_data WHERE lineid = %(lineid)s""", {"lineid": user}) rows = cur.fetchall() print(rows) # The user exists in the database and a result was returned for row in rows: lineid = row['lineid'] summoner_name = row['summoner_name'] champs = json.loads( row['champ_data']) # contains a list of the user's champs break # we should only have one result, but we'll stop just in case # The user does not exist in the database already else: lineid = user summoner_name = name champ_data = json.loads( '{}') # start with an empty list of champs champs = {} # creates an empty Python list except BaseException: if cur is not None: cur.rollback() cur.close() finally: if cur is not None: cur.close() # either way, let's move on # this will make sure that the Summoner's name is always updated if their Line profile has changed summoner_name = name # add or update the user's champ champs[champ] = champ_prestige # put everything together and send it back to the database champ_data = json.dumps(champs) # Checks for an existing line ID and updates if it exists or adds if it doesn't cur = None try: cur = conn.cursor() cur.execute( """INSERT INTO prestige_data(lineid, summoner_name, champ_data) VALUES(%(lineid)s, %(summoner_name)s, %(champ_data)s) ON CONFLICT (lineid) DO UPDATE SET summoner_name = Excluded.summoner_name, champ_data = Excluded.champ_data;""", { "lineid": lineid, "summoner_name": summoner_name, "champ_data": champ_data }) conn.commit() line_bot_api.reply_message( event.reply_token, TextSendMessage(text=champ + " (" + champ_prestige + ") added")) except psycopg2.Error: conn.rollback() print("PostgreSQL Error: " + e.diag.message_primary) pass finally: if cur is not None: cur.close()
def handle_postback(event): if event.postback.data == 'ping': line_bot_api.reply_message( event.reply_token, TextSendMessage(text='pong'))
def handle_text_message(event): text = event.message.text if text == 'あなたは誰?': 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) 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: line_bot_api.reply_message(event.reply_token, TextSendMessage(text=event.message.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, 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 handle_beacon(event): line_bot_api.reply_message( event.reply_token, TextSendMessage( text='Got beacon event. hwid={}, device_message(hex string)={}'. format(event.beacon.hwid, event.beacon.dm)))
def process_text_message(event): user_id = event.source.user_id # 讀取本地檔案,並轉譯成消息 result_message_array = [] if event.message.text == "#切換新聞台": # 切換新聞台 quickReplyList = QuickReply( items=create_QuickReplyButton(['TVBS新聞', 'Yahoo新聞', '蘋果日報'])) quickReplyTextSendMessage = TextSendMessage(text='請選擇新聞台', quick_reply=quickReplyList) # 發送 line_bot_api.reply_message(event.reply_token, quickReplyTextSendMessage) elif event.message.text == "#新聞頭條": user_profile = vars(line_bot_api.get_profile(user_id)) select_news = pg.select_table( "select select_news from user_info where user_id='" + user_id + "';")[0][0] flexCarouselContainerJsonDict = create_news_message(select_news, "首頁") if flexCarouselContainerJsonDict != "": carouselContent = CarouselContainer.new_from_json_dict( json.loads(flexCarouselContainerJsonDict)) flexCarouselSendMeesage = FlexSendMessage(alt_text="新聞頭條", contents=carouselContent) # 發送 line_bot_api.reply_message(event.reply_token, flexCarouselSendMeesage) elif event.message.text == "#新聞類別": user_profile = vars(line_bot_api.get_profile(user_id)) select_news = pg.select_table( "select select_news from user_info where user_id='" + user_id + "';")[0][0] if select_news == "TVBS新聞": # 切換類別 quickReplyList = QuickReply( items=create_QuickReplyButton(['焦點', '地方社會', '娛樂'])) quickReplyTextSendMessage = TextSendMessage( text='請選擇類別', quick_reply=quickReplyList) # 發送 line_bot_api.reply_message(event.reply_token, quickReplyTextSendMessage) elif select_news == "Yahoo新聞": # 切換類別 quickReplyList = QuickReply( items=create_QuickReplyButton(['選舉', '財金', '娛樂', '運動'])) quickReplyTextSendMessage = TextSendMessage( text='請選擇類別', quick_reply=quickReplyList) # 發送 line_bot_api.reply_message(event.reply_token, quickReplyTextSendMessage) elif select_news == "蘋果日報": # 切換類別 quickReplyList = QuickReply( items=create_QuickReplyButton(['焦點', '政治', '娛樂', '生活'])) quickReplyTextSendMessage = TextSendMessage( text='請選擇類別', quick_reply=quickReplyList) # 發送 line_bot_api.reply_message(event.reply_token, quickReplyTextSendMessage) elif event.message.text == "#隨機新聞": user_profile = vars(line_bot_api.get_profile(user_id)) select_news = pg.select_table( "select select_news from user_info where user_id='" + user_id + "';")[0][0] if select_news == "TVBS新聞": class_array = ['首頁', '焦點', '地方社會', '娛樂'] select_class = class_array[random.randint(0, len(class_array) - 1)] flexCarouselContainerJsonDict = create_news_message( select_news, select_class) if flexCarouselContainerJsonDict != "": carouselContent = CarouselContainer.new_from_json_dict( json.loads(flexCarouselContainerJsonDict)) flexCarouselSendMeesage = FlexSendMessage( alt_text="隨機新聞", contents=carouselContent) # 發送 line_bot_api.reply_message(event.reply_token, flexCarouselSendMeesage) elif select_news == "Yahoo新聞": class_array = ['首頁', '選舉', '財金', '娛樂', '運動'] select_class = class_array[random.randint(0, len(class_array) - 1)] flexCarouselContainerJsonDict = create_news_message( select_news, select_class) if flexCarouselContainerJsonDict != "": carouselContent = CarouselContainer.new_from_json_dict( json.loads(flexCarouselContainerJsonDict)) flexCarouselSendMeesage = FlexSendMessage( alt_text="Yahoo新聞", contents=carouselContent) # 發送 line_bot_api.reply_message(event.reply_token, flexCarouselSendMeesage) elif select_news == "蘋果日報": class_array = ['首頁', '焦點', '政治', '娛樂', '生活'] select_class = class_array[random.randint(0, len(class_array) - 1)] flexCarouselContainerJsonDict = create_news_message( select_news, select_class) if flexCarouselContainerJsonDict != "": carouselContent = CarouselContainer.new_from_json_dict( json.loads(flexCarouselContainerJsonDict)) flexCarouselSendMeesage = FlexSendMessage( alt_text="蘋果日報", contents=carouselContent) # 發送 line_bot_api.reply_message(event.reply_token, flexCarouselSendMeesage) elif "#" in event.message.text: user_profile = vars(line_bot_api.get_profile(user_id)) select_news = pg.select_table( "select select_news from user_info where user_id='" + user_id + "';")[0][0] select_class = event.message.text.replace("#", "") flexCarouselContainerJsonDict = create_news_message( select_news, select_class) if flexCarouselContainerJsonDict != "": carouselContent = CarouselContainer.new_from_json_dict( json.loads(flexCarouselContainerJsonDict)) flexCarouselSendMeesage = FlexSendMessage(alt_text="#", contents=carouselContent) # 發送 line_bot_api.reply_message(event.reply_token, flexCarouselSendMeesage)
""" line_bot_api = LineBotApi(settings.CHANNEL_ACCESS_TOKEN) parser = WebhookParser(settings.LINE_CHANNEL_SECRET) """ app = Flask(__name__) # 必須放上自己的Channel Access Token line_bot_api = LineBotApi( 'W3cJZwxPee8Xg74vRZ0KvQ7Sy0sjPpzlCnuhE59pXLUJrBUghurpxP7K9uqEK/cXYZyIgD6B8J926PB2Bfc73pT1tscfORX8koAxTWJZesgAF9LdzgKrlRnURH2m32Mm96s81v//uGWYdEE7cfZ2uwdB04t89/1O/w1cDnyilFU=' ) # 必須放上自己的Channel Secret handler = WebhookHandler('02e59494ae3f01a49a87f538ff81ffb0') line_bot_api.push_message('U7638b973e5e09749f86ecf44256f64d4', TextSendMessage(text='你可以開始了')) @csrf_exempt @require_POST def callback(request): signature = request.META['HTTP_X_Line_Signature'] body = request.body.decode('utf-8') try: handler.handle(body, signature) except InvalidSignatureError: messages = ( "Invalid signature. Please check your channel access token/channel secret." ) HttpResponseForbidden()
def handle_join(event): line_bot_api.reply_message( event.reply_token, TextSendMessage(text="Terima kasih telah mengundang saya ke dalan group\nKetik !help untuk melihat event, team formation, dan fitur lainnya"))
def handl_message(event: MessageEvent): line_bot_api.reply_message( reply_token=event.reply_token, messages=TextSendMessage(text=event.message.text), )
def handle_message(event): line_bot_api.reply_message(event.reply_token, TextSendMessage(text=event.message.text))
def handle_message(event): # get user_id from event uId = event.source.user_id profile = line_bot_api.get_profile(uId) name = profile.display_name # query player with uId query = Player.select().where(Player.lineId == uId) # if player is new if not( query.exists() ): # save Player player = Player(lineId = uId, displayName = name) player.save() print( "player saved!" ) else: player = query.get() # store user's text text = event.message.text print( text ) # play janken if text == u'ぐー': playerHand = ROCK reply_text = playJanken(playerHand) # reply line_bot_api.reply_message( event.reply_token, TextSendMessage(text=reply_text) ) elif text == u'ちょき': playerHand = SCISSORS reply_text = playJanken(playerHand) # reply line_bot_api.reply_message( event.reply_token, TextSendMessage(text=reply_text) ) elif text == u'ぱー': playerHand = PAPER reply_text = playJanken(playerHand) # reply line_bot_api.reply_message( event.reply_token, TextSendMessage(text=reply_text) ) else: win = player.win reply_text = "win:" + str(win) # reply line_bot_api.reply_message( event.reply_token, TextSendMessage(text=reply_text) ) # update player data if reply_text == "you win": win = player.win player.win = win + 1 player.save() elif reply_text == "you lose": lose = player.lose player.lose = lose + 1 player.save()
def replyTextMessage(reply_token, message): line_bot_api.reply_message(reply_token, TextSendMessage(text=message))
def reset_images(event): delete_images_on_server() reply_token = event.reply_token messages = TextSendMessage(text='写真を全て削除しました') app.logger.info("DEBUG:" + event.message.text) line_bot_api.reply_message(reply_token, messages)