Zum Hauptinhalt springen
„Es ist kein Cache-Problem. Es ist immer ein Cache-Problem.“
  • Discord API
  • Python

Discord Bot mit Python

Python-Bot mit discord.py für eine Online-Silvesterfeier

Silvester 2020 konnte nur online stattfinden. Zusammen mit Marcel von Buddster.de habe ich deshalb an einem Wochenende einen Discord-Bot in Python gebaut, der eine Online-Feier moderiert. Er startet Minispiele, wählt Teilnehmer aus und führt Buch darüber, wer wann wie viel getrunken hat. Gesteuert wird er über Befehle, Stichwörter im Chat und Emoji-Reaktionen. Meine Rolle war die Entwicklung. Nach der ersten Feier haben wir den Bot für weitere Feiern erweitert.

Wie es funktioniert

Aufbau mit discord.py

Der Bot basiert auf discord.py. Kern ist eine Instanz von commands.Bot mit dem Prefix „!“. Jeder Befehl ist eine async-Funktion, die mit dem Decorator @gur.command registriert wird. Die Bibliothek parst die eingehende Nachricht, ordnet sie dem Befehl zu und übergibt den Kontext ctx mit Guild, Kanal und Autor. Antworten werden als discord.Embed-Nachrichten gesendet, weil sich Titel, Beschreibung, Felder, Farbe und Zeitstempel damit sauber strukturieren lassen und der Bot im Chat auf einen Blick erkennbar bleibt.

gur = commands.Bot(command_prefix='!')

@gur.command(name="info")
async def info(ctx):
    embed = discord.Embed(
        title=f"{ctx.guild.name}",
        description="Corona Silvester Party (Online)",
        timestamp=datetime.datetime.now(),
        color=discord.Color.blue(),
    )
    embed.add_field(name="Server owner", value=f"{ctx.guild.owner}")
    await ctx.send(embed=embed)

Der Befehl !info liest Servername und Server-Owner aus dem Kontext und schickt ein blaues Embed mit Zeitstempel zurück. Die weiteren Befehle folgen demselben Muster.

Interaktion über Befehle, Stichwörter und Emojis

Der Bot reagiert auf drei Arten von Eingaben: auf Befehle mit dem Prefix „!“, auf Stichwörter im normalen Chat und auf Emoji-Reaktionen. Befehle laufen über commands.Bot und @gur.command; Stichwörter im Chat und Emoji-Reaktionen kommen ohne Prefix aus.

Minispiele und faires Trink-Tracking

Die Minispiele arbeiten mit einem Zufallsfaktor und einem Ausschlussverfahren. Das Trink-Tracking merkt sich, wer wann wie viel getrunken hat, und berücksichtigt diese Werte bei der nächsten Auswahl. So trifft die Auswahl nicht immer dieselben Personen, und das Trink-Tracking bleibt fair.

Technik im Detail

  • Sprache: Python
  • Bibliothek: discord.py, commands.Bot mit Prefix „!“
  • Befehle als async-Funktionen, registriert mit @gur.command
  • Antworten als discord.Embed mit Titel, Beschreibung, Feldern, Farbe und Zeitstempel
  • Eingaben: Befehle, Stichwörter im Chat, Emoji-Reaktionen
  • Minispiele mit Zufallsfaktor und Ausschlussverfahren
  • Trink-Tracking: speichert, wer wann wie viel getrunken hat, und berücksichtigt das bei der nächsten Auswahl
  • Entwicklung gemeinsam mit Marcel (Buddster.de)
  • Entstanden als Wochenendprojekt zu Silvester 2020

Status

Der Bot ist an einem Wochenende zu Silvester 2020 entstanden und wurde danach für weitere Feiern erweitert. Echte Gäste gaben sofort Feedback. Der Bot ist ein eigenes Projekt ohne Auftraggeber.

Projekt-Details

Jahr
2022
Rolle
Entwicklung (mit Buddster.de)
Stack
Discord API, Python

Interesse an so einem Projekt?

Ich baue Websites, Tools und Apps – schnell, sauber, pixelgenau.

Projekt anfragen