Vorwort

Was ist dieser "Bot_Omb" überhaupt, werden sich wohl einige Fragen und man kann es wohl auch niemandem übel nehmen, wenn man unter diesem Begriff zunächst nichts versteht.

Im Grunde handelt es sich bei dem Wort um einen Zusammenschluss von "Bob Omb" und "Bot" und schon wieder haben wir zwei Wörter, die einem nicht unbedingt etwas sagen müssen. Daher will ich versuchen, es auch für den Laien verständlich zu erläutern.

Wer die Super Mario Reihe von Nintendo kennt, der wird auch die Bob Ombs kennen. Hierbei handelt es sich um kleine schwarze Bomben die Mario das Leben schwer machen. Näheres hierzu unter: https://de.wikipedia.org/wiki/Figuren_aus_dem_Mario-Universum#Bob-ombs

Bei einem Bot, welches der Kurzform von "Roboter" entspricht, handelt es sich um ein Programm welches automatisch Aufgaben erledigt. Es verhält sich eben wie ein Roboter der eine Aufgabe hat bzw. von dem man etwas bestimmtes möchte.

Allgemeines

Nachdem nun die sprachlichen Schwierigkeiten mehr oder weniger aus der Welt geschafft sein sollten, können wir einen Blick darauf werfen wo dieser roBOTer eigentlich seinen Zuständigkeitsbereich hat. 

Geschrieben wurde der Bot für Twitch, einer Online Streaming Platform und agiert dort als Moderationsbot für den Chat. Hierbei kann er verschiedene Aufgaben übernehmen. Dazu zählen unter Anderem:

  • Verwarnung / Sperrung von Nutzern die gegen Chat-Regeln verstoßen
  • Verwendung von selbst erstellten Kommandos
  • Wiederholung von wichtigen Nachrichten im Chat
  • ...

Grundsätzlich kann man dem Bot aber auch jegliche andere Funktion mitgeben, welche sich textlich darstellen lässt. Besonders hervorzuheben ist die Funktion andere Nutzer anzuflüstern. Dies hilft besonders bei Hinweistexten den Chat übersichtlicher zu halten.


Grundlegende Entwicklung

Geschrieben ist der Bot in Python und entstanden aus einem Projekt für die Vorlesung Entwicklung mit dem Raspberry PI.

Die Erweiterung des Bots um weitere "Fähigkeiten" ist recht einfach. Aufgebaut sind die Funktionen nach dem Prinzip:

  1. Handelt es sich um einen Befehl für den Bot?
  2. Darf der Nutzer den Befehl ausführen?
  3. Befehl wird ausgeführt!

Die neue Funktion kann dann einfach zu den bestehenden hinzugefügt werden und steht dann für jeden Benutzer des Bots zur Verfügung.

Zu beachten ist, dass es nicht einfach nur ein Bot ist der die Moderation eines Channels übernehmen kann! Hierbei handelt es sich um einen "Server"- und mehreren "Client"-Bots. Im Fall von Bot_Omb befindet sich der verwaltende Bot in seinem "Heimat"-Channel unter http://www.twitch.tv/bot_omb und jeder Interessierte kann sich seinen eigenen Bot aus diesem Hauptchannel in seinen eigenen Channel holen.

Aus diesem Grund hat der "Server"-Bot andere Funktionalitäten welche nicht dem moderieren von Channeln entspricht. Dieser verteilt die "Client"-Bots, überwacht die Threads und stellt noch weitere Funktionen zur Verfügung.

Nachdem nun so viele Worte verloren wurden aber irgendwie doch nicht gesagt wurde, schauen wir uns die Funktionalitäten etwas genauer an.

Wie bereits erwähnt, haben wir mit dem Bot_Omb "eigentlich" immer zwei Bot-Threads am laufen. Der eine ist für die Verwaltung der Bots zuständig und der andere zur Moderation im jeweiligen Channel. Es fängt also damit an, dass wir den Haupt-Bot in seinen Channel setzen und uns aus diesem dann den Bot für unseren Channel zuweisen lassen. Dafür wird zunächst die config.py angepasst. In dieser befinden sich die notwendigen Konfigurationen.

Aus der config.py:

