PexoBot · Dokumentation

Benutzerdefinierter Code

Schreiben Sie Ihre eigenen Befehle und Automatisierungen in Lua oder JavaScript. Ein Skript empfängt ein Ereignis und fordert den Bot auf, Aktionen über die API auszuführen.

Wie es funktioniert

  1. Öffnen Sie das Modul Custom code in Ihrem Server-Dashboard und fügen Sie ein Skript hinzu.
  2. Wählen Sie einen trigger (z. B. den Befehl /ping) und eine Sprache. Lua wird empfohlen.
  3. Schreiben Sie den Code. Die Variable event beschreibt, was passiert ist; Funktionen wie reply()-Warteschlangenaktionen.
  4. Klicken Sie zum Testen auf Run (es werden keine Aktionen ausgeführt) und dann auf Save. Der Befehl erscheint innerhalb von Sekunden auf dem Server.

Skripte werden in einer isolierten Sandbox ausgeführt: kein Internet, keine Dateien oder andere Server. Der Bot führt Aktionen aus nach Das Skript wird beendet, und zwar nur auf Ihrem Server.

Sprachen

Lua

Lua empfohlen

Lua 5.4 (WebAssembly) mit einer LuaJIT / Lua 5.1-Kompatibilitätsschicht: bit.band/bor/bxor/lshift/rshift/bnot, unpack, table.getn, math.pow. Schnellster Start und geringster Speicherverbrauch. Nein io, require, load, debug; os behält time/clock/date.

JS

JavaScript

Modernes JavaScript (QuickJS, ES2023). Code wird innerhalb einer Funktion ausgeführt, Sie können also return verwenden – der zurückgegebene Wert wird zur Antwort. Kein fetch, require, Timer oder asynchrone E/A.

Auslöser

Auslöserevent.typeWannreply()
Slash-BefehlcommandJemand verwendet den Befehl. Optionaler Text geht an event.input.Befehlsantwort
NachrichtmessageEine Nachricht beginnt mit dem Präfix (z. B. !points). Der Rest → event.input. Leer = jede Nachricht.auf die Nachricht antworten
Beitreten / verlassenjoin / leaveEin Mitglied tritt dem Server bei oder verlässt ihn.Kanal aus den Skripteinstellungen auswählen
TimertimerAlle N Minuten (Kostenlos: min. 10, min. PexoBot+: 1). event.user = Null.Kanal aus den Skripteinstellungen auswählen

Die event

FeldTypBeschreibung
event.typestringBefehl, Nachricht, Beitreten, Verlassen oder Timer
event.commandstringBefehlsname (für Befehl)
event.inputstringText nach dem Befehl oder Präfix, sonst „“
event.user.id / .name / .tagstringID, Anzeigename und Benutzername
event.user.botboolist ein Bot
event.user.avatarstringAvatar-URL
event.member.rolesListe der IDsMitgliedsrollen (ohne @everyone)
event.member.nickstringServer-Spitzname
event.member.adminboolBerechtigung „Server verwalten“.
event.member.joinedAtnumberTreten Sie ein, Frau
event.channel.id / .namestringEvent-Kanal
event.guild.id / .name / .members / .ownerIdstring / numberServer
event.message.id / .contentstringNachricht (für Nachricht)

Für ein Ereignis fehlen folgende Felder: nil (Lua) / null (JS).

API

Die gleichen Funktionen in Lua und JavaScript. Jede Aktion wird auf das Aktionslimit pro Lauf angerechnet.

FunktionBeschreibung
reply(msg)Antwortet auf den Befehl/die Nachricht oder postet im konfigurierten Kanal (Beitreten, Verlassen, Timer).
send(channelId, msg)Sendet eine Nachricht an einen Kanal auf diesem Server.
dm(userId, msg)Direktnachricht an ein Servermitglied.
react(emoji)Reagiert auf die auslösende Nachricht (z. B. „👍“ oder „<:name:id>“).
addRole(userId, roleId) / removeRole(…)Fügt eine Rolle hinzu bzw. entfernt sie. Die Rolle muss unterhalb der Rolle des Bots liegen und darf nicht „Administrator“ sein.
log(...) / print(...)Schreibt in das Protokoll – sichtbar im Dashboard-Test (nicht an Discord gesendet).
kv.get(k) / kv.set(k, v) / kv.del(k)Persistenter Serverdatenspeicher (Text). Siehe unten.
kv.num(k, def) / kv.add(k, n)Zahlen: mit Standardwert lesen und erhöhen (gibt den neuen Wert zurück).
kv.keys()Liste der Schlüssel.
random(a, b)Zufällige ganze Zahl von a bis b (einschließlich).
now()Aktuelle Zeit in Millisekunden.
return msgLua & JS: der zurückgegebene Wert = Reply(), es sei denn, das Skript hat bereits geantwortet.
„reply()“ akzeptiert eine Zeichenfolge, ein Objekt {Inhalt, Einbettung} oder ein Array von Zeichenfolgen (durch Zeilen verbunden). Leerer Text / null sendet nichts.

