コード例 #1
0
def handle_message(event):
    print(event.message)
    if event.message.text.lower() in ['codejob','soho','nctu_talk']:
        if event.message.text.lower() == 'codejob':
            board = 'CodeJob'
        elif event.message.text.lower() == 'soho':
            board = 'soho'
        elif event.message.text.lower() == 'nctu_talk':
            board = 'NCTU_TALK'

        aritcles = getCaseJobArticles(board)
        action_list = []
        for article in aritcles:
            action_list.append(URITemplateAction(
                label=article['title'],
                uri='https://www.ptt.cc'+article['link']))
        buttons_message = TemplateSendMessage(
                alt_text='PTT {0}'.format(board),
                template=ButtonsTemplate(
                    thumbnail_image_url='https://i.imgur.com/prgAiYk.jpg',
                    title='PTT {0}'.format(board),
                    text='選選選',
                    actions=action_list)
        )
        line_bot_api.reply_message(
            event.reply_token,
            buttons_message
        )
        return 0
    if event.message.text.lower() in ['tech_job','soft_job','stupidclown']:
        if event.message.text.lower() == 'tech_job':
            board = 'Tech_job'
        elif event.message.text.lower() == 'soft_job':
            board = 'Soft_Job'
        elif event.message.text.lower() == 'stupidclown':
            board = 'StupidClown'
        
        aritcles = getDiscussionArticles(board)
        action_list = []
        for article in aritcles:
            action_list.append(URITemplateAction(
                label=article['title'],
                uri='https://www.ptt.cc'+article['link']))
        buttons_message = TemplateSendMessage(
            alt_text='PTT {0}'.format(board),
            template=ButtonsTemplate(
                thumbnail_image_url='https://i.imgur.com/WBdWmBt.jpg',
                title='PTT {0}'.format(board),
                text='選選選',
                actions=action_list
            )
        )
        line_bot_api.reply_message(
            event.reply_token,
            buttons_message
        )
        return 0
    
    caseJobBoard = CarouselColumn(
        thumbnail_image_url='https://i.imgur.com/tUiZQdV.png',
        title='Menu',
        text='Please select',
        actions=[
            MessageTemplateAction(
                label='CodeJob',
                text='CodeJob'
                ),
            MessageTemplateAction(
                label='soho',
                text='soho'
                ),
            MessageTemplateAction(
                label='NCTU_TALK',
                text='NCTU_TALK'
                )
        ]
    )
    discussionBoard = CarouselColumn(
        thumbnail_image_url='https://i.imgur.com/QgxjXUf.jpg',
        title='Discussion board',
        text='Please select',
        actions=[
            MessageTemplateAction(
                label='Soft Job',
                text='Soft_job'
                ),
            MessageTemplateAction(
                label='Tech Job',
                text='Tech_job'
                ),
            MessageTemplateAction(
                label='StupidClown',
                text='StupidClown'
                )
        ]
    )
    carousel_template_message = TemplateSendMessage(
        alt_text='PTT cralwer',
        template=CarouselTemplate(
            columns=[
                caseJobBoard,
                discussionBoard
            ]
        )
    )
    print(carousel_template_message)
    line_bot_api.reply_message(
        event.reply_token,
        carousel_template_message)
コード例 #2
0
def postback_process(userid, data, DB, event):
    """
        input:
            1. userid
            2. data
            3. DB
            4. event
        return:
            1. [message]
    """
    ret = "NA"
    user_data = data.get_user(userid)

    # 填問卷的過程
    # QC丟問題,相對題號
    if event.postback.data == 'Quick':
        ret = [
            confirm_push(data.get_all_users(), userid, event.postback.data, DB)
        ]

    elif event.postback.data == 'Standard':
        ct_container = ct_push(data.get_all_users(), userid, 1, 0,
                               DB)  #把4類別加進來
        carousel_template = CarouselTemplate(columns=ct_container)
        ret = [
            TemplateSendMessage(alt_text='詳細災情回覆問卷',
                                template=carousel_template)
        ]

    # 四類丟問題,相對題號
    elif event.postback.data in ['Normal', 'Indoors', 'Corridor', 'Outdoors']:
        ret = [
            confirm_push(data.get_all_users(), userid, event.postback.data, DB)
        ]

    # 戳題目的confirm template的時候
    try:
        parse = extract(event.postback.data)  # [0]是類別;[1]是相對題號;[2]是沒問題/待改進
        cat, Q, ans = parse
        data.set_user_current(userid, (cat, Q))
        last = len(DB.get_category(cat))

        # 處理carousel template
        # 填完該類別最後一題且最後一題是沒問題
        if Q == last and ans == 'OK':
            data.set_user_status(userid, "00")
            data.add_user_answered(userid, cat, Q)
            output = data.get_user_feedback(userid)

            print('進入【(第一次)類別TEMPVIEW】')
            print(f"\n\n====\ncat: |{cat}\nOutput: |{output}\n")
            ret = cat_tempview_confirm(cat, output,
                                       DB)  # 推第一次類別修改tempview confirm template
            # ct_container = ct_push(data.get_all_users(), userid, 1, 0, DB)

            # QC填完
            if cat == "Quick" and Q == last:
                print('進入【最終TEMPVIEW】──QC的路,不要怕上一句話,因為她是必經之路')
                output = data.get_user_feedback(userid)
                ret = tempview_confirm(output,
                                       DB)  # 推第一次最終修改tempview confirm template

        # 處理題目的confirm template
        # 待改進的話,或是非該類別的最後一題
        else:
            ret = [next(data.get_all_users(), userid, parse, DB)[0]]
            status = next(data.get_all_users(), userid, parse, DB)[1]
            data.set_user_status(userid, status)

    except Exception as e:
        # exc_type, exc_obj, exc_tb = sys.exc_info()
        # fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1]
        # print('ERROR:', exc_type, exc_obj, fname, exc_tb.tb_lineno)
        # print(event.postback.data)

        if event.postback.data == 'edit=NO':
            data.set_user_status(userid, "00")
            output = data.get_user_feedback(userid)
            print(f"\n\n\nAARRR!!!{output}\n\n\n")
            build, room = data.get_user_building(userid)
            print(f"\n\n\nBBRRR!!!{(build, room)}\n\n\n")
            for feed in range(len(output)):
                output[feed] += (build, )
                output[feed] += (room, )

            DB.get_feedback(output, userid,
                            data.get_user_building(userid)[0])  #寫進資料庫
            print('進入【最終修改答案不修改】,結束問卷')
            print(
                f"\n========================\nThis is feedback:\n{output}\n========================\n"
            )

            ret = [
                TextSendMessage(text="已收到您的回覆~謝謝您的貢獻!"),
                StickerSendMessage(package_id=11537, sticker_id=52002739),
            ]

            data.remove_user(userid)

        if event.postback.data == 'edit=OK':
            print('進入【最終修改答案要修改】,要求輸入修改題號')
            data.set_user_status(userid, "20")
            ret = [
                TextSendMessage(text="請問您要修改哪一題呢?"),
                TextSendMessage(text="【注意】:當您填寫快速檢核時,不能修改其他四類問題;反之亦然。"),
                TextSendMessage(
                    text=
                    "請按照下列格式填寫:\n一般檢查(Normal)簡寫為N\n室內(Indoors)簡寫為I\n走廊(Corridor)簡寫為C\n室外(Outdoors)簡寫為O\n再加上題號,例如:\nN7(一般檢查的第七題)"
                ),
            ]

        if event.postback.data == 'cat_edit=NO':
            print('進入【類別修改答案不修改】,丟出類別選單')
            ct_container = ct_push(data.get_all_users(), userid, 1, 1, DB)
            if ct_container == "All cats have already checked!":  # 類別全部修改過後,進入最終環節
                print('進入【最終TEMPVIEW】──標準填完了唷,不要怕上一句話,因為她是必經之路')
                output = data.get_user_feedback(userid)
                ret = tempview_confirm(output, DB)
            else:
                carousel_template = CarouselTemplate(columns=ct_container)
                ret = [
                    TemplateSendMessage(alt_text='問卷選單',
                                        template=carousel_template)
                ]

        if 'cat_edit=OK' in event.postback.data:
            print('進入【類別修改答案要修改】,要求輸入修改題號')
            data.set_user_status(userid, "10")

            ## 避免戳 Normal1, Indoors1, Corridor1, Outdoors1 的時候類別被鎖住
            cate = str(event.postback.data).split(
                ';')[1] if ';' in event.postback.data else ''
            print('\n===<%s>===\n' % cate)
            relq = user_data["current"][1]
            _ = (cate, relq) if cate != '' else user_data["current"]
            data.set_user_current(userid, _)
            ret = [
                TextSendMessage(text="請問您要修改哪一題呢?"),
                TextSendMessage(text="【注意】:只能修改當前題組,欲修改其他題組,請於所有問題答畢後修改"),
                TextSendMessage(
                    text=
                    "請按照下列格式填寫:\n一般檢查(Normal)簡寫為N\n室內(Indoors)簡寫為I\n走廊(Corridor)簡寫為C\n室外(Outdoors)簡寫為O\n再加上題號,例如:\nN7(一般檢查的第七題)"
                ),
            ]

    # 類別修改答案的過程
    if 'cat_revise=' in event.postback.data and 'OK' in event.postback.data:  # 沒問題
        print('進入【類別修改答案沒問題】,丟出cat_tempview')
        output = data.get_user_feedback(userid)
        ret = cat_tempview_confirm(user_data["current"][0], output,
                                   DB)  # 把它目前的回答推個confirm template給他看看

    elif 'cat_revise=' in event.postback.data and 'NO' in event.postback.data:  # 待改進
        print('進入【類別修改答案待改進】,請簡述災情')
        ret = [TextSendMessage(text="請簡述災情")]
        data.set_user_status(userid, "11")

    # 最終修改答案的過程
    if 'all_revise=' in event.postback.data and 'OK' in event.postback.data:  # 沒問題
        print('進入【最後修改答案沒問題】,丟出tempview')
        output = data.get_user_feedback(userid)
        ret = tempview_confirm(output, DB)  # 把它目前的回答推個confirm template給他看看

    elif 'all_revise=' in event.postback.data and 'NO' in event.postback.data:  # 待改進
        print('進入【最後修改答案待改進】,請簡述災情')
        ret = [TextSendMessage(text="請簡述災情")]
        data.set_user_status(userid, "21")

    # 重設帳號或不設
    if event.postback.data == 'account_reset':
        delete_userid_db(userid, DB)
        account[userid] = {
            'userid': userid,
            'name': 0,
            'county': 0,
            'school': 0,
            'phone': 0
        }
        ret = [TextSendMessage(text="請問您尊姓大名?")]
        account_q = 1

    elif event.postback.data == 'account_remain':
        ret = [TextSendMessage(text="好的,謝謝😁")]

    return ret
コード例 #3
0
def handle_message(event):
    text = event.message.text

    if text == "学部再登録":
        userid = event.source.user_id
        user_db.del_userinfo(userid)  # user情報を削除

        line_bot_api.reply_message(event.reply_token, [
            TextSendMessage(text="現在登録されていた学部は削除されました。"),
            TextSendMessage(
                text="もう一度下のボタンから学部を選択してください。",
                quick_reply=QuickReply(items=[
                    QuickReplyButton(
                        action=PostbackAction(label=major, data=major))
                    for major in major_list
                ]))
        ])

    elif text == "送信フォーム":
        line_bot_api.reply_message(
            event.reply_token,
            TemplateSendMessage(
                alt_text="送信フォーム",
                template=ButtonsTemplate(
                    text="送信フォーム",
                    image_size="cover",
                    actions=[
                        URIAction(uri="https://forms.gle/cAMusm8ZN8i4SmbL8",
                                  label="ご感想、ご要望はこちら")
                    ])))
    elif text == "ゼミ協":
        line_bot_api.reply_message(
            event.reply_token,
            TextSendMessage(text="https://lin.ee/bOegrZ3\n上記のリンクより友だち追加できます!"))

    #教官または講義名いずれかが送信されたとき.もしくはもう一度探すとき
    elif "_" not in text or "でもう一度探す" in text:
        if "でもう一度探す" in text:
            text = text.split("_")[0]
        teacherList = onihotoke_db.searchTeacher(text, False)  #教員列からワードを検索
        lectureList = onihotoke_db.searchLecture(text, False)  #講義列からワードを検索
        kibutsuList = []  #2つのリストを結合 1つは空であるはず.
        kibutsuList.extend(teacherList)
        kibutsuList.extend(lectureList)

        #検索結果が空でないとき,その検索結果をlabelにもつボタンを送信.
        if kibutsuList:
            #kibutsuListの要素数が20を超えないようにする.
            if len(kibutsuList) > 19:
                kibutsuList = random.sample(
                    kibutsuList, 19)  #一応シャッフルする.何回か表示すればすべての講義を見れるように.
            kibutsuList.extend(["でもう一度探す"])  #20個目
            buttons_templates = []
            roop = (len(kibutsuList) + 3) // 4  #最大4つまで表示できるテンプレートを何回表示すればいいか.

            for i in range(roop):  #その回数だけ回す.
                if i == roop - 1:  #最後は4つ以下になるからスライス部分を変える必要あり.
                    buttons_templates.append(
                        ButtonsTemplate(title='講義名を選択してください',
                                        text='choose the lecture name',
                                        actions=[
                                            MessageAction(
                                                label=text + " " + name[:10],
                                                text=text + "_" + name)
                                            for name in kibutsuList[4 * i:]
                                        ]))
                    break
                buttons_templates.append(
                    ButtonsTemplate(
                        title='講義名を選択してください',
                        text='choose the lecture name',
                        actions=[
                            MessageAction(label=text + " " + name[:10],
                                          text=text + "_" + name)
                            for name in kibutsuList[4 * i:4 * (i + 1)]
                        ]))
            try:
                line_bot_api.reply_message(event.reply_token, [
                    TemplateSendMessage(alt_text='講義を選択してください',
                                        template=buttons_template)
                    for buttons_template in buttons_templates
                ])
                # slackに報告
                requests.post(SLACKBOT_SEARCH_KEYWORD,
                              data=json.dumps({'text': "検索ワード : " + text}))
            except:
                line_bot_api.reply_message(
                    event.reply_token,
                    TextSendMessage(text="エラーのため講義情報を表示できません。エラーは報告済みです。"))
                # slackに報告
                requests.post(SLACKBOT_ERROR_KEYWORD,
                              data=json.dumps({'text': "エラー検索ワード : " + text}))

        # 該当する講義がなかったとき
        else:
            line_bot_api.reply_message(
                event.reply_token,
                TextSendMessage(text='該当する講義情報が見つかりませんでした。'))
            # slackに報告
            requests.post(SLACKBOT_ERROR_KEYWORD,
                          data=json.dumps({'text': "見つからなかった検索ワード : " + text}))

    #教官名と講義名のどちらも送信されたとき、その講義の鬼仏情報をユーザーに送信
    elif "_" in text:
        texts = text.split("_")  #『教官名_講義名』 という入力を期待している
        kibutsuList = onihotoke_db.searchAll(texts[0], texts[1].split(",")[0])
        print(texts[1].split(",")[0])  #講義情報の辞書のリスト
        # print(kibutsuList)
        if kibutsuList:
            if len(kibutsuList) > 10:
                kibutsuList = random.sample(
                    kibutsuList, 10)  #一応シャッフルする.何回か表示すればすべての講義を見れるように.

            try:
                line_bot_api.reply_message(
                    event.reply_token,
                    FlexSendMessage(alt_text='鬼仏情報',
                                    contents=CarouselContainer([
                                        gen_card_onihotoke(dic)
                                        for dic in kibutsuList
                                    ])))
                # slackに報告
                requests.post(SLACKBOT_SEARCH_KEYWORD,
                              data=json.dumps({'text': "検索ワード : " + text}))
            except:
                line_bot_api.reply_message(
                    event.reply_token,
                    TextSendMessage(text="エラーのため講義情報を表示できません。エラーは報告済みです。"))
                # slackに報告
                SLACKBOT_WEBHOOK_URL = os.environ["SLACKBOT_ERROR_KEYWORD"]
                requests.post(SLACKBOT_ERROR_KEYWORD,
                              data=json.dumps({'text': "エラー検索ワード : " + text}))

        # 該当する講義がなかったとき
        else:
            line_bot_api.reply_message(
                event.reply_token,
                TextSendMessage(text='該当する講義情報が見つかりませんでした。'))
            # slackに報告
            SLACKBOT_WEBHOOK_URL = os.environ["SLACKBOT_ERROR_KEYWORD"]
            requests.post(SLACKBOT_ERROR_KEYWORD,
                          data=json.dumps({'text': "見つからなかった検索ワード : " + text}))

    #検索結果が空だったとき、その旨をユーザーに送信
    else:
        line_bot_api.reply_message(event.reply_token,
                                   TextSendMessage(text='教官名または講義名を入力してください.'))
        # slackに報告
        SLACKBOT_WEBHOOK_URL = os.environ["SLACKBOT_ERROR_KEYWORD"]
        requests.post(SLACKBOT_ERROR_KEYWORD,
                      data=json.dumps({'text': "たぶん適当な検索ワード : " + text}))
コード例 #4
0
def handle_text_message(event):
    text = event.message.text

    if text == 'profile':
        if isinstance(event.source, SourceUser):
            profile = line_bot_api.get_profile(event.source.user_id)
            line_bot_api.reply_message(
                event.reply_token, [
                    TextSendMessage(text='Display name: ' + profile.display_name),
                    TextSendMessage(text='Status message: ' + profile.status_message)
                ]
            )
        else:
            line_bot_api.reply_message(
                event.reply_token,
                TextSendMessage(text="Bot can't use profile API without user ID"))
    elif text == 'bye':
        if isinstance(event.source, SourceGroup):
            line_bot_api.reply_message(
                event.reply_token, TextSendMessage(text='Leaving group'))
            line_bot_api.leave_group(event.source.group_id)
        elif isinstance(event.source, SourceRoom):
            line_bot_api.reply_message(
                event.reply_token, TextSendMessage(text='Leaving group'))
            line_bot_api.leave_room(event.source.room_id)
        else:
            line_bot_api.reply_message(
                event.reply_token,
                TextSendMessage(text="Bot can't leave from 1:1 chat"))
    elif text == 'confirm':
        confirm_template = ConfirmTemplate(text='Do it?', actions=[
            MessageAction(label='Yes', text='Yes!'),
            MessageAction(label='No', text='No!'),
        ])
        template_message = TemplateSendMessage(
            alt_text='Confirm alt text', template=confirm_template)
        line_bot_api.reply_message(event.reply_token, template_message)
    elif text == 'buttons':
        buttons_template = ButtonsTemplate(
            title='My buttons sample', text='Hello, my buttons', actions=[
                URIAction(label='Go to line.me', uri='https://line.me'),
                PostbackAction(label='ping', data='ping'),
                PostbackAction(label='ping with text', data='ping', text='ping'),
                MessageAction(label='Translate Rice', text='米')
            ])
        template_message = TemplateSendMessage(
            alt_text='Buttons alt text', template=buttons_template)
        line_bot_api.reply_message(event.reply_token, template_message)
    elif text == 'carousel':
        carousel_template = CarouselTemplate(columns=[
            CarouselColumn(text='hoge1', title='fuga1', actions=[
                URIAction(label='Go to line.me', uri='https://line.me'),
                PostbackAction(label='ping', data='ping')
            ]),
            CarouselColumn(text='hoge2', title='fuga2', actions=[
                PostbackAction(label='ping with text', data='ping', text='ping'),
                MessageAction(label='Translate Rice', text='米')
            ]),
        ])
        template_message = TemplateSendMessage(
            alt_text='Carousel alt text', template=carousel_template)
        line_bot_api.reply_message(event.reply_token, template_message)
    elif text == 'image_carousel':
        image_carousel_template = ImageCarouselTemplate(columns=[
            ImageCarouselColumn(image_url='https://via.placeholder.com/1024x1024',
                                action=DatetimePickerAction(label='datetime',
                                                            data='datetime_postback',
                                                            mode='datetime')),
            ImageCarouselColumn(image_url='https://via.placeholder.com/1024x1024',
                                action=DatetimePickerAction(label='date',
                                                            data='date_postback',
                                                            mode='date'))
        ])
        template_message = TemplateSendMessage(
            alt_text='ImageCarousel alt text', template=image_carousel_template)
        line_bot_api.reply_message(event.reply_token, template_message)
    elif text == 'imagemap':
        pass
    elif text == 'flex':
        bubble = BubbleContainer(
            direction='ltr',
            hero=ImageComponent(
                url='https://example.com/cafe.jpg',
                size='full',
                aspect_ratio='20:13',
                aspect_mode='cover',
                action=URIAction(uri='http://example.com', label='label')
            ),
            body=BoxComponent(
                layout='vertical',
                contents=[
                    # title
                    TextComponent(text='Brown Cafe', weight='bold', size='xl'),
                    # review
                    BoxComponent(
                        layout='baseline',
                        margin='md',
                        contents=[
                            IconComponent(size='sm', url='https://example.com/gold_star.png'),
                            IconComponent(size='sm', url='https://example.com/grey_star.png'),
                            IconComponent(size='sm', url='https://example.com/gold_star.png'),
                            IconComponent(size='sm', url='https://example.com/gold_star.png'),
                            IconComponent(size='sm', url='https://example.com/grey_star.png'),
                            TextComponent(text='4.0', size='sm', color='#999999', margin='md',
                                          flex=0)
                        ]
                    ),
                    # info
                    BoxComponent(
                        layout='vertical',
                        margin='lg',
                        spacing='sm',
                        contents=[
                            BoxComponent(
                                layout='baseline',
                                spacing='sm',
                                contents=[
                                    TextComponent(
                                        text='Place',
                                        color='#aaaaaa',
                                        size='sm',
                                        flex=1
                                    ),
                                    TextComponent(
                                        text='Shinjuku, Tokyo',
                                        wrap=True,
                                        color='#666666',
                                        size='sm',
                                        flex=5
                                    )
                                ],
                            ),
                            BoxComponent(
                                layout='baseline',
                                spacing='sm',
                                contents=[
                                    TextComponent(
                                        text='Time',
                                        color='#aaaaaa',
                                        size='sm',
                                        flex=1
                                    ),
                                    TextComponent(
                                        text="10:00 - 23:00",
                                        wrap=True,
                                        color='#666666',
                                        size='sm',
                                        flex=5,
                                    ),
                                ],
                            ),
                        ],
                    )
                ],
            ),
            footer=BoxComponent(
                layout='vertical',
                spacing='sm',
                contents=[
                    # callAction, separator, websiteAction
                    SpacerComponent(size='sm'),
                    # callAction
                    ButtonComponent(
                        style='link',
                        height='sm',
                        action=URIAction(label='CALL', uri='tel:000000'),
                    ),
                    # separator
                    SeparatorComponent(),
                    # websiteAction
                    ButtonComponent(
                        style='link',
                        height='sm',
                        action=URIAction(label='WEBSITE', uri="https://example.com")
                    )
                ]
            ),
        )
        message = FlexSendMessage(alt_text="hello", contents=bubble)
        line_bot_api.reply_message(
            event.reply_token,
            message
        )
    else:
        line_bot_api.reply_message(
            event.reply_token, TextSendMessage(text=event.message.text))
