def chatbot(msg): if 'dialog' in msg: dialog = byteArrayToStr(msg['dialog']) if 'callState' in msg: callState = byteArrayToStr(msg['callState']) if 'filename' in msg: filename = byteArrayToStr(msg['filename']) print(callState) print('Inner Chatbot : ') print(filename) # check state if callState == 'termTest': caller = get_term_ready(dialog, filename) if caller['sign']: print(caller['subject']) print(caller['termCount']) return { 'dialog': '그럼 시험을 시작하겠습니다. 과목은 ' + caller['subject'] + '입니다. 총' + str( caller['termCount']) + '문제 입니다. 문제의 입력은 \'n번 m\'같은 형식으로 입력하시면됩니다.' '채점시에는 \'채점\' 혹은 \'완료\'라고 입력하시면 됩니다.', 'callState': 'testTermOK', 'subject': caller['subject'], 'termCount': str(caller['termCount'])} return {'dialog': '그럼 문제를 일단 저장해두겠습니다. 다음부터 동일 문제의 조회가 빨라집니다', 'callState': 'None'} elif callState == 'testTermOK': data = get_term_input(dialog) return data elif callState == 'testTermMarking': if 'test' in msg: if msg['test'] == True: if msg['sub'] == 'math': data = test_marking_term_math(msg) elif msg['sub'] == 'kor': data = test_marking_term_kor(msg) elif msg['sub'] == 'eng': data = test_marking_term_eng(msg) else: data = marking_term(msg) else: data = marking_term(msg) print(data) return {'dialog': '채점이 완료되었습니다.<br>이번 시험의 점수는 ' + str(data['total']) + '입니다.<br>등급은 ' + str( data['grade']) + '등급 입니다', 'callState': 'myPage', 'data': data} # check None state if dialog.find('상황') >= 0 or dialog.find('점수') >= 0 or dialog.find('정보') >= 0: return {'dialog': '개인 정보를 불러 오겠습니다.', 'callState': 'myPage'} elif dialog.find('한준') >= 0: return {'dialog': '회장님', 'callState': 'None'} elif dialog.find('진하') >= 0: return {'dialog': '임지짜입니다', 'callState': 'None'} elif dialog.find('현영') >= 0: return {'dialog': '안마노예', 'callState': 'None'} elif dialog.find('모의고사') >= 0 or dialog.find('수능') >= 0: filename = term(dialog) print('filename : ') print(filename) emit('loadTerm', {'filename': filename}) return {'dialog': '문제를 가져왔습니다.', 'callState': 'None', 'filename': filename} else: return {'dialog': '무슨 말인지 모르겠습니다.', 'callState': 'None'}
def dialog(msg): dialog = byteArrayToStr(msg['data']) name = byteArrayToStr(msg['name']) email = byteArrayToStr(msg['email']) callState = byteArrayToStr(msg['callState']) time = str(datetime.datetime.now()) print('socket on dialog : ') print(dialog, name, email, time, callState) if 'isLogin' in session: if addDialog(dialog, name, email, time, callState): emit( 'dialogConfirm', { 'confirm': True, 'dialog': dialog, 'time': time, 'callState': callState }) else: emit('dialogConfirm', {'confirm': False}) else: emit('dialogConfirm', {'confirm': False})
def callTermTest(msg): if 'state' in msg: if msg['state']: # tmp = chatbot(msg['filename']) filename = byteArrayToStr(msg['filename']) print('socket on callTermTest : ') print(filename) emit( 'ansChatbot', { 'dialog': '문제를 푸시겠습니까?', 'callState': 'termTest', 'filename': filename })
def test_marking_term_eng(msg): filename = byteArrayToStr(msg['filename']) subject = byteArrayToStr(msg['subject']) termCount = byteArrayToStr(msg['termCount']) termData = filename.split('/') termData = termData[len(termData) - 1] termData = termData.split('.')[0] termData = termData.split(' ') if termData[len(termData) - 1].find('수능') >= 0: year = termData[0] term_type = '수능' elif termData[len(termData) - 1].find('모의고사') >= 0: year = termData[0] month = termData[1] term_type = '모의고사' termArr = [ 2, 1, 1, 3, 1, 5, 1, 1, 4, 4, 4, 2, 3, 5, 5, 3, 3, 2, 1, 2, 5, 5, 1, 3, 4, 4, 4, 4, 3, 4, 2, 3, 1, 4, 2, 4, 5, 5, 3, 2, 1, 2, 5, 2, 5 ] print(termArr) print(session) if term_type == '수능': data = {'year': year, 'subject': subject, 'term_type': term_type} jsonData = bytes(json.dumps(data).encode()) req = urllib.request.Request("http://localhost:5001/wrong-answer", data=jsonData) req.get_method = lambda: 'get' jsonResult = urllib.request.urlopen(req).read() resultW = json.loads(jsonResult.decode()) print(resultW) jsonData = bytes(json.dumps(data).encode()) req = urllib.request.Request("http://localhost:5001/point-cut", data=jsonData) req.get_method = lambda: 'get' jsonResult = urllib.request.urlopen(req).read() resultP = json.loads(jsonResult.decode()) print(resultP) elif term_type == '모의고사': data = { 'year': year, 'month': month, 'subject': subject, 'term_type': term_type } jsonData = bytes(json.dumps(data).encode()) req = urllib.request.Request("http://localhost:5001/wrong-answer", data=jsonData) req.get_method = lambda: 'get' jsonResult = urllib.request.urlopen(req).read() resultW = json.loads(jsonResult.decode('utf-8')) print(resultW) jsonData = bytes(json.dumps(data).encode()) req = urllib.request.Request("http://localhost:5001/point-cut", data=jsonData) req.get_method = lambda: 'get' jsonResult = urllib.request.urlopen(req).read() resultP = json.loads(jsonResult.decode()) print(resultP) total = 0 origin = [] print(termArr) for i in range(len(termArr)): if str(termArr[i]) == str(resultW[str(i + 1)]['정답']): origin.append(int(resultW[str(i + 1)]['배점'])) total += int(resultW[str(i + 1)]['배점']) print(total) grade = 1 for i in range(len(resultP)): if int(resultP[str(i + 1)]['원점수']) >= total: grade = int(resultP[str(i + 1)]['등급']) data = { 'email': session['email'], 'subject': subject, 'termCount': termCount, 'filename': filename, 'termArr': termArr, 'grade': grade, 'total': total } jsonData = bytes(json.dumps(data).encode()) req = urllib.request.Request("http://localhost:5001/answer", data=jsonData) req.get_method = lambda: 'post' jsonResult = urllib.request.urlopen(req).read() result = json.loads(jsonResult.decode()) print(result) term_type = result['term_type'] return { 'origin': origin, 'termArr': termArr, 'total': total, 'grade': grade }
def markingTermChatbot(msg): filename = byteArrayToStr(msg['filename']) termCount = byteArrayToStr(msg['termCount']) termArr = [] if 'test' in msg: test = msg['test'] else: test = None i = 0 size = 0 addStr = '' for termE in msg['termArr']: if termE is None: termArr.append(None) else: termArr.append(byteArrayToStr(termE)) size += 1 addStr += str(i + 1) + '번 ' i += 1 print('size:' + str(size)) print('termCount:' + str(termCount)) print(test) if test: emit( 'ansChatbot', { 'dialog': '문제를 모두 푸셨습니다. 채점을 시작합니다.', 'callState': 'testTermMarking', 'filename': filename, 'test': msg['test'] }) msg['callState'] = b'testTermMarking' tmp = chatbot(msg) emit( 'ansChatbot', { 'dialog': tmp['dialog'], 'callState': tmp['callState'], 'filename': filename, 'test': msg['test'] }) elif str(termCount) != str(size): emit( 'ansChatbot', { 'dialog': '아직 문제를 다 풀지 못했습니다.<br> 푼 문제는 ' + addStr + '입니다.', 'callState': 'testTermOK', 'filename': filename }) elif size == 0: emit( 'ansChatbot', { 'dialog': '아직 문제를 다 풀지 못했습니다.<br> 푼 문제는 없습니다.', 'callState': 'testTermOK', 'filename': filename }) else: emit( 'ansChatbot', { 'dialog': '문제를 모두 푸셨습니다. 채점을 시작합니다.', 'callState': 'testTermMarking', 'filename': filename, 'test': msg['test'] }) msg['callState'] = b'testTermMarking' tmp = chatbot(msg) emit( 'ansChatbot', { 'dialog': tmp['dialog'], 'callState': tmp['callState'], 'filename': filename, 'test': msg['test'] })