Esempio n. 1
0
    async def facebook(self, command):
        if command == 'get_started':
            # send_message = [
            #     Message(
            #         attachment=ImageAttachment(
            #             url=BRICK_DEFAULT_IMAGE
            #         )
            #     ),
            #     Message(
            #         text='(주)나눔로또에서 제공하는 "로또당첨번호 서비스"에요.'
            #     )
            # ]
            send_message = [
                Message(attachment=TemplateAttachment(payload=GenericTemplate(
                    elements=[
                        Element(image_url=BRICK_DEFAULT_IMAGE,
                                title='로또당첨번호 서비스',
                                subtitle='(주)나눔로또에서 제공하는 "로또당첨번호 서비스"에요.')
                    ])))
            ]
            await self.fb.send_messages(send_message)
            await self.brick_db.save()
        elif command == 'final':
            input_data = await self.brick_db.get()
            num = input_data['store'][0]['value']

            if self.fb.log_id is None:
                self.fb.log_id = 'FBSendMessage|%d' % int(time.time() * 1000)
            res = requests.get(
                url=
                'http://www.nlotto.co.kr/common.do?method=getLottoNumber&drwNo=%s'
                % num)
            save_a_log_to_server({
                'log_id': self.fb.log_id,
                'user_id': self.fb.user_id,
                'os': '',
                'application': 'facebook',
                'api_code': 'lotto',
                'api_provider_code': 'chatbrick',
                'origin': 'webhook_server',
                'end': int(time.time() * 1000),
                'remark': '외부 로또 당첨번호 조회 API 요청을 보냄'
            })
            parsed_result = res.json()

            await self.brick_db.delete()
            await self.fb.send_message(message=Message(
                text=
                '두구두구두구 ~\n조회하신 {drwNo}회 당첨번호는 {drwtNo1},{drwtNo2},{drwtNo3},{drwtNo4},{drwtNo5},{drwtNo6} 에 보너스번호는 {bnusNo} 이에요.\n부디 1등이길!!'
                .format(**parsed_result),
                quick_replies=QuickReply(quick_reply_items=[
                    QuickReplyTextItem(title='다른회차검색',
                                       payload='brick|lotto|get_started')
                ])))

        return None
Esempio n. 2
0
 async def send_messages(self, messages):
     for idx, message in enumerate(messages):
         if self.log_id is None:
             self.log_id = 'FBSendMessage|%d' % int(time.time() * 1000)
         await self.fb.send_message(
             RequestDataFormat(recipient=self.rep,
                               message=message,
                               message_type='RESPONSE'))
         self.log_id = save_a_log_to_server({
             'log_id':
             self.log_id,
             'user_id':
             self.user_id,
             'os':
             '',
             'application':
             'facebook',
             'task_code':
             detect_log_type(message),
             'origin':
             'webhook_server',
             'end':
             int(time.time() * 1000),
             'remark':
             '%d번째 브릭 메시지 보냈습니다.' % idx
         })
Esempio n. 3
0
    async def send_messages(self, messages):
        for idx, message in enumerate(messages):
            if type(message) is not dict:
                dict_message = message.get_data()
                dict_message['chat_id'] = self.rep

                if self.log_id is None:
                    self.log_id = 'SendMessage|%d' % int(time.time() * 1000)
                await self.tg.send_message(message.get_method(), dict_message)
                self.log_id = save_a_log_to_server({
                    'log_id':
                    self.log_id,
                    'user_id':
                    self.rep,
                    'os':
                    '',
                    'application':
                    'telegram',
                    'task_code':
                    message.get_method(),
                    'origin':
                    'webhook_server',
                    'end':
                    int(time.time() * 1000),
                    'remark':
                    '%d번째 브릭 메시지 보냈습니다.' % idx
                })
