def handle_location_message(event): line_bot_api.reply_message( event.reply_token, LocationSendMessage(title='Location', address=event.message.address, latitude=event.message.latitude, longitude=event.message.longitude))
def istockSearch(event): try: search_key_word = {'family': 'creative', 'phrase': event.message.text} url = f"https://www.istockphoto.com/search/2/image?{urllib.parse.urlencode(search_key_word)}" header = { 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0' } req = urllib.request.Request(url, headers=header) conn = urllib.request.urlopen(req) data = conn.read() template = 'src="(https://media.*?)"' image_list = [] for i in re.finditer(template, str(data, 'utf-8')): image_list.append(re.sub('amp;', '', i.group(1))) random_image_url = image_list[random.randint(0, len(image_list) + 1)] line_bot_api.reply_message( event.reply_token, ImageSendMessage(original_content_url=random_image_url, preview_image_url=random_image_url)) return True except: return False
def handler_image_message(event): """[summary] Args: event ([type]): [line bot event-> pass img] Func 1. get img msg and reply msg Func 2. upload iamge to AWS S3 client Func 3. (optional) udpate image detail(uploader id, image_path) to db """ # Step 1. Get message_id message_content = line_bot_api.get_message_content(event.message.id) file_name = f"{event.message.id }.jpg" # write iamge by message content (from user sent) with open(file_name, "wb") as fd: for chunk in message_content.iter_content(): fd.write(chunk) line_bot_api.reply_message( event.reply_token, [ TextSendMessage(text=f"Image saved ! {file_name}"), ], )
def handle_content_message(event): if isinstance(event.message, ImageMessage): ext = 'jpg' elif isinstance(event.message, VideoMessage): ext = 'mp4' elif isinstance(event.message, AudioMessage): ext = 'm4a' else: return message_content = line_bot_api.get_message_content(event.message.id) with tempfile.NamedTemporaryFile(dir=static_tmp_path, prefix=ext + '-', delete=False) as tf: for chunk in message_content.iter_content(): tf.write(chunk) tempfile_path = tf.name dist_path = tempfile_path + '.' + ext dist_name = os.path.basename(dist_path) os.rename(tempfile_path, dist_path) line_bot_api.reply_message(event.reply_token, [ TextSendMessage(text='Save content.'), TextSendMessage(text=request.host_url + os.path.join('static', 'tmp', dist_name)) ])
def location_handler(event): from app.service.user_service import udpate_location res = udpate_location(event) print(res) line_bot_api.reply_message( event.reply_token, TextSendMessage(text="已更新您的位置 !"))
def query_menu(event): if '菜單查詢' in event.message.text: line_bot_api.reply_message( event.reply_token, FlexSendMessage(alt_text='query record: index', contents=flexmessages.flex_index())) return True else: return False
def echo(event): # user id 在 Line Developers / Basic Setting 下 if event.source.user_id == "user id": display_message = '你後面那位也想聽' if event.message.text == "tux來一個鬼故事": response_message = display_message line_bot_api.reply_message(event.reply_token, TextSendMessage(text=response_message))
def handle_sticker_message(event): # ref. https://developers.line.me/media/messaging-api/sticker_list.pdf sticker_ids = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 21, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 401, 402 ] index_id = random.randint(0, len(sticker_ids) - 1) sticker_id = str(sticker_ids[index_id]) sticker_message = StickerSendMessage(package_id='1', sticker_id=sticker_id) line_bot_api.reply_message(event.reply_token, sticker_message)
def handle_follow(event): if isinstance(event.source, SourceUser): profile = line_bot_api.get_profile(event.source.user_id) response = login(event.source.user_id) if (response): print(profile) else: print("login failed") url = 'https://i.imgur.com/vi9vaYc.jpg' app.logger.info("url=" + url) bubble_string = flexObj.profile message = FlexSendMessage(alt_text="關於作者", contents=json.loads(bubble_string)) line_bot_api.reply_message(event.reply_token, message)
def replyText(event): if event.source.user_id == "Uf4a596a6eb65eabf52c003ffe325a21d": try: img_url = google_search(event.message.text) print(img_url) line_bot_api.reply_message( event.reply_token, ImageSendMessage(original_content_url=img_url, preview_image_url=img_url)) except: #hello_text = echo(event.message.text) line_bot_api.push_message('Uf4a596a6eb65eabf52c003ffe325a21d', TextSendMessage(text='沒找到'))
def showData(event): if '菜單' in event.message.text: data = connectDB.showallMenu() print_text = "" for i in data: print_text += str(i[1]) print_text += str(i[2]) print_text += "\n" line_bot_api.reply_message(event.reply_token, TextSendMessage(text=print_text)) return True else: return False
def handle_image_message(event): # 請line_bot_api把圖片從line抓回來,儲存到本地端 # 圖片名字以消息的id做命名 # line_bot_api get message content line-bot-sdk message_content = line_bot_api.get_message_content(event.message.id) file_name = event.message.id + '.jpg' # file_message = event.message.id + '.txt' with open(file_name, 'wb') as fd: for chunk in message_content.iter_content(): fd.write(chunk) # 請line_bot_api回復用戶,說圖片已儲存 最多五則回覆 # line_bot_api reply TextSendMessage line_bot_api.reply_message(event.reply_token, [ TextSendMessage(text="圖片已儲存,檔名為 " + file_name), TextSendMessage(text="感謝您提供圖片資訊。") ])
def shareProfileMessage(event): username = event.message.text.split(" ")[2] response = requests.get("https://api.github.com/users/{}".format(username)) data = response.json() app.logger.info(data) if response.status_code == 200: line_bot_api.reply_message( event.reply_token, TextSendMessage( text= "fullName = {}\ncompany = {}\nlocation = {}\nfollowers = {}\nfollowing = {}\npublic repo = {}\npublic gist = {}\n" .format(data['name'], data['company'], data['location'], data['followers'], data['following'], data['public_repos'], data['public_gists']))) else: line_bot_api.reply_message(event.reply_token, TextSendMessage(text="Tidak ditemukan"))
def echo(event): # user id 在 Line Developers / Basic Setting 下 if event.source.user_id == "Uf4a596a6eb65eabf52c003ffe325a21d": replay = False if not replay: reply = flextalks.query_menu(event) if not replay: reply = callData.showData(event) if not replay: replay = istock.istockSearch(event) if not replay: line_bot_api.reply_message( event.reply_token, TextSendMessage(text=event.message.text))
def handle_file_message(event): message_content = line_bot_api.get_message_content(event.message.id) with tempfile.NamedTemporaryFile(dir=static_tmp_path, prefix='file-', delete=False) as tf: for chunk in message_content.iter_content(): tf.write(chunk) tempfile_path = tf.name dist_path = tempfile_path + '-' + event.message.file_name dist_name = os.path.basename(dist_path) os.rename(tempfile_path, dist_path) line_bot_api.reply_message(event.reply_token, [ TextSendMessage(text='Save file.'), TextSendMessage(text=request.host_url + os.path.join('static', 'tmp', dist_name)) ])
def phase_intermediate(event): color_dict = { 'red': '紅', 'orange': '橙', 'yellow': '黃', 'green': '綠', 'blue': '藍', 'purple': '紫' } reply_dict = { 'mode': '[2/4] 今晚,繼續來點雙色打光!\n請選擇色彩變化梯度:', 'gradient_factor': '[3/4] 今晚,還想來點雙色打光!\n請選擇第一道色彩:', 'first_tone': '[4/4] 今晚,最後來點雙色打光!\n請選擇第二道色彩:' } quick_button_dict = { 'mode': [ QuickReplyButton(action=PostbackAction( label=i, display_text=f'變化梯度:{i}', data=f'gradient_factor={i}')) for i in (5, 10, 50, 100) ], 'gradient_factor': [ QuickReplyButton(action=PostbackAction( label=j, display_text=f'第一道色彩:{j}', data=f'first_tone={i}')) for i, j in color_dict.items() ], 'first_tone': [ QuickReplyButton(action=PostbackAction( label=j, display_text=f'第二道色彩:{j}', data=f'second_tone={i}')) for i, j in color_dict.items() ] } user_id = event.source.user_id postback_data = event.postback.data current_phase = postback_data.split('=')[0] CallDatabase.update_record(user_id, current_phase, postback_data.split('=')[1]) line_bot_api.reply_message( event.reply_token, TextSendMessage( text=reply_dict[current_phase], quick_reply=QuickReply(items=quick_button_dict[current_phase])))
def handle_join(event): profile=line_bot_api.get_profile(event.source.user_id) opening_text = f"👋👋👋👋 {profile.display_name} 您好\n\ 為了您有更好的系統體驗, 是否傳送您目前的居住位置呢 \ " line_bot_api.reply_message( event.reply_token, TextSendMessage(text=opening_text, quick_reply=QuickReply(items=[ QuickReplyButton(action=MessageAction(label="否, 下次再傳送", text="否, 下次再傳送")), QuickReplyButton(action=LocationAction(label="是的, 我很願意有更好的體驗")) ], ) ) )
def phase_start(event): CallDatabase.init_table() if CallDatabase.check_record(event.source.user_id): _ = CallDatabase.update_record(event.source.user_id, 'message_id', event.message.id) else: _ = CallDatabase.init_record(event.source.user_id, event.message.id) mode_dict = { 'blend': '線性疊圖', 'composite': '濾鏡疊圖', 'composite_invert': '反式濾鏡疊圖' } line_bot_api.reply_message( event.reply_token, TextSendMessage( text=f"[1/4] 今晚,我想來點雙色打光!\n請選擇雙色打光模式:", quick_reply=QuickReply(items=[ QuickReplyButton(action=PostbackAction( label=j, display_text=f'打光模式:{j}', data=f'mode={i}')) for i, j in mode_dict.items() ])))
def query_menu_back(event): query = event.postback.data print(query) if '=' in query: print(query.split('=')[1]) data = connectDB.queryItem(query.split('=')[1]) menu_name = [i[2] for i in data] line_bot_api.reply_message( event.reply_token, FlexSendMessage(alt_text=f"query record: column {query}", contents=flexmessages.flex_menu_prize( query, menu_name))) return True elif '菜單' in query: data = connectDB.showallMenu() menu_name = [i[1] for i in data] line_bot_api.reply_message( event.reply_token, FlexSendMessage(alt_text=f"query record: column {query}", contents=flexmessages.flex_menu(query, menu_name))) return True else: return False
def phase_finish(event): user_id = event.source.user_id postback_data = event.postback.data current_phase = postback_data.split('=')[0] record = CallDatabase.update_record(user_id, current_phase, postback_data.split('=')[1]) message_content = line_bot_api.get_message_content(record[1]) print('Getting image...') im = AlmaRenders.get_image(message_content, event.reply_token) print('Running dual tone...') mode = record[2] gradient_factor = int(record[3]) first_tone = record[4] second_tone = record[5] im_dual_tone = AlmaRenders.dual_tone_run(im, mode, gradient_factor, first_tone, second_tone) print('Saving image...') im_url = AlmaRenders.save_image(im_dual_tone, event.reply_token) auth_link = AlmaNotify.create_auth_link(user_id) reply_template = f"雙色打光模式:{mode}\n色彩變化梯度:{gradient_factor}\n第一道色彩:{first_tone}\n第二道色彩:{second_tone}\n" reply_template += '👉您的雙色打光將由 LINE Notify 送達。若尚未連動,請連動之後再次下單,謝謝!\n' reply_template += f'👉連動網址:\n{auth_link}' line_bot_api.reply_message(event.reply_token, TextSendMessage(text=reply_template)) record = CallDatabase.notify_get_token(user_id) if record: access_token = record[1] AlmaNotify.send_message(user_id, access_token, im_url)
def showData(event): if '新增菜單' in event.message.text: input_str = event.message.text manu = input_str.split(':') data = connectDB.addMenu(manu[1]) line_bot_api.reply_message(event.reply_token, TextSendMessage(text='新增成功!')) return True elif '菜單' in event.message.text: data = connectDB.showallMenu() print_text = "" for i in data: print_text += str(i[1]) print_text += str(i[2]) print_text += "\n" line_bot_api.reply_message(event.reply_token, TextSendMessage(text=print_text)) return True else: return False
def handle_message(event): if event.message.text == "否, 下次再傳送": line_bot_api.reply_message(event.reply_token, TextSendMessage(text="謝謝您, 隨時歡迎更新位置")) elif event.message.text == "History of flooding area": line_bot_api.reply_message( event.reply_token, ImageSendMessage( original_content_url="https://i.imgur.com/DFkVFPU.png", preview_image_url="https://i.imgur.com/DFkVFPU.png")) elif event.message.text == "Damage level": line_bot_api.reply_message( event.reply_token, ImageSendMessage( original_content_url="https://i.imgur.com/MNms0NS.png", preview_image_url="https://i.imgur.com/MNms0NS.png")) elif event.message.text == "Disaster supply heat map": line_bot_api.reply_message( event.reply_token, ImageSendMessage( original_content_url="https://i.imgur.com/wY9Zssj.png", preview_image_url="https://i.imgur.com/wY9Zssj.png"))
def handle_join(event): line_bot_api.reply_message( event.reply_token, TextSendMessage(text='Joined this ' + event.source.type))
def unhandledMessage(event): line_bot_api.reply_message( event.reply_token, TextSendMessage(text="ini ma contoh aja ih!!!!"))
def handle_postback(event): if event.postback.data.find("&") != -1: action = event.postback.data.split("&")[0][7:] taskId = event.postback.data.split("&")[1][7:] if (action == "startTask"): url, replyItems = startTask(event.source.user_id, taskId) if (url): line_bot_api.reply_message(event.reply_token, [ TextSendMessage(text='請點選按鈕協助進行以下圖片的標註,如欲結束標記請按「結束作答」的按鈕'), ImageSendMessage(url, url), TextSendMessage(text='請問上方圖片屬於哪個類別?', quick_reply=QuickReply(items=replyItems)) ]) else: send_error_message(event) elif (action == "answerTask"): labelId = event.postback.data.split("&")[2][8:] answer = event.postback.data.split("&")[3][7:] transactionId = None if (event.postback.data.find("transactionId") != -1): transactionId = event.postback.data.split("&")[4][14:] transaction = answerTask(event.source.user_id, taskId, labelId, answer, transactionId) if (transaction): url, replyItems = startTask(event.source.user_id, taskId, transaction['transactionId']) line_bot_api.reply_message(event.reply_token, [ TextSendMessage(text="你的答案是: {}".format(answer)), ImageSendMessage(url, url), TextSendMessage(text='請問上方圖片屬於哪個類別?', quick_reply=QuickReply(items=replyItems)) ]) else: send_error_message(event) elif (action == "endTask"): labelId = event.postback.data.split("&")[2][8:] answer = event.postback.data.split("&")[3][7:] transactionId = event.postback.data.split("&")[4][14:] response = endTask(event.source.user_id, taskId, transactionId) if (response): bubbleJson = flexObj.toAccuracyJson(response['taskTitle'], response['accuracy']) flexMessage = FlexSendMessage(alt_text="準確度", contents=bubbleJson) line_bot_api.reply_message( event.reply_token, [TextSendMessage(text=answer), flexMessage]) else: send_error_message(event) elif (action == "contact"): bubble_string = flexObj.contact message = FlexSendMessage(alt_text="聯絡方式", contents=json.loads(bubble_string)) line_bot_api.reply_message(event.reply_token, message) elif (action == "projectExperience"): bubble_string = flexObj.projectExperience message = FlexSendMessage(alt_text="專案經歷", contents=json.loads(bubble_string)) line_bot_api.reply_message(event.reply_token, message)
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 handle_member_joined(event): line_bot_api.reply_message( event.reply_token, TextSendMessage(text='Got memberJoined event. event={}'.format(event)))
def send_error_message(event): response = login(event.source.user_id) line_bot_api.reply_message(event.reply_token, [TextSendMessage(text="伺服器錯誤或尚未開啟,請在幾分鐘後嘗試!")])
def handle_message(event): profile = line_bot_api.get_profile(event.source.user_id) # 使用者資訊 msg = str(event.message.text).upper().strip() # 使用者輸入的內容 utterance = luis(msg) # Luis 自然語言處理語句 uid = profile.user_id # 發訊者ID Timestamp = calendar.timegm(time.gmtime()) Name = profile.display_name Pic = profile.picture_url dict = { "Name": Name, "Picture": Pic, "UserID": uid, "Msg": msg, 'Timestamp': Timestamp } # 透過回傳至kafka dict可再後端進行分析/調整模型 main_api(dict) # 針對圖文選單所觸發文字進行回復 動作或是文字訊息 if re.match('威士忌推薦', msg): line_bot_api.push_message(uid, quickReplyTextSendMessage) elif re.match('調酒推薦', msg): line_bot_api.push_message(uid, cocktailTextSendMessage) # 文字觸發 推播 Liff 嵌入式網頁 #未來展望:取得jquery +評論+liff.profile資訊+更多功能 elif re.match('酒吧地圖', msg): buttons_template = ButtonsTemplate( title='親愛的使用者', text='請點選下表連結到酒吧', actions=[ uid, URIAction(label="將為您提供酒吧地圖", uri="https://liff.line.me/1654667223-V7pklmP5") ]) template_message = TemplateSendMessage(alt_text='將為您提供酒吧地圖', template=buttons_template) line_bot_api.reply_message(event.reply_token, template_message) elif re.match('尋找酒友', msg): buttons_template = ButtonsTemplate( title='親愛的使用者', text='請點選下表連結到聊天室', actions=[ uid, URIAction(label="將為您提供酒友聊天室", uri="https://liff.line.me/1654667223-3aR1lyPv") ]) template_message = TemplateSendMessage(alt_text='將為您提供酒友聊天室', template=buttons_template) line_bot_api.reply_message(event.reply_token, template_message) elif re.match('關鍵字查詢', msg): line_bot_api.push_message(uid, TextSendMessage("請再輸入任意風味或酒名關鍵字")) elif re.match('熱門排行', msg): line_bot_api.push_message(uid, TextSendMessage("將為您提供熱門排行前五名")) Pop_message = json.load( open("./app/Json_message/popular", 'r', encoding="utf-8")) Pop_demo = FlexSendMessage.new_from_json_dict(Pop_message) line_bot_api.push_message(uid, Pop_demo) elif re.match('好酒貪杯', msg): IOT_message = json.load( open("./app/Json_message/Drink", 'r', encoding="utf-8")) IOT_demo = TemplateSendMessage.new_from_json_dict(IOT_message) line_bot_api.push_message(uid, IOT_demo) elif re.match('倒酒動作', msg): line_bot_api.push_message(uid, TextSendMessage("正在進行倒酒動作")) elif re.match('取消動作', msg): line_bot_api.push_message(uid, TextSendMessage("已為您取消動作")) elif re.match('資策會_EB102_愛心組', msg): line_bot_api.push_message(uid, TextSendMessage("https://ibar3.webnode.tw/")) # 針對調酒風味re.match 文字訊息 作出reply elif re.match("風味:圓熟", msg): # line_bot_api.push_message(uid, TextSendMessage("將為您推薦圓熟調酒......")) Mellow_message = json.load( open("./cocktail_flavor/Mellow", 'r', encoding="utf-8")) Mellow_demo = FlexSendMessage.new_from_json_dict(Mellow_message) line_bot_api.push_message(uid, Mellow_demo) elif re.match("風味:經典", msg): # line_bot_api.push_message(uid, TextSendMessage("將為您推薦經典調酒......")) Classic_message = json.load( open("./cocktail_flavor/Classic", 'r', encoding="utf-8")) Classic_demo = FlexSendMessage.new_from_json_dict(Classic_message) line_bot_api.push_message(uid, Classic_demo) elif re.match("風味:獨創", msg): # line_bot_api.push_message(uid, TextSendMessage("將為您推薦獨創調酒......")) Original_message = json.load( open("./cocktail_flavor/Original", 'r', encoding="utf-8")) Original_demo = FlexSendMessage.new_from_json_dict(Original_message) line_bot_api.push_message(uid, Original_demo) elif re.match("風味:草藥", msg): # line_bot_api.push_message(uid, TextSendMessage("將為您推薦草藥味調酒......")) herbal_message = json.load( open("./cocktail_flavor/herbal", 'r', encoding="utf-8")) herbal_demo = FlexSendMessage.new_from_json_dict(herbal_message) line_bot_api.push_message(uid, herbal_demo) elif re.match("風味:甜", msg): # line_bot_api.push_message(uid, TextSendMessage("將為您推薦甜味調酒......")) Sweet_message = json.load( open("./cocktail_flavor/Sweet", 'r', encoding="utf-8")) Sweet_demo = FlexSendMessage.new_from_json_dict(Sweet_message) line_bot_api.push_message(uid, Sweet_demo) elif re.match("風味:酸", msg): # line_bot_api.push_message(uid, TextSendMessage("將為您推薦酸味調酒......")) Sour_message = json.load( open("./cocktail_flavor/Sour", 'r', encoding="utf-8")) Sour_demo = FlexSendMessage.new_from_json_dict(Sour_message) line_bot_api.push_message(uid, Sour_demo) elif re.match("風味:苦甜", msg): # line_bot_api.push_message(uid, TextSendMessage("將為您推薦苦甜味調酒......")) Bittersweet_message = json.load( open("./cocktail_flavor/Bittersweet", 'r', encoding="utf-8")) Bittersweet_demo = FlexSendMessage.new_from_json_dict( Bittersweet_message) line_bot_api.push_message(uid, Bittersweet_demo) elif re.match("風味:細緻", msg): # line_bot_api.push_message(uid, TextSendMessage("將為您推薦細緻味調酒......")) light_message = json.load( open("./cocktail_flavor/light", 'r', encoding="utf-8")) light_demo = FlexSendMessage.new_from_json_dict(light_message) line_bot_api.push_message(uid, light_demo) elif re.match("風味:和諧", msg): # line_bot_api.push_message(uid, TextSendMessage("將為您推薦和諧味調酒......")) Balanced_message = json.load( open("./cocktail_flavor/Balanced", 'r', encoding="utf-8")) Balanced_demo = FlexSendMessage.new_from_json_dict(Balanced_message) line_bot_api.push_message(uid, Balanced_demo) elif re.match("風味:柑橘", msg): # line_bot_api.push_message(uid, TextSendMessage("將為您推薦柑橘味調酒......")) Orange_message = json.load( open("./cocktail_flavor/Orange", 'r', encoding="utf-8")) Orange_demo = FlexSendMessage.new_from_json_dict(Orange_message) line_bot_api.push_message(uid, Orange_demo) elif re.match("風味:水果香", msg): # line_bot_api.push_message(uid, TextSendMessage("將為您推薦果香味調酒......")) Fruity_message = json.load( open("./cocktail_flavor/Fruity", 'r', encoding="utf-8")) Fruity_demo = FlexSendMessage.new_from_json_dict(Fruity_message) line_bot_api.push_message(uid, Fruity_demo) # 關鍵字搜尋,先進行酒名關鍵字查詢、再進行風味tag搜尋之後才進行OLAMI模組回復使用者 # 先透過關鍵字名稱找尋有無相關data 若無再利用標籤查詢data 再沒有則利用olami查詢是否有相關AI數據庫資訊 else: try: data = name_api(msg) flexSendMessage1 = FlexSendMessage.new_from_json_dict(data) line_bot_api.push_message(uid, TextSendMessage("請稍等…將為您進行搜尋")) line_bot_api.push_message(uid, flexSendMessage1) except IndexError: data2 = tag_api(utterance) if not len(data2['contents']['contents']) == 0: flexSendMessage2 = FlexSendMessage.new_from_json_dict(data2) line_bot_api.push_message(uid, TextSendMessage("請稍等…將為您進行搜尋")) line_bot_api.push_message(uid, flexSendMessage2) else: line_bot_api.reply_message( event.reply_token, TextSendMessage(text=Olami().nli(event.message.text)))
def default_reply(event): name = line_bot_api.get_profile(event.source.user_id).display_name line_bot_api.reply_message(event.reply_token, TextSendMessage(text=f"Hello {name}!"))