mix dis if privacy
mix dis if is a Discord music bot with an unusual shape: the part that talks to YouTube runs on a computer belonging to a member of your server, signed in with that person’s own account. I run the part that talks to Discord. This page is the whole of what each part sees, what it keeps, and for how long. There is no account with me, no analytics, no listening history.
in your Discord server
A slash command reaches me with what Discord sends for any command: your server’s id, the channel you are in, your user id, your display name, and the words or link you typed. The user id is used to answer you and is not kept. Your display name travels with the track you queued, in memory, so the queue and the dashboard can say who asked for it, and it is gone when the track is.
Nothing you type outside a slash command reaches the bot. It does not read messages.
The audio plays into your voice channel through Discord’s voice servers, the same way a person’s microphone does. Discord’s own privacy policy covers what Discord does with that.
on the node
A node is the program a member of your server runs on their own computer. It is the only thing that ever contacts YouTube, and it does so as that person: each search and each download reads the YouTube cookies from the Firefox profile on that machine and sends them to YouTube, not to me. I never see the cookies, the account, or anything YouTube knows about it.
A node keeps on its own disk: a credential I issued it when it was paired, good for a year; a random instance id it generated, which is how I recognise the machine; a settings file if its owner made one; and the tools it manages, yt-dlp, Deno and ffmpeg. A downloaded track is a temporary file, deleted as soon as the node has handed it to me.
What a node tells me: which servers it serves, its version, its operating system, how many jobs it will run at once, and a label for the dashboard, which is the name its owner set or, if they set none, the computer’s hostname. For each job it sends back search results as YouTube described them, title, length, link, uploader, thumbnail address, or the audio bytes themselves, or why it failed.
what I keep
On a small disk in Stockholm, the list of paired machines: each one’s instance id, the servers it serves, its label, when it was paired, when it was last seen, and whether it has been revoked. That is the only thing I write to permanent storage.
Everything else lives in memory or on the machine’s temporary disk and does not survive a restart. The queue and what is playing are in memory. Audio a node has delivered is cached on the temporary disk, keyed by your server and the link, so a track played twice is fetched once; the cache is wiped whenever the service restarts or is redeployed, which is often, and is never backed up.
Logs are the hosting provider’s, kept briefly. They name servers and machines by id and carry error text when something fails, which can include the link or the title of a track that could not be played. They do not record what was played, or who asked for anything.
the dashboard
/dashboard answers you privately with a link that controls playback for
your server. The link carries a signed token good for two hours and tied to
your server; it carries nothing about you. Anyone holding it can control
playback until it expires, so treat it as you would a remote control left on
the table. A pairing code lasts ten minutes and works once.
The dashboard page is served by me and shows track thumbnails by loading them from YouTube’s image servers, so your browser contacts YouTube when the queue has thumbnails to show. It sets no cookies and runs no analytics.
every connection
This is the whole list.
| who | contacts | when |
|---|---|---|
| The bot (mine) | Discord | Always: commands in, audio out. Nothing else. |
| A node (yours) | mix-dis-if.gene.dev, mine |
While it runs, over one encrypted connection, for jobs and results |
| A node (yours) | YouTube | Each search and download, signed in as the node’s owner |
| A node (yours) | dl.gene.dev, mine, on Cloudflare |
Downloading its tools and its own updates, checked against checksums from mix-dis-if.gene.dev; it looks for updates every six hours |
| Your browser | mix-dis-if.gene.dev and YouTube’s image servers |
While a dashboard is open |
The service runs on Fly.io in Stockholm, fronted by Cloudflare. Downloads come from a Cloudflare bucket. Those three providers see the traffic that reaches them, under their own policies; none of them is given anything else.
not collected
No analytics, telemetry, crash reporting or usage statistics. No listening history. No message content beyond the command you ran. No cookies, no YouTube account, no email address.
your rights
Remove the bot from your server and everything about it is gone from memory at once; the cache goes at the next restart. Revoke a machine from the dashboard and it can no longer connect; write to [email protected] to have its entry deleted, or to ask what I hold about a server, which is the list above and nothing more.
children
The bot is for Discord, whose minimum age applies. Nothing is collected from anyone.
changes
The date at the top is the version in force. A new connection is added to the list above before the version that makes it ships.