From 7d1c8c63a9aace6e681316f9951c2132df83219b Mon Sep 17 00:00:00 2001 From: Alexander Popov Date: Sat, 3 Jan 2026 01:06:15 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=20=D1=80=D0=B0=D0=B7=D0=B4=D0=B5=D0=BB=20=D0=BF=D1=80?= =?UTF-8?q?=D0=BE=D0=B5=D0=BA=D1=82=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .editorconfig | 2 +- bun.lock | 3 +++ index.ts | 2 +- package.json | 1 + src/commands.ts | 22 ++++++++++---------- src/menu.ts | 53 ++++++++++++++++++++++++++++++----------------- src/projects.json | 5 +++++ 7 files changed, 56 insertions(+), 32 deletions(-) create mode 100644 src/projects.json diff --git a/.editorconfig b/.editorconfig index e61f1e2..2c03901 100644 --- a/.editorconfig +++ b/.editorconfig @@ -11,7 +11,7 @@ trim_trailing_whitespace = true insert_final_newline = true # JavaScript -[*.js] +[{*.js,*.ts}] indent_style = space indent_size = 2 diff --git a/bun.lock b/bun.lock index 2137c4b..7eaa33f 100644 --- a/bun.lock +++ b/bun.lock @@ -6,6 +6,7 @@ "name": "me-tg-bot", "dependencies": { "@grammyjs/menu": "^1.3.1", + "@grammyjs/parse-mode": "^2.2.0", "grammy": "^1.39.2", }, "devDependencies": { @@ -20,6 +21,8 @@ "packages": { "@grammyjs/menu": ["@grammyjs/menu@1.3.1", "", { "peerDependencies": { "grammy": "^1.31.0" } }, "sha512-HJslY/n76T1Ar5qDDhNtjLs+PpcrlB9aGsXu3CJHLt147DC3K3lpiRvRW/Xh9/x9hqYVw7KKbnvsQXVgzoU81Q=="], + "@grammyjs/parse-mode": ["@grammyjs/parse-mode@2.2.0", "", { "peerDependencies": { "grammy": "^1.36.1" } }, "sha512-sI5xjXYn1ihEEf1bJx4ew2KPsX1O3jsd2V/MpA1CX2tCYlxquidr7agk4IOR5bGEK38pyNVxVBdyCiy/eMxEfQ=="], + "@grammyjs/types": ["@grammyjs/types@3.23.0", "", {}, "sha512-D3jQ4UWERPsyR3op/YFudMMIPNTU47vy7L51uO9/73tMELmjO/+LX5N36/Y0CG5IQfIsz43MxiHI5rgsK0/k+g=="], "@types/bun": ["@types/bun@1.3.5", "", { "dependencies": { "bun-types": "1.3.5" } }, "sha512-RnygCqNrd3srIPEWBd5LFeUYG7plCoH2Yw9WaZGyNmdTEei+gWaHqydbaIRkIkcbXwhBT94q78QljxN0Sk838w=="], diff --git a/index.ts b/index.ts index 4243776..ece604d 100644 --- a/index.ts +++ b/index.ts @@ -9,7 +9,7 @@ bot.use(menu); bot.command('start', cmdStart); bot.command('help', cmdHelp); bot.command('menu', async (ctx) => { - await ctx.reply('🛣️ Навигация', { reply_markup: menu }); + await ctx.reply('🛣️ Навигация', { reply_markup: menu }); }); bot.on('message', (ctx) => ctx.reply('Got another message!')); diff --git a/package.json b/package.json index 06f8be8..ec54ddd 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,7 @@ }, "dependencies": { "@grammyjs/menu": "^1.3.1", + "@grammyjs/parse-mode": "^2.2.0", "grammy": "^1.39.2" } } diff --git a/src/commands.ts b/src/commands.ts index 138f6d0..58cd87c 100644 --- a/src/commands.ts +++ b/src/commands.ts @@ -1,18 +1,18 @@ function cmdStart(ctx) { - ctx.reply( - [ - '🪪 Александр', - '🗿 Шеф в любой сфере IT\\.', - '💪🏻 Программирование, разработка игр, механика, электрика, электроника, 3D печать и лазерная резка\\.', - '💼 Сайт: https://iiiypuk\\.me/', - '\n🧢 Вызови /menu для получения большей информации', - ].join('\n'), - { parse_mode: 'MarkdownV2' }, - ); + ctx.reply( + [ + '🪪 Александр', + '🗿 Шеф в любой сфере IT\\.', + '💪🏻 Программирование, разработка игр, механика, электрика, электроника, 3D печать и лазерная резка\\.', + '💼 Сайт: https://iiiypuk\\.me/', + '\n🧢 Вызови /menu для получения большей информации', + ].join('\n'), + { parse_mode: 'MarkdownV2' }, + ); } const cmdHelp = (ctx) => { - ctx.reply('👔 Справка отсуствует'); + ctx.reply('👔 Справка отсуствует'); }; export { cmdStart, cmdHelp }; diff --git a/src/menu.ts b/src/menu.ts index 7e75f69..5b7b4fd 100644 --- a/src/menu.ts +++ b/src/menu.ts @@ -1,26 +1,41 @@ import { Menu } from '@grammyjs/menu'; +import { fmt } from '@grammyjs/parse-mode'; + +import projects from './projects.json'; const menuSkills = (ctx) => { - ctx.reply( - [ - '💪🏻 \*Скиллы*\n', - '⌨️ *Языки программирования:*', - '`C/C++`, `Python`, `JavaScript`, `TypeScript`, `Crystal`', - '\n⛑️ \*Администрирование:\*', - '`Arch`, `Ubuntu`, `nginx`', - '\n>Раздел в процессе написания\\.\\.\\.', - '\n🕙 Обновлено: 2 Jan 2026', - ].join('\n'), - { parse_mode: 'MarkdownV2' }, - ); + ctx.reply( + [ + '💪🏻 \*Скиллы*\n', + '⌨️ *Языки программирования:*', + '`C/C++`, `Python`, `JavaScript`, `TypeScript`, `Crystal`', + '\n⛑️ \*Администрирование:\*', + '`Arch`, `Ubuntu`, `nginx`', + '\n> Раздел в процессе написания\\.\\.\\.', + '\n🕙 Обновлено: 2 Jan 2026', + ].join('\n'), + { parse_mode: 'MarkdownV2' }, + ); }; -const menu = new Menu('main') - .text('💪🏻 Скиллы', menuSkills) - .row() - .text('👔 Не нажимай', (ctx) => { - ctx.reply('Я же просил не нажимать :)'); - }) - .row(); +const menuProjects = (ctx) => { + let projectsString: string = ''; + + projects.forEach((p) => { + projectsString += fmt`\\- ${p.icon} [${p.name}](${p.url})\n`; + }); + + ctx.reply( + ['👔 \*Проекты*\n', projectsString, '> Раздел в процессе написания\\.\\.\\.', '\n🕙 Обновлено: 2 Jan 2026'].join('\n'), + { + parse_mode: 'MarkdownV2', + link_preview_options: { + is_disabled: true, + }, + }, + ); +}; + +const menu = new Menu('main').text('💪🏻 Скиллы', menuSkills).row().text('👔 Проекты', menuProjects).row(); export { menu }; diff --git a/src/projects.json b/src/projects.json new file mode 100644 index 0000000..5afcb98 --- /dev/null +++ b/src/projects.json @@ -0,0 +1,5 @@ +[ + { "icon": "🍽️", "name": "Git инстанс", "url": "https://git.a2s.su" }, + { "icon": "🔤", "name": "е с точками", "url": "https://ё.a2s.su" }, + { "icon": "🌿", "name": "Minecraft [Java Edition] Batch Launcher", "url": "https://git.a2s.su/iiiypuk/minecraft-launcher" } +]