def detect_json_array_to_new_message_array(fileName): # 開啟檔案,轉成json with open(fileName, 'r', encoding="utf-8") as f: jsonArray = json.load(f) # 解析json returnArray = [] for jsonObject in jsonArray: # 讀取其用來判斷的元件 message_type = jsonObject.get('type') # 轉換 if message_type == 'text': returnArray.append(TextSendMessage.new_from_json_dict(jsonObject)) elif message_type == 'imagemap': returnArray.append(ImagemapSendMessage.new_from_json_dict(jsonObject)) elif message_type == 'template': returnArray.append(TemplateSendMessage.new_from_json_dict(jsonObject)) elif message_type == 'image': returnArray.append(ImageSendMessage.new_from_json_dict(jsonObject)) elif message_type == 'sticker': returnArray.append(StickerSendMessage.new_from_json_dict(jsonObject)) elif message_type == 'audio': returnArray.append(AudioSendMessage.new_from_json_dict(jsonObject)) elif message_type == 'location': returnArray.append(LocationSendMessage.new_from_json_dict(jsonObject)) elif message_type == 'flex': returnArray.append(FlexSendMessage.new_from_json_dict(jsonObject)) elif message_type == 'video': returnArray.append(FlexSendMessage.new_from_json_dict(jsonObject)) # 回傳 return returnArray
def handle_message(event): contents = [] flex_ysdm = FlexSendMessage.new_from_json_dict(ysdm.get_ysdm_message()) flex_ymst = FlexSendMessage.new_from_json_dict(ymst.get_ymst_message()) flex_bubble = FlexSendMessage.new_from_json_dict(bubble.get_message_bubble()) contents.append(flex_ysdm) # contents.append(flex_ymst) contents.append(flex_bubble) # line_bot_api.reply_message(event.reply_token, TextSendMessage(text=event.message.text)) line_bot_api.reply_message(event.reply_token, messages=contents)
def send_push_message(channel_access_token, flex_obj, user_id): """ プッシュメッセージ送信処理 Parameters ---------- channel_access_token:str 短期チャネルアクセストークン flex_obj:dict メッセージ情報 user_id:str 送信先のユーザーI Returns ------- response:dict レスポンス情報 """ try: line_bot_api = LineBotApi( channel_access_token) # flexdictを生成する flex_obj = FlexSendMessage.new_from_json_dict(flex_obj) user_id = user_id response = line_bot_api.push_message(user_id, flex_obj) except LineBotApiError as e: logger.error( 'Got exception from LINE Messaging API: %s\n' % e.message) for m in e.error.details: logger.error(' %s: %s' % (m.property, m.message)) raise Exception except InvalidSignatureError as e: logger.error('Occur Exception: %s', e) raise Exception return response
def handle_message(event): container_obj = FlexSendMessage.new_from_json_dict(payload) if (event.message.text == "start" or event.message.text == "Start" or event.message.text == "START" or event.message.text == "スタート" or event.message.text == "すたーと" or event.message.text == "start " or event.message.text == "start " or event.message.text == "Start " or event.message.text == "Start "): line_bot_api.reply_message(event.reply_token, TextSendMessage(text=string_chat)) line_bot_api.push_message('U86e7917ddb1d7ac485320370f87b0f5e', messages=container_obj) if event.message.text == "おはようございます": line_bot_api.reply_message(event.reply_token, TextSendMessage(text=correct_chat)) elif (event.message.text == "いただきます" or event.message.text == "こんにちは"): line_bot_api.reply_message(event.reply_token, TextSendMessage(text=miss_chat)) elif (event.message.text == "わからない"): line_bot_api.reply_message(event.reply_token, TextSendMessage(text=no_idea)) else: line_bot_api.reply_message(event.reply_token, TextSendMessage(text="項目から選んでください"))
def detect_json_array_to_new_message_array(fileName): ''' message_type 判斷器 讀取指定的 json檔,解析成不同格式的 SendMessage ''' with open(fileName, 'r', encoding='utf8') as f: jsonArray = json.load(f) newmessage_Array = [] for jsonObject in jsonArray: message_type = jsonObject.get('type') if message_type == 'text': newmessage_Array.append(TextSendMessage.new_from_json_dict(jsonObject)) elif message_type == 'sticker': newmessage_Array.append(StickerSendMessage.new_from_json_dict(jsonObject)) elif message_type == 'image': newmessage_Array.append(ImageSendMessage.new_from_json_dict(jsonObject)) elif message_type == 'video': newmessage_Array.append(VideoSendMessage.new_from_json_dict(jsonObject)) elif message_type == 'audio': newmessage_Array.append(AudioSendMessage.new_from_json_dict(jsonObject)) elif message_type == 'location': newmessage_Array.append(LocationSendMessage.new_from_json_dict(jsonObject)) elif message_type == 'imagemap': newmessage_Array.append(ImagemapSendMessage.new_from_json_dict(jsonObject)) elif message_type == 'template': newmessage_Array.append(TemplateSendMessage.new_from_json_dict(jsonObject)) elif message_type == 'flex': newmessage_Array.append(FlexSendMessage.new_from_json_dict(jsonObject)) return newmessage_Array
def detect_json_array_to_new_message_array(fn): with open(fn, encoding='utf8') as f: jsonArray = json.load(f) returnArray = [] for jsonObject in jsonArray: message_type = jsonObject.get('type') if message_type == 'text': returnArray.append(TextSendMessage.new_from_json_dict(jsonObject)) elif message_type == 'imagemap': returnArray.append(ImagemapSendMessage.new_from_json_dict(jsonObject)) elif message_type == 'template': returnArray.append(TemplateSendMessage.new_from_json_dict(jsonObject)) elif message_type == 'image': returnArray.append(ImageSendMessage.new_from_json_dict(jsonObject)) elif message_type == 'sticker': returnArray.append(StickerSendMessage.new_from_json_dict(jsonObject)) elif message_type == 'audio': returnArray.append(AudioSendMessage.new_from_json_dict(jsonObject)) elif message_type == 'location': returnArray.append(LocationSendMessage.new_from_json_dict(jsonObject)) elif message_type == 'flex': returnArray.append(FlexSendMessage.new_from_json_dict(jsonObject)) return returnArray
def handle_follow(event): line_bot_api.unlink_rich_menu_from_user(event.source.user_id) message = "{}{}".format( '友だち追加ありがとうございます。オフィスの作業を効率化しよう!', '\n※このアカウントは空想上のプロトタイプなので、実際の挙動とは異なります') with open('regist_message.json', 'r', encoding='utf-8') as f: regist_form_content = json.load(f) regist_form_content['footer']['contents'][0]['action']['uri'] \ = 'https://liff.line.me/{}'.format(REGIST_LIFF_ID) regist_form_message = FlexSendMessage.new_from_json_dict({ "type": "flex", "altText": "アカウントの連携", "contents": regist_form_content }) line_bot_api.reply_message( event.reply_token, [ TextSendMessage(text=message), regist_form_message, StickerSendMessage( package_id=11537, sticker_id=52002739 ) ] )
def send_flex_message(jsonfile): try: json_open = open(jsonfile, "r") json_load = json.load(json_open) container_obj = FlexSendMessage.new_from_json_dict(json_load) line_bot_api.push_message(line_user_key, messages=container_obj) except Exception as e: print("=== エラー内容 ===") print(e)
def message_text(event): if event.message.text == "プラン": # Flex Message flex_obj = FlexSendMessage.new_from_json_dict( get_plan_flex_msg(event.source.user_id, json_data)) line_bot_api.reply_message(event.reply_token, messages=flex_obj) else: line_bot_api.reply_message(event.reply_token, TextSendMessage(text=event.message.text))
def process_text_message(event): if event.message.text == "#qrcode": # 傳送QR-code圖片 # 讀取json jsonArray = json.load( open("data/message/004/reply.json", encoding="utf-8")) flex_message = FlexSendMessage.new_from_json_dict(jsonArray) # 消息發送 line_bot_api.reply_message(event.reply_token, [flex_message])
def LineLogin(replytoken, state="Line11107b"): url = 'https://access.line.me/oauth2/v2.1/authorize?response_type=code&client_id={1}&redirect_uri={2}/LineBot-API/callbackLogin&state={0}&scope=profile'.format( state, CPS_MessageAPI.cilent_id, CPS_MessageAPI.myselfURL) print(url) payload = { "type": "flex", "altText": "Flex Message", "contents": { "type": "bubble", "direction": "ltr", "header": { "type": "box", "layout": "vertical", "contents": [{ "type": "text", "text": "Login認証リンク", "margin": "none", "size": "xxl", "align": "center", "weight": "bold", "color": "#000000" }, { "type": "separator" }] }, "body": { "type": "box", "layout": "vertical", "action": { "type": "uri", "label": "test", "uri": url }, "contents": [{ "type": "image", "url": "https://raw.githubusercontent.com/NOGU626/OriginalBots/master/btn_login_base.png", "margin": "none", "align": "center", "gravity": "top", "size": "3xl", "aspectRatio": "3:1" }] } } } line_bot_api = CPS_MessageAPI.line_bot_api container_obj = FlexSendMessage.new_from_json_dict(payload) line_bot_api.reply_message(replytoken, messages=container_obj)
def handle_message(event): global set_ global stoptime global stoppoint msg_from = event.reply_token msg_text = event.message.text msg_id = event.message.id user_id = event.source.user_id if msg_text == '自己紹介': data = syoukai() flex = {"type": "flex", "altText": "スタート", "contents": data} container_obj = FlexSendMessage.new_from_json_dict(flex) line_bot_api.reply_message(msg_from, messages=container_obj) return if msg_text == 'Bot作例': data = portfolio() flex = {"type": "flex", "altText": "スタート", "contents": data} container_obj = FlexSendMessage.new_from_json_dict(flex) line_bot_api.reply_message(msg_from, messages=container_obj) return
def pay_confirm(): transaction_id = int(request.args.get('transactionId')) # Datastore client = datastore.Client() key = client.key('PayEntity', transaction_id) entity = client.get(key) user_id = entity.get("user_id") product_name = entity.get("product_name") amount = float(entity.get("amount")) currency = entity.get("currency") # Confirm response = api.confirm(transaction_id, amount, currency) logger.debug(response) # push message user_id = entity.get("user_id") messages = { 'type': 'flex', 'altText': 'お支払いを完了しました。', 'contents': { 'type': 'bubble', 'header': { 'type': 'box', 'layout': 'vertical', 'contents': [{ 'type': 'text', 'text': product_name, 'size': 'md', 'weight': 'bold' }, { 'type': 'text', 'text': 'お支払い完了しました。💰', 'size': 'md', 'weight': 'bold' }, { 'type': 'text', 'text': 'ありがとうございました。🌟', 'size': 'md', 'weight': 'bold' }] } } } flex_obj = FlexSendMessage.new_from_json_dict(messages) line_bot_api.push_message(user_id, messages=flex_obj) # Datastore client.delete(key) return "お支払いありがとうございました!"
def handle_image_message(event): sample_data = FlexSendMessage.new_from_json_dict(payload_data.payload) push_img_id = event.message.id # 投稿された画像IDを取得 message_content = line_bot_api.get_message_content( push_img_id) # LINEサーバー上に自動保存された画像を取得 # image = BytesIO(message_content.content) push_img = b"" for chunk in message_content.iter_content(): push_img += chunk #画像をiter_contentでpush_imgに順次代入 push_img = base64.b64encode(push_img) # APIに通すためbase64エンコード msg = f.search_image(push_img) line_bot_api.reply_message(event.reply_token, [TextSendMessage(text=msg), sample_data])
def TA_Template(autourName, message): line_bot_api = LineBotApi(LineBotToken) payload = { "type": "flex", "altText": "Flex Message", "contents": { "type": "bubble", "direction": "ltr", "hero": { "type": "image", "url": "https://dad41150.ngrok.io/images/CPSLabLogo_2019_800.png", "size": "full", "aspectRatio": "16:9", "aspectMode": "fit", "backgroundColor": "#FFFFFF" }, "body": { "type": "box", "layout": "vertical", "contents": [{ "type": "text", "text": "@" + autourName, "size": "lg", "align": "center" }, { "type": "text", "text": "TAチャンネルのメッセージ", "color": "#988484" }, { "type": "separator" }, { "type": "text", "text": message, "flex": 0, "align": "start", "wrap": True }] } } } container_obj = FlexSendMessage.new_from_json_dict(payload) # line_bot_api.push_message("U12c4f3d6dd5cfc3c9ec79975b6a6684d", messages=container_obj) for i in CatcheMaterLineID(): line_bot_api.push_message(i, messages=container_obj)
def create_flexmessage(config, railways_map): railways = railways_map.delay_railways flexmessage = json.load(open(config['LINE']['flexmessage_json'], 'r')) url = flexmessage["contents"]["hero"]["url"] dirname = os.path.dirname(url) basename = os.path.basename(railways_map.png) flexmessage["contents"]["hero"]["url"] = os.path.join(dirname, basename) if railways == []: tmp_dict = {"type": "text", "text": '遅延はありません'} flexmessage["contents"]["body"]["contents"].append(tmp_dict) else: tmp_dict = {"type": "text", "text": '遅延路線:'} flexmessage["contents"]["body"]["contents"].append(tmp_dict) # 変換 railways = replace_railway(railways, config['MAP']['railway_path']) # メッセージ追加 for railway in railways: tmp_dict = {"type": "text", "text": ' ' + railway} flexmessage["contents"]["body"]["contents"].append(tmp_dict) map_html = config['MAP']['html'] with open(map_html, mode='r+', encoding='utf-8') as f: soup = BeautifulSoup(f.read(), 'html.parser') image_tag = soup.new_tag('meta', property="og:image", content=railways_map.png) title_tag = soup.new_tag('meta', property="og:title", content="TrainInformation") description_tag = soup.new_tag('meta', property="og:description", content="please tap this message") soup.find('head').append(image_tag) soup.find('head').append(title_tag) soup.find('head').append(description_tag) with open(map_html, 'w') as f: f.write(str(soup)) container_obj = FlexSendMessage.new_from_json_dict(flexmessage) line_bot_api = LineBotApi(os.environ['LINE_ACCESS_TOKEN_TEST']) line_bot_api.broadcast(messages=container_obj) return True
def handle_message(event): #https://developers.line.biz/console/channel/1653365219/basic/ #LINEコンソールのwebhook URL のエラー回避用. if event.reply_token == "00000000000000000000000000000000": return if event.message.text == "お気に入り店舗の登録": #ケース:お気に入り店舗の検索 ### # お気に入りの店舗の検索&登録 ### return elif event.message.text == "お気に入り店舗からバーゲン商品を検索": #ケース:お気に入り店舗からのバーゲン情報入手 ### # お気にい入り店舗からのバーゲン情報入手 の処理 ### return if event.message.text == "hello": payload = None container_obj = FlexSendMessage.new_from_json_dict(payload) line_bot_api.reply_message(event.reply_token, messages=container_obj)
def make_flex_message(df): job_listObject_Json = json.load(open('LineBotJsonFile/job_ListObject.json',)) for i in range(9): with open("./LineBotJsonFile/job_list_Message.json", encoding="utf8") as json_file: # loads=>把文字轉換成物件(字串跟字典組成) // dumps=>把物件轉成文字 json_str = json_file.read() # job_item_Message_Json = json.load(open('LineBotJsonFile/job_list_Message.json',)) # df.values[i][0]# json_str = json_str.replace('工作名稱',str(df['工作職稱'].values[i])) json_str = json_str.replace('公司名稱',str(df['公司名稱'].values[i])) if (str(df['公司鏈結'].values[i]) == '' ): json_str = json_str.replace('https://www.company_url.com/',str(NotFoundPage)) else: json_str = json_str.replace('https://www.company_url.com/',str(df['公司鏈結'].values[i])) if (str(df['公司標記'].values[i]) == ''): json_str = json_str.replace('https://www.company_icon.com/',str(NotFoundPage)) else: json_str = json_str.replace('https://www.company_icon.com/',str(df['公司標記'].values[i])) json_str = json_str.replace('工作待遇',"工作待遇:"+str(df['工作待遇'].values[i])) json_str = json_str.replace('工作性質',"工作性質:"+str(df['工作性質'].values[i])) json_str = json_str.replace('休假制度',"休假制度:"+str(df['休假制度'].values[i])) json_str = json_str.replace('需求人數',"需求人數"+str(df['需求人數'].values[i])) json_str = json_str.replace('工作性質',"工作性質:"+str(df['工作性質'].values[i])) if (str(df['公司照片'].values[i]) == ''): json_str = json_str.replace('https://www.company_envImg.com/',str(NotFoundPage)) else: json_str = json_str.replace('https://www.company_envImg.com/',str(df['公司照片'].values[i])) json_str = json_str.replace('https://Job_Url.com',str(df['連結路徑'].values[i])) obj = json.loads(json_str) job_listObject_Json['contents']['contents'].append(obj) job_seeMore_Message_Json = json.load(open('LineBotJsonFile/job_seeMore.json',)) job_listObject_Json['contents']['contents'].append(job_seeMore_Message_Json) print(job_listObject_Json) return FlexSendMessage.new_from_json_dict(job_listObject_Json)
def handle_location(event): latitude = event.message.latitude longitude = event.message.longitude results = get_shops_data(latitude, longitude, "convenience_store", 200) shops = Shops(results["results"]) shopIDs = [] for shop in shops: shopIDs.append(shop.place_id) print(f"shopIDs:{shopIDs}") has_shops = dict() #廃棄を持っているお店を格納する i = 0 for shopID in shopIDs: sql = f"SELECT storeid,COUNT(CASE WHEN jancode LIKE '1%' THEN 1 END), COUNT(CASE WHEN jancode LIKE '2%' THEN 2 END), COUNT (CASE WHEN jancode LIKE '3%' THEN 3 END) FROM stores WHERE storeid = '{shopID}' AND expirationdata < current_timestamp GROUP BY storeid;" ##ここではバーゲン条件を with conn.cursor() as cur: cur.execute(sql) #executeメソッドでクエリを実行。 r = cur.fetchall() print(r) if [] != r: has_shops[r[0][0]] = [r[0][1], r[0][2], r[0][3]] i += 1 if len(has_shops) == 0: line_bot_api.reply_message( event.reply_token, TextSendMessage( text="現在、お探ししたところバーゲン商品がお近くにございません。\n時間を置いてもう一度お試しください。")) elif len(has_shops): # 1以上 print("-------") payload = shops_json(shops, has_shops) payload = json.dumps(payload) payload = json.loads(payload) print(payload) container_obj = FlexSendMessage.new_from_json_dict(payload) line_bot_api.reply_message(event.reply_token, messages=container_obj)
def handle_message(event): id = event.source.user_id #LINEのユーザーIDの取得 profile = line_bot_api.get_profile(id) name = profile.display_name uname = name[0] + name[-1] + "たろ社長" txt = event.message.text if txt == "ガチャ!": items_left = application.count_valid_items() if items_left < 3: payload = my_flexmsg.noItems() else: kanji, result = application.do_gacha(name, uname, isLINE=True) payload = my_flexmsg.get_result(uname, kanji, result, isRanking=False) # msg = f"残り {items_left}" msg = "" elif txt == "決算!": my_function.checkDate() isDaily = random.choice([True, False]) results = application.get_scores(isDaily=isDaily) payload = my_flexmsg.get_results(results, isRanking=True) msg = "決算【デイリー】" if isDaily else "決算【通期】" else: msg = "" payload = my_flexmsg.elsemsg() if msg != "": line_bot_api.reply_message(event.reply_token, TextSendMessage(text=msg)) container_obj = FlexSendMessage.new_from_json_dict(payload) line_bot_api.push_message(id, messages=container_obj)
def handle_message(event): PATH = "./place.txt" if os.path.isfile(PATH): with open(PATH) as f: place = f.read() keyword = event.message.text if keyword == "なし": keyword = "" search = tabelog.Tabelog(place, keyword) reply_text = search.start() os.remove(PATH) else: with open(PATH, mode='w') as f: place = event.message.text f.write(place) reply_text = "場所以外にキーワードは何かありますか?特に無ければ「なし」を入れてください。" #textがjsonタイプかtextタイプかで動作を分ける。 if type(reply_text) == dict: container_obj = FlexSendMessage.new_from_json_dict(reply_text) line_bot_api.reply_message(event.reply_token, container_obj) else: line_bot_api.reply_message(event.reply_token, TextSendMessage(text=reply_text))
def on_postback(event): reply_token = event.reply_token user_id = event.source.user_id postback_msg = event.postback.data if "趣味" in postback_msg: data = syumi() flex = {"type": "flex", "altText": "趣味一覧", "contents": data} container_obj = FlexSendMessage.new_from_json_dict(flex) line_bot_api.reply_message(reply_token, messages=container_obj) if "動画" in postback_msg: data = douga() flex = {"type": "flex", "altText": "動画編集について", "contents": data} container_obj = FlexSendMessage.new_from_json_dict(flex) line_bot_api.reply_message(reply_token, messages=container_obj) if "写真" in postback_msg: data = syasin() flex = {"type": "flex", "altText": "写真撮影について", "contents": data} container_obj = FlexSendMessage.new_from_json_dict(flex) line_bot_api.reply_message(reply_token, messages=container_obj) if "音楽" in postback_msg: data = music() flex = {"type": "flex", "altText": "音楽制作について", "contents": data} container_obj = FlexSendMessage.new_from_json_dict(flex) line_bot_api.reply_message(reply_token, messages=container_obj) if "プログラミング" in postback_msg: data = program() flex = {"type": "flex", "altText": "プログラミングについて", "contents": data} container_obj = FlexSendMessage.new_from_json_dict(flex) line_bot_api.reply_message(reply_token, messages=container_obj) if "写真" in postback_msg: data = syasin() flex = {"type": "flex", "altText": "写真撮影について", "contents": data} container_obj = FlexSendMessage.new_from_json_dict(flex) line_bot_api.reply_message(reply_token, messages=container_obj)
def process_postback_event(event): model_dict = {'classify_14tree': '影像辨識:14種樹', 'classify_8leaf': '影像辨識:8種葉', 'objdetect_14tree': '物件偵測:14種樹', 'objdetect_8leaf': '物件偵測:8種葉', 'classify_bauya': '影像辨識:羊蹄甲3種葉'} db.increase(event.source.user_id, 'm') q = parse_qs(event.postback.data) if 'model' in q: m = q.get('model')[0] if m in model_dict: cameraQuickRB = QuickReplyButton(action=CameraAction(label="拍照")) cameraRollQRB = QuickReplyButton(action=CameraRollAction(label="讀檔")) quickReplyList = QuickReply(items = [cameraRollQRB, cameraQuickRB]) fn = '<<fn_' + m + '>>' quickReplyTextSendMessage = get_textmessage_reply(cfg['reply_path'], fn, event.source.user_id, db) quickReplyTextSendMessage[0].quick_reply = quickReplyList line_bot_api.reply_message(event.reply_token, quickReplyTextSendMessage) db.markModel(event.source.user_id, m) elif 'page' in q: page = q.get('page')[0] msg, key = get_textmessage_reply(cfg['reply_path'], page, event.source.user_id, db, True) msg = msg[0] # get_textmessage_reply() returned list if 'category' in q: cat = q.get('category')[0] if cat == 'trees': # page=<<AS>>&category=trees items = [QuickReplyButton(action=PostbackAction(label='<<', data='page=<<trees>>'))] k = trees_dict[key] if k > 0: p = f'page=<<{trees[k-1]}>>&category=trees' items.append(QuickReplyButton(action=PostbackAction(label='<', data=p))) if k < len(trees)-1: f = f'page=<<{trees[k+1]}>>&category=trees' items.append(QuickReplyButton(action=PostbackAction(label='>', data=f))) msg.quickReply = QuickReply(items=items) elif cat == 'leaves': pass line_bot_api.reply_message(event.reply_token, msg) elif 'action' in q: a = q.get('action')[0] msg = None if a == 'whoami': t = q.get('target')[0] if 'target' in q else event.source.user_id u = db.getUser(t) msg = FlexSendMessage.new_from_json_dict(create_whoami(u)) if 'callback' in q: cb = (q.get('callback')[0]).replace('^', '&') msg.quickReply = QuickReply(items=[QuickReplyButton(action=PostbackAction(label='<', data=cb))]) elif a == 'show_email': msg = TextSendMessage.new_from_json_dict( {'type': 'text', 'text': 'Enos Chou, feel free to contact me\[email protected]'}) elif a == 'count_usage': criterion = 1 user_amt, user_today, usage_amt = db.countUsage(event.source.user_id, criterion=criterion) if user_amt is 0: msg = TextSendMessage.new_from_json_dict({"type": "text", "text": f'你還不是 {admin[criterion]}'}) else: msg = TextSendMessage.new_from_json_dict( {'type': 'text', 'text': f'用戶總數: {user_amt} 人\n今日新增: {user_today} 人\n今日使用: {usage_amt} 人'}) elif a == 'list': AMOUNT = cfg['show_maxuser'] alt = {'last':'註', 'visit':'訪', 'usage':'量'} criterion = 1 mode = q.get('mode')[0] start = (int)(q.get('start')[0]) # must be cast to int, or it would be str users = db.getUsers(event.source.user_id, mode, start, AMOUNT, criterion) u_len = len(users) msg = FlexSendMessage.new_from_json_dict(create_list(users, alt[mode], start, u_len, event.postback.data)) items = [] if u_len > 0: if start > 0: x = start - AMOUNT # cehck previus button p = f'action=list&mode={mode}&start={x if x > 0 else 0}' items.append(QuickReplyButton(action=PostbackAction(label='<', data=p))) if x > 0: # check first page button f = f'action=list&mode={mode}&start=0' items.insert(0, QuickReplyButton(action=PostbackAction(label='<<', data=f))) if u_len == AMOUNT and (start+u_len < users[-1][-1]): # check next button n = f'action=list&mode={mode}&start={start+u_len}' items.append(QuickReplyButton(action=PostbackAction(label='>', data=n))) nn = f'action=list&mode={mode}&start={AMOUNT*((users[-1][-1]-1)//AMOUNT)}' items.append(QuickReplyButton(action=PostbackAction(label='>>', data=nn))) for a in alt: if mode != a: rb = QuickReplyButton(action=PostbackAction(label=alt[a], data=f'action=list&mode={a}&start=0')) items.append(rb) msg.quickReply = QuickReply(items=items) elif a == 'reload': criterion = 2 u = db.getUser(event.source.user_id) # user_id, display_name, picture_url, admin if u[3] >= criterion: if 'scope' in q: s = q.get('scope')[0] if s == 'db': r = db.reload(event.source.user_id, cfg['mysql_ip'], cfg['mysql_db'], cfg['mysql_id'], cfg['mysql_pwd'], criterion) desc = ['失敗!', '完成'] msg = TextSendMessage.new_from_json_dict({"type": "text", "text": f'DB重連{desc[r]}'}) elif s == 'profile': pp = [] uids = db.getUids() for uid in uids: try: p = line_bot_api.get_profile(uid) # sometimes failed due to UID not found by A pp.append([p.display_name, p.picture_url, p.user_id]) except Exception as e1: print(e1) print(f'{uid} passed due to exception!') db.updateUsers(pp) msg = TextSendMessage.new_from_json_dict({"type": "text", "text": '更新用戶資料完畢'}) elif s == 'richmenu': uids = db.getUids() line_bot_api.link_rich_menu_to_users(uids, cfg['richmenu_id']) msg = TextSendMessage.new_from_json_dict({"type": "text", "text": '重置圖文選單完畢'}) else: msg = get_textmessage_reply(cfg['reply_path'], '<<background>>', event.source.user_id, db)[0] rb1 = QuickReplyButton(action=PostbackAction(label='重連DB', data='action=reload&scope=db')) rb2 = QuickReplyButton(action=PostbackAction(label='更新用戶', data='action=reload&scope=profile')) rb3 = QuickReplyButton(action=PostbackAction(label='重置選單', data='action=reload&scope=richmenu')) msg.quickReply = QuickReply(items=[rb1, rb2, rb3]) else: msg = TextSendMessage.new_from_json_dict({"type": "text", "text": f'你還不是 {admin[criterion]}'}) line_bot_api.reply_message(event.reply_token, msg)
def SendLineFileLink(FileURL, ChannelName, FileTitle): line_bot_api = LineBotApi(LineBotToken) payload = { "type": "flex", "altText": "Flex Message", "contents": { "type": "bubble", "direction": "ltr", "header": { "type": "box", "layout": "vertical", "action": { "type": "uri", "uri": FileURL }, "contents": [{ "type": "text", "text": ChannelName, "size": "lg", "align": "center" }] }, "body": { "type": "box", "layout": "vertical", "action": { "type": "uri", "uri": FileURL }, "contents": [{ "type": "text", "text": FileTitle, "align": "start", "weight": "regular", "color": "#C3B3B3" }, { "type": "separator" }] }, "footer": { "type": "box", "layout": "horizontal", "action": { "type": "uri", "uri": FileURL }, "contents": [{ "type": "text", "text": "メッセージをクリックすることでDownloadできます", "size": "xs", "align": "center", "wrap": True }] } } } container_obj = FlexSendMessage.new_from_json_dict(payload) line_bot_api.push_message("U12c4f3d6dd5cfc3c9ec79975b6a6684d", messages=container_obj)
def handle(event, rich_menu_id01=rich_menu_id01, rich_menu_id02=rich_menu_id02, today=today): user_id = event.source.user_id profile = line_bot_api.get_profile(user_id) msg_content = event.message.text check = checkdate(user_id) print(check[0]) #詢問基本資料================================================================= if (event.message.text.find('一切都很好,放馬過來吧!ᕦ(ò_óˇ)ᕤ' or '健康') != -1): start_textmessage = '瞭解~那麼我們開始今天的練習吧(^_−)−☆ 請點擊下方的圖文選單' line_bot_api.reply_message(event.reply_token, TextSendMessage(text=start_textmessage)) elif (event.message.text.find('啊啊⋯有點累' or '不太好') != -1): start_textmessage = '瞭解~請不要太勉強自己,適度動一動即可。那麼讓我們開始今天的練習吧(^_−)−☆ 請點擊下方的圖文選單' line_bot_api.reply_message(event.reply_token, TextSendMessage(text=start_textmessage)) #健身影片推薦================================================================= elif (event.message.text.find('我想練胸肌') != -1): with open("./flex/c_push-up.txt", "r", encoding='utf8') as jsonfile: json_object = json.load(jsonfile) FM = FlexSendMessage.new_from_json_dict(json_object) line_bot_api.reply_message(event.reply_token, FM) elif (event.message.text.find('我要消除鮪魚肚') != -1): with open(os.path.join(os.getcwd(), "flex", "a_10mins_woman.txt"), "r", encoding='utf8') as jsonfile: json_object = json.load(jsonfile) FM = FlexSendMessage.new_from_json_dict(json_object) line_bot_api.reply_message(event.reply_token, FM) elif (event.message.text.find('想當背影Killer') != -1): ''' 用JSON生成模板消息 讀取本地的json檔案- json.load 取得json物件 將json物件放入TemplateSendMessage的new_from_json_dict方法,並存在變數內即可 ''' print("有進入elif迴圈") with open(os.path.join(os.getcwd(), "flex", "b_all_back_movement.json"), "r", encoding='utf8') as jsonfile: json_object = json.load(jsonfile) b01 = FlexSendMessage.new_from_json_dict(json_object) # with open(os.path.join(os.getcwd(),"flex","b_bird-dog.json"), "r", encoding='utf8') as jsonfile: # json_object = json.load(jsonfile) # b02 = FlexSendMessage.new_from_json_dict(json_object) # with open(os.path.join(os.getcwd(),"flex","b_10mins_woman.json"), "r", encoding='utf8') as jsonfile: # json_object = json.load(jsonfile) # b03 = FlexSendMessage.new_from_json_dict(json_object) # line_bot_api.reply_message(event.reply_token,[b01, b02, b03]) line_bot_api.reply_message(event.reply_token, b01) elif (event.message.text.find('我想練臀腿') != -1): # elif ('我想練臀腿') in controller.message.text: with open(os.path.join(os.getcwd(), "flex", "a_10mins_woman.txt"), "r", encoding='utf8') as jsonfile: json_object = json.load(jsonfile) FM = FlexSendMessage.new_from_json_dict(json_object) line_bot_api.reply_message(event.reply_token, FM) with open("flex/h_12mins_woman.json", "r", encoding='utf8') as jsonfile: json_object = json.load(jsonfile) FM = FlexSendMessage.new_from_json_dict(json_object) line_bot_api.reply_message(event.reply_token, FM) #切換圖文選單================================================================= elif ('編輯紀錄') == (event.message.text): line_bot_api.link_rich_menu_to_user(user_id=user_id, rich_menu_id=rich_menu_id02) elif ('回主選單') in (event.message.text): line_bot_api.link_rich_menu_to_user(user_id=user_id, rich_menu_id=rich_menu_id01) #運動日誌-新增紀錄================================================================= ## 新增紀錄-1 # elif ('新增紀錄') == (event.message.text): elif (event.message.text) == ('新增紀錄'): textmessage = '請選擇運動日期~٩(๑❛ᴗ❛๑)۶' replydatepicker = buttons_templatenewdate( today, initial, max, min) #\[TextSendMessage(text=textmessage) line_bot_api.reply_message(event.reply_token, [replydatepicker]) # 查詢紀錄-1 =>查詢/更新/刪除 =>選擇日期 flex.template_msg.buttons_template=>postback # elif ('查詢紀錄') or ('更新紀錄') or(' 刪除紀錄') in (event.message.text): elif ('查詢紀錄') == (event.message.text): line_bot_api.reply_message( event.reply_token, buttons_template(today, user_id, initial, max, min)) elif ('更新紀錄') == (event.message.text): line_bot_api.reply_message( event.reply_token, buttons_template(today, user_id, initial, max, min)) elif ('刪除紀錄') == (event.message.text): line_bot_api.reply_message( event.reply_token, buttons_template(today, user_id, initial, max, min)) # 目前狀態: (呈現本周運動次數&日誌) elif '目前狀態' == event.message.text: range = 7 range, count, table, firstday, today = count_exercise(user_id, range) textmessage = f"{table}\n\n建議手機轉橫向查看表格(。・ω・。)" textmessage02 = f"{firstday}至\t{today}間\n您本周運動{count}次(*'ω'*)\n以上為本周運動日誌" line_bot_api.reply_message(event.reply_token, [ TextSendMessage(text=textmessage), TextSendMessage(text=textmessage02) ]) elif '不用了' == event.message.text: pass ### 運動日誌================================================================= # 查詢紀錄 日期確認: database.usertable.checkdate(user_id) elif '對,確認查詢~' == event.message.text: startdate = checkdate(user_id)[1] enddate = checkdate(user_id)[2] table = search_exerciselog(user_id, startdate, enddate) textmessage = f" {startdate} 至 {enddate} 運動日誌:\n{table}\n建議手機轉橫向查看表格(。・ω・。)" text_quickreply0 = QuickReplyButton( action=MessageAction(label="更新紀錄", text="我要更新紀錄~")) text_quickreply1 = QuickReplyButton( action=MessageAction(label="刪除紀錄", text="我要刪除紀錄~")) text_quickreply2 = QuickReplyButton( action=MessageAction(label="不用了", text="不用了")) quick_reply_array = QuickReply( items=[text_quickreply0, text_quickreply1, text_quickreply2]) reply_text_message = TextSendMessage(text=textmessage, quick_reply=quick_reply_array) line_bot_api.reply_message(event.reply_token, [reply_text_message]) deletedate(user_id) elif '我要更新紀錄~' == event.message.text: textmessage = "請複製格式,並輸入該筆紀錄的id & 內容~~" textmessage02 = "**範例**\n更新=99(請填入id),內容:今天終於有時間運動惹~開心(*´∀`)♪(請填入日誌內容)" textmessage03 = "**格式**\n更新=,內容:" text_quickreply0 = QuickReplyButton( action=MessageAction(label="重新查詢", text="查詢紀錄")) text_quickreply1 = QuickReplyButton( action=MessageAction(label="回主選單", text="回主選單")) quick_reply_array = QuickReply( items=[text_quickreply0, text_quickreply1]) line_bot_api.reply_message(event.reply_token, [ TextSendMessage(text=textmessage02), TextSendMessage(text=textmessage03), TextSendMessage(text=textmessage, quick_reply=quick_reply_array) ]) elif '我要刪除紀錄~' == event.message.text: textmessage = "請複製格式,並輸入該筆紀錄的id~~" textmessage02 = "**範例**\n刪除=99(請填入id)" textmessage03 = "**格式**\n刪除=" text_quickreply0 = QuickReplyButton( action=MessageAction(label="重新查詢", text="查詢紀錄")) text_quickreply1 = QuickReplyButton( action=MessageAction(label="回主選單", text="回主選單")) quick_reply_array = QuickReply( items=[text_quickreply0, text_quickreply1]) line_bot_api.reply_message(event.reply_token, [ TextSendMessage(text=textmessage02), TextSendMessage(text=textmessage03), TextSendMessage(text=textmessage, quick_reply=quick_reply_array) ]) elif '錯了,我想重新選擇日期~' == event.message.text: deletedate(user_id) textmessage = '請選擇運動日期~٩(๑❛ᴗ❛๑)۶' # \[TextSendMessage(text=textmessage) line_bot_api.reply_message(event.reply_token, buttons_template(today, user_id)) # 查詢紀錄-2 日期確認 ## 更新 / 刪除紀錄-2 # 當使用者輸入 elif "更新=" in msg_content: if ",內容:" in msg_content: sep = msg_content.split(",內容:") id = sep[0].split("=")[1] record = sep[1] print("將更新的id&record:", id, record) textmessage = f"準備更新id={id}\n==新的日誌內容==\n{record}" textmessage02 = updatelog(user_id, id, record) text_quickreply0 = QuickReplyButton( action=MessageAction(label="重新查詢", text="查詢紀錄")) text_quickreply1 = QuickReplyButton( action=MessageAction(label="回主選單", text="回主選單")) quick_reply_array = QuickReply( items=[text_quickreply0, text_quickreply1]) line_bot_api.reply_message(event.reply_token, [ TextSendMessage(text=textmessage), TextSendMessage(text=textmessage02, quick_reply=quick_reply_array) ]) else: textmessage = f"格式錯誤Q^Q" line_bot_api.reply_message(event.reply_token, TextSendMessage(text=textmessage)) elif "刪除=" in msg_content: id = msg_content.split("=")[1] print("將刪除的id:", id) date, record = search_onelog(user_id, id) textmessage = f"準備刪除id={id}\n日期{date}\n=原有日誌內容=\n{record}" textmessage02 = deletelog(user_id, id) text_quickreply0 = QuickReplyButton( action=MessageAction(label="重新查詢", text="查詢紀錄")) text_quickreply1 = QuickReplyButton( action=MessageAction(label="回主選單", text="回主選單")) quick_reply_array = QuickReply( items=[text_quickreply0, text_quickreply1]) line_bot_api.reply_message(event.reply_token, [ TextSendMessage(text=textmessage), TextSendMessage(text=textmessage02, quick_reply=quick_reply_array) ]) ####檢查目前state的日期是什麼,把內容存進相對應的欄位中。 ## 新增紀錄-2 放最底下不要亂移動XDD # 當使用者輸入運動日誌(msg_content) # 從usertable-state抓回日期: database.usertable.checkstate # 從database.exercise.updatecheck(user_id, date)確認 exercise的record欄位是不是空的,避免重複寫入 # 詢問使用者是否更新 # 無日期:結束 / 有日期:確認是否存取(quickreply 是/否) =>Postback else: state = checkstate(user_id) if "checkstate=Y" in state: date = state.split(",")[1] last_record = updatecheck(user_id, date) if str(last_record) == "None": print("還未寫入record過,詢問是否新增") text_quickreply0 = QuickReplyButton(action=PostbackAction( label='是', display_text='是', data=f"update=Y,date={date},record={msg_content}")) text_quickreply1 = QuickReplyButton(action=PostbackAction( label='否', display_text='否', data='update=N')) # 有空新增第三個按鈕:重新選擇日期 quick_reply_array = QuickReply( items=[text_quickreply0, text_quickreply1]) reply_text_message = TextSendMessage( f"{date}\n--------------------\n{msg_content}\n--------------------\n是否紀錄此筆日誌?", quick_reply=quick_reply_array) line_bot_api.reply_message(event.reply_token, [reply_text_message]) else: print("已經有日誌,詢問是否更新?") text_quickreply0 = QuickReplyButton(action=PostbackAction( label='是', display_text='是', data=f"update=Y,date={date},record={msg_content}")) text_quickreply1 = QuickReplyButton(action=PostbackAction( label='否', display_text='否', data='update=N')) # 有空新增第三個按鈕:重新選擇日期 quick_reply_array = QuickReply( items=[text_quickreply0, text_quickreply1]) reply_text_message = TextSendMessage( f"原本已經有紀錄\n{date}\n--------------------\n{last_record}\n--------------------\n是否覆蓋並更新此筆日誌,如下?\n{date}\n--------------------\n{msg_content}\n--------------------\n ", quick_reply=quick_reply_array) line_bot_api.reply_message(event.reply_token, [reply_text_message]) return "message_event done"
def res(): ''' payload={ "type": "bubble", "body": { "type": "box", "layout": "horizontal", "contents": [ { "type": "text", "text": "Hello," }, { "type": "text", "text": "World!" } ] } } ''' payload = { "type": "flex", "altText": "Flex Message", "contents": { "type": "bubble", "hero": { "type": "image", "url": "https://scdn.line-apps.com/n/channel_devcenter/img/fx/01_1_cafe.png", "size": "full", "aspectRatio": "20:13", "aspectMode": "cover", "action": { "type": "uri", "label": "Line", "uri": "https://linecorp.com/" } }, "body": { "type": "box", "layout": "vertical", "contents": [ { "type": "text", "text": "Brown Cafe", "size": "xl", "weight": "bold" }, { "type": "box", "layout": "baseline", "margin": "md", "contents": [ { "type": "icon", "url": "https://scdn.line-apps.com/n/channel_devcenter/img/fx/review_gold_star_28.png", "size": "sm" }, { "type": "icon", "url": "https://scdn.line-apps.com/n/channel_devcenter/img/fx/review_gold_star_28.png", "size": "sm" }, { "type": "icon", "url": "https://scdn.line-apps.com/n/channel_devcenter/img/fx/review_gold_star_28.png", "size": "sm" }, { "type": "icon", "url": "https://scdn.line-apps.com/n/channel_devcenter/img/fx/review_gold_star_28.png", "size": "sm" }, { "type": "icon", "url": "https://scdn.line-apps.com/n/channel_devcenter/img/fx/review_gray_star_28.png", "size": "sm" }, { "type": "text", "text": "4.0", "flex": 0, "margin": "md", "size": "sm", "color": "#999999" } ] }, { "type": "box", "layout": "vertical", "spacing": "sm", "margin": "lg", "contents": [ { "type": "box", "layout": "baseline", "spacing": "sm", "contents": [ { "type": "text", "text": "Place", "flex": 1, "size": "sm", "color": "#AAAAAA" }, { "type": "text", "text": "Miraina Tower, 4-1-6 Shinjuku, Tokyo", "flex": 5, "size": "sm", "color": "#666666", "wrap": True } ] }, { "type": "box", "layout": "baseline", "spacing": "sm", "contents": [ { "type": "text", "text": "Time", "flex": 1, "size": "sm", "color": "#AAAAAA" }, { "type": "text", "text": "10:00 - 23:00", "flex": 5, "size": "sm", "color": "#666666", "wrap": True } ] } ] } ] }, "footer": { "type": "box", "layout": "vertical", "flex": 0, "spacing": "sm", "contents": [ { "type": "button", "action": { "type": "uri", "label": "CALL", "uri": "https://linecorp.com" }, "height": "sm", "style": "link" }, { "type": "button", "action": { "type": "uri", "label": "WEBSITE", "uri": "https://linecorp.com" }, "height": "sm", "style": "link" }, { "type": "spacer", "size": "sm" } ] } } } #container_obj = CarouselContainer.new_from_json_dict(payload) container_obj = FlexSendMessage.new_from_json_dict(payload) return container_obj #line_bot_api.push_message(, messages=container_obj)
def handle_follow(event): user_profile = line_bot_api.get_profile(event.source.user_id) with open("namelist.txt", "a") as myfile: myfile.write(json.dumps(vars(user_profile))) myfile.write("\r\n") # 建立文字消息 follow_text_send_message = TextSendMessage("Gotcha!") # 透過 line_bot_api 把文字訊息交給 line # line_bot_api.reply_message(event.reply_token, follow_text_send_message) image_message = ImageSendMessage( original_content_url= "https://images.plurk.com/4ukIDnqYl5okkXDeqvj5XP.png", preview_image_url="https://images.plurk.com/30gHSki8dVvFhyAhTqXGx.png") buttons_template_message = TemplateSendMessage( alt_text='Buttons template', template=ButtonsTemplate( thumbnail_image_url= 'https://i.pinimg.com/236x/ba/d8/44/bad844b8c603a0afa3e622c75bc5a32a--princess-disney-disney-fan.jpg', title='Who am I', text='select the correct answer', actions=[ MessageAction( label='Woody', # 按鍵名稱 text='I guess Woody' # 點擊後、以用戶發的文字 ), # URIAction( # label="Plurk", # uri="http://www.plurk.com/headisnotsmall" # ), # URIAction( # label="Call me maybe", # 透過點擊方式打電話 # uri="tel://0929122033" # url scheme line, 也能使用line的功能 # ), URIAction(label="picture", uri="https://line.me/R/nv/camera/"), # PostbackAction( # label="ya", # text="try something", # data="specific" # ) ])) # 用 JSON 生成模板 讀取本地JSON檔案,用json.load with open("sendmessage.json", "r", encoding="utf-8") as jsonfile: json_object = json.load(jsonfile) template_message_from_json = TemplateSendMessage.new_from_json_dict( json_object) with open("flexmessage.json", "r", encoding="utf-8") as jsonfile2: json_object2 = json.load(jsonfile2) flex_message_from_json2 = FlexSendMessage.new_from_json_dict(json_object2) line_bot_api.reply_message(event.reply_token, [ follow_text_send_message, template_message_from_json, flex_message_from_json2 ])
def call_recipt(image): # レシートの内容を読み込む response = requests.post( OCR_API_URL, headers={ 'x-linebrain-apigw-api-key': OCR_API_KEY }, json={ 'imageContent': image.decode('utf-8') } ) response_json = response.json() logger.info('Recipt Data: {}'.format(json.dumps(response_json, indent=4))) if response.status_code == 200: # freeeへ申請 expense_result = insert_expence(response_json) logger.info('Expensed Data: {}'.format( json.dumps(expense_result, indent=4))) with open('sample_recipt.json', 'r', encoding='utf-8') as f: recipt_form = json.load(f) # 読み込み結果を出力するメッセージを作成 recipt_form['header']['contents'][2]['text'] = response_json['result']['storeInfo']['name'] contents = [{ "type": "separator", "color": "#000000" }] for item in response_json['result']['items']: box = { "type": "box", "layout": "horizontal", "contents": [ { "type": "text", "text": item['name'], "size": "lg", "align": "start", "contents": [] }, { "type": "text", "text": "¥{}".format(item['priceInfo']['price']), "color": "#000000", "align": "end", "gravity": "bottom", "contents": [] } ] } contents.append(box) # 合計金額を挿入 contents += [ { "type": "separator", "color": "#000000" }, { "type": "box", "layout": "horizontal", "contents": [ { "type": "text", "text": "合計", "contents": [] }, { "type": "text", "text": "¥{}".format(response_json['result']['totalPrice']['price']), "align": "end", "contents": [] } ] } ] recipt_form['body']['contents'] = contents response_message = FlexSendMessage.new_from_json_dict({ "type": "flex", "altText": "レシート", "contents": recipt_form }) else: response_message = TextSendMessage(text="レシートが読み取れませんでした。") return response_message
def handle_message(event): user_id = event.source.user_id employee_id = select_user_data(user_id, 'employee_id') is_fixing_time = select_user_data(user_id, 'fix_time') flag = '' if event.message.text == '出勤': message_obj = TextSendMessage(text='出勤しました') flag = 'clock_in' line_bot_api.link_rich_menu_to_user( user_id, on_work_menu_id) elif event.message.text == '退勤': message_obj = TextSendMessage(text='退勤しました') flag = 'clock_out' line_bot_api.link_rich_menu_to_user( user_id, attend_menu_id) elif event.message.text == '打刻修正': with open('fix_time_button.json', 'r', encoding='utf-8') as f: regist_form_content = json.load(f) regist_form_content['footer']['contents'][0]['action']['uri'] \ = 'https://liff.line.me/{}'.format(FIX_TIME_LIFF_ID) message_obj = FlexSendMessage.new_from_json_dict({ "type": "flex", "altText": "打刻修正", "contents": regist_form_content }) insert_bot_status(user_id, 'fix_time', True) line_bot_api.unlink_rich_menu_from_user(user_id) elif is_fixing_time: # 打刻修正をする time_messages = event.message.text.split('\n') clock_in_time = time_messages[0] + '+09:00' clock_out_time = time_messages[1] + '+09:00' today = clock_in_time.split('T')[0] response = requests.put( 'https://api.freee.co.jp/hr/api/v1/employees/{}/work_records/{}'.format( employee_id, today), headers={ 'Authorization': 'Bearer {}'.format(select_freee_token()) }, json={ "work_record": { "company_id": company_id, "clock_in_at": clock_in_time, "clock_out_at": clock_out_time } } ) logger.info('Result: {}'.format(json.dumps( response.json(), indent=4, ensure_ascii=False))) insert_bot_status(user_id, 'fix_time', False) message_obj = TextSendMessage(text='修正しました') line_bot_api.link_rich_menu_to_user( user_id, on_work_menu_id) else: message_obj = TextSendMessage(text=event.message.text) if flag: response = requests.post( 'https://api.freee.co.jp/hr/api/v1/employees/{}/time_clocks'.format( employee_id), headers={ 'Authorization': 'Bearer {}'.format(select_freee_token()) }, json={ "company_id": company_id, "type": flag } ) logger.info('Result: {}'.format(json.dumps( response.json(), indent=4, ensure_ascii=False))) line_bot_api.reply_message( event.reply_token, message_obj)
def handle_message(event): classes = { 'レジリエンスコロキウム': { 'url':'https://sites.google.com/g.ecc.u-tokyo.ac.jp/sdm-rc20/?pli=1&authuser=1', 'evaluation_method':'2週間後までレポート', 'extra':'オムニバス' }, 'システム設計科学': { 'url':'https://zoom.us/j/92647589066?pwd=V05BcnpiZkh2WVlZK2N2dGZUOWFoZz09', 'evaluation_method':'出席、レポート', 'extra':'DJ' }, 'システム制御工学': { 'url':'https://zoom.us/j/98093061286', 'evaluation_method':'講義への態度(不定期に実施する講義内の演習課題など)、期末試験を40-60%程度', 'extra':'' }, '量子力学': { 'url':'https://zoom.us/j/96396500440?pwd=akxkWm5MV0NBbjZGb1Z6VWdTMUd4QT09', 'evaluation_method':'出席、レポート', 'extra':'クソムズイ' }, '先端コンピューティング': { 'url':'https://zoom.us/j/8062021054?pwd=L0dnRGJUa1hMa2RwdFJsd29lTEpzQT09', 'evaluation_method':'出席、レポート', 'extra':'材料力学' }, '微分方程式の解法と可視化': { 'url':'https://zoom.us/j/91850471543?pwd=M1pLcVBvR01sczFDMHU3cEZuVVJVUT09', 'evaluation_method':'出席、レポート、期末試験', 'extra':'' }, '電磁エネルギー基礎': { 'url':'https://zoom.us/j/91882363434?pwd=Z1NzclFvR3VvS01uUEtNeGpMTGtxdz09', 'evaluation_method':'主にレポート、期末試験', 'extra':'講義・演習の出席、演習での割り当て問題の解答、理解度チェックテスト成績も適切に加味' }, '形状モデリングと可視化': { 'url':'https://zoom.us/j/99188357630?pwd=Q2xxQ0V5QnRUbmhlKzRWZEtnVzlzZz09', 'evaluation_method':'レポート', 'extra':'レポートはメール提出' }, '有限要素法と構造解析': { 'url':'https://zoom.us/j/95969192926?pwd=ckdmc05mdndxYml3NjFBZzROaUxrdz09', 'evaluation_method':'授業内の理解度確認テストとレポート', 'extra':'' }, '数理演習3B': { 'url':'https://zoom.us/j/93081493741?pwd=QjBTRkZ6MWlWTC9RdlpiOXNMNmJvdz09', 'evaluation_method':'出席とレポートと中間試験', 'extra':'複素数' } } if event.message.text == "授業一覧": message = "" for k, v in classes.items(): message += f'{k}\n' try: line_bot_api.reply_message( event.reply_token, TextMessage(text=message)) return except LineBotApiError: return for k, v in classes.items(): if event.message.text == k: flex_message = { "type": "flex", "altText": "Flex Message", "contents": { "type": "bubble", "body": { "type": "box", "layout": "vertical", "contents": [ { "type": "text", "text": k, "weight": "bold", "size": "md" }, { "type": "box", "layout": "vertical", "margin": "lg", "spacing": "sm", "contents": [ { "type": "box", "layout": "baseline", "spacing": "sm", "contents": [ { "type": "text", "text": "評価方法", "color": "#aaaaaa", "size": "sm", "flex": 2 }, { "type": "text", "text": v["evaluation_method"], "wrap": True, "color": "#666666", "size": "sm", "flex": 5 } ] }, { "type": "box", "layout": "baseline", "spacing": "sm", "contents": [ { "type": "text", "text": "備考", "color": "#aaaaaa", "size": "sm", "flex": 2 }, { "type": "text", "text": v["extra"], "wrap": True, "color": "#666666", "size": "sm", "flex": 5 } ] } ] } ] }, "footer": { "type": "box", "layout": "vertical", "spacing": "sm", "contents": [ { "type": "button", "style": "link", "height": "sm", "action": { "type": "uri", "label": "Zoom URL", "uri": v["url"] } }, { "type": "spacer", "size": "sm" } ], "flex": 0 } } } try: line_bot_api.reply_message( event.reply_token, FlexSendMessage.new_from_json_dict(flex_message)) return except LineBotApiError: return