Example #1
0
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
  })
}
Example #2
0
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}
    }
  }
}
Example #3
0
     // 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