Dior’s Builds
Data

Privacy Policy

Effective 29 July 2026Revision 1.1Ontario, Canada

The short version

We store your Discord user ID and your display preferences — timezone, visibility toggles, region, and colour settings. That's essentially it.

We cannot read your messages. The Bot doesn't have Discord's Message Content permission, so message text is technically inaccessible to us, not merely unused.

Your data is stored in Canada. No advertising, no analytics, no tracking, no cookies, no profiling, and nothing is sold or shared for marketing.

You can have everything deleted by emailing harkirat117@gmail.com — see §9.

This summary is for convenience. The sections below are the actual policy.


Who is responsible for your data

The data controller is:

Harkirat Mangat, also known as "dior" or "diorswrld", an individual based in Ontario, Canada. 📧 harkirat117@gmail.com

This is a hobby project run by one person. There is no company, no data protection officer (none is required — we do not carry out large-scale or systematic monitoring), and no privacy team. Email reaches a real person.

EU representative

We have not appointed an EU representative under GDPR Article 27. We rely on the exemption in Article 27(2)(a): our processing is occasional, does not include special-category or criminal-conviction data on any scale, involves only a user ID and display preferences, and is unlikely to result in a risk to the rights and freedoms of individuals.

If that assessment ever stops being accurate, we will appoint a representative and update this policy. EU and UK users can reach us directly at the address above, and we answer.


What we collect

Information stored about you

Everything below lives in a single UserPreference record keyed to your Discord user ID. A record is only created once you actually use the Bot.

DataWhat it isWhy we have it
Discord user IDYour permanent numeric Discord IDThe key linking your preferences to you. Required.
TimezoneAn IANA timezone you set (e.g. America/Toronto)So /timestamp and countdowns show correct local times
Timestamp styleYour preferred timestamp formatRemembers your /timestamp choice
Visibility settingsPublic or private replies, per feature groupRemembers whether you want replies others can see
Region preferenceYour CP pricing region, and whether it's pinnedShows the right prices without re-selecting
Calendar filterActive-events-only vs all eventsRemembers your /calendar toggle
Accent colour styleWhich colour source you've chosenControls how your messages are coloured
Cached colour valuesHex codes and 6-swatch palettes derived from your Discord profile imagesAvoids re-analysing your avatar on every command
Colour source hashesThe Discord asset hash a cached colour was computed fromDetects when you change your avatar so the cache refreshes

Is a Discord user ID personal data? Yes — we treat it as such. It's a persistent unique identifier that can be linked back to you, which brings it within GDPR Art. 4(1) and PIPEDA's definition of personal information. We say so rather than arguing otherwise.

About the colour data specifically

If you use the accent-colour or "View Colors" features, the Bot downloads your Discord avatar, banner, avatar decoration, or nameplate image and analyses it to extract dominant colours.

  • The images themselves are never stored. Fetched, analysed in memory, discarded.
  • Only the resulting colour values are saved — hex codes and palettes.
  • Display Name colours are the two colours you picked in Discord's Nitro settings, stored as-is rather than extracted from an image.
  • The stored "source" value is Discord's own asset hash, used purely to notice when you've changed your image.

Temporary data held in memory

Exists only in the server's memory while it runs, and is lost on every restart or deploy (typically hours to days):

  • Anti-spam cooldown timestamps (your user ID → time of your last interaction)
  • A short-lived cache of your Discord profile data
  • A per-message colour choice, so a message keeps its colour when you click buttons

Operational logs and alerts

The Bot keeps an alert log of technical events — crashes, database problems, gateway disconnects, daily health checks — recording the alert level, a description, timestamps, process memory use, and uptime. Alerts are also posted to a private Discord channel that only the administrator can see, via a Discord webhook.

These concern the bot's health, not you. However, an error captured in a crash report could incidentally contain a Discord user ID if the failure happened while processing that person's command. This isn't deliberate, and these logs are never used to analyse users.

Alert logs are automatically deleted after 30 days.

Server logs (Google Cloud Logging)

The server the Bot runs on ships its console output to Google Cloud Logging, where it is retained for 30 days and then automatically deleted. These are operational logs — startup and shutdown events, command routing, errors and stack traces, database connection state, and the running version and commit.

As with alert logs, an error or stack trace could incidentally contain a Discord user ID if the failure occurred while processing that person's command. We verified that no log statement in the Bot deliberately writes a user ID, but an error object can carry one. These logs are not indexed by user, are never used to analyse or profile users, and are readable only by the administrator.

