115 lines
4.6 KiB
JavaScript
115 lines
4.6 KiB
JavaScript
// bot/server_status.js
|
|
var statusMessage;
|
|
var startTimestamp = /* @__PURE__ */ new Date();
|
|
global.getServerStatus = async function(why) {
|
|
var embed = new EmbedBuilder().setColor(65280).setTimestamp();
|
|
var joinURL = GetConvar("web_baseUrl", "");
|
|
var buttonRow = false;
|
|
if (joinURL != "" && joinURL.indexOf("cfx.re" != -1) && joinURL.match(/^[^A-z0-9]/) == null) {
|
|
embed.setURL(`https://${joinURL}`);
|
|
buttonRow = new ActionRowBuilder();
|
|
var button = new ButtonBuilder().setURL(`https://${joinURL}`).setLabel("Join Server").setStyle(ButtonStyle.Link);
|
|
buttonRow.addComponents([button]);
|
|
} else {
|
|
joinURL = "";
|
|
}
|
|
var serverName = GetConvar("sv_projectName", GetConvar("sv_hostname", "default FXServer"));
|
|
if (serverName.length > 255) {
|
|
serverName = serverName.substring(0, 255);
|
|
}
|
|
serverName = serverName.replace(/\^[0-9]/g, "");
|
|
embed.addFields([{ name: "Server Name", value: `\`\`\`${serverName}\`\`\`` }]);
|
|
var reports = await exports[EasyAdmin].getAllReports();
|
|
var activeReports = 0;
|
|
var claimedReports = 0;
|
|
for (let report of Object.values(reports).entries()) {
|
|
activeReports += 1;
|
|
if (report.claimed) {
|
|
claimedReports += 1;
|
|
}
|
|
}
|
|
embed.addFields([
|
|
{ name: "Players Online", value: `\`\`\`${getPlayers().length}/${GetConvar("sv_maxClients", "")}\`\`\``, inline: true },
|
|
{ name: "Admins Online", value: `\`\`\`${Object.values(exports[EasyAdmin].GetOnlineAdmins()).length}\`\`\``, inline: true },
|
|
{ name: "Reports", value: `\`\`\`${activeReports} (${claimedReports} claimed)\`\`\``, inline: true },
|
|
{ name: "Active Vehicles", value: `\`\`\`${GetAllVehicles().length}\`\`\``, inline: true },
|
|
{ name: "Active Peds", value: `\`\`\`${GetAllPeds().length}\`\`\``, inline: true },
|
|
{ name: "Active Objects", value: `\`\`\`${GetAllObjects().length}\`\`\``, inline: true }
|
|
]);
|
|
if (joinURL != "") {
|
|
try {
|
|
let serverId = joinURL.substring(joinURL.lastIndexOf("-") + 1, joinURL.indexOf(".users.cfx.re"));
|
|
let response = await exports[EasyAdmin].HTTPRequest(`https://servers-frontend.fivem.net/api/servers/single/${serverId}`);
|
|
response = JSON.parse(response).Data;
|
|
embed.addFields([{ name: "Upvotes", value: `\`\`\`${response.upvotePower} Upvotes, ${response.burstPower} Bursts\`\`\``, inline: false }]);
|
|
embed.setAuthor({ name: `${serverName}`, iconURL: response.ownerAvatar, url: `https://${joinURL}` });
|
|
} catch (error) {
|
|
console.error(error);
|
|
}
|
|
}
|
|
embed.addFields([{ name: "Uptime", value: `\`\`\`${prettyMilliseconds(/* @__PURE__ */ new Date() - startTimestamp, { verbose: true, secondsDecimalDigits: 0 })}\`\`\``, inline: false }]);
|
|
if (why) {
|
|
embed.addFields([{ name: "Last Update", value: why }]);
|
|
}
|
|
if (buttonRow) {
|
|
return { embeds: [embed], components: [buttonRow] };
|
|
}
|
|
return { embeds: [embed] };
|
|
};
|
|
global.updateServerStatus = async function(why) {
|
|
if (GetConvar("ea_botStatusChannel", "") == "") {
|
|
return;
|
|
}
|
|
var channel = await client.channels.fetch(GetConvar("ea_botStatusChannel", ""));
|
|
if (channel == void 0) {
|
|
console.error("Failed to configure bot status channel, please make sure the channel id is correct and the bot has read and write access.");
|
|
return;
|
|
}
|
|
if (!statusMessage) {
|
|
var messagesToDelete = [];
|
|
var messages = await channel.messages.fetch({ limit: 10 }).catch((error) => {
|
|
console.error("^7Failed to configure server status channel, please make sure you gave the bot permission to write in the channel!\n\n");
|
|
console.error(error);
|
|
});
|
|
for (var message of messages.values()) {
|
|
if (messages.size == 1 && message.author.id == client.user.id) {
|
|
statusMessage = message;
|
|
break;
|
|
} else {
|
|
messagesToDelete.push(message.id);
|
|
}
|
|
}
|
|
try {
|
|
if (statusMessage) {
|
|
updateServerStatus();
|
|
return;
|
|
}
|
|
await channel.bulkDelete(messagesToDelete);
|
|
} catch (error) {
|
|
console.log("Could not bulk-delete messages in botStatusChannel.");
|
|
console.error(error);
|
|
}
|
|
let embed2 = await prepareGenericEmbed("Fetching Server Infos..");
|
|
statusMessage = await channel.send({ embeds: [embed2] });
|
|
}
|
|
const embed = await getServerStatus(why);
|
|
statusMessage.edit(embed);
|
|
};
|
|
client.on("messageCreate", async (msg) => {
|
|
if (!msg.member || msg.author.bot) {
|
|
return;
|
|
}
|
|
if (msg.author.id == userID) {
|
|
return;
|
|
}
|
|
if (!msg.channel) {
|
|
return;
|
|
}
|
|
if (msg.channel.id == GetConvar("ea_botStatusChannel", "")) {
|
|
msg.delete();
|
|
updateServerStatus("manual");
|
|
}
|
|
});
|
|
setTimeout(updateServerStatus, 1e4);
|
|
setInterval(updateServerStatus, 18e4);
|