コード例 #5
0
    def Build(self):
        bLen = len(self.buttons)
        if bLen == 0:
            return ([], None)
        carousels = []
        while bLen > 15:
            carousels.append(
                TemplateSendMessage(alt_text=self.altTextHeader,
                                    template=CarouselTemplate(columns=[])))
            car = carousels[-1]
            for k in range(1, 16):
                button = self.buttons.pop(0)
                colLen = len(car.template.columns)
                if colLen == 0:
                    car.template.columns.append(
                        CarouselColumn(text=self.columnText, actions=[]))
                elif len(car.template.columns[-1].actions) == 3:
                    car.template.columns.append(
                        CarouselColumn(text=self.columnText, actions=[]))
                car.template.columns[-1].actions.append(
                    MessageTemplateAction(label=button.label,
                                          text=button.text))
                car.alt_text = (car.alt_text + button.altTextEntry)[:400]
            bLen = bLen - 15

        cbLen = 0
        cols = 0
        rows = 0
        if bLen > 4:
            for i in range(1, 5):
                div = bLen // i
                if div > 3:
                    continue
                if cbLen < div * i:
                    cbLen = div * i
                    cols = i
                    rows = div
                elif cbLen == div * i and div > rows:
                    cbLen = div * i
                    cols = i
                    rows = div

        bbLen = bLen - cbLen

        if cbLen > 0:
            carousels.append(
                TemplateSendMessage(alt_text=self.altTextHeader,
                                    template=CarouselTemplate(columns=[])))
            count = 0
            for button in self.buttons:
                count = count + 1
                if count > cbLen:
                    break
                car = carousels[-1]
                colLen = len(car.template.columns)
                if colLen == 0:
                    car.template.columns.append(
                        CarouselColumn(text=self.columnText, actions=[]))
                elif len(car.template.columns[-1].actions) == rows:
                    if colLen == cols:
                        carousels.append(
                            TemplateSendMessage(
                                alt_text=self.altTextHeader,
                                template=CarouselTemplate(columns=[])))
                        car = carousels[-1]
                    car.template.columns.append(
                        CarouselColumn(text=self.columnText, actions=[]))
                car.template.columns[-1].actions.append(
                    MessageTemplateAction(label=button.label,
                                          text=button.text))
                car.alt_text = (car.alt_text + button.altTextEntry)[:400]

            car = carousels[-1]
            colLen = len(car.template.columns)
            if colLen == 0 or (colLen == 1
                               and len(car.template.columns[-1].actions) == 0):
                carousels.remove(car)
            elif len(car.template.columns[-1].actions) == 0:
                car.template.columns.remove(car.template.columns[-1])

        but = None
        if bbLen > 0:
            but = TemplateSendMessage(alt_text=self.altTextHeader,
                                      template=ButtonsTemplate(
                                          text=self.columnText, actions=[]))
            for val in self.buttons[cbLen:]:
                but.template.actions.append(
                    MessageTemplateAction(label=val.label, text=val.text))
                but.alt_text = (but.alt_text + val.altTextEntry)[:400]
        return [carousels, but]
