Example #1
0
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
Example #2
0
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)
Example #3
0
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
Example #4
0
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="項目から選んでください"))
Example #5
0
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
Example #6
0
File: wt.py Project: catchsob/wtit
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
Example #7
0
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
            )
        ]
    )
Example #8
0
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))
Example #10
0
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])
Example #11
0
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)
Example #12
0
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 "お支払いありがとうございました!"
Example #14
0
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])
Example #15
0
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)
Example #16
0
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
Example #17
0
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)
Example #18
0
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)
Example #19
0
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)
Example #20
0
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)
Example #21
0
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))
Example #22
0
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)
Example #23
0
File: wt.py Project: catchsob/wtit
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)
Example #24
0
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)
Example #25
0
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"
Example #26
0
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)
Example #27
0
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
    ])
Example #28
0
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
Example #29
0
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)
Example #30
0
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