Privacy Notice

Version 3.10 — effective 31 August 2026

This notice describes what this owaua instance actually does with personal data, according to the code that is running. Public copy: https://owaua.com/owaua/privacy. Contact: ckazros@owaua.com.

The controller of the SQLite database on this instance is the private operator who runs the bot, reachable at the contact above. Discord, Daki Hosting (Germany), Cloudflare (public web), and any configured AI or search providers are separate organisations. owaua does not sell personal data. There is no advertising SDK in the bot.

1. What this does not cover

2. What we receive from Discord on every use

When you mention the bot, DM it, or run a command, Discord delivers at least: your user id, username, global/display name, the message or slash input, timestamps, channel and guild ids and names, and whether you have relevant permissions. If you are a server member, the bot may also read up to 25 role names, your top role, join date, and account creation date to build a speaker profile for the model. Attachments you include can be downloaded. Voice features read voice-state (who is in which channel).

If a server administrator enables Action Log, the bot can send private Discord log-channel embeds for server audit entries and observed gateway events. Depending on that server's dashboard choices, these can include actor and target ids, roles, channel activity, reasons, before/after values, edited or deleted message text, attachment links, and copies of previewable media, reactions, command use, voice-state changes, and bounded samples from bulk deletions. These embeds are sent back to the administrator-selected Discord log channel and are not copied into a separate owaua SQLite action-log table. Discord controls how long those channel messages remain. Administrators can disable event families, message content, attachment links, audit changes, bot events, or individual channels, roles and users.

When the malware-scanner module is enabled, the bot inspects every attachment it receives in that server or DM before normal bot processing. The bytes are written to an owner-only temporary file. A file is excluded as media only when its Discord MIME type, filename extension, and local binary signature agree; other files are scanned locally by ClamAV. The temporary file is then deleted. No attachment bytes are stored in SQLite or sent to an antivirus vendor by this code.

That profile is assembled in memory for the reply. It is not written to its own table. Pieces of it can still land in stored memories, conversation turns, or audit rows if another feature saves them.

When you open or submit the Discord-issued ToS acceptance page, Cloudflare and the bot web service receive your client IP address. Cloudflare also provides the ASN and organization name for that address. The bot normalizes the IP (an IPv4 address or an IPv6 /64 network), immediately transforms it with a secret keyed hash, and stores only that network token. ASN and organization name are classified in memory against a local VPN/proxy/Tor/hosting list and are not written to SQLite. If the network token matches a currently blocked account, the visiting Discord account is hard-blocked. If the network is classified as VPN, proxy, Tor, or hosting, acceptance is refused without creating a Discord hard-block. The acceptance record is linked to your Discord user id because the one-time link was issued inside Discord. Public Terms and Privacy pages without an acceptance link do not create an owaua acceptance record.

3. What we store in SQLite

The bot's brain is a local SQLite file (OWAUA_DB, default owaua.db) on the Daki server. Tables and what they hold:

StoreWhat it containsWhen it is written
privacy_consentsYour user id, a scope id (exact guild or DM scope), opted-in flag, timestampWhen you /privacy opt-in or opt-out
tos_acceptance_challengesA keyed token value, Discord user id, legal version, creation and expiry timesWhen Discord creates a single-use acceptance button; deleted on use or after 15 minutes
tos_acceptancesDiscord user id, legal version, accepted/review/rejected status, keyed network token, timestamps, and a short risk code when review is requiredWhen the web acceptance form is submitted or the operator resolves a review
tos_blocked_networksA keyed network token, the blocked Discord user id that contributed it, and a timestampWhen a blocked account is created or that account visits the acceptance page from a network; removed when that account is unblocked or after at most 30 days
server_messagesMessage id, guild/channel ids and names, user id, username, display name, text content, optional bad-word flags, timeUnder the ordinary dual consent gate, or for accessible text in an explicitly configured archival guild
conversationsShort user/bot turns, truncated to 1500 characters, kept to about 20 turns each way by defaultSame dual gate as raw history
conversation_summariesAn AI-compressed continuity summary, user id, exact scope, source-through and update timesAfter enough new dual-consented turns; it never replaces durable memories
memoriesFacts about a subject (your id or "server"), author id, guild/scope, importance, category, optional expiry/supersession, use count, and timestampsWhen the bot or a moderator saves a memory; scoped to that guild or DM
lessonsShort style/behavior notes distilled from feedback, with a scope idWhen enough feedback exists and distillation runs; these are guild-level, not owned by one user
feedbackYour message, the bot reply, thumbs up/down or a correction note, your id, scopeWhen you rate a reply
relationshipsPer-user, per-guild bond score, optional nickname, optional grudge textAs the bot updates how it treats you in that server
quotesSaved lines, who they are about, who saved them, guild idWhen someone saves a quote
commandsCommunity command name, prompt spec, author id, guild, use countWhen a command is requested/approved
interactionsKind of interaction, author, guild, time (counts, not full text)As you use features
ai_tracesRandom trace id, exact scope, task/route, requested and serving model ids, prompt version, success/error type, latency, estimated token counts, attempts and fallback count. No prompt or response content.When privacy-safe AI tracing is enabled for that server; used for health and cost diagnostics
guild_settingsPersona, lurk, swear level/jar, allowed channels, history/moderation/rules/STT flags, retention days, log channel ids, optional reply-language defaultWhen administrators configure the server
swear_jar_countsGuild id, user id, aggregate swear count, last update time; no message text or matched wordsWhen a server administrator enables the swear jar and a message contains locally detected profanity
action_auditActor id, scope, action type, target id, parameters (JSON, capped), status, result, timesOn confirmed /act and similar gated actions
assistant_action_historyActor/scope/channel ids, confirmed action and result, redacted parameters, and an exact inverse when safely reversibleAfter a confirmed assistant action, so assistant undo can propose a rollback
module_settingsPer-server module enabled flags and bounded JSON settings, including malware scan limits/report routing, updater id and timeWhen an authenticated dashboard operator saves a module
dashboard_auditServer id, dashboard actor label containing the Discord user id, module/action, limited detail and timeFor dashboard configuration changes; retained under the same content-retention cleanup
community_recordsTyped records for reminders, onboarding follow-ups/acknowledgements, highlights, tags, moderation cases/events/private notes/appeals, staff incidents, tickets/intake/assignment/SLA, digest schedules, forms/access links/submissions, giveaways, feed/starboard state and similar workflows. Evidence is stored as bounded HTTPS references, not copied message bodies.Only when the corresponding module is enabled and someone uses it
afk_statuses / afk_notesServer/user ids, AFK reason, prior nickname, notification preference, and notes deliberately left by membersWhile AFK is enabled; status and delivered notes are removed on return
user_levels / daily_claimsPer-server XP, level, message count, XP cooldown, daily claim time and streakWhen Levels/Economy is enabled and used
dynamic_blocksBlocked user id, source (manual/ToS/other), reason, category, SHA-256 prefix of evidence, guild/channel ids, strike notes, last 10 history eventsOn ToS hard-block or operator block
user flags (kv)ToS version accepted and when; reject time; strike counters; emergency-block flag; DM-block flag; freaky-mode and fast/balanced/reasoning AI-mode flags; reply-language preference; per-guild STT consent flagsAs those features are used
economy_accounts / work_cooldownsToy currency balance and work timestampsIf you use those commands
kb_docsKnowledge-base passages for a guild (text chunks, topic, source)When mods ingest files or !kb add
dm_contactsUser id, display name, last DM time — used by the operator DM CLIWhen the operator DMs you through the bot account
cli_active_conversationsOperator CLI session heartbeatsWhile an operator chat session is open; dropped after a few minutes idle

