Befehle Zeitlich beschränken

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Hallöchen,

    mit diesem kleinen Tutorial möchte ich euch eine kurze Einführung geben, wie man einen beliebigen Befehl zeitlich begrenzen kann.

    Nehmen wir beispielsweise ein Plugin, dass so ziemlich jeder besitzt. Den Würfel Befehl.

    Mit diesem Befehl kann man würfeln, aber auch nerven. Um diese Nerverei zu verhindern, müsste man nun eine Zeitsperre einbauen. Aber wie? Die Logik ist simpel.

    Man bräuchte ein Profilfeld, in welches die Information des letzten Wurfes gespeichert wird. In einem Plugin heißt diese Zeile $main->{runtime}{now}.

    Wer ein wenig englisch bewandert ist, wird verstehen, was hier passiert. Wie fragen wir aber nun ab, ob die aktuelle Zeit die im Profil gespeicherte Zeit überschritten hat?

    Wie wir wissen, werden WENN Abfragen durch IF getätigt. Ziehen wir also Die Zeit aus dem Profilfeld von der aktuellen Zeit ab, haben wir die Zeit, die vergangen ist:

    if(($main->{runtime}{now} - $main->{current_user}{dice}))


    Wenn wir jetzt beispielsweise eine Sperre von 60 Sekunden einstellen wollen, muss in die Abfrage ein entsprechender Hinweis angefügt werden:

    if(($main->{runtime}{now} - $main->{current_user}{dice}) <= 60)


    Zu deutsch:

    WENN(($main->{runtime}{now} - $main->{current_user}{dice}) Kleiner als = 60)


    Nun muss eine entsprechende Meldung angezeigt werden, falls der Wert kleiner als 60 ist:

    return [$main->createErrorOutput('please_wait')];


    Ein ErrorOutput wird immer aus der language.lng (in unserem Falle german.lng) geholt.

    Wir müssen also eine Errormeldung in der german.lng definieren:

    error_please_wait => 'Du musst leider noch etwas warten, bis du den Befehl wieder nutzen kannst',


    Die Abfrage beenden wir durch }

    Bis hierhin sollte unsere Abfrage also so aussehen:

    if(($main->{runtime}{now} - $main->{current_user}{dice}) <= 60)
    {
    return [$main->createErrorOutput('please_wait')];
    }


    Wie wird nun aber die aktuelle Zeit gespeichert?

    Dadurch, dass wir erst abfragen, ob die Zeit wirklich nicht 60 kleiner ist, als die aktuelle, müssen wir natürlich auch hier wieder ansetzen.

    Die Abfrage ist nun fertig, der User "dürfte" jetzt würfeln. Somit müssen wir den aktuellen Zeitpunkt ins Profil eintragen:

    $main->{current_user}{dice} = $main->{runtime}{now};


    So wird aber nichts permanent gespeichert. Der User könnte sich ausloggen und neu einloggen... Die Zeit stünde wieder auf 0. Also müssen wir das Profilfeld dice auch speichern:

    $main->saveUser($main->{current_user});


    Unsere Abfrage ist nun komplett fertig und sieht (hoffentlich) etwa so aus:

    if(($main->{runtime}{now} - $main->{current_user}{dice}) <= 60)
    {
    return [$main->createErrorOutput('please_wait')];
    }

    $main->{current_user}{dice} = $main->{runtime}{now};
    $main->saveUser($main->{current_user});


    Da das alles selbstverständlich geschehen muss, bevor der Befehl ausgeführt wird, suchen wir uns unter der Zeile my($self,$main,$command,$text) = @_; (kann auch etwas anders aussehen...) das Zeichen {.

    Darunter fügen wir nun unsere Abfrage ein, weil danach erst alles andere passiert.

    Was uns zu guter letzt natürlich noch fehlt, ist ein Profilfeld. In unserem Falle hier wäre das also dice.

    Wir öffnen nun also die settings.dat und suchen:

    custom_profile_fields => [


    wodrunter wir simpel eintragen:

    'dice',


    Ich denke, dass nun jeder in seinen Befehlen auch eine Zeitsperre einbauen kann :)

    Für alle, die es nicht verstanden haben, hänge ich hier eine Beispieldatei an.

    Viel Spaß damit.

    Und nochwas natürlich:
    Ich übernehme keine Haftung falls dieses Script Schäden an eurem Chat hervorrufen sollte! Macht am besten vorher ein Backup aller Dateien!

    1.677 mal gelesen