Beiträge von LeonMrBonnie

    Hallöchen,
    da ich mit in letzter Zeit sehr viel mit JavaScript beschäftige und mich selbst einfach fortbilden möchte, habe ich nun vor einigen Tagen begonnen einen Discordbot in NodeJS zu schreiben.
    Vorher habe ich mich hauptsächlich mit der Webentwicklung auf NodeJS Basis beschäftigt, dies ist also ein erstes mal für mich.


    [tabmenu]


    [tab='Verwendete Packages']
    [subtab='DiscordJS']
    Dieses Package ist das Grundgerüst für den Bot. Es ist eine Library zur einfachen Kommunikation mit der DiscordAPI.
    Ohne dieses Package würde der ganze Bot nicht funktionieren.
    Zu finden unter: discord.js.org
    [subtab='FS (Filesystem)']
    Dieses Package wird für das auslesen und dem schreiben in der Userdatenbank verwendet.
    Es ist bei NodeJS standartmäßig mit dabei.
    [subtab=node-opus]
    Dieses Package wird dafür verwendet Audio vom Bot zu übertragen.
    Zu finden unter: node-opus - npm
    [subtab=ytdl-core-discord]
    Dieses Package wird dafür verwendet YouTube Videos abzuspielen.
    Zu finden unter: ytdl-core-discord - npm
    [subtab='Weitere']
    Weitere Packages sind momentan nicht vorhanden. Ich möchte die Anzahl so niedrig wie möglich halten, da ich diesen Bot zum lernen verwenden möchte.
    [/tabmenu]


    [tabmenu]


    [tab='Vorhandene Features']
    [subtab='Konfiguration in separater Datei']
    Die komplette Konfiguration des Bots wird in einer separaten Datei (config.js) gemacht.
    Um den Bot also nutzen zu können, muss man die Hauptdatei des Bots garnicht anfassen.
    [subtab='Commandhandler']
    Es ist eine Art Commandhandler vorhanden, sodass neue Befehle einfach hinzugefügt werden können.
    Die vorhandenen Befehle können im Bereich Befehle eingesehen werden.
    [subtab='Rechtesystem']
    Es ist bereits ein einfaches Rechtesystem mit insgesamt 3 Rängen vorhanden.
    Diese 3 Ränge sind: User, Moderator, Administrator
    Einige Befehle können als normaler User nicht ausgeführt werden, wie z.B. Kick und Ban.
    [subtab='Userdatenbank']
    Sobald ein Nutzer dem Discord auf dem der Bot läuft connectet, wird dieser in der Userdatenbank gespeichert.
    Bisher wird nur die UserID, die Anzahl der Warns und das Beitrittsdatum gespeichert.
    [subtab='Errorhandler']
    Falls Fehler in der Konfiguration des Bots erkannt werden, werden diese automatisch in der Konsole ausgegeben.
    [subtab='Automatische Join/Leave Nachrichten']
    Sobald ein Nutzer den Discord betritt oder verlässt, versendet der Bot eine Infonachricht in den Infochannel.
    [subtab=Anti Command Spam]
    Damit Nutzer keine Befehle spammen, gibt es ein automatisches Anti Command Spam System, welches einen Befehl von einem User nur alle X Sekunden zulässt.
    Die Wartezeit kann in der Config jederzeit angepasst werden.
    [/tabmenu]


    [tabmenu]


    [tab='Befehle']
    [subtab='help']
    Der Help Befehl zeigt die Erklärung und benötigten Rechte für alle vorhandenen Befehle an.
    Dieser Befehl kann von jedem ausgeführt werden.

    [subtab='cleanup']
    Der Cleanup Befehl löscht alle vorhandenen Nachrichten im Botchannel.
    Dieser Befehl kann nur von Admins und Mods ausgeführt werden.

    [subtab='poke']
    Der Poke Befehl ist ein kleiner Funbefehl mit welchem man den Bot anstupsen kann.
    Dieser Befehl kann von jedem ausgeführt werden.

    [subtab='admins']
    Der Admins Befehl ist ein Befehl welcher alle vorhandenen Administratoren und Moderatoren auf dem Discord anzeigt.
    Dieser Befehl kann von jedem verwendet werden.

    [subtab=developer]
    Der Developer Befehl ist ein Befehl der die Kontaktmöglichkeit zum Entwickler zeigt.
    Dieser Befehl kann von jedem verwendet werden.

    [subtab=userinfo]
    Der Userinfo Befehl zeigt Informationen über einen gewählten User an.
    Dieser Befehl kann von jedem verwendet werden.

    [subtab='warn']
    Der Warn Befehl verwarnt einen Nutzer mit einem Grund.
    Dieser Befehl kann nur von Admins und Mods verwendet werden.

    [subtab='unwarn']
    Der Unwarn Befehl entfernt einen Warn von einem Nutzer.
    Dieser Befehl kann nur von Admins und Mods verwendet werden.

    [subtab='feed']
    Der Feed Befehl ist ein Funbefehl der überprüft ob ein User gerade feedet. (Yasuo spielt)
    Dieser Befehl kann von jedem verwendet werden.
    BILD FEHLT!
    [subtab='kick']
    Der Kick Befehl wirft einen Nutzer mit einem Grund vom Discord Server.
    Dieser Befehl kann nur von Admins und Mods verwendet werden.

    [subtab='ban']
    Der Ban Befehl bannt einen Nutzer mit einem Grund vom Discord Server.
    Dieser Befehl kann nur von Admins und Mods verwendet werden.

    [subtab=meme]
    Der Meme Befehl wählt ein zufälliges Meme aus dem Memeordner aus und postet es.
    Dieser Befehl kann von jedem verwendet werden.

    [subtab=setusername]
    Der Setusername Befehl setzt den Benutzernamen von einem User.
    Dieser Befehl kann nur von Admins und Mods verwendet werden.

    [/tabmenu]


    [tabmenu]


    [tab=Changelog]
    [subtab=v0.0.4]
    - Befehle playyoutube und stopyoutube hinzugefügt
    - Commandhandler (mal wieder) überarbeitet
    - Standartdaten der Config wurden angepasst
    [subtab=v0.0.3]
    - Weitere Konfigurationsmöglichkeiten hinzugefügt
    -- Join Nachrichten de/aktivieren, Leave Nachrichten de/aktivieren, Connect Nachricht de/aktivieren, Benutzername des Bots
    - Befehl setusername hinzugefügt
    - Load-Json-File Package entfernt (Sorgte für Komplikationen)
    - Einige Anpassungen am Commandhandler
    - node-opus Package hinzugefügt (Zum Abspielen von Audiostreams)
    - ytdl-core-discord Package hinzugefügt (Zum Abspielen von YouTube Videos)
    [subtab=v0.0.2]
    - Commandhandler neu geschrieben (Befehle werden aus einer JSON Datei geladen)
    - Befehle kick und ban neu geschrieben
    - Befehl help dynamisch geschrieben
    - Anti Command Spam hinzugefügt (Wartezeit kann in Config angepasst werden)
    - Befehl meme hinzugefügt (Wählt ein zufälliges Meme aus und postet es)
    [subtab=v0.0.1]
    - Alle bisher vorhandenen Features eingefügt
    Nach diesem Changelog werden richtige Changelogs folgen.
    [/tabmenu]


    Sourcecode ist zu finden auf GitHub
    Für Feedback und Fragen bin ich jederzeit offen!

    Ist garnicht so schwer.
    Wichtig ist nur dass du in jeder deiner Module auch y_hooks neu includest und dann kannst du einfach jedes beliebige Callback so hooken:

    hook OnPlayerConnect(playerid)
    {


    }

    Dann verwende dafür einfach ein Array.


    Statt new IsDoorOpened; machst du einfach new IsDoorOpened[2];


    Und dann deine Abfrage so:

    new i = /*X*/(playerid);
    if(i == -1) return 1;
    switch(i)
    {
    case 0: //Tür 1
    {
    new Float:x,Float:y,Float:z;
    GetDynamicObjectPos(X[i],x,y,z);
    MoveDynamicObject(Y[i], x-1.6816,y,z,1);
    UpdateDynamic3DTextLabelText(X[i],-1,"/*X*/");
    IsDoorOpened[0] = 1; //is Tür 1 offen
    }
    case 1: //Tür 2
    {
    UpdateDynamic3DTextLabelText(Y[i],-1,"/*X*/");
    IsDoorOpened[1] = 1; //is Tür 2 offen
    }
    }


    if(sscanf(params, "fffdd", PoS[0], PoS[1], PoS[2]))return SendClientMessage(playerid, COLOR_WHITE, "/tp [Float-X] [Float-Y] [Float-Z]");

    Diese Zeile solltest du in folgendes ändern:

    if(sscanf(params, "fff", PoS[0], PoS[1], PoS[2]))return SendClientMessage(playerid, COLOR_WHITE, "/tp [Float-X] [Float-Y] [Float-Z]");

    Die 2 d's bei den Parametern sind unnötig, da du als 4. und 5. Parameter keinen Integer angibst.
    Dazu solltest du auch die Variable PoS mit Float: als Float deklarieren.

    Deine MySQL Query ist falsch. Dazu lädst du nun wieder jedes mal nur den RangTag von dir selber.


    Die MySQL Query solltest du so ändern:

    new query[256];
    mysql_format(handle,query,sizeof(query),"SELECT RPName, RangTag, Rang FROM `accounts` WHERE `Fraktion` = %d ORDER BY Rang DESC", fraktionid);
    mysql_tquery(handle, query, "MemberList", "i", playerid);

    Die Variable fraktionid musst du dann eben selbst in deinem Code anpassen, damit es die richtige Fraktionsid ist.

    In Zeile 10 gibst du auch immer nur deine eigenen Daten an:
    format(string, sizeof(string), "%s\n%s\t%s",string, GetFraktionsRangTag(playerid), RemoveUnderscore(SpielerDaten[playerid][player_RPName]));


    Ändere dies zu:

    format(string, sizeof(string), "%s\n%s\t%s",string, frakrangtag,name);

    Da sollte man dann aber auch mal eine Regelung für einführen.
    Manchmal werden Threads garnicht erst freigeschaltet weil die Zahlungsmethoden nicht angegeben sind und andere male werden sie freigeschaltet, es wird aber ein Kommentar vom Moderator hinterlassen.


    Sollte man sich vielleicht innerhalb des Teams einfach mal absprechen, wie man das handhabt.