Back to homepage

A look under the hood

Before you let a bot onto your server, you probably want to know what it actually does there. That's exactly what this page explains. What matters to you as a server owner comes first, and the technical underpinnings for anyone who wants the full picture follow further down.

Permissions

What permissions the bot gets

When you invite it, Discord asks for exactly six permissions. Administrator is deliberately not one of them, and that's not a small detail. With admin rights the bot could post in channels it's not actually supposed to. Without them, it can't even try.

View channelsRecognize where it's even allowed to respond
Send messagesReplies to commands, name-log entries
Embed linksThe profile cards are Discord embeds
Attach filesThe in-game image on the profile card
Read message historyNeeded to reply correctly in the channel
Send messages in threadsSo /share also works in threads

What it can't do with them

×
Manage membersNo kicking, banning, assigning roles, or renaming
×
Delete messagesNot even its own, apart from its short-lived dialogs
×
Change server settingsNo creating channels, no rearranging permissions
×
Read along day to dayIt reacts to its slash commands, not to regular chat messages

Discord decides who can use the setup commands based on your server roles: /setup and the other configuration commands require the "Manage Server" permission. Commands like /reset or /queue can only be run by the bot's operator, not by a server owner.

For server owners

Who can see your members' UUIDs

This is the most important decision you make for your server. A player UUID isn't a password, but it can be used to recognize someone across different servers. That's why you can decide how much of it strangers get to see.

Good to know: without any setting from you, the open level applies. If that's too much, change it right after inviting the bot with /setup.

Every member of the server sees the full UUID. Convenient, but it means the UUID can also be found outside your server.

Regardless of the level

Everyone always sees their own UUID in full. And anyone who hides via /privacy doesn't show up in any list.

This is what another member sees

Honestly

Where the bot hits its limits

The store doesn't offer an official interface. That's why the claimer drives a real browser and clicks through it like a human would. That works reliably, but it has quirks you should know about beforehand.

  • If the store changes its look, the code has to followIf a button gets renamed or moved, the flow can run into a dead end until the code is adjusted. Errors land in the log, and the operator gets notified.
  • The bot speaks GermanIts replies, profile cards and DMs are in German only. This page is translated, the bot itself is not. The example card above shows what you actually get.
  • Only the free giftsThe bot only touches cards that cost nothing: the daily gift and, while one exists, the gift of the current season. It doesn't buy anything, redeem codes, or do anything else in the store.
  • Automation remains a grey areaActivision doesn't offer an interface for this and doesn't comment on it either. A residual risk can't seriously be ruled out. If you don't want to take it, you can still collect your gift by hand.
  • Registrations are throttledEvery check is a real visit to the store. That's why at most two run at the same time, and across all users combined it's at most 40 in 10 minutes. If there's a rush, you get a short message and can try again a little later.

Step by step

What happens when someone types /register

There are four stations between hitting submit and the finished profile card. Click through to see what's checked at each one.

Does this even look like a UUID?

First, the bot just looks at the characters. A player UUID is 15 to 20 digits, nothing else. If you typo it, you get told right away.

This check costs nothing and doesn't need a browser. It filters out typos before anything expensive begins.

no network answer in milliseconds

The architecture

Why it's two programs instead of one

The Discord bot and the part that collects the gifts are two separately running programs. They never talk to each other directly. Instead, each one leaves behind files that the other reads.

The reason lies in the runtimes. A Discord command has to be answered within seconds, while a store visit takes noticeably longer. If both lived in the same program, every collection run would block the chat.

Discord your members Discord bot answers instantly always online Bot writes registrations.json commands.json Claimer writes profiles.json claim_events.json Claimer drives the browser collects the gifts COD:M Store commands writes reads writes reads calls The bot and the claimer never talk to each other directly
Every file has exactly one program that's allowed to write to it. The bot, for example, never touches the collection history, and the claimer never touches the registrations. That way the two can't get in each other's way, even when they're working at the same time.

Operator commands take a detour through a mailbox

When the bot's operator triggers /claim all, the bot can't run that itself, because only the claimer is allowed to touch the collection history. So the bot drops the request into commands.json, numbered sequentially. The claimer remembers which number it last handled and only processes what's newer.

That's why the bot honestly replies to such commands with "queued" instead of "done." Nothing gets lost, but it only happens on the next run.

FileWho writes itWhat's in it
registrations.jsonBotWhich UUID belongs to which Discord account, plus the personal list opt-out and notification preference
profiles.jsonClaimerLast seen name, level, and rank, plus the history of name changes
state.jsonClaimerWhen an account was last collected and when it's due again
commands.jsonBotThe mailbox for operator commands, append-only, never deleted
server_settings.jsonBotPer server: channels, visibility level, verified role, granted consents

The schedule

What happens every night

The store resets the gifts for everyone at the same time, namely at midnight UTC. Two minutes later, the claimer wakes up and works through the registered accounts one after another. There's a pause of a few seconds between accounts, so everything doesn't hit the store at once.

For each account, it checks for both gifts. The daily one comes back every night, the season gift only exists once per event. It doesn't need to remember whether it's already been collected: redeemed cards are marked as such in the store, and it checks for that before every click. As long as the mark is there, it leaves the card alone.

After that, the claimer goes back to sleep. The Discord bot, on the other hand, stays online the whole time, since commands can come in at any moment.

If something goes wrong, for instance because the store isn't reachable right then, the claimer waits a while and tries again. The planned time stays untouched in that case, because an estimated time would be worse than none at all.

Still have questions? The command overview on the homepage shows what members and admins can each do.

🎁 Invite bot