Blog
Notizen aus sieben Jahren Basteln, Bauen und Betreiben: Discord-Bots, Webdienste, Server und ein Minecraft-Netzwerk. Was funktioniert hat, was kaputtgegangen ist und was ich daraus gelernt habe.
41 Beiträge zum Thema „yurna“.
Beiträge
- D
Die Lizenzverwaltung war seit Wochen funktionslos
Genehmigen, Ablehnen, Sperren, Entsperren — nichts davon tat etwas. Die Ursache war eine Zeile in der Eingabeprüfung, und der Grund, warum es niemand merkte, ist die eigentliche Lehre.
- yurna
- api
- fehlersuche
5 Min. Lesezeit - Ö
Ökosystem-Review: eine Ticket-Route ohne Wache
Ein zweiter Durchgang, diesmal über alle Projekte statt nur über eins. Der Fund: dieselbe Lücke, die ich sechs Tage vorher behoben hatte, an einer benachbarten Stelle.
- sicherheit
- yurna
- audit
5 Min. Lesezeit - S
Sicherheitsaudit: fünf schwere Treffer im eigenen Code
Einmal alles durchsehen, aufschreiben, einstufen, abarbeiten. Was ich gefunden habe, was mich am meisten geärgert hat und warum kein einziger Fund exotisch war.
- sicherheit
- yurna
- audit
5 Min. Lesezeit - D
Das Schema neu aufsetzen, wenn niemand hinsieht
Sechs Jahre Migrationsgeschichte, Reste aus drei Datenbanksystemen, Tabellen ohne Nutzer. Wie ich das Datenmodell auf einen sauberen Anfangszustand gebracht habe — ohne Daten zu verlieren.
- datenbank
- yurna
- wartung
5 Min. Lesezeit - O
OAuth-Token verschlüsseln, bevor jemand danach fragt
Wer sich über Discord anmeldet, hinterlässt bei mir ein Zugriffstoken. Was damit möglich wäre, wie ich es verschlüssele — und der Fehler, den ich dabei jahrelang im Code hatte.
- sicherheit
- yurna
- architektur
5 Min. Lesezeit - V
Venator: eine Idee, die liegen blieb
Ein Rollenspielsystem, das Spielwelten mit Discord verbindet. Datenmodell steht, Schnittstelle steht, benutzt wird es nicht. Über Projekte, die man nicht zu Ende bringt.
- yurna
- produkt
- persoenlich
5 Min. Lesezeit - D
Drei Prozesse, eine Datenbank
Bot, Dashboard und Verwaltung laufen getrennt und sprechen nie direkt miteinander. Warum diese Architektur für ein Ein-Personen-Projekt genau richtig ist — und wo ihre Grenzen liegen.
- yurna
- architektur
- betrieb
5 Min. Lesezeit - D
Die Admin-API wird eigenständig
Wenn der Bot abstürzt, soll man trotzdem nachsehen und steuern können. Warum ich die Verwaltung vom laufenden Discord-Client entkoppelt habe — und wie Befehle an einen abwesenden Bot funktionieren.
- yurna
- architektur
- api
5 Min. Lesezeit - V
Von Postgres nach SQLite — der unpopuläre Umzug
Fast alle Wege führen von SQLite zu Postgres. Ich bin den umgekehrten gegangen, aus Gründen, die mit Last nichts zu tun haben — und würde es wieder tun.
- datenbank
- architektur
- yurna
5 Min. Lesezeit - V
Vier Jahre Yurna
Auf den Tag genau vier Jahre nach dem ersten Commit: was aus fünf Befehlen geworden ist, welche Entscheidungen sich gehalten haben und welche ich rückgängig gemacht habe.
- yurna
- rueckblick
- persoenlich
5 Min. Lesezeit - P
Premium: zum ersten Mal über Geld nachdenken
Serverkosten, Zeit und die Frage, ob ein kostenloses Projekt dauerhaft tragfähig ist. Wie ich über Bezahlmodelle nachgedacht habe — und warum ich mich gegen das naheliegendste entschieden habe.
- yurna
- produkt
- wirtschaft
5 Min. Lesezeit - T
Ticket-System v2: Transkripte, Kategorien, Automatik
Aus einem Knopf, der einen Kanal erzeugt, wurde ein System mit Abschriften, Bewertungen, Notizen und Regeln. Der größte Einzelbrocken des Jahres — und die Fragen, die dabei nicht technisch waren.
- yurna
- discord
- architektur
5 Min. Lesezeit - F
Feature-Wildwuchs aufräumen, ohne Nutzer zu vergraulen
Dreißig Befehle standen zur Disposition. Wie ich entschieden habe, was bleibt, wie das Abschalten abgelaufen ist — und welche Reaktion mich am meisten überrascht hat.
- yurna
- produkt
- wartung
5 Min. Lesezeit - 1
150 Befehle sind kein Ziel, sondern eine Warnung
Auf der Startseite stand „über 150 Befehle“ wie eine Auszeichnung. Als ich nachgesehen habe, welche davon tatsächlich benutzt werden, war das Ergebnis unangenehm.
- yurna
- meinung
- produkt
5 Min. Lesezeit - P
Postgres für einen Bot war eine Nummer zu groß
Ich hatte eine ausgewachsene Datenbank für ein System mit überschaubarer Last. Was das gekostet hat, was es gebracht hat — und warum die Entscheidung trotzdem erst später fiel.
- yurna
- datenbank
- architektur
5 Min. Lesezeit - S
Statistiken, die niemand liest — und die drei, die zählen
Ich habe zwei Wochen an einer Statistikseite gebaut, die keiner benutzt hat. Über den Unterschied zwischen interessanten und nützlichen Zahlen.
- yurna
- daten
- meinung
5 Min. Lesezeit - D
discord.js v14: was der Umstieg wirklich gekostet hat
Umbenannte Aufzählungen, veränderte Rechteprüfungen, ein neues Modul für Einbettungen. Ein Wochenende Umstellung, das drei Wochen gedauert hat — und warum ich trotzdem früh umgestiegen bin.
- yurna
- discord
- migration
5 Min. Lesezeit - R
Reaction Roles und die Tücke der Events
Auf ein Emoji klicken, eine Rolle bekommen. Das einfachste Feature überhaupt — bis man merkt, dass Discord Ereignisse für alte Nachrichten gar nicht erst liefert.
- yurna
- discord
- architektur
5 Min. Lesezeit - E
Economy ohne Inflation: Zahlen, die nicht explodieren
Eine Bot-Währung ist in zwei Stunden gebaut und in zwei Wochen wertlos. Über Geldquellen, Geldsenken, Arbeitsbefehle mit Abklingzeit und die Frage, wofür man überhaupt Geld braucht.
- yurna
- spielmechanik
- discord
5 Min. Lesezeit - W
Wer Self-Hosting anbietet, schreibt Dokumentation — oder bekommt Tickets
Den eigenen Bot selbst betreiben zu können klingt großzügig. Es bedeutet aber: Jeder Fehler in fremden Umgebungen wird zu deiner Aufgabe, wenn die Anleitung Lücken hat.
- yurna
- doku
- community
5 Min. Lesezeit - D
Die Domain yurna.info und was ein Name ausmacht
Zwei Jahre lief das Projekt unter einem Arbeitstitel. Der Tag, an dem es einen Namen und eine Domain bekam, hat mehr verändert, als mir lieb ist — und einiges an Arbeit ausgelöst.
- yurna
- marke
- persoenlich
5 Min. Lesezeit - M
Mehrsprachigkeit von Anfang an wäre billiger gewesen
Über hundert Befehle mit Texten mitten im Code, dazu Zahlen, Daten und Pluralformen. Was das Nachrüsten von zwei Sprachen tatsächlich gekostet hat.
- yurna
- i18n
- architektur
5 Min. Lesezeit - M
Monorepo oder nicht — ich habe mich falsch entschieden und dann richtig
Bot, Dashboard und gemeinsamer Code lagen in drei Repositories. Jede Änderung an geteilten Funktionen war eine Kopieraktion. Wie ich das zusammengelegt habe und was dabei schiefging.
- architektur
- werkzeuge
- yurna
5 Min. Lesezeit - S
Sharding verstehen, bevor man es braucht
Ab 2500 Servern muss ein Discord-Bot seine Verbindungen aufteilen. Ich war weit davon entfernt — und habe mich trotzdem damit beschäftigt. Was ich dabei über verteilte Zustände gelernt habe.
- yurna
- discord
- skalierung
5 Min. Lesezeit - M
Musikbots sterben, und ich habe meinen freiwillig abgeschaltet
Als die großen Musikbots abgeschaltet wurden, hatte ich selbst einen. Warum ich ihn entfernt habe, statt weiterzumachen — und was das über Abhängigkeiten von fremden Diensten sagt.
- yurna
- discord
- meinung
5 Min. Lesezeit - D
Das erste Ticket-System — und warum ich es zweimal gebaut habe
Ein Knopf, ein Kanal, ein Gespräch. Die erste Fassung hat sechs Wochen gehalten, dann kamen die Fragen, die ich nicht bedacht hatte: Verlauf, Kategorien, Rechte, Löschen.
- yurna
- discord
- architektur
5 Min. Lesezeit - G
Giveaways sind schwerer, als sie aussehen
Eine Verlosung ist ein Zeitgeber, eine Teilnehmerliste und ein Zufallsgriff. Klingt nach einer Stunde Arbeit — und ist der Befehl, der mich am meisten über Zustand, Neustarts und Fairness gelehrt hat.
- yurna
- discord
- architektur
5 Min. Lesezeit - P
Prisma statt handgeschriebener Queries
Warum ich meine SQL-Strings aufgegeben habe, was ein Schema als einzige Wahrheit bringt — und die zwei Stellen, an denen ich bis heute lieber selbst SQL schreibe.
- yurna
- datenbank
- werkzeuge
5 Min. Lesezeit - D
Das Dashboard wird echt: Next.js und Discord-OAuth
Von der Skizze zur laufenden Weboberfläche: Anmeldung über Discord, Serverauswahl, Einstellungen. Und die drei Sicherheitsfragen, die ich vorher nicht auf dem Zettel hatte.
- yurna
- web
- nextjs
5 Min. Lesezeit - S
Slash-Commands: die große Umstellung
Fünfundvierzig Befehle, zwei Aufrufwege, ein halbes Jahr Übergangszeit. Was bei der Umstellung auf Anwendungsbefehle wirklich Arbeit war — und was überraschend einfach ging.
- yurna
- discord
- migration
5 Min. Lesezeit - J
Jahresrückblick 2020: das Jahr, in dem Yurna entstand
Ein neues Repository im Februar, ein Umzug auf einen gemieteten Server, eine Datenbank statt Dateien, achtzig Leute im Discord und ein dreitägiger Ausfall. Was 2020 bei mir passiert ist.
- rueckblick
- jahr
- yurna
5 Min. Lesezeit - E
Ein Dashboard wäre schön — erste Skizze
Bots werden über Chatbefehle konfiguriert, und das ist für alles jenseits von drei Einstellungen zu wenig. Wie ich mir eine Weboberfläche vorgestellt habe, bevor ich wusste, was sie kostet.
- yurna
- web
- planung
5 Min. Lesezeit - R
Rate-Limits verstehen, bevor Discord es einem beibringt
Ein Befehl, der zwanzig Nachrichten schickt, eine gesperrte Anwendung und ein Nachmittag mit HTTP-Kopfzeilen. Wie Rate-Limits funktionieren und wie man sie einhält, ohne alles zu verlangsamen.
- yurna
- discord
- api
5 Min. Lesezeit - W
Warum ich Präfixe satt hatte, bevor es Slash-Commands gab
Ein Ausrufezeichen vor jedem Befehl war jahrelang Standard. Was daran im Alltag nervt, welche Notlösungen es gab — und warum die Ankündigung von Slash-Commands für mich ein Befreiungsschlag war.
- yurna
- discord
- meinung
5 Min. Lesezeit - D
Der Bot war drei Tage offline und niemand hat es mir gesagt
Ein Absturz um zwei Uhr nachts, ein Prozess, der nicht wieder hochkam, und drei Tage Stille. Über den Unterschied zwischen „läuft“ und „ich weiß, dass es läuft“.
- yurna
- betrieb
- ueberwachung
5 Min. Lesezeit - B
Bilder im Bot erzeugen, ohne den Bot einzufrieren
Ranglisten-Karten, Willkommensbilder, Profilgrafiken: Wie man in Node.js Bilder zeichnet — und warum meine erste Fassung den ganzen Bot für Sekunden anhielt.
- yurna
- javascript
- leistung
5 Min. Lesezeit - X
XP und Level: meine erste Formel, die keiner verstand
Ein Levelsystem ist in einer Stunde gebaut und in drei Wochen kaputtgespielt. Über Kurven, Abklingzeiten, Spam-Anreize und die Frage, wofür man eigentlich Punkte vergibt.
- yurna
- discord
- spielmechanik
5 Min. Lesezeit - M
Moderationsbefehle und die Frage, wer eigentlich was darf
Kick, Bann, Timeout — technisch in einer Stunde gebaut. Die eigentliche Arbeit steckt in der Frage, wer sie benutzen darf, und in dem, was man hinterher noch nachvollziehen kann.
- yurna
- discord
- rechte
5 Min. Lesezeit - V
Von JSON-Dateien zu einer richtigen Datenbank
Zwei beschädigte Dateien, ein verlorener Punktestand und die Frage, warum eigentlich alle Datenbanken benutzen. Der Umzug von JSON auf MySQL — mit allem, was ich dabei zum ersten Mal verstanden habe.
- yurna
- datenbank
- architektur
6 Min. Lesezeit - V
Vom if-Wald zum Command-Handler
Wie aus einer 400-Zeilen-Verzweigung ein System aus einzelnen Dateien wurde — und warum diese Umstellung die wichtigste des ganzen Jahres war.
- yurna
- javascript
- architektur
5 Min. Lesezeit - Y
Yurna fängt an: ein Bot, der eigentlich nur Memes posten sollte
Am 24. Februar 2020 habe ich das Repository angelegt, aus dem später Yurna wurde. Warum ich auf einer offenen Vorlage aufgesetzt habe statt bei null anzufangen — und was das langfristig gekostet hat.
- yurna
- discord
- projektstart
6 Min. Lesezeit