{"id":18148289,"url":"https://github.com/thiraput01/courspora-notifier","last_synced_at":"2026-01-27T12:38:16.516Z","repository":{"id":259697753,"uuid":"876152643","full_name":"Thiraput01/Courspora-notifier","owner":"Thiraput01","description":"A discord bot to notify the new courses from Courspora","archived":false,"fork":false,"pushed_at":"2024-11-16T07:58:03.000Z","size":34,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-09T00:16:01.790Z","etag":null,"topics":["bot","discord-bot","discord-js","docker","gcp-project","google-kubernetes-engine","http-requests","selenium-python","web-scraping"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Thiraput01.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-10-21T13:41:05.000Z","updated_at":"2025-02-13T09:04:08.000Z","dependencies_parsed_at":"2024-12-20T09:42:18.384Z","dependency_job_id":"75fab80d-9285-41d4-864d-058b1103e375","html_url":"https://github.com/Thiraput01/Courspora-notifier","commit_stats":null,"previous_names":["thiraput01/courspora-notifier"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Thiraput01/Courspora-notifier","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Thiraput01%2FCourspora-notifier","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Thiraput01%2FCourspora-notifier/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Thiraput01%2FCourspora-notifier/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Thiraput01%2FCourspora-notifier/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Thiraput01","download_url":"https://codeload.github.com/Thiraput01/Courspora-notifier/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Thiraput01%2FCourspora-notifier/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":271598433,"owners_count":24787659,"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-08-22T02:00:08.480Z","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":["bot","discord-bot","discord-js","docker","gcp-project","google-kubernetes-engine","http-requests","selenium-python","web-scraping"],"created_at":"2024-11-01T23:07:52.753Z","updated_at":"2026-01-27T12:38:16.489Z","avatar_url":"https://github.com/Thiraput01.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Discord Course Notification Bot\r\n\r\nA Discord bot that monitors Courspora for new content updates and automatically sends notifications to designated channels in Discord servers. Built with Docker for simple deployment and management.\r\n\r\n\r\nhttps://github.com/user-attachments/assets/e7b9dc79-5582-4193-8e5d-abdfdcde806e\r\n\r\n\r\n## Features\r\n\r\n- Automatically checks for new content updates on Courspora\r\n- Sends notifications to specified Discord channels\r\n- Supports multiple servers (one notification channel per server)\r\n- Easy deployment using Docker and Google Kubernetes Engine (GKE)\r\n- Simple command interface for channel management\r\n\r\n## Commands\r\n\r\n| Command  | Description                                                                           |\r\n| -------- | ------------------------------------------------------------------------------------- |\r\n| `!set`   | Sets the current channel to receive notifications. Limited to one channel per server. |\r\n| `!clear` | Removes the current notification channel setting.                                     |\r\n\r\n## Setup\r\n\r\n### Prerequisites\r\n\r\n- Docker and Docker Compose\r\n- Google Cloud account with GKE enabled\r\n- Discord Bot Token and ID\r\n\r\n### Installation\r\n\r\n1. Clone the repository:\r\n\r\n```bash\r\ngit clone https://github.com/Thiraput01/Courspora-notifier\r\ncd Courspora-notifier\r\n```\r\n\r\n2. Configure environment variables:\r\n\r\n```bash\r\ncp .env.example .env\r\n```\r\n\r\nEdit the `.env` file with your credentials:\r\n\r\n```\r\nTOKEN=your_discord_bot_token\r\nBOT_ID=your_discord_bot_ID\r\n```\r\n\r\n3. Build and run with Docker:\r\n\r\n```bash\r\ndocker-compose up -d\r\n```\r\n\r\n### Deploying with Google Kubernetes Engine (GKE)\r\n\r\n1. Set up your GKE cluster: Ensure you have a GKE cluster created and configured. Refer to the GKE documentation for guidance.\r\n2. Deploy the application: Use the provided Kubernetes configuration files to deploy the bot and the web scraper on GKE. Make sure to apply the necessary configurations for your environment by adding `env-config.yaml` file.\r\n3. Access the bot: After deploying, use the external IP assigned to your Discord bot service to test the functionality.\r\n\r\n## Usage\r\n\r\n1. Invite the bot to your Discord server using the OAuth2 URL generated from the Discord Developer Portal.\r\n\r\n2. Choose the channel where you want to receive notifications.\r\n\r\n3. In the desired channel, type:\r\n\r\n```\r\n!set\r\n```\r\n\r\nTo change the notification channel:\r\n\r\n1. Go to the current notification channel\r\n2. Type `!clear`\r\n3. Go to the new desired channel\r\n4. Type `!set`\r\n\r\n## Docker Deployment\r\n\r\nThe bot comes with a pre-configured Docker setup for easy deployment:\r\n\r\n```yaml\r\nversion: \"3\"\r\nservices:\r\n  web-scraper:\r\n    build: ./scrape\r\n    container_name: web_scraper\r\n    restart: unless-stopped\r\n    volumes:\r\n      - ./scrape:/app\r\n    env_file:\r\n      - .env\r\n    networks:\r\n      - app-network\r\n\r\n  discord-bot:\r\n    build: ./bot\r\n    container_name: discord_bot\r\n    restart: unless-stopped\r\n    ports:\r\n      - \"5000:5000\"\r\n    volumes:\r\n      - ./bot:/app\r\n    env_file:\r\n      - .env\r\n    networks:\r\n      - app-network\r\n\r\nnetworks:\r\n  app-network:\r\n    driver: bridge\r\n```\r\n\r\n## Support\r\n\r\nFor support, please open an issue in the GitHub repository or contact the maintainers.\r\n\r\n## Acknowledgments\r\n\r\n- Discord.js library for Discord bot functionality\r\n- Docker for containerization\r\n- Google Cloud Platform for hosting the application using GKE.\r\n- [Courspora](https://www.courspora.my.id/) for providing the course content .\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthiraput01%2Fcourspora-notifier","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthiraput01%2Fcourspora-notifier","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthiraput01%2Fcourspora-notifier/lists"}