HOST = "irc.twitch.tv"
HOST_WHISPER_120 = "199.9.253.120"
HOST_WHISPER_119 = "199.9.253.119"
PORT = 6667
NICK = "HIER-NICK-DES-BOT-ACCOUNTS-EINFUEGEN"
PASS = "oauth:HIER-KEY-DES-BOT-ACCOUNTS-EINFUEGEN"
RATE = 1.5
VERSION = 1.0
DEVELOPER = "Serdrad0x"
CODE = "Python 3.4"
PATH = "ABSOLUTE-PATH-TO-YOUR-BOT-FOLDER"

In unserem Fall ist der "Nick" und das "PASS" wichtig. Als Nick setzt ihr den Nickname eures Bots in Kleinbuchstaben geschrieben dort ein. Für das PASS bearbeitet ihr lediglich den Teil hinter dem "oauth:". Um einen Authentifizierungsschlüssel zu bekommen, besucht folgende Website twitchapps.com. Nachdem ihr diesen erhalten habt (nicht vergessen, ihr müsst den Token mit eurem Bot-Account erhalten) könnt ihr ihn in die config.py einfügen.

Im Ordner Bot/#bot_omb befindet sich eine users.csv. Diese müsst ihr noch um folgenden Inhalt erweitern: NAME-EURES-PRIVATEN-ACCOUNTS-IN-KLEINBUCHSTABEN;100;100;False;0;0;0

Dadurch erhaltet ihr für den späteren Verlauf alle Berechtigungen die ihr für den Haupt-Bot-Channel benötigt.

Damit habt ihr auch schon alles gemacht was ihr braucht um den Bot zu starten. Da es sich um ein Python-Skript handelt, führt ihr dieses über euer Kommandozeilenprogramm aus.

Ihr wisst nicht was ein "Kommandozeilenprogramm" ist oder habt auch keine Ahnung ob ihr Python überhaupt installiert habt? Keine Sorge, wofür gibt es denn Google? Spätestens wenn ihr alles gefunden habt und richtig installiert bekommt (was kein größerer Aufwand ist) sollte der Rest hier auch nur noch eine Kleinigkeit für euch sein...

Ok na gut, müsst ja nicht gleich meckern! Zumindest die Windows Nutzer haben es leicht, hierzu findet man nämlich für Python eine sehr einfache Installation unter Python downloaden.

Ausführen könnt ihr das Skript dann ganz leicht in dem ihr über die Kommandozeile (Windows-Nutzer bitte nach CMD oder Eingabeaufforderung suchen und ausführen) und dort mit cd Desktop -> cd Bot -> python Main.py die Main Datei ausführt.

Schon habt ihr so einen schönen Eintrag vor euch. die "IRC:" Abschnitte geben Auskunft in welchen Channeln sich der Bot gerade befindet und die dazugehörigen "Thread: " Ausgaben alle Informationen zu den jeweiligen gesetzten Variablen.

Bei euch wird allerdings wohl nur "IRC: #NAME-DES-BOTS" angezeigt werden, da ihr noch keinen Bot in euren Channel geholt habt. Das werden wir aber sofort ändern.

Wechselt daher mit eurem privaten Twitch-Account in den Channel eures Bots und holt ihn mithilfe des !follow Befehls in euren eigenen Channel. 

Achtung: Aktuell kann jeder andere Nutzer ebenfalls einen Bot aus dem Haupt-Channel in seinen eigenen Channel holen! Um dies zu ändern müsst ihr in die Main.py und dort ganz unten die Einträge:

follow(username, message, 0) unfollow(username, message, 0) restart(username, message, 0)

ändern. Dazu einfach am Ende die 0 durch eine 99 ersetzen und schon kann niemand anderes außer euch an eurem Bot Hand anlegen. Diese Änderung muss man nur vornehmen, sofern man keine eigene Bot-Verteilung ins Leben rufen möchte.