If you use GitHub

Filing an issue or pull request on our GitHub repository means GitHub processes your data under GitHub's Privacy Statement. That's GitHub's processing, not ours, and it is entirely separate from using the Bot.

The repository's visibility may change at any time, without notice. It may be public or private at any given moment, at the maintainer's discretion. If it is public, anything you post there is visible to anyone. This policy, the Terms of Service, and the Bot's behaviour do not depend on that setting — they apply identically either way, and these documents remain published at their permanent public URLs regardless.


What we do NOT collect

❌ We do not haveWhy
Your messagesThe Bot runs with only the Guilds gateway intent. It does not have the Message Content intent, so Discord never sends us message text. A technical impossibility, not just a policy promise.
Your DMsSame reason.
Your email addressNever requested, never received from Discord.
Your real nameNever requested.
Your Discord username or display nameUsed momentarily to render a response, never written to the database.
Your IP addressDiscord handles the connection; we never see it.
Payment informationThe Bot is free and has no payment feature.
A list of your serversNot collected or stored.
Analytics or tracking dataNo analytics SDK, no telemetry, no tracking pixel, no ad network, no fingerprinting.
CookiesThere is no website. The Bot runs entirely inside Discord and sets no cookies or similar storage on your device.
Voice data, location, contacts, or biometricsNot applicable, not collected.

We do no profiling, no behavioural advertising, and no automated decision-making producing legal or similarly significant effects (GDPR Art. 22).


Why we process it, and our legal basis

PurposeLegal basis (GDPR Art. 6)
Remembering your preferencesConsent — you chose to set them (Art. 6(1)(a))
Making the Bot work when you invoke a commandContract — the Terms of Service (Art. 6(1)(b))
Keeping the Bot secure and stable (cooldowns, crash logs)Legitimate interests — running a functioning, non-abused service (Art. 6(1)(f))
Complying with legal obligationsLegal obligation (Art. 6(1)(c))

No special category data (Art. 9) is processed — no health, biometric, racial or ethnic origin, political, religious, or sexual-orientation data.

Under PIPEDA, our basis is your implied consent: you install the Bot and set a preference, and we store it for the obvious purpose of honouring it. You can withdraw consent at any time (§9).

A note on PIPEDA's scope. PIPEDA applies to organisations collecting personal information "in the course of commercial activity." This Bot is free and non-commercial, so PIPEDA arguably doesn't bind us at all. We comply with it regardless, and don't rely on that argument to hold anything back.


Who your data is shared with

We do not sell your data. We do not share it for advertising or cross-context behavioural advertising. We do not disclose it to data brokers. We have never done so, and we have no plans to.

ProviderWhat it handlesWhere
Discord Inc.The platform itself — your ID, your interactionsPer Discord's Privacy Policy
MongoDB Atlas (MongoDB, Inc.)Stores your preference record🇨🇦 Azure Canada Central (Toronto)
Google Cloud Platform (Google LLC)Hosts the server the Bot runs on🇺🇸 us-east1 (South Carolina)
Google Cloud Logging (Google LLC)Server logs, 30-day retention🇺🇸 United States
Google Cloud Vertex AI (Google LLC)Admin-only image extraction — no end-user data🇺🇸 United States
Cloudinary Ltd.Hosts cached game images only🇺🇸 United States
Cloudflare, Inc.Serves these legal documents as a public web pageGlobal edge network

About Cloudflare: it hosts this policy and the Terms of Service so they are publicly readable, as Discord requires. It has no role in the Bot itself and never sees your Discord data. Like any web host, it processes standard request data — including your IP address — when you load these pages, under Cloudflare's privacy policy. Reading this page is the only thing that involves them.

Three clarifications worth making

Your stored personal data stays in Canada. The UserPreference records — the only place your preferences live — are in an Atlas cluster hosted in Azure Canada Central, Toronto. Verified 2026-07-28 21:36 EDT by resolving the cluster's DNS records.

Cloudinary holds no personal data. The images there are game screenshots and weapon artwork supplied by the administrator. Your avatar is never uploaded.

No AI system processes your data. The /autobuild command sends screenshots to a Gemini model for text extraction, but it is restricted to the administrator's own Discord account. No end-user data, image, or message is ever sent to any AI service.

