MIT
Данный бот использует базу вопросов ЧГК, ознакомьтесь с лицензией на использование (вы также можете использовать собственный сервис с аналогичным форматом xml):
https://db.chgk.info/copyright
https, http, url, os, redux, lodash, fs, xml2js, zlib, cryptojs, nodemailer
Настройки конфигурации задаются в файле chgk-tg-bot.conf (по умолчанию, либо аналогичном наименованию скрипта). Файл конфигурации представляет из себя json-объект формата:
{
"chgk-url": "https://db.chgk.info/xml/random/types12/complexity3/876490191/limit100",
"email-host": "email.sergdudko.tk",
"email-port":25,
"email-email":"0000000000@sergdudko.tk",
"email-pswd":"0000000000",
"email-to":"sergei.dudko@farmin.by",
"cert-crt":"/etc/****/cert.pem",
"cert-ca":"/etc/****/ca.pem",
"cert-key":"/etc/****/key.pem",
"wh-port":8443,
"wh-url":"https://iocom.sergdudko.tk",
"bot-key":"68*********************************************************Rlw",
"adm-id":236255988
}, где:
- chgk-url - ссылка на пакет (случайный) в базе вопросов ЧГК, не забудьте после адреса добавить /xml/
- email-host - адрес SMTP-сервера для отправки ошибок
- email-port - порт SMTP-сервера для отправки ошибок
- email-email - имя пользователя для авторизации в SMTP-сервере
- email-pswd - пароль пользователя для авторизации в SMTP-сервере
- email-to - электронная почта куда отправлять ошибки
- cert-crt - путь к ssl-сертификату сервера
- cert-ca - путь к ssl-сертификату центра сертификации
- cert-key - путь к ключу ssl-сертификата сервера
- wh-port - порт веб-хука телеграм 443, 80, 88 или 8443
- wh-url - адрес вашего сервера (такой же как в сертификате)
- bot-key - ключ API полученный от @BotFather
- adm-id - id-администратора (в данной версии уже не используется)
У приложения должны быть права записи на файл chgk-tg-bot.db (по умолчанию, либо аналогичном наименованию скрипта). Это база данных приложения, которая дублирует redux-хранилище и загружается в него при запуске бота. Создается автоматически (можно удалить).
- Бот общается с пользователем напрямую, либо подключается к каналу.
- Если в пользователь/в канале нет сообщений - через полчаса, бот перестает писать туда (диалог становится не активным).
- Бот накапливает в собственную базу 1000 вопросов (по средствам обмена) с базой ЧГК, затем выбирает случайный вопрос и считает его актуальным (удалив из общего стека).
- Раз в 10 секунд и при старте бот проверяет, если стек меньше 1000, бот автоматически доберет вопросы из базы ЧГК. (например, если в ссылке задана выборка в 100, то при 999 вопросах доберет до 1099)
- Для верного ответа на актуальный вопрос бот собирает хэши каждого слова (регистр приводится к единому, знаки пунктуации удаляются), содержимое комментария (то что в скобках) опускается из хэшей.
- Бот мониторит все диалоги во всех активных чатах/группах на факт верных ответов. Для каждого сообщения собираются хэши слов, приведенных к единому регистру, знаки пунктуации удаляются. Если данные хэши входят в 80% хэшей верного ответа - вопрос считается отвеченным.
- Если пользователь ответил верно, во все активные диалоги шлется сообщение, что такой-то пользователь ответил верно и верный ответ такой-то. Вопрос удаляется.
- Если пользователь ответил неверно, но есть совпадения по хэшам, то в диалог с этим пользователем/группой пишется ответ на сообщение пользователя с процентом совпадения.
- Если совпадений нет - бот ничего не пишет (чтобы не мешать обсуждать вопросы в группе).
- Раз в 10 секунд и при старте, бот проверяет что актуальный вопрос существует, если нет - выбирает его и удаляет из общего стека.
- Если актуальный вопрос не отвечен за 10 минут, бот сбрасывает его, разослав в активные диалоги ответ.