コード例 #6
0
ファイル: app.py プロジェクト: cismin333/bot_berita
def message_text(event):
    text = event.message.text
    acak = np.arange(14)
    np.random.shuffle(acak)
    if text == 'Kategori':
        buttons_template = ButtonsTemplate(
            text='Daftar Kategori Berita',
            actions=[
                MessageTemplateAction(label='Tekno', text='tekno'),
                MessageTemplateAction(label='Bisnis', text='bisnis'),
                MessageTemplateAction(label='Otomotif', text='otomotif'),
                MessageTemplateAction(label='Bantuan', text='bantu')
            ])
        template_message = TemplateSendMessage(alt_text='Daftar Kategori',
                                               template=buttons_template)
        line_bot_api.reply_message(event.reply_token, template_message)
    elif text == 'bye astro' or text == 'Bye Astro':
        if isinstance(event.source, SourceGroup):
            line_bot_api.reply_message(event.reply_token,
                                       TextMessage(text='Kakak jahat :('))
            line_bot_api.leave_group(event.source.group_id)
        elif isinstance(event.source, SourceRoom):
            line_bot_api.reply_message(event.reply_token,
                                       TextMessage(text='Jahat :('))
            line_bot_api.leave_room(event.source.room_id)
        else:
            line_bot_api.reply_message(event.reply_token,
                                       TextMessage(text="gabisa ih :p"))
    elif text == 'creator' or text == 'Creator':
        if isinstance(event.source, SourceGroup):
            line_bot_api.reply_message(
                event.reply_token,
                TextMessage(text='http://line.me/ti/p/OdcxbZg6gQ'))
    elif text == 'tekno':
        databerita = listBerita("http://tekno.kompas.com/business")
        daftarberita = databerita.daftarBerita()
        carousel_template = CarouselTemplate(columns=[
            CarouselColumn(
                text=daftarberita[acak[0]]['judul'],
                actions=[
                    PostbackTemplateAction(label="Ringkas",
                                           data=daftarberita[acak[0]]['link'],
                                           text='ringkas'),
                    URITemplateAction(label='Baca berita asli',
                                      uri=daftarberita[acak[0]]['link'])
                ]),
            CarouselColumn(
                text=daftarberita[acak[1]]['judul'],
                actions=[
                    PostbackTemplateAction(label="Ringkas",
                                           data=daftarberita[acak[1]]['link'],
                                           text='ringkas'),
                    URITemplateAction(label='Baca berita asli',
                                      uri=daftarberita[acak[1]]['link'])
                ]),
            CarouselColumn(
                text=daftarberita[acak[2]]['judul'],
                actions=[
                    PostbackTemplateAction(label="Ringkas",
                                           data=daftarberita[acak[2]]['link'],
                                           text='ringkas'),
                    URITemplateAction(label='Baca berita asli',
                                      uri=daftarberita[acak[2]]['link'])
                ]),
            CarouselColumn(
                text=daftarberita[acak[3]]['judul'],
                actions=[
                    PostbackTemplateAction(label="Ringkas",
                                           data=daftarberita[acak[3]]['link'],
                                           text='ringkas'),
                    URITemplateAction(label='Baca berita asli',
                                      uri=daftarberita[acak[3]]['link'])
                ])
        ])
        template_message = TemplateSendMessage(alt_text='Daftar Berita Tekno',
                                               template=carousel_template)
        line_bot_api.reply_message(event.reply_token, template_message)
    elif text == 'bisnis':
        databerita = listBerita("http://bisniskeuangan.kompas.com/bisnis")
        daftarberita = databerita.daftarBerita()
        carousel_template = CarouselTemplate(columns=[
            CarouselColumn(
                text=daftarberita[acak[0]]['judul'],
                actions=[
                    PostbackTemplateAction(label="Ringkas",
                                           data=daftarberita[acak[0]]['link'],
                                           text='ringkas'),
                    URITemplateAction(label='Baca berita asli',
                                      uri=daftarberita[acak[0]]['link'])
                ]),
            CarouselColumn(
                text=daftarberita[acak[1]]['judul'],
                actions=[
                    PostbackTemplateAction(label="Ringkas",
                                           data=daftarberita[acak[1]]['link'],
                                           text='ringkas'),
                    URITemplateAction(label='Baca berita asli',
                                      uri=daftarberita[acak[1]]['link'])
                ]),
            CarouselColumn(
                text=daftarberita[acak[2]]['judul'],
                actions=[
                    PostbackTemplateAction(label="Ringkas",
                                           data=daftarberita[acak[2]]['link'],
                                           text='ringkas'),
                    URITemplateAction(label='Baca berita asli',
                                      uri=daftarberita[acak[2]]['link'])
                ]),
            CarouselColumn(
                text=daftarberita[acak[3]]['judul'],
                actions=[
                    PostbackTemplateAction(label="Ringkas",
                                           data=daftarberita[acak[3]]['link'],
                                           text='ringkas'),
                    URITemplateAction(label='Baca berita asli',
                                      uri=daftarberita[acak[3]]['link'])
                ])
        ])
        template_message = TemplateSendMessage(alt_text='Daftar Berita Bisnis',
                                               template=carousel_template)
        line_bot_api.reply_message(event.reply_token, template_message)
    elif text == 'otomotif':
        databerita = listBerita("http://otomotif.kompas.com/news")
        daftarberita = databerita.daftarBerita()
        carousel_template = CarouselTemplate(columns=[
            CarouselColumn(
                text=daftarberita[acak[0]]['judul'],
                actions=[
                    PostbackTemplateAction(label="Ringkas",
                                           data=daftarberita[acak[0]]['link'],
                                           text='ringkas'),
                    URITemplateAction(label='Baca berita asli',
                                      uri=daftarberita[acak[0]]['link'])
                ]),
            CarouselColumn(
                text=daftarberita[acak[1]]['judul'],
                actions=[
                    PostbackTemplateAction(label="Ringkas",
                                           data=daftarberita[acak[1]]['link'],
                                           text='ringkas'),
                    URITemplateAction(label='Baca berita asli',
                                      uri=daftarberita[acak[1]]['link'])
                ]),
            CarouselColumn(
                text=daftarberita[acak[2]]['judul'],
                actions=[
                    PostbackTemplateAction(label="Ringkas",
                                           data=daftarberita[acak[2]]['link'],
                                           text='ringkas'),
                    URITemplateAction(label='Baca berita asli',
                                      uri=daftarberita[acak[2]]['link'])
                ]),
            CarouselColumn(
                text=daftarberita[acak[3]]['judul'],
                actions=[
                    PostbackTemplateAction(label="Ringkas",
                                           data=daftarberita[acak[3]]['link'],
                                           text='ringkas'),
                    URITemplateAction(label='Baca berita asli',
                                      uri=daftarberita[acak[3]]['link'])
                ])
        ])
        template_message = TemplateSendMessage(
            alt_text='Daftar Berita Otomotif', template=carousel_template)
        line_bot_api.reply_message(event.reply_token, template_message)
    elif "kompas.com/read" in text:
        linkBerita = Berita(text)
        rangkuman = linkBerita.rangkumanBerita()
        teks = ' '.join(rangkuman)
        if (len(teks) > 2):
            line_bot_api.reply_message(event.reply_token,
                                       TextSendMessage(text=teks))
        else:
            line_bot_api.reply_message(
                event.reply_token,
                TextSendMessage(
                    text="maaf, link yang anda kirim tidak valid "))
    elif text == 'Bantu' or text == 'bantu':
        line_bot_api.reply_message(
            event.reply_token,
            TextSendMessage(
                text=
                '\'Kategori\' >> untuk list Kategori \n\'Bantu\' >> list command yang ada \n\'bye astro\' >> mengusirku dari group \n\'Ping\' >> ngecek aku masih hidup ato nggak :P'
            ))
    elif text == 'ringkas':
        line_bot_api.reply_message(event.reply_token,
                                   TextSendMessage(text='Meringkas...'))

    elif text == 'Ping' or text == 'ping':
        buttons_template = ButtonsTemplate(
            text='Ping aku',
            actions=[PostbackTemplateAction(label='ping', data='ping')])
        template_message = TemplateSendMessage(alt_text='ping',
                                               template=buttons_template)
        line_bot_api.reply_message(event.reply_token, template_message)

    else:
        profile = line_bot_api.get_profile(event.source.user_id)
        line_bot_api.reply_message(
            event.reply_token,
            TextSendMessage(text="Hi " + profile.display_name + "\n" +
                            event.message.text + ":)"))
    '''
コード例 #7
0
def handle_text_message(event):
    inp_raw = event.message.text
    inp = inp_raw.lower()
    inp_split = inp.split()
    profile = susunhurufbot.get_profile(event.source.user_id)

    def reply_txt(msg):
        susunhurufbot.reply_message(event.reply_token,TextSendMessage(text=msg))

    def reply_img(link):
        susunhurufbot.reply_message(event.reply_token,ImageSendMessage(original_content_url=link,preview_image_url=link))

    if inp == '/help':
        carousel_template_message = TemplateSendMessage(
            alt_text='Bantuan umum',
            template=CarouselTemplate(
                columns=[
                    CarouselColumn(
                        thumbnail_image_url='https://example.com/item1.jpg',
                        title='Susun Kata Game',
                        text='Tap salah satu',
                        actions=[
                            MessageTemplateAction(
                                label='Mulai Sekarang',
                                text='/play'
                            ),
                            MessageTemplateAction(
                                label='Aturan Main',
                                text='/rule'
                            ),
                            MessageTemplateAction(
                                label='Leaderboards',
                                text='/leaderboard')]),

                    CarouselColumn(
                        thumbnail_image_url='https://example.com/item4.jpg',
                        title='Lain - lain',
                        text='Tap salah satu',
                        actions=[
                            MessageTemplateAction(
                                label='Tentang admin',
                                text='/admin'
                            ),
                            MessageTemplateAction(
                                label='Keluarkan aku',
                                text='/leave'
                            ),
                            URITemplateAction(
                                label='Kirim feedback',
                                uri='http://s.id/FeedbackSusunHurufBot')])
                ]
            )
        )
        susunhurufbot.reply_message(event.reply_token, carousel_template_message)

# ------------------------------------------- Lain - Lain ------------------------------------------ #
    if inp == '/admin':
        about_button = TemplateSendMessage(
            alt_text='Info Admin',
            template=ButtonsTemplate(
                thumbnail_image_url='https://dl.dropboxusercontent.com/s/xjgb1az7tt7p7h3/admin_logo.png',
                title='Admin Susun Huruf Bot',
                text= 'Pradipta Gitaya (21 Tahun)',
                actions=[
                    MessageTemplateAction(
                        label='Hubungi Admin',
                        text= '/contactadmin' ),
                    MessageTemplateAction(
                        label='Catatan Admin',
                        text= '/adminnotes' ),]))

        susunhurufbot.reply_message(event.reply_token, about_button)

    elif inp == '/adminnotes':
        reply_txt(admin_note_msg)
    elif inp == '/contactadmin':
        reply_txt(about_msg)

    elif inp == '/leave':

        def kick():
            confirm_template = ConfirmTemplate(text='Keluarkan bot dari obrolan?', actions=[
                MessageTemplateAction(label='Iya', text='Pergi sana!'),
                MessageTemplateAction(label='Tidak', text='Jangan keluarkan!'),])
            template_message = TemplateSendMessage(alt_text='Konfirmasi kick', template=confirm_template)
            return susunhurufbot.reply_message(event.reply_token, template_message)
            
        if isinstance(event.source, SourceGroup):
            kick()
        
        elif isinstance(event.source, SourceRoom):
            kick()

        else:
            reply_txt('Ini chat 1:1 , gimana caranya aku bisa keluar dari sini coba :(')

    elif inp == ('Pergi sana!'.lower()): # Bot kick confirmation
        reply_txt('Sampai jumpa ~')

        if isinstance(event.source, SourceGroup):
            susunhurufbot.leave_group(event.source.group_id)
        elif isinstance(event.source, SourceRoom):
            susunhurufbot.leave_room(event.source.room_id)

    elif inp == ('Jangan keluarkan!'.lower()): # Bot kick confirmation
        return 'OK'
コード例 #8
0
ファイル: feature_utils.py プロジェクト: gyo-dor/line-rath
def absen(msg):

    # Current = 1534496457 + (3600 * 7)
    # print("\n\nReal Time: 17/08/2018 16.00\n")
    # print("Current TS:", Current, "\nCurrent Time:", datetime.datetime.utcfromtimestamp(Current).strftime('%d/%m/%Y %H:%M:%S'), "\n\n")

    # REPEAT The Same String Manipulation
    remove_absenmsg = msg.replace("/absen ", "")
    grouped_msg = remove_absenmsg.split(" ")

    date_raw = grouped_msg[0]
    patokanWaktuBesok = int(time.time()) + 3601

    if date_raw == 'besok':
        date_raw = datetime.datetime.utcfromtimestamp(
            patokanWaktuBesok).strftime('%d/%m/%Y')
        date_raw = int(
            time.mktime(
                datetime.datetime.strptime(
                    date_raw, "%d/%m/%Y").timetuple())) + (3600 * 31)
        date_raw = str(
            datetime.datetime.utcfromtimestamp(date_raw).strftime('%d/%m/%Y'))

    target_date = time.mktime(
        datetime.datetime.strptime(date_raw, "%d/%m/%Y").timetuple())
    target_date = str(target_date)
    target_date = target_date.replace(".0", "")
    target_date = int(target_date)
    target_date = target_date + (3600 * 13)

    target_date_rdb = datetime.datetime.utcfromtimestamp(target_date).strftime(
        '%d/%m/%Y')
    target_date_rdb = target_date_rdb.replace("/", "")

    reminder_date = target_date - (3600 * 9)

    keterangan = ""
    for i in range(1, len(grouped_msg)):
        keterangan += grouped_msg[i] + " "

    target_date_str = str(target_date_rdb)
    # keterangan = "'" + keterangan + "'"
    initiator = "'" + chatfeatures.absen_name + "'"

    current_date = int(time.time()) + (3600 * 7)
    template_text = 'Keterangan: ' + keterangan + "(oleh " + str(
        chatfeatures.absen_name) + ")"

    eventdatesql = str(
        datetime.datetime.utcfromtimestamp(target_date).strftime('%d/%m/%Y'))
    daysql = str(hari(eventdatesql))
    sqlrdate = "'" + daysql + ", " + eventdatesql + "'"

    # =================
    # PROCEDURAL SQLITE
    # =================

    # Create table
    create_abs_table = '''CREATE TABLE IF NOT EXISTS abs_''' + target_date_str + '''
            (type text, val text)'''

    sqlite_query(create_abs_table)

    # Insert the initial data
    sql_insert_date_unix = "INSERT INTO abs_" + target_date_str + " VALUES ('target-date-unix', " + str(
        target_date) + ")"
    sql_insert_table = "INSERT INTO abs_" + target_date_str + " VALUES ('target-date', " + "'" + target_date_str + "'" + ")"
    sql_insert_rdate = "INSERT INTO abs_" + target_date_str + " VALUES ('readable-date', " + sqlrdate + ")"
    sql_insert_ket = "INSERT INTO abs_" + target_date_str + " VALUES ('keterangan', " + "'" + keterangan + "'" + ")"
    sql_insert_initiator = "INSERT INTO abs_" + target_date_str + " VALUES ('initiator', " + initiator + ")"

    sqlite_query(sql_insert_date_unix)
    sqlite_query(sql_insert_table)
    sqlite_query(sql_insert_rdate)
    sqlite_query(sql_insert_ket)
    sqlite_query(sql_insert_initiator)
    if chatfeatures.absen_group is not None:
        sql_insert_groupid = "INSERT INTO abs_" + target_date_str + " VALUES ('group-id', " + "'" + str(
            chatfeatures.absen_group) + "'" + ")"
        sqlite_query(sql_insert_groupid)
    else:
        sql_insert_groupid = "INSERT INTO abs_" + target_date_str + " VALUES ('group-id', " + "'" + " " + "'" + ")"
        sqlite_query(sql_insert_groupid)

    # Get keterangan
    event_date = str(
        datetime.datetime.utcfromtimestamp(target_date).strftime('%d/%m/%Y'))
    day = str(hari(event_date))

    # ket = sqlite_select_once("SELECT val FROM abs_" + target_date_str + " WHERE type='keterangan'")

    absen_template = TemplateSendMessage(
        alt_text='Pesan Absen',
        template=ButtonsTemplate(
            title=day + ", " + event_date,
            text=template_text,
            actions=[
                MessageAction(label='Hadir',
                              text='#absen ' + target_date_str + ' Hadir'),
                MessageAction(label='Tidak Hadir',
                              text='#absen ' + target_date_str +
                              ' Tidak_Hadir'),
                MessageAction(label='Izin',
                              text='#absen ' + target_date_str + ' Izin'),
                MessageAction(label='Sakit',
                              text='#absen ' + target_date_str + ' Sakit'),
            ]))
    return absen_template
コード例 #9
0
def handle_text_message(event):
    text = event.message.text

    if text == 'profile':
        if isinstance(event.source, SourceUser):
            profile = line_bot_api.get_profile(event.source.user_id)
            line_bot_api.reply_message(event.reply_token, [
                TextSendMessage(text='Display name: ' + profile.display_name),
                TextSendMessage(text='Status message: ' +
                                profile.status_message),
                TextSendMessage(text='user_id: ' + profile.user_id),
                TextSendMessage(text='test picture url: ' +
                                profile.picture_url)
            ])
        else:
            line_bot_api.reply_message(
                event.reply_token,
                TextSendMessage(
                    text="Bot can't use profile API without user ID"))
    elif text == 'bye':
        if isinstance(event.source, SourceGroup):
            line_bot_api.reply_message(event.reply_token,
                                       TextSendMessage(text='Leaving group'))
            line_bot_api.leave_group(event.source.group_id)
        elif isinstance(event.source, SourceRoom):
            line_bot_api.reply_message(event.reply_token,
                                       TextSendMessage(text='Leaving group'))
            line_bot_api.leave_room(event.source.room_id)
        else:
            line_bot_api.reply_message(
                event.reply_token,
                TextSendMessage(text="Bot can't leave from 1:1 chat"))
    elif text == 'confirm':
        confirm_template = ConfirmTemplate(text='Do it?',
                                           actions=[
                                               MessageAction(label='Yes',
                                                             text='Yes!'),
                                               MessageAction(label='No',
                                                             text='No!'),
                                           ])
        template_message = TemplateSendMessage(alt_text='Confirm alt text',
                                               template=confirm_template)
        line_bot_api.reply_message(event.reply_token, template_message)
    elif text == 'Bot':
        confirm_template = ConfirmTemplate(
            text='Photo of Miyuu or Osaka trip?',
            actions=[
                MessageAction(label='Miyuu !', text='Miyuu'),
                MessageAction(label='Osaka Trip !', text='Osaka'),
            ])
        template_message = TemplateSendMessage(alt_text='Confirm alt text',
                                               template=confirm_template)
        line_bot_api.reply_message(event.reply_token, template_message)
    elif text == 'buttons':
        buttons_template = ButtonsTemplate(
            title='My buttons sample',
            text='Hello, my buttons',
            actions=[
                URIAction(label='Go to line.me', uri='https://line.me'),
                PostbackAction(label='ping', data='ping'),
                PostbackAction(label='ping with text',
                               data='ping',
                               text='ping'),
                MessageAction(label='Translate Rice', text='米')
            ])
        template_message = TemplateSendMessage(alt_text='Buttons alt text',
                                               template=buttons_template)
        line_bot_api.reply_message(event.reply_token, template_message)
    elif text == 'carousel':
        carousel_template = CarouselTemplate(columns=[
            CarouselColumn(text='hoge1',
                           title='fuga1',
                           actions=[
                               URIAction(label='Go to line.me',
                                         uri='https://line.me'),
                               PostbackAction(label='ping', data='ping')
                           ]),
            CarouselColumn(text='hoge2',
                           title='fuga2',
                           actions=[
                               PostbackAction(label='ping with text',
                                              data='ping',
                                              text='ping'),
                               MessageAction(label='Translate Rice', text='米')
                           ]),
        ])
        template_message = TemplateSendMessage(alt_text='Carousel alt text',
                                               template=carousel_template)
        line_bot_api.reply_message(event.reply_token, template_message)
    elif text == 'Osaka':
        carousel_template = CarouselTemplate(columns=[
            CarouselColumn(
                thumbnail_image_url=
                'https://s3-us-west-2.amazonaws.com/awsrobomakerhelloworld-154344673743-bundlesbucket-1n2aine7xqbt8/image/osaka1024.jpg',
                title='Osaka1',
                text='Cooool',
                actions=[
                    PostbackAction(
                        label='Colorful town', text='Cooool', data='Cooool')
                ]),
            CarouselColumn(
                thumbnail_image_url=
                'https://s3-us-west-2.amazonaws.com/awsrobomakerhelloworld-154344673743-bundlesbucket-1n2aine7xqbt8/image/osaka2-1024.jpg',
                title='Osaka2',
                text='Women power',
                actions=[
                    PostbackAction(
                        label='Castle', text='Women power', data='Women power')
                ]),
            CarouselColumn(
                thumbnail_image_url=
                'https://s3-us-west-2.amazonaws.com/awsrobomakerhelloworld-154344673743-bundlesbucket-1n2aine7xqbt8/image/osaka3-1024.jpg',
                title='Osaka3',
                text='Where is this?',
                actions=[
                    PostbackAction(label='Some place !!',
                                   text='Where is this?',
                                   data='Where is this?')
                ]),
            CarouselColumn(
                thumbnail_image_url=
                'https://s3-us-west-2.amazonaws.com/awsrobomakerhelloworld-154344673743-bundlesbucket-1n2aine7xqbt8/image/osaka4-1024.jpg',
                title='Osaka4',
                text='Nice Castle',
                actions=[
                    PostbackAction(label='Another GirlPow',
                                   text='Nice Castle',
                                   data='Nice Castle')
                ]),
            CarouselColumn(
                thumbnail_image_url=
                'https://s3-us-west-2.amazonaws.com/awsrobomakerhelloworld-154344673743-bundlesbucket-1n2aine7xqbt8/image/osaka5-1024.jpg',
                title='Osaka5',
                text='Full face !!',
                actions=[
                    PostbackAction(label='Osaka member',
                                   text='Full face !!',
                                   data='Full face !!')
                ]),
            CarouselColumn(
                thumbnail_image_url=
                'https://s3-us-west-2.amazonaws.com/awsrobomakerhelloworld-154344673743-bundlesbucket-1n2aine7xqbt8/image/osaka6-1024.jpg',
                title='Osaka6',
                text='Tired ??',
                actions=[
                    PostbackAction(
                        label='Mom Power!!', text='Tired ??', data='Tired ??')
                ])
        ])
        template_message = TemplateSendMessage(alt_text='Carousel alt text',
                                               template=carousel_template)
        line_bot_api.reply_message(event.reply_token, template_message)
    elif text == 'Miyuu':
        carousel_template = CarouselTemplate(columns=[
            CarouselColumn(
                thumbnail_image_url=
                'https://s3-us-west-2.amazonaws.com/awsrobomakerhelloworld-154344673743-bundlesbucket-1n2aine7xqbt8/image/miyuu1024-1.jpg',
                text='Miyuu#1',
                actions=[
                    PostbackAction(
                        label='Best Friend', text='Elvis', data='Elvis')
                ]),
            CarouselColumn(
                thumbnail_image_url=
                'https://s3-us-west-2.amazonaws.com/awsrobomakerhelloworld-154344673743-bundlesbucket-1n2aine7xqbt8/image/miyuu1024-2.jpg',
                text='Miyuu#2',
                actions=[
                    PostbackAction(label='GreatWolfLodge',
                                   text='Water park',
                                   data='Water park')
                ]),
            CarouselColumn(
                thumbnail_image_url=
                'https://s3-us-west-2.amazonaws.com/awsrobomakerhelloworld-154344673743-bundlesbucket-1n2aine7xqbt8/image/miyuu1024-3.jpg',
                text='Miyuu#3',
                actions=[
                    PostbackAction(
                        label='Miyuu Cycle', text='Arcade', data='Arcade')
                ]),
            CarouselColumn(
                thumbnail_image_url=
                'https://s3-us-west-2.amazonaws.com/awsrobomakerhelloworld-154344673743-bundlesbucket-1n2aine7xqbt8/image/miyuu1024-4.jpg',
                text='Miyuu#4',
                actions=[
                    PostbackAction(
                        label='Bath Time', text='Love It', data='Love It')
                ]),
            CarouselColumn(
                thumbnail_image_url=
                'https://s3-us-west-2.amazonaws.com/awsrobomakerhelloworld-154344673743-bundlesbucket-1n2aine7xqbt8/image/miyuu1024-5.jpg',
                text='Miyuu#5',
                actions=[
                    PostbackAction(
                        label='The Gang', text='The Gang', data='The Gang')
                ])
        ])
        template_message = TemplateSendMessage(alt_text='Carousel alt text',
                                               template=carousel_template)
        line_bot_api.reply_message(event.reply_token, template_message)

    elif text == 'image_carousel':
        image_carousel_template = ImageCarouselTemplate(columns=[
            ImageCarouselColumn(
                image_url='https://via.placeholder.com/1024x1024',
                action=DatetimePickerAction(label='datetime',
                                            data='datetime_postback',
                                            mode='datetime')),
            ImageCarouselColumn(
                image_url='https://via.placeholder.com/1024x1024',
                action=DatetimePickerAction(
                    label='date', data='date_postback', mode='date'))
        ])
        template_message = TemplateSendMessage(
            alt_text='ImageCarousel alt text',
            template=image_carousel_template)
        line_bot_api.reply_message(event.reply_token, template_message)
    elif text == 'Where is mom':
        location_message = LocationSendMessage(type='Where is Mom?',
                                               title='Mom home',
                                               address='Mom',
                                               latitude=13.799750,
                                               longitude=100.641546)
        line_bot_api.reply_message(event.reply_token, location_message)
    elif text == 'flex':
        bubble = BubbleContainer(
            direction='ltr',
            hero=ImageComponent(url='https://example.com/cafe.jpg',
                                size='full',
                                aspect_ratio='20:13',
                                aspect_mode='cover',
                                action=URIAction(uri='http://example.com',
                                                 label='label')),
            body=BoxComponent(
                layout='vertical',
                contents=[
                    # title
                    TextComponent(text='Brown Cafe', weight='bold', size='xl'),
                    # review
                    BoxComponent(
                        layout='baseline',
                        margin='md',
                        contents=[
                            IconComponent(
                                size='sm',
                                url='https://example.com/gold_star.png'),
                            IconComponent(
                                size='sm',
                                url='https://example.com/grey_star.png'),
                            IconComponent(
                                size='sm',
                                url='https://example.com/gold_star.png'),
                            IconComponent(
                                size='sm',
                                url='https://example.com/gold_star.png'),
                            IconComponent(
                                size='sm',
                                url='https://example.com/grey_star.png'),
                            TextComponent(text='4.0',
                                          size='sm',
                                          color='#999999',
                                          margin='md',
                                          flex=0)
                        ]),
                    # info
                    BoxComponent(
                        layout='vertical',
                        margin='lg',
                        spacing='sm',
                        contents=[
                            BoxComponent(
                                layout='baseline',
                                spacing='sm',
                                contents=[
                                    TextComponent(text='Place',
                                                  color='#aaaaaa',
                                                  size='sm',
                                                  flex=1),
                                    TextComponent(text='Shinjuku, Tokyo',
                                                  wrap=True,
                                                  color='#666666',
                                                  size='sm',
                                                  flex=5)
                                ],
                            ),
                            BoxComponent(
                                layout='baseline',
                                spacing='sm',
                                contents=[
                                    TextComponent(text='Time',
                                                  color='#aaaaaa',
                                                  size='sm',
                                                  flex=1),
                                    TextComponent(
                                        text="10:00 - 23:00",
                                        wrap=True,
                                        color='#666666',
                                        size='sm',
                                        flex=5,
                                    ),
                                ],
                            ),
                        ],
                    )
                ],
            ),
            footer=BoxComponent(
                layout='vertical',
                spacing='sm',
                contents=[
                    # callAction, separator, websiteAction
                    SpacerComponent(size='sm'),
                    # callAction
                    ButtonComponent(
                        style='link',
                        height='sm',
                        action=URIAction(label='CALL', uri='tel:000000'),
                    ),
                    # separator
                    SeparatorComponent(),
                    # websiteAction
                    ButtonComponent(style='link',
                                    height='sm',
                                    action=URIAction(
                                        label='WEBSITE',
                                        uri="https://example.com"))
                ]),
        )
        message = FlexSendMessage(alt_text="hello", contents=bubble)
        line_bot_api.reply_message(event.reply_token, message)
    elif text == 'quick_reply':
        line_bot_api.reply_message(
            event.reply_token,
            TextSendMessage(
                text='Quick reply',
                quick_reply=QuickReply(items=[
                    QuickReplyButton(
                        action=PostbackAction(label="label1", data="data1")),
                    QuickReplyButton(
                        action=MessageAction(label="label2", text="text2")),
                    QuickReplyButton(action=DatetimePickerAction(
                        label="label3", data="data3", mode="date")),
                    QuickReplyButton(action=CameraAction(label="label4")),
                    QuickReplyButton(action=CameraRollAction(label="label5")),
                    QuickReplyButton(action=LocationAction(label="label6")),
                ])))
    else:
        pass
コード例 #10
0
ファイル: inputDataBot_4host.py プロジェクト: mrpy37/ct_host
def handle_postback(event):
  if event.postback.data == 'ping':
    line_bot_api.reply_message(
      event.reply_token, TextSendMessage(text='pong'))

  elif event.postback.data == 'edit':
    edit_menu = CarouselTemplate(
      columns=[
      CarouselColumn(
        thumbnail_image_url='https://stat.ameba.jp/user_images/20161210/17/dsgkomatsu2/e4/8e/j/o0860121713818171577.jpg?caw=800',
        title='A Shop',
        text='Hello!',
        actions=[
        PostbackTemplateAction(
          label='menu1',
          text='postback text1',
          data='action=buy&itemid=1'),
        MessageTemplateAction(
          label='menu2',
          text='message text1'),
        URITemplateAction(
          label='Calling',
          uri='tel:090-6118-6328'
          )]),
      CarouselColumn(
        thumbnail_image_url='https://s3-us-west-2.amazonaws.com/lineapitest/hamburger_240.jpeg',
        title='Tadano Restraunt',
        text='Welcome!',
        actions=[
        PostbackTemplateAction(
          label='menu1',
          text='postback text1',
          data='action=buy&itemid=1'),
        MessageTemplateAction(
          label='menu2',
          text='message text1'),
        URITemplateAction(
          label='uri1',
          uri='http://example.com/1'
          )]),
      CarouselColumn(
        thumbnail_image_url='https://s3-us-west-2.amazonaws.com/lineapitest/hamburger_240.jpeg',
        title='this is menu2',
        text='description2',
        actions=[
        PostbackTemplateAction(
          label='postback2',
          text='postback text2',
          data='action=buy&itemid=2'),
        MessageTemplateAction(
          label='message2',
          text='message text2'),
        URITemplateAction(
          label='uri2',
          uri='http://example.com/2')])
        ])

    template_message = TemplateSendMessage(
      alt_text='Carousel text', template=edit_menu)
    line_bot_api.reply_message(event.reply_token, template_message)

#  elif event.postback.data == 'confirm':


  else:
    line_bot_api.reply_message(
      event.reply_token, TextSendMessage(text=event.postback.data))
コード例 #11
0
ファイル: requestHdlr.py プロジェクト: quts/FunnyChatGroup
    def location_command_handler(self):
        obj_location = GooglePlaceWebAPIWrapper(
            GLOBALS.GOOGLE_PLACES_API_W_SVC_KEY)
        dict_result = obj_location.get(self._event.message.latitude,
                                       self._event.message.longitude)

        lst_carousel_column = []
        lst_db_record_requests = []
        while dict_result:
            luck_place = random.choice(dict_result)
            dict_result.remove(luck_place)
            try:
                the_lat = luck_place['geometry']['location']['lat']
                the_lng = luck_place['geometry']['location']['lng']
                the_name = luck_place['name']
                the_addr = luck_place['vicinity']

                navigation_uri = 'https://www.google.com.tw/maps/place/%s,%s' % (
                    the_lat, the_lng)
                postback_thumbnail_image_url = GoogleStaticMapsAPIWrapper(
                    url=flask.request.base_url.replace(
                        'callback', 'googlemap')).get(the_lat, the_lng,
                                                      the_name,
                                                      self._event.reply_token)

                the_search = ' '.join([the_addr, the_name])
                params_string = urlencode({'q': the_search},
                                          quote_via=quote_plus)
                google_for_it_uri = '?'.join(
                    ['https://www.google.com.tw/search', params_string])

                objCarouselColumn = CarouselColumn(
                    thumbnail_image_url=postback_thumbnail_image_url,
                    title=u'%s' % the_name,
                    text=u'%s' % the_addr,
                    actions=[
                        URITemplateAction(label=MESSAGE.MAP_NAVI_BTN,
                                          uri=navigation_uri),
                        URITemplateAction(label=MESSAGE.MAP_NAVI_SRCH,
                                          uri=google_for_it_uri)
                    ])

                lst_carousel_column.append(objCarouselColumn)
                lst_db_record_requests.append({
                    'id':
                    len(lst_carousel_column),
                    'center':
                    '%s,%s' % (the_lat, the_lng),
                    'name':
                    the_name
                })

                if len(lst_carousel_column) > 2:
                    break
            except LineBotApiError as e:
                app.logger.error(luck_place)
                continue

        if len(lst_carousel_column) > 0:
            image_carousel_template_message = TemplateSendMessage(
                alt_text=MESSAGE.POST_BACK_ALT,
                template=CarouselTemplate(columns=lst_carousel_column))

            self._line.reply_message(self._event.reply_token,
                                     image_carousel_template_message)
            self._fb.update_one({
                'type': 'gmap_token',
                'key': self._event.reply_token,
                'time': self._timestamp,
                'requests': lst_db_record_requests
            })
        else:
            self._replyText(CommonError.NO_AVALIABLE_DATA.get_msg())

        app.logger.info('Leave location handler')
コード例 #12
0
def scheduleAbsen(absen_id):
    print('Scheduling absen notifier for', absen_id)
    absen_data = feature_utils.sqlite_select_all('SELECT val FROM ' + absen_id)

    data_absen = []
    for data in absen_data:
        data_absen.append(data[0])
    print(data_absen)

    currentTime = getCurrentIndoTime()
    targetTime = int(data_absen[0])
    targetTime += 7200
    reminderTime = targetTime - (3600 * 11)
    print('Now scheduling', absen_id)
    print('Current Time: ', currentTime)
    print('Target Time: ', targetTime)

    reminder_msg = 'Daftar Kehadiran: '
    dead_msg = 'Daftar kehadiran terakhir untuk absen ' + data_absen[
        3] + ' yang direncanakan pada ' + data_absen[2] + ':\n'

    data_kehadiran = feature_utils.sqlite_select_all('SELECT * FROM ' +
                                                     absen_id)
    datak = []
    for data in data_kehadiran:
        datak.append(data[0] + ', ' + data[1])
    print(datak)

    for attedants in range(6, len(data_kehadiran)):
        reminder_msg += '\n' + str(attedants - 5) + '. ' + datak[attedants]
        dead_msg += '\n' + str(attedants - 5) + '. ' + datak[attedants]

    reminder_msg = reminder_msg.replace('(', '')
    reminder_msg = reminder_msg.replace(')', '')

    dead_msg = dead_msg.replace('(', '')
    dead_msg = dead_msg.replace(')', '')

    dead_msg += '\n\nData absen tersebut akan dihapus.'

    absen_template = TemplateSendMessage(
        alt_text='Pesan Pengingat Absen',
        template=ButtonsTemplate(
            title='Pengingat Absen: ' + str(data_absen[2]),
            text=str(data_absen[3]) + "(oleh " + str(data_absen[4]) + ")",
            actions=[
                MessageAction(label='Hadir',
                              text='#absen ' + str(data_absen[1]) + ' Hadir'),
                MessageAction(label='Tidak Hadir',
                              text='#absen ' + str(data_absen[1]) +
                              ' Tidak_Hadir'),
                MessageAction(label='Izin',
                              text='#absen ' + str(data_absen[1]) + ' Izin'),
                MessageAction(label='Sakit',
                              text='#absen ' + str(data_absen[1]) + ' Sakit'),
            ]))

    ### FOR TEST PURPOSE ###
    # currentTime = reminderTime + 2

    # IF REMINDER TIME HITS
    if (currentTime >= reminderTime and currentTime <= (reminderTime + 600)):

        # Send Reminder MSG
        print('Sending reminder msg for id', data_absen[1])
        sendPushMessage(data_absen[5],
                        [absen_template,
                         TextSendMessage(str(reminder_msg))])

    # IF REMINDER 2 TRIGGERED
    if (currentTime >= (targetTime - 7200) and currentTime <=
        (targetTime - 6600)):

        # Send Reminder MSG
        print('Sending reminder msg for id', data_absen[1])
        sendPushMessage(data_absen[5],
                        [absen_template,
                         TextSendMessage(str(reminder_msg))])

    # IF ABSEN IS GOING TO 'DEAD'
    if (currentTime >= targetTime):

        # Send Final Push MSG Here!!!
        print('Sending dead msg and deleting', data_absen[1])
        sendPushMessage(data_absen[5], TextSendMessage(str(dead_msg)))

        # Delete the absen from DB
        feature_utils.sqlite_query('DROP TABLE IF EXISTS abs_' +
                                   str(data_absen[1]))
コード例 #13
0
def Rule_Based_Engine(event):
    str = event.message.text
    strupper = str.upper()
    # Help
    if "HELP" in strupper:
        Help_Result = TextSendMessage(text="目前可以使用:\n"
                                      "● 查詢TPS儲存環電流\n => TPS+Current\n\n"\
                                      #"● 查詢Front End狀態\n => FE+Status \n\n"\
                                      "● 查詢XBPM數值\n => XBPM+FE段數 \n\n"\
                                      "● 查詢前端區真空狀態\n => Vacuum+Status+FE段數\n\n"\
                                      "● Interlock功能:\n"\
                                      "----所有狀態----\n"\
                                      "=> Interlock+All\n"
                                      "----單站狀態----\n"\
                                      "=> Interlock+Status\n+FE段數\n"\
                                      "----警示點位----\n"\
                                      "=> Interlock+Alarm\n+FE段數")
        return Help_Result

    # Reply TPS Current
    if "TPS" in strupper and "CURRENT" in strupper:
        Get_TPS_Current = float(caget('TPS:BeamCurrent'))
        TPS_Current_Result = TextSendMessage(
            text="TPS Current:\n%.4f mA" % Get_TPS_Current)
        return TPS_Current_Result

    # Reply All FE Status
    if "INTERLOCK" in strupper and "ALL" in strupper:
        FE02_S = caget('VacFE-Status:02', use_monitor=False)
        FE05_S = caget('VacFE-Status:05', use_monitor=False)
        FE09_S = caget('VacFE-Status:09', use_monitor=False)
        FE21_S = caget('VacFE-Status:21', use_monitor=False)
        FE23_S = caget('VacFE-Status:23', use_monitor=False)
        FE24_S = caget('VacFE-Status:24', use_monitor=False)
        FE25_S = caget('VacFE-Status:25', use_monitor=False)
        FE41_S = caget('VacFE-Status:41', use_monitor=False)
        FE44_S = caget('VacFE-Status:44', use_monitor=False)
        FE45_S = caget('VacFE-Status:45', use_monitor=False)
        text = "FE各段狀態如下 :\n" +\
            "● FE-02 Status: %s \n" % FE02_S +\
            "● FE-05 Status: %s \n" % FE05_S +\
            "● FE-09 Status: %s \n" % FE09_S +\
            "● FE-21 Status: %s \n" % FE21_S +\
            "● FE-23 Status: %s \n" % FE23_S +\
            "● FE-24 Status: %s \n" % FE24_S +\
            "● FE-25 Status: %s \n" % FE25_S +\
            "● FE-41 Status: %s \n" % FE41_S +\
            "● FE-44 Status: %s \n" % FE44_S +\
            "● FE-45 Status: %s" % FE45_S
        text = text.replace("Error!**", "❗️")
        text = text.replace("Normal", "✔️")
        Interlock_All_Result = TextSendMessage(text=text)
        return Interlock_All_Result

    # interlock+STATUS+number
    if "VALVE" in strupper and "STATUS" in strupper and "FE" in strupper:  # unfinished
        str = event.message.text
        FE_number = re.sub("\D", "", str)  # take out FE number
        print('Interlock Index:%s' % FE_number)
        if bool(FE_number) == True:
            # try:
            Valve_Status_Text = Valve_Status(FE_number)
            if Valve_Status_Text == 0:
                return 0
            else:
                Valve_Status_Result = TextSendMessage(text=Valve_Status_Text)
                return Valve_Status_Result
        else:
            print("No Index:No FE number in text")
        return 0

    # interlock+FALSE+number
    if "INTERLOCK" in strupper and "ALARM" in strupper:  # unfinished
        try:
            str = event.message.text
            FE_number = re.sub("\D", "", str)  # take out FE number
            print('Interlock Index:%s' % FE_number)
            if bool(FE_number) == True:
                error_text = FE_Diagnosis(FE_number)
                if error_text == 0:
                    return 0
                else:
                    Error_Result = TextSendMessage(text=error_text)
                    return Error_Result
            else:
                print("No Index:No FE number in text")
        except:
            print("Error")
        return 0

    if "XBPM" in strupper and "FE" in strupper:  # unfinished
        str = event.message.text
        FE_number = re.sub("\D", "", str)  # take out FE number
        print('XBPM index:%s' % FE_number)
        if bool(FE_number) == True:
            try:
                # Use EPICS to get XBPM value
                XBPM_1X, XBPM_1Y, XBPM_2X, XBPM_2Y = XBPM_Status(FE_number)
                # Use LINE message API reply method return the result
                XBPM_Reuslt = TextSendMessage(text="FE%s XBPM Position:\n" % FE_number +
                                              "● 1X: %s um\n" % XBPM_1X +
                                              "● 1Y: %s um\n" % XBPM_1Y +
                                              "● 2X: %s um\n" % XBPM_2X +
                                              "● 2Y: %s um" % XBPM_2Y)
                return XBPM_Reuslt
            except:
                print("No Index")
                return 0
        else:
            print("No Index")
        return 0
# -----------------------------------------------------------------------------20181227
    if "VACUUM" in strupper and "STATUS" in strupper:
        str = event.message.text
        FE_number = re.sub("\D", "", str)
        print('Vacuum index:%s' % FE_number)
        if bool(FE_number) == True:
            Vacuum_msg = FE_VacPresure(FE_number)
            print(Vacuum_msg)
            if Vacuum_msg == 0:
                return 0
            else:
                Vacuum_Result = TextSendMessage(text=Vacuum_msg)
                return Vacuum_Result
        else:
            print("No Index")
            return 0

    if "TEMP" in strupper and "STATUS" in strupper:
        str = event.message.text
        FE_number = re.sub("\D", "", str)
        print('Temp index:%s' % FE_number)
        if bool(FE_number) == True:
            Temp_msg = FE_Temp(FE_number)
            print(Temp_msg)
            if Temp_msg == 0:
                return 0
            else:
                TEMP_Result = TextSendMessage(text=Temp_msg)
                return TEMP_Result
        else:
            print("No Index")
            return 0

    if "ID" in strupper and "GAP" in strupper and "FE" in strupper:
        str = event.message.text
        FE_number = re.sub("\D", "", str)
        print('ID index:%s' % FE_number)
        if bool(FE_number) == True:
            ID_Gap_msg = ID_Gap_Result(FE_number)
            ID_Gap = TextSendMessage(text=ID_Gap_msg)
            return ID_Gap
        else:
            print("No Index")
            return 0

    if "CAROUSEL" in strupper and "TEMP" in strupper:
        TEMP_carousel = TemplateSendMessage(
            alt_text='Carousel template', template=FE_Temp_Carousel())
        return TEMP_carousel

    if "CAROUSEL" in strupper and "INTERLOCK" in strupper:
        INTERLOCK_carousel = TemplateSendMessage(
            alt_text='Carousel template', template=Interlock_Carousel())
        return INTERLOCK_carousel

    if "CAROUSEL" in strupper and "VACUUM" in strupper:
        VACUUM_carousel = TemplateSendMessage(
            alt_text='Carousel template', template=FE_Vacuum_Carousel())
        return VACUUM_carousel

    if "CAROUSEL" in strupper and "VALVE" in strupper:
        carousel_template_message = TemplateSendMessage(
            alt_text='Carousel template', template=FE_Valve_Carousel())
        return carousel_template_message

    if "CAROUSEL" in strupper and "XBPM" in strupper:
        carousel_template_message = TemplateSendMessage(
            alt_text='Carousel template', template=XBPM_Carousel())
        return carousel_template_message

    if "CAROUSEL" in strupper and "ID" in strupper:
        carousel_template_message = TemplateSendMessage(
            alt_text='ID Gap Status', template=ID_Gap_Carousel())
        return carousel_template_message
    return 0
コード例 #14
0
def user_guide():
    return TemplateSendMessage(
        alt_text='【使用說明書 ver 2.0】',
        template=CarouselTemplate(columns=[
            CarouselColumn(
                thumbnail_image_url='https://i.imgur.com/02b6MnB.jpg',
                title=' - 【使用說明書】 - ',
                text='!使用說明書、!help、!說明書',
                actions=[
                    PostbackTemplateAction(
                        label='說明書', text='!help', data='action=buy&itemid=1'),
                    MessageTemplateAction(label='readme', text='!help'),
                    # URITemplateAction(
                    # 	label='uri1',
                    # 	uri='http://example.com/1'
                    # )
                ]),
            CarouselColumn(
                thumbnail_image_url='https://i.imgur.com/02b6MnB.jpg',
                title=' - 【健康教育類】 - ',
                text='!教育/調教、!看圖、!智乃看圖片、!給智乃看圖、!智乃看圖圖、〖修復中〗!忘記',
                actions=[
                    PostbackTemplateAction(label='學習文字',
                                           text='!教育 ?',
                                           data='action=buy&itemid=1'),
                    MessageTemplateAction(label='學習圖片', text='!學圖 ?'),
                    # URITemplateAction(
                    # 	label='uri1',
                    # 	uri='http://example.com/1'
                    # )
                ]),
            CarouselColumn(
                thumbnail_image_url='https://i.imgur.com/02b6MnB.jpg',
                title=' - 【算命抽籤類】 - ',
                text='!機率、!抽數字',
                actions=[
                    PostbackTemplateAction(
                        label='機率', text='!機率 ?', data='action=buy&itemid=1'),
                    MessageTemplateAction(label='抽數字', text='!抽數字 ?'),
                    # URITemplateAction(
                    # 	label='uri1',
                    # 	uri='http://example.com/1'
                    # )
                ]),
            CarouselColumn(
                thumbnail_image_url='https://i.imgur.com/02b6MnB.jpg',
                title=' - 【遊戲抽抽類】 - ',
                text='!抽抽、!終極密碼、!幾A幾B、小遊戲、機會命運',
                actions=[
                    PostbackTemplateAction(
                        label='小遊戲', text='小遊戲', data='action=buy&itemid=1'),
                    MessageTemplateAction(label='小遊戲', text='小遊戲'),
                    # URITemplateAction(
                    # 	label='uri1',
                    # 	uri='http://example.com/1'
                    # )
                ]),
            CarouselColumn(
                thumbnail_image_url='https://i.imgur.com/02b6MnB.jpg',
                title=' - 【不知幹嘛類】 - ',
                text='貼圖辣、母湯、母湯電影版',
                actions=[
                    PostbackTemplateAction(
                        label='貼圖辣', text='貼圖辣', data='action=buy&itemid=1'),
                    MessageTemplateAction(label='貼圖辣', text='貼圖辣'),
                    # URITemplateAction(
                    # 	label='uri1',
                    # 	uri='http://example.com/1'
                    # )
                ]),
            CarouselColumn(
                thumbnail_image_url='https://i.imgur.com/02b6MnB.jpg',
                title=' - 【如果覺得太吵的話】 -',
                text='!開關',
                actions=[
                    PostbackTemplateAction(
                        label='讓智乃說話', text='!說話', data='action=buy&itemid=1'),
                    MessageTemplateAction(label='請智乃閉嘴', text='!閉嘴'),
                    # URITemplateAction(
                    # 	label='uri1',
                    # 	uri='http://example.com/1'
                    # )
                ]),
            CarouselColumn(
                thumbnail_image_url='https://i.imgur.com/02b6MnB.jpg',
                title=' - 【如果壞掉了要維修】 - ',
                text='!壞掉啦、呼叫四月、呼叫工程師',
                actions=[
                    PostbackTemplateAction(label='壞掉啦!!!',
                                           text='呼叫工程師',
                                           data='action=buy&itemid=1'),
                    MessageTemplateAction(label='呼叫工程師', text='呼叫工程師'),
                    # URITemplateAction(
                    # 	label='uri1',
                    # 	uri='http://example.com/1'
                    # )
                ]),
            CarouselColumn(
                thumbnail_image_url='https://i.imgur.com/02b6MnB.jpg',
                title=' - 【散步打排名 1】 - ',
                text='即時排名/即時戰況/排名/分數/戰況/score、%數/%、一位差、分數差',
                actions=[
                    PostbackTemplateAction(
                        label='test', text='test', data='action=buy&itemid=1'),
                    MessageTemplateAction(label='test', text='test'),
                    # URITemplateAction(
                    # 	label='uri1',
                    # 	uri='http://example.com/1'
                    # )
                ]),
            CarouselColumn(
                thumbnail_image_url='https://i.imgur.com/02b6MnB.jpg',
                title=' - 【散步打排名 2】 - ',
                text='場數差、追擊時間/脫褲子、時速、場速、活動進度/進度、剩餘時間',
                actions=[
                    PostbackTemplateAction(
                        label='test', text='test', data='action=buy&itemid=1'),
                    MessageTemplateAction(label='test', text='test'),
                    # URITemplateAction(
                    # 	label='uri1',
                    # 	uri='http://example.com/1'
                    # )
                ]),
            CarouselColumn(
                thumbnail_image_url='https://i.imgur.com/02b6MnB.jpg',
                title=' - 【散步打排名 3】 - ',
                text='房號/room/rm/R/r、r1/room1、r2/room2、!pt、!fire、!stone、!lz',
                actions=[
                    PostbackTemplateAction(
                        label='test', text='test', data='action=buy&itemid=1'),
                    MessageTemplateAction(label='test', text='test'),
                    # URITemplateAction(
                    # 	label='uri1',
                    # 	uri='http://example.com/1'
                    # )
                ])
        ]))
コード例 #15
0
def process_postback_event(event):
    # print(event)

    query_string_dict = parse_qs(event.postback.data)
    user_id = str(event.source.user_id)
    # print(user_id)
    print(query_string_dict)
    try:
        # user_id=str(event.source.user_id)

        value = query_string_dict.get('tag')[0]
        Field = query_string_dict.get('name')[0]
        print(Field, value)

        sql = f'''


           UPDATE line_bot_db.user_linebot_record 
           SET {Field}="{value}" 
           WHERE userid="{user_id}";

           '''
        db.engine.execute(sql)
    except Exception as a:
        # print(a)
        callback

    # 取得data內的資料
    # data 如果action 有在內的話
    if "action" in query_string_dict:
        if query_string_dict.get('action')[0] == 'init':
            check = init_user_profile(user_id)
            print(check)
        elif query_string_dict.get('action')[0] == 'recommend':
            Produclist = []
            from get_tfidf_recommendation import get_tfidf_recommendation
            try:
                get_user_search = f''' SELECT user_index FROM line_bot_db.user_linebot_record WHERE userid='{user_id}';'''
                index = db.engine.execute(get_user_search).fetchall()[0][0]

                recommedation_list = get_tfidf_recommendation(index)
                #print(recommedation_list)
                for Product_ID in recommedation_list:
                    # print(Product_ID)
                    search_id = f'''SELECT * FROM eb103.ikea_cl_test_f7 WHERE Product_number="{Product_ID}"'''

                    Product = db.engine.execute(search_id).fetchall()
                    d, a = {}, []
                    for rowproxy in Product:
                        for column, value in rowproxy.items():
                            d = {**d, **{column: value}}
                        a.append(d)
                        #print(a[0])



                        Product_number = a[0]['Product_number']
                        Product_imageurl = a[0]['funiture_url']
                        #print(Product_imageurl)
                        Product_title = a[0]['title']
                        Product_summy = a[0]['Product_Information']
                        Product_url = a[0]['url']
                        # print(Product_number)
                        Carouse = \
                            CarouselColumn(
                                thumbnail_image_url=f"{Product_imageurl}",
                                title=f'{Product_title}',
                                text=f'{Product_summy}',
                                actions=[
                                    PostbackTemplateAction(
                                        label='查看商品',
                                        text=f'{Product_url}',
                                        data=f'tag={Product_number}&name=user_index')
                                    # ,URITemplateAction(
                                    #     label='uri1',
                                    #     uri='http://example.com/1'
                                    # )

                                ]
                            )
                        Produclist.append(Carouse)
                        #print(Produclist)
                result_message_array = TemplateSendMessage(
                    alt_text='Carousel template',
                    template=CarouselTemplate(
                        columns=Produclist
                    )
                )

                line_bot_api.reply_message(
                    event.reply_token,
                    result_message_array
                )
            except Exception:
                # 查詢pages值12321
                search_sql = f'''
                                   SELECT * FROM line_bot_db.user_search WHERE userid="{user_id}";
                                   '''
                data_search = db.engine.execute(search_sql).fetchall()
                if data_search == []:
                    # 預設pages 值
                    page = 0
                    insert_sql = f'''
                                        INSERT INTO line_bot_db.user_search(userid,pages)
                                        VALUES ("{user_id}",{page});'''

                    db.engine.execute(insert_sql)

                # 查詢結果如果不為空值 則將結果取出dict
                elif data_search != []:
                    e, c = {}, []
                    for data in data_search:
                        for column, value in data.items():
                            e = {**e, **{column: value}}
                        c.append(e)
                    # 將page 取出放入sql內
                    page = (c[0]['pages'])
                sql=f'''SELECT * FROM eb103.ikea_cl_test_f7
                    ORDER BY rand()
                    LIMIT 4,4'''
                Carouselist = []
                data = (db.engine.execute(sql).fetchall())

                d, a = {}, []
                for rowproxy in data:
                    for column, value in rowproxy.items():
                        d = {**d, **{column: value}}
                    a.append(d)
                for i in a:
                    all = dict(i)
                    # index
                    user_index = all['MyUnknownColumn']
                    # 商品名稱
                    title = all['title']
                    # 商品ID
                    product_number = all['Product_number']
                    print(product_number)
                    # 商品種類
                    object_type = all['category']
                    # 商品介紹
                    Product_summy = all['Product_Information']
                    # fileall = '商品介紹: ' + product_number + summary + object_type
                    # 商品連結
                    url = all['url']

                    # 商品價格
                    price = all['price']
                    # 商品照片
                    images = all['funiture_url']

                    # object_string = object_string.replace("[", "").replace("]", "").replace("'", "")
                    # object_string = object_string.split(',')
                    #
                    # print(object_string)

                    Carouse = \
                        CarouselColumn(
                            thumbnail_image_url=images,
                            title=f'{title}',
                            text=f'{Product_summy}',
                            actions=[
                                PostbackTemplateAction(
                                    label='查看商品',
                                    text=f'{url}',
                                    data=f'tag={product_number}&name=user_index')
                                # ,URITemplateAction(
                                #     label='uri1',
                                #     uri='http://example.com/1'
                                # )

                            ]
                        )
                    Carouselist.append(Carouse)
                    # 下一頁


                result_message_array = TemplateSendMessage(
                    alt_text='Carousel template',
                    template=CarouselTemplate(
                        columns=Carouselist
                    )
                )

                line_bot_api.reply_message(
                    event.reply_token,
                    result_message_array
                )
        else:
            pass

    if 'folder' in query_string_dict:

        # print(query_string_dict.get('folder'))

        #     if query_string_dict.get('folder')[0]=='Furniture':
        #         # if query_string_dict.get('tag')[0]=='nextpage':
        #         #      sql = f'''
        #         #             SELECT * FROM line_bot_db.csv2 Limit 4,4;
        #         #             '''
        #         # else:
        #         page = 0
        #         search_sql=f'''
        #         SELECT pages from line_bot_db.user_search WHERE userid="{user_id}";
        #         '''
        #         data_search=db.engine.execute(search_sql).fetchall()
        #         if data_search==[]:
        #
        #             insert_sql=f'''
        #                     INSERT INTO line_bot_db.user_search(userid,pages)
        #                     VALUES ("{user_id}",{page});'''
        #
        #
        #             db.engine.execute(insert_sql)
        #
        #
        #         elif data_search !=[]:
        #             e,c ={},[]
        #             for data in data_search:
        #                 for column,value in data.items():
        #                     e={**e,**{column:value}}
        #                 c.append(e)
        #             page=(c[0]['pages'])
        #
        #         sql = f'''
        #                 SELECT * FROM eb103.ikea_test Limit {page},4 ;
        #                 '''
        #         page +=4
        #         UPdate=f'''
        #                 UPDATE user_search
        # 	            SET pages={page}
        #                 WHERE userid="{user_id}";
        #                 '''
        #         db.engine.execute(UPdate)
        #         Carouselist = []
        #         data = (db.engine.execute(sql).fetchall())
        #         d,a={},[]
        #         for rowproxy in data:
        #             for column,value in rowproxy.items():
        #                 d={**d,**{column:value}}
        #             a.append(d)
        #
        #         #print(a[0]['images'][0])
        #         # object_string=dict(a[0])
        #         # print(type(object_string))
        #         # print(object_string['title'])
        #         #str轉list
        #         #object_string=object_string.replace("[", "").replace("]", "").replace("'", "")
        #         #object_string=object_string.split(',')
        #         #print(object_string[0])
        #         #print(type(object_string))
        #         print((a))
        #         for i in a:
        #             all=dict(i)
        #             title =all['title']
        #             product_number=all['Product number']+'\n'
        #             object_type=all['type']+'\n'
        #             summary=all['summary']+'\n'
        #             fileall='商品介紹: '+product_number+summary+object_type
        #             url=all['url']
        #
        #             object_string = all['interior_photo']
        #
        #             # object_string = object_string.replace("[", "").replace("]", "").replace("'", "")
        #             # object_string = object_string.split(',')
        #             #
        #             # print(object_string)
        #
        #             Carouse=\
        #                  CarouselColumn(
        #                      thumbnail_image_url=object_string ,
        #                      title=f'{title}',
        #                      text=f'{fileall}',
        #                      actions=[
        #                          PostbackTemplateAction(
        #                              label='查看商品',
        #                              text=f'{url}',
        #                              data='tag=回傳商品的點擊率'),
        #                          # URITemplateAction(
        #                          #     label='uri1',
        #                          #     uri='http://example.com/1'
        #                          # )
        #
        #
        #                      ]
        #                                 )
        #             Carouselist.append(Carouse)
        #         nextpage=CarouselColumn(
        #                 thumbnail_image_url='https://cdn.stocksnap.io/img-thumbs/960w/autumn-trees_FMKZ57EIMQ.jpg',
        #                 title='都沒有你要的?',
        #                 text='看看下一頁',
        #                 actions=[
        #                 PostbackTemplateAction(
        #                     label='下一頁',
        #                     text='看看商品上架',
        #                     data='folder=Furniture&tag=nextpage'),
        #                 # PostbackTemplateAction(
        #                 #     label='下一頁',
        #                 #     text='看看商品上架',
        #                 #     data='folder=Furniture&tag=nextpage'
        #                 # )
        #                 ]
        #         )
        #         Carouselist.append(nextpage)
        #         result_message_array = TemplateSendMessage(
        #             alt_text='Carousel template',
        #             template=CarouselTemplate(
        #                 columns=Carouselist
        #             )
        #         )
        #
        #
        #
        #     else:
        result_message_array = []

        replyJsonPath = 'material/' + query_string_dict.get('folder')[0] + "/reply.json"
        # print(replyJsonPath) #路徑
        result_message_array = detect_json_array_to_new_message_array(replyJsonPath)
        # print(result_message_array)

        line_bot_api.reply_message(
            event.reply_token,
            result_message_array
        )
    # 如果data 內有end 則輸出輪播商品
    elif 'end' in query_string_dict:
        # user_id = str(event.source.user_id)
        # 取出使用者查詢條件dict
        data_search_sql = f'''
        SELECT * FROM line_bot_db.user_linebot_record WHERE userid="{user_id}";
        '''
        data = (db.engine.execute(data_search_sql).fetchall())
        d, a = {}, []
        for rowproxy in data:
            for column, value in rowproxy.items():
                d = {**d, **{column: value}}
            a.append(d)
        print(a)

        all = dict(a[0])
        style = all['style']
        category = all['category']
        price = all['price']
        colour = all['colour']

        # 查詢pages值
        search_sql = f'''
                    SELECT * FROM line_bot_db.user_search WHERE userid="{user_id}";
                    '''
        data_search = db.engine.execute(search_sql).fetchall()

        # print(data_search)
        # 查詢結果如果是空值 初始化值寫入
        if data_search == []:
            # 預設pages 值
            page = 0
            insert_sql = f'''
                                INSERT INTO line_bot_db.user_search(userid,pages)
                                VALUES ("{user_id}",{page});'''

            db.engine.execute(insert_sql)

        # 查詢結果如果不為空值 則將結果取出dict
        elif data_search != []:
            e, c = {}, []
            for data in data_search:
                for column, value in data.items():
                    e = {**e, **{column: value}}
                c.append(e)
            # 將page 取出放入sql內
            page = (c[0]['pages'])
            # print(page)
        # sql放入指定條件變數
        sql = f'''
                    SELECT * FROM eb103.ikea_cl_test_f7
                    WHERE style="{style}"
                    AND category="{category}"
                    AND (new_color_1 LIKE "%%{colour}%%" OR new_color_1 LIKE "%%{colour}%%" OR new_color_1 LIKE "%%{colour}%%")
                    AND price {price}
                    ORDER BY rand()
                    LIMIT {page},4

                            '''
        print(sql)
        # 每次查詢加4 並更新寫入Mysql
        page += 4
        # print(page)
        UPdate = f'''
                            UPDATE line_bot_db.user_search
                            SET pages={page}
                            WHERE userid="{user_id}";
                            '''
        db.engine.execute(UPdate)
        # 查詢
        Carouselist = []
        data = (db.engine.execute(sql).fetchall())

        d, a = {}, []
        for rowproxy in data:
            for column, value in rowproxy.items():
                d = {**d, **{column: value}}
            a.append(d)

        # print(a[0]['images'][0])
        # object_string=dict(a[0])
        # print(type(object_string))
        # print(object_string['title'])
        # str轉list
        # object_string=object_string.replace("[", "").replace("]", "").replace("'", "")
        # object_string=object_string.split(',')
        # print(object_string[0])
        # print(type(object_string))
        print(a)
        for i in a:
            all = dict(i)
            # index
            user_index = all['MyUnknownColumn']
            # 商品名稱
            title = all['title']
            # 商品ID
            product_number = all['Product_number']
            print(product_number)
            # 商品種類
            object_type = all['category']
            # 商品介紹
            Product_summy = all['Product_Information']
            # fileall = '商品介紹: ' + product_number + summary + object_type
            # 商品連結
            url = all['url']

            # 商品價格
            price = all['price']
            # 商品照片
            images = all['funiture_url']

            # object_string = object_string.replace("[", "").replace("]", "").replace("'", "")
            # object_string = object_string.split(',')
            #
            # print(object_string)

            Carouse = \
                CarouselColumn(
                    thumbnail_image_url=images,
                    title=f'{title}',
                    text=f'{Product_summy}',
                    actions=[
                        PostbackTemplateAction(
                            label='查看商品',
                            text=f'{url}',
                            data=f'tag={product_number}&name=user_index')
                        # ,URITemplateAction(
                        #     label='uri1',
                        #     uri='http://example.com/1'
                        # )

                    ]
                )
            Carouselist.append(Carouse)
        # 下一頁
        nextpage = CarouselColumn(
            thumbnail_image_url='https://cdn.stocksnap.io/img-thumbs/960w/autumn-trees_FMKZ57EIMQ.jpg',
            title='都沒有你要的?',
            text='看看下一頁',
            actions=[
                PostbackTemplateAction(
                    label='下一頁',
                    text='看看商品上架',
                    data='end=nextpage'),
                # PostbackTemplateAction(
                #     label='下一頁',
                #     text='看看商品上架',
                #     data='folder=Furniture&tag=nextpage'
                # )
            ]
        )
        Carouselist.append(nextpage)

        result_message_array = TemplateSendMessage(
            alt_text='Carousel template',
            template=CarouselTemplate(
                columns=Carouselist
            )
        )

        line_bot_api.reply_message(
            event.reply_token,
            result_message_array
        )



    #     linkRichMenuId = open("material/" + query_string_dict.get('menu')[0] + '/rich_menu_id', 'r').read()
    #     line_bot_api.link_rich_menu_to_user(event.source.user_id, linkRichMenuId)
    #
    #     replyJsonPath = 'material/' + query_string_dict.get('menu')[0] + "/reply.json"
    #     result_message_array = detect_json_array_to_new_message_array(replyJsonPath)
    #
    #     line_bot_api.reply_message(
    #         event.reply_token,
    #         result_message_array
    #     )
    # data 型態如果有  information  在 query_string_dict內
    elif 'information' in query_string_dict:  # 使用者資料
        # conn = pymysql.connect(host=host, port=port, user=user, passwd=passwd, db=db)
        # cursor = conn.cursor()
        #
        # 抓取使用者id
        user_profile = line_bot_api.get_profile(event.source.user_id)
        # userID = str(user_profile.user_id)
        print(user_id)
        # init_user_profile(userID)

        try:
            @app.route('/html1/<userID>', methods=['GET'])
            def html2(userID):
                return render_template('surveyweb.html', ID=user_id)

            @app.route('/submit', methods=['POST'])
            def submit():
                user_ID = request.values.get('user_ID')
                name = str(request.values.get('name'))
                email = str(request.values.get('email'))
                gender = int(request.form.get('gender'))
                age = str(request.form.get('age'))

                print(user_ID, name, email, gender, age)
                sql = f'''
                UPDATE line_bot_db.lineuser
                SET self_name="{name}",email="{email}",gender={gender}
                ,age="{age}"
                WHERE userid="{user_ID}"

                '''
                db.engine.execute(sql)
                return '資料更改完成'
        except:
            pass
        # usedb=f'USE line_bot_db;'
        # db.engine.execute(usedb)
        sql = f''' 
        SELECT * FROM line_bot_db.lineuser WHERE userid="{user_id}";

        '''
        try:
            data = list((db.engine.execute(sql).fetchall())[0])

            data1 = '名字:' + data[1] + '\n'
            data2 = '信箱:' + data[2] + '\n'

            if data[3] == '1':
                data[3] = '男'
            else:
                data[3] = '女'
            data3 = '性別:' + data[3] + '\n'

            if data[4] == 'age1':
                data[4] = '未滿20歲'
            elif data[4] == 'age2':
                data[4] = '20~29歲'
            elif data[4] == 'age3':
                data[4] = '30~39歲'
            elif data[4] == 'age4':
                data[4] = '40~49歲'
            elif data[4] == 'age5':
                data[4] = '50歲以上'
            data4 = '年齡:' + data[4] + '\n'

            falldata = data1 + data2 + data3 + data4
            print(falldata)
            message = [TextSendMessage(falldata),
                       TemplateSendMessage(
                           alt_text="confirm template",
                           template=ButtonsTemplate(

                               title='你的基本資料',
                               text='以上為個人資料',
                               actions=[
                                   # PostbackTemplateAction(
                                   #     type="postback",
                                   #     label='看看商品上架',
                                   #     text="看看商品上架-傢俱",
                                   #     data='folder=Furniture'
                                   # ),
                                   URITemplateAction(
                                       label='重新輸入資料',
                                       uri=f"https://{server_url}/html1/{user_id}",

                                   )

                               ]
                           )
                       )
                       ]
        except:
            message = TemplateSendMessage(
                alt_text="confirm template",
                template=ButtonsTemplate(

                    title='你的基本資料',
                    text="尚未輸入資料",
                    actions=[
                        # PostbackTemplateAction(
                        #     type="postback",
                        #     label='看看商品上架',
                        #     text="看看商品上架-傢俱",
                        #     data='folder=Furniture'
                        # ),
                        URITemplateAction(
                            label='輸入資料',
                            uri=f"https://{server_url}/html1/{user_id}",

                        )

                    ]
                )
            )

        line_bot_api.reply_message(
            event.reply_token,
            message)
