• If you need help or want to discuss things, you now can also join us on our Discord Server!
  • A first preview of the unlimited version of SinusBot can be found in the Upcoming Changes thread. A version for Windows will follow, but we don't have a release date, yet.

DE Hat jemand eine Idee? - Voteban Skript

Heyho! Ich habe mir nun ein eigenes Voteban Skript geschrieben, jedoch habe ich ein Problem. Wenn ein Voteban gestartet wird kann man die Befehle zum abstimmen aufgrund meiner "wait" Funktion nicht verwenden. Hat da jemand vllt eine Idee?
JavaScript:
registerPlugin({
    name: "Startkick",
    version: "0.3.1",
    description: "Banne Nutzer Temporär vom Server",
    author: "Kuschel",
    backends: ["ts3"],
    engine: ">= 1.0.0",
    autorun: false,
    enableWeb: false,
    hidden: false,
    requiredModules: [],
    vars: [{
        name: "admins",
        type: "strings",
        title: "Benutzer welche Kicken können",
    }, {
        name: "bypass",
        type: "strings",
        title: "Benutzer welche nicht gekickt werden können",
    }, {
        name: "reseter",
        type: "strings",
        title: "Benutzer welche den Cooldown zurücksetzen können",
    }],
    voiceCommands: []
}, function(_, config, meta) {

    const engine = require("engine");
    const backend = require("backend");
    const event = require("event");
    const store = require("store");
   let cooldown = 2880;
    event.on("chat", ev => {   
   let client = ev.client;
        let message = ev.text.split(" ").filter(i => /\s/.test(i) === false && i.length > 0);
        let command = message[0].toLowerCase();   
        if (command === "!startkick") {
            let target = message.slice(1).join(" ");
            let reason = message.slice(2).join(" ");
            if (hasServerGroupWithID(client, config.admins)) {   
            if (target.length <= 0)
                return client.chat("[color=#b700ff]Rangsystem ×[/color] Falscher Syntax, verwende bitte [color=red]!startkick <Nutzer> <Grund>[/color]."); // Wrong syntax message
            if (reason.length <= 0)
                return client.chat("[color=#b700ff]Rangsystem ×[/color] Falscher Syntax, verwende bitte [color=red]!startkick <Nutzer> <Grund>[/color]."); // Wrong syntax message
                let targetClient;
            if (backend.getClientByNick(target)) {
                targetClient = backend.getClientByNick(target);
            } else if (backend.getClientByUID(target)) {
                targetClient = backend.getClientByUID(target);
            } else return client.chat("[color=#b700ff]Rangsystem ×[/color] Es wurde kein Benutzer mit diesem Namen gefunden.");
            if (isAllowed(targetClient)) {
                if (cooldownExpired(client)){
                    if (store.get("kickon") === undefined ) {
                    store.set("kickon", 1);
                    startCooldown(client);
                    backend.getClients().forEach(client => sendBroadcast(client, "»---------------=====[color=lightblue][[/color][b]» Startkick «[/b][color=lightblue]][/color]=====---------------«" ));
                    backend.getClients().forEach(client => sendBroadcast(client, "[b]Ersteller:[/b] " + client.name() ));
                    backend.getClients().forEach(client => sendBroadcast(client, "[b]Bestrafender:[/b] " + targetClient.name() ));
                    backend.getClients().forEach(client => sendBroadcast(client, "[b]Grund:[/b] " + reason ));
                    backend.getClients().forEach(client => sendBroadcast(client, "[b]Abstimmungsdauer:[/b] 30 Sekunden"));
                    backend.getClients().forEach(client => sendBroadcast(client, ""));
                    backend.getClients().forEach(client => sendBroadcast(client, "  » Stimme jetzt mit [color=red]!kickja[/color] für den Rauswurf von [color=red]" + targetClient.name() + "[/color] und mit [color=red]!kicknein[/color] gegen den Rauswurf von [color=red]" + targetClient.name() + "[/color] ab."));
                    backend.getClients().forEach(client => sendBroadcast(client, "»---------------=====[color=lightblue][[/color][b]» Startkick «[/b][color=lightblue]][/color]=====---------------«" ));
                    wait(27000);
                    backend.getClients().forEach(client => sendBroadcast(client, "[color=#b700ff]Startkick ×[/color] Die Abstimmung um [color=red]" + targetClient.name() + "[/color] zu bestrafen endet in [color=red]3 Sekunden[/color]."));
                    wait(1000);
                    backend.getClients().forEach(client => sendBroadcast(client, "[color=#b700ff]Startkick ×[/color] Die Abstimmung um [color=red]" + targetClient.name() + "[/color] zu bestrafen endet in [color=red]2 Sekunden[/color]."));
                    wait(1000);
                    backend.getClients().forEach(client => sendBroadcast(client, "[color=#b700ff]Startkick ×[/color] Die Abstimmung um [color=red]" + targetClient.name() + "[/color] zu bestrafen endet in [color=red]einer Sekunde[/color]."));
                    wait(1000);
                    backend.getClients().forEach(client => sendBroadcast(client, "[color=#b700ff]Startkick ×[/color] Die Abstimmung um [color=red]" + targetClient.name() + "[/color] zu bestrafen ist beendet."));
                    backend.getClients().forEach(client => sendBroadcast(client, "[color=#b700ff]Startkick ×[/color] Es waren [color=red]" + store.get("kickja") + "[/color] Benutzer dafür [color=red]" + targetClient.name() + "[/color] rauszuwerfen und [color=red]" + store.get("kicknein") + "[/color] Benutzer dagegen."));
                    if (store.get("kickja") > store.get("kicknein")) {
                        backend.getClients().forEach(client => sendBroadcast(client, "[color=#b700ff]Startkick ×[/color] Der Benutzer [color=red]" + targetClient.name() + "wurde erfolgreich für [color=red]5 Minuten[/color] rausgeworfen."));
                        targetClient.ban(300, "Du wurdest durch einen Startkick rausgeworfen!");
                        store.unset("kickon");
                        store.unset("kickja");
                        store.unset("kicknein");
                        backend.getClients().forEach(client => store.unset("kickvote" + client.uid()));
                        backend.getClients().forEach(client => sendBroadcast(client, "[color=#b700ff]Startkick ×[/color] Die Abstimmung wurde beendet."));
                    }
                    if (store.get("kickja") < store.get("kicknein")) {
                        backend.getClients().forEach(client => sendBroadcast(client, "[color=#b700ff]Startkick ×[/color] Der Benutzer [color=red]" + targetClient.name() + "wurde [b]nicht[/b] rausgeworfen."));
                        store.unset("kickon");
                        store.unset("kickja");
                        store.unset("kicknein");
                        backend.getClients().forEach(client => store.unset("kickvote" + client.uid()));
                        backend.getClients().forEach(client => sendBroadcast(client, "[color=#b700ff]Startkick ×[/color] Die Abstimmung wurde beendet."));
                    }
                    if (store.get("kickja") == store.get("kicknein")) {
                        backend.getClients().forEach(client => sendBroadcast(client, "[color=#b700ff]Startkick ×[/color] Der Benutzer [color=red]" + targetClient.name() + "wurde [b]nicht[/b] rausgeworfen. Da es einen Stimmengleichstand gab."));
                        store.unset("kickon");
                        store.unset("kickja");
                        store.unset("kicknein");
                        backend.getClients().forEach(client => store.unset("kickvote" + client.uid()));
                        backend.getClients().forEach(client => sendBroadcast(client, "[color=#b700ff]Startkick ×[/color] Die Abstimmung wurde beendet."));
                    }
                    } else return client.chat("[color=#b700ff]Rangsystem ×[/color] Derzeit läuft bereits ein Startkick.");
                } else return client.chat("[color=#b700ff]Rangsystem ×[/color] Du kannst diesen Befehl nur alle [color=red]2 Tage[/color] verwenden.");
            } else return client.chat("[color=#b700ff]Rangsystem ×[/color] Du kannst diesen Benutzer nicht rauswerfen.");
            } else return client.chat("[color=#b700ff]Rangsystem ×[/color] Dieser Befehl ist erst ab dem [color=red]Swein Rang[/color] verfügbar.");   
    } else {
        
        if (command === "!kickja") {
        if (store.get("kickon") === undefined) {
            return client.chat("[color=#b700ff]Rangsystem ×[/color] Es läuft derzeit keine Abstimmung.");
        } else {
        if (hasServerGroupWithID(client, 10)) {
            return client.chat("[color=#b700ff]Rangsystem ×[/color] Gäste können leider nicht abstimmen.");
        }
        if (store.get("kickvote" + client.uid()) == undefined) {
            store.set("kickvote" + client.uid(), 1);
            actualvotej = store.get("kickja");
            actualvotej++;
            store.set("kickja", actualvotej);
            client.chat("[color=#b700ff]Rangsystem ×[/color] Du hast für den Rauswurf gestimmt.");
        } else return client.chat("[color=#b700ff]Rangsystem ×[/color] Du hast bereits abgestimmt!");
        }     }
        if (command === "!kicknein") {
        if (store.get("kickon") === undefined) {
            return client.chat("[color=#b700ff]Rangsystem ×[/color] Es läuft derzeit keine Abstimmung.");
        } else {
        if (hasServerGroupWithID(client, 10)) {
            return client.chat("[color=#b700ff]Rangsystem ×[/color] Gäste können leider nicht abstimmen.");
        }
        if (store.get("kickvote" + client.uid()) == undefined) {
            store.set("kickvote" + client.uid(), 1);
            actualvoten = store.get("kicknein");
            actualvoten++;
            store.set("kicknein", actualvoten);
            client.chat("[color=#b700ff]Rangsystem ×[/color] Du hast gegen den Rauswurf gestimmt.");
        } else return client.chat("[color=#b700ff]Rangsystem ×[/color] Du hast bereits abgestimmt!");
        } }
if (command === "!resetstartkick") {
let target = message.slice(1).join(" ");
    if (target.length <= 0)
                return client.chat("[color=#b700ff]Rangsystem ×[/color] Falscher Syntax, verwende bitte [color=red]!resertsrartkick <Benutzer>[/color]."); // Wrong syntax message
            let targetClient;
            if (backend.getClientByNick(target)) {
                targetClient = backend.getClientByNick(target);
            } else if (backend.getClientByUID(target)) {
                targetClient = backend.getClientByUID(target);
            } else return client.chat("[color=#b700ff]Rangsystem ×[/color] Dieser Benutzer wurde nicht gefunden.");
            if (allowedReset(client)) {
                if (cooldownExpired(targetClient) === false) {
                    removeCooldown(targetClient);
                    client.chat("[color=#b700ff]Rangsystem ×[/color] Du hast den Startkick Cooldown des Benutzers erfolgreich zurückgesetzt."); // Executor
                    targetClient.chat("[color=#b700ff]Rangsystem ×[/color] Dein Startkick Cooldown wurde zurückgesetzt.") // Target
                } else return client.chat("[color=#b700ff]Rangsystem ×[/color] Dieser Benutzer hat keinen Cooldown");
            } else return client.chat("[color=#b700ff]Rangsystem ×[/color] [color=red]Dazu hast du keine Rechte!");
}
    }
    });
    function allowedReset(client) {
        if (config.reseter === undefined)
            return false;
        else return checkArrays(client.getServerGroups().map(group => group.id()), config.reseter);
    }
 /* Some functions are by DrWarpMan */
    function getClientsWithGroups(groups) {
        let clients = [];

        backend.getClients().forEach(client => {
            if (checkGroups(client, groups))
                clients.push(client);
        });
        return clients;
    }
function wait(ms){
   var start = new Date().getTime();
   var end = start;
   while(end < start + ms) {
     end = new Date().getTime();
  }
}
    function sendBroadcast(client, message) {
        if (client.isSelf() === false)
            client.chat(message);
    }
    function checkGroups(client, groups) {
        if (!config.broadcastGroups)
            return false;

        let clientGroups = client.getServerGroups().map(group => group.id());
        return checkArrays(clientGroups, groups);
    }
    function checkArrays(arr1, arr2) {
        return arr2.some(item => arr1.includes(item));
    }
function startCooldown(client) {
        let cooldowns = store.get("cooldowns") || {};
        cooldowns[client.uid()] = Date.now();
        store.set("cooldowns", cooldowns);
    }
    function removeCooldown(client) {
        let cooldowns = store.get("cooldowns") || {};

        if (cooldowns[client.uid()] !== undefined) {
            delete cooldowns[client.uid()];
            store.set("cooldowns", cooldowns);
        }
    }
  function allowedReset(client) {
        if (config.admins === undefined)
            return false;
        else return checkArrays(client.getServerGroups().map(group => group.id()), config.admins);
    }
    function cooldownExpired(client) {
        let cooldowns = store.get("cooldowns") || {};

        if (cooldowns[client.uid()] === undefined)
            return true;
        return (Date.now() - cooldowns[client.uid()]) > cooldown * 60 * 1000;
    }
    function isAllowed(client) {
        if (config.bypass === undefined)
            return true;
        else return (checkArrays(client.getServerGroups().map(group => group.id()), config.bypass) === false);
    }
 function hasServerGroupWithID(client, id) {
        return client.getServerGroups().some(function(group) {
            return group.id() == id;
        });
    }
    // SCRIPT LOADED SUCCESFULLY
    engine.log("\n[Script] \"" + meta.name + "\" [Version] \"" + meta.version + "\" [Author] \"" + meta.author + "\"");
    });

Danke im Vorraus <3
 

Multivitamin

Well-Known Member
Tier III
is awesome!
V.I.P.
is uber awesome!
Contributor
Insider
Ich sags dir direkt^^
Im normalfall wird dir niemand so eine schlange von code der nicht mal ordentlich formatiert ist durchschauen
Am erfolreichsten bist du bestimmt wenn du entweder deinen code ordentlich kommentierst oder nur den betreffenden Teil postest

und btw: https://forum.sinusbot.com/resources/command-library.436/ diese Library hat ein Throttling von commands mit eingebaut und sollte enorm helfen wenn es darum geht commands zu bauen
 
Top