refactor/project structure
This commit is contained in:
35 files changed
+192
-167
No files matched your search
+16
-27
@@ -32,7 +32,7 @@ import { MongoClient } from "mongodb";
|
||||
import { Colors, Config } from "./config/config";
|
||||
|
||||
// Utilities
|
||||
import Logger from "./util/Logger";
|
||||
import Logger from "./services/Logger";
|
||||
import { decrypt } from "./util/Cryptic";
|
||||
import {
|
||||
DownloadNitradoFile,
|
||||
@@ -40,12 +40,13 @@ import {
|
||||
FetchServerSettings,
|
||||
PostServerSettings,
|
||||
NitradoCredentialStatus,
|
||||
} from "./util/NitradoAPI";
|
||||
import { RegisterGlobalCommands, RegisterGuildCommands } from "./util/RegisterSlashCommands";
|
||||
import { HandlePlayerLogs, HandleActivePlayersList } from "./util/LogsHandler";
|
||||
import { HandleKillfeed, UpdateLastDeathDate } from "./util/KillfeedHandler";
|
||||
import { HandleExpiredUAVs, HandleEvents, PlaceFireplaceInAlarm } from "./util/AlarmsHandler";
|
||||
import { GetWebhook, WebhookSend } from "./util/WebhookHandler";
|
||||
} from "./services/NitradoAPI";
|
||||
import { RegisterGlobalCommands, RegisterGuildCommands } from "./services/RegisterSlashCommands";
|
||||
import { HandlePlayerLogs, HandleActivePlayersList } from "./handlers/LogsHandler";
|
||||
import { HandleKillfeed, UpdateLastDeathDate } from "./handlers/KillfeedHandler";
|
||||
import { HandleExpiredUAVs, HandleEvents, PlaceFireplaceInAlarm } from "./handlers/AlarmsHandler";
|
||||
import { GetWebhook, WebhookSend } from "./services/WebhookService";
|
||||
import isDefined from "./util/Validation";
|
||||
|
||||
// Database
|
||||
import { Player, UpdatePlayer, getDefaultPlayer } from "./database/player";
|
||||
@@ -223,7 +224,7 @@ export default class DayZR extends Client
|
||||
|
||||
let GuildDB: GuildConfig = await GetGuild(this, interaction.guildId);
|
||||
|
||||
if (this.exists(GuildDB.Nitrado) && this.exists(GuildDB.Nitrado.Auth))
|
||||
if (isDefined(GuildDB.Nitrado) && isDefined(GuildDB.Nitrado.Auth))
|
||||
{
|
||||
GuildDB.Nitrado.Auth = decrypt(
|
||||
GuildDB.Nitrado.Auth,
|
||||
@@ -545,16 +546,16 @@ export default class DayZR extends Client
|
||||
};
|
||||
|
||||
// Skip this player if the player does not exist.
|
||||
if (!this.exists(info.player) || !this.exists(info.playerID)) continue;
|
||||
if (!isDefined(info.player) || !isDefined(info.playerID)) continue;
|
||||
|
||||
lastDetectedTime = this.getDateEST(info.time);
|
||||
|
||||
let playerStat: Player = await this.dbo.collection("players").findOne({ "playerID": info.playerID });
|
||||
if (!this.exists(playerStat)) playerStat = getDefaultPlayer(info.player, info.playerID, guild.Nitrado.ServerID);
|
||||
if (!isDefined(playerStat)) playerStat = getDefaultPlayer(info.player, info.playerID, guild.Nitrado.ServerID);
|
||||
|
||||
// Skip this player if the lastDisconnectionDate time is later than the player log entry.
|
||||
if (!previouslyConnected.includes(playerStat) &&
|
||||
this.exists(playerStat.lastDisconnectionDate) &&
|
||||
isDefined(playerStat.lastDisconnectionDate) &&
|
||||
playerStat.lastDisconnectionDate !== null &&
|
||||
playerStat.lastDisconnectionDate.getTime() > lastDetectedTime.getTime()
|
||||
) continue;
|
||||
@@ -649,7 +650,7 @@ export default class DayZR extends Client
|
||||
*/
|
||||
|
||||
// Continue if no nitrado credentials
|
||||
if (!c.exists(GuildDB.Nitrado)) return;
|
||||
if (!isDefined(GuildDB.Nitrado)) return;
|
||||
|
||||
// Continue if these credentials are marked as failed
|
||||
if (GuildDB.Nitrado.Status == NitradoCredentialStatus.FAILED) return;
|
||||
@@ -858,7 +859,7 @@ export default class DayZR extends Client
|
||||
for (let i = 0; i < guilds.length; i++)
|
||||
{
|
||||
// // Ignore guilds with no Nitrado configuration
|
||||
if (!this.exists(guilds[i].Nitrado)) continue;
|
||||
if (!isDefined(guilds[i].Nitrado)) continue;
|
||||
|
||||
if (guilds[i].server.autoRestart)
|
||||
{
|
||||
@@ -909,18 +910,6 @@ export default class DayZR extends Client
|
||||
this.log(`[${guildId}] Initialized new Nitrado`);
|
||||
}
|
||||
|
||||
/**
|
||||
* exists simply ensures a given input is not
|
||||
* null, undefined, an empty string or NaN.
|
||||
*
|
||||
* @param n to validate
|
||||
* @returns if this object exists (boolean)
|
||||
*/
|
||||
public exists<T> (n: T | null | undefined | "" | number): n is T
|
||||
{
|
||||
return typeof n === "number" ? !isNaN(n) : n !== null && n !== undefined && n !== "";
|
||||
}
|
||||
|
||||
/**
|
||||
* secondsToDhms converts a given number of seconds
|
||||
* to its equivilent in days, hours, minutes and seconds.
|
||||
@@ -967,7 +956,7 @@ export default class DayZR extends Client
|
||||
files.forEach((file) =>
|
||||
{
|
||||
let cmd: Command = require(CommandsDir + "/" + file);
|
||||
if (!this.exists(cmd.name) || !this.exists(cmd.description))
|
||||
if (!isDefined(cmd.name) || !isDefined(cmd.description))
|
||||
{
|
||||
return this.error(
|
||||
"Unable to load Command: " +
|
||||
@@ -978,7 +967,7 @@ export default class DayZR extends Client
|
||||
|
||||
this.commands.set(file.split(".")[0].toLowerCase(), cmd);
|
||||
|
||||
if (this.exists(cmd.Interactions))
|
||||
if (isDefined(cmd.Interactions))
|
||||
{
|
||||
for (let [interaction, handler] of Object.entries(cmd.Interactions))
|
||||
{
|
||||
|
||||
+15
-14
@@ -4,6 +4,7 @@ const bitfieldCalculator = require("discord-bitfield-calculator");
|
||||
const { Armbands } = require("../database/armbands.js");
|
||||
const { createUser, addUser } = require("../database/user");
|
||||
const { UpdatePlayer } = require("../database/player");
|
||||
const isDefined = require("../util/Validation.js");
|
||||
|
||||
module.exports = {
|
||||
name: "admin",
|
||||
@@ -134,7 +135,7 @@ module.exports = {
|
||||
|
||||
if (args[0].name == "gamertag-link") {
|
||||
|
||||
if (!client.exists(GuildDB.Nitrado) || !client.exists(GuildDB.Nitrado.ServerID) || !client.exists(GuildDB.Nitrado.UserID) || !client.exists(GuildDB.Nitrado.Auth)) {
|
||||
if (!isDefined(GuildDB.Nitrado) || !isDefined(GuildDB.Nitrado.ServerID) || !isDefined(GuildDB.Nitrado.UserID) || !isDefined(GuildDB.Nitrado.Auth)) {
|
||||
const warnNitradoNotInitialized = new EmbedBuilder()
|
||||
.setColor(client.config.Colors.Yellow)
|
||||
.setDescription("**WARNING:** The DayZ Nitrado Server has not been configured for this guild yet. This command or feature is currently unavailable.");
|
||||
@@ -143,9 +144,9 @@ module.exports = {
|
||||
}
|
||||
|
||||
let playerStat = await client.dbo.collection("players").findOne({ "gamertag": args[0].options[1].value });
|
||||
if (!client.exists(playerStat)) return interaction.send({ embeds: [new EmbedBuilder().setColor(client.config.Colors.Yellow).setDescription(`**Not Found** This gamertag \` ${args[0].options[1].value} \` cannot be found, the gamertag may be incorrect or this player has not logged onto the server before for at least \` 5 minutes \`.`)] });
|
||||
if (!isDefined(playerStat)) return interaction.send({ embeds: [new EmbedBuilder().setColor(client.config.Colors.Yellow).setDescription(`**Not Found** This gamertag \` ${args[0].options[1].value} \` cannot be found, the gamertag may be incorrect or this player has not logged onto the server before for at least \` 5 minutes \`.`)] });
|
||||
|
||||
if (client.exists(playerStat.discordID)) {
|
||||
if (isDefined(playerStat.discordID)) {
|
||||
const warnGTOverwrite = new EmbedBuilder()
|
||||
.setColor(client.config.Colors.Yellow)
|
||||
.setDescription(`**Notice:**\n> The gamertag has previously been linked to <@${playerStat.discordID}>. Are you sure you would like to change this?`)
|
||||
@@ -170,12 +171,12 @@ module.exports = {
|
||||
await UpdatePlayer(client, playerStat, interaction);
|
||||
|
||||
let member = interaction.guild.members.cache.get(args[0].options[0].value);
|
||||
if (client.exists(GuildDB.linkedGamertagRole)) {
|
||||
if (isDefined(GuildDB.linkedGamertagRole)) {
|
||||
let role = interaction.guild.roles.cache.get(GuildDB.linkedGamertagRole);
|
||||
member.roles.add(role);
|
||||
}
|
||||
|
||||
if (client.exists(GuildDB.memberRole)) {
|
||||
if (isDefined(GuildDB.memberRole)) {
|
||||
let role = interaction.guild.roles.cache.get(GuildDB.memberRole);
|
||||
member.roles.add(role);
|
||||
}
|
||||
@@ -188,7 +189,7 @@ module.exports = {
|
||||
|
||||
} else if (args[0].name == "gamertag-unlink") {
|
||||
|
||||
if (!client.exists(GuildDB.Nitrado) || !client.exists(GuildDB.Nitrado.ServerID) || !client.exists(GuildDB.Nitrado.UserID) || !client.exists(GuildDB.Nitrado.Auth)) {
|
||||
if (!isDefined(GuildDB.Nitrado) || !isDefined(GuildDB.Nitrado.ServerID) || !isDefined(GuildDB.Nitrado.UserID) || !isDefined(GuildDB.Nitrado.Auth)) {
|
||||
const warnNitradoNotInitialized = new EmbedBuilder()
|
||||
.setColor(client.config.Colors.Yellow)
|
||||
.setDescription("**WARNING:** The DayZ Nitrado Server has not been configured for this guild yet. This command or feature is currently unavailable.");
|
||||
@@ -197,7 +198,7 @@ module.exports = {
|
||||
}
|
||||
|
||||
let playerStat = await client.dbo.collection("players").findOne({ "discordID": args[0].options[0].value });
|
||||
if (!client.exists(playerStat)) return interaction.send({ embeds: [new EmbedBuilder().setColor(client.config.Colors.Yellow).setDescription(`**Not Found** <@${args[0].options[0].value}> has no gamertag linked.`)] });
|
||||
if (!isDefined(playerStat)) return interaction.send({ embeds: [new EmbedBuilder().setColor(client.config.Colors.Yellow).setDescription(`**Not Found** <@${args[0].options[0].value}> has no gamertag linked.`)] });
|
||||
|
||||
const warnGTOverwrite = new EmbedBuilder()
|
||||
.setColor(client.config.Colors.Yellow)
|
||||
@@ -281,7 +282,7 @@ module.exports = {
|
||||
|
||||
} else if (args[0].name == "bounty-clear") {
|
||||
|
||||
if (!client.exists(GuildDB.Nitrado) || !client.exists(GuildDB.Nitrado.ServerID) || !client.exists(GuildDB.Nitrado.UserID) || !client.exists(GuildDB.Nitrado.Auth)) {
|
||||
if (!isDefined(GuildDB.Nitrado) || !isDefined(GuildDB.Nitrado.ServerID) || !isDefined(GuildDB.Nitrado.UserID) || !isDefined(GuildDB.Nitrado.Auth)) {
|
||||
const warnNitradoNotInitialized = new EmbedBuilder()
|
||||
.setColor(client.config.Colors.Yellow)
|
||||
.setDescription("**WARNING:** The DayZ Nitrado Server has not been configured for this guild yet. This command or feature is currently unavailable.");
|
||||
@@ -290,7 +291,7 @@ module.exports = {
|
||||
}
|
||||
|
||||
let playerStat = await client.dbo.collection("players").findOne({ "gamertag": args[0].options[0].value });
|
||||
if (!client.exists(playerStat)) return interaction.send({ embeds: [new EmbedBuilder().setColor(client.config.Colors.Yellow).setDescription("**Not Found** This player cannot be found, the gamertag may be incorrect or this player has not logged onto the server before for at least ` 5 minutes `.")] });
|
||||
if (!isDefined(playerStat)) return interaction.send({ embeds: [new EmbedBuilder().setColor(client.config.Colors.Yellow).setDescription("**Not Found** This player cannot be found, the gamertag may be incorrect or this player has not logged onto the server before for at least ` 5 minutes `.")] });
|
||||
|
||||
playerStat.bounties = [];
|
||||
|
||||
@@ -309,16 +310,16 @@ module.exports = {
|
||||
|
||||
if (!banking) {
|
||||
banking = await createUser(targetUserID, GuildDB.serverID, GuildDB.startingBalance, client)
|
||||
if (!client.exists(banking)) return client.sendInternalError(interaction, err);
|
||||
if (!isDefined(banking)) return client.sendInternalError(interaction, err);
|
||||
}
|
||||
banking = banking.user;
|
||||
|
||||
if (!client.exists(banking.guilds[GuildDB.serverID])) {
|
||||
if (!isDefined(banking.guilds[GuildDB.serverID])) {
|
||||
const success = addUser(banking.guilds, GuildDB.serverID, targetUserID, client, GuildDB.startingBalance);
|
||||
if (!success) return client.sendInternalError(interaction, "Failed to add bank");
|
||||
}
|
||||
|
||||
if (!client.exists(banking.guilds[GuildDB.serverID].balance)) banking.guilds[GuildDB.serverID].balance = GuildDB.startingBalance;
|
||||
if (!isDefined(banking.guilds[GuildDB.serverID].balance)) banking.guilds[GuildDB.serverID].balance = GuildDB.startingBalance;
|
||||
|
||||
const add = args[0].options[0].name == "add";
|
||||
let newBalance = add
|
||||
@@ -354,12 +355,12 @@ module.exports = {
|
||||
await UpdatePlayer(client, playerStat);
|
||||
|
||||
let member = interaction.guild.members.cache.get(interaction.member.user.id);
|
||||
if (client.exists(GuildDB.linkedGamertagRole)) {
|
||||
if (isDefined(GuildDB.linkedGamertagRole)) {
|
||||
let role = interaction.guild.roles.cache.get(GuildDB.linkedGamertagRole);
|
||||
member.roles.add(role);
|
||||
}
|
||||
|
||||
if (client.exists(GuildDB.memberRole)) {
|
||||
if (isDefined(GuildDB.memberRole)) {
|
||||
let role = interaction.guild.roles.cache.get(GuildDB.memberRole);
|
||||
member.roles.add(role);
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
const { EmbedBuilder, ActionRowBuilder, ButtonBuilder, ButtonStyle, StringSelectMenuBuilder } = require("discord.js");
|
||||
const { ApplicationCommandOptionType } = require("discord.js");
|
||||
const bitfieldCalculator = require("discord-bitfield-calculator");
|
||||
const isDefined = require("../util/Validation.js");
|
||||
|
||||
const generateAlarmMenus = (alarms, customId, placeholder, description) => {
|
||||
let alarmComponents = [];
|
||||
@@ -237,7 +238,7 @@ module.exports = {
|
||||
if (GuildDB.hasBotAdmin && interaction.member.roles.filter(e => GuildDB.botAdminRoles.indexOf(e) !== -1).length > 0) canUseCommand = true;
|
||||
if (!canUseCommand) return interaction.send({ content: "You don\"t have the permissions to use this command." });
|
||||
|
||||
if (!client.exists(GuildDB.Nitrado) || !client.exists(GuildDB.Nitrado.ServerID) || !client.exists(GuildDB.Nitrado.UserID) || !client.exists(GuildDB.Nitrado.Auth)) {
|
||||
if (!isDefined(GuildDB.Nitrado) || !isDefined(GuildDB.Nitrado.ServerID) || !isDefined(GuildDB.Nitrado.UserID) || !isDefined(GuildDB.Nitrado.Auth)) {
|
||||
const warnNitradoNotInitialized = new EmbedBuilder()
|
||||
.setColor(client.config.Colors.Yellow)
|
||||
.setDescription("**WARNING:** The DayZ Nitrado Server has not been configured for this guild yet. This command or feature is currently unavailable.");
|
||||
@@ -259,8 +260,8 @@ module.exports = {
|
||||
role: args[0].options[5].value,
|
||||
ignoredPlayers: [],
|
||||
rules: [],
|
||||
empExempt: client.exists(args[0].options[6]) ? args[0].options[6].value : false,
|
||||
showPlayerCoord: client.exists(args[0].options[7]) ? args[0].options[7].value : true,
|
||||
empExempt: isDefined(args[0].options[6]) ? args[0].options[6].value : false,
|
||||
showPlayerCoord: isDefined(args[0].options[7]) ? args[0].options[7].value : true,
|
||||
disabled: false,
|
||||
empExpire: null,
|
||||
};
|
||||
@@ -451,7 +452,7 @@ module.exports = {
|
||||
let alarmIndex = GuildDB.alarms.indexOf(alarm);
|
||||
|
||||
let playerStat = await client.dbo.collection("players").findOne({ "gamertag": interaction.customId.split("-")[2] });
|
||||
if (!client.exists(playerStat)) return interaction.update({ embeds: [new EmbedBuilder().setColor(client.config.Colors.Yellow).setDescription("**Not Found** This player cannot be found, the gamertag may be incorrect or this player has not logged onto the server before.")], components: [] });
|
||||
if (!isDefined(playerStat)) return interaction.update({ embeds: [new EmbedBuilder().setColor(client.config.Colors.Yellow).setDescription("**Not Found** This player cannot be found, the gamertag may be incorrect or this player has not logged onto the server before.")], components: [] });
|
||||
|
||||
let add = interaction.customId.split("-")[1] == "add";
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
const { EmbedBuilder } = require("discord.js");
|
||||
const { ApplicationCommandOptionType } = require("discord.js");
|
||||
const { createUser, addUser } = require("../database/user");
|
||||
const isDefined = require("../util/Validation.js");
|
||||
|
||||
module.exports = {
|
||||
name: "bank",
|
||||
@@ -67,11 +68,11 @@ module.exports = {
|
||||
|
||||
if (!banking) {
|
||||
banking = await createUser(interaction.member.user.id, GuildDB.serverID, GuildDB.startingBalance, client)
|
||||
if (!client.exists(banking)) return client.sendInternalError(interaction, err);
|
||||
if (!isDefined(banking)) return client.sendInternalError(interaction, err);
|
||||
}
|
||||
banking = banking.user;
|
||||
|
||||
if (!client.exists(banking.guilds[GuildDB.serverID])) {
|
||||
if (!isDefined(banking.guilds[GuildDB.serverID])) {
|
||||
const success = addUser(banking.guilds, GuildDB.serverID, interaction.member.user.id, client, GuildDB.startingBalance);
|
||||
if (!success) return client.sendInternalError(interaction, "Failed to add bank");
|
||||
}
|
||||
@@ -88,11 +89,11 @@ module.exports = {
|
||||
|
||||
if (!targetUserBanking) {
|
||||
targetUserBanking = await createUser(targetUserID, GuildDB.serverID, GuildDB.startingBalance, client)
|
||||
if (!client.exists(banking)) return client.sendInternalError(interaction, err);
|
||||
if (!isDefined(banking)) return client.sendInternalError(interaction, err);
|
||||
}
|
||||
targetUserBanking = targetUserBanking.user;
|
||||
|
||||
if (!client.exists(targetUserBanking.guilds[GuildDB.serverID])) {
|
||||
if (!isDefined(targetUserBanking.guilds[GuildDB.serverID])) {
|
||||
const success = addUser(banking.guilds, GuildDB.serverID, targetUserID, client, GuildDB.startingBalance);
|
||||
if (!success) return client.sendInternalError(interaction, "Failed to add bank");
|
||||
}
|
||||
@@ -138,11 +139,11 @@ module.exports = {
|
||||
|
||||
if (!targetUserBanking) {
|
||||
targetUserBanking = await createUser(targetUserID, GuildDB.serverID, GuildDB.startingBalance, client)
|
||||
if (!client.exists(banking)) return client.sendInternalError(interaction, err);
|
||||
if (!isDefined(banking)) return client.sendInternalError(interaction, err);
|
||||
}
|
||||
targetUserBanking = targetUserBanking.user;
|
||||
|
||||
if (!client.exists(targetUserBanking.guilds[GuildDB.serverID])) {
|
||||
if (!isDefined(targetUserBanking.guilds[GuildDB.serverID])) {
|
||||
const success = addUser(banking.guilds, GuildDB.serverID, targetUserID, client, GuildDB.startingBalance);
|
||||
if (!success) return client.sendInternalError(interaction, "Failed to add bank");
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ const { EmbedBuilder } = require("discord.js");
|
||||
const { ApplicationCommandOptionType } = require("discord.js");
|
||||
const { createUser, addUser } = require("../database/user");
|
||||
const { UpdatePlayer } = require("../database/player");
|
||||
const isDefined = require("../util/Validation.js");
|
||||
|
||||
module.exports = {
|
||||
name: "bounty",
|
||||
@@ -59,7 +60,7 @@ module.exports = {
|
||||
*/
|
||||
run: async (client, interaction, args, { GuildDB }) => {
|
||||
|
||||
if (!client.exists(GuildDB.Nitrado) || !client.exists(GuildDB.Nitrado.ServerID) || !client.exists(GuildDB.Nitrado.UserID) || !client.exists(GuildDB.Nitrado.Auth)) {
|
||||
if (!isDefined(GuildDB.Nitrado) || !isDefined(GuildDB.Nitrado.ServerID) || !isDefined(GuildDB.Nitrado.UserID) || !isDefined(GuildDB.Nitrado.Auth)) {
|
||||
const warnNitradoNotInitialized = new EmbedBuilder()
|
||||
.setColor(client.config.Colors.Yellow)
|
||||
.setDescription("**WARNING:** The DayZ Nitrado Server has not been configured for this guild yet. This command or feature is currently unavailable.");
|
||||
@@ -73,11 +74,11 @@ module.exports = {
|
||||
|
||||
if (!banking) {
|
||||
banking = await createUser(interaction.member.user.id, GuildDB.serverID, GuildDB.startingBalance, client)
|
||||
if (!client.exists(banking)) return client.sendInternalError(interaction, err);
|
||||
if (!isDefined(banking)) return client.sendInternalError(interaction, err);
|
||||
}
|
||||
banking = banking.user;
|
||||
|
||||
if (!client.exists(banking.guilds[GuildDB.serverID])) {
|
||||
if (!isDefined(banking.guilds[GuildDB.serverID])) {
|
||||
const success = addUser(banking.guilds, GuildDB.serverID, interaction.member.user.id, client, GuildDB.startingBalance);
|
||||
if (!success) return client.sendInternalError(interaction, "Failed to add bank");
|
||||
}
|
||||
@@ -86,7 +87,7 @@ module.exports = {
|
||||
if (args[0].name == "set") {
|
||||
|
||||
let playerStat = await client.dbo.collection("players").findOne({ "gamertag": args[0].options[0].value });
|
||||
if (!client.exists(playerStat)) return interaction.send({ embeds: [new EmbedBuilder().setColor(client.config.Colors.Yellow).setDescription("**Not Found** This player cannot be found, the gamertag may be incorrect or this player has not logged onto the server before for at least ` 5 minutes `.")] });
|
||||
if (!isDefined(playerStat)) return interaction.send({ embeds: [new EmbedBuilder().setColor(client.config.Colors.Yellow).setDescription("**Not Found** This player cannot be found, the gamertag may be incorrect or this player has not logged onto the server before for at least ` 5 minutes `.")] });
|
||||
|
||||
if (args[0].options[1].value > banking.guilds[GuildDB.serverID].balance) {
|
||||
let nsf = new EmbedBuilder()
|
||||
@@ -126,7 +127,7 @@ module.exports = {
|
||||
} else if (args[0].name == "pay") {
|
||||
|
||||
let playerStat = await client.dbo.collection("players").findOne({ "discordID": interaction.member.user.id });
|
||||
if (!client.exists(playerStat)) return interaction.send({ embeds: [new EmbedBuilder().setColor(client.config.Colors.Yellow).setDescription("**Not Found** Your user ID could not be found, contact an Admin.")] });
|
||||
if (!isDefined(playerStat)) return interaction.send({ embeds: [new EmbedBuilder().setColor(client.config.Colors.Yellow).setDescription("**Not Found** Your user ID could not be found, contact an Admin.")] });
|
||||
|
||||
if (playerStat.bounties.length == 0) {
|
||||
const noBounty = new EmbedBuilder()
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
const { EmbedBuilder, } = require("discord.js");
|
||||
const { createUser, addUser } = require("../database/user");
|
||||
const isDefined = require("../util/Validation.js");
|
||||
|
||||
module.exports = {
|
||||
name: "collect-income",
|
||||
@@ -44,16 +45,16 @@ module.exports = {
|
||||
|
||||
if (!banking) {
|
||||
banking = await createUser(interaction.member.user.id, GuildDB.serverID, GuildDB.startingBalance, client)
|
||||
if (!client.exists(banking)) return client.sendInternalError(interaction, err);
|
||||
if (!isDefined(banking)) return client.sendInternalError(interaction, err);
|
||||
}
|
||||
banking = banking.user;
|
||||
|
||||
if (!client.exists(banking.guilds[GuildDB.serverID])) {
|
||||
if (!isDefined(banking.guilds[GuildDB.serverID])) {
|
||||
const success = addUser(banking.guilds, GuildDB.serverID, interaction.member.user.id, client, GuildDB.startingBalance);
|
||||
if (!success) return client.sendInternalError(interaction, "Failed to add bank");
|
||||
}
|
||||
|
||||
if (!client.exists(banking.guilds[GuildDB.serverID].lastIncome)) banking.guilds[GuildDB.serverID].lastIncome = new Date("2000-01-01T00:00:00");
|
||||
if (!isDefined(banking.guilds[GuildDB.serverID].lastIncome)) banking.guilds[GuildDB.serverID].lastIncome = new Date("2000-01-01T00:00:00");
|
||||
|
||||
let now = new Date();
|
||||
let diff = (now - banking.guilds[GuildDB.serverID].lastIncome) / 1000;
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
const { EmbedBuilder } = require("discord.js");
|
||||
const { ApplicationCommandOptionType } = require("discord.js");
|
||||
const { insertPVPstats } = require("../database/player");
|
||||
const isDefined = require("../util/Validation.js");
|
||||
|
||||
module.exports = {
|
||||
name: "compare-rating",
|
||||
@@ -34,7 +35,7 @@ module.exports = {
|
||||
*/
|
||||
run: async (client, interaction, args, { GuildDB }) => {
|
||||
|
||||
if (!client.exists(GuildDB.Nitrado) || !client.exists(GuildDB.Nitrado.ServerID) || !client.exists(GuildDB.Nitrado.UserID) || !client.exists(GuildDB.Nitrado.Auth)) {
|
||||
if (!isDefined(GuildDB.Nitrado) || !isDefined(GuildDB.Nitrado.ServerID) || !isDefined(GuildDB.Nitrado.UserID) || !isDefined(GuildDB.Nitrado.Auth)) {
|
||||
const warnNitradoNotInitialized = new EmbedBuilder()
|
||||
.setColor(client.config.Colors.Yellow)
|
||||
.setDescription("**WARNING:** The DayZ Nitrado Server has not been configured for this guild yet. This command or feature is currently unavailable.");
|
||||
@@ -56,8 +57,8 @@ module.exports = {
|
||||
if (gamertag) comp = leaderboard.find(s => s.gamertag == gamertag);
|
||||
let self = leaderboard.find(s => s.discordID == interaction.member.user.id);
|
||||
|
||||
if (!client.exists(comp)) return interaction.send({ embeds: [new EmbedBuilder().setColor(client.config.Colors.Yellow).setDescription(`**Not Found** Unable to find any records with the gamertag or user provided.`)] });
|
||||
if (!client.exists(self)) return interaction.send({ embeds: [new EmbedBuilder().setColor(client.config.Colors.Yellow).setDescription(`**Not Found** You haven"t linked your gamertag and your stats cannot be found.`)] });
|
||||
if (!isDefined(comp)) return interaction.send({ embeds: [new EmbedBuilder().setColor(client.config.Colors.Yellow).setDescription(`**Not Found** Unable to find any records with the gamertag or user provided.`)] });
|
||||
if (!isDefined(self)) return interaction.send({ embeds: [new EmbedBuilder().setColor(client.config.Colors.Yellow).setDescription(`**Not Found** You haven"t linked your gamertag and your stats cannot be found.`)] });
|
||||
|
||||
let lbPosSelf = leaderboard.indexOf(self) + 1;
|
||||
let lbPosComp = leaderboard.indexOf(comp) + 1;
|
||||
@@ -69,8 +70,8 @@ module.exports = {
|
||||
let selfDataMax = Math.max(...selfData);
|
||||
let compDataMax = Math.max(...compData);
|
||||
|
||||
if (!client.exists(self.highestCombatRating) || self.highestCombatRating < selfDataMax) self.highestCombatRating = selfDataMax;
|
||||
if (!client.exists(comp.highestCombatRating) || comp.highestCombatRating < compDataMax) comp.highestCombatRating = compDataMax;
|
||||
if (!isDefined(self.highestCombatRating) || self.highestCombatRating < selfDataMax) self.highestCombatRating = selfDataMax;
|
||||
if (!isDefined(comp.highestCombatRating) || comp.highestCombatRating < compDataMax) comp.highestCombatRating = compDataMax;
|
||||
|
||||
let tag = comp.discordID != "" ? `<@${comp.discordID}>` : comp.gamertag;
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@ const { EmbedBuilder, ActionRowBuilder, ButtonBuilder, ButtonStyle } = require("
|
||||
const { ApplicationCommandOptionType } = require("discord.js");
|
||||
const bitfieldCalculator = require("discord-bitfield-calculator");
|
||||
const { getDefaultSettings } = require("../database/guild");
|
||||
const isDefined = require("../util/Validation.js");
|
||||
|
||||
module.exports = {
|
||||
name: "config",
|
||||
@@ -712,12 +713,12 @@ module.exports = {
|
||||
// Role / channel display
|
||||
const NONE = `${w}${m}none${w}`;
|
||||
const channelsInfo = GuildDB.customChannelStatus ? "\`</channels:1225869620813107246>\` to view" : NONE;
|
||||
const killfeedChannel = client.exists(GuildDB.killfeedChannel) ? `<#${GuildDB.killfeedChannel}>` : NONE;
|
||||
const connectionLogs = client.exists(GuildDB.connectionLogsChannel) ? `<#${GuildDB.connectionLogsChannel}>` : NONE;
|
||||
const activePlayers = client.exists(GuildDB.activePlayersChannel) ? `<#${GuildDB.activePlayersChannel}>` : NONE;
|
||||
const welcomeChannel = client.exists(GuildDB.welcomeChannel) ? `<#${GuildDB.welcomeChannel}>` : NONE;
|
||||
const linkedGTRole = client.exists(GuildDB.linkedGamertagRole) ? `<@&${GuildDB.linkedGamertagRole}>` : NONE;
|
||||
const memberRole = client.exists(GuildDB.memberRole) ? `<@&${GuildDB.memberRole}>` : NONE;
|
||||
const killfeedChannel = isDefined(GuildDB.killfeedChannel) ? `<#${GuildDB.killfeedChannel}>` : NONE;
|
||||
const connectionLogs = isDefined(GuildDB.connectionLogsChannel) ? `<#${GuildDB.connectionLogsChannel}>` : NONE;
|
||||
const activePlayers = isDefined(GuildDB.activePlayersChannel) ? `<#${GuildDB.activePlayersChannel}>` : NONE;
|
||||
const welcomeChannel = isDefined(GuildDB.welcomeChannel) ? `<#${GuildDB.welcomeChannel}>` : NONE;
|
||||
const linkedGTRole = isDefined(GuildDB.linkedGamertagRole) ? `<@&${GuildDB.linkedGamertagRole}>` : NONE;
|
||||
const memberRole = isDefined(GuildDB.memberRole) ? `<@&${GuildDB.memberRole}>` : NONE;
|
||||
|
||||
// value display
|
||||
const incomeLimiter = `${GuildDB.incomeLimiter} hours`;
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
const { EmbedBuilder, ActionRowBuilder, StringSelectMenuBuilder } = require("discord.js");
|
||||
const { ApplicationCommandOptionType } = require("discord.js");
|
||||
const bitfieldCalculator = require("discord-bitfield-calculator");
|
||||
const isDefined = require("../util/Validation.js");
|
||||
|
||||
module.exports = {
|
||||
name: "event",
|
||||
@@ -72,7 +73,7 @@ module.exports = {
|
||||
*/
|
||||
run: async (client, interaction, args, { GuildDB }) => {
|
||||
|
||||
if (!client.exists(GuildDB.Nitrado) || !client.exists(GuildDB.Nitrado.ServerID) || !client.exists(GuildDB.Nitrado.UserID) || !client.exists(GuildDB.Nitrado.Auth)) {
|
||||
if (!isDefined(GuildDB.Nitrado) || !isDefined(GuildDB.Nitrado.ServerID) || !isDefined(GuildDB.Nitrado.UserID) || !isDefined(GuildDB.Nitrado.Auth)) {
|
||||
const warnNitradoNotInitialized = new EmbedBuilder()
|
||||
.setColor(client.config.Colors.Yellow)
|
||||
.setDescription("**WARNING:** The DayZ Nitrado Server has not been configured for this guild yet. This command or feature is currently unavailable.");
|
||||
@@ -92,7 +93,7 @@ module.exports = {
|
||||
if (args[0].name == "player-track") {
|
||||
|
||||
let playerStat = await client.dbo.collection("players").findOne({ "gamertag": args[0].options[0].value });
|
||||
if (!client.exists(playerStat)) return interaction.send({ embeds: [new EmbedBuilder().setColor(client.config.Colors.Yellow).setDescription(`**Not Found** This gamertag \` ${args[0].options[0].value} \` cannot be found, the gamertag may be incorrect or this player has not logged onto the server before for at least \` 5 minutes \`.`)] });
|
||||
if (!isDefined(playerStat)) return interaction.send({ embeds: [new EmbedBuilder().setColor(client.config.Colors.Yellow).setDescription(`**Not Found** This gamertag \` ${args[0].options[0].value} \` cannot be found, the gamertag may be incorrect or this player has not logged onto the server before for at least \` 5 minutes \`.`)] });
|
||||
|
||||
let event = {
|
||||
type: args[0].name,
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
const { EmbedBuilder, ActionRowBuilder, ButtonBuilder, ButtonStyle } = require("discord.js");
|
||||
const { ApplicationCommandOptionType } = require("discord.js");
|
||||
const { UpdatePlayer } = require("../database/player");
|
||||
const isDefined = require("../util/Validation.js");
|
||||
|
||||
module.exports = {
|
||||
name: "gamertag-link",
|
||||
@@ -29,7 +30,7 @@ module.exports = {
|
||||
*/
|
||||
run: async (client, interaction, args, { GuildDB }) => {
|
||||
|
||||
if (!client.exists(GuildDB.Nitrado) || !client.exists(GuildDB.Nitrado.ServerID) || !client.exists(GuildDB.Nitrado.UserID) || !client.exists(GuildDB.Nitrado.Auth)) {
|
||||
if (!isDefined(GuildDB.Nitrado) || !isDefined(GuildDB.Nitrado.ServerID) || !isDefined(GuildDB.Nitrado.UserID) || !isDefined(GuildDB.Nitrado.Auth)) {
|
||||
const warnNitradoNotInitialized = new EmbedBuilder()
|
||||
.setColor(client.config.Colors.Yellow)
|
||||
.setDescription("**WARNING:** The DayZ Nitrado Server has not been configured for this guild yet. This command or feature is currently unavailable.");
|
||||
@@ -38,9 +39,9 @@ module.exports = {
|
||||
}
|
||||
|
||||
let playerStat = await client.dbo.collection("players").findOne({ "gamertag": args[0].value });
|
||||
if (!client.exists(playerStat)) return interaction.send({ embeds: [new EmbedBuilder().setColor(client.config.Colors.Yellow).setDescription(`**Not Found** This gamertag \` ${args[0].value} \` cannot be found, the gamertag may be incorrect or this player has not logged onto the server before for at least \` 5 minutes \`.`)] });
|
||||
if (!isDefined(playerStat)) return interaction.send({ embeds: [new EmbedBuilder().setColor(client.config.Colors.Yellow).setDescription(`**Not Found** This gamertag \` ${args[0].value} \` cannot be found, the gamertag may be incorrect or this player has not logged onto the server before for at least \` 5 minutes \`.`)] });
|
||||
|
||||
if (client.exists(playerStat.discordID)) {
|
||||
if (isDefined(playerStat.discordID)) {
|
||||
const warnGTOverwrite = new EmbedBuilder()
|
||||
.setColor(client.config.Colors.Yellow)
|
||||
.setDescription(`**Notice:**\n> The gamertag has previously been linked to <@${playerStat.discordID}>. Are you sure you would like to change this?`)
|
||||
@@ -65,12 +66,12 @@ module.exports = {
|
||||
await UpdatePlayer(client, playerStat, interaction);
|
||||
|
||||
let member = interaction.guild.members.cache.get(interaction.member.user.id);
|
||||
if (client.exists(GuildDB.linkedGamertagRole)) {
|
||||
if (isDefined(GuildDB.linkedGamertagRole)) {
|
||||
let role = interaction.guild.roles.cache.get(GuildDB.linkedGamertagRole);
|
||||
member.roles.add(role);
|
||||
}
|
||||
|
||||
if (client.exists(GuildDB.memberRole)) {
|
||||
if (isDefined(GuildDB.memberRole)) {
|
||||
let role = interaction.guild.roles.cache.get(GuildDB.memberRole);
|
||||
member.roles.add(role);
|
||||
}
|
||||
@@ -98,12 +99,12 @@ module.exports = {
|
||||
await UpdatePlayer(client, playerStat, interaction);
|
||||
|
||||
let member = interaction.guild.members.cache.get(interaction.member.user.id);
|
||||
if (client.exists(GuildDB.linkedGamertagRole)) {
|
||||
if (isDefined(GuildDB.linkedGamertagRole)) {
|
||||
let role = interaction.guild.roles.cache.get(GuildDB.linkedGamertagRole);
|
||||
member.roles.add(role);
|
||||
}
|
||||
|
||||
if (client.exists(GuildDB.memberRole)) {
|
||||
if (isDefined(GuildDB.memberRole)) {
|
||||
let role = interaction.guild.roles.cache.get(GuildDB.memberRole);
|
||||
member.roles.add(role);
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
const { EmbedBuilder, ActionRowBuilder, ButtonBuilder, ButtonStyle } = require("discord.js");
|
||||
const { UpdatePlayer } = require("../database/player");
|
||||
const isDefined = require("../util/Validation.js");
|
||||
|
||||
module.exports = {
|
||||
name: "gamertag-unlink",
|
||||
@@ -21,7 +22,7 @@ module.exports = {
|
||||
*/
|
||||
run: async (client, interaction, args, { GuildDB }) => {
|
||||
|
||||
if (!client.exists(GuildDB.Nitrado) || !client.exists(GuildDB.Nitrado.ServerID) || !client.exists(GuildDB.Nitrado.UserID) || !client.exists(GuildDB.Nitrado.Auth)) {
|
||||
if (!isDefined(GuildDB.Nitrado) || !isDefined(GuildDB.Nitrado.ServerID) || !isDefined(GuildDB.Nitrado.UserID) || !isDefined(GuildDB.Nitrado.Auth)) {
|
||||
const warnNitradoNotInitialized = new EmbedBuilder()
|
||||
.setColor(client.config.Colors.Yellow)
|
||||
.setDescription("**WARNING:** The DayZ Nitrado Server has not been configured for this guild yet. This command or feature is currently unavailable.");
|
||||
@@ -30,7 +31,7 @@ module.exports = {
|
||||
}
|
||||
|
||||
let playerStat = await client.dbo.collection("players").findOne({ "discordID": interaction.member.user.id });
|
||||
if (!client.exists(playerStat)) return interaction.send({ embeds: [new EmbedBuilder().setColor(client.config.Colors.Yellow).setDescription(`**No Gamertag Linked** It Appears your don"t have a gamertag linked to your account.`)] });
|
||||
if (!isDefined(playerStat)) return interaction.send({ embeds: [new EmbedBuilder().setColor(client.config.Colors.Yellow).setDescription(`**No Gamertag Linked** It Appears your don"t have a gamertag linked to your account.`)] });
|
||||
|
||||
const warnGTOverwrite = new EmbedBuilder()
|
||||
.setColor(client.config.Colors.Yellow)
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
const { EmbedBuilder } = require("discord.js");
|
||||
const { ApplicationCommandOptionType } = require("discord.js");
|
||||
const isDefined = require("../util/Validation.js");
|
||||
|
||||
module.exports = {
|
||||
name: "leaderboard",
|
||||
@@ -53,7 +54,7 @@ module.exports = {
|
||||
*/
|
||||
run: async (client, interaction, args, { GuildDB }) => {
|
||||
|
||||
if (!client.exists(GuildDB.Nitrado) || !client.exists(GuildDB.Nitrado.ServerID) || !client.exists(GuildDB.Nitrado.UserID) || !client.exists(GuildDB.Nitrado.Auth)) {
|
||||
if (!isDefined(GuildDB.Nitrado) || !isDefined(GuildDB.Nitrado.ServerID) || !isDefined(GuildDB.Nitrado.UserID) || !isDefined(GuildDB.Nitrado.Auth)) {
|
||||
const warnNitradoNotInitialized = new EmbedBuilder()
|
||||
.setColor(client.config.Colors.Yellow)
|
||||
.setDescription("**WARNING:** The DayZ Nitrado Server has not been configured for this guild yet. This command or feature is currently unavailable.");
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
const { EmbedBuilder } = require("discord.js");
|
||||
const { nearest } = require("../database/destinations");
|
||||
const isDefined = require("../util/Validation.js");
|
||||
|
||||
module.exports = {
|
||||
name: "location",
|
||||
@@ -21,7 +22,7 @@ module.exports = {
|
||||
*/
|
||||
run: async (client, interaction, args, { GuildDB }) => {
|
||||
|
||||
if (!client.exists(GuildDB.Nitrado) || !client.exists(GuildDB.Nitrado.ServerID) || !client.exists(GuildDB.Nitrado.UserID) || !client.exists(GuildDB.Nitrado.Auth) || !client.exists(GuildDB.Nitrado.Mission)) {
|
||||
if (!isDefined(GuildDB.Nitrado) || !isDefined(GuildDB.Nitrado.ServerID) || !isDefined(GuildDB.Nitrado.UserID) || !isDefined(GuildDB.Nitrado.Auth) || !isDefined(GuildDB.Nitrado.Mission)) {
|
||||
const warnNitradoNotInitialized = new EmbedBuilder()
|
||||
.setColor(client.config.Colors.Yellow)
|
||||
.setDescription("**WARNING:** The DayZ Nitrado Server has not been configured for this guild yet. This command or feature is currently unavailable.");
|
||||
@@ -30,8 +31,8 @@ module.exports = {
|
||||
}
|
||||
|
||||
let playerStat = await client.dbo.collection("players").findOne({ "discordID": interaction.member.user.id });
|
||||
if (!client.exists(playerStat)) return interaction.send({ embeds: [new EmbedBuilder().setColor(client.config.Colors.Yellow).setDescription(`**Not Found** You haven"t linked your gamertag and are unable to use this command.`)], flags: (1 << 6) });
|
||||
if (!client.exists(playerStat.time)) return interaction.send({ embeds: [new EmbedBuilder().setColor(client.config.Colors.Yellow).setDescription(`**Not Found** There is no location saved to your gamertag yet. Make sure you"ve logged into the server for more than **5 minutes.**`)], flags: (1 << 6) });
|
||||
if (!isDefined(playerStat)) return interaction.send({ embeds: [new EmbedBuilder().setColor(client.config.Colors.Yellow).setDescription(`**Not Found** You haven"t linked your gamertag and are unable to use this command.`)], flags: (1 << 6) });
|
||||
if (!isDefined(playerStat.time)) return interaction.send({ embeds: [new EmbedBuilder().setColor(client.config.Colors.Yellow).setDescription(`**Not Found** There is no location saved to your gamertag yet. Make sure you"ve logged into the server for more than **5 minutes.**`)], flags: (1 << 6) });
|
||||
|
||||
console.log(true);
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
const { EmbedBuilder } = require("discord.js");
|
||||
const { ApplicationCommandOptionType } = require("discord.js");
|
||||
const isDefined = require("../util/Validation.js");
|
||||
|
||||
module.exports = {
|
||||
name: "lookup",
|
||||
@@ -46,7 +47,7 @@ module.exports = {
|
||||
*/
|
||||
run: async (client, interaction, args, { GuildDB }) => {
|
||||
|
||||
if (!client.exists(GuildDB.Nitrado) || !client.exists(GuildDB.Nitrado.ServerID) || !client.exists(GuildDB.Nitrado.UserID) || !client.exists(GuildDB.Nitrado.Auth)) {
|
||||
if (!isDefined(GuildDB.Nitrado) || !isDefined(GuildDB.Nitrado.ServerID) || !isDefined(GuildDB.Nitrado.UserID) || !isDefined(GuildDB.Nitrado.Auth)) {
|
||||
const warnNitradoNotInitialized = new EmbedBuilder()
|
||||
.setColor(client.config.Colors.Yellow)
|
||||
.setDescription("**WARNING:** The DayZ Nitrado Server has not been configured for this guild yet. This command or feature is currently unavailable.");
|
||||
@@ -59,7 +60,7 @@ module.exports = {
|
||||
let playerStat = await client.dbo.collection("players").findOne({ "gamertag": args[0].options[0].value });
|
||||
if (playerStat == undefined) return interaction.send({ embeds: [new EmbedBuilder().setColor(client.config.Colors.Yellow).setDescription(`**Not Found** This gamertag \` ${args[0].options[0].value} \` cannot be found, the gamertag may be incorrect or this player has not logged onto the server before for at least \` 5 minutes \`.`)] });
|
||||
|
||||
if (client.exists(playerStat.discordID)) {
|
||||
if (isDefined(playerStat.discordID)) {
|
||||
const found = new EmbedBuilder()
|
||||
.setColor(client.config.Colors.Yellow)
|
||||
.setDescription(`**Record Found**\n> The gamertag \` ${playerStat.gamertag} \` is currently linked to <@${playerStat.discordID}>.`)
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
const { FetchServerSettings } = require("../util/NitradoAPI");
|
||||
const { FetchServerSettings } = require("../services/NitradoAPI");
|
||||
const { Missions } = require("../database/destinations");
|
||||
const { EmbedBuilder } = require("discord.js");
|
||||
const isDefined = require("../util/Validation.js");
|
||||
|
||||
module.exports = {
|
||||
name: "player-list",
|
||||
@@ -23,7 +24,7 @@ module.exports = {
|
||||
*/
|
||||
run: async (client, interaction, args, { GuildDB }, start) => {
|
||||
|
||||
if (!client.exists(GuildDB.Nitrado) || !client.exists(GuildDB.Nitrado.ServerID) || !client.exists(GuildDB.Nitrado.UserID) || !client.exists(GuildDB.Nitrado.Auth)) {
|
||||
if (!isDefined(GuildDB.Nitrado) || !isDefined(GuildDB.Nitrado.ServerID) || !isDefined(GuildDB.Nitrado.UserID) || !isDefined(GuildDB.Nitrado.Auth)) {
|
||||
const warnNitradoNotInitialized = new EmbedBuilder()
|
||||
.setColor(client.config.Colors.Yellow)
|
||||
.setDescription("**WARNING:** The DayZ Nitrado Server has not been configured for this guild yet. This command or feature is currently unavailable.");
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
const { EmbedBuilder } = require("discord.js");
|
||||
const { ApplicationCommandOptionType } = require("discord.js");
|
||||
const { insertPVPstats } = require("../database/player");
|
||||
const isDefined = require("../util/Validation.js");
|
||||
|
||||
module.exports = {
|
||||
name: "player-stats",
|
||||
@@ -57,7 +58,7 @@ module.exports = {
|
||||
*/
|
||||
run: async (client, interaction, args, { GuildDB }, start) => {
|
||||
|
||||
if (!client.exists(GuildDB.Nitrado) || !client.exists(GuildDB.Nitrado.ServerID) || !client.exists(GuildDB.Nitrado.UserID) || !client.exists(GuildDB.Nitrado.Auth)) {
|
||||
if (!isDefined(GuildDB.Nitrado) || !isDefined(GuildDB.Nitrado.ServerID) || !isDefined(GuildDB.Nitrado.UserID) || !isDefined(GuildDB.Nitrado.Auth)) {
|
||||
const warnNitradoNotInitialized = new EmbedBuilder()
|
||||
.setColor(client.config.Colors.Yellow)
|
||||
.setDescription("**WARNING:** The DayZ Nitrado Server has not been configured for this guild yet. This command or feature is currently unavailable.");
|
||||
@@ -84,7 +85,7 @@ module.exports = {
|
||||
if (gamertag) query = leaderboard.find(u => u.user.userID == playerStat.discordID); // Searching by gamertag
|
||||
if (self) query = leaderboard.find(u => u.user.userID == interaction.member.user.id); // Searching for self
|
||||
|
||||
if (!client.exists(query)) return interaction.send({ embeds: [new EmbedBuilder().setColor(client.config.Colors.Yellow).setDescription(`**Not Found** Unable to find any records with the gamertag or user provided.`)] });
|
||||
if (!isDefined(query)) return interaction.send({ embeds: [new EmbedBuilder().setColor(client.config.Colors.Yellow).setDescription(`**Not Found** Unable to find any records with the gamertag or user provided.`)] });
|
||||
leaderboardPos = leaderboard.indexOf(query);
|
||||
|
||||
} else {
|
||||
@@ -97,7 +98,7 @@ module.exports = {
|
||||
if (gamertag) query = leaderboard.find(s => s.gamertag == gamertag); // Searching by gamertag
|
||||
if (self) query = leaderboard.find(s => s.discordID == interaction.member.user.id); // Searching for self
|
||||
|
||||
if (!client.exists(query)) return interaction.send({ embeds: [new EmbedBuilder().setColor(client.config.Colors.Yellow).setDescription(`**Not Found** Unable to find any records with the gamertag or user provided.`)] });
|
||||
if (!isDefined(query)) return interaction.send({ embeds: [new EmbedBuilder().setColor(client.config.Colors.Yellow).setDescription(`**Not Found** Unable to find any records with the gamertag or user provided.`)] });
|
||||
leaderboardPos = leaderboard.indexOf(query);
|
||||
|
||||
}
|
||||
@@ -142,7 +143,7 @@ module.exports = {
|
||||
|
||||
statsEmbed.addFields({ name: "Leaderboard Position", value: `# ${leaderboardPos}`, inline: true });
|
||||
|
||||
if ((category == "shotsLanded" || category == "timesShot") && !client.exists(query.shotsLanded)) query = insertPVPstats(query);
|
||||
if ((category == "shotsLanded" || category == "timesShot") && !isDefined(query.shotsLanded)) query = insertPVPstats(query);
|
||||
|
||||
if (category == "totalSessionTime") {
|
||||
statsEmbed.addFields(
|
||||
@@ -242,8 +243,8 @@ module.exports = {
|
||||
|
||||
let dataMax = Math.max(...query.combatRatingHistory);
|
||||
let dataMin = Math.min(...query.combatRatingHistory);
|
||||
if (!client.exists(query.highestCombatRating) || query.highestCombatRating < dataMax) query.highestCombatRating = dataMax;
|
||||
if (!client.exists(query.lowestCombatRating) || query.lowestCombatRating > dataMin) query.lowestCombatRating = dataMin;
|
||||
if (!isDefined(query.highestCombatRating) || query.highestCombatRating < dataMax) query.highestCombatRating = dataMax;
|
||||
if (!isDefined(query.lowestCombatRating) || query.lowestCombatRating > dataMin) query.lowestCombatRating = dataMin;
|
||||
|
||||
statsEmbed.addFields(
|
||||
{ name: "Combat Rating", value: `${query.combatRating}`, inline: true },
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
const { EmbedBuilder, ActionRowBuilder, StringSelectMenuBuilder } = require("discord.js");
|
||||
const { createUser, addUser } = require("../database/user");
|
||||
const { ApplicationCommandOptionType } = require("discord.js");
|
||||
const isDefined = require("../util/Validation.js");
|
||||
|
||||
module.exports = {
|
||||
name: "purchase-emp",
|
||||
@@ -33,7 +34,7 @@ module.exports = {
|
||||
*/
|
||||
run: async (client, interaction, args, { GuildDB }) => {
|
||||
|
||||
if (!client.exists(GuildDB.Nitrado) || !client.exists(GuildDB.Nitrado.ServerID) || !client.exists(GuildDB.Nitrado.UserID) || !client.exists(GuildDB.Nitrado.Auth)) {
|
||||
if (!isDefined(GuildDB.Nitrado) || !isDefined(GuildDB.Nitrado.ServerID) || !isDefined(GuildDB.Nitrado.UserID) || !isDefined(GuildDB.Nitrado.Auth)) {
|
||||
const warnNitradoNotInitialized = new EmbedBuilder()
|
||||
.setColor(client.config.Colors.Yellow)
|
||||
.setDescription("**WARNING:** The DayZ Nitrado Server has not been configured for this guild yet. This command or feature is currently unavailable.");
|
||||
@@ -41,18 +42,18 @@ module.exports = {
|
||||
return interaction.send({ embeds: [warnNitradoNotInitialized], flags: (1 << 6) });
|
||||
}
|
||||
|
||||
if (client.exists(GuildDB.purchaseEMP) && !GuildDB.purchaseEMP) return interaction.send({ embeds: [new EmbedBuilder().setColor(client.config.Colors.Yellow).setDescription("**Notice:** The admins have disabled this feature")] });
|
||||
if (isDefined(GuildDB.purchaseEMP) && !GuildDB.purchaseEMP) return interaction.send({ embeds: [new EmbedBuilder().setColor(client.config.Colors.Yellow).setDescription("**Notice:** The admins have disabled this feature")] });
|
||||
|
||||
const duration = args[0].value;
|
||||
let banking = await client.dbo.collection("users").findOne({ "user.userID": interaction.member.user.id }).then(banking => banking);
|
||||
|
||||
if (!banking) {
|
||||
banking = await createUser(interaction.member.user.id, GuildDB.serverID, GuildDB.startingBalance, client)
|
||||
if (!client.exists(banking)) return client.sendInternalError(interaction, err);
|
||||
if (!isDefined(banking)) return client.sendInternalError(interaction, err);
|
||||
}
|
||||
banking = banking.user;
|
||||
|
||||
if (!client.exists(banking.guilds[GuildDB.serverID])) {
|
||||
if (!isDefined(banking.guilds[GuildDB.serverID])) {
|
||||
const success = addUser(banking.guilds, GuildDB.serverID, interaction.member.user.id, client, GuildDB.startingBalance);
|
||||
if (!success) return client.sendInternalError(interaction, "Failed to add bank");
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
const { EmbedBuilder } = require("discord.js");
|
||||
const { ApplicationCommandOptionType } = require("discord.js");
|
||||
const { createUser, addUser } = require("../database/user")
|
||||
const { createUser, addUser } = require("../database/user");
|
||||
const isDefined = require("../util/Validation.js");
|
||||
|
||||
module.exports = {
|
||||
name: "purchase-uav",
|
||||
@@ -40,7 +41,7 @@ module.exports = {
|
||||
*/
|
||||
run: async (client, interaction, args, { GuildDB }) => {
|
||||
|
||||
if (!client.exists(GuildDB.Nitrado) || !client.exists(GuildDB.Nitrado.ServerID) || !client.exists(GuildDB.Nitrado.UserID) || !client.exists(GuildDB.Nitrado.Auth)) {
|
||||
if (!isDefined(GuildDB.Nitrado) || !isDefined(GuildDB.Nitrado.ServerID) || !isDefined(GuildDB.Nitrado.UserID) || !isDefined(GuildDB.Nitrado.Auth)) {
|
||||
const warnNitradoNotInitialized = new EmbedBuilder()
|
||||
.setColor(client.config.Colors.Yellow)
|
||||
.setDescription("**WARNING:** The DayZ Nitrado Server has not been configured for this guild yet. This command or feature is currently unavailable.");
|
||||
@@ -48,17 +49,17 @@ module.exports = {
|
||||
return interaction.send({ embeds: [warnNitradoNotInitialized], flags: (1 << 6) });
|
||||
}
|
||||
|
||||
if (client.exists(GuildDB.purchaseUAV) && !GuildDB.purchaseUAV) return interaction.send({ embeds: [new EmbedBuilder().setColor(client.config.Colors.Yellow).setDescription("**Notice:** The admins have disabled this feature")] });
|
||||
if (isDefined(GuildDB.purchaseUAV) && !GuildDB.purchaseUAV) return interaction.send({ embeds: [new EmbedBuilder().setColor(client.config.Colors.Yellow).setDescription("**Notice:** The admins have disabled this feature")] });
|
||||
|
||||
let banking = await client.dbo.collection("users").findOne({ "user.userID": interaction.member.user.id }).then(banking => banking);
|
||||
|
||||
if (!banking) {
|
||||
banking = await createUser(interaction.member.user.id, GuildDB.serverID, GuildDB.startingBalance, client)
|
||||
if (!client.exists(banking)) return client.sendInternalError(interaction, err);
|
||||
if (!isDefined(banking)) return client.sendInternalError(interaction, err);
|
||||
}
|
||||
banking = banking.user;
|
||||
|
||||
if (!client.exists(banking.guilds[GuildDB.serverID])) {
|
||||
if (!isDefined(banking.guilds[GuildDB.serverID])) {
|
||||
const success = addUser(banking.guilds, GuildDB.serverID, interaction.member.user.id, client, GuildDB.startingBalance);
|
||||
if (!success) return client.sendInternalError(interaction, "Failed to add bank");
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ const { EmbedBuilder, ActionRowBuilder, ButtonBuilder, ButtonStyle } = require("
|
||||
const { ApplicationCommandOptionType } = require("discord.js");
|
||||
const { addUser } = require("../database/user");
|
||||
const bitfieldCalculator = require("discord-bitfield-calculator");
|
||||
const isDefined = require("../util/Validation.js");
|
||||
|
||||
module.exports = {
|
||||
name: "reset",
|
||||
@@ -33,7 +34,7 @@ module.exports = {
|
||||
let canUseCommand = false;
|
||||
|
||||
if (permissions.includes("MANAGE_GUILD")) canUseCommand = true;
|
||||
if (client.exists(GuildDB.botAdmin) && interaction.member.roles.includes(GuildDB.botAdmin)) canUseCommand = true;
|
||||
if (isDefined(GuildDB.botAdmin) && interaction.member.roles.includes(GuildDB.botAdmin)) canUseCommand = true;
|
||||
if (!canUseCommand) return interaction.send({ content: "You don\"t have the permissions to use this command." });
|
||||
|
||||
const targetUserID = args[0].value.replace("<@!", "").replace(">", "");
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
const { EmbedBuilder, ActionRowBuilder, ButtonBuilder, ButtonStyle, ModalBuilder, TextInputBuilder, TextInputStyle } = require("discord.js");
|
||||
const { ApplicationCommandOptionType } = require("discord.js");
|
||||
const bitfieldCalculator = require("discord-bitfield-calculator");
|
||||
const { BanPlayer, UnbanPlayer, RestartServer, CheckServerStatus, DisableBaseDamage, DisableContainerDamage, NitradoCredentialStatus } = require("../util/NitradoAPI");
|
||||
const { BanPlayer, UnbanPlayer, RestartServer, CheckServerStatus, DisableBaseDamage, DisableContainerDamage, NitradoCredentialStatus } = require("../services/NitradoAPI");
|
||||
const { encrypt, decrypt } = require("../util/Cryptic");
|
||||
const isDefined = require("../util/Validation.js");
|
||||
|
||||
module.exports = {
|
||||
name: "server",
|
||||
@@ -117,7 +118,7 @@ module.exports = {
|
||||
|
||||
if (args[0].name == "initialize") {
|
||||
|
||||
if (client.exists(GuildDB.Nitrado)) {
|
||||
if (isDefined(GuildDB.Nitrado)) {
|
||||
const prompt = new EmbedBuilder()
|
||||
.setTitle(`Nitrado Server Information Already Configured!`)
|
||||
.setDescription("**Notice:** This will overwrite your previously configured Nitrado Server Information")
|
||||
@@ -190,7 +191,7 @@ module.exports = {
|
||||
return interaction.send({ embeds: [prompt], components: [opt], flags: (1 << 6) });
|
||||
}
|
||||
|
||||
if (!client.exists(GuildDB.Nitrado) || !client.exists(GuildDB.Nitrado.ServerID)) return interaction.send({ embeds: [new EmbedBuilder().setColor(client.config.Colors.Red).setDescription(`**Notice:**\nThis Discord guild has not been configured with a Nitrado DayZ server. To configure your guild, use </server initialize:1166877457559851011>`)] });
|
||||
if (!isDefined(GuildDB.Nitrado) || !isDefined(GuildDB.Nitrado.ServerID)) return interaction.send({ embeds: [new EmbedBuilder().setColor(client.config.Colors.Red).setDescription(`**Notice:**\nThis Discord guild has not been configured with a Nitrado DayZ server. To configure your guild, use </server initialize:1166877457559851011>`)] });
|
||||
|
||||
if (args[0].name == "credentials-status") {
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@ const { EmbedBuilder, ActionRowBuilder, StringSelectMenuBuilder } = require("dis
|
||||
const { ApplicationCommandOptionType } = require("discord.js");
|
||||
const { weapons } = require("../database/weapons");
|
||||
const { insertPVPstats, createWeaponStats } = require("../database/player");
|
||||
const isDefined = require("../util/Validation.js");
|
||||
|
||||
module.exports = {
|
||||
name: "weapon-stats",
|
||||
@@ -54,7 +55,7 @@ module.exports = {
|
||||
*/
|
||||
run: async (client, interaction, args, { GuildDB }) => {
|
||||
|
||||
if (!client.exists(GuildDB.Nitrado) || !client.exists(GuildDB.Nitrado.ServerID) || !client.exists(GuildDB.Nitrado.UserID) || !client.exists(GuildDB.Nitrado.Auth)) {
|
||||
if (!isDefined(GuildDB.Nitrado) || !isDefined(GuildDB.Nitrado.ServerID) || !isDefined(GuildDB.Nitrado.UserID) || !isDefined(GuildDB.Nitrado.Auth)) {
|
||||
const warnNitradoNotInitialized = new EmbedBuilder()
|
||||
.setColor(client.config.Colors.Yellow)
|
||||
.setDescription("**WARNING:** The DayZ Nitrado Server has not been configured for this guild yet. This command or feature is currently unavailable.");
|
||||
@@ -78,7 +79,7 @@ module.exports = {
|
||||
// Searching for self
|
||||
if (self) query = await client.dbo.collection("players").findOne({ "discordID": interaction.member.user.id });
|
||||
|
||||
if (!client.exists(query)) return interaction.send({ embeds: [new EmbedBuilder().setColor(client.config.Colors.Yellow).setDescription(`**Not Found** Unable to find any records with the gamertag or user provided.`)] });
|
||||
if (!isDefined(query)) return interaction.send({ embeds: [new EmbedBuilder().setColor(client.config.Colors.Yellow).setDescription(`**Not Found** Unable to find any records with the gamertag or user provided.`)] });
|
||||
|
||||
let weaponSelect = new StringSelectMenuBuilder()
|
||||
.setCustomId(`ViewWeaponStats-${query.playerID}-${interaction.member.user.id}`)
|
||||
@@ -110,8 +111,8 @@ module.exports = {
|
||||
let player = await client.dbo.collection("players").findOne({ "playerID": playerID });
|
||||
const tag = player.discordID != "" ? `<@${player.discordID}>"s` : `**${player.gamertag}"s**`;
|
||||
|
||||
if (!client.exists(player.shotsLanded)) player = insertPVPstats(player);
|
||||
if (!client.exists(player.weaponStats[weapon])) player = createWeaponStats(player, weapon);
|
||||
if (!isDefined(player.shotsLanded)) player = insertPVPstats(player);
|
||||
if (!isDefined(player.weaponStats[weapon])) player = createWeaponStats(player, weapon);
|
||||
|
||||
let stats = new EmbedBuilder()
|
||||
.setColor(client.config.Colors.Default)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { Snowflake } from "discord.js";
|
||||
import DayZR from "../DayZRBot";
|
||||
import { NitradoCredentialStatus } from "../util/NitradoAPI";
|
||||
import { NitradoCredentialStatus } from "../services/NitradoAPI";
|
||||
import { ArmbandName } from "./armbands";
|
||||
import { MissionName } from "./destinations";
|
||||
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
module.exports = (client, guild) => {
|
||||
require("../util/RegisterSlashCommands").RegisterGuildCommands(client, guild.id);
|
||||
require("../services/RegisterSlashCommands").RegisterGuildCommands(client, guild.id);
|
||||
};
|
||||
@@ -4,7 +4,7 @@ const { GetGuild } = require("../database/guild");
|
||||
module.exports = async (client, member) => {
|
||||
|
||||
let GuildDB = await GetGuild(client, member.guild.id);
|
||||
if (!client.exists(GuildDB.welcomeChannel)) return;
|
||||
if (!isDefined(GuildDB.welcomeChannel)) return;
|
||||
const channel = client.GetChannel(GuildDB.welcomeChannel);
|
||||
|
||||
if (GuildDB.serverName == "") GuildDB.serverName = "our server!"
|
||||
|
||||
@@ -1,11 +1,12 @@
|
||||
const { EmbedBuilder } = require("discord.js");
|
||||
const { nearest } = require("../database/destinations");
|
||||
const { GetWebhook, WebhookSend } = require("./WebhookHandler");
|
||||
const { GetWebhook, WebhookSend } = require("../services/WebhookService");
|
||||
const isDefined = require("../util/Validation.js");
|
||||
|
||||
module.exports = {
|
||||
|
||||
SendConnectionLogs: async (client, guild, data) => {
|
||||
if (!client.exists(guild.connectionLogsChannel)) return;
|
||||
if (!isDefined(guild.connectionLogsChannel)) return;
|
||||
const channel = client.GetChannel(guild.connectionLogsChannel);
|
||||
if (!channel) return;
|
||||
|
||||
@@ -27,13 +28,13 @@ module.exports = {
|
||||
} else connectionLog.addFields({ name: "**Session Time**", value: `**Unknown**`, inline: false });
|
||||
}
|
||||
|
||||
// if (client.exists(channel)) await channel.send({ embeds: [connectionLog] });
|
||||
// if (isDefined(channel)) await channel.send({ embeds: [connectionLog] });
|
||||
await WebhookSend(client, webhook, { embeds: [connectionLog] });
|
||||
},
|
||||
|
||||
DetectCombatLog: async (client, guild, data) => {
|
||||
if (!client.exists(data.lastDamageDate)) return;
|
||||
if (!client.exists(guild.connectionLogsChannel)) return;
|
||||
if (!isDefined(data.lastDamageDate)) return;
|
||||
if (!isDefined(guild.connectionLogsChannel)) return;
|
||||
const channel = client.GetChannel(guild.connectionLogsChannel);
|
||||
if (!channel) return; // Ensure channel exists
|
||||
|
||||
@@ -61,7 +62,7 @@ module.exports = {
|
||||
const webhook = await GetWebhook(client, NAME, guild.connectionLogsChannel);
|
||||
|
||||
let content = { embeds: [combatLog] };
|
||||
if (client.exists(guild.adminRole)) content.content = `<@&${guild.adminRole}>`;
|
||||
if (isDefined(guild.adminRole)) content.content = `<@&${guild.adminRole}>`;
|
||||
WebhookSend(client, webhook, content);
|
||||
// return channel.send({ embeds: [combatLog] });
|
||||
}
|
||||
@@ -2,14 +2,15 @@ const { BanPlayer, UnbanPlayer } = require("./NitradoAPI");
|
||||
const { EmbedBuilder } = require("discord.js");
|
||||
const { nearest } = require("../database/destinations");
|
||||
const { GetGuild } = require("../database/guild");
|
||||
const { GetWebhook, WebhookSend } = require("./WebhookHandler");
|
||||
const { GetWebhook, WebhookSend } = require("../services/WebhookService");
|
||||
const isDefined = require("../util/Validation.js");
|
||||
|
||||
// Private functions (only called locally)
|
||||
|
||||
const ExpireEvent = async (client, guild, e) => {
|
||||
let hasMR = (guild.memberRole != "");
|
||||
const channel = client.GetChannel(e.channel);
|
||||
if (client.exists(e.channel)) channel.send({ embeds: [new EmbedBuilder().setColor(client.config.Colors.Default).setDescription(`${hasMR ? `<@&${guild.memberRole}>\n` : ""}**The ${e.name} Event has ended!**`)] });
|
||||
if (isDefined(e.channel)) channel.send({ embeds: [new EmbedBuilder().setColor(client.config.Colors.Default).setDescription(`${hasMR ? `<@&${guild.memberRole}>\n` : ""}**The ${e.name} Event has ended!**`)] });
|
||||
|
||||
client.dbo.collection("guilds").updateOne({ "server.serverID": guild.serverID }, {
|
||||
$pull: {
|
||||
@@ -21,7 +22,7 @@ const ExpireEvent = async (client, guild, e) => {
|
||||
}
|
||||
|
||||
const HandlePlayerTrackEvent = async (client, guild, e) => {
|
||||
if (!client.exists(e.channel)) return ExpireEvent(client, guild, e); // Expire event since it has invalid channel.
|
||||
if (!isDefined(e.channel)) return ExpireEvent(client, guild, e); // Expire event since it has invalid channel.
|
||||
const channel = client.GetChannel(e.channel);
|
||||
if (!channel) return;
|
||||
|
||||
@@ -40,7 +41,7 @@ const HandlePlayerTrackEvent = async (client, guild, e) => {
|
||||
const webhook = await GetWebhook(client, NAME, e.channel);
|
||||
|
||||
let content = { embeds: [trackEvent] };
|
||||
if (client.exists(guild.adminRole)) content.content = `<@&${e.role}>`;
|
||||
if (isDefined(guild.adminRole)) content.content = `<@&${e.role}>`;
|
||||
WebhookSend(client, webhook, content);
|
||||
|
||||
// if (e.role) channel.send({ content: `<@&${e.role}>`, embeds: [trackEvent] });
|
||||
@@ -3,9 +3,10 @@ const { createUser, addUser } = require("../database/user");
|
||||
const { KillInAlarm } = require("./AlarmsHandler");
|
||||
const { nearest } = require("../database/destinations");
|
||||
const { getDefaultPlayer, UpdatePlayer } = require("../database/player");
|
||||
const { calculateNewCombatRating } = require("./CombatRatingHandler");
|
||||
const { calculateNewCombatRating } = require("../util/CombatRating");
|
||||
const { weapons, weaponClassOf } = require("../database/weapons");
|
||||
const { GetWebhook, WebhookSend } = require("../util/WebhookHandler");
|
||||
const isDefined = require("../util/Validation.js");
|
||||
|
||||
const Templates = {
|
||||
Killed: 1,
|
||||
@@ -71,7 +72,7 @@ module.exports = {
|
||||
const newDt = await client.getDateEST(info.time);
|
||||
|
||||
let victimStat = await client.dbo.collection("players").findOne({ "playerID": info.playerID });
|
||||
if (!client.exists(victimStat)) victimStat = getDefaultPlayer(info.player, info.playerID, NitradoServerID);
|
||||
if (!isDefined(victimStat)) victimStat = getDefaultPlayer(info.player, info.playerID, NitradoServerID);
|
||||
|
||||
victimStat.lastDeathDate = newDt;
|
||||
|
||||
@@ -126,15 +127,15 @@ module.exports = {
|
||||
const newDt = await client.getDateEST(info.time);
|
||||
const unixTime = Math.floor(newDt.getTime() / 1000);
|
||||
|
||||
const showCoords = client.exists(guild.showKillfeedCoords) ? guild.showKillfeedCoords : false; // default to false if no record of configuration.
|
||||
const showWeapon = client.exists(guild.showKillfeedWeapon) ? guild.showKillfeedWeapon : false; // default to false if no record of configuration.
|
||||
const showCoords = isDefined(guild.showKillfeedCoords) ? guild.showKillfeedCoords : false; // default to false if no record of configuration.
|
||||
const showWeapon = isDefined(guild.showKillfeedWeapon) ? guild.showKillfeedWeapon : false; // default to false if no record of configuration.
|
||||
|
||||
const destination = nearest(info.victimPOS, guild.Nitrado.Mission);
|
||||
|
||||
if ([Templates.LandMine, Templates.Explosion, Templates.Vehicle].includes(killedBy))
|
||||
if (killedBy == Templates.LandMine || killedBy == Templates.Explosion || killedBy == Templates.Vehicle) {
|
||||
let victimStat = await client.dbo.collection("players").findOne({ "playerID": info.victimID });
|
||||
if (!client.exists(victimStat)) victimStat = getDefaultPlayer(info.victim, info.victimID, NitradoServerID);
|
||||
if (!isDefined(victimStat)) victimStat = getDefaultPlayer(info.victim, info.victimID, NitradoServerID);
|
||||
victimStat.deaths++;
|
||||
victimStat.deathStreak++;
|
||||
victimStat.worstDeathStreak = victimStat.deathStreak > victimStat.worstDeathStreak ? victimStat.deathStreak : victimStat.worstDeathStreak;
|
||||
@@ -157,18 +158,18 @@ module.exports = {
|
||||
const webhook = await GetWebhook(client, NAME, guild.killfeedChannel);
|
||||
WebhookSend(client, webhook, { embeds: [killEvent] });
|
||||
|
||||
// if (client.exists(channel)) await channel.send({ embeds: [killEvent] });
|
||||
// if (isDefined(channel)) await channel.send({ embeds: [killEvent] });
|
||||
return;
|
||||
}
|
||||
|
||||
KillInAlarm(client, guild.serverID, info); // check if kill happened in a no kill zone
|
||||
|
||||
if (!client.exists(info.victim) || !client.exists(info.victimID) || !client.exists(info.killer) || !client.exists(info.killerID)) return;
|
||||
if (!isDefined(info.victim) || !isDefined(info.victimID) || !isDefined(info.killer) || !isDefined(info.killerID)) return;
|
||||
|
||||
let victimStat = await client.dbo.collection("players").findOne({ "playerID": info.victimID });
|
||||
let killerStat = await client.dbo.collection("players").findOne({ "playerID": info.killerID });
|
||||
if (!client.exists(victimStat)) victimStat = getDefaultPlayer(info.victim, info.victimID, NitradoServerID);
|
||||
if (!client.exists(killerStat)) killerStat = getDefaultPlayer(info.killer, info.killerID, NitradoServerID);
|
||||
if (!isDefined(victimStat)) victimStat = getDefaultPlayer(info.victim, info.victimID, NitradoServerID);
|
||||
if (!isDefined(killerStat)) killerStat = getDefaultPlayer(info.killer, info.killerID, NitradoServerID);
|
||||
|
||||
let weapon = info.weapon.includes("Engraved") ? info.weapon.split("Engraved ")[1] :
|
||||
info.weapon.includes("Sawed-off") ? info.weapon.split("Sawed-off ")[1] :
|
||||
@@ -181,7 +182,7 @@ module.exports = {
|
||||
killerStat.KDR = killerStat.kills / (killerStat.deaths == 0 ? 1 : killerStat.deaths); // prevent division by 0
|
||||
killerStat.longestKill = info.distance > killerStat.longestKill ? info.distance : killerStat.longestKill;
|
||||
killerStat.deathStreak = 0;
|
||||
if (!client.exists(killerStat.weaponStats[weapon].kills)) killerStat.weaponStats[weapon].kills = 0;
|
||||
if (!isDefined(killerStat.weaponStats[weapon].kills)) killerStat.weaponStats[weapon].kills = 0;
|
||||
killerStat.weaponStats[weapon].kills++;
|
||||
|
||||
// Update victim stats
|
||||
@@ -191,21 +192,21 @@ module.exports = {
|
||||
victimStat.KDR = victimStat.kills / (victimStat.deaths == 0 ? 1 : victimStat.deaths); // prevent division by 0
|
||||
victimStat.killStreak = 0;
|
||||
victimStat.lastDeathDate = newDt;
|
||||
if (!client.exists(victimStat.weaponStats[weapon].deaths)) victimStat.weaponStats[weapon].death = 0;
|
||||
if (!isDefined(victimStat.weaponStats[weapon].deaths)) victimStat.weaponStats[weapon].death = 0;
|
||||
victimStat.weaponStats[weapon].deaths++;
|
||||
|
||||
// Create defaults for non-existing ratings
|
||||
if (!client.exists(killerStat.combatRating)) killerStat.combatRating = 800;
|
||||
if (!client.exists(victimStat.combatRating)) victimStat.combatRating = 800;
|
||||
if (!client.exists(killerStat.combatRatingHistory)) killerStat.combatRatingHistory = [800];
|
||||
if (!client.exists(victimStat.combatRatingHistory)) victimStat.combatRatingHistory = [800];
|
||||
if (!client.exists(killerStat.highestCombatRating)) killerStat.highestCombatRating = Math.max(...killerStat.combatRatingHistory);
|
||||
if (!client.exists(victimStat.lowestCombatRating)) victimStat.lowestCombatRating = Math.min(...victimStat.combatRatingHistory);
|
||||
if (!isDefined(killerStat.combatRating)) killerStat.combatRating = 800;
|
||||
if (!isDefined(victimStat.combatRating)) victimStat.combatRating = 800;
|
||||
if (!isDefined(killerStat.combatRatingHistory)) killerStat.combatRatingHistory = [800];
|
||||
if (!isDefined(victimStat.combatRatingHistory)) victimStat.combatRatingHistory = [800];
|
||||
if (!isDefined(killerStat.highestCombatRating)) killerStat.highestCombatRating = Math.max(...killerStat.combatRatingHistory);
|
||||
if (!isDefined(victimStat.lowestCombatRating)) victimStat.lowestCombatRating = Math.min(...victimStat.combatRatingHistory);
|
||||
|
||||
// Calculate new ratings
|
||||
let killerOldRating = killerStat.combatRating;
|
||||
let victimOldRating = victimStat.combatRating;
|
||||
killerStat.combatRating = calculateNewCombatRating(killerStat.combatRating, victimStat.combatRating, client.exists(info.bodyPart) && info.bodyPart.includes("Head") ? 1.25 : 1);
|
||||
killerStat.combatRating = calculateNewCombatRating(killerStat.combatRating, victimStat.combatRating, isDefined(info.bodyPart) && info.bodyPart.includes("Head") ? 1.25 : 1);
|
||||
victimStat.combatRating = calculateNewCombatRating(victimStat.combatRating, killerStat.combatRating, 0);
|
||||
|
||||
// Update combat rating records
|
||||
@@ -230,11 +231,11 @@ module.exports = {
|
||||
|
||||
if (!banking) {
|
||||
banking = await createUser(interaction.member.user.id, guild.serverID, guild.startingBalance, client)
|
||||
if (!client.exists(banking)) return client.sendInternalError(interaction, err);
|
||||
if (!isDefined(banking)) return client.sendInternalError(interaction, err);
|
||||
}
|
||||
banking = banking.user;
|
||||
|
||||
if (!client.exists(banking.guilds[guild.serverID])) {
|
||||
if (!isDefined(banking.guilds[guild.serverID])) {
|
||||
const success = addUser(banking.guilds, guild.serverID, interaction.member.user.id, client, guild.startingBalance);
|
||||
if (!success) return client.sendInternalError(interaction, "Failed to add bank");
|
||||
}
|
||||
@@ -280,10 +281,10 @@ module.exports = {
|
||||
const webhook = await GetWebhook(client, NAME, guild.killfeedChannel);
|
||||
|
||||
WebhookSend(client, webhook, { embeds: [killEvent] });
|
||||
if (client.exists(receivedBounty) && client.exists(channel)) WebhookSend(client, webhook, { content: `<@${killerStat.discordID}>`, embeds: [receivedBounty] });
|
||||
if (isDefined(receivedBounty) && isDefined(channel)) WebhookSend(client, webhook, { content: `<@${killerStat.discordID}>`, embeds: [receivedBounty] });
|
||||
|
||||
// if (client.exists(channel)) await channel.send({ embeds: [killEvent] });
|
||||
// if (client.exists(receivedBounty) && client.exists(channel)) await channel.send({ content: `<@${killerStat.discordID}>`, embeds: [receivedBounty] });
|
||||
// if (isDefined(channel)) await channel.send({ embeds: [killEvent] });
|
||||
// if (isDefined(receivedBounty) && isDefined(channel)) await channel.send({ content: `<@${killerStat.discordID}>`, embeds: [receivedBounty] });
|
||||
|
||||
return;
|
||||
}
|
||||
@@ -5,7 +5,8 @@ const { getDefaultPlayer } = require("../database/player");
|
||||
const { FetchServerSettings } = require("./NitradoAPI");
|
||||
const { UpdatePlayer, insertPVPstats, createWeaponStats } = require("../database/player")
|
||||
const { Missions } = require("../database/destinations");
|
||||
const { GetWebhook, WebhookSend, WebhookMessageEdit } = require("./WebhookHandler");
|
||||
const { GetWebhook, WebhookSend, WebhookMessageEdit } = require("../services/WebhookService");
|
||||
const isDefined = require("../util/Validation.js");
|
||||
|
||||
module.exports = {
|
||||
|
||||
@@ -27,15 +28,15 @@ module.exports = {
|
||||
playerID: data[3],
|
||||
};
|
||||
|
||||
if (!client.exists(info.player) || !client.exists(info.playerID)) return;
|
||||
if (!isDefined(info.player) || !isDefined(info.playerID)) return;
|
||||
|
||||
let playerStat = await client.dbo.collection("players").findOne({ "playerID": info.playerID });
|
||||
if (!client.exists(playerStat)) playerStat = getDefaultPlayer(info.player, info.playerID, NitradoServerID);
|
||||
if (!isDefined(playerStat)) playerStat = getDefaultPlayer(info.player, info.playerID, NitradoServerID);
|
||||
const newDt = await client.getDateEST(info.time);
|
||||
|
||||
playerStat.lastConnectionDate = newDt;
|
||||
playerStat.connected = true;
|
||||
if (!client.exists(playerStat.connections)) playerStat.connections = 0;
|
||||
if (!isDefined(playerStat.connections)) playerStat.connections = 0;
|
||||
playerStat.connections++;
|
||||
|
||||
// Track adjusted sessions this instance has handled (e.g. no bot crashes or restarts).
|
||||
@@ -72,10 +73,10 @@ module.exports = {
|
||||
playerID: data[3],
|
||||
};
|
||||
|
||||
if (!client.exists(info.player) || !client.exists(info.playerID)) return;
|
||||
if (!isDefined(info.player) || !isDefined(info.playerID)) return;
|
||||
|
||||
let playerStat = await client.dbo.collection("players").findOne({ "playerID": info.playerID });
|
||||
if (!client.exists(playerStat)) playerStat = getDefaultPlayer(info.player, info.playerID, NitradoServerID);
|
||||
if (!isDefined(playerStat)) playerStat = getDefaultPlayer(info.player, info.playerID, NitradoServerID);
|
||||
|
||||
let oldUnixTime;
|
||||
let sessionTimeSeconds;
|
||||
@@ -85,7 +86,7 @@ module.exports = {
|
||||
oldUnixTime = Math.round(playerStat.lastConnectionDate.getTime() / 1000); // Seconds
|
||||
sessionTimeSeconds = unixTime - oldUnixTime;
|
||||
} else sessionTimeSeconds = 0;
|
||||
if (!client.exists(playerStat.longestSessionTime)) playerStat.longestSessionTime = 0;
|
||||
if (!isDefined(playerStat.longestSessionTime)) playerStat.longestSessionTime = 0;
|
||||
|
||||
playerStat.totalSessionTime = playerStat.totalSessionTime + sessionTimeSeconds;
|
||||
playerStat.lastSessionTime = sessionTimeSeconds;
|
||||
@@ -126,11 +127,11 @@ module.exports = {
|
||||
pos: data[4].split(", ").map(v => parseFloat(v))
|
||||
};
|
||||
|
||||
if (!client.exists(info.player) || !client.exists(info.playerID)) return;
|
||||
if (!isDefined(info.player) || !isDefined(info.playerID)) return;
|
||||
|
||||
let playerStat = await client.dbo.collection("players").findOne({ "playerID": info.playerID });
|
||||
if (!client.exists(playerStat)) playerStat = getDefaultPlayer(info.player, info.playerID, NitradoServerID);
|
||||
if (!client.exists(playerStat.lastConnectionDate)) playerStat.lastConnectionDate = await client.getDateEST(info.time);
|
||||
if (!isDefined(playerStat)) playerStat = getDefaultPlayer(info.player, info.playerID, NitradoServerID);
|
||||
if (!isDefined(playerStat.lastConnectionDate)) playerStat.lastConnectionDate = await client.getDateEST(info.time);
|
||||
|
||||
playerStat.lastPos = playerStat.pos;
|
||||
playerStat.pos = info.pos;
|
||||
@@ -165,18 +166,18 @@ module.exports = {
|
||||
weapon: data[12],
|
||||
};
|
||||
|
||||
if (!client.exists(info.player) || !client.exists(info.playerID) || !client.exists(info.attacker) || !client.exists(info.attackerID)) return;
|
||||
if (!isDefined(info.player) || !isDefined(info.playerID) || !isDefined(info.attacker) || !isDefined(info.attackerID)) return;
|
||||
|
||||
let playerStat = await client.dbo.collection("players").findOne({ "playerID": info.playerID });
|
||||
let attackerStat = await client.dbo.collection("players").findOne({ "playerID": info.attackerID });
|
||||
if (!client.exists(playerStat)) playerStat = getDefaultPlayer(info.player, info.playerID, NitradoServerID);
|
||||
if (!client.exists(attackerStat)) attackerStat = getDefaultPlayer(info.attacker, info.attackerID, NitradoServerID);
|
||||
if (!isDefined(playerStat)) playerStat = getDefaultPlayer(info.player, info.playerID, NitradoServerID);
|
||||
if (!isDefined(attackerStat)) attackerStat = getDefaultPlayer(info.attacker, info.attackerID, NitradoServerID);
|
||||
|
||||
playerStat.lastDamageDate = await client.getDateEST(info.time);
|
||||
playerStat.lastHitBy = info.attacker;
|
||||
|
||||
if (!client.exists(playerStat.shotsLanded)) playerStat = insertPVPstats(playerStat);
|
||||
if (!client.exists(attackerStat.shotsLanded)) attackerStat = insertPVPstats(attackerStat);
|
||||
if (!isDefined(playerStat.shotsLanded)) playerStat = insertPVPstats(playerStat);
|
||||
if (!isDefined(attackerStat.shotsLanded)) attackerStat = insertPVPstats(attackerStat);
|
||||
|
||||
// Update in depth PVP stats if non Melee weapon
|
||||
if (info.weapon.includes("Engraved")) info.weapon = info.weapon.split("Engraved ")[1];
|
||||
@@ -184,13 +185,13 @@ module.exports = {
|
||||
if (info.weapon in playerStat.weaponStats) {
|
||||
playerStat.timesShot++;
|
||||
playerStat.timesShotPerBodyPart[info.bodyPart]++;
|
||||
if (!client.exists(playerStat.weaponStats[info.weapon])) playerStat = createWeaponStats(playerStat, info.weapon);
|
||||
if (!isDefined(playerStat.weaponStats[info.weapon])) playerStat = createWeaponStats(playerStat, info.weapon);
|
||||
playerStat.weaponStats[info.weapon].timesShot++;
|
||||
playerStat.weaponStats[info.weapon].timesShotPerBodyPart[info.bodyPart]++;
|
||||
|
||||
attackerStat.shotsLanded++;
|
||||
attackerStat.shotsLandedPerBodyPart[info.bodyPart]++;
|
||||
if (!client.exists(attackerStat.weaponStats[info.weapon])) attackerStat = createWeaponStats(attackerStat, info.weapon);
|
||||
if (!isDefined(attackerStat.weaponStats[info.weapon])) attackerStat = createWeaponStats(attackerStat, info.weapon);
|
||||
attackerStat.weaponStats[info.weapon].shotsLanded++;
|
||||
attackerStat.weaponStats[info.weapon].shotsLandedPerBodyPart[info.bodyPart]++;
|
||||
}
|
||||
@@ -205,7 +206,7 @@ module.exports = {
|
||||
HandleActivePlayersList: async (nitrado_cred, client, guild) => {
|
||||
client.activePlayersTick = 0; // reset hour tick
|
||||
|
||||
if (!client.exists(guild.activePlayersChannel)) return;
|
||||
if (!isDefined(guild.activePlayersChannel)) return;
|
||||
const channel = client.GetChannel(guild.activePlayersChannel);
|
||||
if (!channel) return;
|
||||
|
||||
File renamed without changes.
@@ -3,6 +3,7 @@ const concat = require("concat-stream"); // convert to import ?
|
||||
import { Readable } from "stream";
|
||||
import FormData from "form-data";
|
||||
import * as fs from "fs";
|
||||
import isDefined from "../util/Validation";
|
||||
|
||||
const MAX_RETRIES = 5;
|
||||
const RETRY_DELAY_MS = 5000; // 5 seconds
|
||||
@@ -73,7 +74,7 @@ const HandlePlayerBan = async (nitrado_cred: any, client: any, gamertag: any, ba
|
||||
}
|
||||
|
||||
const GetRemoteDir = async (nitrado_cred: any, client: any, dir = "") => {
|
||||
const dirParam = client.exists(dir) ? `?dir=${dir}` : "";
|
||||
const dirParam = isDefined(dir) ? `?dir=${dir}` : "";
|
||||
for (let retries = 0; retries <= MAX_RETRIES; retries++) {
|
||||
try {
|
||||
const res = await fetch(`https://api.nitrado.net/services/${nitrado_cred.ServerID}/gameservers/file_server/list${dirParam}`, {
|
||||
File renamed without changes.
File renamed without changes.
Whitespace-only changes.
File renamed without changes.
@@ -0,0 +1,11 @@
|
||||
/**
|
||||
* isDefined simply ensures a given input is not
|
||||
* null, undefined, an empty string or NaN.
|
||||
*
|
||||
* @param n to validate
|
||||
* @returns if this object exists (boolean)
|
||||
*/
|
||||
export default function isDefined<T>(n: T | null | undefined | "" | number): n is T
|
||||
{
|
||||
return typeof n === "number" ? !isNaN(n) : n !== null && n !== undefined && n !== "";
|
||||
}
|
||||
Reference in new issue
Block a user