{"id":14983203,"url":"https://github.com/marcusotter/discord-needle","last_synced_at":"2025-04-07T05:13:31.561Z","repository":{"id":36979384,"uuid":"398402030","full_name":"MarcusOtter/discord-needle","owner":"MarcusOtter","description":"Needle is a Discord bot that creates Discord threads automatically.","archived":false,"fork":false,"pushed_at":"2024-07-29T03:32:24.000Z","size":1640,"stargazers_count":216,"open_issues_count":40,"forks_count":52,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-04-07T05:13:23.330Z","etag":null,"topics":["bot","chatbot","discord","discord-bot","discord-js","discordbot","discordjs","nodejs","threads","ticketing-system"],"latest_commit_sha":null,"homepage":"https://needle.gg","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/MarcusOtter.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","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},"funding":{"github":"MarcusOtter","patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":null}},"created_at":"2021-08-20T21:15:48.000Z","updated_at":"2025-04-06T18:30:16.000Z","dependencies_parsed_at":"2024-06-12T15:36:52.979Z","dependency_job_id":"fb19f63b-fa43-403c-87bc-ab096c45c1f9","html_url":"https://github.com/MarcusOtter/discord-needle","commit_stats":{"total_commits":390,"total_committers":8,"mean_commits":48.75,"dds":0.5641025641025641,"last_synced_commit":"fb0606f676b690b5d8b54b7fcd35726ad6e6db51"},"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MarcusOtter%2Fdiscord-needle","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MarcusOtter%2Fdiscord-needle/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MarcusOtter%2Fdiscord-needle/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MarcusOtter%2Fdiscord-needle/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MarcusOtter","download_url":"https://codeload.github.com/MarcusOtter/discord-needle/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247595335,"owners_count":20963943,"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","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","chatbot","discord","discord-bot","discord-js","discordbot","discordjs","nodejs","threads","ticketing-system"],"created_at":"2024-09-24T14:06:53.854Z","updated_at":"2025-04-07T05:13:31.540Z","avatar_url":"https://github.com/MarcusOtter.png","language":"TypeScript","funding_links":["https://github.com/sponsors/MarcusOtter"],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\t\u003ch1\u003e\n\t\t\u003csub\u003e\n\t\t\t\u003ca href=\"#\"\u003e\n\t\t\t\t\u003cimg\n\t\t\t\t\tsrc=\"https://raw.githubusercontent.com/MarcusOtter/discord-needle/main/branding/logo-64x64.png\"\n\t\t\t\t\theight=\"39\"\n\t\t\t\t\twidth=\"39\"\n\t\t\t\t/\u003e\n\t\t\t\u003c/a\u003e\n\t\t\u003c/sub\u003e\n\t\tNeedle\n\t\u003c/h1\u003e\n\tNeedle is a \u003cb\u003e\u003ca href=\"https://discord.com/\"\u003eDiscord\u003c/a\u003e bot\u003c/b\u003e that helps you declutter your server by creating \u003ca href=\"https://support.discord.com/hc/en-us/articles/4403205878423-Threads-FAQ\"\u003eDiscord threads\u003c/a\u003e automatically.\n\t\u003cbr /\u003e\u003cbr /\u003e\n\t\u003ca href=\"https://needle.gg\"\u003e\u003cimg src=\"https://img.shields.io/badge/🌐_Website-gray?style=for-the-badge\" alt=\"Website\" /\u003e\u003c/a\u003e\n\t\u0026emsp;\n\t\u003ca href=\"https://needle.gg/invite\"\u003e\u003cimg src=\"https://img.shields.io/badge/💌_Invite%20Needle-gray?style=for-the-badge\" alt=\"Invite Needle\" /\u003e\u003c/a\u003e\n\t\u0026emsp;\n\t\u003ca href=\"https://needle.gg/chat\"\u003e\u003cimg src=\"https://img.shields.io/badge/🙋_Get%20Support-gray?style=for-the-badge\" alt=\"Get Support\" /\u003e\u003c/a\u003e\n\u003c/div\u003e\n\n## 👋 Getting started\n\nThe easiest way to start using Needle in your server is to use the hosted instance. [Click here to invite Needle](https://needle.gg/invite) to your Discord server! If you have any questions, feel free to join the [support server](https://needle.gg/chat) and check the [Frequently Asked Questions](https://needle.gg/faq).\n\n## 🛠️ Self-hosting (advanced)\n\nThe hosted instance of Needle is customizeable and should be enough for most users. However, if you have special requirements and want to modify the functionality of Needle, you will have to fork the repository and self-host your own instance. This requires programming knowledge and is only for advanced users - support for this will be limited.\n\nNeedle requires an environment with Node.js version `16.9.0` or higher, along with persistent storage for per-server config files - shared hosts (like Replit and Heroku) will not work.\n\n1. Clone or download the [latest release](https://github.com/MarcusOtter/discord-needle/releases/latest) of Needle (branch: [`stable`](https://github.com/MarcusOtter/discord-needle/tree/stable)).\n2. Copy `.env.example` to `.env` and fill in your bot's token and application ID.\n3. Run `npm install` to install Needle's dependencies.\n4. Run `npm run build` to compile Needle's code.\n5. Run `npm run deploy` to setup slash commands.\n    - Slash commands can take **up to one hour** to show up in all servers.\n6. Run `npm start` to start Needle :tada:\n\nNeedle requires the following permissions to function, along with the `applications.commands` and `bot` scopes.\n\n-   [x] View channels\n-   [x] Send messages\n-   [x] Send messages in threads\n-   [x] Create public threads\n-   [x] Read message history\n\nYou can use this link to invite your self-hosted version of Needle, replacing `\u003cAPP ID\u003e` with your bot's application ID:\n\n```\nhttps://discord.com/oauth2/authorize?client_id=\u003cAPP ID\u003e\u0026permissions=309237713920\u0026scope=bot%20applications.commands\n```\n\n### 🐳 Docker\n\nNeedle has an [official Docker image](https://github.com/MarcusOtter/discord-needle/pkgs/container/discord-needle). Releases are tagged by their minor \u0026 patch version (e.g. `2.0.0` \u0026 `2.0`), with the latest release tagged `latest`. Branches are tagged by their name. To run the image, write the following command, replacing `token` with your bot's token:\n\n```sh\ndocker run -d --name Needle --env DISCORD_API_TOKEN=token discord-needle ghcr.io/MarcusOtter/discord-needle:latest\n```\n\nBy default, this will create an anonymous volume for `/configs`. To change the location, add `-v /path/to/configs:/configs` to the command.\n\nThere is also an [example `docker-compose.yml` file](https://github.com/MarcusOtter/discord-needle/blob/main/docker-compose.yml).\n\nYou'll still need to deploy Needle's slash commands - follow the regular self-hosting instructions apart from step 6.\n\n## 🤝 Contributing\n\nContribution guidelines coming soon :tm:\n\n[Join the Discord](https://needle.gg/chat) if interested!\n\nIf you want to support Needle in other ways, consider [sponsoring](https://needle.gg/sponsor) the development of Needle.\n\nYou can also [vote for and review the bot on top.gg](https://needle.gg/vote).\n\n## 📜 License\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU Affero General Public License as published by\nthe Free Software Foundation, either version 3 of the License, or (at\nyour option) any later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\nGNU Affero General Public License for more details.\n\nYou should have received a copy of the GNU Affero General Public License\nalong with this program. If not, see \u003chttps://www.gnu.org/licenses/\u003e.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarcusotter%2Fdiscord-needle","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmarcusotter%2Fdiscord-needle","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarcusotter%2Fdiscord-needle/lists"}