Two details that matter here:

  • We call Google Cloud Vertex AI (aiplatform.googleapis.com, project-scoped, service-account authenticated) — not the consumer Gemini API (generativelanguage.googleapis.com). The distinction is important: under the Google Cloud terms that govern Vertex AI, Google does not use customer data submitted to Vertex AI to train its models. The consumer Gemini API's free tier has materially weaker terms in this respect. We use the enterprise path.
  • Separately, AI tools were used to help write this project's code and documentation — see NOTICE §6. That is development-time assistance, not runtime processing of your data.

If a provider mishandles your data

We choose our providers carefully and rely on their published privacy terms and data processing agreements. But we are one person, and we have no ability to audit, inspect, or control what Discord, Google, MongoDB, or Cloudinary actually do inside their own systems.

So, plainly:

  • Discord is an independent controller of its own data, not our processor. What Discord collects about you through using Discord — far more than we ever see — is governed by Discord's Privacy Policy and is Discord's responsibility, not ours.
  • Our other providers act as processors on our instructions, under their own data processing agreements. We do not authorise any of them to use your data for their own purposes, and we have not agreed to any such use.
  • If a provider acts outside those terms, that is their breach. To the fullest extent the law allows, we are not liable to you for it. Our liability to you in any event is limited by §15 of the Terms of Service.
  • What we will do: if we learn a provider has mishandled your data, we will investigate, tell you where §8.1 requires it, notify the relevant regulator where required, and change provider where that's the right answer.

Being honest about a limit of this section. If data protection law applies to us, we are the controller, and a controller carries responsibility for choosing and overseeing its processors that it cannot simply disclaim in a privacy notice. This section allocates contractual risk between you and us and tells you the truth about what we can and can't control. It does not, and cannot, override any obligation the law places on us, and we don't pretend otherwise.

Other disclosure

We may disclose information where legally required — a valid court order, subpoena, or law-enforcement request under Canadian law — or where necessary to investigate a security incident or protect someone's rights or safety. Given what we hold, such a request would yield very little. Where we are lawfully permitted to tell you about such a request, we will.

If the Bot were ever transferred to another operator, your data could transfer with it. We would give notice first, and you could delete your data beforehand.


International transfers

Your stored preferences do not leave Canada. They sit in Azure Canada Central.

Some processing happens elsewhere: the server that runs the Bot is in the United States (Google Cloud us-east1), so your data is handled in memory there while a command runs. Discord operates globally and handles your data under its own policy.

If you are in the EEA, the UK, or Switzerland: Canada holds a partial adequacy decision from the European Commission for organisations subject to PIPEDA, which means transfers to Canada are recognised as offering adequate protection. For the US-based processing, we rely on Google's transfer mechanisms — Standard Contractual Clauses and the EU–US Data Privacy Framework — as set out in the Google Cloud data processing terms.

Given the data involved is a user ID and colour preferences, the practical risk of these transfers is low.


How long we keep it

DataRetention
Your preference recordKept until you ask us to delete it — see §9
Alert logs30 days, then automatically deleted
Server logs (Google Cloud Logging)30 days, then automatically deleted
In-memory cachesUntil the next restart or deploy — hours to days
Cloudinary game imagesUntil the underlying content rolls out of the Bot's history

An honest disclosure about deletion

There is currently no automated deletion and no self-service delete command.

Removing the Bot from your Discord account stops all future interaction, but does not by itself erase your stored preferences — they simply sit unused.

Deletion is currently handled manually, on request, by email. That is a legitimate and compliant route — the law requires that you be able to exercise the right, not that a button exist — but we consider the absence of self-service a shortcoming rather than a design choice. A /settings delete option and an automatic clean-up of long-dormant records are planned, and this policy will be updated when they ship.

/settings currently lets you change stored values, which overwrites them. It has no reset or delete.


Security

What actually protects your data:

  • Credentials live in environment variables, never committed to the repository; the secrets file is permanently excluded from version control.
  • Database access is restricted and authenticated.
  • All connections to Discord, MongoDB, Cloudinary, and Google Cloud use TLS.
  • Administrative commands are locked to a single hard-coded Discord ID — no one else can reach the management, alerting, or automation features.
  • Rate limiting and cooldowns guard against abuse.
  • Only one bot instance may run at a time, enforced by a database lock.

The limits, stated plainly: this is a personal project on a single small server. There is no formal information-security programme, no penetration testing, no SOC 2 audit, and no 24/7 monitoring. No system is perfectly secure, and we cannot guarantee absolute security.

The mitigating factor is that there is very little to lose — a public Discord ID and some colour preferences. No passwords, no emails, no payment details, no message content.

