# Databaseskjema

Boten bruker to lokale SQLite-filer som opprettes automatisk ved første kjøring.

***

## warnings.db

Lagrer alle advarselsregistreringer.

### verbal\_warnings

| Kolonne        | Type                     | Beskrivelse                                           |
| -------------- | ------------------------ | ----------------------------------------------------- |
| `id`           | INTEGER PK AUTOINCREMENT | Unik advarsels-ID                                     |
| `createdAt`    | TEXT                     | Tidsstempel (UTC, automatisk satt ved innsetting)     |
| `userId`       | INTEGER                  | Discord-bruker-ID-en til personen som fikk advarselen |
| `reason`       | TEXT                     | Årsak til advarselen                                  |
| `evidenceLink` | TEXT                     | Discord-meldingslenke brukt som bevis                 |
| `modId`        | INTEGER                  | Discord-bruker-ID-en til moderatorens ansatte-medlem  |

**Indeks:** `idx_vw_userId` på `userId` for raske oppslag basert på bruker.

```sql
CREATE TABLE verbal_warnings (
    id           INTEGER PRIMARY KEY AUTOINCREMENT,
    createdAt    TEXT    NOT NULL DEFAULT (datetime('now')),
    userId       INTEGER NOT NULL,
    reason       TEXT    NOT NULL,
    evidenceLink TEXT    NOT NULL,
    modId        INTEGER NOT NULL
);

CREATE INDEX idx_vw_userId ON verbal_warnings (userId);
```

***

## staffpolls.db

Lagrer avstemninger, alternativene deres og stemmeregistreringer.

### staffpoll\_polls

| Kolonne        | Type       | Beskrivelse                                           |
| -------------- | ---------- | ----------------------------------------------------- |
| `id`           | INTEGER PK | Unik avstemnings-ID                                   |
| `title`        | TEXT       | Avstemningstittel                                     |
| `description`  | TEXT       | Beskrivelse av avstemningen (standard: tom)           |
| `created_at`   | TEXT       | Opprettelsestidsstempel (UTC)                         |
| `created_by`   | INTEGER    | Discord-bruker-ID-en til oppretteren                  |
| `channel_id`   | INTEGER    | Kanalen der avstemningen ble publisert                |
| `message_id`   | INTEGER    | Meldings-ID-en til avstemningsinnstikket              |
| `is_active`    | INTEGER    | 1 = åpen, 0 = lukket                                  |
| `is_anonymous` | INTEGER    | 1 = stemmernes identiteter skjult                     |
| `max_votes`    | INTEGER    | Maks antall alternativer per stemmer (0 = ubegrenset) |

### staffpoll\_options

| Kolonne         | Type       | Beskrivelse                                           |
| --------------- | ---------- | ----------------------------------------------------- |
| `id`            | INTEGER PK | Unik alternativ-ID                                    |
| `poll_id`       | INTEGER FK | Refererer til `staffpoll_polls.id` (CASCADE SLETTING) |
| `label`         | TEXT       | Alternativtekst som vises på knappen                  |
| `display_order` | INTEGER    | Rekkefølge på knappene (stigende)                     |

***

## Supabase (Auttaja-integrasjon)

Auttaja-cogen leser fra og skriver til en ekstern Supabase-tabell. Denne administreres ikke av boten — det forutsettes at den allerede finnes fra en tidligere Auttaja-distribusjon.

### public.punishments

| Kolonne          | Beskrivelse                                                        |
| ---------------- | ------------------------------------------------------------------ |
| `id`             | Post-ID                                                            |
| `guild_id`       | Discord-server-ID                                                  |
| `offender`       | Discord-bruker-ID-en til det straffede medlemmet                   |
| `punisher`       | Discord-bruker-ID-en til ansatte-medlemmet                         |
| `reason`         | Årsak til straffen                                                 |
| `action`         | Handlingstype: `ban`, `tempban`, `softban`, `mute`, `kick`, `warn` |
| `timestamp`      | Når straffen ble gitt                                              |
| `duration`       | Varighet (for tempbans/mutes)                                      |
| `deleted`        | Flagg for myk sletting                                             |
| `removed_by`     | Hvem som fjernet straffen                                          |
| `removed_reason` | Hvorfor straffen ble fjernet                                       |
| `resolve`        | Løsningsnotater                                                    |


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.vigila.augystudios.com/no/referanse/database-schema.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