Esempio n. 4
0
    async def telegram(self, command):
        if command == 'get_started':
            send_message = [
                tg.SendPhoto(photo=BRICK_DEFAULT_IMAGE),
                tg.SendMessage(text='(주)나눔로또에서 제공하는 "로또당첨번호 서비스"에요.')
            ]
            await self.fb.send_messages(send_message)
            await self.brick_db.save()
        elif command == 'final':
            input_data = await self.brick_db.get()
            num = input_data['store'][0]['value']

            if self.fb.log_id is None:
                self.fb.log_id = 'SendMessage|%d' % int(time.time() * 1000)
            res = requests.get(
                url=
                'http://www.nlotto.co.kr/common.do?method=getLottoNumber&drwNo=%s'
                % num,
                verify=False)
            save_a_log_to_server({
                'log_id': self.fb.log_id,
                'user_id': self.fb.user_id,
                'os': '',
                'application': 'telegram',
                'api_code': 'lotto',
                'api_provider_code': 'chatbrick',
                'origin': 'webhook_server',
                'end': int(time.time() * 1000),
                'remark': '외부 로또 당첨번호 조회 API 요청을 보냄'
            })
            parsed_result = res.json()

            await self.brick_db.delete()
            await self.fb.send_message(
                tg.SendMessage(
                    text=
                    '두구두구두구 ~\n조회하신 {drwNo}회 당첨번호는 {drwtNo1},{drwtNo2},{drwtNo3},{drwtNo4},{drwtNo5},{drwtNo6} 에 보너스번호는 {bnusNo} 이에요.\n부디 1등이길!!'
                    .format(**parsed_result),
                    reply_markup=tg.MarkUpContainer(inline_keyboard=[[
                        tg.CallbackButton(
                            text='다른회차검색',
                            callback_data='BRICK|lotto|get_started')
                    ]])))

        return None