If there's a breach

If a breach creates a real risk of significant harm, we will:

  1. Report it to the Office of the Privacy Commissioner of Canada as PIPEDA requires, and keep a record of it.
  2. Notify affected users through the Bot or the project's public channels, without undue delay.
  3. For EEA/UK users, notify the relevant supervisory authority within 72 hours where GDPR requires it, and notify you directly where the risk is high.

Your rights and how to use them

Whoever and wherever you are, you can ask us to do all of the following. We apply the strongest standard to everyone rather than sorting users by jurisdiction.

RightWhat it means
🔍 AccessGet a copy of everything stored about you
✏️ CorrectionFix anything inaccurate
🗑️ DeletionHave your record erased entirely
📦 PortabilityReceive your data in a machine-readable format (JSON)
Object / restrictObject to legitimate-interests processing, or ask us to pause it
↩️ Withdraw consentAt any time, without affecting past lawful processing
🚫 Non-discriminationWe will not degrade the Bot for you for exercising a right

How to make a request

Email harkirat117@gmail.com with the subject line "Privacy Request", and include:

  1. Your Discord user ID — the numeric one. In Discord: Settings → Advanced → enable Developer Mode, then right-click your own name and "Copy User ID".
  2. What you want — access, correction, deletion, a copy of your data, or withdrawal of consent.

That's the whole process. There is no form, no account, and no fee.

Verifying it's really you

Because a Discord user ID is public, we need to know the request actually comes from the account holder before we act on it — otherwise anyone could delete someone else's settings.

We will ask you to confirm the request from the Discord account in question, normally by sending a direct message to the administrator (dior, also seen as diorswrld) from that account referencing your email. If we can't reasonably verify you, we may decline to act, and we'll tell you why (GDPR Art. 12(6)).

This step exists to protect you, not to obstruct you.

Timing

  • We respond within 30 days.
  • Complex requests may be extended by up to a further 60 days, and we'll tell you within the first 30 if that happens (GDPR Art. 12(3)).
  • Requests are free. We may charge a reasonable fee for, or refuse, requests that are manifestly unfounded or excessive — particularly repetitive ones (GDPR Art. 12(5)). We'll explain if we ever do.

What deletion actually does

We delete your UserPreference record entirely. Your preferences revert to defaults, and the Bot behaves as though you'd never used it. Nothing is retained in a shadow copy.

Two honest caveats:

  • Alert logs and server logs may briefly contain an incidental user ID (§2.4, §2.4a). Both purge automatically within 30 days and neither is indexed by user, so we do not routinely search them. Ask and we will.
  • Database backups maintained by MongoDB Atlas may retain a copy until they age out on Atlas's own schedule. We cannot selectively edit a backup, which is a normal and accepted limitation.

Complaints

If you're unhappy with how we've handled your data, please tell us first — but you have every right to go straight to a regulator:

A note on California

The CCPA/CPRA applies to "businesses" meeting thresholds — over $25M in annual revenue, personal information on 100,000+ consumers, or 50%+ of revenue from selling personal information. We meet none of them, so the CCPA does not apply to us as a matter of law.

We honour the equivalent rights anyway. For the record, in CCPA terms: the only category of personal information we collect is identifiers (a Discord user ID) plus user-set preferences; we collect it directly from your use of the Bot; we use it solely to operate the Bot; we do not and have never sold or shared personal information; and we do not collect sensitive personal information.


Children's privacy

The Bot is not directed at children. You must meet Discord's minimum age for your country — 13 in most places, and 14, 15, or 16 in parts of the EU and elsewhere. See §3 of the Terms of Service.

We do not knowingly collect data from anyone below that age, and we have no mechanism to verify age beyond Discord's own — we rely on Discord's enforcement of its minimum age.

If you believe a child's data is stored, email harkirat117@gmail.com and we will delete it promptly and without requiring the verification steps in §9.2.

Because we never collect names, emails, photographs, or message content, the data we hold about any user — including a young one — is limited to a Discord ID and display preferences.


Third-party links and content

The Bot displays images and information sourced from third parties and may link elsewhere. We are not responsible for the privacy practices of any third-party site or service. Discord's own handling of your data is governed by Discord's Privacy Policy, which is worth reading — it covers far more data than we ever see.


Changes to this policy

We may update this policy. When we do:

  • The effective date and version at the top change.
  • The full change history is kept in the repository's git log.
  • For material changes — new data collected, a new recipient, a new purpose — we will make reasonable efforts to give notice before they take effect, and will seek fresh consent where the law requires it.