Nachrichten und Einbettungen

msg ist Text (bis zu 2000 Zeichen) oder eine Tabelle/ein Objekt:

Lua
reply({
  content = "Text über der Einbettung",
  embed = {
    title = "Titel", description = "Beschreibung mit **Abschlag**", color = "#22c55e",
    fields = { { name = "Feld", value = "Wert", inline = true } },
    image = "https://…/image.png", thumbnail = "https://…/mini.png", footer = "Fußzeile",
  }
})

Der Benutzer erwähnt die Arbeit (<@ID>), aber @everyone, @here und Rollen pingen nie.

KV-Laden

Wird von allen Skripten auf dem Server gemeinsam genutzt und bleibt zwischen den Ausführungen bestehen. Schlüssel bis zu 100 Zeichen, Wert bis zu 2000 Zeichen (als Text gespeichert – Zahlen mit kv.num lesen). Durchsuchen und löschen Sie es auf der Registerkarte History & data. Dashboard-Tests speichern keine Änderungen.

Lua
kv.set("motd", "Ich wünsche Ihnen einen schönen Tag!")
local visits = kv.add("visits:" .. event.user.id)   -- 1, 2, 3…
if kv.get("motd") then reply(kv.get("motd") .. " (" .. visits .. ")") end
kv.del("old")

Grenzen

FreePexoBot+
Laufzeit (Lua/JS)150 ms600 ms
Erinnerung16 MB64 MB
Aktionen pro Lauf520
KV-Tasten1001000
Läufe pro Minute (Server)30120
Skripte325
Timer alle10 min1 min

Dieselbe Person kann dasselbe Skript höchstens einmal alle 2 Sekunden ausführen.

Beispiele

Zufälliger Wurf (Befehl /los)

Lua
-- /los – würfeln Sie eine Zahl von 1 bis zum angegebenen Maximum (Standard 100)
local max = tonumber(event.input) or 100
reply("🎲 " .. event.user.name .. " gerollt **" .. random(1, max) .. "**")
JS
// /los – würfeln Sie eine Zahl von 1 bis zum angegebenen Maximum (Standard 100)
const max = Number(event.input) || 100;
return `🎲 ${event.user.name} gerollt **${random(1, max)}**`;

Punkte mit Rollenbelohnung („!punkty“-Nachricht)

Lua
-- Nachricht beginnt mit „!punkty“: Aktivitätspunkte in kv
local key = "pkt:" .. event.user.id
if event.input == "" then
  reply("Du hast **" .. kv.num(key) .. "** Punkte.")
else
  local n = kv.add(key, 1)
  if n == 50 then addRole(event.user.id, "123456789012345678") end  -- Discord Rollen-ID
  react("⭐")
end

Begrüßung mit Theke (mitmachen)

Lua
-- Mitgliedsbeitritt: Willkommen im konfigurierten Kanal mit einem Zähler
local nr = kv.add("dolaczenia")
reply({
  content = "<@" .. event.user.id .. ">",
  embed = {
    title = "👋 Willkommen bei " .. event.guild.name .. "!",
    description = "Sie sind Besucher **" .. nr .. ".** seit dem Start des Bots.",
    color = "#8a3ffc",
    fields = { { name = "Mitglieder", value = tostring(event.guild.members), inline = true } },
  }
})

Rotierende Spitzen (alle 60 Min.)

JS
// Alle 60 Minuten: Erinnerung mit wechselnden Texten
const tips = ['Denken Sie an die Regeln 📜', 'Stimmen Sie für den Server auf Top.gg ⭐', 'Haben Sie eine Idee? /suggest 💡'];
const i = kv.add('tip') % tips.length;
reply({ embed: { title: '💡 Tipp', description: tips[i], color: '#eab308' } });

Fehler

Aktuelle Ausführungen (mit Fehlern) finden Sie auf der Registerkarte History & data des Moduls.