コード例 #16
0
ファイル: main.py プロジェクト: noopy0415/syunsyoku
def handle_message(event):
    if event.message.text == "リクエスト":
        food = Foodstuff().get_food()
        recipes = Recipe().get_recipes(food)

        notes = [
            CarouselColumn(
                thumbnail_image_url=recipes[0]["image"],
                title=recipes[0]["recipe"],
                text=f"{food}のレシピ",
                actions=[URIAction(label='Go!!', uri=recipes[0]["link"])]),
            CarouselColumn(
                thumbnail_image_url=recipes[1]["image"],
                title=recipes[1]["recipe"],
                text=f"{food}のレシピ",
                actions=[URIAction(label='Go!!', uri=recipes[1]["link"])]),
            CarouselColumn(
                thumbnail_image_url=recipes[2]["image"],
                title=recipes[2]["recipe"],
                text=f"{food}のレシピ",
                actions=[URIAction(label='Go!!', uri=recipes[2]["link"])])
        ]

        messages = TemplateSendMessage(
            alt_text='template',
            template=CarouselTemplate(columns=notes),
        )

        line_bot_api.reply_message(event.reply_token, messages=messages)

    if "食材" in event.message.text:
        food = event.message.text.replace("食材", "")
        recipes = Recipe().get_recipes(food)

        notes = [
            CarouselColumn(
                thumbnail_image_url=recipes[0]["image"],
                title=recipes[0]["recipe"],
                text=f"{food}のレシピ",
                actions=[URIAction(label='Go!!', uri=recipes[0]["link"])]),
            CarouselColumn(
                thumbnail_image_url=recipes[1]["image"],
                title=recipes[1]["recipe"],
                text=f"{food}のレシピ",
                actions=[URIAction(label='Go!!', uri=recipes[1]["link"])]),
            CarouselColumn(
                thumbnail_image_url=recipes[2]["image"],
                title=recipes[2]["recipe"],
                text=f"{food}のレシピ",
                actions=[URIAction(label='Go!!', uri=recipes[2]["link"])])
        ]

        messages = TemplateSendMessage(
            alt_text='template',
            template=CarouselTemplate(columns=notes),
        )

        line_bot_api.reply_message(event.reply_token, messages=messages)

    if event.message.text == "How To":
        msg = '''「リクエスト」と言ってもらえれば12月のレシピを提案します\n「食材」のあとに使用したい食材を入力するとそのレシピを提案します'''
        line_bot_api.reply_message(event.reply_token,
                                   TextSendMessage(text=msg))
