коммит перед публикацией

This commit is contained in:
bogdan zažigin 2022-12-17 20:23:27 +03:00
parent b8e8264d58
commit cc8ad52331
7 changed files with 39 additions and 81 deletions

7
docs/todo.md Normal file
View file

@ -0,0 +1,7 @@
## Задачи
Далле составлен список задач для разработчиков бота:
- починить команду `/employ` — надо что бы по аргументам она приписывала вакансию пользователю, а она просто сообщает о доступных вакансиях;
- сделать пирамиды из `if … else` красивее;
- перенести все реплики в файл replies.json;

6
env
View file

@ -2,10 +2,10 @@
# Настройка проекта подробно описана в docs/settings.md.
# Токен Telegram Bot API получаемый от BotFather
BOT_TOKEN=""
BOT_TOKEN="5715517585:AAFgAdmzsDokDcCEfy6hO_cI7nrsVeMTx8M"
# Путь к базе данных SQLite бота на хосте
BOT_DB_PATH=""
BOT_DB_PATH="/home/zaboal/work/organizations/zazhigin-s_it-studio/databases/telegram-users.sqlite"
# Путь к базе данных SQLite организации на хосте
ORG_DB_PATH=""
ORGANIZATION_DB_PATH="/home/zaboal/work/organizations/zazhigin-s_it-studio/databases/local_organizational-structure.sqlite"

View file