Esempio n. 5
0
    async def facebook(self, command):
        if command == 'get_started':
            # send_message = [
            #     Message(
            #         attachment=ImageAttachment(
            #             url=BRICK_DEFAULT_IMAGE
            #         )
            #     ),
            #     Message(
            #         text='한국천문연구원에서 제공하는 "쉬는날 조회 서비스"에요.'
            #     ),
            #     Message(
            #         attachment=TemplateAttachment(
            #             payload=GenericTemplate(
            #                 elements=[
            #                     Element(
            #                         image_url='https://www.chatbrick.io/api/static/brick/img_brick_11_002.png',
            #                         title='이번달에 쉬는날',
            #                         subtitle='이번달에 공휴일을 알려드려요.',
            #                         buttons=[
            #                             PostBackButton(
            #                                 title='이번달조회',
            #                                 payload='brick|holiday|this_month'
            #                             )
            #                         ]
            #                     ),
            #                     Element(
            #                         image_url='https://www.chatbrick.io/api/static/brick/img_brick_11_002.png',
            #                         title='지정한 년/월에 쉬는날',
            #                         subtitle='입력하신 년/월의 공휴일을 알려드려요.',
            #                         buttons=[
            #                             PostBackButton(
            #                                 title='조회할 년/월 입력',
            #                                 payload='brick|holiday|specify_month'
            #                             )
            #                         ]
            #                     )
            #                 ]
            #             )
            #         )
            #     )
            # ]
            send_message = [
                Message(attachment=TemplateAttachment(payload=GenericTemplate(
                    elements=[
                        Element(image_url=BRICK_DEFAULT_IMAGE,
                                title='쉬는날 조회 서비스',
                                subtitle='한국천문연구원에서 제공하는 "쉬는날 조회 서비스"에요.')
                    ]))),
                Message(attachment=TemplateAttachment(payload=GenericTemplate(
                    elements=[
                        Element(
                            image_url=
                            'https://www.chatbrick.io/api/static/brick/img_brick_11_002.png',
                            title='이번달에 쉬는날',
                            subtitle='이번달에 공휴일을 알려드려요.',
                            buttons=[
                                PostBackButton(
                                    title='이번달조회',
                                    payload='brick|holiday|this_month')
                            ]),
                        Element(
                            image_url=
                            'https://www.chatbrick.io/api/static/brick/img_brick_11_002.png',
                            title='지정한 년/월에 쉬는날',
                            subtitle='입력하신 년/월의 공휴일을 알려드려요.',
                            buttons=[
                                PostBackButton(
                                    title='조회할 년/월 입력',
                                    payload='brick|holiday|specify_month')
                            ])
                    ])))
            ]
            await self.fb.send_messages(send_message)
        elif command == 'specify_month':
            await self.brick_db.save()

        elif command == 'final' or command == 'next_month' or command == 'prev_month' or command == 'this_month':
            if command == 'this_month':
                await self.brick_db.save(is_pass=True)

            input_data = await self.brick_db.get()
            year = input_data['store'][0]['value']
            month = input_data['store'][1]['value']

            if year.strip() == 'pass' or month.strip() == 'pass':
                today = datetime.datetime.today()
                year = today.year
                month = today.month

            if command == 'next_month':
                plus_month = dateutil.parser.parse(
                    '%s %s 01' % (year, month)) + relativedelta(months=1)
                year = plus_month.year
                month = plus_month.month

            elif command == 'prev_month':
                plus_month = dateutil.parser.parse(
                    '%s %s 01' % (year, month)) - relativedelta(months=1)
                year = plus_month.year
                month = plus_month.month

            if command == 'next_month' or command == 'prev_month':
                rslt = await self.brick_db.update({
                    '$set': {
                        'store.0.value': str(year),
                        'store.1.value': str(month)
                    }
                })

            if self.fb.log_id is None:
                self.fb.log_id = 'FBSendMessage|%d' % int(time.time() * 1000)
            res = requests.get(
                url=
                'http://apis.data.go.kr/B090041/openapi/service/SpcdeInfoService/getRestDeInfo?serviceKey=%s&solYear=%s&solMonth=%s'
                % (input_data['data']['api_key'], year,
                   str(month).rjust(2, '0')))
            save_a_log_to_server({
                'log_id': self.fb.log_id,
                'user_id': self.fb.user_id,
                'os': '',
                'application': 'facebook',
                'api_code': 'holiday',
                'api_provider_code': 'chatbrick',
                'origin': 'webhook_server',
                'end': int(time.time() * 1000),
                'remark': '쉬는날 조회 외부 API 요청을 보냄'
            })
            items = get_items_from_xml(res)

            if type(items) is dict:
                if items.get('code', '00') == '99' or items.get('code',
                                                                '00') == '30':
                    send_message = [
                        Message(
                            text=
                            'chatbrick 홈페이지에 올바르지 않은 API key를 입력했어요. 다시 한번 확인해주세요.',
                        )
                    ]
                else:
                    send_message = [Message(text=UNKNOWN_ERROR_MSG)]
            else:
                if len(items) == 0:
                    if command == 'prev_month' or command == 'this_month':
                        send_message = [
                            Message(attachment=TemplateAttachment(
                                payload=ButtonTemplate(
                                    text='%s-%s\n조회된 결과가 없습니다.' %
                                    (year, month),
                                    buttons=[
                                        PostBackButton(
                                            title='이전달 조회',
                                            payload='brick|holiday|prev_month'
                                        ),
                                        PostBackButton(
                                            title='다음달 조회',
                                            payload='brick|holiday|next_month')
                                    ])))
                        ]
                    else:
                        send_message = [
                            Message(
                                text='조회된 결과가 없습니다.',
                                quick_replies=QuickReply(quick_reply_items=[
                                    QuickReplyTextItem(
                                        title='다른 달 조회하기',
                                        payload='brick|holiday|get_started')
                                ]))
                        ]

                else:
                    sending_message = []
                    for item in items:
                        sending_message.append(
                            '날짜: {locdate}\n공휴일 유무: {isHoliday}\n공휴일 내용: {dateName}'
                            .format(**item))

                    send_message = [
                        Message(attachment=TemplateAttachment(
                            payload=ButtonTemplate(
                                text='\n\n'.join(sending_message),
                                buttons=[
                                    PostBackButton(
                                        title='이전달 조회',
                                        payload='brick|holiday|prev_month'),
                                    PostBackButton(
                                        title='다음달 조회',
                                        payload='brick|holiday|next_month')
                                ])))
                    ]
            await self.fb.send_messages(send_message)
        return None
