commit 2d9b696ef59daa3400fd0d7e1a2229994dea59d7 Author: Alexander Popov Date: Fri Jan 2 23:28:17 2026 +0300 init 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 + } +}