@ -2,13 +2,12 @@
Главный файл исходного кода бота
*/
// Подключение зависимостей
import { Bot } from "grammy";
const bot = new Bot(`${process.env.BOT_TOKEN}`);
const bot = new Bot("bot.sqlite");
import { Database } from "sqlite3";
const database = new Database(`${process.env.BOT_DB_PATH}`);
const database = new Database("bot.sqlite");
@ -27,16 +26,14 @@ bot.api.setMyDefaultAdministratorRights({rights,
// Подключение базы данных организации в базу данных бота
database.run(`ATTACH DATABASE "/usr/src/app/${process.env.ORG_DB_PATH}" AS org`);
database.run(`ATTACH DATABASE "/usr/src/app/organization.sqlite" AS organization`);
// Обработка сообщений боту, в данном случае только команд
bot.command(["start", "help"], ctx => { // Команда инструктирования
ctx.reply(
"Список команд доступен в сплывающем меню от знака «/» в поле ввода сообщения"
+ "\\. Но если Вы ещё не зарегистрированы в системе, сделайте это в первую очередь по команде "
+ "`/register [полное имя], [электропочта]`",
"Команды бота доступны в сплывающем меню от знака «`/`» в поле ввода сообщения",
{ parse_mode: "MarkdownV2" },
);
});
@ -51,7 +48,8 @@ bot.command("register", ctx => { // Команда регистрац
if (result == undefined) {
if (ctx.match == "") {
ctx.reply(
"Данная команда требует аргументы, через запятую: `[полное имя]` и `[электро@поч.та]`",
"Данная команда требует аргументы, через запятую: полное имя и личную электронную почту"
+ "\\. Например, разработчик бота зарегистрировался так: «`/register Зажигин Богдан Алексеевич, za\\.boal@vk\\.com`»",
{ parse_mode: "MarkdownV2" }
);
} else {
@ -63,16 +61,14 @@ bot.command("register", ctx => { // Команда регистрац
database.run(`INSERT INTO users VALUES ("${select.rowid}", "${ctx.msg.chat.id}")`);
} else {
ctx.reply(
`Регистрация не удалась, SQLite сообщает об ошибке: «\`${error}\`»`
+ "\\. [Богдан](tg://user?id=987595197) может Вам её разъяснить и помочь с решением",
`Регистрация не удалась, SQLite сообщает об ошибке: «\`${error}\`»`,
{ parse_mode: "MarkdownV2" }
);
}
});
} else {
ctx.reply(
`Регистрация не удалась, SQLite сообщает об ошибке: «\`${error}\`»`
+ "\\. [Богдан](tg://user?id=987595197) может Вам её разъяснить и помочь с решением",
`Регистрация не удалась, SQLite сообщает об ошибке: «\`${error}\`»`,
{ parse_mode: "MarkdownV2" }
);
}
@ -87,53 +83,16 @@ bot.command("register", ctx => { // Команда регистрац
});
});
bot.command("employ", ctx => { // Команда отклика на вакансию организации
database.get(`SELECT user_per_rowid FROM users WHERE user_id = ${ctx.msg.chat.id}`, (error, result) => {
if (result != undefined) {
database.run(`UPDATE vacancies SET vac_per_rowid = ${result.user_per_rowid} WHERE vac_per_rowid IS NULL, vacancies.rowid = ${ctx.match}`, (error) => {
if (error == null) {
database.get(`SELECT ch_participation_uri FROM divisions JOIN channels, vacancies WHERE vac_per_rowid = ${result.user_per_rowid}`, (error, result) => {
ctx.reply(
"Успешно приняли вакансию"
+ `\\. Собеседование пройдёт [здесь](${result.ch_participation_uri})`,
{ parse_mode: "MarkdownV2" }
);
})
} else {
database.get("SELECT vacancies.rowid, div_name, vac_okpdtr FROM vacancies JOIN divisions WHERE vac_per_rowid IS NULL", (error, result) => {
console.log(result);
if (result == undefined) {
ctx.reply("Доступных вакансий нету");
} else {
ctx.reply(
"Список вакансий можно видеть на сайте [site\\.zaboal\\.ru/vacancies](https://site\\.zaboal\\.ru/vacancies)"
+ "\\. Что бы откликнуться, используйте эту же команду в формате \`/employ [код вакансии]\`",
{ parse_mode: "MarkdownV2" }
);
}
});
}
});
} else {
bot.command("sqlite", ctx => { // Команда работы с базами данных
database.get(`${ctx.match}`, (error, result) => {
if (error == null) {
ctx.reply(
"Невозможно принять какую\\-либо вакансию, не зарегистрировавшись в системе"
+ "\\. Используйте команду `/register`",
{ parse_mode: "MarkdownV2" }
);
}
});
});
bot.command("sqlite", ctx => { // Команда исследования баз данных (для разработчиков)
database.get(`${ctx.match}`, (err, row) => {
if (err == null) {
ctx.reply(
"`" + ((row == undefined) ? "Ничего не найдено" : JSON.stringify(row)) + "`",
"`" + ((result == undefined) ? "Ничего не найдено" : JSON.stringify(result)) + "`",
{ parse_mode: "MarkdownV2" }
);
} else {
ctx.reply(
"`" + JSON.stringify(err) + "`",
"`" + JSON.stringify(error) + "`",
{ parse_mode: "MarkdownV2" }
);
}
@ -150,8 +109,8 @@ bot.start({
onStart: bot => {
console.log(
`Бот запущен как «${bot.first_name}»`
+ ` под именем пользователя @${bot.username}`
+ ` с идентификатором ${bot.id}.`,
+ ` c именем пользователя @${bot.username}`
+ ` под идентификатором ${bot.id}.`,
(bot.can_join_groups == true) ? "Он может присоединяться к группам," : "Он не может присоединяться к группам,",
(bot.can_read_all_group_messages == true) ? "читает сообщения в которых уже есть;" : "не читает сообщения в них;",
(bot.supports_inline_queries == true) ? "поддерживает инлайн-режим." : "не поддерживает инлайн-режим."

View file

@ -1,10 +1,6 @@
[
{
"command": "register",
"description": "регистрация в организации"
},
{
"command": "employ",
"description": "собеседование по вакансии"
"description": "регистрация"
}
]

View file

@ -17,10 +17,6 @@ ADD bot bot
# Объявление переменных окружения
ARG BOT_TOKEN
# Имена подключаемых баз данных внутри контейнера
ENV BOT_DB_PATH="bot_db.sqlite"
ENV ORG_DB_PATH="org_db.sqlite"
# Запуск контейнера
CMD npm run start

View file

@ -1,5 +1,5 @@
{
"name": "bot-telegram_zaboal-account",
"name": "bot-telegram_zaboal-register",
"version": "alpha",
"description": "Бот в Telegram для управления личным кабинетом в Информационно-технологической стартап-студии имени Богдана Зажигина.",
"main": "bot/bot.ts",
@ -12,7 +12,7 @@
"sqlite3": "5.1.2"
},
"devDependencies": {
"ts-node": "^10.9.1",
"typescript": "^4.7.4"
"ts-node": "10.9.1",
"typescript": "4.9.4"
}
}

View file

@ -6,17 +6,17 @@ source ./env;
echo -e \
"Полученные переменные окружения:\n" \
"\tтокен Telegram Bot API — $BOT_TOKEN,\n" \
"\tпуть к базе данных бота — $BOT_DB_PATH,\n" \
"\tпуть к базе данных организации — $ORG_DB_PATH.\n\n";
"токен Telegram Bot API — $BOT_TOKEN,\n" \
"путь к базе данных бота — $BOT_DB_PATH,\n" \
"путь к базе данных организации — $ORG_DB_PATH.\n\n";
# Сборка и запуск контейнера Docker
docker build src \
--tag bot-telegram_zaboal-employment:latest;
docker build src \
--tag bot-telegram_zaboal-register:latest;
docker run -it \
--env BOT_TOKEN=$BOT_TOKEN \
--volume $BOT_DB_PATH:/usr/src/app/bot_db.sqlite \
--volume $ORG_DB_PATH:/usr/src/app/org_db.sqlite \
bot-telegram_zaboal-employment:latest;
docker run -it \
--env BOT_TOKEN=$BOT_TOKEN \
--volume $BOT_DB_PATH:/usr/src/app/bot.sqlite \
--volume $ORG_DB_PATH:/usr/src/app/organization.sqlite \
bot-telegram_zaboal-register:latest;