module.exports = async (socket, data) => { if (!data.question) { // 游戏结束 return } // 从题库找答案 const one = await QuestionModel.findOne({question: data.question}) let choice if (one) { console.log('题库有答案', JSON.stringify(one)) // 答题时,选项顺序可能会打乱,所以要找一下正确答案文字对应的索引值 choice = data.options.findIndex(option => String(one.options[one.answer]) === String(option)) } else { try { const {result, index} = await search(data) choice = index console.log('题库没答案,网上搜答案', result) } catch (e) { console.error(e) choice = random(0, 3) console.error('网上搜答案失败,随机答案', choice) } } console.log('提交答案', choice, data.options[choice]) // 把题目先暂存到内存中,等返回答案后,一块存数据库 socket._question = { question: data.question, options: data.options } // 题库有答案就用,没答案就随机一个 socket.send({ event: 'event_choice', choice }) }
const search = require('search') const crypto = require('./crypto') module.exports = { * beforeSendRequest (requestDetail) {}, * beforeSendResponse (requestDetail, responseDetail) { if (requestDetail.url.indexOf('/practice/practice_v2?action=get_subject') !== -1) { const response = responseDetail.response const body = JSON.parse(response.body) const data = JSON.parse(crypto.decrypt(body.data, body.encrypt)) console.log('[返回题目]', JSON.stringify(data)) const searchResult = yield search({ question: data.title, options: data.answer.map(({ans}) => ans) }) console.log('[搜索答案]', JSON.stringify(searchResult)) searchResult.result.forEach((r, i) => { data.answer[i].ans = `${searchResult.index === i ? '√ ' : ''}[${r}] ${data.answer[i].ans}` }) body.data = crypto.encrypt(JSON.stringify(data), body.encrypt) response.body = JSON.stringify(body) return {response} } } }
// console.log('[response]', response) } catch (e) {} this._findQuiz = data console.log('[题目信息]', JSON.stringify(data)) // 从题库里找答案 this._quiz = yield QuizModel.findOne({quiz: this._findQuiz.quiz}) if (this._quiz) { const answer = Zhdtw.transformAnswer(this._quiz, this._findQuiz) - 1 const option = this._findQuiz.options[answer] this._findQuiz.options[answer] = '√ ' + option console.log('[题库有答案]', option) } else { // 题库没有,网上搜索 try { const {result, index} = yield search({ question: this._findQuiz.quiz, options: this._findQuiz.options }) // eslint-disable-next-line no-return-assign result.forEach((s, i) => this._findQuiz.options[i] = `${index === i ? '√ ' : ''}[${s}] ${this._findQuiz.options[i]}`) console.log('[网上搜答案]', result) } catch (e) { console.error(e) } } body.data = this._findQuiz response.body = JSON.stringify(body) return {response} } else if (requestDetail.url.indexOf('/question/bat/choose') !== -1) { try { body = JSON.parse(response.body.toString()) data = body.data