Continued use after a change takes effect means you accept the updated policy. We will not apply a materially different use of already-collected data retroactively without your consent.

Revision history

Kept here as well as in git, because the repository's visibility can change and a change record you can't reach isn't a change record.

VersionEffectiveWhat changed
1.129 July 2026Noted the controller's diorswrld alias in §1, §9, and §13. No change to what is collected, why, who receives it, or how long it is kept — the stored fields in Appendix A are identical to version 1.0.
1.028 July 2026First published version.

Contact

Harkirat Mangat ("dior", "diorswrld") — Data Controller Ontario, Canada 📧 harkirat117@gmail.com

Email is the canonical contact and always reaches us. We deliberately don't list a repository link here, because the repository's visibility can change (§2.5) and a contact point in a privacy policy must not be able to go dead.

For privacy requests, use the subject line "Privacy Request" and include your Discord user ID.


Appendix A — Complete data inventory

Every field stored about a user. This mirrors the UserPreference schema, which you can read yourself at models/UserPreference.js.

Identity

  • discordId — your Discord user ID

Preferences

  • timezone, timestampStyle
  • loadoutVisibility, seasonalVisibility, timestampVisibility, settingsVisibility
  • defaultRegion, defaultRegionMode
  • calendarEventFilter
  • accentColorStyle

Cached colour values (derived, not raw images)

  • avatarColorHex / avatarColorSource
  • bannerColorHex / bannerColorSource
  • displayNameColorHex / displayNameColorSource
  • decorationColorSource, nameplateColorSource
  • avatarPalette, bannerPalette, decorationPalette, nameplatePalette (+ source hashes)

That's the whole list. It mirrors the schema in the source code rather than paraphrasing it, so it can be checked line-by-line against the software itself. If you have access to the repository you can verify it directly; if you don't, ask and we will show you the relevant file.


Appendix B — Change history

VersionDateChange
1.028 July 2026Initial policy.

Future revisions will be listed here. The complete drafting history is kept in the repository's git log.


Appendix C — How each claim was verified

A privacy policy is a set of enforceable representations. Saying more than is true is worse than saying nothing. Every factual claim in this policy was checked against the running software rather than asserted, and this table records how.

ClaimHow it was verified
We cannot read your messagesThe Discord client is constructed with GatewayIntentBits.Guilds only — no Message Content intent. Verified in index.js.
No analytics, telemetry, or trackingSearched the codebase for analytics and error-reporting SDKs (Sentry, PostHog, Mixpanel, Google Analytics). None present.
The exact fields we storeRead directly from the UserPreference Mongoose schema. Appendix A is a transcription of it, not a summary.
Alert logs deleted after 30 daysRETENTION_DAYS = 30 in utils/alertStore.js, with a matching deleteMany on createdAt.
Server logs deleted after 30 daysGoogle Cloud Logging default retention, as relied on by scripts/vmstatus.sh.
Your data is stored in CanadaResolved the Atlas cluster's DNS records to mtm-azure-**canatral**-… — Azure Canada Central, Toronto.
Cloudinary stores in the USCloudinary's published documentation: standard accounts default to US storage; EU residency is an Enterprise option.
We use Vertex AI, not the consumer Gemini APIThe request endpoint in utils/visionExtract.js is aiplatform.googleapis.com, project- and location-scoped — not generativelanguage.googleapis.com.
No AI receives end-user data/autobuild is the only AI call site and is gated on the administrator's Discord ID.
Admin commands are locked to one accountALLOWED_ADMIN_ID guards in commands/manage.js, commands/autobuild.js, and the central interaction router.
There is no automated deletionSearched for every deleteOne / deleteMany / findOneAndDelete in the codebase. None operates on UserPreference. This is why §7.1 discloses a shortcoming instead of claiming a capability.
/settings has no reset or deleteSearched commands/settings.js for reset/restore-default handling. None exists — it only overwrites individual values.
No cookiesThe Bot has no web surface. Cloudflare serves these documents; that is the only web interaction.

Where we could not verify something, we said so rather than guessing — see the backup-retention caveat in §9.4 and the honest limits stated in §5.2, §7.1, and §8.

You are welcome to check any of this yourself, or to ask us to show you the relevant code.


Dior's Builds is an unofficial fan project and is not affiliated with Activision Publishing, Inc. or Discord Inc.