{"id":24319368,"url":"https://github.com/rmardonesa/octopull","last_synced_at":"2026-05-01T22:34:52.427Z","repository":{"id":272217298,"uuid":"915859386","full_name":"rmardonesa/Octopull","owner":"rmardonesa","description":"Asynchronous concurrency and API integration real-time GitHub repo listener on a Rust-powered Discord bot","archived":false,"fork":false,"pushed_at":"2025-01-13T01:20:39.000Z","size":9,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-10T19:48:20.304Z","etag":null,"topics":["api-integration","async-await","asynchronous","concurrency","discord","discord-bot","github","rust","serenity","tokio-rs"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rmardonesa.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-01-13T01:15:12.000Z","updated_at":"2025-01-22T06:30:43.000Z","dependencies_parsed_at":null,"dependency_job_id":"a607ce7a-4d33-4518-8b82-790b70c4f522","html_url":"https://github.com/rmardonesa/Octopull","commit_stats":null,"previous_names":["rmardonesa/octopull"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/rmardonesa/Octopull","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rmardonesa%2FOctopull","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rmardonesa%2FOctopull/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rmardonesa%2FOctopull/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rmardonesa%2FOctopull/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rmardonesa","download_url":"https://codeload.github.com/rmardonesa/Octopull/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rmardonesa%2FOctopull/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32515838,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-30T13:12:12.517Z","status":"online","status_checked_at":"2026-05-01T02:00:05.856Z","response_time":64,"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":["api-integration","async-await","asynchronous","concurrency","discord","discord-bot","github","rust","serenity","tokio-rs"],"created_at":"2025-01-17T15:20:10.812Z","updated_at":"2026-05-01T22:34:52.419Z","avatar_url":"https://github.com/rmardonesa.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Octopull Discord Bot\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/user-attachments/assets/2fe68f78-417e-476d-b326-2d717f5e8cce\" alt=\"Octopull-Logo\" width=\"245\"\u003e\n\u003c/p\u003e\n\n\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Rust-000000?style=for-the-badge\u0026logo=rust\u0026logoColor=white\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Discord-5865F2?style=for-the-badge\u0026logo=discord\u0026logoColor=white\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/GitHub-100000?style=for-the-badge\u0026logo=github\u0026logoColor=white\"\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Rust-1.72.0-black?style=for-the-badge\u0026logo=rust\u0026logoColor=white\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Serenity-0.10.11-5865F2?style=for-the-badge\u0026logo=discord\u0026logoColor=white\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Serde-1.0.215-darkgreen?style=for-the-badge\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Reqwest-0.11.14-purple?style=for-the-badge\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Concurrency-Tokio-darkred?style=for-the-badge\"\u003e\n\u003c/p\u003e\n\n---\n\n## 🚀 Overview\n\n**Octopull** is a lightweight and efficient Discord bot written in **Rust**. Designed to integrate seamlessly with Discord servers, it provides a simple and robust way to monitor GitHub repositories in real-time, empowering teams to stay updated on the latest changes in their projects.\n\n### 🌟 Features\n\n- **📦 Repository Tracking**: Users can set and query the status of GitHub repositories.\n- **🔔 Real-Time Notifications**: Automated alerts for new commits every 60 seconds.\n- **💬 User Commands**:\n  - `!setrepo \u003curl\u003e`: Define the repository to track.\n  - `!github`: Display general information about the current repository.\n  - `!commit`: Fetch and display the latest commit details.\n- **🔄 Concurrent Monitoring**: Efficient asynchronous operations using Tokio for periodic checks without blocking user commands.\n\n---\n\n## 🛠️ Technologies \u0026 Libraries\n\n### Languages\n![Rust](https://img.shields.io/badge/Rust-1.72.0-black?style=for-the-badge\u0026logo=rust\u0026logoColor=white)\n\n### Libraries\n- **[Serenity](https://docs.rs/serenity/latest/serenity/)**: A framework for building Discord bots.\n- **[Reqwest](https://docs.rs/reqwest/latest/reqwest/)**: For handling HTTP requests to GitHub's REST API.\n- **[Serde](https://serde.rs/)**: Serialization and deserialization of JSON responses.\n- **[Tokio](https://tokio.rs/)**: An asynchronous runtime for efficient concurrency.\n\n### APIs\n- **[GitHub REST API](https://docs.github.com/en/rest)**: Fetch repository and commit data.\n- **[Discord API](https://discord.com/developers/docs/intro)**: Power the bot's interaction with servers.\n\n---\n\n## 🧪 How It Works\n\n1. Users configure the repository URL via the `!setrepo` command.\n2. The bot queries GitHub's API to fetch repository or commit information.\n3. A background task checks the repository for updates every 60 seconds.\n4. Notifications about new commits are automatically sent to a specified Discord channel.\n\n---\n\n## 📖 Setup Guide\n\n### Prerequisites\n\n- **Rust** (Latest stable version): [Install Rust](https://www.rust-lang.org/tools/install)\n- A **Discord Developer Account**: Create a bot token from the [Discord Developer Portal](https://discord.com/developers/applications).\n- A **GitHub Token**: Generate a personal access token with the `repo` scope from [GitHub](https://github.com/settings/tokens).\n\n### Installation Steps\n\n1. **Clone the Repository**\n   ```sh\n   git clone https://github.com/yourusername/octopull.git\n   cd octopull\n   ```\n\n2. **Set Up Environment Variables**\n   Create a `.env` file based on the provided `env.example`:\n   ```env\n   DISCORD_TOKEN=your_discord_bot_token_here\n   DISCORD_CHANNEL_ID=your_discord_channel_id_here\n   GITHUB_TOKEN=your_github_api_token_here\n   REPO_URL=https://api.github.com/repos/your_user/your_repo\n   ```\n\n   - **DISCORD_TOKEN**: Obtain your bot token from the [Discord Developer Portal](https://discord.com/developers/applications).\n   - **DISCORD_CHANNEL_ID**: Enable Developer Mode in Discord, right-click a channel, and copy its ID.\n   - **GITHUB_TOKEN**: Generate from [GitHub Settings](https://github.com/settings/tokens).\n\n3. **Build and Run the Bot**\n   ```sh\n   cargo build --release\n   cargo run\n   ```\n\n4. **Invite the Bot to Your Server**\n   Use the OAuth2 URL from the Discord Developer Portal to invite your bot:\n   ```\n   https://discord.com/api/oauth2/authorize?client_id=YOUR_CLIENT_ID\u0026permissions=BOT_PERMISSIONS\u0026scope=bot\n   ```\n\n---\n\n## 🧠 Commands\n\n- **`!ping`**: Responds with \"Pong!\" to verify the bot is online.\n- **`!setrepo \u003curl\u003e`**: Set the repository URL for monitoring.\n- **`!github`**: Fetch general information about the current repository.\n- **`!commit`**: Display the latest commit's details.\n\n---\n\n## ⏱️ Concurrency \u0026 Efficiency\n\nThe bot utilizes **Tokio** to:\n\n- Manage asynchronous tasks, ensuring the bot remains responsive to user commands while running background checks.\n- Periodically check the GitHub API every 60 seconds to detect new commits, without blocking other bot operations.\n\n---\n\n## 📜 License\n\n[![License](https://img.shields.io/badge/License-BSD%203%20-darkred)](LICENSE)\n\nThis project is licensed under the BSD-3 Clause License. See the LICENSE file for details.\n\n---\n\n## 🔮 Contributing\n\nContributions are welcome! Follow these steps:\n\n1. **Fork the Repository**\n   ```sh\n   git checkout -b feature/your-feature\n   ```\n\n2. **Implement Your Changes**\n\n3. **Commit and Push**\n   ```sh\n   git push origin feature/your-feature\n   ```\n\n4. **Open a Pull Request**\n\n---\n\n\n### ⚗️ Future Enhancements\n\n- **Webhook Integration**: Add support for GitHub webhooks for instant notifications.\n- **Customizable Intervals**: Allow users to define the monitoring frequency.\n- **Advanced Analytics**: Display repository statistics and trends over time.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frmardonesa%2Foctopull","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frmardonesa%2Foctopull","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frmardonesa%2Foctopull/lists"}