Proxer Discord Bot Migration (NadekoBot)

Discord ist einer der beliebtesten Nachrichtendienste heutzutage. Wenn man sich bei Discord registriert, bekommt man kostenlose Nutzung einer großartigen Infrastruktur. Jeder kann sogenannte „Discord Server“ erstellen, andere Nutzer einladen und Inhalte aufbauen. In Discord gibt es daher unzählige Communities, die von dieser Infrastruktur profitieren. Auch auf Proxer besitzen wir einen Discord Server, in dem der Austausch innerhalb der Community stattfindet. Bald wird der Proxer Discord Server 10.000 Mitglieder haben.

Screenshot vom Git Repository des Bots

Um ein wenig Spaß und Spiele in den Server einzubringen, betreiben wir ein Discord Bot. Der Bot basiert auf NadekoBot. Dieser Bot hat nicht mehr funktioniert und musste geprüft werden. Es hat sich heraus gestellt, dass der Bot sich nicht mehr aktualisiert hat. Den Bot wieder zum Laufen zu bekommen, war gar nicht so einfach und hat einen manuellen Migrationsprozess gefordert. In diesem Blogpost möchte ich erklären, warum es wichtig ist, immer wieder mal ein Auge auch auf funktionierende Systeme zu haben.

Nadekobot

Nadeko Bot ist eine Anwendung, die Gamification Aspekte in einer Discord-Community einbringt. Es werden Spiele, Erfahrungssystem und ein Währungssystem eingeführt. Mithilfe des Erfahrungssystems kann man Ränge aufsteigen. Man kann sich virtuelle Währung verdienen, indem man sich an Aktivitäten oder Gewinnspielen beteiligt. Es gibt ein Shopsystem, in dem man virtuelle Waren kaufen kann.

Technisch gesehen ist der Bot ein C# Projekt. Das Projekt besitzt eine Routine, die dabei hilft, den Bot aktuell zu halten. Immer wenn man den Bot über die mitgelieferte Routine startet, prüft der Bot Aktualisierungen im Git Repository und aktualisiert das Projekt. So bleibt alles funktionsfähig, sicher und als Betreiber eines Bots ist es eine angenehme Erfahrung.

Problem

Vor kurzem konnte man sich nicht mehr mit dem Bot kommunizieren. Ich habe direkt gesehen, dass der Git Status einen älteren Status dargestellt hat. Eine kurze Prüfung hat ergeben, dass die Update-Routine nicht mehr ordentlich lief und es jedes Mal ohne eine Aktualisierung durchzuführen einfach den Bot gestartet hat.

Ich habe mal den Link angesteuert, in der das Repository gehostet war. Und siehe da, das Repository existiert nicht. Das Projekt hat GitHub verlassen und ist auf GitLab gewechselt. Es schien mir nicht aufgefallen zu sein, weil bislang alles problemlos funktioniert hatte. Im Server Monitoring sind solche Probleme bislang nicht zu sehen. Nun war es, herauszufinden, wie alt die Version unseres Bots war.

Der Bot hatte sich seit fast 2 Jahren nicht geupdated. Das war für mich eine schockierende Erkenntnis. Es ist erstaunlich, dass bis jetzt alles gut lief. Das Ziel war nun, den Bot wieder zum Laufen zu bekommen. Die Daten auf dem Bot müssen gerettet werden.

Upgrade / Neuinstallation

Problem gefunden und nun gehts ans Aktualisieren. Bei sowas sollte man nicht direkt auf die neueste Version des Bots upgraden. Sondern eher in Zwischenversionen. Das habe ich gemacht. Leider haben mitgelieferte Aktualisierungsroutinen nicht ordnungsgemäß funktioniert. Insbesondere das Datenbankschema konnte nicht aktualisiert werden. Nach langem hin und her habe ich erkannt, dass ein Upgrade hier sinnlos ist.

Ich habe mich kurzum entschieden, den Bot vollständig neu zu installieren und die Daten vom alten Bot in den neuen Bot manuell zu migrieren. Die Installation des Bots in der neuesten Version hat problemlos funktioniert. Die große Herausforderung stellt nun die Datenmigration dar.

Migration

Für die Migration habe ich mir ein Python Script erstellt, in dem ich die alte und neue Datenbank angeben kann. Die Daten vom alten Bot werden eingelesen und auf das neue Schema des Bots übertragen.

Für das interaktive Arbeiten habe ich mein Migrationsscript in Jupyter Notebook geschrieben. Dadurch habe ich die Möglichkeit meine Änderungen zu testen und überarbeiten. Ich habe erkannt, dass ich gar nicht alle Tabellen aus der Datenbank benötige. Die meisten Tabellen waren auch in der alten Datenbank leer. Ein paar Funktionalitäten wie „Clubs“, „Waifus“, „XP“ und Nutzerdaten waren essentiell für unseren Bot. Alle anderen Datensätze habe ich übersprungen.

Glücklicherweise war das Schema über die zwei Jahre hinweg relativ konstant geblieben, sodass nur wenige Felder verändert wurden. Das Migrationsscript ist dementsprechend für unsere Migration übersichtlich und einfach. Abschließend muss die neue Datenbank hochgeladen und der Bot wieder eingeschaltet werden.

Fazit

Der Bot läuft nun seit einem halben Tag wieder problemlos und bedient die Abfragen der Community. Die Neuinstallation und Migration war am Ende auf jeden Fall die richtige Entscheidung. In dem Update-Sumpf wäre ich so leicht nicht davon gekommen. Es hat wieder einmal ein Happy-End gefunden.

Vermutlich werden andere Bot-Betreiber ähnliche Probleme mit Nadekobot haben. Vielleicht werden aber auch in Zukunft andere ähnliche Probleme haben. Ich möchte diese Gelegenheit nutzen, und mein Migrationsskript teilen. Das Projekt kann man hier finden.