def no_test_pokemon_search(self, mock_bot_send_message, mock_bot_sender_action): msg = { 'message': { 'quick_reply': { 'payload': "PAYLOAD_RELATED_POKEMON" } } } sender = "fake_user" msgbody = msg['message'] user = UserStatus(sender) user.set_status('STATE_POKEMON_SEARCH_OK') user.set_q('黃色電氣老鼠') user.set_english('pikachu') user.set_chinese('皮卡丘') # 真正跑測試的地方~ celery_handle_message(msg, sender, msgbody) print("\033[0;32m%s\033[m" % json.dumps(mock_bot_send_message.call_args_list, indent=4, sort_keys=True, ensure_ascii=False))
def test_joke(self, mock_bot_send_message, mock_bot_sender_action): msg = {"message": {"text": "笑話"}} sender = "fake_user" msgbody = msg['message'] # 開始跑測試囉~ celery_handle_message(msg, sender, msgbody) print("\033[0;32m%s\033[m" % json.dumps(mock_bot_send_message.call_args_list, indent=4, sort_keys=True, ensure_ascii=False)) user = UserStatus(sender) assert user.get_status() == 'new'
def handle_message(self, msg, sender, msgbody): """ 處理訊息的函式。 Keyword Arguments: msg -- (dictionary) Facebook 的 Message 格式 sender -- (string) sender_id msgbody -- (dictionary) 特別把 message 的部份挑出來,方便處理 Return: 不回傳任何東西 """ # 這段應該是測試的 code... counter = int(redis_store.get('state::counter') or '0') counter += 1 print(counter) redis_store.set('state::counter', str(counter)) # 檢查 sender 現在的狀態(回答問題、問問題或是提供反饋) # 方法是從暫存的 redis 裡頭取出關於目前這個 sender 的所有資訊 user = UserStatus(sender) # 時間間隔太久,一律視為新詢問 # tdelta = datetime.now() - user.get_last_active() # if tdelta.total_seconds() >= 300: # user.set_status('new') # user.set_last_active(datetime.now()) # 從送進來的 msg 分析, 作為 input parsed_msg, template_params = self.intention_detector.parse_msg(user, msgbody) # 執行到下一個 state self.state_machine.run(self.intention_bot, user, parsed_msg, **template_params)
def handle_message(self, msg, sender, msgbody): """ 處理訊息的函式。 Keyword Arguments: msg -- (dictionary) Facebook 的 Message 格式 sender -- (string) sender_id msgbody -- (dictionary) 特別把 message 的部份挑出來,方便處理 Return: 不回傳任何東西 """ # 這段應該是測試的 code... counter = int(redis_store.get('state::counter') or '0') counter += 1 print(counter) redis_store.set('state::counter', str(counter)) # 檢查 sender 現在的狀態(回答問題、問問題或是提供反饋) # 方法是從暫存的 redis 裡頭取出關於目前這個 sender 的所有資訊 state = UserStatus(sender) # 時間間隔太久,一律視為新詢問 tdelta = datetime.now() - state.get_last_active() if tdelta.total_seconds() >= 300: state.set_status('new') state.set_last_active(datetime.now()) # 取得意圖 intention_bot = self.intention_detector.get_intention_bot(sender, state, msgbody) # 處理意圖 intention_bot.handle_message(msg, sender, state, msgbody)
def test_translate_english_to_chinese(self, mock_bot_send_message, mock_bot_sender_action): msg = {"message": {"text": "請問 avocado 的中文是什麼"}} sender = "fake_user" msgbody = msg['message'] # 真正跑測試的地方~ celery_handle_message(msg, sender, msgbody) # 檢查已讀是否送出 assert mock_bot_sender_action.called print("\033[0;32m%s\033[m" % json.dumps(mock_bot_send_message.call_args_list, indent=4, sort_keys=True, ensure_ascii=False)) user = UserStatus(sender) assert user.get_status() == 'STATE_ENGLISH_TO_CHINESE_OK'
def test_pikachu_more(self, mock_bot_send_message, mock_bot_sender_action): msg = {"message": {"text": "pikachu"}} sender = "fake_user" msgbody = msg['message'] # 真正跑測試的地方~ celery_handle_message(msg, sender, msgbody) user = UserStatus(sender) assert user.get_status() == 'STATE_ENGLISH_TO_CHINESE_OK' # 接下來按下 "更多" msg = {"message": {"quick_reply": {"payload": 'PAYLOAD_MORE'}}} msgbody = msg['message'] celery_handle_message(msg, sender, msgbody) print("\033[0;32m%s\033[m" % json.dumps(mock_bot_send_message.call_args_list, indent=4, sort_keys=True, ensure_ascii=False))
def handle_postback(self, msg, sender, payload): """ 處理 postback 的函式。 """ state = UserStatus(sender) p = re.match(r'([^:]*):(.*)', payload) payload = p.group(1) target = p.group(2) print("Handling payload: %s for target=%s" % (payload, target)) intention_bot = self.intention_detector.get_postback_intention_bot(sender, state, payload, target) intention_bot.handle_message(msg, sender, state, {"payload": payload, "target": target})
def no_test_pokemon_search(self, mock_bot_send_message, mock_bot_sender_action): # msg = {'message':{'text':'黃色電氣老鼠'}} payload = 'PAYLOAD_POKEMON_DESCRIPTION:797,習性' sender = "fake_user" from app.models import Term term = Term.query.filter_by(chinese='鐵火輝夜').first() print(term.descriptions.first().as_dict()) print(term.id) user = UserStatus(sender) # user.set_status('STATE_POKEMON_SEARCH') # 真正跑測試的地方~ celery_handle_postback({}, sender, payload) print("\033[0;32m%s\033[m" % json.dumps(mock_bot_send_message.call_args_list, indent=4, sort_keys=True, ensure_ascii=False))