shrkbotshrkbotv3.13.0

Privacy policy

Last updated: October 28th, 2026

This policy explains what the shrkbot Discord bot and its web dashboard (together, the "Service") store, why, and the choices you have. It's written to be readable rather than dense - if anything is unclear, contact us.

The Service is operated by Tim Engelhardt, the data controller under the EU General Data Protection Regulation (GDPR).

Who this applies to

  • Server members: people in a Discord server that shrkbot has been added to. shrkbot may process limited data about you because of features an admin has enabled.
  • Dashboard users: people (usually server admins) who sign in to this website with Discord to configure the bot.

What personal data we store and why

Each feature stores only the personal data it needs:

  • Server configuration: a cached copy of the server's channels and roles, mirrored from Discord so the dashboard can show and apply your setup. Their permission overwrites can reference member Discord IDs. We also keep the free text admins write into their settings, such as welcome messages and a custom scam-keyword list.
  • Dashboard account: when you sign in with Discord we store your Discord ID, username, display name and avatar reference. We request only the identify and guilds OAuth scopes - we never receive your email, password or messages. Your Discord access token is held only in an encrypted session cookie in your browser (valid two weeks), never in our database, and is used solely to read which servers you manage.
  • Reminders: the reminder text you write, your Discord ID, the target channel and server, whether to deliver by DM, and the due time - kept until delivered or deleted by you with /unremind.
  • Welcome messages: on servers that use Discord's membership screening, a short-lived in-memory note that a member has joined but not yet finished onboarding - the server ID and their Discord ID, nothing else. It exists so the welcome can wait until they finish, which is what makes the greeting name them correctly. It is never written to disk. When a member is kicked or banned, we also make a short-lived in-memory note of the server ID and their Discord ID, so that a server which has turned off leave messages for removals can tell a kick from a voluntary leave. This is never written to disk either.
  • Looking for Game: who joins a post lives entirely in the Discord message, under Discord's retention — we never store joiners or post content. A short-lived in-memory cooldown per member (minutes) throttles spam and is never written down.
  • Twilight Struggle integration: for each server that subscribes to a tournament, we store the message templates it writes. The result details - player names, flags, Discord IDs and dates - are never stored on the tournament or game record. They exist only in the queued job that posts the message and in our technical logs (see operational data above). We also store the Discord IDs of a tournament's organisers, when twilight-struggle.com sends them, so that an organiser can configure this integration on the servers subscribed to their tournament without being a Discord admin there. Setting a Discord ID on twilight-struggle.com is optional: an organiser who sets none has no record here, and their tournament is configured by the server's own admins.
  • Steam news: shrkbot keeps the posts it fetches from Steam, including each author name as published and the post text, so it can announce them. It also keeps any custom message text a server writes for a followed game. The Steam pages on the website load each game's header image straight from Steam's servers, so Steam sees the IP address of the browser that opens the page.
  • Operational data: background jobs briefly process the data above while running; a failed job may keep a short error record for up to 30 days. The Service keeps technical logs for security and troubleshooting: IP address, timestamp, browser type and the details of each request it receives. For the Twilight Struggle integration, those details are the results and tournaments twilight-struggle.com sends, including player names and the Discord IDs of players and organisers, so that an incorrect result can be traced back to exactly what arrived.

Message content

shrkbot uses Discord's message-content intent so that servers can enable automated moderation. When an admin turns that feature on, shrkbot reads new messages, including, using optical character recognition (OCR), text contained in posted images, to check them against the server's rules. On servers that don't enable moderation, messages aren't processed at all.

This scanning happens in real time and in memory only: we do not store or retain message content, images, or text extracted from images. Once a message has been checked, its content is discarded. We keep no message history, no message logs, and no copies of your server's conversations.

If automated moderation acts on a message, shrkbot can post a moderation log entry to a channel your admins designate. That entry may include the offending message or the text extracted from an image so moderators can review it - it is delivered as an ordinary Discord message and is therefore stored by Discord in that channel, not retained by shrkbot. A short record that an action occurred (without the message content) may also appear in the dashboard. The entry names the member involved by mention and username; the username is rendered into the message and not stored by shrkbot.

The bot also receives member join and leave events to deliver welcome messages; the username shown there is rendered into the message and not stored.