Esempio n. 6
0
    async def telegram(self, command):
        if command == 'get_started':
            send_message = [
                tg.SendPhoto(photo=BRICK_DEFAULT_IMAGE),
                tg.SendMessage(
                    text='한국천문연구원에서 제공하는 "쉬는날 조회 서비스"에요.',
                    reply_markup=tg.MarkUpContainer(inline_keyboard=[[
                        tg.CallbackButton(
                            text='이번달에 쉬는날',
                            callback_data='BRICK|holiday|this_month'),
                        tg.CallbackButton(
                            text='조회할 년/월 입력',
                            callback_data='BRICK|holiday|specify_month')
                    ]]))
            ]
            await self.fb.send_messages(send_message)
        elif command == 'specify_month':
            await self.brick_db.save()
        elif command == 'final' or command == 'next_month' or command == 'prev_month' or command == 'this_month':
            if command == 'this_month':
                await self.brick_db.save(is_pass=True)

            input_data = await self.brick_db.get()
            year = input_data['store'][0]['value']
            month = input_data['store'][1]['value']

            if year.strip() == 'pass' or month.strip() == 'pass':
                today = datetime.datetime.today()
                year = today.year
                month = today.month

            if command == 'next_month':
                plus_month = dateutil.parser.parse(
                    '%s %s 01' % (year, month)) + relativedelta(months=1)
                year = plus_month.year
                month = plus_month.month

            elif command == 'prev_month':
                plus_month = dateutil.parser.parse(
                    '%s %s 01' % (year, month)) - relativedelta(months=1)
                year = plus_month.year
                month = plus_month.month

            if command == 'next_month' or command == 'prev_month':
                rslt = await self.brick_db.update({
                    '$set': {
                        'store.0.value': str(year),
                        'store.1.value': str(month)
                    }
                })

            if self.fb.log_id is None:
                self.fb.log_id = 'SendMessage|%d' % int(time.time() * 1000)
            res = requests.get(
                url=
                'http://apis.data.go.kr/B090041/openapi/service/SpcdeInfoService/getRestDeInfo?serviceKey=%s&solYear=%s&solMonth=%s'
                % (input_data['data']['api_key'], year,
                   str(month).rjust(2, '0')))
            save_a_log_to_server({
                'log_id': self.fb.log_id,
                'user_id': self.fb.user_id,
                'os': '',
                'application': 'telegram',
                'api_code': 'holiday',
                'api_provider_code': 'chatbrick',
                'origin': 'webhook_server',
                'end': int(time.time() * 1000),
                'remark': '외부 휴일 조회 API 요청을 보냄'
            })

            items = get_items_from_xml(res)

            if type(items) is dict:
                if items.get('code', '00') == '99' or items.get('code',
                                                                '00') == '30':
                    send_message = [
                        tg.SendMessage(
                            text=
                            'chatbrick 홈페이지에 올바르지 않은 API key를 입력했어요. 다시 한번 확인해주세요.',
                        )
                    ]
                else:
                    send_message = [tg.SendMessage(text=UNKNOWN_ERROR_MSG)]
            else:
                if len(items) == 0:
                    if command == 'prev_month' or command == 'this_month':
                        send_message = [
                            tg.SendMessage(
                                text='*%s년 %s월*\n조회된 결과가 없습니다.' %
                                (year, month),
                                parse_mode='Markdown',
                                reply_markup=tg.
                                MarkUpContainer(inline_keyboard=[[
                                    tg.CallbackButton(
                                        text='이전달 조회',
                                        callback_data='BRICK|holiday|prev_month'
                                    ),
                                    tg.CallbackButton(
                                        text='이전달 조회',
                                        callback_data='BRICK|holiday|next_month'
                                    )
                                ]]))
                        ]
                    else:
                        send_message = [
                            tg.SendMessage(
                                text='*%s년 %s월*\n조회된 결과가 없습니다.' %
                                (year, month),
                                parse_mode='Markdown',
                                reply_markup=tg.MarkUpContainer(
                                    inline_keyboard=[[
                                        tg.CallbackButton(
                                            text='다른 달 조회하기',
                                            callback_data=
                                            'BRICK|holiday|get_started')
                                    ]]))
                        ]
                else:
                    sending_message = []
                    for item in items:
                        sending_message.append(
                            '*{locdate}*\n공휴일 유무: {isHoliday}\n공휴일 내용: {dateName}'
                            .format(**item))

                    send_message = [
                        tg.SendMessage(
                            text='\n\n'.join(sending_message),
                            parse_mode='Markdown',
                            reply_markup=tg.MarkUpContainer(
                                inline_keyboard=[
                                    [
                                        tg.CallbackButton(
                                            text='이전달 조회',
                                            callback_data=
                                            'BRICK|holiday|prev_month')
                                    ],
                                    [
                                        tg.CallbackButton(
                                            text='다음달 조회',
                                            callback_data=
                                            'BRICK|holiday|next_month')
                                    ]
                                ]))
                    ]

            await self.fb.send_messages(send_message)
        return None
