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
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 })
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 })
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
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
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
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
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