document setup requirements and code conventions

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
leanderandClaude Opus 5.5 committed 2026-10-29 23:05:09 +01:00
1 parent 67a418ebe2
commit 646a1b1342
2 files changed
+58 -8

No files matched your search

+37 -4
View File
@@ -4,6 +4,17 @@ Heisann sveisann! Er du interessert i å bidra? Kult!
Det er derimot noen kodestilsregler jeg ønsker at skal følges. Dette dokumentet fungerer som en defacto regelbok for både meg og/eller andre.
## Oppsett
Se [README.md](README.md) for hvordan du kjører botten. Installer i tillegg pre-commit-hookene:
```
uv sync
uv run pre-commit install
```
De kjører black, isort og ruff (linjelengde 120) før hver commit. De samme sjekkene kjøres i GitHub Actions på alle pushes og pull requests.
## Regler
### Typing
@@ -12,7 +23,7 @@ All kode skal være typet til beste evne. Dette betyr at man for eksempel også
### Docstrings
Alle funksjoner skal ha docsstrings som følger denne stilen:
Alle funksjoner skal ha docstrings som følger denne stilen:
```python
def greet(self, name: str) -> str:
@@ -33,6 +44,16 @@ def greet(self, name: str) -> str:
Sløyf alt som ikke brukes.
Skriv unioner som `a | b`, og returverdien som `(type): beskrivelse`. Valgfrie parametere skal si hva standardverdien er, f.eks. `Defaults to the invoking user`. Noen parametere går igjen overalt, og beskrives likt:
- `interaction (discord.Interaction): The slash command interaction` i slash-kommandoer, og `The interaction that triggered this` i knapper, menyer og alt annet
- `ctx (commands.Context): The command context`
- `bot (commands.Bot): The bot instance`
### Importering
isort sorterer importene med én import per linje. Egne moduler importeres som moduler, som `from cogs.utils import misc_utils`, og brukes som `misc_utils.Paginator`.
### Rekkefølge på kommandosjekker (decorators)
Hver kommando er en funksjon som har et eller flere decorators over seg. Dette er sjekker som utføres før kommandoen kjøres. En av disse konverterer også funksjonen til en faktisk kommando som vi kan kjøre gjennom Discord.
@@ -75,9 +96,9 @@ Et tips er å ha et engelsk funksjonsnavn, men spesifisere i decoratoren over me
### Bruk av embed templates
`error_warning` skal brukes om det er feil brukerinput, mangel på data eller generelt sett en feil som er forventet/ikke av utenforstående årsåker
`error_warning` skal brukes om det er feil brukerinput, mangel på data eller generelt sett en feil som er forventet/ikke av utenforstående årsaker
`error_fatal` brukes når en uventet feil skjer. Ofte på grun av utenforstående årsaker som et API som er nede osv.
`error_fatal` brukes når en uventet feil skjer. Ofte på grunn av utenforstående årsaker som et API som er nede osv.
`success` kan brukes til å gi brukeren en bekreftelse på at operasjonen som ble forespurt gikk fint. Det vil si at den ikke skal brukes til å vise spesifikk data, men heller brukes når det ikke er noe å vise.
@@ -85,9 +106,21 @@ Et tips er å ha et engelsk funksjonsnavn, men spesifisere i decoratoren over me
Generelt sett unngår vi bruk av leading underscores for variabelnavn og metoder. Ja, de har sin bruk, men Python var aldri ment til å være objektorientert på samme måte som f.eks Java. Uansett skal en ikke bruke metoder fra andre cogs. Dermed er regelen: greit overalt utenom i cogs.
### Tid og tidssoner
Bruk alltid tidssonebevisste datetime-objekter. Bruk `discord.utils.utcnow()` for nåtid og `self.bot.timezone` for å regne om til lokal tid. `misc_utils.localize` gir en naiv datetime en tidssone uten å endre klokkeslettet.
### Bakgrunnsoppgaver
Legg `@misc_utils.log_errors` rett under `@tasks.loop`, slik at en feil blir logget i stedet for å stoppe løkka. Daglige løkker kjøres med `time=misc_utils.MIDNIGHT`, som er midnatt i bottens tidssone.
### Nye cogs
Legg filen i `src/cogs` med en `setup`-funksjon nederst. Alle cogs der lastes automatisk. Trenger cogen databasen, legg filnavnet til i `DATABASE_RELIANT_COGS` i `src/run.py` og lag tabellene den trenger i `cog_load`. Kanal-, rolle- og bruker-IDer legges under `ids` i konfigurasjonsfilen og hentes med `self.bot.channel_ids`, `self.bot.role_ids` og `self.bot.user_ids`.
### Avhengigheter
Hvis en ny avhengighet trengs, legg den til med `uv add "pakke==X.Y.*"` slik at major og minor versjon er spesifisert.
Hvis en ny avhengighet trengs, legg den til med `uv add "pakke==X.Y.*"` slik at major og minor versjon er spesifisert. Trengs et systemprogram, legg det til i `apt-get install`-linja i `Dockerfile` og i README-en.
## Ønsket utforming av ny funksjonalitet
+21 -4
View File
@@ -4,7 +4,7 @@ UiO Gaming Discord Bot er en chattebot for ulike formål. Hvilke formål det er,
## Kom i gang
0. Lag en botbruker / skaff en token. [Se her](https://discordpy.readthedocs.io/en/stable/discord.html)
0. Lag en botbruker / skaff en token. [Se her](https://discordpy.readthedocs.io/en/stable/discord.html). Skru også på alle tre _Privileged Gateway Intents_ (Presence, Server Members og Message Content) under "Bot" i Developer Portal. Botten ber om alle intents og starter ikke uten dem
1. Lag en kopi av filen [config.yaml.example](src/config/config.yaml.example) i "config" mappen og fjern `.example` fra enden av filnavnet til kopien
@@ -12,21 +12,38 @@ UiO Gaming Discord Bot er en chattebot for ulike formål. Hvilke formål det er,
Merk at konfigurasjonsfilen har felt for bl.a. databasekobling. Disse er ikke påkrevd, men du vil derimot miste funksjonalitet om de ikke er fylt inn. Det eneste man _må_ fylle inn, som ikke er fylt inn fra før, er `token`.
Gitt en bruker med tilgang til å skrive og lese fra databasen vil botten lage alle tabeller den trenger for å fungere.
`config_mode` bestemmer hvor slash-kommandoene synkroniseres. Med `dev` synkroniseres de bare til serveren i `dev_guild`, der de dukker opp med en gang. Med `prod` synkroniseres de globalt.
### Valgfrie funksjoner
Mangler et felt, skrus funksjonene som trenger det av når botten starter:
| Felt | Funksjoner |
| --- | --- |
| `database` | Bursdager, autosvar, gullkorn, Minecraft-whitelist, social credit, stjernetavla, streaks, høyde og MBTI, ordsky |
| `minecraft` | Minecraft-whitelist. Botten kobler til RCON på `127.0.0.1:25575`, så Minecraft-serveren må kjøre på samme maskin |
| `sanity` | Synkronisering av arrangementer til nettsiden |
| `galtinn` | `/galtinn medlemskap` |
| `ids` | Funksjoner som trenger en kanal, rolle eller bruker. De som mangler en ID hoppes over |
Databasen må være PostgreSQL. Gitt en bruker med tilgang til å skrive og lese fra databasen vil botten lage alle tabeller den trenger for å fungere.
Når token er fylt inn kan du så bevege deg videre til ett av to alternativer.
### Valgmulighet 1 - Docker (Anbefalt)
```
docker compose up
docker compose up --build
```
Konfigurasjonsfilen kopieres inn i imaget når det bygges, så husk `--build` etter at du har endret den. Containeren bruker vertens nettverk, slik at den når databasen og Minecraft-serveren på `localhost`.
### Valgmulighet 2 - Manuelt
Du bør ha gjort følgende:
- Installert [uv](https://docs.astral.sh/uv/)
- Installert `ffmpeg`, `graphviz` og `pandoc`
1. Installer avhengigheter
@@ -34,7 +51,7 @@ Du bør ha gjort følgende:
uv sync
```
2. Kjør bot
2. Kjør bot fra rotmappen til prosjektet
```
uv run src/run.py