210 lines
6.8 KiB
TypeScript
210 lines
6.8 KiB
TypeScript
import { Snowflake } from "discord.js";
|
|
import DayZR from "../DayZRBot";
|
|
import { NitradoCredentialStatus } from "../util/NitradoAPI";
|
|
import { ArmbandName } from "./armbands";
|
|
import { MissionName } from "./destinations";
|
|
|
|
export const enum IntegerBoolean
|
|
{
|
|
FALSE,
|
|
TRUE
|
|
};
|
|
|
|
export interface UAV
|
|
{
|
|
// TODO: fill this out
|
|
};
|
|
|
|
export interface Alarm
|
|
{
|
|
// TODO: fill this out
|
|
};
|
|
|
|
export interface NitradoConfig
|
|
{
|
|
ServerID: string;
|
|
UserID: string;
|
|
Auth: string;
|
|
Status: NitradoCredentialStatus;
|
|
Mission: MissionName,
|
|
};
|
|
|
|
export interface FactionArmband
|
|
{
|
|
faction: Snowflake; // faction role ID
|
|
armband: ArmbandName;
|
|
}
|
|
|
|
interface GuildConfigAttributes
|
|
{
|
|
serverID: Snowflake; // Guild ID
|
|
lastLog: string | null;
|
|
serverName: string;
|
|
autoRestart: IntegerBoolean;
|
|
showKillfeedCoords: IntegerBoolean;
|
|
showKillfeedWeapon: IntegerBoolean;
|
|
purchaseUAV: IntegerBoolean;
|
|
purchaseEMP: IntegerBoolean;
|
|
allowedChannels: Array<Snowflake>; // Array of channel IDs
|
|
customChannelStatus?: boolean; // optional - generated outside of DB
|
|
hasBotAdmin?: boolean; // optional - generated outside of DB
|
|
|
|
killfeedChannel: Snowflake; // Channel ID
|
|
connectionLogsChannel: Snowflake; // Channel ID
|
|
activePlayersChannel: Snowflake; // Channel ID
|
|
welcomeChannel: Snowflake; // Channel ID
|
|
|
|
factionArmbands: Record<Snowflake, FactionArmband>;
|
|
usedArmbands: Array<string>;
|
|
excludedRoles: Array<string>;
|
|
hasExcludedRoles?: boolean; // optional - generated outside of DB
|
|
botAdminRoles: Array<Snowflake>; // Array of role IDs
|
|
|
|
alarms: Array<Alarm>;
|
|
events: Array<any>;
|
|
uavs: Array<UAV>;
|
|
|
|
incomeRoles: Array<Snowflake>; // Array of role IDs
|
|
incomeLimiter: number;
|
|
|
|
startingBalance: number;
|
|
uavPrice: number;
|
|
empPrice: number;
|
|
|
|
linkedGamertagRole: Snowflake; // Role ID
|
|
memberRole: Snowflake; // Role ID
|
|
adminRole: Snowflake; // Role ID
|
|
|
|
combatLogTimer: number;
|
|
}
|
|
|
|
interface GuildConfigDB
|
|
{
|
|
server: GuildConfigAttributes;
|
|
Nitrado: NitradoConfig | null;
|
|
};
|
|
|
|
// TODO: have better names, i.e. combatLogTimer in seconds or minutes? inclomeLimiter?
|
|
// TODO: figure out interface of
|
|
|
|
// Also this is so stupid, in the DB all server attributes are under server,
|
|
// while in the code we almost always have the attributes directly in top
|
|
// level of object, i.e. guild.startingBalance instead of guild.server.startingBalance
|
|
export interface GuildConfig extends GuildConfigAttributes
|
|
{
|
|
Nitrado: NitradoConfig | null;
|
|
}
|
|
|
|
export async function GetGuild(client: DayZR, GuildId: Snowflake): Promise<GuildConfig>
|
|
{
|
|
let guild: GuildConfigDB | null = null;
|
|
if (client.databaseConnected)
|
|
{
|
|
guild = await client.dbo.collection("guilds").findOne(
|
|
{
|
|
"server.serverID": GuildId
|
|
}
|
|
).then((guild: GuildConfigDB) => guild);
|
|
}
|
|
|
|
// If guild not found, generate guild default
|
|
if (!guild)
|
|
{
|
|
guild = {
|
|
server: getDefaultSettings(GuildId),
|
|
Nitrado: null,
|
|
};
|
|
|
|
if (client.databaseConnected)
|
|
{
|
|
client.dbo.collection("guilds").insertOne(guild, (err: string) => {
|
|
if (err) client.error(`GetGuild Insert Error: ${err}`);
|
|
});
|
|
}
|
|
}
|
|
|
|
return {
|
|
serverID: GuildId,
|
|
Nitrado: guild.Nitrado,
|
|
lastLog: guild.server.lastLog,
|
|
serverName: guild.server.serverName,
|
|
autoRestart: guild.server.autoRestart,
|
|
showKillfeedCoords: guild.server.showKillfeedCoords,
|
|
showKillfeedWeapon: guild.server.showKillfeedWeapon,
|
|
purchaseUAV: guild.server.purchaseUAV,
|
|
purchaseEMP: guild.server.purchaseEMP,
|
|
allowedChannels: guild.server.allowedChannels,
|
|
customChannelStatus: guild.server.allowedChannels.length > 0,
|
|
hasBotAdmin: guild.server.botAdminRoles.length > 0,
|
|
|
|
killfeedChannel: guild.server.killfeedChannel,
|
|
connectionLogsChannel: guild.server.connectionLogsChannel,
|
|
activePlayersChannel: guild.server.activePlayersChannel,
|
|
welcomeChannel: guild.server.welcomeChannel,
|
|
|
|
factionArmbands: guild.server.factionArmbands,
|
|
usedArmbands: guild.server.usedArmbands,
|
|
excludedRoles: guild.server.excludedRoles,
|
|
hasExcludedRoles: guild.server.excludedRoles.length > 0,
|
|
botAdminRoles: guild.server.botAdminRoles,
|
|
|
|
alarms: guild.server.alarms,
|
|
events: guild.server.events,
|
|
uavs: guild.server.uavs,
|
|
|
|
incomeRoles: guild.server.incomeRoles,
|
|
incomeLimiter: guild.server.incomeLimiter,
|
|
|
|
startingBalance: guild.server.startingBalance,
|
|
uavPrice: guild.server.uavPrice,
|
|
empPrice: guild.server.empPrice,
|
|
|
|
linkedGamertagRole: guild.server.linkedGamertagRole,
|
|
memberRole: guild.server.memberRole,
|
|
adminRole: guild.server.adminRole,
|
|
|
|
combatLogTimer: guild.server.combatLogTimer,
|
|
};
|
|
}
|
|
|
|
export function getDefaultSettings(GuildId: Snowflake): GuildConfigAttributes {
|
|
return {
|
|
serverID: GuildId,
|
|
lastLog: null,
|
|
serverName: "our server!",
|
|
autoRestart: IntegerBoolean.FALSE,
|
|
showKillfeedCoords: IntegerBoolean.FALSE,
|
|
showKillfeedWeapon: IntegerBoolean.FALSE,
|
|
purchaseUAV: IntegerBoolean.TRUE, // Allow/Disallow purchase of UAVs
|
|
purchaseEMP: IntegerBoolean.TRUE, // Allow/Disallow purchase of EMPs
|
|
allowedChannels: [],
|
|
|
|
killfeedChannel: "",
|
|
connectionLogsChannel: "",
|
|
activePlayersChannel: "",
|
|
welcomeChannel: "",
|
|
|
|
factionArmbands: {},
|
|
usedArmbands: [],
|
|
excludedRoles: [],
|
|
botAdminRoles: [],
|
|
|
|
alarms: [],
|
|
events: [],
|
|
uavs: [],
|
|
|
|
incomeRoles: [],
|
|
incomeLimiter: 168, // # of hours in 7 days
|
|
|
|
startingBalance: 500,
|
|
uavPrice: 50000,
|
|
empPrice: 500000,
|
|
|
|
linkedGamertagRole: "",
|
|
memberRole: "",
|
|
adminRole: "",
|
|
|
|
combatLogTimer: 5, // minutes
|
|
};
|
|
};
|