Esempio n. 7
0
    async def facebook(self, command):
        if command == 'get_started':
            # send_message = [
            #     Message(
            #         attachment=ImageAttachment(
            #             url=BRICK_DEFAULT_IMAGE
            #         )
            #     ),
            #     Message(
            #         text='블루핵에서 제공하는 "메일보내기 서비스"예요.'
            #     ),
            #     Message(
            #         attachment=TemplateAttachment(
            #             payload=GenericTemplate(
            #                 elements=[
            #                     Element(title='메일전송',
            #                             subtitle='챗봇에서 메일을 보낼 수 있어요',
            #                             image_url=BRICK_GENERIC_TEMPLATE_IMAGE,
            #                             buttons=[
            #                                 PostBackButton(
            #                                     title='메일보내기',
            #                                     payload='brick|mailer|show_data'
            #                                 )
            #                             ])
            #                 ]
            #             )
            #         )
            #     )
            # ]
            send_message = [
                Message(attachment=TemplateAttachment(payload=GenericTemplate(
                    elements=[
                        Element(image_url=BRICK_DEFAULT_IMAGE,
                                title='메일보내기 서비스',
                                subtitle='블루핵에서 제공하는 "메일보내기 서비스"예요.')
                    ]))),
                Message(attachment=TemplateAttachment(payload=GenericTemplate(
                    elements=[
                        Element(title='메일전송',
                                subtitle='챗봇에서 메일을 보낼 수 있어요',
                                image_url=BRICK_GENERIC_TEMPLATE_IMAGE,
                                buttons=[
                                    PostBackButton(
                                        title='메일보내기',
                                        payload='brick|mailer|show_data')
                                ])
                    ])))
            ]
            await self.fb.send_messages(send_message)
        elif command == 'show_data':
            await self.brick_db.save()
        elif command == 'cancel':
            await self.brick_db.delete()
            await self.fb.send_message(message=Message(
                text='메일 보내기를 취소했어요.',
                quick_replies=QuickReply(quick_reply_items=[
                    QuickReplyTextItem(title='새 메일보내기',
                                       payload='brick|mailer|show_data')
                ])))
        elif command == 'final':
            input_data = await self.brick_db.get()
            msg = MIMEText(input_data['store'][2]['value'])
            msg['Subject'] = '%s로부터 이메일입니다.' % input_data['store'][0]['value']
            msg['To'] = input_data['store'][1]['value']
            result = '메일 보내기가 완료되었어요.'
            if self.fb.log_id is None:
                self.fb.log_id = 'FBSendMessage|%d' % int(time.time() * 1000)
            try:
                self.smtp.ehlo()
                self.smtp.starttls()
                self.smtp.login(self.sender_email, self.sender_password)
                self.smtp.sendmail(self.sender_email,
                                   input_data['store'][1]['value'],
                                   msg.as_string())
            except:
                result = '메일 전송을 실패했습니다.\n잠시 후 다시 시도해주세요.'
            save_a_log_to_server({
                'log_id': self.fb.log_id,
                'user_id': self.fb.user_id,
                'os': '',
                'application': 'facebook',
                'api_code': 'mail',
                'api_provider_code': 'chatbrick',
                'origin': 'webhook_server',
                'end': int(time.time() * 1000),
                'remark': 'SMTP 통신으로 이메일 전송함'
            })

            await self.fb.send_message(message=Message(
                text=result,
                quick_replies=QuickReply(quick_reply_items=[
                    QuickReplyTextItem(title='연속하여 메일보내기',
                                       payload='brick|mailer|show_data')
                ])))

            await self.brick_db.delete()
        return None
