{"id":15962906,"url":"https://github.com/ejnshtein/template-bot","last_synced_at":"2026-04-11T17:44:26.662Z","repository":{"id":37921947,"uuid":"506346503","full_name":"ejnshtein/template-bot","owner":"ejnshtein","description":"Telegram Template Bot","archived":false,"fork":false,"pushed_at":"2022-06-22T17:36:26.000Z","size":78,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-30T07:42:57.484Z","etag":null,"topics":["docker","docker-compose","eslint","nodejs","nodemon","prettier","telegram-bot","typescipt","vscode"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ejnshtein.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-06-22T17:36:12.000Z","updated_at":"2023-05-11T14:57:33.000Z","dependencies_parsed_at":"2022-08-24T16:43:32.242Z","dependency_job_id":null,"html_url":"https://github.com/ejnshtein/template-bot","commit_stats":null,"previous_names":[],"tags_count":0,"template":true,"template_full_name":null,"purl":"pkg:github/ejnshtein/template-bot","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ejnshtein%2Ftemplate-bot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ejnshtein%2Ftemplate-bot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ejnshtein%2Ftemplate-bot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ejnshtein%2Ftemplate-bot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ejnshtein","download_url":"https://codeload.github.com/ejnshtein/template-bot/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ejnshtein%2Ftemplate-bot/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":275358840,"owners_count":25450443,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-16T02:00:10.229Z","response_time":65,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docker","docker-compose","eslint","nodejs","nodemon","prettier","telegram-bot","typescipt","vscode"],"created_at":"2024-10-07T16:21:31.788Z","updated_at":"2025-09-16T03:47:45.693Z","avatar_url":"https://github.com/ejnshtein.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ejnshtein bot template\n\n## Technology stack\n\n- [Grammy](https://grammy.dev/)\n- [Typescript](https://www.typescriptlang.org/)\n- [Docker](https://www.docker.com/)\n\n\n## Features\n\n- Hot-reload using [Nodemon](https://github.com/remy/nodemon).\n- Debugging using VSCode. (Press F5 to connect debugger and have fun!)\n- Code linting with ESLint. (Enabled rules from [Standard](https://standardjs.com/), [Typescript-ESLint](https://github.com/typescript-eslint/typescript-eslint), [Prettier](https://prettier.io/) and [ESLint](https://eslint.org/) itself)\n- Code formatting with [Prettier](https://prettier.io/).\n- Format-on-save enabled by default. (Formats ESLint)\n- Aliases OOTB with Typescript and [module-alias](https://www.npmjs.com/package/module-alias).\n\n## Usage\n\nI recommend setting up [aliasrc](https://github.com/ejnshtein/aliasrc) in your terminal to use project-wide aliases defined in [aliasrc](./.aliasrc).\n\n### Commands\n\n#### Bootstrap the project\n\n```bash\nup\n```\n\nThis will run Docker Compose with configuration from `docker-compose.yml` and `docker-composer.core.yml`.\n\n`docker-compose.yml` contains general or \"base\" compose configuration, `docker-compose.core.yml` contains development configuration, additional volume links, port forwarding for debugger, development environmental variables and replacing production command with command that will execute nodemon with its configuration to run app with hot-reload and debugger.\n\n#### Stop the project\n\n```bash\ndown\n```\n\nThis will shut down the project.\n\n#### Restart the project\n\n```bash\nrestart\n```\n\nThis will restart the project.\n\n#### See logs\n\n```bash\nlogs\n```\n\nThis will connect you to application logs.\n\n\n#### Go inside container\n\n```bash\ninapp\n```\n\n#### Connect to the process with VSCode debugger\n\nJust open VSCode and press F5.\n\n#### Deploy in production\n\nOn production server you will likely won't have aliasrc, so use the following command:\n\n```bash\ndocker-compose -f docker-compose.yml up --build --force-recreate -d\n```\n\nThis will build new image, restart the project and run in detached mode.\n\n\n### CI/CD\n\nSimple CI/CD can be setup using Github Actions.\n\nThe following example will use SSH connection in worker to connect to your server and run some deploy commands.\n\nCreate `./.github/workflows/deploy.yml` and put the following content inside it.\n\n```yml\nname: Deploy\n\non:\n  push:\n    branches:\n      - master\n\njobs:\n  deploy:\n    runs-on: ubuntu-latest\n    steps:\n    - name: Checkout\n      uses: actions/checkout@v2.3.2\n    - name: executing remote ssh commands using ssh key\n      uses: appleboy/ssh-action@master\n      with:\n        host: ${{ secrets.HOST }}\n        username: ${{ secrets.USERNAME }}\n        key: ${{ secrets.KEY }}\n        port: ${{ secrets.PORT }}\n        passphrase: ${{ secrets.PASSPHRASE }}\n        script: |\n          cd bots/template-bot\n          git pull\n          sudo docker-compose -f docker-compose.yml up --build --force-recreate -d\n\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fejnshtein%2Ftemplate-bot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fejnshtein%2Ftemplate-bot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fejnshtein%2Ftemplate-bot/lists"}