From cc8ad52331e1df7068202e864fd8ca77fc0f7057 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=97=D0=B0=D0=B6=D0=B8=D0=B3=D0=B8=D0=BD=20=D0=91=D0=BE?= =?UTF-8?q?=D0=B3=D0=B4=D0=B0=D0=BD=20=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5?= =?UTF-8?q?=D0=B5=D0=B2=D0=B8=D1=87?= Date: Sat, 17 Dec 2022 20:23:27 +0300 Subject: [PATCH] =?UTF-8?q?=D0=BA=D0=BE=D0=BC=D0=BC=D0=B8=D1=82=20=D0=BF?= =?UTF-8?q?=D0=B5=D1=80=D0=B5=D0=B4=20=D0=BF=D1=83=D0=B1=D0=BB=D0=B8=D0=BA?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D0=B5=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/todo.md | 7 ++++ env | 6 +-- src/bot/bot.ts | 71 +++++++--------------------------- src/bot/settings/commands.json | 6 +-- src/dockerfile | 4 -- src/package.json | 6 +-- start.sh | 20 +++++----- 7 files changed, 39 insertions(+), 81 deletions(-) create mode 100644 docs/todo.md diff --git a/docs/todo.md b/docs/todo.md new file mode 100644 index 0000000..7aa7333 --- /dev/null +++ b/docs/todo.md @@ -0,0 +1,7 @@ +## Задачи + +Далле составлен список задач для разработчиков бота: + +- починить команду `/employ` — надо что бы по аргументам она приписывала вакансию пользователю, а она просто сообщает о доступных вакансиях; +- сделать пирамиды из `if … else` красивее; +- перенести все реплики в файл replies.json; \ No newline at end of file diff --git a/env b/env index bfad64d..63b1ae2 100644 --- a/env +++ b/env @@ -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="" \ No newline at end of file +ORGANIZATION_DB_PATH="/home/zaboal/work/organizations/zazhigin-s_it-studio/databases/local_organizational-structure.sqlite" \ No newline at end of file diff --git a/src/bot/bot.ts b/src/bot/bot.ts index cca79d2..f415f68 100644 --- a/src/bot/bot.ts +++ b/src/bot/bot.ts @@ -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) ? "поддерживает инлайн-режим." : "не поддерживает инлайн-режим." diff --git a/src/bot/settings/commands.json b/src/bot/settings/commands.json index 4ca96ae..240bf4a 100644 --- a/src/bot/settings/commands.json +++ b/src/bot/settings/commands.json @@ -1,10 +1,6 @@ [ { "command": "register", - "description": "регистрация в организации" - }, - { - "command": "employ", - "description": "собеседование по вакансии" + "description": "регистрация" } ] \ No newline at end of file diff --git a/src/dockerfile b/src/dockerfile index feb9622..d0f81c2 100644 --- a/src/dockerfile +++ b/src/dockerfile @@ -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 \ No newline at end of file diff --git a/src/package.json b/src/package.json index ff15b3d..cdd6d09 100644 --- a/src/package.json +++ b/src/package.json @@ -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" } } \ No newline at end of file diff --git a/start.sh b/start.sh index c1c246e..4fe005c 100644 --- a/start.sh +++ b/start.sh @@ -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; \ No newline at end of file +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; \ No newline at end of file