자바스크립트 봇

this Telegram bot의 도움으로 JavaScript 기본 지식을 테스트할 수 있습니다.



JavaScript 기초에 대한 29개 주제of our course의 질문을 사용합니다. 자세한 내용about us은 이전 간행물에서 확인할 수 있습니다.
모든 질문에 답한 결과 지식 수준에 대한 평가가 기다리고 있습니다.


Telegraph.js



우리의 봇은 프레임워크에서 구현됩니다Telegraph.js.


오픈소스



프로젝트의 소스 코드는 GitHub에서 사용할 수 있으므로 개발에 참여할 수 있습니다.



require('dotenv').config()
const { Telegraf, session, Stage, BaseScene } = require('telegraf')
const TelegrafI18n = require('telegraf-i18n')
const { level, getSticker, MyContext } = require('./helpers')
const { en, ru } = require('./quiz')
const path = require('path')

const i18n = new TelegrafI18n({
  defaultLanguage: 'en',
  directory: path.resolve(__dirname, 'locales')
})

let BOT_TOKEN

if (process.env.NODE_ENV === 'production') {
  BOT_TOKEN = process.env.BOT_TOKEN
} else {
  BOT_TOKEN = process.env.BOT_TOKEN_TEST
}

const bot = new Telegraf(BOT_TOKEN, { contextType: MyContext })

bot.use(i18n.middleware())

const jsRoom = new BaseScene('js-room')

let getQuiz = ctx => (ctx.i18n.locale() === 'en' ? en : ru)

let questions

jsRoom.enter(ctx => {
  questions = getQuiz(ctx)
  const questionIndex = 0
  const counter = 0
  ctx.session.counter = counter
  ctx.session.questionIndex = questionIndex

  const { title, random, correct_option_id } = questions[questionIndex]

  ctx.replyWithQuiz(`${ctx.i18n.t('Question')}: 1 ${ctx.i18n.t('from')} ${questions.length}\n${title}`, random, {
    correct_option_id,
    is_anonymous: false
  })
  ctx.reply(`${ctx.i18n.t('course')}: www.jscamp.app`)
})

jsRoom.on('poll_answer', ctx => {
  const questionIndex = ++ctx.session.questionIndex
  const result = questions[questionIndex - 1].correct_option_id === ctx.pollAnswer.option_ids[0]
  result && ++ctx.session.counter

  if (questionIndex !== questions.length) {
    const { title, random, correct_option_id } = questions[questionIndex]
    ctx.replyWithQuiz(
      `${ctx.i18n.t('Question')}: ${questionIndex + 1} ${ctx.i18n.t('from')} ${
        questions.length
      }\n${title}\n${ctx.i18n.t('score')} ${ctx.session.counter}`,
      random,
      {
        correct_option_id,
        is_anonymous: false
      }
    )
  } else {
    ctx.reply(
      `${ctx.i18n.t('score')} ${ctx.session.counter}. ${ctx.i18n.t('level')}: ${level(
        ctx.session.counter
      )} ${getSticker(ctx.session.counter)}`
    )
    ctx.reply(`${ctx.i18n.t('course')}: www.jscamp.app`)
  }

  ctx.scene.current.leave()
})

const stage = new Stage([jsRoom])
bot.context.questions = questions

bot.use(session())

bot.use((ctx, next) => next())
bot.use(stage.middleware())
bot.command('start', ctx => ctx.scene.enter('js-room'))
bot.launch()


국제화(i18n)



Bot Now은 영어와 러시아어로 소통하지만 모국어로 풀 리퀘스트를 보낼 수 있습니다.



무엇 향후 계획?



다음으로 TypeScript, React Native, AWS Amplify에 대한 테스트를 구현할 계획이므로 계속 지켜봐 주시기 바랍니다.

봇은 무료이지만 Patreon을 통해 스타트업을 지원할 수 있습니다.

좋은 웹페이지 즐겨찾기