From 2d9b696ef59daa3400fd0d7e1a2229994dea59d7 Mon Sep 17 00:00:00 2001 From: Alexander Popov Date: Fri, 2 Jan 2026 23:28:17 +0300 Subject: [PATCH] init --- .editorconfig | 28 ++++++++++++++++++++++++++ .gitignore | 5 +++++ .nvmrc | 1 + .prettierignore | 4 ++++ .prettierrc.json | 10 ++++++++++ README.md | 15 ++++++++++++++ bun.lock | 52 ++++++++++++++++++++++++++++++++++++++++++++++++ env.example | 1 + index.ts | 11 ++++++++++ package.json | 22 ++++++++++++++++++++ src/commands.ts | 17 ++++++++++++++++ tsconfig.json | 29 +++++++++++++++++++++++++++ 12 files changed, 195 insertions(+) create mode 100644 .editorconfig create mode 100644 .gitignore create mode 100644 .nvmrc create mode 100644 .prettierignore create mode 100644 .prettierrc.json create mode 100644 README.md create mode 100644 bun.lock create mode 100644 env.example create mode 100644 index.ts create mode 100644 package.json create mode 100644 src/commands.ts create mode 100644 tsconfig.json diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..e61f1e2 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,28 @@ +# EditorConfig is awesome: https://EditorConfig.org +root = true + +# for all files +[*] +indent_style = space +indent_size = 4 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +# JavaScript +[*.js] +indent_style = space +indent_size = 2 + +[*.json] +indent_style = tab +indent_size = 4 + +[{package.json,tsconfig.json}] +indent_style = space +indent_size = 2 + +# Markdown +[*.md] +trim_trailing_whitespace = false diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..88cbdc2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +# Output +emilecok_bot-* + +# dotenv environment variable files +.env diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 0000000..cd158b7 --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +24.11 \ No newline at end of file diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..85bdccd --- /dev/null +++ b/.prettierignore @@ -0,0 +1,4 @@ +*.md +package.json +package-lock.json +tsconfig.json diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 0000000..681b10d --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1,10 @@ +{ + "printWidth": 132, + "bracketSpacing": true, + "bracketSameLine": true, + "semi": true, + "singleQuote": true, + "arrowParens": "always", + "htmlWhitespaceSensitivity": "strict", + "endOfLine": "lf" +} diff --git a/README.md b/README.md new file mode 100644 index 0000000..c6a0a47 --- /dev/null +++ b/README.md @@ -0,0 +1,15 @@ +# me-tg-bot + +To install dependencies: + +```bash +bun install +``` + +To run: + +```bash +bun run index.ts +``` + +This project was created using `bun init` in bun v1.3.4. [Bun](https://bun.com) is a fast all-in-one JavaScript runtime. diff --git a/bun.lock b/bun.lock new file mode 100644 index 0000000..05c26f1 --- /dev/null +++ b/bun.lock @@ -0,0 +1,52 @@ +{ + "lockfileVersion": 1, + "configVersion": 1, + "workspaces": { + "": { + "name": "me-tg-bot", + "dependencies": { + "grammy": "^1.39.2", + }, + "devDependencies": { + "@types/bun": "latest", + "prettier": "^3.7.4", + }, + "peerDependencies": { + "typescript": "^5", + }, + }, + }, + "packages": { + "@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=="], + + "@types/node": ["@types/node@25.0.3", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-W609buLVRVmeW693xKfzHeIV6nJGGz98uCPfeXI1ELMLXVeKYZ9m15fAMSaUPBHYLGFsVRcMmSCksQOrZV9BYA=="], + + "abort-controller": ["abort-controller@3.0.0", "", { "dependencies": { "event-target-shim": "^5.0.0" } }, "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg=="], + + "bun-types": ["bun-types@1.3.5", "", { "dependencies": { "@types/node": "*" } }, "sha512-inmAYe2PFLs0SUbFOWSVD24sg1jFlMPxOjOSSCYqUgn4Hsc3rDc7dFvfVYjFPNHtov6kgUeulV4SxbuIV/stPw=="], + + "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], + + "event-target-shim": ["event-target-shim@5.0.1", "", {}, "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ=="], + + "grammy": ["grammy@1.39.2", "", { "dependencies": { "@grammyjs/types": "3.23.0", "abort-controller": "^3.0.0", "debug": "^4.4.3", "node-fetch": "^2.7.0" } }, "sha512-7mLdNsNI2HBN1Gjombx7p3/Cjfgw/kErR/Qv3pDRw2qO/dYEdK8B9G9rpdZayNID+3qFQVTXNqxcGpG38mC2TQ=="], + + "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + + "node-fetch": ["node-fetch@2.7.0", "", { "dependencies": { "whatwg-url": "^5.0.0" }, "peerDependencies": { "encoding": "^0.1.0" }, "optionalPeers": ["encoding"] }, "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A=="], + + "prettier": ["prettier@3.7.4", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA=="], + + "tr46": ["tr46@0.0.3", "", {}, "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="], + + "typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + + "undici-types": ["undici-types@7.16.0", "", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="], + + "webidl-conversions": ["webidl-conversions@3.0.1", "", {}, "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="], + + "whatwg-url": ["whatwg-url@5.0.0", "", { "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw=="], + } +} diff --git a/env.example b/env.example new file mode 100644 index 0000000..f656e0f --- /dev/null +++ b/env.example @@ -0,0 +1 @@ +TOKEN= diff --git a/index.ts b/index.ts new file mode 100644 index 0000000..90530de --- /dev/null +++ b/index.ts @@ -0,0 +1,11 @@ +import { Bot } from 'grammy'; + +import { cmdStart, cmdHelp } from './src/commands'; + +const bot = new Bot(process.env.TOKEN); + +bot.command('start', cmdStart); +bot.command('help', cmdHelp); +bot.on('message', (ctx) => ctx.reply('Got another message!')); + +bot.start(); diff --git a/package.json b/package.json new file mode 100644 index 0000000..dc750e6 --- /dev/null +++ b/package.json @@ -0,0 +1,22 @@ +{ + "name": "emilecok_bot", + "version": "1.0.0", + "module": "index.ts", + "type": "module", + "private": true, + "scripts": { + "dev": "bun run index.ts", + "build": "bun build ./index.ts --compile --outfile $npm_package_name-$npm_package_version", + "format": "prettier -w ." + }, + "devDependencies": { + "@types/bun": "latest", + "prettier": "^3.7.4" + }, + "peerDependencies": { + "typescript": "^5" + }, + "dependencies": { + "grammy": "^1.39.2" + } +} diff --git a/src/commands.ts b/src/commands.ts new file mode 100644 index 0000000..49132cf --- /dev/null +++ b/src/commands.ts @@ -0,0 +1,17 @@ +function cmdStart(ctx) { + ctx.reply( + [ + '🪪 Александр.', + '🗿 Шеф в любой сфере IT.', + '💪🏻 Программирование, разработка игр, механика, электрика, электроника, 3D печать и лазерная резка.', + '💼 Сайт: https://iiiypuk.me/', + ].join('\n'), + { parseMode: 'MarkdownV2' }, + ); +} + +const cmdHelp = (ctx) => { + ctx.reply('👔 Справка отсуствует'); +}; + +export { cmdStart, cmdHelp }; diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..bfa0fea --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,29 @@ +{ + "compilerOptions": { + // Environment setup & latest features + "lib": ["ESNext"], + "target": "ESNext", + "module": "Preserve", + "moduleDetection": "force", + "jsx": "react-jsx", + "allowJs": true, + + // Bundler mode + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "noEmit": true, + + // Best practices + "strict": true, + "skipLibCheck": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedIndexedAccess": true, + "noImplicitOverride": true, + + // Some stricter flags (disabled by default) + "noUnusedLocals": false, + "noUnusedParameters": false, + "noPropertyAccessFromIndexSignature": false + } +}