{"id":46099657,"url":"https://github.com/somedumbfox/passel-js","last_synced_at":"2026-03-01T19:34:03.156Z","repository":{"id":58453859,"uuid":"531747930","full_name":"somedumbfox/passel-js","owner":"somedumbfox","description":"It's passel-public, but written in discordjs. PasselJs is a discord pin archival bot that you can self host for your server.","archived":false,"fork":false,"pushed_at":"2026-02-12T01:05:09.000Z","size":568,"stargazers_count":2,"open_issues_count":3,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-02-12T11:29:40.995Z","etag":null,"topics":["archive","bot","discord","discord-bot","discord-js","discordjs","nodejs","pin"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","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/somedumbfox.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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-09-02T01:59:14.000Z","updated_at":"2026-02-12T01:05:14.000Z","dependencies_parsed_at":"2023-02-12T07:16:35.694Z","dependency_job_id":null,"html_url":"https://github.com/somedumbfox/passel-js","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/somedumbfox/passel-js","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/somedumbfox%2Fpassel-js","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/somedumbfox%2Fpassel-js/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/somedumbfox%2Fpassel-js/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/somedumbfox%2Fpassel-js/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/somedumbfox","download_url":"https://codeload.github.com/somedumbfox/passel-js/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/somedumbfox%2Fpassel-js/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29981467,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-01T16:35:47.903Z","status":"ssl_error","status_checked_at":"2026-03-01T16:35:44.899Z","response_time":124,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["archive","bot","discord","discord-bot","discord-js","discordjs","nodejs","pin"],"created_at":"2026-03-01T19:34:02.710Z","updated_at":"2026-03-01T19:34:03.138Z","avatar_url":"https://github.com/somedumbfox.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"![Passel JS](images/passel-js.jpeg)\n[![Docker](https://github.com/somedumbfox/docker-passel-js/actions/workflows/docker-publish.yml/badge.svg)](https://github.com/somedumbfox/docker-passel-js/actions/workflows/docker-publish.yml)\n\n# About\nThis is a bot port of [Passel Public](https://github.com/aamunkoi/passel_public) to use discords official bot api ([discord.js](https://discord.js.org/)). I did this mainly because I was bored and some users that wanted to host passel public wanted a discord js version. Running a personal instance of this bot can serve multiple servers (up to 100 before verification requirements come into play).\n\n## Contents\n- [Features](#features)\n- [Requirements](#requirements)\n- [Enable developer mode on discord](#enable-developer-mode-on-discord)\n- [Create your discord bot](#create-your-discord-bot)\n- [Download this repo and configure your bot](#download-this-repo-and-configure-your-bot)\n- [Run your bot locally](#run-your-bot-locally)\n- [Deployment](#deployment)\n- [Docker Deployment](#docker-deployment)\n- [Available Commands](#available-commands)\n- [FAQ](#faq)\n- [Privacy](#privacy)\n\n## Features\nThe main feature of this bot is to automatically take pinned messages and display them in an archive text channel of your choice. There are 3 modes of archiving.\n - Archive most recent pin `/settings lastpin false`\n - Archive oldest pin (default mode) `/settings lastpin true`\n - Archive all pins `/settings sendall true`\n\nArchiving the most recent pin will allow the pinned list to act like a sticky pinned menu. So the first 49 pins will always remain present in the pins list. While the pin that was just added is sent to the archive channel.\n\nArchiving the oldest pin will allow the most recent pin to be added to the pins list, and move the oldest pinned message to the archive channel.\n\nArchiving all pins will clear the pins list of all 50 pins and will send them to the archive channel. ***Note***: Pins with video embeds will only show the standard pin embed archive. Video links will not be sent.\n\n### Other Features\n- RSS/ATOM/JSON feed tracker `/feed add`\n\nYou can give this bot a link to track an RSS, ATOM, or JSON feed. This is useful for announcing new entries from blog-like websites (wordpress, jekyll, gitlab, etc). The interval in which feeds are checked are configurable by the number of seconds. (IE: 600 seconds for every 10 minutes.)\n\n## Requirements\nNodejs is required to be installed on your machine before running this bot locally. Also, your choice of text editor. You will be editing files in this repo. I recommend [VSCode](https://code.visualstudio.com/) if you're just starting out.\n\n**NOTE**: If you plan on using docker deployment, you can skip setup for NodeJS development environment. Instead follow the [Docker Deployment Instructions](https://github.com/somedumbfox/docker-passel-js).\n\n### nodeJs For Windows/Mac:\nDownload and install [nodejs](https://nodejs.org/en/download/) (version \u003e= 16.0.0)\n\nAlternatively for Mac, you may install nodeJs via homebrew if you have it.\n\n### nodeJs For Linux:\nFollow [these instructions](https://nodejs.org/en/download/package-manager/) for your machine\n\n## Enable developer mode on discord\nOpen your discord client and open your user settings.\n\nOpen the Advanced tab. On this page check Developer Mode so it's enabled. That's it you're done here.\n\n## Create your discord bot\n\n### Create your application\nGo to the [discord dev portal](https://discord.com/developers) and sign up to become a discord developer.\nIn the Applications page select \"New Application\" on the top right.\n\n![new app](images/newapplication.png)\n\nGive your application a name. It can be anything you want, this will be the default bots name.\n\n![name it](images/applicationname.png)\n\nYou will be taken to your bots page when you agree to the terms and save. Here you'll land on the General Information tab. On this\npage you will want to take note of your appliaction id. Note: This page holds public Information about your bot, however this bot \nwill be configured to not be public. So it is best to keep this information to yourself and not share it.\n\n![Application ID](images/generalinfo.png)\n\n### Create and configure your bot\nSelect Bot on the left. On this page you'll see the Build-A-Bot page. Go ahead the select \"Add Bot\" and select \"Yes, dot it\".\nYou will see the option \"Reset Token\" below your bots name. Select that option then select \"Yes, do it!\". \nEnter your 2fa token if prompted.\n\nYou'll now see a string of characters (IE: `MTAxNTEwNjcwMDg0MTMyNDU5NQ.G3QeDO.i2aHpO1buLSh_RSxRkKxPFwMTvghYoKW7IjwBM`). \nTake note of this token and save it somewhere save. If you lose this token, you will need reset the token again to view \na new token.\n\nOn the same page. Uncheck \"PUBLIC BOT\", Keep \"REQUIRES OAUTH2 CODE GRANT\" unchecked, \nand check \"PRESENCE INTENT\", \"SERVER MEMBERS INTENT\", and \"MESSAGE CONTENT INTENT\". Select save changes.\n\n### Generate your bot invite\nGo to OAuth2-\u003eURL Generator\n\n![URL Generator](images/generate.png)\n\nOn this page select scopes `bot` and `appliactions.commands`\n\n![Scopes selected](images/scopes.png)\n\nNow select `Administrator` for Bot permissions (See [Privacy](#privacy) for minimum requirements)\n\n![permissions selected](images/perms.png)\n\nCopy and paste the genereated URL at the bottom in your web browser to invite your bot to your server.\n\nThis page occasionally doesn't work for some people. The link that is generated is:\n\n`https://discord.com/api/oauth2/authorize?client_id=0\u0026permissions=8\u0026scope=bot%20applications.commands`\n\nReplace the 0 after `client_id` with the Application Id on your General Information page.\n\n## Download this repo and configure your bot\nUse [this link](https://github.com/somedumbfox/passel-js/archive/refs/tags/v2.0.8.zip) to download this repo as a zip file.\nUzip the contents of the file into a folder of your choice. Keep note of the file path to your bot.\n\nThe files you will need to edit are:\n- `./src/app.js`\n- `./src/deploy-commands.js`\n- `./fly.toml` - optional\n- `./package.json` - optional\n\n### app.js Configuration\nFind the line:\n`/**---------------------------------------Start Configuration------------------------------------------------------------**/`\n\nFor each item, you'll need to set it accordingly.\n\n- `token`: Set this variable as your discord bot token. If you're not sure, it is the alpha numeric token that looks a bit like this: `MTAxNTEwNjcwMDg0MTMyNDU5NQ.G3QeDO.i2aHpO1buLSh_RSxRkKxPFwMTvghYoKW7IjwBM`. Leave this setting as `\"paste_token\"` if you plan on using fly.io with secrets configured. No default is given, must be configured. Looks for environment variable `TOKEN` first.\n- `clientId`: This is your appliactionId. Paste that ID within the quotes.\n- `secondsTaskInterval`: Set the number (in seconds) to change the interval. Default is 60. Looks for environment variable `TASKINTERVAL` first.\n- `pinLimit`: Set the number of pins allowed to be displayed before the bot takes action in archiving them. Default is 249. Number is non-inclusive. If you want 50 pins to remain in list, then you should set the limit to 49. Looks for environment variable `PINLIMIT` first.\n- `registerCommands` set to true to register global commands on launch Default value is false. Set to true on first launch. Leave false if commands are already registered.\n\n### fly.toml and package.json configuration\nThis is not a required step. If you wish to keep things consistent, and want to use a different name that appears on your fly.io (see [deployment](#deployment)) account. Adjust the `name` (`package.json`) and `app` (`fly.toml`) variables in both files to the name of your choosing. Ensure both are all lowercase with no space (IE:`my-bot-name`).\n\n`fly.toml`:\n\n![](images/flyname.png)\n\n`package.json`\n\n![](images/packagename.png)\n\n# Run your bot locally\nIt is best to run you bot on your personal machine first to ensure it is working properly after your configuration. To do so, you will want to open a terminal window (Command Prompt, Powershell, Bash, etc...) and change directory to the folder you set up earlier.\n\n## Installation\nWith your terminal open change to the directory to the your the root folder of your bot IE: `cd C:\\repos\\passel-js` where `C:\\repos\\passel-js` is the folder you extracted the contents of the repo .zip file that was downloaded. You are at the root of the folder if you see the `package.json` and `package-lock.json` files.\n\nNow type:\n\n`npm install`\n\n## Register your bot slash commands\nWith the terminal still open on your root folder. Type:\n\n`npm run register`\n\nThis command only needs to be run once after configuration. If you add more commands, or make any \nchanges to the command names, you'll need to run this script again.\n\nIf you no longer need to run slash command registrations. You can delete the bot token from the `deploy-commands.js` file.\n\n## Running locally\nWhile in the root folder on your terminal. Type.\n\n`npm start`\n\nWhile the bot is running, test to see if you have configured your bot correctly with the following slash command in discord `/settings`\nIf you see the message that the bot is not configured, that means the bot is running successfully.\n\nConfigure you server using `/settings archivechannel #channel`. By default, only one pin will be archived at a time, with the oldest pin being archived.\n\nTest the bot by pinning and unpinning content. If you come across an issue please let the repo owner know (@SomeDumbFox#1234). Once you finished testing locally, you may either:\n\n- Let it continue to run. Running this bot on your machine is probably the best way to ensure it remains running at no additional cost. As long as your PC is on and connected to the internet, the bot stays online. If the bot crashes, you can restart using the `npm start` command. \n- Use a free (or paid) deployment service to keep your bot up. Keep in mind, free deployments are not reliable as there is no way of knowing how long a free service will remain free.\n\n## Common errors\n```\nError [TokenInvalid]: An invalid token was provided.\n    at WebSocketManager.connect ...\n    ...\n  code: 'TokenInvalid'\n}\n```\nThis means the bot token you provided is invalid. If you're not sure if you copied the right value, go back the discord dev portal and reset your bot token. Also, make sure you saved your `app.js` in your text editor.\n\n# Deployment\n[Fly.io](https://fly.io) offers 2 free app deployments on a shared virtual machine. If you are planning to only use this bot for pin management and nothing more, this proves to be a decent service to test out the bot. Otherwise, if you wish to add more commands and interactions with this bot, a paid service of your liking will be the best option. Also keep in mind there are risks associated in free hosting, and that free hosting is often never guaranteed.\n\nGo to fly.io and click Get Started. On this page, follow the instructions on installing Fly.io to your machine, and sign up for free. Note: Fly.io has the right to restrict free apps whenever they want.\n\nSecondly, if you previously run your app locally, you may want to delete the `node_modules` folder and delete any saved bot tokens in `app.js` and `deploy-commands.js`\n\nYou can also use a Docker image, that is refreshed nightly, from my automated docker image build.\n\n## Create your app with fly.io\nOn windows, you must be in PowerShell. Other systems, open your terminal and change directory to the root folder of you bot.\n\nWhile in your bots root directory. Type:\n\n`flyctl auth login` - This will open a web browser to sign in to fly.io. you may close the window when your terminal says you have successfully logged in.\n\nCreate your app:\n\n`flyctl create app-name`\n\n\u003e Replace `app-name` with your preferred app name. (If you edited fly.toml, use the app name you chose to save some time). The app name must be all lowercase, letters and numbers only.\n\nCreate your Volume:\n\n`flyctl vol create data --size 1`\n\n\u003e This will attach a volume to the app you just created. Select the region you want to host your app.\n\nSet your secrets:\n\n`flyctl secrets set TOKEN=bot-token`\n\u003e Replace `bot-token` with your discord bot token\n\n`flyctl secrets set clientId=application-id`\n\u003e Replace `application-id` with your discord application id\n\n`flyctl secrets set registerCommands=true`\n\u003e Use true for first time set up.\n\n`flyctl secrets set SQL=/data/DB.sqlite`\n\n\u003e Can be copied a pasted. No need to change this value. You can rename `DB.sqlite` if you want to.\n\n`flyctl secrets set SQLUser=user-name`\n\u003e Replace `user-name` with a made up name of your choice. This will be the DB admin username.\n\n`flyctl secrets set SQLPass=password`\n\u003e Replace `password` with a secure password of your own. This is the DB Admin password.\n\n`flyctl secrets set TASKINTERVAL=600`\n\u003e Optional for RSS feed checks. If you plan on using this feature set this number in seconds to how often you want the bot to check for new content. IE: Every 600 seconds (10 minutes)\n\nDeploy your app for the first time:\n\n`flyctl launch`\n\u003e The apps will automatically launch using the fly.toml file you edited. The region entered earlier will be used for the application.\n\nIf you see any prompts:\n\n`? Would you like to copy its configuration to the new app? (y/N)`\n\u003e Type `y`\n\n`? App Name (leave blank to use an auto-generated name):`\n\u003e Choose a name (numbers/letters only, all lowercase). IE: `my-passel-bot`. You will be given a random name if left blank.\n\n`? Select region:  [Use arrows to move, type to filter]`\n\u003e Select the region closest to you by using the up and down arrow keys. Press Enter on the region you want.\n\n`? Would you like to set up a Postgresql database now? (y/N)`\n\u003e Type `n`.\n\n`? Would you like to deploy now? (y/N)`\n\u003e Type `y`\n\nAfter that watch your terminal launch your first bot. Once it's launched, check your fly.io dashboard and see if it's running.\n\nWhile still in the console:\n\n`flyctl secrets unset registerCommands`\n\u003e Unset the secret so registration no longer occurs on app restarts.\n\n## Deploying changes\nIf you needed to update your bot with new configurations, once you have saved your files. Go ahead and open your terminal (PowerShell on Windows) and change directory to your bots root folder.\n\nIn the terminal, while in your bots root folder. Type:\n\n`flyctl auth login` - Follow directions to login. Close browser when done.\n\n`flyctl deploy`\n\nWatch the app build and deploy, and check your fly.io dashboard to ensure you bot successfully restarted.\n\n## Deleting your app\nIf fly.io is not to your liking. You have 2 ways to delete your app.\n\nThe first way, and easiest, is to log in your fly.io dashbaord and select the app you want to remove. Go to the settings of the app, and select \"Delete app\". Follow the prompt and your done.\n\nIn your terminal (PowerShell on windows), change directory to your bots root folder. Type:\n\n`flyctl auth login` - Follow directions to login. Close browser when done.\n\n`flyctl delete app-name --yes` - Replace `app-name` with the name of your app in the `fly.toml` file.\n\n# Docker Deployment\n\nDocker is a great tool, and allows you to either run images locally or in the cloud. It also allows you to stay up to date by simply updating your image as well. \n\nPassel JS can now be run within a docker container, with relatively minimal setup and no need to setup your computer environment for Node JS. You can view instructions on how to run Passel JS with docker [here](https://github.com/somedumbfox/docker-passel-js)!\n\n# Available Commands\n`/settings archivechannel #channel` - Sets the channel used to archive pins.\n\n`/settings ignorelist #channel` - Add/Removes a channel to the ignore list. Channels in the list will not have pins archived.\n\n`/settings sendall true/flase` - Change the send all behavior. True will remove all pins from the pins list in a channel. False will remove one pin.\n\n`/settings lastpin true/false` - Change the single pin archive behavior. True will remove the oldest pin. False will remove the newest pin.\n\n`/settings show` - Shows the current configuration of the pin bot for your server.\n\n`/feed add name url #channel | message` - Adds an RSS feed to listen to for changes. Will announce the newest entry in the specified channel. A custom message can be added to be sent with the new entry. \n\n`/feed delete name` - Removes a feed that was configured. If the feed was not found, then 0 feeds would be removed. Name is case senstive.\n\n## FAQ\n\u003e Can I create my own repo without forking this repo so it can be private?\n\nAbsolutely. You're also more than welcome to fork the repo if keeping it public is not an issue.\n\n\u003e Can I save my bot token on the repo I made?\n\nOnly if your repo is private. Even then it's not recommended to do so. Look into loading your bot token \nas a configuration file, or as an environment variable instead.\n\n\u003e My bot doesn't seem to work, I made a pin but discord tells me I reached my max.\n\nYou'll need to unpin your most recent pin, and repin it for it to take affect.\nThis bot only works when the pins list has not reached it's max yet.\n\n\u003e I know my last pin reached my max pins but the bot did nothing?\n\nEnsure your bot is online. If so, check your pin settings `/settings show`. If any channels show up as `#deleted-channel` you may have accidentally removed them by mistake, or removed the bot from vieweing the channel.\n\n\u003e I can see all the bot commands, but others only see `/pins`?\n\nBy defualt server owners can veiw all commands. However, a user must have both \"Manage Server\" and \"Use Slash Commands\" on their role permissions enabled.\n\n\u003e I would like to add a feature to this bot, or suggest one. How would I do that?\n\n2 ways, if you're a developer that wants to make a public improvement, simply fork this repo, make your changes on the fork, and submit a pull request to make it official. I'll review and accept the feature update if it proves to be useful.\n\nThe other way, submit a new [issue](https://github.com/somedumbfox/passel-js/issues) with the \"enhancement\" label describing the feature you want. If well recieved, I'll go ahead and implement it.\n\n\u003e Am I limited to only 100 servers?\n\nTechnically, this bot can serve any number of servers (before sharding is a requirement) if given enough resources. However, bots serving more than 100 servers must go through a verification process. Regardless of it being a private bot or not. That verification will likely fail, as Discord reserves the right to determin if the bot can pass, and there is no clear indication what is required by the bot to pass verification.\n\n\u003e I want to use this repos code to add a feature to my personal bot. Is that allowed?\n\nThis bot has the MIT license attached to it. That action is permitted. Though not required, credit to [Aamunkoi](https://github.com/aamunkoi/) and I would be greatly appreciated.\n\n# Privacy\n\nWhen running Passel JS, you are subject to Discords [Terms of Service](https://discord.com/developers/docs/policies-and-agreements/developer-terms-of-service) and [Devoloper Policy](https://discord.com/developers/docs/policies-and-agreements/developer-policy) for application developers.\n\nPassel JS, provided as is from this repo, does not collect or save any personal identifiable information when joining servers. Information collected per server is:\n- Guild ID (Server Snowflake)\n- Channel IDs\n- RSS feed urls (for the feed checker)\n\nThe information collected are purely used to keep persistant settings during application updates. When the applicaiton leaves a server, all associated information saved with the Guild ID is removed.\n\nIf you (the developer) provide the client application any information that can result in the collection of personal identifiable information, note that you must inform the users of your server(s).\n\n\nMinimum Permissions required to run the application\n- Manage Channels\n- Manage Threads\n- View Messages\n- View Message History\n- Send Messages\n- Attach Files\n- Embed Links\n- Use External Emoji\n- Pin Messages\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsomedumbfox%2Fpassel-js","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsomedumbfox%2Fpassel-js","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsomedumbfox%2Fpassel-js/lists"}