add exampleNames
Deploy app frontend / app frontend (push) Successful in 1m52s
Deploy service couchdb / service couchdb (push) Successful in 27s
Deploy db-migrations / db-migrations (push) Successful in 1m23s
Deploy service message-delivery-method-web-push / service message-delivery-method-web-push (push) Successful in 1m18s
Deploy service tg-bot / service tg-bot (push) Successful in 1m16s
Deploy app frontend / app frontend (push) Successful in 1m52s
Deploy service couchdb / service couchdb (push) Successful in 27s
Deploy db-migrations / db-migrations (push) Successful in 1m23s
Deploy service message-delivery-method-web-push / service message-delivery-method-web-push (push) Successful in 1m18s
Deploy service tg-bot / service tg-bot (push) Successful in 1m16s
This commit is contained in:
@@ -23,6 +23,7 @@ jobs:
|
|||||||
READ_BASE_URL: ${{ vars.READ_BASE_URL }}
|
READ_BASE_URL: ${{ vars.READ_BASE_URL }}
|
||||||
APP_BASE_URL: ${{ vars.APP_BASE_URL }}
|
APP_BASE_URL: ${{ vars.APP_BASE_URL }}
|
||||||
HEARTBEAT_INTERVAL: ${{ vars.HEARTBEAT_INTERVAL }}
|
HEARTBEAT_INTERVAL: ${{ vars.HEARTBEAT_INTERVAL }}
|
||||||
|
BOT_USE_CHANGES_DB_UPDATES: ${{ vars.BOT_USE_CHANGES_DB_UPDATES }}
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
|||||||
@@ -75,6 +75,7 @@ services:
|
|||||||
- HEARTBEAT_INTERVAL=${HEARTBEAT_INTERVAL:-30000}
|
- HEARTBEAT_INTERVAL=${HEARTBEAT_INTERVAL:-30000}
|
||||||
- DEBUG=${TG_BOT_DEBUG:-}
|
- DEBUG=${TG_BOT_DEBUG:-}
|
||||||
- PUBLIC_API_URL=${PUBLIC_API_URL:-}
|
- PUBLIC_API_URL=${PUBLIC_API_URL:-}
|
||||||
|
- BOT_USE_CHANGES_DB_UPDATES=${BOT_USE_CHANGES_DB_UPDATES:-}
|
||||||
depends_on:
|
depends_on:
|
||||||
couchdb:
|
couchdb:
|
||||||
condition: service_healthy
|
condition: service_healthy
|
||||||
|
|||||||
@@ -16,7 +16,6 @@
|
|||||||
"lint:fix": "eslint src --fix",
|
"lint:fix": "eslint src --fix",
|
||||||
"validate": "npm run type-check && npm run lint"
|
"validate": "npm run type-check && npm run lint"
|
||||||
},
|
},
|
||||||
|
|
||||||
"main": "dist/index.js",
|
"main": "dist/index.js",
|
||||||
"types": "dist/index.d.ts",
|
"types": "dist/index.d.ts",
|
||||||
"exports": {
|
"exports": {
|
||||||
|
|||||||
@@ -53,9 +53,34 @@ export async function newQRCodeConversation(
|
|||||||
await placementChoice.answerCallbackQuery({ text: "Объект выбран!" });
|
await placementChoice.answerCallbackQuery({ text: "Объект выбран!" });
|
||||||
|
|
||||||
// 2. Ввод названия QR-кода
|
// 2. Ввод названия QR-кода
|
||||||
|
let exampleName: string;
|
||||||
|
|
||||||
|
switch (typedPlacement) {
|
||||||
|
case "car":
|
||||||
|
exampleName = "Моя машина";
|
||||||
|
break;
|
||||||
|
case "pet":
|
||||||
|
exampleName = "Ошейник Барсика";
|
||||||
|
break;
|
||||||
|
case "door":
|
||||||
|
exampleName = "Входная дверь квартиры";
|
||||||
|
break;
|
||||||
|
case "store":
|
||||||
|
exampleName = "Магазин на углу";
|
||||||
|
break;
|
||||||
|
case "restaurant_table":
|
||||||
|
exampleName = "Столик №12";
|
||||||
|
break;
|
||||||
|
case "other":
|
||||||
|
exampleName = "Что-то другое";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Отправляем сообщение пользователю с примером
|
||||||
await ctx.reply(
|
await ctx.reply(
|
||||||
"Введите название для вашего QR-кода (например: 'Моя машина'):",
|
`Введите название для вашего QR-кода (например: «${exampleName}»):`,
|
||||||
);
|
);
|
||||||
|
|
||||||
const nameMsg = await conversation.waitFor("message:text");
|
const nameMsg = await conversation.waitFor("message:text");
|
||||||
const name = nameMsg.message.text.trim();
|
const name = nameMsg.message.text.trim();
|
||||||
if (name.length < 2) {
|
if (name.length < 2) {
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ export async function selectMultipleActions<T extends readonly Action[]>(
|
|||||||
|
|
||||||
// Отправляем начальное сообщение
|
// Отправляем начальное сообщение
|
||||||
await ctx.reply(
|
await ctx.reply(
|
||||||
"Выберите одно или несколько действий, которые будут доступны при сканировании этого QR-кода. Нажмите 'Готово', когда закончите выбор:",
|
"Выберите одно или несколько действий, которые будут доступны при сканировании этого QR-кода. Нажмите «Готово», когда закончите выбор:",
|
||||||
{
|
{
|
||||||
reply_markup: {
|
reply_markup: {
|
||||||
inline_keyboard: [
|
inline_keyboard: [
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ export const createBot = ({
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Инициализируем бота с нужным типом контекста
|
// Инициализируем бота с нужным типом контекста
|
||||||
const bot = new Bot<MyContext>(env.TELEGRAM_BOT_TOKEN, {
|
const bot = new Bot<MyContext>(env.BOT_TOKEN, {
|
||||||
client: {
|
client: {
|
||||||
baseFetchConfig: {
|
baseFetchConfig: {
|
||||||
signal: abortController.signal,
|
signal: abortController.signal,
|
||||||
|
|||||||
@@ -19,7 +19,9 @@ if (!process.env.HEARTBEAT_INTERVAL) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export const env = {
|
export const env = {
|
||||||
TELEGRAM_BOT_TOKEN: process.env.BOT_TOKEN,
|
BOT_TOKEN: process.env.BOT_TOKEN,
|
||||||
|
BOT_USE_CHANGES_DB_UPDATES:
|
||||||
|
`${process.env.BOT_USE_CHANGES_DB_UPDATES}` === "true",
|
||||||
READ_BASE_URL: process.env.READ_BASE_URL,
|
READ_BASE_URL: process.env.READ_BASE_URL,
|
||||||
APP_BASE_URL: process.env.APP_BASE_URL,
|
APP_BASE_URL: process.env.APP_BASE_URL,
|
||||||
API_URL: process.env.API_URL,
|
API_URL: process.env.API_URL,
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import { createServiceChangesMessagesDb } from "./services/serviceChangesMessage
|
|||||||
import { createServiceChangesTgUpdatesDb } from "./services/serviceChangesTgUpdatesDb";
|
import { createServiceChangesTgUpdatesDb } from "./services/serviceChangesTgUpdatesDb";
|
||||||
import { iterateMessagesChanges } from "./services/iterateMessagesChanges";
|
import { iterateMessagesChanges } from "./services/iterateMessagesChanges";
|
||||||
import { setupWebHook } from "./services/setupWebHook";
|
import { setupWebHook } from "./services/setupWebHook";
|
||||||
|
import { env } from "./config/env";
|
||||||
|
|
||||||
const abortController = new AbortController();
|
const abortController = new AbortController();
|
||||||
|
|
||||||
@@ -13,13 +14,18 @@ const abortController = new AbortController();
|
|||||||
const messagesChanges = await createServiceChangesMessagesDb({
|
const messagesChanges = await createServiceChangesMessagesDb({
|
||||||
abortController,
|
abortController,
|
||||||
});
|
});
|
||||||
const tgUpdatesChanges = await createServiceChangesTgUpdatesDb({
|
|
||||||
|
const tgUpdatesChanges =
|
||||||
|
env.BOT_USE_CHANGES_DB_UPDATES &&
|
||||||
|
(await createServiceChangesTgUpdatesDb({
|
||||||
abortController,
|
abortController,
|
||||||
});
|
}));
|
||||||
|
|
||||||
process.on("SIGINT", async () => {
|
process.on("SIGINT", async () => {
|
||||||
messagesChanges.changesStream.stop();
|
messagesChanges.changesStream.stop();
|
||||||
|
if (tgUpdatesChanges) {
|
||||||
tgUpdatesChanges.changesStream.stop();
|
tgUpdatesChanges.changesStream.stop();
|
||||||
|
}
|
||||||
bot.stop();
|
bot.stop();
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -30,11 +36,13 @@ const abortController = new AbortController();
|
|||||||
await setupWebHook(bot);
|
await setupWebHook(bot);
|
||||||
await setupCommands(bot);
|
await setupCommands(bot);
|
||||||
|
|
||||||
// bot.start();
|
// outgoing messages
|
||||||
console.log("Бот запущен!");
|
|
||||||
|
|
||||||
iterateMessagesChanges({ bot, ...messagesChanges });
|
iterateMessagesChanges({ bot, ...messagesChanges });
|
||||||
|
|
||||||
|
console.log("Бот запущен!");
|
||||||
|
|
||||||
|
// incoming messages
|
||||||
|
if (tgUpdatesChanges) {
|
||||||
for await (const change of tgUpdatesChanges.changesStream) {
|
for await (const change of tgUpdatesChanges.changesStream) {
|
||||||
tgUpdatesChanges.serviceSeqTracker.checkNextSeq(change.seq);
|
tgUpdatesChanges.serviceSeqTracker.checkNextSeq(change.seq);
|
||||||
if (change.doc) {
|
if (change.doc) {
|
||||||
@@ -42,4 +50,7 @@ const abortController = new AbortController();
|
|||||||
}
|
}
|
||||||
await tgUpdatesChanges.serviceSeqTracker.saveSeq(change.seq);
|
await tgUpdatesChanges.serviceSeqTracker.saveSeq(change.seq);
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
await bot.start();
|
||||||
|
}
|
||||||
})();
|
})();
|
||||||
|
|||||||
Reference in New Issue
Block a user