コード例 #17
0
def handle_message(event):
    get_text = event.message.text
    print(get_text[:6])
    if get_text == '講義':

        #User_ID = event.source.user_id
        #line_bot_api.reply_message(event.reply_token, User_ID)
        line_bot_api.push_message(
            event.source.user_id,
            TemplateSendMessage(alt_text="課程講義", template=handout.handout()))
        print('Reply User ID =>' + event.source.user_id)

    elif get_text[:9] == '小幫手wiki搜尋':
        search_text = get_text[9:]
        url = wiki_api.wiki_search(search_text)
        line_bot_api.reply_message(
            event.reply_token,
            TextMessage(text='以下是小幫手幫您找到的網址:\n\n👉👉   ' + str(url)))

    elif get_text == '小幫手顯示講義':
        #Group_ID = source.group_id
        #line_bot_api.reply_message(event.reply_token, Group_ID)
        line_bot_api.push_message(
            event.source.group_id,
            TemplateSendMessage(alt_text="課程講義", template=handout.handout()))

    elif get_text == '小幫手明天的課表' or get_text[:6] == '小幫手明天上':
        a = datetime.date.today() + datetime.timedelta(days=1)
        tmr_month = a.month
        tmr_day = a.day
        class_list = timetable.timetable(tmr_month, tmr_day)

        if len(class_list) == 3:

            content1 = class_list[0]
            content2 = class_list[1]
            content3 = class_list[2].strip('\n')

            timetable_text = "🆕 新消息:\n\n✏️ 明天課程:  {}\n\n✏️ 提醒事項:  {}\n\n✏️ 夜輔:      {}              ".format(
                content1, content2, content3)
            line_bot_api.push_message(event.source.group_id,
                                      TextMessage(text=timetable_text))

        elif len(class_list) == 2:
            content1 = class_list[0]
            content2 = class_list[1]
            timetable_text = "🆕 新消息:\n\n✏️ 明天課程:  {}\n\n✏️ 提醒事項:  {}\n\n✏️ 夜輔:         ❌".format(
                content1, content2)
            line_bot_api.push_message(event.source.group_id,
                                      TextMessage(text=timetable_text))
        elif len(class_list) == 1:
            content1 = class_list[0]

            timetable_text = "🆕 新消息:\n\n✏️ 明天課程:     ❌ \n\n✏️ 提醒事項:  {}\n\n✏️ 夜輔:     ❌              ".format(
                content1)
            line_bot_api.push_message(event.source.group_id,
                                      TextMessage(text=timetable_text))

    elif get_text == '小幫手昨天的課表' or get_text[:6] == '小幫手昨天上':
        a = datetime.date.today() + datetime.timedelta(days=-1)
        tmr_month = a.month
        tmr_day = a.day
        class_list = timetable.timetable(tmr_month, tmr_day)

        if len(class_list) == 3:

            content1 = class_list[0]
            content2 = class_list[1]
            content3 = class_list[2].strip('\n')

            timetable_text = "🆕 新消息:\n\n✏️ 昨天課程:  {}\n\n✏️ 提醒事項:  {}\n\n✏️ 夜輔:      {}              ".format(
                content1, content2, content3)
            line_bot_api.push_message(event.source.group_id,
                                      TextMessage(text=timetable_text))

        elif len(class_list) == 2:
            content1 = class_list[0]
            content2 = class_list[1]
            timetable_text = "🆕 新消息:\n\n✏️ 昨天課程:  {}\n\n✏️ 提醒事項:  {}\n\n✏️ 夜輔:         ❌".format(
                content1, content2)
            line_bot_api.push_message(event.source.group_id,
                                      TextMessage(text=timetable_text))
        elif len(class_list) == 1:
            content1 = class_list[0]

            timetable_text = "🆕 新消息:\n\n✏️ 昨天課程:     ❌ \n\n✏️ 提醒事項:  {}\n\n✏️ 夜輔:     ❌              ".format(
                content1)
            line_bot_api.push_message(event.source.group_id,
                                      TextMessage(text=timetable_text))

    elif get_text[:3] == '小幫手' and get_text[8:10] == '課表':
        month = int(get_text[3])
        day = int(get_text[5:7])
        print("get {} 月 {} 日".format(month, day))

        class_list = timetable.timetable(month, day)

        if len(class_list) == 3:

            content1 = class_list[0]
            content2 = class_list[1]
            content3 = class_list[2].strip('\n')

            timetable_text = "🆕 新消息: {} 月 {} 日\n\n✏️ 課程:  {}\n\n✏️ 提醒事項:  {}\n\n✏️ 夜輔:      {}              ".format(
                month, day, content1, content2, content3)
            line_bot_api.push_message(event.source.group_id,
                                      TextMessage(text=timetable_text))

        elif len(class_list) == 2:
            content1 = class_list[0]
            content2 = class_list[1]
            timetable_text = "🆕 新消息: {} 月 {} 日\n\n✏️ 課程:  {}\n\n✏️ 提醒事項:  {}\n\n✏️ 夜輔:         ❌             ".format(
                month, day, content1, content2)
            line_bot_api.push_message(event.source.group_id,
                                      TextMessage(text=timetable_text))

        elif len(class_list) == 1:
            content1 = class_list[0]

            timetable_text = "🆕 新消息: {} 月 {} 日\n\n✏️ 課程:     ❌ \n\n✏️ 提醒事項:  {}\n\n✏️ 夜輔:     ❌              ".format(
                month, day, content1)
            line_bot_api.push_message(event.source.group_id,
                                      TextMessage(text=timetable_text))

    elif event.message.text == '/help':
        help_text = r"🆕🆕 目前功能:\n\n👉 講義:  小幫手顯示講義\n\n👉 查詢指定時間課表: 小幫手X月XX日課表\n\n👉明日課表:  小幫手明天的課表\n\n👉 昨日課表:  小幫手昨天的課表\n\n👉 維基百科:  小幫手wiki搜尋(keywords) \n\n👉 Help   :  \help"
        line_bot_api.reply_message(event.reply_token,
                                   TextMessage(text=help_text))
