коммит перед публикацией
This commit is contained in:
parent
b8e8264d58
commit
cc8ad52331
7 changed files with 39 additions and 81 deletions
7
docs/todo.md
Normal file
7
docs/todo.md
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
## Задачи
|
||||||
|
|
||||||
|
Далле составлен список задач для разработчиков бота:
|
||||||
|
|
||||||
|
- починить команду `/employ` — надо что бы по аргументам она приписывала вакансию пользователю, а она просто сообщает о доступных вакансиях;
|
||||||
|
- сделать пирамиды из `if … else` красивее;
|
||||||
|
- перенести все реплики в файл replies.json;
|
6
env
6
env
|
@ -2,10 +2,10 @@
|
||||||
# Настройка проекта подробно описана в docs/settings.md.
|
# Настройка проекта подробно описана в docs/settings.md.
|
||||||
|
|
||||||
# Токен Telegram Bot API получаемый от BotFather
|
# Токен Telegram Bot API получаемый от BotFather
|
||||||
BOT_TOKEN=""
|
BOT_TOKEN="5715517585:AAFgAdmzsDokDcCEfy6hO_cI7nrsVeMTx8M"
|
||||||
|
|
||||||
# Путь к базе данных SQLite бота на хосте
|
# Путь к базе данных SQLite бота на хосте
|
||||||
BOT_DB_PATH=""
|
BOT_DB_PATH="/home/zaboal/work/organizations/zazhigin-s_it-studio/databases/telegram-users.sqlite"
|
||||||
|
|
||||||
# Путь к базе данных SQLite организации на хосте
|
# Путь к базе данных SQLite организации на хосте
|
||||||
ORG_DB_PATH=""
|
ORGANIZATION_DB_PATH="/home/zaboal/work/organizations/zazhigin-s_it-studio/databases/local_organizational-structure.sqlite"
|
|
@ -2,13 +2,12 @@
|
||||||
Главный файл исходного кода бота
|
Главный файл исходного кода бота
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
// Подключение зависимостей
|
// Подключение зависимостей
|
||||||
import { Bot } from "grammy";
|
import { Bot } from "grammy";
|
||||||
const bot = new Bot(`${process.env.BOT_TOKEN}`);
|
const bot = new Bot("bot.sqlite");
|
||||||
|
|
||||||
import { Database } from "sqlite3";
|
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 => { // Команда инструктирования
|
bot.command(["start", "help"], ctx => { // Команда инструктирования
|
||||||
ctx.reply(
|
ctx.reply(
|
||||||
"Список команд доступен в сплывающем меню от знака «/» в поле ввода сообщения"
|
"Команды бота доступны в сплывающем меню от знака «`/`» в поле ввода сообщения",
|
||||||
+ "\\. Но если Вы ещё не зарегистрированы в системе, сделайте это в первую очередь по команде "
|
|
||||||
+ "`/register [полное имя], [электропочта]`",
|
|
||||||
{ parse_mode: "MarkdownV2" },
|
{ parse_mode: "MarkdownV2" },
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
@ -51,7 +48,8 @@ bot.command("register", ctx => { // Команда регистрац
|
||||||
if (result == undefined) {
|
if (result == undefined) {
|
||||||
if (ctx.match == "") {
|
if (ctx.match == "") {
|
||||||
ctx.reply(
|
ctx.reply(
|
||||||
"Данная команда требует аргументы, через запятую: `[полное имя]` и `[электро@поч.та]`",
|
"Данная команда требует аргументы, через запятую: полное имя и личную электронную почту"
|
||||||
|
+ "\\. Например, разработчик бота зарегистрировался так: «`/register Зажигин Богдан Алексеевич, za\\.boal@vk\\.com`»",
|
||||||
{ parse_mode: "MarkdownV2" }
|
{ parse_mode: "MarkdownV2" }
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
|
@ -63,16 +61,14 @@ bot.command("register", ctx => { // Команда регистрац
|
||||||
database.run(`INSERT INTO users VALUES ("${select.rowid}", "${ctx.msg.chat.id}")`);
|
database.run(`INSERT INTO users VALUES ("${select.rowid}", "${ctx.msg.chat.id}")`);
|
||||||
} else {
|
} else {
|
||||||
ctx.reply(
|
ctx.reply(
|
||||||
`Регистрация не удалась, SQLite сообщает об ошибке: «\`${error}\`»`
|
`Регистрация не удалась, SQLite сообщает об ошибке: «\`${error}\`»`,
|
||||||
+ "\\. [Богдан](tg://user?id=987595197) может Вам её разъяснить и помочь с решением",
|
|
||||||
{ parse_mode: "MarkdownV2" }
|
{ parse_mode: "MarkdownV2" }
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
ctx.reply(
|
ctx.reply(
|
||||||
`Регистрация не удалась, SQLite сообщает об ошибке: «\`${error}\`»`
|
`Регистрация не удалась, SQLite сообщает об ошибке: «\`${error}\`»`,
|
||||||
+ "\\. [Богдан](tg://user?id=987595197) может Вам её разъяснить и помочь с решением",
|
|
||||||
{ parse_mode: "MarkdownV2" }
|
{ parse_mode: "MarkdownV2" }
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -87,53 +83,16 @@ bot.command("register", ctx => { // Команда регистрац
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
bot.command("employ", ctx => { // Команда отклика на вакансию организации
|
bot.command("sqlite", ctx => { // Команда работы с базами данных
|
||||||
database.get(`SELECT user_per_rowid FROM users WHERE user_id = ${ctx.msg.chat.id}`, (error, result) => {
|
database.get(`${ctx.match}`, (error, result) => {
|
||||||
if (result != undefined) {
|
if (error == null) {
|
||||||
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 {
|
|
||||||
ctx.reply(
|
ctx.reply(
|
||||||
"Невозможно принять какую\\-либо вакансию, не зарегистрировавшись в системе"
|
"`" + ((result == undefined) ? "Ничего не найдено" : JSON.stringify(result)) + "`",
|
||||||
+ "\\. Используйте команду `/register`",
|
|
||||||
{ parse_mode: "MarkdownV2" }
|
|
||||||
);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
bot.command("sqlite", ctx => { // Команда исследования баз данных (для разработчиков)
|
|
||||||
database.get(`${ctx.match}`, (err, row) => {
|
|
||||||
if (err == null) {
|
|
||||||
ctx.reply(
|
|
||||||
"`" + ((row == undefined) ? "Ничего не найдено" : JSON.stringify(row)) + "`",
|
|
||||||
{ parse_mode: "MarkdownV2" }
|
{ parse_mode: "MarkdownV2" }
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
ctx.reply(
|
ctx.reply(
|
||||||
"`" + JSON.stringify(err) + "`",
|
"`" + JSON.stringify(error) + "`",
|
||||||
{ parse_mode: "MarkdownV2" }
|
{ parse_mode: "MarkdownV2" }
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -150,8 +109,8 @@ bot.start({
|
||||||
onStart: bot => {
|
onStart: bot => {
|
||||||
console.log(
|
console.log(
|
||||||
`Бот запущен как «${bot.first_name}»`
|
`Бот запущен как «${bot.first_name}»`
|
||||||
+ ` под именем пользователя @${bot.username}`
|
+ ` c именем пользователя @${bot.username}`
|
||||||
+ ` с идентификатором ${bot.id}.`,
|
+ ` под идентификатором ${bot.id}.`,
|
||||||
(bot.can_join_groups == true) ? "Он может присоединяться к группам," : "Он не может присоединяться к группам,",
|
(bot.can_join_groups == true) ? "Он может присоединяться к группам," : "Он не может присоединяться к группам,",
|
||||||
(bot.can_read_all_group_messages == true) ? "читает сообщения в которых уже есть;" : "не читает сообщения в них;",
|
(bot.can_read_all_group_messages == true) ? "читает сообщения в которых уже есть;" : "не читает сообщения в них;",
|
||||||
(bot.supports_inline_queries == true) ? "поддерживает инлайн-режим." : "не поддерживает инлайн-режим."
|
(bot.supports_inline_queries == true) ? "поддерживает инлайн-режим." : "не поддерживает инлайн-режим."
|
||||||
|
|
|
@ -1,10 +1,6 @@
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"command": "register",
|
"command": "register",
|
||||||
"description": "регистрация в организации"
|
"description": "регистрация"
|
||||||
},
|
|
||||||
{
|
|
||||||
"command": "employ",
|
|
||||||
"description": "собеседование по вакансии"
|
|
||||||
}
|
}
|
||||||
]
|
]
|
|
@ -17,10 +17,6 @@ ADD bot bot
|
||||||
# Объявление переменных окружения
|
# Объявление переменных окружения
|
||||||
ARG BOT_TOKEN
|
ARG BOT_TOKEN
|
||||||
|
|
||||||
# Имена подключаемых баз данных внутри контейнера
|
|
||||||
ENV BOT_DB_PATH="bot_db.sqlite"
|
|
||||||
ENV ORG_DB_PATH="org_db.sqlite"
|
|
||||||
|
|
||||||
|
|
||||||
# Запуск контейнера
|
# Запуск контейнера
|
||||||
CMD npm run start
|
CMD npm run start
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"name": "bot-telegram_zaboal-account",
|
"name": "bot-telegram_zaboal-register",
|
||||||
"version": "alpha",
|
"version": "alpha",
|
||||||
"description": "Бот в Telegram для управления личным кабинетом в Информационно-технологической стартап-студии имени Богдана Зажигина.",
|
"description": "Бот в Telegram для управления личным кабинетом в Информационно-технологической стартап-студии имени Богдана Зажигина.",
|
||||||
"main": "bot/bot.ts",
|
"main": "bot/bot.ts",
|
||||||
|
@ -12,7 +12,7 @@
|
||||||
"sqlite3": "5.1.2"
|
"sqlite3": "5.1.2"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"ts-node": "^10.9.1",
|
"ts-node": "10.9.1",
|
||||||
"typescript": "^4.7.4"
|
"typescript": "4.9.4"
|
||||||
}
|
}
|
||||||
}
|
}
|
20
start.sh
20
start.sh
|
@ -6,17 +6,17 @@ source ./env;
|
||||||
|
|
||||||
echo -e \
|
echo -e \
|
||||||
"Полученные переменные окружения:\n" \
|
"Полученные переменные окружения:\n" \
|
||||||
"\tтокен Telegram Bot API — $BOT_TOKEN,\n" \
|
"токен Telegram Bot API — $BOT_TOKEN,\n" \
|
||||||
"\tпуть к базе данных бота — $BOT_DB_PATH,\n" \
|
"путь к базе данных бота — $BOT_DB_PATH,\n" \
|
||||||
"\tпуть к базе данных организации — $ORG_DB_PATH.\n\n";
|
"путь к базе данных организации — $ORG_DB_PATH.\n\n";
|
||||||
|
|
||||||
|
|
||||||
# Сборка и запуск контейнера Docker
|
# Сборка и запуск контейнера Docker
|
||||||
docker build src \
|
docker build src \
|
||||||
--tag bot-telegram_zaboal-employment:latest;
|
--tag bot-telegram_zaboal-register:latest;
|
||||||
|
|
||||||
docker run -it \
|
docker run -it \
|
||||||
--env BOT_TOKEN=$BOT_TOKEN \
|
--env BOT_TOKEN=$BOT_TOKEN \
|
||||||
--volume $BOT_DB_PATH:/usr/src/app/bot_db.sqlite \
|
--volume $BOT_DB_PATH:/usr/src/app/bot.sqlite \
|
||||||
--volume $ORG_DB_PATH:/usr/src/app/org_db.sqlite \
|
--volume $ORG_DB_PATH:/usr/src/app/organization.sqlite \
|
||||||
bot-telegram_zaboal-employment:latest;
|
bot-telegram_zaboal-register:latest;
|
Loading…
Add table
Reference in a new issue