{"id":13988949,"url":"https://github.com/jainamoswal/ForceHub","last_synced_at":"2025-07-22T10:30:38.654Z","repository":{"id":42975756,"uuid":"367583190","full_name":"jainamoswal/ForceHub","owner":"jainamoswal","description":"A Telegram bot to force the user to follow GitHub Profile.","archived":false,"fork":false,"pushed_at":"2022-03-25T10:36:11.000Z","size":21,"stargazers_count":17,"open_issues_count":0,"forks_count":12,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-11-29T07:37:07.019Z","etag":null,"topics":["authlib","bot","flask","forcehub","github","j-projects","oauth2","telegram","telethon"],"latest_commit_sha":null,"homepage":"https://github.com/jainamoswal","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jainamoswal.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":"2021-05-15T08:53:03.000Z","updated_at":"2024-04-27T14:09:53.000Z","dependencies_parsed_at":"2022-09-07T19:41:19.270Z","dependency_job_id":null,"html_url":"https://github.com/jainamoswal/ForceHub","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/jainamoswal/ForceHub","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jainamoswal%2FForceHub","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jainamoswal%2FForceHub/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jainamoswal%2FForceHub/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jainamoswal%2FForceHub/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jainamoswal","download_url":"https://codeload.github.com/jainamoswal/ForceHub/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jainamoswal%2FForceHub/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266474839,"owners_count":23934816,"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-07-22T02:00:09.085Z","response_time":66,"last_error":null,"robots_txt_status":null,"robots_txt_updated_at":null,"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":["authlib","bot","flask","forcehub","github","j-projects","oauth2","telegram","telethon"],"created_at":"2024-08-09T13:01:27.005Z","updated_at":"2025-07-22T10:30:38.416Z","avatar_url":"https://github.com/jainamoswal.png","language":"Python","readme":"[![Issues](https://img.shields.io/github/issues/jainamoswal/ForceHub?style=for-the-badge\u0026color=green)](https://github.com/jainamoswal/ForceHub/issues)\n[![Forks](https://img.shields.io/github/forks/jainamoswal/ForceHub?style=for-the-badge\u0026color=green)](https://github.com/jainamoswal/ForceHub/fork)\n[![Stars](https://img.shields.io/github/stars/jainamoswal/ForceHub?style=for-the-badge\u0026color=green)](https://github.com/jainamoswal/ForceHub)\n[![LICENSE](https://img.shields.io/github/license/jainamoswal/ForceHub?color=green\u0026style=for-the-badge)](https://github.com/jainamoswal/ForceHub)\n[![Size](https://img.shields.io/github/repo-size/jainamoswal/ForceHub?style=for-the-badge\u0026color=green)](https://github.com/jainamoswal/ForceHub)\n[![Contributors](https://img.shields.io/github/contributors/jainamoswal/ForceHub?style=for-the-badge\u0026color=green)](https://github.com/jainamoswal/ForceHub)\n\n---\n## Support \n- [![Channel](https://img.shields.io/badge/Telegram-Channel-green?style=for-the-badge\u0026logo=telegram)](https://t.me/J_projects)\n- [![Support](https://img.shields.io/badge/Telegram-Group-green?style=for-the-badge\u0026logo=telegram)](https://t.me/J_projects_chat)\n\n\n\n\n# ForceHub\n\n\nA Telegram bot, to force a user to follow your [GitHub](https://www.github.com/jainamoswal) account before chatting.\n\nThis bot will mute the user if not followed. It works with [Telegram](https:///www.telegram.org) [Auth](https://core.telegram.org/widgets/login) and [GitHub](https:///www.github.com) [oAuth](https://docs.github.com/en/developers/apps/authorizing-oauth-apps).\n\n---\n## Steps :~ \n\n- Add following variables to the envirenment variables.\n\n\t- [x] `API_HASH` ~ Get it from [my.telegram.org](https://my.telegram.org/auth)\n\n\t- [x] `APP_ID` ~ Get it from [my.telegram.org](https://my.telegram.org/auth)\n\n\t- [x] `APP_DOMAIN` ~ Your application domain name. eg. https://jainam.me. \n\n\t- [x] `BOT_TOKEN` ~ Get it from [@BotFather.](https://t.me/botfather)\n\n\t- [x] `GITHUB_USERNAME` ~ Your [GitHub](https://www.github.com/jainamoswal) username, which you want users to force-follow.\n\n\t- [x] `MONGO_URL` ~ [MongoDb](https://www.mongodb.com) URL, to save user's github usernames after login via GitHub oAuth2.\n\n\t- [x] `FLASK_SECRET_KEY` ~ Make it random value, It will be used to access session cookie while [Telegram](https://t.me/j_projects) and [GitHub](https://www.github.com/jainamoswal) linking. \n\n\t- [x] `GITHUB_OAUTH_CLIENT_ID` ~ Your GitHub oAuth credential. Get it from [here.](https://github.com/settings/applications/new)\n\n\t\t\u003e Assuming `github-app.herokuapp.com` as my App's endpoint.\n\n\t\t\u003e Add App URL in GitHub app settings. eg. `https://github-app.herokuapp.com/`\n\n\t\t\u003e Add App URL and a callback route to it. eg. `https://github-app.herokuapp.com/login/github/authorize`\n\n\n\t- [x] `GITHUB_OAUTH_CLIENT_SECRET` ~ Your GitHub oAuth credential. Get it from [here.](https://github.com/settings/applications/new)\n\n\t- [x] `PORT` ~ Leave it blank, as Heroku will assign it.\n\n\n- Set the same `APP_DOMAIN` in [Bot settings.](https://core.telegram.org/widgets/login#linking-your-domain-to-the-bot)- \n\n\n---\n\t\n### Deployments :-\t\n\n\u003cdetails\u003e\u003csummary\u003eHeroku\u003c/summary\u003e\n\u003cp\u003e\u003cbr\u003e\n\u003ca href=\"https://dashboard.heroku.com/new?template=https://github.com/jainamoswal/ForceHub\"\u003e\n  \u003cimg src=\"https://www.herokucdn.com/deploy/button.svg\" alt=\"Deploy\"\u003e\n\u003c/a\u003e\n\u003c/p\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003eZeet\u003c/summary\u003e\n\u003cp\u003e\u003cbr\u003e\n\u003ca href=\"https://deploy.zeet.co?url=https://github.com/jainamoswal/ForceHub\"\u003e\n\u003cimg src=\"https://deploy.zeet.co/ForceHub.svg\" alt=\"Deploy\"\u003e\n\u003c/a\u003e\n\u003c/p\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eLocally\u003c/b\u003e\u003c/summary\u003e\n \u003cbr\u003e1. Clone it to your local machine.\u003c/br\u003e\n \u003cbr\u003e2. Add environment variables or remove them and use as normal varibales via setting them in \u003ccode\u003econfig.py\u003c/code\u003e\u003c/br\u003e\n \u003cbr\u003e3. Run both the files \u003ccode\u003eapp.py\u003c/code\u003e \u0026 \u003ccode\u003eForceHub\u003c/code\u003e via \u003ccode\u003epython app.py\u003c/code\u003e and \u003ccode\u003epython -m ForceHub\u003c/code\u003e respectively.\u003c/br\u003e\n\u003c/details\u003e\n\n\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eAny other Platform.\u003c/b\u003e\u003c/summary\u003e\n\u003cbr\u003e1. Clone this repo or fork it.\u003c/br\u003e\n\u003cbr\u003e2. Set the variables as envirenment variables or in \u003ccode\u003econfig.py\u003c/code\u003e.\u003c/br\u003e\n\u003cbr\u003e3. Publish it.\u003c/br\u003e\n\u003c/details\u003e\n\n\n## Next pro tip :\n Use [Freenom](https://www.freenom.com) for a cool free domain.\n \n Many times, [Freenom](https://www.freenom.com) has many server issues, So you will need to retry after some time.\n \n\n## License \n### [ForceHub](https://github.com/jainamoswal/ForceHub) is licensed under [GNU Affero General Public License v3](https://www.gnu.org/) or later.\n\n[![License](https://www.gnu.org/graphics/gplv3-or-later.png)](LICENSE)\n\n`The GNU General Public License (GNU GPL or simply GPL) is a series of widely-used free software licenses that guarantee end users the freedom to run, study, share, and modify the software.[8] The licenses were originally written by Richard Stallman, founder of the Free Software Foundation (FSF), for the GNU Project, and grant the recipients of a computer program the rights of the Free Software Definition.[9] The GPL series are all copyleft licenses, which means that any derivative work must be distributed under the same or equivalent license terms. This is in distinction to permissive software licenses, of which the BSD licenses and the MIT License are widely used, less restrictive examples. GPL was the first copyleft license for general use.`\n","funding_links":[],"categories":["Python"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjainamoswal%2FForceHub","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjainamoswal%2FForceHub","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjainamoswal%2FForceHub/lists"}