[Frage] Discord.js - Selbstentwickelter Bot

Discussion in 'Script Sprachen' started by infslash, 14 Jun 2017.

Advertisement:

  1. infslash

    infslash Hack User

    Joined:
    13 Sep 2015
    Messages:
    184
    Likes Received:
    43
    Hallo,

    kennt sich einer von euch mit Discord Bots aus bzw. auch mit dem Discord.js Package?

    Ich habe mir einen kleinen Bot für meine Community geschrieben mit dem Package und habe folgendes Problem. Manchmal antwortet nicht auf Bot Befehle, aber nur manchmal, jedoch führt er das aus was er soll im Hintergrund. Debugging habe ich auch probiert, jedoch ohne Erfolg.
    Einige Leute auf dem Server fühlen sich gemobbt x) weil der Bot ihnen nicht antwortet.

    Um spezifischer einzugehen: Wir spielen hin und wieder TTT auf unserem eigenen Server und beispielsweise mit einem + oder !join kann man sagen dass man für den heutigen Tag teilnehmen möchte. (Ist jetzt nur einer der Befehle) Er antwortet nicht immer... aber führt den Task im Hintergrund aus. (JSON Read/Write blabla)

    Mit !status kriegt man eine Übersicht etc.... funktioniert alles wie gewollt. Es geht also nicht um Features die ich brauche sondern um Debugging Hilfe... bzw. den Grund warum er manchmal nicht antwortet aber ausführt...

    - Im Folgenden ist die Kurzfassung bzw. beschränkte Version auf den Part um den es geht
    - deleteTimeout ist auf 50 (ms) gesetzt

    Eventlistener

    HTML:
    bot.on('message', message => {
    
        var mainkek = bot.channels.find("name", "main-kek");
    
        // read file on every msg
        jsonfile.readFile(file, function(err, obj) {
            if ("undefined" === typeof obj) {
                party = {
                    timestamp: currentDate,
                    players: []
                }
                jsonfile.writeFile(file, obj, function(err) {
                    console.error(err);
                });
            } else {
                party = obj;
                party.timestamp = currentDate;
            }
            return party;
        });
    
        if (message.content.startsWith('!join') || message.content.startsWith('+')) {
            if(playerMaxReached(party['players'].length)) {
                mainkek.send("⛔ Oh das tut mir aber leid " + message.author + ", leider sind wir bereits 10 Spieler. ")
                .then(message => console.log(`Sent message: ${message.content}`))
                .catch(console.error);
            } else {
                notice = message.content;
                notice = notice.replace("+", "");
                notice = notice.replace("!join", "");
                addPlayer(message.author, notice);
            }
            message.delete(deleteTimeout);
            return;
        }
    });
    

    Die Funktion addPlayer(username, notice)

    HTML:
    function addPlayer(username, notice) {
    
        var mainkek = bot.channels.find("name", "main-kek");
    
        // read file to be up 2 date
        jsonfile.readFile(file, function(err, obj) {
            party = obj;
        });
    
        // check existence
        var playerExists = (party['players'].indexOf(username.username) > -1);
     
        if (playerExists) {
            mainkek.send( "** ⚠️" + username + ", du nimmst heute Abend bereits teil! **" );
        } else {
            if (notice.length > 1) {
                mainkek.send( "** ✅ " + username + ' spielt heute Abend mit! Yay! **\nBemerkung:  `' + notice + '`');
            } else {
                mainkek.send( "** ✅ " + username + ' spielt heute Abend mit! Yay! **');
            }
        
            party['players'].push(username.username);
            jsonfile.writeFile(file, party, function(err) {
                // console.error(err);
            });
        }
        return;
    }

    Die Funktion playerMaxReached(playerCount)

    Code:
    function playerMaxReached(playerCount) {
        if (playerCount >= playerLimit) {
            return true;
        } else {
            return false;
        }
    }
    P.S. ich nehme auch Verbesserungsvorschläge/Kritik sehr gerne an.
    Ich bin relativ neu in Node.js unterwegs, vorallem was Discord Bots angeht. Ich kenn mich jedoch ein wenig mit Javascript aus. Ein guter Plattenspieler :tongueclosed:

    Danke im Voraus!

    MfG infslash
     
    #1 infslash, 14 Jun 2017
    Last edited: 14 Jun 2017

    Advertisement:

  2. thepapanoob

    thepapanoob Active Member

    Joined:
    22 Oct 2015
    Messages:
    235
    Likes Received:
    246
    evtl ein rechte problem? hatte das letztens mit meinem lobbybot genauso das problem war damals das der bot nicht messages von anderen lesen durfte die > gast rechte hatten
     

    Advertisement:

  3. infslash

    infslash Hack User

    Joined:
    13 Sep 2015
    Messages:
    184
    Likes Received:
    43
    Der Bot selbst hat alle Rechte... wie gesagt: Hin und wieder!
    Ich hab das Gefühl der Bot ist überlastet... aber das ist halt quatsch weil er den Befehl ausführt und nur nicht in den Channel schreibt.
     
  4. Logxn

    Logxn Honorable

    Joined:
    22 Jul 2016
    Messages:
    1,052
    Likes Received:
    1,169
    sicher, dass ".send" die richtige funktion ist?

    müsste es nicht .reply sein?
    Hab die dokumentation nur schnell überflogen kp
     
    #4 Logxn, 14 Jun 2017
    Last edited: 14 Jun 2017
  5. infslash

    infslash Hack User

    Joined:
    13 Sep 2015
    Messages:
    184
    Likes Received:
    43
    Geht sowohl als auch. Reply erwähnt den Nutzer der die Message an den Bot geschrieben hat.
     
  6. Logxn

    Logxn Honorable

    Joined:
    22 Jul 2016
    Messages:
    1,052
    Likes Received:
    1,169
    läuft der bot lokal oder auf nem server?
    wenn er lokal läuft probiers mit der c# API zu schreiben die ist ausführlicher
     
  7. infslash

    infslash Hack User

    Joined:
    13 Sep 2015
    Messages:
    184
    Likes Received:
    43
    Ja, das wäre die Alternative. Ich habe ewig nicht mehr mit c# zwar geschrieben aber sollte ich hinkriegen.
    Server ist gehosted auf BladeTec der Tec - X1

     
  8. ECB2

    ECB2 Well-Known Member

    Joined:
    15 May 2016
    Messages:
    169
    Likes Received:
    767
    Was genau denn? Was war das Ergebnis?
     
  9. infslash

    infslash Hack User

    Joined:
    13 Sep 2015
    Messages:
    184
    Likes Received:
    43
    Naja funktioniert alles.
    Nachricht wird vom Bot entgegen genommen.
    Nachricht wird verarbeitet...
    Nur manchmal unerklärlich überspringt er den Reply/Send Befehl als würde er Schluckauf haben und ignorieren... echt kurios... ich würde nicht fragen wenn ich nicht zu Tode recherchiert hätte
     
  10. 4lexx

    4lexx Active Member

    Joined:
    11 Apr 2017
    Messages:
    169
    Likes Received:
    105