A Node.js Discord bot that lets users submit images and descriptions through direct messages (DM). Use slash commands or a "Submit" button to collect pictures and post them as embeds to a channel—ideal for art servers, photo contests, and anonymous submissions. Built with discord.js and i18n (English & German).
- Features
- How it works
- Requirements
- Installation
- Configuration
- Usage
- Commands
- Internationalization (i18n)
- FAQ
- License
- DM-based submission flow – Users submit images and descriptions via private messages; no clutter in public channels.
- Slash commands –
/submitto start a submission,/createbutton(admin) to spawn a "Submit a picture" button. - Rich embeds – Submissions are posted as Discord embeds with image, description, and author.
- Multi-language – English and German out of the box; easy to add more locales.
- One submission at a time – Prevents duplicate or overlapping submissions per user.
- Node.js & discord.js – Modern JavaScript (ES modules), runs on Node.js with discord.js v13.
- A user runs
/submitor clicks the "Submit a picture" button. - The bot replies in-channel and opens a DM conversation.
- The bot asks for an image, then a short description in DMs.
- The submission is posted as an embed to your configured channel (with optional star reaction).
- The user gets a success message in DMs.
If the user’s DMs are closed, the bot tells them to enable DMs and try again.
- Node.js 16.9.0 or newer (for discord.js v13)
- A Discord Bot token (Discord Developer Portal)
- Bot intents: Guilds, Direct Messages
git clone https://github.com/your-username/Submission-Bot.git
cd Submission-Botnpm installCopy the template and fill in your values:
cp config.template.js config.jsEdit config.js with your bot token, guild ID, channel ID, admin user ID, activity text, and language (see Configuration).
npm startFor production, you can use PM2 with the included pm2.config.json.
| Option | Description |
|---|---|
token |
Your Discord bot token |
activity |
Bot "Playing" status text |
guild |
Your Discord server (guild) ID |
admin |
User ID of the admin (only they can use /createbutton) |
send_to_channel |
Channel ID where submissions are posted |
language |
Locale: "en" or "de" (see i18n) |
How to get IDs: Enable Developer Mode in Discord (Settings → App Settings → Advanced → Developer Mode), then right-click the server or channel and choose "Copy ID".
- Submit an image: Use
/submitor click the "Submit a picture" button (if an admin created it). - Create the button (admin only): Use
/createbuttonin the channel where you want the button. The bot will send a message with a "Submit a picture" button.
Users complete the flow in DMs: send the image, then the description. They can type "stop" to cancel.
| Command | Description | Who can use |
|---|---|---|
/submit |
Start a new image submission via DM | Everyone |
/createbutton |
Post a "Submit a picture" button | Admin only |
The bot uses i18n-light with locale files in locales/. Supported locales:
- English (
en) – default - German (
de)
Set language in config.js to "en" or "de". To add a language, create a new JSON file in locales/ (e.g. fr.json) following the structure of en.json.
Create an application in the Discord Developer Portal, create a bot, copy the token into config.js, and use the OAuth2 URL generator to invite the bot with the applications.commands and bot scopes and the permissions you need (e.g. Send Messages, Embed Links, Read Message History).
The embed shows the submitter’s username and avatar. For a more anonymous setup, you’d need to modify the bot (e.g. not setting author or using a generic label).
The user must have DMs from server members enabled (Privacy settings). The bot will tell them to enable DMs if it can’t send a message.
Any format Discord supports in DMs (e.g. PNG, JPEG, GIF, WebP). The bot forwards the first image the user sends in the submission flow.
This project targets discord.js v13. Migrating to v14 would require dependency and possibly code updates (e.g. embed and component APIs).
This project is licensed under the MIT License – see the LICENSE file for details.
Keywords: Discord bot, image submission, picture submission, Discord DM bot, slash commands, Node.js, discord.js, submission bot, art submission, photo contest, anonymous submission, i18n