コード例 #18
0
ファイル: zero.py プロジェクト: tolga000/lineapibot
def handle_text_message(event):

	text=event.message.text
	
	if isinstance(event.source, SourceGroup):
		subject = line_bot_api.get_group_member_profile(event.source.group_id,
														event.source.user_id)
		set_id = event.source.group_id
	elif isinstance(event.source, SourceRoom):
		subject = line_bot_api.get_room_member_profile(event.source.room_id,
                                                   event.source.user_id)
		set_id = event.source.room_id
	else:
		subject = line_bot_api.get_profile(event.source.user_id)
		set_id = event.source.user_id
	
	def split1(text):
		return text.split('/wolfram ', 1)[-1]
		
	def split2(text):
		return text.split('/kbbi ', 1)[-1]
		
	def split3(text):
		return text.split('/echo ', 1)[-1]

	def split4(text):
		return text.split('/wolframs ', 1)[-1]
	
	def split5(text):
		return text.split('/trans ', 1)[-1]
	
	def split6(text):
		return text.split('/wiki ', 1)[-1]
	
	def split7(text):
		return text.split('/wikilang ', 1)[-1]
		
	def split8(text):
		return text.split('/urban ', 1)[-1]

	def split9(text):
		return text.split('/ox ', 1)[-1]
		
	def ox(keyword):
		oxdict_appid = ('7dff6c56')
		oxdict_key = ('41b55bba54078e9fb9f587f1b978121f')
		
		word = quote(keyword)
		url = ('https://od-api.oxforddictionaries.com:443/api/v1/entries/en/{}'.format(word))
		req = requests.get(url, headers={'app_id': oxdict_appid, 'app_key': oxdict_key})
		if "No entry available" in req.text:
			return 'No entry available for "{}".'.format(word)

		req = req.json()
		result = ''
		i = 0
		for each_result in req['results']:
			for each_lexEntry in each_result['lexicalEntries']:
				for each_entry in each_lexEntry['entries']:
					for each_sense in each_entry['senses']:
						if 'crossReferenceMarkers' in each_sense:
							search = 'crossReferenceMarkers'
						else:
							search = 'definitions'
						for each_def in each_sense[search]:
							i += 1
							result += '\n{}. {}'.format(i, each_def)

		if i == 1:
			result = 'Definition of {}:\n'.format(keyword) + result[4:]
		else:
			result = 'Definitions of {}:'.format(keyword) + result
		return result

	
	def wolfram(query):
		wolfram_appid = ('83L4JP-TWUV8VV7J7')

		url = 'https://api.wolframalpha.com/v2/result?i={}&appid={}'
		return requests.get(url.format(quote(query), wolfram_appid)).text
		
	def wolframs(query):
		wolfram_appid = ('83L4JP-TWUV8VV7J7')

		url = 'https://api.wolframalpha.com/v2/simple?i={}&appid={}'
		return url.format(quote(query), wolfram_appid)
	
	def trans(word):
		sc = 'en'
		to = 'id'
		
		if word[0:].lower().strip().startswith('sc='):
			sc = word.split(', ', 1)[0]
			sc = sc.split('sc=', 1)[-1]
			word = word.split(', ', 1)[1]
	
		if word[0:].lower().strip().startswith('to='):
			to = word.split(', ', 1)[0]
			to = to.split('to=', 1)[-1]
			word = word.split(', ', 1)[1]
			
		if word[0:].lower().strip().startswith('sc='):
			sc = word.split(', ', 1)[0]
			sc = sc.split('sc=', 1)[-1]
			word = word.split(', ', 1)[1]
			
		return translator.translate(word, src=sc, dest=to).text
		
	def wiki_get(keyword, set_id, trim=True):
    
		try:
			wikipedia.set_lang(wiki_settings[set_id])
		except KeyError:
			wikipedia.set_lang('en')

		try:
			result = wikipedia.summary(keyword)

		except wikipedia.exceptions.DisambiguationError:
			articles = wikipedia.search(keyword)
			result = "{} disambiguation:".format(keyword)
			for item in articles:
				result += "\n{}".format(item)
		except wikipedia.exceptions.PageError:
			result = "{} not found!".format(keyword)

		else:
			if trim:
				result = result[:2000]
				if not result.endswith('.'):
					result = result[:result.rfind('.')+1]
		return result
		
	def wiki_lang(lang, set_id):
    
		langs_dict = wikipedia.languages()
		if lang in langs_dict.keys():
			wiki_settings[set_id] = lang
			return ("Language has been changed to {} successfully."
					.format(langs_dict[lang]))

		return ("{} not available!\n"
				"See meta.wikimedia.org/wiki/List_of_Wikipedias for "
				"a list of available languages, and use the prefix "
				"in the Wiki column to set the language."
				.format(lang))	
	
	def find_kbbi(keyword, ex=True):

		try:
			entry = KBBI(keyword)
		except KBBI.TidakDitemukan as e:
			result = str(e)
		else:
			result = "Definisi {}:\n".format(keyword)
			if ex:
				result += '\n'.join(entry.arti_contoh)
			else:
				result += str(entry)
		return result
	
	def urban(keyword, ex=True):
		
		try:
			entry = udtop(keyword)
		except (TypeError, AttributeError, udtop.TermNotFound) :
			result = "{} definition not found in urbandictionary.".format(keyword)
		else:
			result = "{} definition:\n".format(keyword)
			if ex:
				result += str(entry)
			else:
				result += entry.definition
		return result
	
	if text == '/help':
		line_bot_api.reply_message(
			event.reply_token,
			TextSendMessage('I will be here for you'))
	
	elif text == '/leave':
		if isinstance(event.source, SourceGroup):
			line_bot_api.reply_message(
				event.reply_token,
				TextSendMessage('I am leaving the group...'))
			line_bot_api.leave_group(event.source.group_id)
		
		elif isinstance(event.source, SourceRoom):
			line_bot_api.reply_message(
				event.reply_token,
				TextSendMessage('I am leaving the group...'))
			line_bot_api.leave_room(event.source.room_id)
			
		else:
			line_bot_api.reply_message(
				event.reply_token,
				TextSendMessage('>_< cannot do...'))
	
	elif text == '/about':
		line_bot_api.reply_message(
				event.reply_token,
				TextSendMessage("Hello, my name is Reika \n"
								"Nice to meet you... \n"
								"source code: https://github.com/Vetrix/ZERO"))
	
	elif text == '/cmd':
		line_bot_api.reply_message(
				event.reply_token,
				TextSendMessage("Without parameters: \n"
								"/about, /help, /profile, /leave, /lang \n"
								"/confirm, /buttons, /search image, \n"
								"/manga, /dots, /track, /bet \n"
								"/image_carousel, /imagemap \n"
								"\n"
								"With parameters: \n"
								"/echo, /kbbi, /wolfram, /wolframs, \n"
								"/trans, /wiki, /wikilang, /urban, /ox"))
	
	elif text == '/lang':
		line_bot_api.reply_message(
				event.reply_token,
				TextSendMessage("Language for translation see here \n"
								"https://github.com/Vetrix/ZERO/blob/master/Lang.txt"))
	
	elif text == '/manga':
		line_bot_api.reply_message(
				event.reply_token,
				TextSendMessage("mangaku.in"))
	
	elif text == '/dots':
		line_bot_api.reply_message(
				event.reply_token,
				TextSendMessage("https://www.instagram.com/dotaindonesia2/"))
	
	elif text == '/track':
		line_bot_api.reply_message(
				event.reply_token,
				TextSendMessage("http://dota2.prizetrac.kr/international2018"))
	
	elif text == '/bet':
		line_bot_api.reply_message(
				event.reply_token,
				TextSendMessage("dota2.com/predictions"))
	
	elif text == '/search image':
		line_bot_api.reply_message(
				event.reply_token,
				TextSendMessage("Try this up \n"
								"https://reverse.photos/"))
	
	elif text == '/profile':
		if isinstance(event.source, SourceGroup):
			try:
				profile = line_bot_api.get_group_member_profile(event.source.group_id, event.source.user_id)
				result = ("Display name: " + profile.display_name + "\n" +
						  "Profile picture: " + profile.picture_url + "\n" +
						  "User_ID: " + profile.user_id)
			except LineBotApiError:
				pass	
			line_bot_api.reply_message(
				event.reply_token,
				TextSendMessage(result))
			
		
		elif isinstance(event.source, SourceRoom):
			try:
				profile = line_bot_api.get_room_member_profile(event.source.room_id, event.source.user_id)
				result = ("Display name: " + profile.display_name + "\n" +
						  "Profile picture: " + profile.picture_url + "\n" +
						  "User_ID: " + profile.user_id)
			except LineBotApiError:
				pass	
			line_bot_api.reply_message(
				event.reply_token,
				TextSendMessage(result))
			
				
		else:
			try:
				profile = line_bot_api.get_profile(event.source.user_id)
				result = ("Display name: " + profile.display_name + "\n" +
						  "Profile picture: " + profile.picture_url + "\n" +
						  "User_ID: " + profile.user_id)
				if profile.status_message:
					result += "\n" + "Status message: " + profile.status_message
			except LineBotApiError:
				pass
			line_bot_api.reply_message(
				event.reply_token,
				TextSendMessage(result))
	
	elif text=='/kbbi':
		line_bot_api.reply_message(
				event.reply_token,
				TextSendMessage('command /kbbi {input}'))
	
	elif text=='/urban':
		line_bot_api.reply_message(
				event.reply_token,
				TextSendMessage('command /urban {input}'))
	
	elif text=='/ox':
		line_bot_api.reply_message(
				event.reply_token,
				TextSendMessage('command /ox {input}'))
	
	elif text=='/wolfram':
		line_bot_api.reply_message(
				event.reply_token,
				TextSendMessage('command /wolfram {input}'))
				
	elif text=='/trans':
		line_bot_api.reply_message(
				event.reply_token,
				TextSendMessage('command /trans sc={}, to={}, {text}'))
	
	elif text=='/wiki':
		line_bot_api.reply_message(
				event.reply_token,
				TextSendMessage('command /wiki {text}'))
				
	elif text=='/wikilang':
		line_bot_api.reply_message(
				event.reply_token,
				TextSendMessage('command /wikilang {language_id}'))
	
	elif text == '/confirm':
		confirm_template = ConfirmTemplate(text='Do it?', actions=[
			MessageTemplateAction(label='Yes', text='Yes!'),
			MessageTemplateAction(label='No', text='No!'),
			])
		template_message = TemplateSendMessage(
			alt_text='Confirm alt text', template=confirm_template)
		line_bot_api.reply_message(event.reply_token, template_message)
	
	elif text == '/buttons':
		buttons_template = ButtonsTemplate(
			title='My buttons sample', text='Hello, my buttons', actions=[
				URITemplateAction(
					label='Go to line.me', uri='https://line.me'),
				PostbackTemplateAction(label='ping', data='ping'),
				PostbackTemplateAction(
					label='ping with text', data='ping',
					text='ping'),
				MessageTemplateAction(label='Translate Rice', text='米')
			])
		template_message = TemplateSendMessage(
			alt_text='Buttons alt text', template=buttons_template)
		line_bot_api.reply_message(event.reply_token, template_message)
	
	elif text == '/image_carousel':
		image_carousel_template = ImageCarouselTemplate(columns=[
			ImageCarouselColumn(image_url='https://via.placeholder.com/1024x1024',
								action=DatetimePickerTemplateAction(label='datetime',
																	data='datetime_postback',
																	mode='datetime')),
			ImageCarouselColumn(image_url='https://via.placeholder.com/1024x1024',
								action=DatetimePickerTemplateAction(label='date',
																	data='date_postback',
																	mode='date'))
		])
		template_message = TemplateSendMessage(
			alt_text='ImageCarousel alt text', template=image_carousel_template)
		line_bot_api.reply_message(event.reply_token, template_message)
		
	elif text == '/imagemap':
		pass
	
	elif text[0:].lower().strip().startswith('/wolfram '):
		line_bot_api.reply_message(
			event.reply_token,
			TextSendMessage(wolfram(split1(text))))
			
	elif text[0:].lower().strip().startswith('/wolframs '):
		line_bot_api.reply_message(
			event.reply_token,
			ImageSendMessage(original_content_url= wolframs(split4(text)),
								preview_image_url= wolframs(split4(text))))

	elif text[0:].lower().strip().startswith('/kbbi '):
		line_bot_api.reply_message(
			event.reply_token,
			TextSendMessage(find_kbbi(split2(text))))
			
	elif text[0:].lower().strip().startswith('/urban '):
		line_bot_api.reply_message(
			event.reply_token,
			TextSendMessage(urban(split8(text))))
			
	elif text[0:].lower().strip().startswith('/ox '):
		line_bot_api.reply_message(
			event.reply_token,
			TextSendMessage(ox(split9(text))))
			
	elif text[0:].lower().strip().startswith('/echo ') :
		line_bot_api.reply_message(
			event.reply_token,
			TextSendMessage(split3(text)))
			
	elif text[0:].lower().strip().startswith('/trans ') :
		line_bot_api.reply_message(
			event.reply_token,
			TextSendMessage(trans(split5(text))))
	
	elif text[0:].lower().strip().startswith('/wiki ') :
		line_bot_api.reply_message(
			event.reply_token,
			TextSendMessage(wiki_get(split6(text), set_id=set_id)))
			
	elif text[0:].lower().strip().startswith('/wikilang ') :
		line_bot_api.reply_message(
			event.reply_token,
			TextSendMessage(wiki_lang(split7(text), set_id=set_id)))
コード例 #19
0
 def kick():
     confirm_template = ConfirmTemplate(text='Keluarkan bot dari obrolan?', actions=[
         MessageTemplateAction(label='Iya', text='Pergi sana!'),
         MessageTemplateAction(label='Tidak', text='Jangan keluarkan!'),])
     template_message = TemplateSendMessage(alt_text='Konfirmasi kick', template=confirm_template)
     return susunhurufbot.reply_message(event.reply_token, template_message)
コード例 #20
0
from linebot.models import ConfirmTemplate
from linebot.models import MessageTemplateAction
from linebot.models import PostbackTemplateAction
from linebot.models import TemplateSendMessage

confirmations = [{
    "id":"example",
    "payload":TemplateSendMessage(
        alt_text='Confirm template',
        template=ConfirmTemplate(
            text='Are you sure?',
            actions=[
                PostbackTemplateAction(
                    label='postback',
                    text='postback text',
                    data='action=buy&itemid=1'
                ),
                MessageTemplateAction(
                    label='message',
                    text='message text'
                )
            ]
        )
    )
}]