To recognise repeat scam images, shrkbot stores a perceptual hash (a short numeric fingerprint that cannot be turned back into the image) of images a server's moderators explicitly confirm as scams, together with which servers confirmed them. These fingerprints are never linked to the user who posted the image, are deleted when every confirming server has removed the bot, and are pruned automatically after 180 days without a match. The bot owner may also mark images as global scams; their perceptual hashes are stored indefinitely as a cross-server blocklist and are treated the same as scams a server's own moderators confirmed, so a match can trigger that server's configured action (flagging, removal, and any punishment). These hashes are not linked to any user or server.

Game results sent to us by twilight-struggle.com for the Twilight Struggle integration include player names and, if provided, players' Discord IDs. These are rendered into the Discord messages we post, one per subscribing server - a Discord ID lets us mention that player. They are held only in the queued jobs that post the messages, so that a Discord outage can be retried rather than losing the result, and are cleared once each has posted. The posted messages are ordinary Discord messages, stored by Discord in their channels; deleting the game through the integration deletes them, deleting its tournament does not.

What we don't do

We don't sell data, we don't advertise, we don't profile you, we don't run analytics, and we don't store your servers' member lists or conversations.

Legal bases

Where the GDPR applies we rely on performance of the service (Art. 6(1)(b) - providing the features you or your admins enable) and legitimate interests (Art. 6(1)(f) - operating, securing and debugging the Service). You can object to processing based on legitimate interests; see "Your rights".

Who we share data with

Only the infrastructure that runs the Service: Discord itself, through its API (your use of Discord is governed by Discord's own privacy policy), and our hosting provider Hetzner (Helsinki, Finland, within the EEA), where the Service and its database run. We may disclose data where required by law.

How long we keep it

  • Server configuration: deleted automatically, in full, the moment the bot is removed from the server.
  • Reminders: deleted once delivered, or earlier if you delete them.
  • Pending-join notes: discarded the moment the welcome is sent or the member leaves, after 24 hours either way, and on every restart. They live in memory only and are never written down. Kick and ban notes are discarded as soon as the leave message is decided, after 30 seconds either way, and on every restart.
  • Looking for Game: cooldowns live in memory only and vanish on restart. The posts themselves are ordinary Discord messages, kept by Discord until they expire or are deleted.
  • Twilight Struggle integration: the result details held in a queued posting job are cleared within an hour of the message going out; if posting keeps failing, the job is discarded within 48 hours. A server can delay posting by up to a week, and the posting job holds the result details until then. The copy in our technical logs is deleted after at most 7 days. Organiser Discord IDs are kept for as long as twilight-struggle.com keeps sending them - each tournament update replaces the set we hold for that tournament - and are deleted with the tournament.
  • Steam news: fetched posts are deleted 14 days after they are fetched. A server's custom message text is deleted with the rest of its configuration.
  • Confirmed scam-image fingerprints: pruned 180 days after they were last matched, and removed once every server that confirmed them has removed the bot. Global scam fingerprints set by the bot owner are retained indefinitely.
  • Dashboard account: kept until you delete it on your account page.
  • Caches, background-job records and logs are cleared automatically (at most 60 days, 30 days and 7 days, respectively). Deleted data also drops out of database backups as they rotate.

Deleting your data

Erasure is self-service:

  • Remove the bot from a server to delete that server's configuration.
  • Delete individual reminders with /unremind.
  • Delete your dashboard account and your reminders with the "Delete my account" button on your account page.
  • Deleting your account also deletes any tournament-organiser Discord ID we hold for you. That removes what we have; because the ID lives on twilight-struggle.com, a later update from there can send it to us again - removing it there is what stops us receiving it.
  • Or contact us (see below) and we'll take care of it.

Your rights

Under the GDPR you have the right to access, correct, delete, restrict or object to our use of your personal data, and the right to data portability. You also have the right to complain to a supervisory authority - in Germany, your regional data protection authority. To exercise any of these, contact us (see below).

Security

Data travels over encrypted (HTTPS/TLS) connections and database access is restricted to the operator. No system is perfectly secure, so we can't guarantee absolute security, but we take reasonable measures and will notify affected users of a serious breach where the law requires it.

Cookies

We set two cookies: the essential encrypted session cookie described above, and a small flag (valid one year) remembering that you dismissed our cookie note. No tracking, no third-party cookies. Your browser also keeps a few purely local preferences in localStorage — your theme choice and collapsed-panel state. These never leave your device and we never read them server-side.

Children

shrkbot isn't directed at children. You must meet Discord's minimum age requirement (at least 13, or older where your country requires) to use Discord and the Service.

Changes

If this policy changes, the new version is published here with an updated date; for significant changes we'll try to give notice through the Service.

Contact

Tim Engelhardt - info@shrkbot.com / support server