{"id":16542396,"url":"https://github.com/tanja-4732/meme-bot","last_synced_at":"2026-02-08T15:31:11.708Z","repository":{"id":34320941,"uuid":"176248476","full_name":"Tanja-4732/meme-bot","owner":"Tanja-4732","description":"Automates and manages meme channels for Discord servers","archived":false,"fork":false,"pushed_at":"2022-12-08T18:13:34.000Z","size":817,"stargazers_count":2,"open_issues_count":26,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-10-09T20:38:53.368Z","etag":null,"topics":["discord-automation","discord-bot","discord-js","discord-management","meme","meme-automation","memes","nodejs","postgr","postgresql","ts-node","typeorm","typescript"],"latest_commit_sha":null,"homepage":"","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/Tanja-4732.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-03-18T09:36:05.000Z","updated_at":"2025-07-31T14:25:19.000Z","dependencies_parsed_at":"2023-01-15T06:17:59.826Z","dependency_job_id":null,"html_url":"https://github.com/Tanja-4732/meme-bot","commit_stats":null,"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/Tanja-4732/meme-bot","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tanja-4732%2Fmeme-bot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tanja-4732%2Fmeme-bot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tanja-4732%2Fmeme-bot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tanja-4732%2Fmeme-bot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Tanja-4732","download_url":"https://codeload.github.com/Tanja-4732/meme-bot/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tanja-4732%2Fmeme-bot/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29235225,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-08T14:18:14.570Z","status":"ssl_error","status_checked_at":"2026-02-08T14:18:14.071Z","response_time":57,"last_error":"SSL_read: 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":["discord-automation","discord-bot","discord-js","discord-management","meme","meme-automation","memes","nodejs","postgr","postgresql","ts-node","typeorm","typescript"],"created_at":"2024-10-11T18:57:25.356Z","updated_at":"2026-02-08T15:31:11.670Z","avatar_url":"https://github.com/Tanja-4732.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# MemeBot\r\n\r\nAutomated meme management for Discord\r\n\r\n## Table of contents\r\n\r\n- [MemeBot](#memebot)\r\n  - [Table of contents](#table-of-contents)\r\n  - [Features](#features)\r\n  - [Getting started](#getting-started)\r\n  - [Configuration](#configuration)\r\n  - [Users' manual](#users-manual)\r\n  - [Hosting](#hosting)\r\n  - [Copyright notice](#copyright-notice)\r\n\r\n## Features\r\n\r\nMemeBot enriches a guild with the following features:\r\n\r\n- Memes\r\n  - Indirect posting\r\n  - With attribution or anonymous\r\n- Anonymous confessions\r\n  - Optional coloring based on roles\r\n- Reaction-based voting\r\n  - Remove memes with too many downvotes\r\n  - Vote contradiction mitigation (can't upvote AND downvote)\r\n- Multi-guild support\r\n  - One instance of MemeBot may serve several guilds at once\r\n\r\n## Getting started\r\n\r\nSetup is quick and easy.\r\n\r\n1. Get an instance of MemeBot and its invite link\r\n2. Add MemeBot to the guild using said invite link\r\n3. Create a dedicated bot-command channel\r\n4. Type the `mb init` command and hit return in the bot-command channel\r\n5. Create a meme channel and a confession channel (if they don't exist already; both are optional)\r\n6. Optional (but recommended) configuration\r\n   1. Enter `mb meme #meme-channel-name` to set the meme channel\r\n   2. Enter `mb confession #confession-channel-name` to set the confession channel\r\n7. You may enter the `mb downvote 10` command to set the downvote limit to `\u003c=10`\r\n8. Enter the `mb name mas` to set the guilds name to \"mas\" (see [configuration](##Configuration))\r\n\r\nAnd you're all set.\r\n\r\n## Configuration\r\n\r\nMemeBot provides help to any command using the `mb -h` command.\r\nAny other sub-command may also get `-h` appended to learn more about it.\r\n\r\nMost commands and options have abbreviations. Check `mb -h` to see the all.\r\nFor example, `--disable` may be substituted by `-d`, and `cmd-channel` by `cmd`.\r\n\r\nThe following may be configured by an admin:\r\n\r\n- Meme channel `mb meme -h`\r\n  - Set to a channel `mb meme #meme-channel`\r\n    - The old channel will not get modified\r\n    - The new channel will become the chanel in which MemeBot posts new memes\r\n  - Disable `mb meme --disable`\r\n    - Disables all meme functionality of MemeBot for the guild\r\n    - The old meme channel will not be deleted or modified\r\n  - Print the meme channel `mb meme`\r\n    - Used to see wich channel (if any) is configured as the meme channel for this guild\r\n- Confession channel\r\n  - Set to a channel `mb meme #confession-channel`\r\n    - The old channel will not get modified\r\n    - The new channel will become the chanel in which MemeBot posts new confessions\r\n  - Disable `mb conf --disable`\r\n    - Disables all confession functionality of MemeBot for the guild\r\n    - The old confession channel will not be deleted or modified\r\n  - Print the confession channel `mb conf`\r\n    - Used to see wich channel (if any) is configured as the confession channel for this guild\r\n- Cmd channel\r\n  - Set the cmd channel `mb cmd-channel #commands`\r\n    - Configures the channel in which MemeBot will listen for commands\r\n  - Disable the cmd channel `mb cmd-channel --disable`\r\n    - Disables the command channel\r\n    - MemeBot will be listening for commands in all channels\r\n    - The command channel is set by default to the one in which `mb init` was entered initially\r\n  - Print the cmd channel\r\n    - Used to see wich channel (if any) is configured as the command channel for this guild\r\n- Admin role `mb admin -h`\r\n  - Set the admin role `mb admin @BotAdmin`\r\n    - MemeBot will ignore all commands issued by users without the admin role or the Administrator guild privilege\r\n  - Disable the admin role `mb admin --disable`\r\n    - MemeBot will use all commands issued in the command channel (if set, otherwise all messages beginning with `mb` are interpreted as commands)\r\n  - Print the admin role `mb admin`\r\n    - Used to see wich channel (if any) is configured as the meme channel for this guild\r\n- Downvote limit `mb downvote -h`\r\n  - Set the downvote limit `mb downvote 10`\r\n    - Sets the downvote limit to 10\r\n    - Any meme with 11 or more downvotes will be removed by MemeBot\r\n    - Using `mb downvote 0` will result in any downvote issued removing a meme\r\n    - Already downvoted memes will not be re-checked if they still meet the condition\r\n    - Already downvoted memes will be removed once they don't meet the condition after a downvote\r\n  - Disable the downvote limit `mb downvote --disable`\r\n    - The downvote condition will get removed\r\n    - Memes which have been removed already will not get posted again\r\n  - Print the downvote limit `mb downvote`\r\n    - Used to see which number (if any) is configured as the downvote limit for this guild\r\n- Guild name `mb name -h`\r\n  - It's like a domain name for the guild, it must be unique and should be short. \"My amazing server\" may have \"mas\"\r\n  - Set the guild name `mb name nameOfGuild`\r\n    - Where \"nameOfGuild\" is the desired name\r\n  - Print the name `mb name`\r\n    - Prints the configured name\r\n  - The name may not be disabled\r\n    - Users need it to interact with the guild using MemeBot\r\n- Guild initialization `mb init`\r\n  - This command must be run once before all others\r\n  - Only someone with the Administrator guild-privilege may execute it\r\n  - It sets up the guild in MemeBots database\r\n  - It sets the guilds command channel to the one, in which this command was issued\r\n  - Setting the admin role is not supported at this step\r\n\r\n## Users' manual\r\n\r\nThis section focuses on how a user (non-admin) may interact with MemeBot.\r\n\r\nA user may only interact with MemeBot via a direct message (DM) to MemeBot.\r\nFor more details a user may always DM MemeBot with `mb -h`.\r\nFurthermore, `-h` may be appended to any command to learn more about any command.\r\n\r\nA user can:\r\n\r\n- Select a server\r\n  - This is required for MemeBot to know where to post\r\n    - Neither memes nor confessions can be submitted without this\r\n  - Enter `mb server serverName` where \"serverName\" is the name configured by the admins\r\n  - The user can view the selected server using `mb server`\r\n  - Deselecting a selected server is not supported (but changing it is)\r\n- Submit memes\r\n  - Post meme first (picture or video)\r\n  - Then enter `mb meme` (add `-a` to stay anonymous)\r\n- Submit confessions\r\n  - Type `mb conf \"My multi-word confession with \\\"escaped quotes\\\" and a closing quote\"`\r\n  - Confessions are always posted anonymously\r\n  - Confessions must be enclosed with double quotes `\"`\r\n  - If a confession should contain quotes itself, they must be escaped `\\\"`\r\n\r\n## Hosting\r\n\r\nIf you want to host MemeBot yourself, you'll need to follow these steps:\r\n\r\n1. Get the source code (e.g. `git clone git clone git@github.com:Bernd-L/ meme-bot.git`)\r\n2. Install [Node.js](https://nodejs.org/en/download/)\r\n3. Install [PostgreSQL](https://www.postgresql.org/download/)\r\n4. Run `npm install` within the source folder\r\n5. Create (or reuse existing) withing PostgreSQL\r\n   1. A user (with the login privilege and a password)\r\n   2. A database (owned by the user)\r\n   3. A schema within the database (owned by the user)\r\n6. Set the environment variables in the table below\r\n7. Start MemeBot using `npm start`\r\n\r\nThe environment variables:\r\n\r\n| Description                                        | Environment variable name | Example value(s)                                  |\r\n| -------------------------------------------------- | ------------------------- | ------------------------------------------------- |\r\n| The hostname of the PostgreSQL server              | `MB_HOST`                 | `localhost`, `memebot-db.example.com`             |\r\n| The post of the PostgreSQL server                  | `MB_PORT`                 | `5432` (It's recommended to use this one)         |\r\n| The username of the PostgreSQL user                | `MB_USER`                 | `mb`, `memebot_user`                              |\r\n| The password of the                                | `MB_PWD`                  | `mb`, `Sup€rPassword123`                          |\r\n| The name of the PostgreSQL database used by MemBot | `MB_DB`                   | `mb`                                              |\r\n| If SSL should be used to connect to the DB         | `MB_SSL`                  | `false`, `true`                                   |\r\n| The mode of operation of MemeBot                   | `MB_MODE`                 | `development`, `production`                       |\r\n| The PostgreSQL schema to be used by MemeBot        | `MB_SCHEMA`               | `public`, `mb_dev`                                |\r\n| The token issued by Discord to connect MemeBot     | MB_TOKEN                  | `NSkjsd7349SDjlkj.sdfjNCS28.sdjJDS83349JWdjsdjgn` |\r\n\r\n## Copyright notice\r\n\r\n**Copyright 2019 Bernd-L.  \r\nLicensed under [the AGPLv3 license](https://github.com/Bernd-L/meme-bot/blob/master/LICENSE.md).**\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftanja-4732%2Fmeme-bot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftanja-4732%2Fmeme-bot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftanja-4732%2Fmeme-bot/lists"}