4. Consent gates (this is the important part)

Opt-out for an ordinary scope revokes consent and deletes raw server_messages for you in that scope. In a configured archival guild, deletion removes the rows currently stored for you, but later messages are archived again under the guild archive setting. Explicit memories are left until you export or delete them.

5. What we send to models and other vendors

To generate a reply the bot builds a system prompt that can include: the persona; server mood; your relationship score/nickname/grudge; swear-level; guild lessons; your speaker profile; memories about you in that exact scope; recent stored conversation turns; matching server memories; knowledge-base chunks (delimited as untrusted reference data); an exact-user/exact-scope compressed continuity summary when dual-consented history is long enough; and your current message. That bundle is sent to whichever chat provider is configured for the route (examples the code knows: Groq, OpenRouter, Google Gemini, Anthropic, DeepSeek, Cerebras, Inception Mercury, Celeris, plus any OpenAI-compatible OWAUA_LLM_BASE_URL).

Other outbound calls, only when you or a staff feature use them:

Providers see IP addresses of this server, not your home IP, except that Cloudflare and Discord see client IPs on the public website and the Discord client respectively. The website worker may forward CF-Connecting-IP as X-Forwarded-For and Cloudflare ASN/organization metadata to the bot's HTTP port on the acceptance route. Those extra fields are used only to refuse VPN, proxy, Tor, and hosting networks and are not stored. Health endpoints /healthz and /readyz do not include user, guild, or provider payloads.

6. Retention

7. Your controls

These work without accepting the Terms, and replies are ephemeral where the slash command is used:

What /privacy delete does not erase (this is a real gap, not an oversight we are hiding):

Moderators with view_audit_log can inspect another member's relationship/intelligence in the current server. They cannot read other servers or your DMs through the bot. Memory is exact-scope: a guild cannot see another guild's facts.

8. Children

owaua is not directed at children under Discord's minimum age. We do not knowingly store extra data to identify children. Sexual content involving minors is banned and is a ToS-block category. If you believe a child's data is in this instance, contact ckazros@owaua.com.

9. Security

The database is a file on the host. Access is whoever can read that server (the operator, and in principle Daki staff or anyone with the panel/SFTP credentials). Public legal HTTP pages send default-src 'none' CSP and no cookies. The dedicated acceptance route permits only a same-origin form and carries an opaque, short-lived capability linked server-side to one Discord id; the id is not exposed in the URL. Exports are sent as an ephemeral Discord attachment to you, not published. Evidence of ToS violations is hashed. Provider API keys live in the server's .env.

This is not a certified security programme. A compromised Discord token, Daki account, or API key would expose data. Report issues to ckazros@owaua.com.

10. International processing

The bot host is in Germany (Daki). Discord, Cloudflare, and most configured model APIs are outside your country, often in the United States. If you use owaua, your prompts and identifiers may leave the EU. This instance does not implement Binding Corporate Rules or a named SCC packet in code. If that is not acceptable, do not use the bot and use /privacy delete.

11. Legal bases (EU/UK readers)

We are not a law firm. In plain terms the operator relies on: performing the service you requested after ToS acceptance; consent for raw history and STT; legitimate interests in stopping CSAM, doxxing, token theft, prompt-leak abuse, and block evasion (hashed evidence, strike counters, time-limited keyed network tokens, hard-blocks of later acceptance visits from a matching network, and refusal of VPN, proxy, Tor, and hosting networks during web acceptance); and Discord's position as the platform you already have an account with. You can withdraw consent, reject the Terms, or delete as described above.

12. Changes

Material changes bump LEGAL_VERSION. Your previous acceptance becomes invalid and ordinary commands stay locked until you accept the new version. /privacy remains available.

13. Contact

Privacy and security: ckazros@owaua.com.

If this page and the running code disagree, the code wins and the page is wrong. Please report that.