telegram-ru / ru-bot

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Выпилить i18n

sergeysova opened this issue · comments

commented

Заменить i18n более легким вариантом.

В нашем боте не нужна интернационализация, но было бы неплохо хранить все тексты в одном месте.

Можно хранить тексты в таком виде

module.exports = {
  common: {
    greetings: ({ user }) => `Привет, ${user.first_name}!`,
    help: () => `В нашем чате есть правила.
Найти их можно по ссылке github.com/telegram-ru/rules`,
  },
  action: {
    ban: () => `Забанить`,
    span: () => `СПАМ`,
  },
}

А использовать проще простого

const text = require('../texts')


ctx.reply(text.common.greetings({ user: ctx.from }))

Можно ввести функцию random() для вывода случайного сообщения из списка

function random(variants) {
  const count = variants.length
  
  return (object) => variants[Math.floor(Math.random() * count)](object)
}

// Usage

module.exports = {
  ban: {
    adminBanAdmin: random([
      ({ active, passive }) => `Хэй, ${fullName(passive)}! Тебя тут ${fullName(active)} забанить хочет!`,
      ({ active }) => `А вот хер, ${active.first_name}, так дела не делаются!`,
      () => `Но но но!`,
    ])
  },
}


function fullName({ id, first_name, last_name, username }) {
  return [
    first_name,
    last_name,
    username && `(${username})`,
  ]
  .filter(e => !!e)
  .join(' ')
}
commented

Random function vs random answer:
— 👍 for random function
— 👎 for random answer

Random function

module.exports = {
  common: {
    answer: random([
      ({ data }) => `Text 1 ${data}`,
      () => `Text 2`,
    ]),
  },
}

Random answer

module.exports = {
  common: {
    answer: ({ data }) => random([
      `Text 1 ${data}`,
      `Text 2`,
    ]),
  },
}