Esempio n. 8
0
    async def telegram(self, command):
        if command == 'get_started':
            send_message = [
                tg.SendPhoto(photo=BRICK_DEFAULT_IMAGE),
                tg.SendMessage(
                    text='블루핵에서 제공하는 "메일보내기 서비스"예요.',
                    reply_markup=tg.MarkUpContainer(inline_keyboard=[[
                        tg.CallbackButton(
                            text='메일 보내기',
                            callback_data='BRICK|mailer|show_data')
                    ]]))
            ]
            await self.fb.send_messages(send_message)
        elif command == 'show_data':
            await self.brick_db.save()
        elif command == 'cancel':
            await self.brick_db.delete()
            await self.fb.send_message(
                tg.SendMessage(
                    text='메일보내기를 취소했습니다.',
                    reply_markup=tg.MarkUpContainer(inline_keyboard=[[
                        tg.CallbackButton(
                            text='메일 보내기',
                            callback_data='BRICK|mailer|show_data')
                    ]])))
        elif command == 'final':
            input_data = await self.brick_db.get()
            msg = MIMEText(input_data['store'][2]['value'])
            msg['Subject'] = '%s로부터 이메일입니다.' % input_data['store'][0]['value']
            msg['To'] = input_data['store'][1]['value']
            result = '메일 보내기가 완료되었어요.'

            if self.fb.log_id is None:
                self.fb.log_id = 'SendMessage|%d' % int(time.time() * 1000)
            try:
                self.smtp.ehlo()
                self.smtp.starttls()
                self.smtp.login(self.sender_email, self.sender_password)
                self.smtp.sendmail(self.sender_email,
                                   input_data['store'][1]['value'],
                                   msg.as_string())
            except:
                result = '메일 전송을 실패했습니다.\n잠시 후 다시 시도해주세요.'

            save_a_log_to_server({
                'log_id': self.fb.log_id,
                'user_id': self.fb.user_id,
                'os': '',
                'application': 'telegram',
                'api_code': 'mail',
                'api_provider_code': 'chatbrick',
                'origin': 'webhook_server',
                'end': int(time.time() * 1000),
                'remark': 'SMTP 통신으로 이메일 전송함'
            })

            await self.fb.send_message(
                tg.SendMessage(
                    text=result,
                    reply_markup=tg.MarkUpContainer(inline_keyboard=[[
                        tg.CallbackButton(
                            text='연속하여 메일보내기',
                            callback_data='BRICK|mailer|show_data')
                    ]])))
            await self.brick_db.delete()
        return None