mirror of
https://github.com/ZareMate/kubejs.git
synced 2026-11-12 14:20:29 +00:00
fix: fixed saving issues
This commit is contained in:
+1103
-1078
File diff suppressed because it is too large
Load Diff
+329
-316
@@ -12,156 +12,230 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
// Dependencies: LuckPerms, KubeJSHTTP
|
// Dependencies: LuckPerms, KubeJSHTTP
|
||||||
|
(function () {
|
||||||
|
var DISCORD_WEBHOOK_URL =
|
||||||
|
"https://discord.com/api/webhooks/1544442801247494226/A-1JQpkeJ2jFFik63uEWPIV0Vd-fOcJV9KoySseGu8LO5SpkxZ23okWXxd-IMkD_tQDP";
|
||||||
|
|
||||||
var DISCORD_WEBHOOK_URL = "REPLACE_ME";
|
var MULTIACCOUNT_PERMISSION_CHECKIP = "multiaccount.command.checkip";
|
||||||
|
var MULTIACCOUNT_PERMISSION_ALERT = "multiaccount.alert";
|
||||||
|
|
||||||
var MULTIACCOUNT_PERMISSION_CHECKIP = "multiaccount.command.checkip";
|
var LuckPermsApiProvider = Java.loadClass(
|
||||||
var MULTIACCOUNT_PERMISSION_ALERT = "multiaccount.alert";
|
"net.luckperms.api.LuckPermsProvider",
|
||||||
|
);
|
||||||
|
|
||||||
var LuckPermsApiProvider = Java.loadClass(
|
var HttpAPI = Java.loadClass("com.awizo.KubeJSHTTP.HttpAPI");
|
||||||
"net.luckperms.api.LuckPermsProvider",
|
|
||||||
);
|
|
||||||
|
|
||||||
var HttpAPI = Java.loadClass("com.awizo.KubeJSHTTP.HttpAPI");
|
var luckPermsApi = null;
|
||||||
|
var playerIPMap = new Map();
|
||||||
|
|
||||||
var luckPermsApi = null;
|
function getLuckPerms() {
|
||||||
var playerIPMap = new Map();
|
if (luckPermsApi) {
|
||||||
|
return luckPermsApi;
|
||||||
|
}
|
||||||
|
|
||||||
function getLuckPerms() {
|
try {
|
||||||
if (luckPermsApi) {
|
luckPermsApi = LuckPermsApiProvider.get();
|
||||||
return luckPermsApi;
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
console.log(
|
||||||
luckPermsApi = LuckPermsApiProvider.get();
|
"[Multi-Account] luckPermsApi API loaded successfully!",
|
||||||
|
);
|
||||||
|
|
||||||
console.log("[Multi-Account] luckPermsApi API loaded successfully!");
|
return luckPermsApi;
|
||||||
|
} catch (error) {
|
||||||
return luckPermsApi;
|
|
||||||
} catch (error) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function hasPermission(player, permission) {
|
|
||||||
var api = getLuckPerms();
|
|
||||||
|
|
||||||
if (!api || !player) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
return api
|
|
||||||
.getUserManager()
|
|
||||||
.getUser(player.uuid)
|
|
||||||
.getCachedData()
|
|
||||||
.getPermissionData()
|
|
||||||
.checkPermission(permission)
|
|
||||||
.asBoolean();
|
|
||||||
} catch (error) {
|
|
||||||
console.error(
|
|
||||||
"[Multi-Account] Failed to check permission " +
|
|
||||||
permission +
|
|
||||||
" for " +
|
|
||||||
player.username +
|
|
||||||
": " +
|
|
||||||
error,
|
|
||||||
);
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function getPlayerIP(player) {
|
|
||||||
try {
|
|
||||||
var ip = player.ipAddress;
|
|
||||||
|
|
||||||
if (!ip) {
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ip.includes("/")) {
|
|
||||||
ip = ip.split("/")[1];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ip.includes(":")) {
|
|
||||||
ip = ip.split(":")[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
return ip;
|
|
||||||
} catch (error) {
|
|
||||||
console.warn(
|
|
||||||
"[Multi-Account] Failed to get IP for " +
|
|
||||||
player.username +
|
|
||||||
": " +
|
|
||||||
error,
|
|
||||||
);
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
function sendPlayerNotification(player, otherPlayers) {
|
function hasPermission(player, permission) {
|
||||||
player.tell(
|
var api = getLuckPerms();
|
||||||
"§c[ALERT] §fMulti-account detected! Other accounts on your IP: §e" +
|
|
||||||
otherPlayers.join(", "),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
function notifyStaff(server, playerName, otherPlayers) {
|
if (!api || !player) {
|
||||||
var message =
|
return false;
|
||||||
"§c[ADMIN] §fPlayer §6" +
|
|
||||||
playerName +
|
|
||||||
"§f has the same IP as: §e" +
|
|
||||||
otherPlayers.join(", ");
|
|
||||||
|
|
||||||
server.players.forEach((player) => {
|
|
||||||
if (hasPermission(player, MULTIACCOUNT_PERMISSION_ALERT)) {
|
|
||||||
player.tell(message);
|
|
||||||
}
|
}
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function sendDiscordNotification(player, otherPlayers) {
|
try {
|
||||||
var playerName =
|
return api
|
||||||
player && typeof player.getName === "function"
|
.getUserManager()
|
||||||
? player.getName().getString()
|
.getUser(player.uuid)
|
||||||
: "Unknown";
|
.getCachedData()
|
||||||
|
.getPermissionData()
|
||||||
|
.checkPermission(permission)
|
||||||
|
.asBoolean();
|
||||||
|
} catch (error) {
|
||||||
|
console.error(
|
||||||
|
"[Multi-Account] Failed to check permission " +
|
||||||
|
permission +
|
||||||
|
" for " +
|
||||||
|
player.username +
|
||||||
|
": " +
|
||||||
|
error,
|
||||||
|
);
|
||||||
|
|
||||||
try {
|
return false;
|
||||||
HttpAPI.post(
|
}
|
||||||
DISCORD_WEBHOOK_URL,
|
}
|
||||||
JSON.stringify({
|
|
||||||
embeds: [
|
function getPlayerIP(player) {
|
||||||
{
|
try {
|
||||||
title: "Multi-Account Alert",
|
var ip = player.ipAddress;
|
||||||
description:
|
|
||||||
"Player: " +
|
if (!ip) {
|
||||||
playerName +
|
return null;
|
||||||
"\n" +
|
}
|
||||||
"Other Accounts on IP: " +
|
|
||||||
otherPlayers.join(", ") +
|
if (ip.includes("/")) {
|
||||||
"\n" +
|
ip = ip.split("/")[1];
|
||||||
"Timestamp: <t:" +
|
}
|
||||||
Math.floor(Date.now() / 1000) +
|
|
||||||
":S>",
|
if (ip.includes(":")) {
|
||||||
color: 3447003,
|
ip = ip.split(":")[0];
|
||||||
footer: {
|
}
|
||||||
text: "Multi-Account Watch",
|
|
||||||
|
return ip;
|
||||||
|
} catch (error) {
|
||||||
|
console.warn(
|
||||||
|
"[Multi-Account] Failed to get IP for " +
|
||||||
|
player.username +
|
||||||
|
": " +
|
||||||
|
error,
|
||||||
|
);
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function sendPlayerNotification(player, otherPlayers) {
|
||||||
|
player.tell(
|
||||||
|
"§c[ALERT] §fMulti-account detected! Other accounts on your IP: §e" +
|
||||||
|
otherPlayers.join(", "),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function notifyStaff(server, playerName, otherPlayers) {
|
||||||
|
var message =
|
||||||
|
"§c[ADMIN] §fPlayer §6" +
|
||||||
|
playerName +
|
||||||
|
"§f has the same IP as: §e" +
|
||||||
|
otherPlayers.join(", ");
|
||||||
|
|
||||||
|
server.players.forEach((player) => {
|
||||||
|
if (hasPermission(player, MULTIACCOUNT_PERMISSION_ALERT)) {
|
||||||
|
player.tell(message);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function sendDiscordNotification(player, otherPlayers) {
|
||||||
|
var playerName =
|
||||||
|
player && typeof player.getName === "function"
|
||||||
|
? player.getName().getString()
|
||||||
|
: "Unknown";
|
||||||
|
|
||||||
|
try {
|
||||||
|
HttpAPI.post(
|
||||||
|
DISCORD_WEBHOOK_URL,
|
||||||
|
JSON.stringify({
|
||||||
|
embeds: [
|
||||||
|
{
|
||||||
|
title: "Multi-Account Alert",
|
||||||
|
description:
|
||||||
|
"Player: " +
|
||||||
|
playerName +
|
||||||
|
"\n" +
|
||||||
|
"Other Accounts on IP: " +
|
||||||
|
otherPlayers.join(", ") +
|
||||||
|
"\n" +
|
||||||
|
"Timestamp: <t:" +
|
||||||
|
Math.floor(Date.now() / 1000) +
|
||||||
|
":S>",
|
||||||
|
color: 3447003,
|
||||||
|
footer: {
|
||||||
|
text: "Sputnik watch",
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
],
|
||||||
],
|
}),
|
||||||
}),
|
);
|
||||||
);
|
} catch (e) {
|
||||||
} catch (e) {
|
console.error("[SputnikWatch] Failed to send webhook: " + e);
|
||||||
console.error("[Multi-Account Watch] Failed to send webhook: " + e);
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
function rebuildPlayerIPMap(server) {
|
function rebuildPlayerIPMap(server) {
|
||||||
playerIPMap.clear();
|
playerIPMap.clear();
|
||||||
|
|
||||||
server.players.forEach((player) => {
|
server.players.forEach((player) => {
|
||||||
|
var name = player.username;
|
||||||
|
var ip = getPlayerIP(player);
|
||||||
|
|
||||||
|
if (!ip) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!playerIPMap.has(ip)) {
|
||||||
|
playerIPMap.set(ip, new Set());
|
||||||
|
}
|
||||||
|
|
||||||
|
playerIPMap.get(ip).add(name);
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log(
|
||||||
|
"[Multi-Account] IP map rebuilt. Tracking " +
|
||||||
|
playerIPMap.size +
|
||||||
|
" IP(s).",
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function sendCheckIPWebhook(player, groups) {
|
||||||
|
var playerName =
|
||||||
|
player && typeof player.getName === "function"
|
||||||
|
? player.getName().getString()
|
||||||
|
: "Unknown";
|
||||||
|
|
||||||
|
if (groups.length === 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var groupText = groups
|
||||||
|
.map((players, index) => {
|
||||||
|
return "**Group " + (index + 1) + ":** " + players.join(", ");
|
||||||
|
})
|
||||||
|
.join("\n");
|
||||||
|
|
||||||
|
try {
|
||||||
|
HttpAPI.post(
|
||||||
|
DISCORD_WEBHOOK_URL,
|
||||||
|
JSON.stringify({
|
||||||
|
embeds: [
|
||||||
|
{
|
||||||
|
title: "IP Check",
|
||||||
|
description:
|
||||||
|
"Requested by: " +
|
||||||
|
playerName +
|
||||||
|
"\n\n" +
|
||||||
|
groupText +
|
||||||
|
"\n\n" +
|
||||||
|
"Timestamp: <t:" +
|
||||||
|
Math.floor(Date.now() / 1000) +
|
||||||
|
":S>",
|
||||||
|
color: 3447003,
|
||||||
|
footer: {
|
||||||
|
text: "Sputnik watch",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
|
||||||
|
console.log("[Multi-Account] /checkip results sent to Discord.");
|
||||||
|
} catch (e) {
|
||||||
|
console.error(
|
||||||
|
"[SputnikWatch] Failed to send /checkip webhook: " + e,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function checkMultiAccount(server, player) {
|
||||||
var name = player.username;
|
var name = player.username;
|
||||||
var ip = getPlayerIP(player);
|
var ip = getPlayerIP(player);
|
||||||
|
|
||||||
@@ -173,219 +247,158 @@ function rebuildPlayerIPMap(server) {
|
|||||||
playerIPMap.set(ip, new Set());
|
playerIPMap.set(ip, new Set());
|
||||||
}
|
}
|
||||||
|
|
||||||
playerIPMap.get(ip).add(name);
|
var players = playerIPMap.get(ip);
|
||||||
});
|
|
||||||
|
|
||||||
console.log(
|
var otherPlayers = Array.from(players).filter(
|
||||||
"[Multi-Account] IP map rebuilt. Tracking " +
|
(playerName) => playerName !== name,
|
||||||
playerIPMap.size +
|
|
||||||
" IP(s).",
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
function sendCheckIPWebhook(player, groups) {
|
|
||||||
var playerName =
|
|
||||||
player && typeof player.getName === "function"
|
|
||||||
? player.getName().getString()
|
|
||||||
: "Unknown";
|
|
||||||
|
|
||||||
if (groups.length === 0) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var groupText = groups
|
|
||||||
.map((players, index) => {
|
|
||||||
return "**Group " + (index + 1) + ":** " + players.join(", ");
|
|
||||||
})
|
|
||||||
.join("\n");
|
|
||||||
|
|
||||||
try {
|
|
||||||
HttpAPI.post(
|
|
||||||
DISCORD_WEBHOOK_URL,
|
|
||||||
JSON.stringify({
|
|
||||||
embeds: [
|
|
||||||
{
|
|
||||||
title: "IP Check",
|
|
||||||
description:
|
|
||||||
"Requested by: " +
|
|
||||||
playerName +
|
|
||||||
"\n\n" +
|
|
||||||
groupText +
|
|
||||||
"\n\n" +
|
|
||||||
"Timestamp: <t:" +
|
|
||||||
Math.floor(Date.now() / 1000) +
|
|
||||||
":S>",
|
|
||||||
color: 3447003,
|
|
||||||
footer: {
|
|
||||||
text: "Multi-Account watch",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
],
|
|
||||||
}),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
console.log("[Multi-Account] /checkip results sent to Discord.");
|
if (otherPlayers.length > 0) {
|
||||||
} catch (e) {
|
console.log(
|
||||||
console.error("[Multi-Account Watch] Failed to send /checkip webhook: " + e);
|
"[Multi-Account] ALERT: " +
|
||||||
}
|
name +
|
||||||
}
|
" shares IP with: " +
|
||||||
|
otherPlayers.join(", "),
|
||||||
|
);
|
||||||
|
|
||||||
function checkMultiAccount(server, player) {
|
sendPlayerNotification(player, otherPlayers);
|
||||||
var name = player.username;
|
|
||||||
var ip = getPlayerIP(player);
|
|
||||||
|
|
||||||
if (!ip) {
|
notifyStaff(server, name, otherPlayers);
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!playerIPMap.has(ip)) {
|
sendDiscordNotification(player, otherPlayers);
|
||||||
playerIPMap.set(ip, new Set());
|
|
||||||
}
|
|
||||||
|
|
||||||
var players = playerIPMap.get(ip);
|
|
||||||
|
|
||||||
var otherPlayers = Array.from(players).filter(
|
|
||||||
(playerName) => playerName !== name,
|
|
||||||
);
|
|
||||||
|
|
||||||
if (otherPlayers.length > 0) {
|
|
||||||
console.log(
|
|
||||||
"[Multi-Account] ALERT: " +
|
|
||||||
name +
|
|
||||||
" shares IP with: " +
|
|
||||||
otherPlayers.join(", "),
|
|
||||||
);
|
|
||||||
|
|
||||||
sendPlayerNotification(player, otherPlayers);
|
|
||||||
|
|
||||||
notifyStaff(server, name, otherPlayers);
|
|
||||||
|
|
||||||
sendDiscordNotification(player, otherPlayers);
|
|
||||||
}
|
|
||||||
|
|
||||||
players.add(name);
|
|
||||||
}
|
|
||||||
|
|
||||||
function removePlayer(name) {
|
|
||||||
for (var [ip, players] of playerIPMap) {
|
|
||||||
if (!players.delete(name)) {
|
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
players.add(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
function removePlayer(name) {
|
||||||
|
for (var [ip, players] of playerIPMap) {
|
||||||
|
if (!players.delete(name)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(
|
||||||
|
"[Multi-Account] Removed " +
|
||||||
|
name +
|
||||||
|
" from IP tracking (" +
|
||||||
|
ip +
|
||||||
|
")",
|
||||||
|
);
|
||||||
|
|
||||||
|
if (players.size === 0) {
|
||||||
|
playerIPMap.delete(ip);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
PlayerEvents.loggedIn((event) => {
|
||||||
|
var player = event.player;
|
||||||
|
var server = event.server;
|
||||||
|
|
||||||
console.log(
|
console.log(
|
||||||
"[Multi-Account] Removed " +
|
"[Multi-Account] " +
|
||||||
name +
|
player.username +
|
||||||
" from IP tracking (" +
|
" joined from: " +
|
||||||
ip +
|
getPlayerIP(player),
|
||||||
")",
|
|
||||||
);
|
);
|
||||||
|
|
||||||
if (players.size === 0) {
|
server.schedule(10, () => {
|
||||||
playerIPMap.delete(ip);
|
checkMultiAccount(server, player);
|
||||||
}
|
});
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
PlayerEvents.loggedIn((event) => {
|
|
||||||
var player = event.player;
|
|
||||||
var server = event.server;
|
|
||||||
|
|
||||||
console.log(
|
|
||||||
"[Multi-Account] " +
|
|
||||||
player.username +
|
|
||||||
" joined from: " +
|
|
||||||
getPlayerIP(player),
|
|
||||||
);
|
|
||||||
|
|
||||||
server.schedule(10, () => {
|
|
||||||
checkMultiAccount(server, player);
|
|
||||||
});
|
});
|
||||||
});
|
|
||||||
|
|
||||||
PlayerEvents.loggedOut((event) => {
|
PlayerEvents.loggedOut((event) => {
|
||||||
var name = event.player.username;
|
var name = event.player.username;
|
||||||
|
|
||||||
console.log("[Multi-Account] " + name + " left the server");
|
console.log("[Multi-Account] " + name + " left the server");
|
||||||
|
|
||||||
removePlayer(name);
|
removePlayer(name);
|
||||||
});
|
});
|
||||||
|
|
||||||
ServerEvents.commandRegistry((event) => {
|
ServerEvents.commandRegistry((event) => {
|
||||||
const { commands: Commands } = event;
|
const { commands: Commands } = event;
|
||||||
|
|
||||||
event.register(
|
event.register(
|
||||||
Commands.literal("checkip")
|
Commands.literal("checkip")
|
||||||
.requires(
|
.requires(
|
||||||
(source) =>
|
(source) =>
|
||||||
source.isPlayer() &&
|
source.isPlayer() &&
|
||||||
(source.hasPermission(3) ||
|
(source.hasPermission(3) ||
|
||||||
hasPermission(
|
hasPermission(
|
||||||
source.player,
|
source.player,
|
||||||
MULTIACCOUNT_PERMISSION_CHECKIP,
|
MULTIACCOUNT_PERMISSION_CHECKIP,
|
||||||
)),
|
)),
|
||||||
)
|
)
|
||||||
.executes((ctx) => {
|
.executes((ctx) => {
|
||||||
var source = ctx.source;
|
var source = ctx.source;
|
||||||
var server = source.server;
|
var server = source.server;
|
||||||
|
|
||||||
var group = 1;
|
var group = 1;
|
||||||
var found = false;
|
var found = false;
|
||||||
var groups = [];
|
var groups = [];
|
||||||
|
|
||||||
rebuildPlayerIPMap(server);
|
rebuildPlayerIPMap(server);
|
||||||
|
|
||||||
source.sendSuccess(Text.of("§6Players sharing an IP:"), false);
|
source.sendSuccess(
|
||||||
|
Text.of("§6Players sharing an IP:"),
|
||||||
|
false,
|
||||||
|
);
|
||||||
|
|
||||||
for (var players of playerIPMap.values()) {
|
for (var players of playerIPMap.values()) {
|
||||||
if (players.size <= 1) {
|
if (players.size <= 1) {
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
found = true;
|
||||||
|
|
||||||
|
var playerList = Array.from(players);
|
||||||
|
|
||||||
|
groups.push(playerList);
|
||||||
|
|
||||||
|
source.sendSuccess(
|
||||||
|
Text.of(
|
||||||
|
`§7Group ${group}: §e${playerList.join(", ")}`,
|
||||||
|
),
|
||||||
|
false,
|
||||||
|
);
|
||||||
|
|
||||||
|
group++;
|
||||||
}
|
}
|
||||||
|
|
||||||
found = true;
|
if (!found) {
|
||||||
|
source.sendSuccess(
|
||||||
|
Text.of("§7No players currently share an IP."),
|
||||||
|
false,
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
sendCheckIPWebhook(source.player, groups);
|
||||||
|
}
|
||||||
|
|
||||||
var playerList = Array.from(players);
|
return 1;
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
groups.push(playerList);
|
console.log("[Multi-Account] Script loaded successfully!");
|
||||||
|
|
||||||
source.sendSuccess(
|
console.log(
|
||||||
Text.of(`§7Group ${group}: §e${playerList.join(", ")}`),
|
"[Multi-Account] /checkip permission: " +
|
||||||
false,
|
MULTIACCOUNT_PERMISSION_CHECKIP,
|
||||||
);
|
|
||||||
|
|
||||||
group++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!found) {
|
|
||||||
source.sendSuccess(
|
|
||||||
Text.of("§7No players currently share an IP."),
|
|
||||||
false,
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
sendCheckIPWebhook(source.player, groups);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}),
|
|
||||||
);
|
);
|
||||||
});
|
|
||||||
|
|
||||||
console.log("[Multi-Account] Script loaded successfully!");
|
console.log(
|
||||||
|
"[Multi-Account] Chat alert permission: " +
|
||||||
|
MULTIACCOUNT_PERMISSION_ALERT,
|
||||||
|
);
|
||||||
|
|
||||||
console.log(
|
console.log("[Multi-Account] Commands: /checkip");
|
||||||
"[Multi-Account] /checkip permission: " + MULTIACCOUNT_PERMISSION_CHECKIP,
|
|
||||||
);
|
|
||||||
|
|
||||||
console.log(
|
console.log(
|
||||||
"[Multi-Account] Chat alert permission: " + MULTIACCOUNT_PERMISSION_ALERT,
|
"[Multi-Account] Webhook: " +
|
||||||
);
|
(DISCORD_WEBHOOK_URL !== "REPLACE_ME"
|
||||||
|
? "✓ Configured"
|
||||||
console.log("[Multi-Account] Commands: /checkip");
|
: "✗ Not configured"),
|
||||||
|
);
|
||||||
console.log(
|
})();
|
||||||
"[Multi-Account] Webhook: " +
|
|
||||||
(DISCORD_WEBHOOK_URL !== "REPLACE_ME"
|
|
||||||
? "✓ Configured"
|
|
||||||
: "✗ Not configured"),
|
|
||||||
);
|
|
||||||
|
|||||||
Reference in New Issue
Block a user