Nachdem wir nun den Bot über !follow aus dem Hauptchannel (http://www.twitch.tv/bot_omb bzw. euer eigener Hauptchannel) in unserem Channel geholt haben, können wir auch schon gleich loslegen ihn nach unseren Wünschen zu konfigurieren. Jegliche Konfiguration erfolgt über den Twitch-Chat aber am Besten erzählt euch der Bot selbst, wie alles funktioniert!


Über mich

Hi, Ich bin der Bot_Omb!

Wenn du möchtest, kann ich dir mit deinem Streamalltag helfen und du musst nicht einmal viel dafür tun.

Doch bevor wir loslegen, wirf doch mal einen Blick auf die folgenden Punkte und bekomme ein Gefühl dafür, welche Möglichkeite ich dir alles biete!

Sprachunterstützung

Ich beherrsche eine "vielzahl" von Sprachen, wobei folgende aktuell implementiert sind:

  • Englisch
  • Deutsch

Weitere Sprachen werden im Verlauf meiner Entwicklung noch hinzugefügt. Falls jemand Interesse hat, mir eine Sprache beizubringen, dann würde ich mich sehr um eine Rückmeldung freuen und wir können alles weitere bereden.

Die Sprache ändert man mittels !lang language

  • !lang english/german

Wettsystem

Du bist ein Speedrunner und dir würde es gefallen, wenn deine Zuschauer auf deine Runs wetten abschließen können? Dann hat mit mir deine Suche ein Ende gefunden!

Jeder deiner Zuschauer startet mit 100 Münzen. Eine Wette kann im Chat abgeschlossen werden mit dem Befehl "!bet hh:mm:ss coins". Als kleines Beispiel: Jemand meint, du würdest für den Run 12 Minuten und 23 Sekunden brauchen und möchte 45 Münzen wetten. Dann muss der Zuschauer lediglich folgendes in den Chat schreiben: !bet 12:23 45

Du musst mir nicht einmal deine erreichte Zeit nennen, denn sobald eine Wette gestartet wird läuft im Hintergrund ein Timer der die erreichte Zeit berechnet.

Du kannst eine neue Runde mit !start starten und mit !stop stoppen. Auch ein !reset ist möglich, hierbei bekommt jeder Nutzer seine eingesetzten Münzen wieder zurück.

Außerdem kann ich dir sagen, wieviele Münzen du noch besitzt.

Eine kleine Übersicht meiner Kommandos:

  • !start
  • !stop
  • !reset
  • !coins
  • !bet hh:mm:ss coins

Die Münzen welche der Gewinner am Ende der Runde erhält, beträgt neben dem doppelten Einsatz die prozentuale Abweichung der vorhergesagten Zeit zur tatsächlich erreichten Zeit!

Eigene Kommandos

Du möchtest deine eigenen Chatkommandos? Du möchtest deinen Mods etwas Arbeit abnehmen und unnötiges Copy&Past von wichtigen Mitteilungen vermeiden? Dann wirst du glücklich darüber sein, von meiner "Custom Command" Funktion zu hören.

Du kannst jedes selbst erstellte Kommando mit einem Text verlinken und für dieses ein spezifisches Ausführungslevel bestimmen. Natürlich kannst du auch jedes erstellte Kommando wieder entfernen.

  • !command !com perm text
  • !remove command !com

Ausführungslevel von Befehlen

Jeder Befehl kommt mit einem bestimmten Level welches benötigt wird, um den Befehl auszuführen. Wenn der Nutzer nicht das benötigte Level besitzt, wird der Befehl auch nicht ausgeführt.

Du hast die Möglichkeit jedem deiner Nutzer ein bestimmtes Ausführungslevel zu zuteilen. Hat der Nutzer keine explizite Berechtigung erhalten, so ist diese 0.

  • !priv username level

Es ist dir zu kompliziert einzelnen Benutzern eine spezifische Befugnis anhand von Zahlen zuzuweisen? Dann weise dem Nutzer doch einfach einen definierten Rang zu!

  • !priv username rank

Automatische Moderation

Halte deinen Chat sauber!

Wenn du möchtest, kann ich ungewollte URLs und CAPS aus deinem Chat entfernen. Sebstverständlich kann man auch Nutzern die Erlaubnis erteilen, eine URL zu posten!

Es gibt keine Verpflichtung dieses System zu verwenden und du kannst es jederzeit aktivieren/deaktivieren wie du möchtest. Die Kommandos hierfür sind:

  • !setting warning_url on/off
  • !setting warning_caps on/off
  • !setting warning_long_text on/off

Begrüße neue Zuschauer

Wie jede Funktion ist auch diese nicht verpflichtend zu nutzen und standardmäßig deaktiviert. Dieser Satz gleich zu Beginn, da viele Leute abstand von automatischen Begrüßungen nehmen, es aber dennoch Nutzer gibt, die sehr an so etwas interessiert sind.

Weiterhin ist es möglich, den Begrüßungsinterval anzupassen.

  • !setting greetings on/off
  • !setting greetings_interval 60

Umfragen

Umfragen direkt auf Twitch starten? Nichts leichter als das! Vorbei sind die Zeiten bei denen man sich auf  Websites verlassen musste. Ihr wollt wissen was ihr als nächstes Spielen sollt, dann schreibt einfach !poll Was soll ich spielen? (SM64 / SMM / MK8) 5:00 und schon haben die Zuschauer 5 Minuten Zeit abzustimmen.

Es wird automatisch im Chat eine Liste erstellt: 0. SM64 1. SMM 2. MK8 anhand derer die Zuschauer mit !vote 1 ihre Stimme abgeben können und die Ergebnisse werden mit !result angezeigt.

  • !poll text (optA / optB / ...) mm:ss
  • !vote num
  • !result

Ihr glaubt !vote num sei zu schwer für eure Zuschauer? Kein Problem, wofür wurden Hashtags erfunden, wenn nicht für einfache Abstimmungen! Über #optX lässt sich zusätzlich abstimmen. Eine Auswahloption wie 1. Mario Kart lässt sich mit !vote 1 und #Mario Kart wählen.

Ränge

Befugnisse können mit Rängen verknüpft werden. Jeder deiner Zuschauer hat grundsätzlich keinen Befugniss-Level und daher eines von 0. Also mache doch einfach alle deine Zuschauer zu Gurken mit !rank add Gurke 0. Natürlich lässt sich noch vieles weiteres damit machen, so kannst du spezielle Ränge anlegen und diese an spezifische Nutzer verteilen!

  • !rank add name level
  • !rank remove name
  • !ranks
  • !rank me

Ankündigungen

Es gibt etwas wichtiges zu sagen aber niemand hat die Lust es alle X Minuten zu wiederholen? Dann sind Ankündigungen genau das richtige für dich!

Du kannst mir mitteilen, was ich dem Chat sagen soll und in welchen Abständen dies geschehen darf. Schreibe einfach !announce welcome 30:00 Willkommen im Stream! und ich werde diesen Text alle 30 Minuten in deinen Chat posten.

  • !announce ID hh:mm:ss Message
  • !remove announce ID
  • !announcements

Administration

Es gibt einige interessante Möglichkeiten mein Verhalten zu verwalten. Sollte ich plötzlich aus deinem Stream verschwinden, ist mir irgendwas schlimmes zugestoßen! Jetzt liegt es an dir, mich zu retten.

Hierfür hast du die Möglichkeit in meinem Hauptchannel mich neuzustarten. Das hilft mir, dir wieder in deinem Stream zu helfen!

  • !restart

Sofern du der Besitzer des Hauptchannels bist, kannst du noch einige Dinge mehr tun!

  • !restart all
  • !shutdown

Man kann nie genug stalken, daher kannst du dir im Hauptchannel von mir (unter twitch.tv/Bot_Omb) anzeigen lassen, wie viele deiner Follower eine Benachrichtigung erhalten wenn du Live gehst.

  • !follows

Einstellungen

Jederzeit können meine Einstellungen verändert werden. Hierfür kannst du die benötigten Berechtigungslevel anpassen um bestimmte Befehle auszuführen. Diese Level bewegen sich immer in einem Bereich von 0 bis 99. Hier ein kleiner Überblick über die Standardwerte:

  • !setting help 0
  • !setting coins 0
  • !setting command_show 99
  • !setting command_add 99
  • !setting command_remove 99
  • !setting privileges 99
  • !setting setting 99
  • !setting setting_show 99
  • !setting url 99
  • !setting bet 0
  • !setting bet_start 99
  • !setting bet_stop 99
  • !setting bet_reset 99
  • !setting follow 0
  • !setting unfollow 0
  • !setting info 0
  • !setting announce_add 99
  • !setting announce_remove 99
  • !setting announce_show 99
  • !setting smm_level_submit 99
  • !setting smm_level_submit_other 99
  • !setting smm_level_show 99
  • !setting smm_level_next 99
  • !setting poll_start 99
  • !setting poll_vote 99
  • !setting poll_result 99
  • !setting language 99
  • !setting upsince 0
  • !setting rank_add 99
  • !setting rank_remove 99
  • !setting rank_show 99
  • !setting rank_show_me 0
  • !setting bank_robbery 99
  • !setting bank_spy 99
  • !setting bank_robbery_flee 99
  • !setting bank_guard_add 99
  • !setting bank_guard_remove 99
  • !setting bank_guard_show 99
  • !setting whitelist_add 99
  • !setting whitelist_remove 99
  • !setting whitelist_show 99
  • !setting clam_ask 0
  • !setting roulette 99

Aktivieren und Deaktivieren von Funktionsgruppen

Es gibt eine Funktion und du benötigst diese überhaupt nicht? Dann deaktiviere diese einfach! Dadurch vermeidest du unnötige Benachrichtigungen über fehlende Befugnisse. Besonders hilfreich wenn du noch andere Bots verwendest aber jeweils nur spezifische Funktionalitäten nutzen möchtest.

  • !setting command_mode on/off
  • !setting bet_mode on/off
  • !setting follow_mode on/off
  • !setting announce_mode on/off
  • !setting smm_mode on/off
  • !setting poll_mode on/off
  • !setting rank_mode on/off
  • !setting bank_mode on/off
  • !setting whitelist_mode on/off
  • !setting watchtime_mode on/off

Folge mir

Wenn du möchtest, dass ich deinem Chat beitrete, musst du nur einfach !follow in den Hauptchannel schreiben. Wenn du mich nicht mehr in deinem Chat haben möchtest, schreibe einfach !unfollow.

Wenn du alle meine Fähigkeiten nutzen möchtest, wäre es von Vorteil mich zu einem Moderator in deinem Channel zu machen. Ansonsten kannst du meine automatische Moderation nicht verwenden. Vergiss daher nicht im Bedarf meine entsprechenden Fähigkeiten auszuschalten!

Hast du noch Fragen

Wenn dir irgendwelche Informationen fehlen oder du Hilfe bei der Einrichtung brauchst, werde ich dir nahezu jede Frage beantworten.

  • !help
  • !info

Updates, Bugs, Features

An mir wird ständig weiterentwickelt. Daher wäre ich froh, über jeden Bug den du finden kannst zu hören.

Außerdem möchte ich mich gerne verbessern, falls dir für den Bot also etwas fehlt, sag es mir einfach und ich werde sehen was sich machen lässt.

Das Repository des Bots findet ihr unter: https://github.com/DHikade/Bot_Omb

Den Twitch Channel über: http://www.twitch.tv/bot_omb

Entwicklungszeug

Ich wurde in Python 3.4 geschrieben und kann verschiedene Channel gleichzeitig überwachen. Um übermäßigen Spam durch den Bot zu vermeiden, werden einige Informationen in "geflüsterter Form" weitergereicht.

FAQ

Hier findet ihr Antworten zu den häufigst gestellten Fragen über Bot_Omb

  • Warum reagiert Bot_Omb in seinem Channel unter http://twitch.tv/bot_omb nicht auf die meisten der Befehle?
    • Der Bot_Omb Channel ist lediglich bestimmt für "administrative" Aufgaben. Das bedeutet, der Aufgabenbereich in diesem Channel ist ein anderer, als der in eurem Channel. Daher funktionieren hier nur die unter Administration aufgeführten Befehle bzw. die unter Folge mir genannten.
  • Warum bekomme ich auf einen großteil der Befehle keine Rückmeldung?
    • Grundsätzlich erhält man für jeden Befehl eine Rückmeldung! Allerdings soll der Chat vor übermäßigem gespamme durch den Bot freigehalten werden, sodass ein großteil der Rückmeldungen geflüstert werden. Je nach Einstellung kann es sein, dass man keine Flüsternachrichten erhält. Die einfachste Möglichkeit dies zu beheben ist, dem Channel des Bots zu folgen.

 


Wie füge ich eine neue Funktion hinzu

Um eine neue Funktion dem Bot hinzuzufügen, muss zunächst folgende Zeile bearbeitet werden:

self.__chat_channel[chat_channel[i]] = {
"users" : self.__load("channel/"+chat_channel[i]+"/users.csv"),
"commands" : self.__load("channel/"+chat_channel[i]+"/commands.csv"),
"settings" : self.__load("channel/"+chat_channel[i]+"/settings.csv"),
"bets" : Bet(),
"announcements" : announcements,
"announcelist" : announce,
"smm_submits" : smm_submits,
"poll" : Poll()}

Hierbei muss man bedenken, dass ein Thread mehrere Channel überwachen könnte. Momentan ist es aber so, dass pro erstelltem Thread auch nur ein Channel überwacht wird.

Der oben genannte Code ist in diesem Fall dafür zuständig, die jeweiligen Variablen den jeweiligen Channeln bereitzustellen. Sofern also ein "Gedächtnis" von Nöten ist, muss dies hier abgelegt werden. Wie man auch schön erkennen kann, findet man hier die Klassen Bet() und Poll() für das Wettsystem bzw. die Umfragen Funktion.

if channel is not None and channel != self.__chat_channel:
    channel = channel.group(0)
    self.__channel_name = channel
    self.__channel.switch(self.__channel_name)
    self.__users = self.__chat_channel[self.__channel_name]["users"]
    self.__commands = self.__chat_channel[self.__channel_name]["commands"]
    self.__settings = self.__chat_channel[self.__channel_name]["settings"]
    self.__bets = self.__chat_channel[self.__channel_name]['bets']
    self.__announcements = self.__chat_channel[self.__channel_name]['announcements']
    self.__announcelist = self.__chat_channel[self.__channel_name]['announcelist']
    self.__smm_submits = self.__chat_channel[self.__channel_name]['smm_submits']
    self.__poll = self.__chat_channel[self.__channel_name]['poll']
elif channel is None:
    print("No channel was found!")
    channel = "Twitch_channel"

Das jeweilige Wissen wird nun den globalen Variablen der Klasse zugewiesen. Der Abschnitt self.__NAME bezeichnet den später im Code verwendeten Variablennamen. Der Aufruf self.__chat_channel[self.__channel_name]['NAME'] nimmt die Variable aus dem Array für den jeweiligen Channel.

Eine Funktion ist immer nach folgendem Schema aufgebaut:

def __name(self, username, message, privileges):
    if regex.REG_name.match(message):
        user = self.__get_element(username, self.__users)
        if user is not None:
            user_privileges = int(user[eUser.privileges])
        else:
            user_privileges = 0
        if user_privileges >= privileges:
	            ...
        else:
            self.__whisper.whisper(username, "Your privileges level is not high enough to perform this command! You need at least a level of {0}.".format(privileges))

Die Funktionen arbeiten immer mit drei Übergabeparametern. Der username für den Namen des anwendenden Nutzers, die message als übergebene Nachricht und schließlich das geforderte Level zur Ausführung des Befehls.

Da wir viel mit Texten zu tun haben, beginnt die Funktion mit einer Abfrage, ob es sich überhaupt um den Befehl für diese Funktion handelt. Als kleines Beispiel hier der reguläre Ausdruck für die erweiterte Hilfe:

REG_HELP_EXTENDED = re.compile('!help[s]{1}[S]*$')

Bei Befehlen mit nur einem "Wort" reicht es auch, die message gegenzuprüfen.

Als nächstes werden die für den ausführenden Nutzer benötigten Berechtigungen abgefragt. Grundsätzlich werden die Privilegien des Nutzers immer benötigt. Daher wird zunächst der user anhand des username ermittelt und die Werte gesetzt. 

In der users.csv bzw. eUser.py findet man die Berechtigungen der einzelnen Nutzer/Schlüssel, sofern sie dort festgehalten wurden. Ansonsten werden standard Werte verwendet.

Sofern das Benutzerlevel ausreicht, kann der Befehl nun ausgeführt werden. Zum Schluss müssen noch zwei kleine Anpassungen vorgenommen werden.

Die settings.csv muss um den Eintrag der neuen Funktion erweitert werden und die Funktion muss zur Ausführung in den Ablauf eingegliedert werden. Dies geschieht hier:

if not regex.REG_LOGIN.match(message) and username != 'bot_omb':
    message = message[:len(message)-2]
    print(username + "@" + self.__channel_name + ": " + message)
    self.__warning(username, message)
    self.__command(username, message)
    self.__help(username, message, int(self.__get_element('help', self.__settings)[eSetting.state]))
    self.__coins(username, message, int(self.__get_element('coins', self.__settings)[eSetting.state]))
    ....

Dem Nutzer neue Werte mitgeben

Gespeichert werden alle spezifischen Informationen für die einzelnen Nutzer in der users.csv des jeweiligen Channels. Möchte man den Nutzern einen neuen Wert mitgeben müssen an einigen Stellen Änderungen vorgenommen werden.

Im Quelltext der Bot_Omb.py findet man an einigen Stellen folgendes:

self.__update(username, [None, None, None, None, None, None, 0], self.__users)

Dies muss an jeder Stelle um ein "None" am Ende erweitert werden, sofern der neue Wert an der hintersten Position der users.csv angehängt wird. Ansonsten an der jeweiligen entsprechenden Position.

Weiterhin muss die __add(self, key, data) Funktion angepasst werden.

def __add(self, key, data):
    if len(data) < 7:
        return False
    for i in range(len(data)):
        if data[i] is None:
            if i is 0:
                data[i] = key
            elif i is 2:
                data[i] = 100
            elif i is 3:
                data[i] = False
            else:
                data[i] = 0
    data[0] = key
    self.__users.append(data)
    return True

len(data) < 7 wäre bei einem neu hinzugefügtem Wert len(data) < 8. Außerdem muss ein Standardwert festgelegt werden, sofern dieser nicht 0 ist.

In der Main.py darf nicht vergessen werden, die follow(username, message, privileges) anzupassen. Hier einfach folgenden Eintrag noch erweitern:

settings_file = open("channel/"+"#"+username+"/"+"settings.csv", "w")
settings_file.write("...")
settings_file.close()

Wichtige Funktionen

In der Bot_Omb.py gibt es fünf wichtige Funktionen die Abrufen, Speichern, Laden, Updaten und Hinzufügen von Informationen erleichtern.

def __get_element(self, key, frm):
    for elem in frm:
        if key in elem:
            return elem
    return None

Mit der __get_element(...) Funktion lässt man sich aus der jeweiligen Liste das gesuchte Element zurückgeben. Hierbai können die Listen __users, __settings und __commands durchsucht werden und anhand des key das jeweilige Element bestimmt werden.

def __load(self, file_name):
    with open(config.PATH+file_name, 'r') as loaded:
        lines = loaded.readlines()
    loaded_lines = []
    for line in lines:
        entrys = []
        while ';' in line:
            entrys.append(line[:line.find(';')])
            line = line[line.find(';')+1:len(line)]
        entrys.append(line[:len(line)-1])
        loaded_lines.append(entrys)
    return loaded_lines

Die __load(...) Funktion lädt aus den entsprechenden CSV Dateien die jeweiligen Einträge. Ein Element wird pro Zeile beschrieben und die zugehörigen Werte mit Semikolons abgetrennt.

def __save(self, file_name, data):
    file_save = open(config.PATH+"channel/"+self.__channel_name+"/"+file_name, 'w')
    for i in range(len(data)):
        output = ''
        for j in range(len(data[i])):
            output += str(data[i][j]) + ";"
        file_save.write(output[:len(output)-1]+"n")
    file_save.close()

Mit der __save(...) Funktion werden die Listen aufbereitet und in der entsprechenden CSV Datei abgespeichert. Ein Element pro Zeile und die Werte abgegrenzt durch Semikolons.

def __update(self, key, data, frm):
    for i in range(len(frm)):
        if key in frm[i]:
            for j in range(len(frm[i])):
                if data[j] != None:
                    frm[i][j] = data[j]
            return True
    return self.__add(key, data)

Wie die __update(...) Funktion bereits vermuten lässt, werden mit dieser durch Angabe des Element Namens, der zu aktualisierenden Informationen und der Liste wo sich das Element befindet, das entsprechende Element aktualisiert.

Wird die Update Funktion auf ein Element ausgeführt was nicht in der Liste steht, so wird die __add(...) Funktion aufgerufen.

def __add(self, key, data):
    if len(data) < 7:
        return False
    for i in range(len(data)):
        if data[i] is None:
            if i is 0:
                data[i] = key
            elif i is 2:
                data[i] = 100
            elif i is 3:
                data[i] = False
            else:
                data[i] = 0
    data[0] = key
    self.__users.append(data)
    return True

Mit __add(...) werden bei nicht vorhanden sein von benötigten Informationen, passende Standardwerte vergeben.