Remove Ads

Secret Santa

Secret Santa




Vote (1)

Host Secret Santas in your server! Write a letter for your Santa, make/buy something for your giftee. Supports anonymous communication.

Secret Santa

Secret Santa is the bot to host Secret Santas with on Discord.


  • Easy to set up. People can join by command or reaction, and are assigned a role upon joining.
  • Supports latecomers. These can be assigned to each other or replace a Santa who has left.
  • Anonymous communication between a Santa and their giftee (the one receiving their gift).
  • Moderation. Get info about a specific participant, and ban them from the event if you must.
  • Privacy. All data is encrypted and deleted 30 days after the Secret Santa has ended.

The bot uses slash commands. Some commands in DM use the > prefix.

Quick Guide

  1. /setup to setup a Secret Santa.
  2. /invite to create an invite message.
  3. Participants use >letter [text] to write about themselves/what they want. (Participants use commands in the bot's DM)
  4. /start to start the Secret Santa.
  5. Participants use /read to read their giftee's letter.
  6. Participants use >submit [text] to submit their gift.
  7. /end to end the Secret Santa.
  8. Participants use /receive to receive their gift.
  9. /destroy to destroy the Secret Santa, deleting all data. Happens automatically 30 days after ending it.


Seting up a Secret Santa

After you have added the bot to your server you can create a Secret Santa using the moderator commands. To use these commands you need both the Manage channels and *Manage roles permission.

Use /setup to set up a Secret Santa. The bot will walk you through all the available configurations.


By default everyone gets their gift sent to their DMs, but you can also set the gifts to be revealed in the server instead.

Reveal channel

Use /reveal channel in the channel where you want the gifts to be revealed.

When a reveal channel is set the bot will not automatically send the gifts to participant's DM, and participants won't be able to use /receive until their gift has been revealed in the channel.

If you don't want to use a reveal channel anymore you can use /reveal channel remove True to remove the reveal channel.

Reveal type

Use /reveal what to set what part of the gift should be revealed in the reveal channel.

By default this is all, meaning the complete gift. But perhaps you have a Secret Santa where everyone makes art for each other. You want to show off the art, but the personal message that comes with that should be kept private. In that case you want to use images to only reveal the images attached to the gift.

Or perhaps everyone was instructed to make a poem for each other, but the gift should be kept private. In that case you want to use text.

After the gift has been revealed in the reveal channel the giftee to whom it belongs can use /receive in DM to receive the complete gift.

Reveal name

Use /toggle-reveal-name to turn on/off whether the name of the Santa should be revealed.

This is on by default, but you might want to have the participants guess as to who their Santa is after their gift has been revealed. When this is turned off 'Santa' will be used instead of their name.

This also won't reveal their Santa's name when they use /receive in DM to receive the complete gift.

Have people join the Secret Santa

When you're ready with setting it up you can start inviting people to join. Use /invite [text] to create an invite with a message and a button that people can click to join. If no text is provided for the message a default text will be used.

People who want to join should have 'Allow direct messages from server members.' turned on, or else the bot can't send them a DM. This is on by default.

Write a letter

People who have joined can write a letter using >letter [text]. This command, like with all commands for participants, is to be used in the bot's DM. For writing the letter you will have to use the > command, as the slash-command doesn't allow you to write multiple lines, nor does it allow you to edit your message.

What they should write in that letter is up to you as a host of the Secret Santa. In general, you probably want them to write something about themselves and what they like so that their future Santa will know what to buy or make. If file attachments are added when using the command then links to these files will automatically be added to the letter. As long as the Secret Santa hasn't started yet they can reuse the command to change their letter.

If someone changed their mind about participating they can leave using >leave in the bot's DM. If they changed their mind again they can join the same way as they joined before. Whether someone can join again after the Secret Santa has started is based on what you set /toggle-latecomers. This is on by default. If someone leaves after the Secret Santa has started they are automatically banned from joining again.

Start the Secret Santa

You can use /stats (in your server) to see how many people still need to write a letter. Use /list letter to get a list of participants who have yet to write a letter. Use /list all to get a list of all participants. When you're ready you can use /start to start the Secret Santa. Everyone will be assigned a Santa. As a Santa the one you need to give a gift is your giftee, and you are the giftee of your Santa. Note that they are assigned in a chain. No one's Santa is also their giftee, and it doesn't matter if you have an odd or even number of participants.

If you only have a few participants the bot will automatically DM everyone their giftee's letter. If you have lots of participants you should inform them that they can read their giftee's letter using /read. A taggable role set with /role would come in handy for this. The reason for this is that rate limits will not allow the bot to DM many people in a short period.

With /list read you get a list of participants who still need to read their giftee's letter. Send them a personal reminder, or if they take too long use /ban [ID] (in your server) to ban them from the Secret Santa. Note that the Secret Santa bot does no server moderation. They are not banned from the server.

You can unban participants using /unban [ID].

Discord ID

The ID-parameter is the Discord ID of the user. To get this ID you first need to turn on Developer Mode. In Discord go to User Settings -> Appearance -> Developer Mode. After you've enabled this you can right-click on a user to get their Discord ID.

Anonymous communication

Participants can communicate with their giftee using the command >write-giftee [text]. Giftees can reply back using >write-santa [text]. This is useful in case the Santa has some questions for the giftee.

If this feature is abused (e.g. spam, foul language) it should be reported to you, the host of the Secret Santa. Using the ID of the person complaining you can use /info [ID] (in your server) to find out who their Santa and giftee is. You can then ban the culprit from the Secret Santa using the abuser's ID.


If you have a bunch of people who joined after the Secret Santa had started you can assign them to each other using /assign-latecomers. You can use this command multiple times, but only when you have 3 or more latecomers.


When someone leaves or is banned after the Secret Santa has started they leave their Santa without a giftee and their giftee without a Santa. The Santa is offered to switch to the abandoned giftee using /switch. However, it might be the case that they already bought/made something for the giftee who left them. In that case, they can use /stay to stay with their old giftee.

While the Santa is still deciding, or if the Santa has decided to stay with their old giftee, latecomers come in handy. A latecomer (who doesn't have a giftee yet) will automatically be assigned as the Santa of the abandoned giftee. In turn, that latecomer still won't have a Santa. If there is another latecomer it will be assigned to the other latecomer. This can be repeated for as many latecomers there are. If the Santa whose giftee abandoned them eventually decides to /switch they will be assigned to the last latecomer in the chain, which closes the gap.

If this sounds confusing to you, don't worry. It all happens automatically!

Submit a gift

When a Santa has bought or made the gift for their giftee they can submit it using >submit [text]. If they have something physically sent to their giftees address the submission could simply inform them about it. Just like with letters the links to file attachments will automatically be added. This is useful if you made a drawing for example.

Even after the Secret Santa has ended participants can still submit their gift. However, they can't edit their gift after their Secret Santa has ended.

You can use /list submit to get a list of participants who have yet to submit their gift.

End the Secret Santa

Using /stats you can see how many people have submitted a gift. When you're ready you can use /end to end the Secret Santa. If you have a reveal channel set, you can use /start-reveal to get a button that allows you to show the gifts. If not, and you only have a few participants, then the bot will automatically DM everyone their gift. If you have lots of participants you should inform them that they can read their giftee's letter using >receive. Again the role comes in handy.

Destroy the Secret Santa

The letters written for the Secret Santa can contain sensitive information likes names and addresses. After everyone has submitted and received their gift you can use /destroy to destroy the Secret Santa. This will delete all the relevant data from the database. A Secret Santa is automatically destroyed 30 days after it has ended.

Reset the Secret Santa

After you have started a Secret Santa you can always reset it. This brings it back to the state before you started the Secret Santa, allowing you to start it again. Members that already joined won't have to rejoin the Secret Santa, and members that want to join can now do so. Note that by doing this everyone will be assigned to a random Santa again.

Resetting is useful when:

  • You just started the Secret Santa too early by accident. There were still a few people that wanted to join. You reset the Secret Santa, have them join, and then start it again.
  • You just finished the Secret Santa, and would like to do another Secret Santa with the same people (or more).
  • The majority of the participants would like a different giftee for whatever reason.


What happens when someone is in multiple Secret Santas?

By using /events the user can see a numbered list of Secret Santa events they are in. Using /select [number] they can select which Secret Santa their commands should be applied to. This way the user can participate in multiple Secret Santas just fine.

What is Secret Santa made with?

Secret Santa is made with Discord.js and Typescript.

Ratings & Reviews


7 reviews

Reviews can be left only by registered users. All reviews are moderated by Top.gg moderators. Please make sure to check our guidelines before posting.

5 stars


4 stars


3 stars


2 stars


1 star



about 2 years ago

its good but i wish we had the option to receive our gifts in a channel so its like opening a present with our friends


Secret Santa

Replying to nathan!

Thank you for your feedback. This feature has now been added!


about 2 years ago

Great bot! Worked perfect for a secret santa between me and my friends. Easy to use too!



about 2 years ago

good bot, 10/10 would recomend


antonio no!
antonio no!

about 2 years ago

best secret santa bot ive used. theres so many useful features that it helped run a whole 50-member secret santa event smoothly. really helpful dev too, answers all your questions in the support server



about 2 years ago

Enjoyed using the bot, thank you very much! Will use it in the future as well.



about 1 year ago

The bot is offline, why?



3 months ago

Letter command just keeps erroring out, can't use it at all.