def composeConfirm(alt_text, text, option1, option2):
    if option1['type'] == "postback":
        opt1_payload = PostbackTemplateAction(
                    label=option1['label'],
                    # text=option1['text'],
コード例 #21
0
def handle_text_message(event):
    text = event.message.text

    if text == 'profile':
        if isinstance(event.source, SourceUser):
            profile = line_bot_api.get_profile(event.source.user_id)
            line_bot_api.reply_message(event.reply_token, [
                TextSendMessage(text='Display name: ' + profile.display_name),
                TextSendMessage(text='Status message: ' +
                                str(profile.status_message))
            ])
        else:
            line_bot_api.reply_message(
                event.reply_token,
                TextSendMessage(
                    text="Bot can't use profile API without user ID"))
    elif text == 'quota':
        quota = line_bot_api.get_message_quota()
        line_bot_api.reply_message(event.reply_token, [
            TextSendMessage(text='type: ' + quota.type),
            TextSendMessage(text='value: ' + str(quota.value))
        ])
    elif text == 'quota_consumption':
        quota_consumption = line_bot_api.get_message_quota_consumption()
        line_bot_api.reply_message(event.reply_token, [
            TextSendMessage(text='total usage: ' +
                            str(quota_consumption.total_usage)),
        ])
    elif text == 'push':
        line_bot_api.push_message(event.source.user_id, [
            TextSendMessage(text='PUSH!'),
        ])
    elif text == 'multicast':
        line_bot_api.multicast([event.source.user_id], [
            TextSendMessage(text='THIS IS A MULTICAST MESSAGE'),
        ])
    elif text == 'broadcast':
        line_bot_api.broadcast([
            TextSendMessage(text='THIS IS A BROADCAST MESSAGE'),
        ])
    elif text.startswith('broadcast '):  # broadcast 20190505
        date = text.split(' ')[1]
        print("Getting broadcast result: " + date)
        result = line_bot_api.get_message_delivery_broadcast(date)
        line_bot_api.reply_message(event.reply_token, [
            TextSendMessage(text='Number of sent broadcast messages: ' + date),
            TextSendMessage(text='status: ' + str(result.status)),
            TextSendMessage(text='success: ' + str(result.success)),
        ])
    elif text == 'bye':
        if isinstance(event.source, SourceGroup):
            line_bot_api.reply_message(event.reply_token,
                                       TextSendMessage(text='Leaving group'))
            line_bot_api.leave_group(event.source.group_id)
        elif isinstance(event.source, SourceRoom):
            line_bot_api.reply_message(event.reply_token,
                                       TextSendMessage(text='Leaving group'))
            line_bot_api.leave_room(event.source.room_id)
        else:
            line_bot_api.reply_message(
                event.reply_token,
                TextSendMessage(text="Bot can't leave from 1:1 chat"))
    elif text == 'image':
        url = request.url_root + '/static/logo.png'
        app.logger.info("url=" + url)
        line_bot_api.reply_message(event.reply_token,
                                   ImageSendMessage(url, url))
    elif text == 'confirm':
        confirm_template = ConfirmTemplate(text='Do it?',
                                           actions=[
                                               MessageAction(label='Yes',
                                                             text='Yes!'),
                                               MessageAction(label='No',
                                                             text='No!'),
                                           ])
        template_message = TemplateSendMessage(alt_text='Confirm alt text',
                                               template=confirm_template)
        line_bot_api.reply_message(event.reply_token, template_message)
    elif text == 'buttons':
        buttons_template = ButtonsTemplate(
            title='My buttons sample',
            text='Hello, my buttons',
            actions=[
                URIAction(label='Go to line.me', uri='https://line.me'),
                PostbackAction(label='ping', data='ping'),
                PostbackAction(label='ping with text',
                               data='ping',
                               text='ping'),
                MessageAction(label='Translate Rice', text='米')
            ])
        template_message = TemplateSendMessage(alt_text='Buttons alt text',
                                               template=buttons_template)
        line_bot_api.reply_message(event.reply_token, template_message)
    elif text == 'carousel':
        carousel_template = CarouselTemplate(columns=[
            CarouselColumn(text='hoge1',
                           title='fuga1',
                           actions=[
                               URIAction(label='Go to line.me',
                                         uri='https://line.me'),
                               PostbackAction(label='ping', data='ping')
                           ]),
            CarouselColumn(text='hoge2',
                           title='fuga2',
                           actions=[
                               PostbackAction(label='ping with text',
                                              data='ping',
                                              text='ping'),
                               MessageAction(label='Translate Rice', text='米')
                           ]),
        ])
        template_message = TemplateSendMessage(alt_text='Carousel alt text',
                                               template=carousel_template)
        line_bot_api.reply_message(event.reply_token, template_message)
    elif text == 'image_carousel':
        image_carousel_template = ImageCarouselTemplate(columns=[
            ImageCarouselColumn(
                image_url='https://via.placeholder.com/1024x1024',
                action=DatetimePickerAction(label='datetime',
                                            data='datetime_postback',
                                            mode='datetime')),
            ImageCarouselColumn(
                image_url='https://via.placeholder.com/1024x1024',
                action=DatetimePickerAction(
                    label='date', data='date_postback', mode='date'))
        ])
        template_message = TemplateSendMessage(
            alt_text='ImageCarousel alt text',
            template=image_carousel_template)
        line_bot_api.reply_message(event.reply_token, template_message)
    elif text == 'imagemap':
        pass
    elif text == 'flex':
        bubble = BubbleContainer(
            direction='ltr',
            hero=ImageComponent(url='https://example.com/cafe.jpg',
                                size='full',
                                aspect_ratio='20:13',
                                aspect_mode='cover',
                                action=URIAction(uri='http://example.com',
                                                 label='label')),
            body=BoxComponent(
                layout='vertical',
                contents=[
                    # title
                    TextComponent(text='Brown Cafe', weight='bold', size='xl'),
                    # review
                    BoxComponent(
                        layout='baseline',
                        margin='md',
                        contents=[
                            IconComponent(
                                size='sm',
                                url='https://example.com/gold_star.png'),
                            IconComponent(
                                size='sm',
                                url='https://example.com/grey_star.png'),
                            IconComponent(
                                size='sm',
                                url='https://example.com/gold_star.png'),
                            IconComponent(
                                size='sm',
                                url='https://example.com/gold_star.png'),
                            IconComponent(
                                size='sm',
                                url='https://example.com/grey_star.png'),
                            TextComponent(text='4.0',
                                          size='sm',
                                          color='#999999',
                                          margin='md',
                                          flex=0)
                        ]),
                    # info
                    BoxComponent(
                        layout='vertical',
                        margin='lg',
                        spacing='sm',
                        contents=[
                            BoxComponent(
                                layout='baseline',
                                spacing='sm',
                                contents=[
                                    TextComponent(text='Place',
                                                  color='#aaaaaa',
                                                  size='sm',
                                                  flex=1),
                                    TextComponent(text='Shinjuku, Tokyo',
                                                  wrap=True,
                                                  color='#666666',
                                                  size='sm',
                                                  flex=5)
                                ],
                            ),
                            BoxComponent(
                                layout='baseline',
                                spacing='sm',
                                contents=[
                                    TextComponent(text='Time',
                                                  color='#aaaaaa',
                                                  size='sm',
                                                  flex=1),
                                    TextComponent(
                                        text="10:00 - 23:00",
                                        wrap=True,
                                        color='#666666',
                                        size='sm',
                                        flex=5,
                                    ),
                                ],
                            ),
                        ],
                    )
                ],
            ),
            footer=BoxComponent(
                layout='vertical',
                spacing='sm',
                contents=[
                    # callAction, separator, websiteAction
                    SpacerComponent(size='sm'),
                    # callAction
                    ButtonComponent(
                        style='link',
                        height='sm',
                        action=URIAction(label='CALL', uri='tel:000000'),
                    ),
                    # separator
                    SeparatorComponent(),
                    # websiteAction
                    ButtonComponent(style='link',
                                    height='sm',
                                    action=URIAction(
                                        label='WEBSITE',
                                        uri="https://example.com"))
                ]),
        )
        message = FlexSendMessage(alt_text="hello", contents=bubble)
        line_bot_api.reply_message(event.reply_token, message)
    elif text == 'flex_update_1':
        bubble_string = """
        {
          "type": "bubble",
          "body": {
            "type": "box",
            "layout": "vertical",
            "contents": [
              {
                "type": "image",
                "url": "https://scdn.line-apps.com/n/channel_devcenter/img/flexsnapshot/clip/clip3.jpg",
                "position": "relative",
                "size": "full",
                "aspectMode": "cover",
                "aspectRatio": "1:1",
                "gravity": "center"
              },
              {
                "type": "box",
                "layout": "horizontal",
                "contents": [
                  {
                    "type": "box",
                    "layout": "vertical",
                    "contents": [
                      {
                        "type": "text",
                        "text": "Brown Hotel",
                        "weight": "bold",
                        "size": "xl",
                        "color": "#ffffff"
                      },
                      {
                        "type": "box",
                        "layout": "baseline",
                        "margin": "md",
                        "contents": [
                          {
                            "type": "icon",
                            "size": "sm",
                            "url": "https://scdn.line-apps.com/n/channel_devcenter/img/fx/review_gold_star_28.png"
                          },
                          {
                            "type": "icon",
                            "size": "sm",
                            "url": "https://scdn.line-apps.com/n/channel_devcenter/img/fx/review_gold_star_28.png"
                          },
                          {
                            "type": "icon",
                            "size": "sm",
                            "url": "https://scdn.line-apps.com/n/channel_devcenter/img/fx/review_gold_star_28.png"
                          },
                          {
                            "type": "icon",
                            "size": "sm",
                            "url": "https://scdn.line-apps.com/n/channel_devcenter/img/fx/review_gold_star_28.png"
                          },
                          {
                            "type": "icon",
                            "size": "sm",
                            "url": "https://scdn.line-apps.com/n/channel_devcenter/img/fx/review_gray_star_28.png"
                          },
                          {
                            "type": "text",
                            "text": "4.0",
                            "size": "sm",
                            "color": "#d6d6d6",
                            "margin": "md",
                            "flex": 0
                          }
                        ]
                      }
                    ]
                  },
                  {
                    "type": "box",
                    "layout": "vertical",
                    "contents": [
                      {
                        "type": "text",
                        "text": "¥62,000",
                        "color": "#a9a9a9",
                        "decoration": "line-through",
                        "align": "end"
                      },
                      {
                        "type": "text",
                        "text": "¥42,000",
                        "color": "#ebebeb",
                        "size": "xl",
                        "align": "end"
                      }
                    ]
                  }
                ],
                "position": "absolute",
                "offsetBottom": "0px",
                "offsetStart": "0px",
                "offsetEnd": "0px",
                "backgroundColor": "#00000099",
                "paddingAll": "20px"
              },
              {
                "type": "box",
                "layout": "vertical",
                "contents": [
                  {
                    "type": "text",
                    "text": "SALE",
                    "color": "#ffffff"
                  }
                ],
                "position": "absolute",
                "backgroundColor": "#ff2600",
                "cornerRadius": "20px",
                "paddingAll": "5px",
                "offsetTop": "10px",
                "offsetEnd": "10px",
                "paddingStart": "10px",
                "paddingEnd": "10px"
              }
            ],
            "paddingAll": "0px"
          }
        }
        """
        message = FlexSendMessage(alt_text="hello",
                                  contents=json.loads(bubble_string))
        line_bot_api.reply_message(event.reply_token, message)
    elif text == 'quick_reply':
        line_bot_api.reply_message(
            event.reply_token,
            TextSendMessage(
                text='Quick reply',
                quick_reply=QuickReply(items=[
                    QuickReplyButton(
                        action=PostbackAction(label="label1", data="data1")),
                    QuickReplyButton(
                        action=MessageAction(label="label2", text="text2")),
                    QuickReplyButton(action=DatetimePickerAction(
                        label="label3", data="data3", mode="date")),
                    QuickReplyButton(action=CameraAction(label="label4")),
                    QuickReplyButton(action=CameraRollAction(label="label5")),
                    QuickReplyButton(action=LocationAction(label="label6")),
                ])))
    elif text == 'link_token' and isinstance(event.source, SourceUser):
        link_token_response = line_bot_api.issue_link_token(
            event.source.user_id)
        line_bot_api.reply_message(event.reply_token, [
            TextSendMessage(text='link_token: ' +
                            link_token_response.link_token)
        ])
    elif text == 'insight_message_delivery':
        today = datetime.date.today().strftime("%Y%m%d")
        response = line_bot_api.get_insight_message_delivery(today)
        if response.status == 'ready':
            messages = [
                TextSendMessage(text='broadcast: ' + str(response.broadcast)),
                TextSendMessage(text='targeting: ' + str(response.targeting)),
            ]
        else:
            messages = [TextSendMessage(text='status: ' + response.status)]
        line_bot_api.reply_message(event.reply_token, messages)
    elif text == 'insight_followers':
        today = datetime.date.today().strftime("%Y%m%d")
        response = line_bot_api.get_insight_followers(today)
        if response.status == 'ready':
            messages = [
                TextSendMessage(text='followers: ' + str(response.followers)),
                TextSendMessage(text='targetedReaches: ' +
                                str(response.targeted_reaches)),
                TextSendMessage(text='blocks: ' + str(response.blocks)),
            ]
        else:
            messages = [TextSendMessage(text='status: ' + response.status)]
        line_bot_api.reply_message(event.reply_token, messages)
    elif text == 'insight_demographic':
        response = line_bot_api.get_insight_demographic()
        if response.available:
            messages = [
                "{gender}: {percentage}".format(gender=it.gender,
                                                percentage=it.percentage)
                for it in response.genders
            ]
        else:
            messages = [TextSendMessage(text='available: false')]
        line_bot_api.reply_message(event.reply_token, messages)
    else:
        line_bot_api.reply_message(event.reply_token,
                                   TextSendMessage(text=event.message.text))
コード例 #22
0
ファイル: giz_app.py プロジェクト: smeeklai/survey-dd
def handle_message(event):
    global website_name
    global question
    global registering_question
    global registered
    global during_survey
    global done
    global point
    global ans_count
    global tips
    if (event.message.text != 'ยัง'):
        if (registered == False):
            # table = get_table('users')
            print("Answer: " + event.message.text)
            if (len(registering_question) != 0):
                messages = [registering_question.pop(0)]
                # if (event.message.text == 'ช'):
                # table.update_item(Key={'user-id': get_current_user_id()}, AttributeUpdates={'gender': {'Value':'male','Action':'PUT'}})
                # elif (event.message.text == '10/04/1992'):
                # table.update_item(Key={'user-id': get_current_user_id()}, AttributeUpdates={'dob': {'Value': event.message.text, 'Action': 'PUT'}, 'age':{'Value': 25, 'Action': 'PUT'}})
                # elif (event.message.type == 'location'):
                # table.update_item(Key={'user-id': get_current_user_id()}, AttributeUpdates={'address': {'Value':event.message.address, 'Action':'PUT'}, 'latitude': {'Value':event.message.latitude, 'Action':'PUT'}, 'longitude': {'Value':event.message.longitude, 'Action':'PUT'}})
            else:
                # if (event.message.text == '4'):
                # table.update_item(Key={'user-id': get_current_user_id()}, AttributeUpdates={'family-mem-no': {'Value':event.message.text, 'Action': 'PUT'}})
                registered = True
                messages = [
                    'ยินดีด้วย คุณได้กรอกประวัติเรียบร้อยแล้ว!',
                    'หากพร้อมแล้ว สามารถพิม "เริ่ม" ได้เลย'
                ]
        else:
            if (during_survey == True or event.message.text == 'เริ่ม'):
                # table = get_table('survey-answer')
                if not question and done is False:
                    question = get_questionnaire(get_current_user_id())
                if (len(question) != 0):
                    during_survey = True
                    messages = [question.pop(0)]
                    if (len(question) == 0):
                        done = True
                    if (event.message.text != 'เริ่ม'):
                        ans_count = ans_count + 1
                        print("Answer: " + event.message.text)
                        # table.put_item(Item={'survey-id':'s001', 'answer-id': ans_count, 'user-id': 1, 'ans': event.message.text})
                else:
                    ans_count = ans_count + 1
                    print("Answer: " + event.message.text)
                    # table.put_item(Item={'survey-id':'s001', 'answer-id': ans_count, 'user-id': 1, 'ans': event.message.text})
                    done = False
                    during_survey = False
                    point = point + 10
                    messages = [
                        'Done!', 'ยินดีด้วย คุณได้ {} points!'.format(point),
                        'สามารถเช็คคะแนนล่าสุดของตัวเองได้โดยพิมว่า "คะแนน"'
                    ]
            elif (event.message.text == 'คะแนน'):
                messages = [
                    'ตอนนี้คุณมีคะแนนอยู่ทั้งหมด {} คะแนน'.format(point),
                    'หากต้องการแลกรางวัล สามารถพิม "{} ได้ทันที"'.format(
                        'แลกรางวัล')
                ]
            elif (event.message.text == 'แลกรางวัล'):
                messages = ['แลกได้ที่ www.{}.com/redeem'.format(website_name)]
            elif (event.message.text == 'tips'):
                messages = [random.choice(tips)['text']]
            else:
                messages = [
                    'พิม "เริ่ม" ได้เสมอ เมื่อต้องการเริ่มเก็บคะแนนจากการทำแบบสอบถาม'
                ]
    else:
        messages = ['หากพร้อมแล้ว สามารถพิมคำว่า "สมัคร" ได้ตลอดเวลา']

    if (messages[0] != 'do you love energy'):
        line_bot_api.reply_message(
            event.reply_token, [TextSendMessage(text=msg) for msg in messages])
    else:
        line_bot_api.reply_message(
            event.reply_token,
            TemplateSendMessage(alt_text='Buttons template',
                                template=ButtonsTemplate(
                                    title=messages[0],
                                    text='Please select',
                                    actions=[
                                        MessageTemplateAction(label='A lot',
                                                              text='3'),
                                        MessageTemplateAction(label='so so',
                                                              text='2'),
                                        MessageTemplateAction(label='nah',
                                                              text='1')
                                    ])))
コード例 #23
0
ファイル: app.py プロジェクト: ShiroWatage/SD_1809
def handle_text_message(event):
    text = event.message.text

    # 送られてきた言葉が植物の名前だった場合は、それをキャッシュし「なに?」と返す
    if user_data.plant_exists(text):
        current_plant = text
        line_bot_api.reply_message(event.reply_token,
                                   TextSendMessage(text='なに?'))

    if text == 'profile':
        if isinstance(event.source, SourceUser):
            profile = line_bot_api.get_profile(event.source.user_id)
            line_bot_api.reply_message(event.reply_token, [
                TextSendMessage(text='なまえ: ' + profile.display_name),
                TextSendMessage(text='一言: ' + profile.status_message)
            ])
        else:
            line_bot_api.reply_message(
                event.reply_token,
                TextSendMessage(text="「ユーザIDがないとこのコマンドは使えません」"))
    elif text == 'bye':
        if isinstance(event.source, SourceGroup):
            line_bot_api.reply_message(event.reply_token,
                                       TextSendMessage(text='またね、今までありがとう'))
            line_bot_api.leave_group(event.source.group_id)
        elif isinstance(event.source, SourceRoom):
            line_bot_api.reply_message(event.reply_token,
                                       TextSendMessage(text='またね、今までありがとう'))
            line_bot_api.leave_room(event.source.room_id)
        else:
            line_bot_api.reply_message(event.reply_token,
                                       TextSendMessage(text="ぼくはここから動けないよ..."))
    elif text == 'confirm':
        confirm_template = ConfirmTemplate(text='これでいい?',
                                           actions=[
                                               MessageAction(label='Yes',
                                                             text='はい!'),
                                               MessageAction(label='No',
                                                             text='いいえ'),
                                           ])
        template_message = TemplateSendMessage(alt_text='Confirm alt text',
                                               template=confirm_template)
        line_bot_api.reply_message(event.reply_token, template_message)
    elif text == 'buttons':
        buttons_template = ButtonsTemplate(
            title='My buttons sample',
            text='Hello, my buttons',
            actions=[
                URIAction(label='Go to line.me', uri='https://line.me'),
                PostbackAction(label='ping', data='ping'),
                PostbackAction(label='ping with text',
                               data='ping',
                               text='ping'),
                MessageAction(label='Translate Rice', text='米')
            ])
        template_message = TemplateSendMessage(alt_text='Buttons alt text',
                                               template=buttons_template)
        line_bot_api.reply_message(event.reply_token, template_message)
    elif text == 'carousel':
        carousel_template = CarouselTemplate(columns=[
            CarouselColumn(text='hoge1',
                           title='fuga1',
                           actions=[
                               URIAction(label='Go to line.me',
                                         uri='https://line.me'),
                               PostbackAction(label='ping', data='ping')
                           ]),
            CarouselColumn(text='hoge2',
                           title='fuga2',
                           actions=[
                               PostbackAction(label='ping with text',
                                              data='ping',
                                              text='ping'),
                               MessageAction(label='Translate Rice', text='米')
                           ]),
        ])
        template_message = TemplateSendMessage(alt_text='Carousel alt text',
                                               template=carousel_template)
        line_bot_api.reply_message(event.reply_token, template_message)
    elif text == 'image_carousel':
        image_carousel_template = ImageCarouselTemplate(columns=[
            ImageCarouselColumn(
                image_url='https://via.placeholder.com/1024x1024',
                action=DatetimePickerAction(label='datetime',
                                            data='datetime_postback',
                                            mode='datetime')),
            ImageCarouselColumn(
                image_url='https://via.placeholder.com/1024x1024',
                action=DatetimePickerAction(
                    label='date', data='date_postback', mode='date'))
        ])
        template_message = TemplateSendMessage(
            alt_text='ImageCarousel alt text',
            template=image_carousel_template)
        line_bot_api.reply_message(event.reply_token, template_message)
    elif text == 'imagemap':
        pass
    elif text == 'flex':
        bubble = BubbleContainer(
            direction='ltr',
            hero=ImageComponent(url='https://example.com/cafe.jpg',
                                size='full',
                                aspect_ratio='20:13',
                                aspect_mode='cover',
                                action=URIAction(uri='http://example.com',
                                                 label='label')),
            body=BoxComponent(
                layout='vertical',
                contents=[
                    # title
                    TextComponent(text='Brown Cafe', weight='bold', size='xl'),
                    # review
                    BoxComponent(
                        layout='baseline',
                        margin='md',
                        contents=[
                            IconComponent(
                                size='sm',
                                url='https://example.com/gold_star.png'),
                            IconComponent(
                                size='sm',
                                url='https://example.com/grey_star.png'),
                            IconComponent(
                                size='sm',
                                url='https://example.com/gold_star.png'),
                            IconComponent(
                                size='sm',
                                url='https://example.com/gold_star.png'),
                            IconComponent(
                                size='sm',
                                url='https://example.com/grey_star.png'),
                            TextComponent(text='4.0',
                                          size='sm',
                                          color='#999999',
                                          margin='md',
                                          flex=0)
                        ]),
                    # info
                    BoxComponent(
                        layout='vertical',
                        margin='lg',
                        spacing='sm',
                        contents=[
                            BoxComponent(
                                layout='baseline',
                                spacing='sm',
                                contents=[
                                    TextComponent(text='Place',
                                                  color='#aaaaaa',
                                                  size='sm',
                                                  flex=1),
                                    TextComponent(text='Shinjuku, Tokyo',
                                                  wrap=True,
                                                  color='#666666',
                                                  size='sm',
                                                  flex=5)
                                ],
                            ),
                            BoxComponent(
                                layout='baseline',
                                spacing='sm',
                                contents=[
                                    TextComponent(text='Time',
                                                  color='#aaaaaa',
                                                  size='sm',
                                                  flex=1),
                                    TextComponent(
                                        text="10:00 - 23:00",
                                        wrap=True,
                                        color='#666666',
                                        size='sm',
                                        flex=5,
                                    ),
                                ],
                            ),
                        ],
                    )
                ],
            ),
            footer=BoxComponent(
                layout='vertical',
                spacing='sm',
                contents=[
                    # callAction, separator, websiteAction
                    SpacerComponent(size='sm'),
                    # callAction
                    ButtonComponent(
                        style='link',
                        height='sm',
                        action=URIAction(label='CALL', uri='tel:000000'),
                    ),
                    # separator
                    SeparatorComponent(),
                    # websiteAction
                    ButtonComponent(style='link',
                                    height='sm',
                                    action=URIAction(
                                        label='WEBSITE',
                                        uri="https://example.com"))
                ]),
        )
        message = FlexSendMessage(alt_text="hello", contents=bubble)
        line_bot_api.reply_message(event.reply_token, message)
    elif text == 'quick_reply':
        line_bot_api.reply_message(
            event.reply_token,
            TextSendMessage(
                text='Quick reply',
                quick_reply=QuickReply(items=[
                    QuickReplyButton(
                        action=PostbackAction(label="label1", data="data1")),
                    QuickReplyButton(
                        action=MessageAction(label="label2", text="text2")),
                    QuickReplyButton(action=DatetimePickerAction(
                        label="label3", data="data3", mode="date")),
                    QuickReplyButton(action=CameraAction(label="label4")),
                    QuickReplyButton(action=CameraRollAction(label="label5")),
                    QuickReplyButton(action=LocationAction(label="label6")),
                ])))

    # ユーザからビーコンの設定を行う
    elif text == 'beacon':
        BeaconWhisperEvent(event.reply_token, line_bot_api,
                           user_data).configBeaconMsg()

    # 植物を削除するときの命令
    elif text == 'remove' or text == 'delete':
        if current_plant is not None:
            confirm_template = ConfirmTemplate(
                text=current_plant + "の情報を削除します\n本当によろしいですか?\n",
                actions=[
                    PostbackAction(label='Yes',
                                   data='delete_plant ' + current_plant,
                                   displayText='はい'),
                    PostbackAction(label='No',
                                   data='delete_plant_cancel ' + current_plant,
                                   displayText='いいえ'),
                ])
        else:
            line_bot_api.reply_message(event.reply_token,
                                       TextSendMessage(text='植物が選択されていません'))

    elif text == 'disconnect' and current_plant is not None:
        plant_animator.disconnect()
        line_bot_api.reply_message(event.reply_token,
                                   TextMessage(text=current_plant + ":またね"))

    # 植物情報(plant)のアプデをかける
    elif text == 'update':
        plant_animator.update()
        if current_plant is None:
            line_bot_api.reply_message(event.reply_token,
                                       TextSendMessage(text='どの植物に呼びかけますか?'))
    # text.split()[0] in (create, register)
    elif text.split()[0] in ('create', 'register'):
        plant_animator.register_plant(text.split[1])
        line_bot_api.reply_message(event.reply_token,
                                   TextSendMessage(text='植物の名前を決めてあげてください!'))

        # この処理は工事中↑
        # 方針としては一番最後にelse: で入れて、textを"create hoge"みたいに入れてもらってsplitして入れればい何とかなる(きもいけど)

    else:
        line_bot_api.reply_message(event.reply_token,
                                   TextSendMessage(text=event.message.text))
コード例 #24
0
ファイル: main.py プロジェクト: hannahchiu/opinion_chatbot
def get_template(input_text):
    endDate = datetime.today().strftime('%Y-%m-%d')
    startDate = (datetime.today() - timedelta(days=30)).strftime('%Y-%m-%d')
    if input_text == "[reset]":
        return TextSendMessage(
            text='你可以輸入任何人名,例如:蔡英文,我就會統計出他/她最近最常發生的事件種類, 並提供進一步查詢。',
            quick_reply=QuickReply(
                items=[
                    QuickReplyButton(
                        action=MessageAction(label="蔡英文", text="蔡英文")
                    ),
                    QuickReplyButton(
                        action=MessageAction(label="韓國瑜", text="韓國瑜")
                    ),
                    QuickReplyButton(
                        action=MessageAction(label="郭台銘", text="郭台銘")
                    )]
            ))

    elif ":" not in input_text:
        events = get_events(input_text, startDate, endDate)
        if len(events) == 0:
            return TextSendMessage(
                text='沒有這個人,或他/她的新聞數太少QAQ')
        elif len(events) <= 9:
            all_columns = []
            all_actions = []
            for i in range(len(events)):
                all_actions.append(MessageTemplateAction(
                    label="...".join(events[i]['term'].split()) + " (" + str(events[i]["freq"]) + ")",
                    text=input_text + ":" + events[i]['term']
                ))
                if (i + 1) % 3 == 0:
                    all_columns.append(CarouselColumn(
                        title='{}相關新聞事件'.format(input_text),
                        text='點選可獲得相關新聞',
                        actions=all_actions
                    ))
                    all_actions = []
        else:
            events = events[:8]
            all_columns = []
            all_actions = []
            for i in range(9):
                if i == 8:
                    all_actions.append(MessageTemplateAction(
                        label="more",
                        text="更多事件" + ":" + str(8) + ":" + input_text
                    ))
                else:
                    all_actions.append(MessageTemplateAction(
                        label="...".join(events[i]['term'].split()) + " (" + str(events[i]["freq"]) + ")",
                        text=input_text + ":" + events[i]['term']
                    ))

                if (i + 1) % 3 == 0:
                    all_columns.append(CarouselColumn(
                        title='{}相關新聞事件'.format(input_text),
                        text='點選可獲得相關新聞',
                        actions=all_actions
                    ))
                    all_actions = []

        buttons_template = TemplateSendMessage(
            alt_text='Carousel template',
            template=CarouselTemplate(
                columns=all_columns
            )
        )
        return buttons_template

    elif "更多事件" in input_text:
        _, id_event, input_text = input_text.split(":")
        id_event = int(id_event)
        events = get_events(input_text, startDate, endDate)
        action_lst = []
        for i in range(3):
            action_lst.append(MessageTemplateAction(
                label="...".join(events[id_event + i]['term'].split()) + " (" + str(events[id_event]["freq"]) + ")",
                text=input_text + ":" + events[id_event + i]['term']
            ))
        if len(events[id_event + 3:]) > 3:
            action_lst.append(MessageTemplateAction(
                label="more",
                text="更多事件" + ":" + str(id_event + 3) + ":" + input_text
            ))
        buttons_template = TemplateSendMessage(
            alt_text='Buttons Template',
            template=ButtonsTemplate(
                title='{}相關新聞事件'.format(input_text),
                text='點選可獲得相關新聞',
                actions=action_lst
            )
        )
        return buttons_template

    elif "more" in input_text:
        _, id, key, events = input_text.split(":")
        id = int(id)
        news = get_news(key, events, startDate, endDate)
        news_lst = news["data"][id:id + 3]
        id = id + 3
        isMore = len(news["data"][id:]) != 0
        flex_template = news_template_flex(news_lst, events, key, id, isMore)
        return flex_template
    else:
        key, events = input_text.split(":")
        news = get_news(key, events, startDate, endDate)
        news_lst = news["data"][:3]
        id = 3
        isMore = len(news["data"]) > 3
        flex_template = news_template_flex(news_lst, events, key, id, isMore)
        return flex_template
コード例 #25
0
ファイル: app.py プロジェクト: machalite/flask-kitchensink
def handle_text_message(event):
    text = event.message.text

    if text == 'profile':
        if isinstance(event.source, SourceUser):
            profile = line_bot_api.get_profile(event.source.user_id)
            line_bot_api.reply_message(event.reply_token, [
                TextSendMessage(text='Display name: ' + profile.display_name),
                TextSendMessage(text='Status message: ' +
                                profile.status_message)
            ])
        else:
            line_bot_api.reply_message(
                event.reply_token,
                TextMessage(text="Bot can't use profile API without user ID"))
    elif text == 'bye':
        if isinstance(event.source, SourceGroup):
            line_bot_api.reply_message(event.reply_token,
                                       TextMessage(text='Leaving group'))
            line_bot_api.leave_group(event.source.group_id)
        elif isinstance(event.source, SourceRoom):
            line_bot_api.reply_message(event.reply_token,
                                       TextMessage(text='Leaving group'))
            line_bot_api.leave_room(event.source.room_id)
        else:
            line_bot_api.reply_message(
                event.reply_token,
                TextMessage(text="Bot can't leave from 1:1 chat"))
    elif text == 'confirm':
        confirm_template = ConfirmTemplate(
            text='Do it?',
            actions=[
                MessageTemplateAction(label='Yes', text='Yes!'),
                MessageTemplateAction(label='No', text='No!'),
            ])
        template_message = TemplateSendMessage(alt_text='Confirm alt text',
                                               template=confirm_template)
        line_bot_api.reply_message(event.reply_token, template_message)
    elif text == 'buttons':
        buttons_template = ButtonsTemplate(
            title='My buttons sample',
            text='Hello, my buttons',
            actions=[
                URITemplateAction(label='Go to line.me',
                                  uri='https://line.me'),
                PostbackTemplateAction(label='ping', data='ping'),
                PostbackTemplateAction(label='ping with text',
                                       data='ping',
                                       text='ping'),
                MessageTemplateAction(label='Translate Rice', text='米')
            ])
        template_message = TemplateSendMessage(alt_text='Buttons alt text',
                                               template=buttons_template)
        line_bot_api.reply_message(event.reply_token, template_message)
    elif text == 'carousel':
        carousel_template = CarouselTemplate(columns=[
            CarouselColumn(text='hoge1',
                           title='fuga1',
                           actions=[
                               URITemplateAction(label='Go to line.me',
                                                 uri='https://line.me'),
                               PostbackTemplateAction(label='ping',
                                                      data='ping')
                           ]),
            CarouselColumn(
                text='hoge2',
                title='fuga2',
                actions=[
                    PostbackTemplateAction(
                        label='ping with text', data='ping', text='ping'),
                    MessageTemplateAction(label='Translate Rice', text='米')
                ]),
        ])
        template_message = TemplateSendMessage(alt_text='Buttons alt text',
                                               template=carousel_template)
        line_bot_api.reply_message(event.reply_token, template_message)
    elif text == 'imagemap':
        pass
    else:
        line_bot_api.reply_message(event.reply_token,
                                   TextSendMessage(text=event.message.text))
コード例 #26
0
def callback(request):
    sent_json = json.loads(request.body)
    sent_message = sent_json['events'][0]['message']['text']
    reply_token = sent_json['events'][0]['replyToken']
    user_id = sent_json['events'][0]['source']['userId']

    headers = {'Authorization': f'Bearer {ACCESS_TOKEN}'}
    result = requests.get(f'https://api.line.me/v2/bot/profile/{user_id}',
                          headers=headers)
    user_name = json.loads(result.text)['displayName']
    try:
        if sent_message == 'メニュー':
            categories = Category.objects.all()
            columns = []
            for category in categories:
                actions = []
                for dish in category.dish_set.all():
                    ma = MessageAction(label=dish.name, text=dish.name)
                    actions.append(ma)
                cm = CarouselColumn(
                    thumbnail_image_url=
                    'https://1.bp.blogspot.com/-D2I7Z7-HLGU/Xlyf7OYUi8I/AAAAAAABXq4/jZ0035aDGiE5dP3WiYhlSqhhMgGy8p7zACNcBGAsYHQ/s1600/no_image_square.jpg',
                    title=category.name,
                    text='description1',
                    actions=actions)
                columns.append(cm)

            message = TemplateSendMessage(
                alt_text='Carousel template',
                template=CarouselTemplate(columns=columns))
        # オーダー受付中のときのみ注文を受け付ける
        elif Dish.objects.filter(name=sent_message).first():
            dish = Dish.objects.filter(name=sent_message).first()
            order = Order.objects.filter(customer=user_id, status=0).first()
            if not order:
                order = Order(customer=user_id)
                order.save()

            order_detail = OrderDetail.objects.filter(
                order=order, dish__name=sent_message).first()
            if order_detail:
                order_detail.amount = order_detail.amount + 1
            else:
                order_detail = OrderDetail(order=order, dish=dish, amount=1)
            order_detail.save()

            message = TextSendMessage(text='他にご注文はありますか?')
        elif Order.objects.filter(customer=user_id, status=0).first()\
            and sent_message == '完了':
            order = Order.objects.filter(customer=user_id, status=0).first()
            if not order:
                # 新しいオーダーを作る
                order = Order(customer=user_id)
                order.save()

            order_details = order.orderdetail_set.all()
            message = TextSendMessage(
                text=
                f'{order.ordered_at:%Y年%m月%d日 %H時%M分}に注文を受け付けました。\n{output_order_details(order_details)}'
            )
            # 注文完了
            order.status = 1
            order.save()
        else:
            message = TextSendMessage(
                text=f'{user_name}さん いらっしゃいませ。\n「メニュー」と送信すると、注文を開始できます。')
    except Exception:
        message = TextSendMessage(
            text=f'{user_name}さん いらっしゃいませ。\n「メニュー」と送信すると、注文を開始できます。')

        traceback.print_exc()
    line_bot_api.reply_message(reply_token, message)
コード例 #27
0
def on_postback(event):
    user_id = event.source.user_id
    reply_token = event.reply_token
    post_data = event.postback.data

    if post_data == "工学部":
        line_bot_api.reply_message(event.reply_token, [
            TextSendMessage(
                text="下のボタンから学科を選択してください。",
                quick_reply=QuickReply(items=[
                    QuickReplyButton(
                        action=PostbackAction(label=major, data=major))
                    for major in major_list["工学部"]
                ]))
        ])

    elif post_data == "ヘルプ":
        line_bot_api.reply_message(event.reply_token, [
            TextSendMessage(text="""再登録をしたいとき・・・
下の「学部再登録」のボタンを押してください。もう一度下にボタンが出現します。\n
ご感想、エラー報告・・・
「送信フォーム」のボタンを押してください。Googleフォームが現れ、匿名で送信できます。\n
鬼仏情報の投稿・・・
「トンペー鬼仏表」のボタンを押してください。サイトに移動します。\n
経済学部の方・・・
「ゼミ協」とテキストを送信してください。ゼミ協(東北大学経済学部)が運営するLINEbotの紹介リンクを送信します。"""),
            TemplateSendMessage(
                alt_text="選択ボタン",
                template=ButtonsTemplate(
                    text="以下から選択してください",
                    image_size="cover",
                    actions=[
                        MessageAction(text="学部再登録", label="学部再登録"),
                        URIAction(uri="https://forms.gle/XmjrKMPacj9H7nDH9",
                                  label="送信フォーム"),
                        URIAction(uri="https://www.tonpe.site/toppages/index",
                                  label="トンペー鬼仏表")
                    ]))
        ])

    # 絞り込み検索
    elif post_data[-1] == "論" or post_data[-1] == "学" or post_data[-1] == "語":
        lecture_group = post_data
        user_major = get_usermajor(user_id)
        if user_major:
            lecture_info = syllabus_db.search_lecture_info(
                lecture_group, user_major)  # 講義情報の辞書のリストが返ってくる
            if (user_major == "機知" or user_major == "情物" or user_major == "化バイ"
                    or user_major == "材料" or user_major == "建築"
                    or user_major == "理") and post_data == "自然科学":
                line_bot_api.reply_message(
                    event.reply_token,
                    TextSendMessage(text="工,理は件数が多いため表示できません"))

            if len(lecture_info) < 10:
                line_bot_api.reply_message(event.reply_token, [
                    FlexSendMessage(alt_text='シラバス情報',
                                    contents=CarouselContainer([
                                        gen_card_syllabus(dic, post_data)
                                        for dic in lecture_info[:10]
                                    ])),
                    TextSendMessage(text=f"上記{len(lecture_info)}件の講義が見つかりました")
                ])

            elif 10 < len(lecture_info) and len(lecture_info) <= 20:
                line_bot_api.reply_message(event.reply_token, [
                    FlexSendMessage(alt_text='シラバス情報',
                                    contents=CarouselContainer([
                                        gen_card_syllabus(dic, post_data)
                                        for dic in lecture_info[:10]
                                    ])),
                    FlexSendMessage(alt_text='シラバス情報',
                                    contents=CarouselContainer([
                                        gen_card_syllabus(dic, post_data)
                                        for dic in lecture_info[10:20]
                                    ])),
                    TextSendMessage(text=f"上記{len(lecture_info)}件の講義が見つかりました")
                ])

            elif 20 < len(lecture_info) and len(lecture_info) <= 30:
                line_bot_api.reply_message(event.reply_token, [
                    FlexSendMessage(alt_text='シラバス情報',
                                    contents=CarouselContainer([
                                        gen_card_syllabus(dic, post_data)
                                        for dic in lecture_info[:10]
                                    ])),
                    FlexSendMessage(alt_text='シラバス情報',
                                    contents=CarouselContainer([
                                        gen_card_syllabus(dic, post_data)
                                        for dic in lecture_info[10:20]
                                    ])),
                    FlexSendMessage(alt_text='シラバス情報',
                                    contents=CarouselContainer([
                                        gen_card_syllabus(dic, post_data)
                                        for dic in lecture_info[20:30]
                                    ])),
                    TextSendMessage(text=f"上記{len(lecture_info)}件の講義が見つかりました")
                ])
        # 所属登録が済んでいない場合
        else:
            line_bot_api.reply_message(event.reply_token,
                                       TextSendMessage(text="所属を登録してください"))

    else:  # ユーザ情報をDBに格納
        if post_data[-1] == "部":
            user_major = post_data[0]
        else:
            user_major = post_data
        user_db.add_userinfo(user_major, user_id)
        line_bot_api.reply_message(
            event.reply_token, TextSendMessage(text=post_data + "で登録しました!"))
コード例 #28
0
ファイル: app.py プロジェクト: plamone1/meetup2-qa-chatbot
def handle_postback_event(event):
    postback_data = event.postback.data
    print('postback_data: {}'.format(postback_data))
    if postback_data == 'mode=run_test':
        job_template = run_test.display_test_job_menu(data='start_test={}',
                                                      image_url='run.jpg')
        line_bot_api.reply_message(event.reply_token,
                                   messages=TemplateSendMessage(
                                       alt_text='Job List',
                                       template=job_template))
    if postback_data == 'mode=rerun_test':
        failed_job_template = run_test.display_failed_test_menu()
        line_bot_api.reply_message(event.reply_token,
                                   messages=TemplateSendMessage(
                                       alt_text='Failed Job List',
                                       template=failed_job_template))
    if postback_data == 'mode=latest_result':
        job_template = run_test.display_test_job_menu(
            data='latest_result={}', image_url='latest_result.png')
        line_bot_api.reply_message(event.reply_token,
                                   messages=TemplateSendMessage(
                                       alt_text='Job List',
                                       template=job_template))
    if postback_data == 'mode=test_stat':
        job_template = run_test.display_test_job_menu(data='test_stat={}',
                                                      image_url='stat.jpg')
        line_bot_api.reply_message(event.reply_token,
                                   messages=TemplateSendMessage(
                                       alt_text='Job List',
                                       template=job_template))

    if 'start_test=' in postback_data or 'rerun_test=' in postback_data:
        job_name = postback_data.split('=')[1]
        build_result = jenkins.build_job(job_name)
        if build_result:
            line_bot_api.reply_message(
                event.reply_token,
                messages=TextSendMessage(
                    text='Trigger Job:{0} Please Wait...'.format(job_name)))
        else:
            line_bot_api.reply_message(
                event.reply_token,
                messages=TextSendMessage(
                    text='Trigger Job: {0} Failed!'.format(job_name)))

    if 'test_stat=' in postback_data:
        job_name = postback_data.split('=')[1]
        job_url = os.getenv('JENKINS_URL') + '/job/' + job_name + '/'
        data = jenkins.get_test_result_history(job_url)
        bubble_container = statistic.generate_test_stat_message(data)
        line_bot_api.reply_message(event.reply_token,
                                   messages=FlexSendMessage(
                                       'Test Result',
                                       contents=bubble_container))

    if 'latest_result=' in postback_data:
        job_name = postback_data.split('=')[1]
        job_url = os.getenv('JENKINS_URL') + '/job/' + job_name + '/'
        latest_result_data = jenkins.get_test_latest_result(job_url)
        carousel_container = test_result.generate_latest_result(
            latest_result_data)
        line_bot_api.reply_message(event.reply_token,
                                   messages=FlexSendMessage(
                                       alt_text='Latest Result',
                                       contents=carousel_container))

    if 'detail_job=' in postback_data:
        job_name = postback_data.split('&')[0].split('=')[1]
        build_no = postback_data.split('&')[1].split('=')[1]
        test_name = postback_data.split('&')[2].split('=')[1]
        job_url = os.getenv('JENKINS_URL') + '/job/' + job_name + '/'
        test_result_data = jenkins.get_test_detail_by_name(
            job_url, build_no, test_name)
        messages = []
        video_link = video_url.format(job_name, build_no, test_name)
        messages.append(
            VideoSendMessage(original_content_url=video_link,
                             preview_image_url=video_link))
        if test_result_data['errorDetails'] is not None:
            messages.append(
                TextSendMessage(text='{0}: FAILED!\nErrorMessage:{1}'.format(
                    test_name, test_result_data['errorDetails'])))
        else:
            messages.append(
                TextSendMessage(text='{}: PASSED!'.format(test_name)))
        line_bot_api.reply_message(event.reply_token, messages=messages)
コード例 #29
0
def handle_message(event):
    
    global countt
    Listentext = event.message.text
    Listentext = Listentext.lower()
    helptable="請輸入關鍵字來獲得更多訊息:\n-> 觀看自介影片:video\n-> 查看我的個人網頁:myweb\n-> 查看我的Github:github\n\n更詳盡的自我介紹請輸入:aboutme"
    if countt == 0:
        message = TextSendMessage(text=("Hello, 大家好~~\n我是廖莉祺(Claire Liao)\n"+helptable))
        
        line_bot_api.reply_message(event.reply_token, message)
        countt = 1
    elif countt==1:
        if Listentext=="video":
            message = VideoSendMessage(
                type="video",
                original_content_url='https://www.csie.ntu.edu.tw/~b04902046/profile_web_1.mp4',
                preview_image_url='https://www.csie.ntu.edu.tw/~b04902046/cx617.jpg'
            )
            line_bot_api.reply_message(event.reply_token, message)

        elif "myweb" == Listentext:
            message = TemplateSendMessage(
            alt_text='Buttons template',
            template=ButtonsTemplate(
            thumbnail_image_url='https://xiao617.github.io/csx_linker/cx617.jpg',
            title='Myweb',
            text='View my web!',
            actions=[
                URITemplateAction(
                    label='view my web',
                    uri='https://www.csie.ntu.edu.tw/~b04902046/'
                )
                ]
            )
        )
            line_bot_api.reply_message(event.reply_token, message)
        elif "github" == Listentext:
            message = TemplateSendMessage(
            alt_text='Buttons template',
            template=ButtonsTemplate(
            thumbnail_image_url='https://avatars0.githubusercontent.com/u/9919?s=280&v=4',
            title='My Github',
            text='All my work is on github!',
            actions=[
                URITemplateAction(
                    label='view my github',
                    uri='https://github.com/xiao617'
                )
                ]
            )
        )
            line_bot_api.reply_message(event.reply_token, message)
        elif "aboutme" == Listentext:
            message = TextSendMessage(text="hello,我是廖莉祺\n目前就讀台大資工\n(你可以問我研究相關的問題\n或是輸入:返回)")
        
            line_bot_api.reply_message(event.reply_token, message)
            countt = 2
        elif "123" == Listentext:
            hint = "我會唸詩還會說笑話啊"
            message = TextSendMessage(text=hint)
            stickerr = StickerSendMessage(
                    package_id='1',
                    sticker_id='2'
            )
            line_bot_api.reply_message(event.reply_token, (message,stickerr))
            countt = 3
        else:
            message = TextSendMessage(text=helptable)
            line_bot_api.reply_message(event.reply_token, message)
    elif countt==2:
        if "返回" in Listentext:
            message = TextSendMessage(text=helptable)
            line_bot_api.reply_message(event.reply_token, message)
            countt = 1
        elif "研究細節" in Listentext:
            myresearch = "computer vision:\n我主要是做Motion recognition\n以及360 image detection\nrobotics:\n是做機器人的控制\n特別是使用pepper\n\n如果你想知道我的研究經歷\n歡迎跟我聊,\n或是輸入:返回"
            message = TextSendMessage(text=myresearch)
            line_bot_api.reply_message(event.reply_token, message)
        elif "研究經歷" in Listentext:
            myresearch = "我目前是在台大傅立成教授的智慧機器人實驗室以及中研院劉庭祿教授的電腦視覺實驗室\n\n2017/2~now:智慧機器人實驗室\n2018/1~now:電腦視覺實驗室\n\n輸入:返回\n或是使用help"
            message = TextSendMessage(text=myresearch)
            line_bot_api.reply_message(event.reply_token, message)
        elif ("research" in Listentext) or ("Research" in Listentext) or ("研究" in Listentext) or ("專題" in Listentext):
            myresearch = "我的專題領域是:\n-> computer vision &\n-> robotics\n如果你想進一步了解\n可以跟我聊聊研究細節\n(如果你不知道該說什麼\n也可以使用help)"
            message = TextSendMessage(text=myresearch)
            line_bot_api.reply_message(event.reply_token, message)
        else:
            researchtable = "這部分你可以跟我聊聊:\n\t1.研究\n\t2.研究細節\n\t3.研究經歷\n\n或是輸入:返回"
            message = TextSendMessage(text=researchtable)
            line_bot_api.reply_message(event.reply_token, message)
コード例 #30
0
def on_messaging(event):
    text = event.message.text
    reply_token = event.reply_token
    user_id = event.source.user_id
    profiles = line_bot_api.get_profile(user_id=user_id)
    display_name = profiles.display_name

    if text == "吸いたい!":
        # DBへの保存
        try:
            sql = "select * from " + REMOTE_DB_TB + " where user_id='" + str(
                user_id) + "';"
            c.execute(sql)
            ret = c.fetchall()

            if len(ret) == 0:
                status = 1
                sql = "insert into " + REMOTE_DB_TB + " values ('" + str(
                    user_id) + "','" + str(
                        display_name) + "','none', 'none', 'none', 'none');"

                # メッセージの送信
                buttons_template = ButtonsTemplate(title='初めまして!', \
                    text='あなたについて少し教えてくれますか?', \
                    actions=[PostbackAction(label='あなたについての質問に答える', data='answer'),PostbackAction(label='やっぱりやめておく', data='no')])
                template_message = TemplateSendMessage(
                    alt_text='welcome', template=buttons_template)
                line_bot_api.reply_message(event.reply_token, template_message)

            elif len(ret) == 1:
                sql_status = "select * from " + REMOTE_DB_TB3 + " where user_id='" + str(
                    user_id) + "';"
                c.execute(sql_status)
                ret_status = c.fetchall()
                #status=str(int(ret_status[0][0])+1)
                dt_now = str(datetime.datetime.now())[0:10]
                ret_df = pd.DataFrame(ret_status)
                latest = str(max(ret_df[1]))[0:10]
                if dt_now == latest:
                    status = len(
                        [str(i) for i in ret_df[1] if latest in str(i)]) + 1
                elif dt_now != latest:
                    status = 1
                #status = str(len(ret_status)+1)
                #sql="update "+REMOTE_DB_TB+ " set status = '"+str(status)+"' WHERE user_id = '"+str(user_id)+"';"

                # メッセージの送信
                buttons_template = ButtonsTemplate(title='おかえりなさい!', \
                    text='今日は'+str(status)+"回ご利用しています", \
                    actions=[PostbackAction(label='喫煙タイプを選ぶ', data='chat'),PostbackAction(label='やっぱりやめておく', data='no')])
                template_message = TemplateSendMessage(
                    alt_text='welcomeback', template=buttons_template)
                line_bot_api.reply_message(event.reply_token, template_message)

            c.execute(sql)
            conn.commit()
        finally:
            pass
        #    conn.close()
        #    c.close()

    elif text == "やめておく":
        line_bot_api.reply_message(event.reply_token,
                                   TextSendMessage(text="我慢できたあなたはえらい!"))

    elif text == "データ":
        line_bot_api.reply_message(
            event.reply_token,
            ImageSendMessage(
                #original_content_url="https://1.bp.blogspot.com/-eaDZ7sDP9uY/Xhwqlve5SUI/AAAAAAABXBo/EcI2C2vim7w2WV6EYy3ap0QLirX7RPohgCNcBGAsYHQ/s400/pose_syanikamaeru_man.png",
                #preview_image_url="https://1.bp.blogspot.com/-eaDZ7sDP9uY/Xhwqlve5SUI/AAAAAAABXBo/EcI2C2vim7w2WV6EYy3ap0QLirX7RPohgCNcBGAsYHQ/s400/pose_syanikamaeru_man.png"))
                original_content_url=
                "https://uploda1.ysklog.net/uploda/7dc2bc1fbd.png",
                preview_image_url=
                "https://uploda1.ysklog.net/uploda/7dc2bc1fbd.png"))