Add ability to register commands and events to specific environments #50
10 changed files with 66 additions and 18 deletions
3
.dev.env
3
.dev.env
|
@ -7,10 +7,11 @@
|
|||
# any secret values.
|
||||
|
||||
BOT_TOKEN=
|
||||
BOT_VER=0.1.4 DEV
|
||||
BOT_VER=0.2 DEV
|
||||
BOT_AUTHOR=Vylpes
|
||||
BOT_OWNERID=147392775707426816
|
||||
BOT_CLIENTID=682942374040961060
|
||||
BOT_ENV=4
|
||||
|
||||
ABOUT_FUNDING=
|
||||
ABOUT_REPO=
|
||||
|
|
|
@ -7,10 +7,11 @@
|
|||
# any secret values.
|
||||
|
||||
BOT_TOKEN=
|
||||
BOT_VER=0.1.4
|
||||
BOT_VER=0.2
|
||||
BOT_AUTHOR=Vylpes
|
||||
BOT_OWNERID=147392775707426816
|
||||
BOT_CLIENTID=1093810443589529631
|
||||
BOT_ENV=1
|
||||
|
||||
ABOUT_FUNDING=
|
||||
ABOUT_REPO=
|
||||
|
|
|
@ -7,10 +7,11 @@
|
|||
# any secret values.
|
||||
|
||||
BOT_TOKEN=
|
||||
BOT_VER=0.1.4 BETA
|
||||
BOT_VER=0.2 BETA
|
||||
BOT_AUTHOR=Vylpes
|
||||
BOT_OWNERID=147392775707426816
|
||||
BOT_CLIENTID=1147976642942214235
|
||||
BOT_ENV=2
|
||||
|
||||
ABOUT_FUNDING=
|
||||
ABOUT_REPO=
|
||||
|
|
|
@ -11,6 +11,7 @@ const requiredConfigs: string[] = [
|
|||
"BOT_AUTHOR",
|
||||
"BOT_OWNERID",
|
||||
"BOT_CLIENTID",
|
||||
"BOT_ENV",
|
||||
"DB_HOST",
|
||||
"DB_PORT",
|
||||
"DB_AUTH_USER",
|
||||
|
|
|
@ -12,6 +12,7 @@ import CardDataSource from "../database/dataSources/cardDataSource";
|
|||
import IButtonEventItem from "../contracts/IButtonEventItem";
|
||||
import { ButtonEvent } from "../type/buttonEvent";
|
||||
import AppDataSource from "../database/dataSources/appDataSource";
|
||||
import { Environment } from "../constants/Environment";
|
||||
|
||||
export class CoreClient extends Client {
|
||||
private static _commandItems: ICommandItem[];
|
||||
|
@ -23,6 +24,7 @@ export class CoreClient extends Client {
|
|||
private _cardSetupFunc: CardSetupFunction;
|
||||
|
||||
public static ClaimId: string;
|
||||
public static Environment: Environment;
|
||||
|
||||
public static get commandItems(): ICommandItem[] {
|
||||
return this._commandItems;
|
||||
|
@ -47,6 +49,9 @@ export class CoreClient extends Client {
|
|||
this._events = new Events();
|
||||
this._util = new Util();
|
||||
this._cardSetupFunc = new CardSetupFunction();
|
||||
|
||||
CoreClient.Environment = Number(process.env.BOT_ENV);
|
||||
console.log(`Bot Environment: ${CoreClient.Environment}`);
|
||||
}
|
||||
|
||||
public async start() {
|
||||
|
@ -68,37 +73,50 @@ export class CoreClient extends Client {
|
|||
|
||||
await this._cardSetupFunc.Execute();
|
||||
|
||||
await super.login(process.env.BOT_TOKEN);
|
||||
|
||||
this._util.loadEvents(this, CoreClient._eventItems);
|
||||
this._util.loadSlashCommands(this);
|
||||
|
||||
console.log(`Registered Commands: ${CoreClient._commandItems.flatMap(x => x.Name).join(", ")}`);
|
||||
console.log(`Registered Events: ${CoreClient._eventItems.flatMap(x => x.EventType).join(", ")}`);
|
||||
console.log(`Registered Buttons: ${CoreClient._buttonEvents.flatMap(x => x.ButtonId).join(", ")}`);
|
||||
|
||||
await super.login(process.env.BOT_TOKEN);
|
||||
}
|
||||
|
||||
public static RegisterCommand(name: string, command: Command, serverId?: string) {
|
||||
public static RegisterCommand(name: string, command: Command, environment: Environment = Environment.All, serverId?: string) {
|
||||
const item: ICommandItem = {
|
||||
Name: name,
|
||||
Environment: environment,
|
||||
Command: command,
|
||||
ServerId: serverId,
|
||||
};
|
||||
|
||||
CoreClient._commandItems.push(item);
|
||||
if (environment &= CoreClient.Environment) {
|
||||
CoreClient._commandItems.push(item);
|
||||
}
|
||||
}
|
||||
|
||||
public static RegisterEvent(eventType: EventType, func: Function) {
|
||||
public static RegisterEvent(eventType: EventType, func: Function, environment: Environment = Environment.All) {
|
||||
const item: IEventItem = {
|
||||
EventType: eventType,
|
||||
ExecutionFunction: func,
|
||||
Environment: environment,
|
||||
};
|
||||
|
||||
CoreClient._eventItems.push(item);
|
||||
if (environment &= CoreClient.Environment) {
|
||||
CoreClient._eventItems.push(item);
|
||||
}
|
||||
}
|
||||
|
||||
public static RegisterButtonEvent(buttonId: string, event: ButtonEvent) {
|
||||
public static RegisterButtonEvent(buttonId: string, event: ButtonEvent, environment: Environment = Environment.All) {
|
||||
const item: IButtonEventItem = {
|
||||
ButtonId: buttonId,
|
||||
Event: event,
|
||||
Environment: environment,
|
||||
};
|
||||
|
||||
CoreClient._buttonEvents.push(item);
|
||||
if (environment &= CoreClient.Environment) {
|
||||
CoreClient._buttonEvents.push(item);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,9 +10,15 @@ export class Util {
|
|||
const globalCommands = registeredCommands.filter(x => !x.ServerId);
|
||||
const guildCommands = registeredCommands.filter(x => x.ServerId);
|
||||
|
||||
const globalCommandData: SlashCommandBuilder[] = globalCommands
|
||||
.filter(x => x.Command.CommandBuilder)
|
||||
.flatMap(x => x.Command.CommandBuilder);
|
||||
const globalCommandData: SlashCommandBuilder[] = [];
|
||||
|
||||
for (let command of globalCommands) {
|
||||
if (!command.Command.CommandBuilder) continue;
|
||||
|
||||
if (command.Environment &= CoreClient.Environment) {
|
||||
Vylpes marked this conversation as resolved
Outdated
|
||||
globalCommandData.push(command.Command.CommandBuilder);
|
||||
}
|
||||
}
|
||||
|
||||
const guildIds: string[] = [];
|
||||
|
||||
|
@ -32,12 +38,18 @@ export class Util {
|
|||
);
|
||||
|
||||
for (let guild of guildIds) {
|
||||
const guildCommandData = guildCommands.filter(x => x.ServerId == guild)
|
||||
.filter(x => x.Command.CommandBuilder)
|
||||
.flatMap(x => x.Command.CommandBuilder);
|
||||
const guildCommandData: SlashCommandBuilder[] = [];
|
||||
|
||||
for (let command of guildCommands.filter(x => x.ServerId == guild)) {
|
||||
if (!command.Command.CommandBuilder) continue;
|
||||
|
||||
if (command.Environment &= CoreClient.Environment) {
|
||||
Vylpes marked this conversation as resolved
Outdated
VylpesTester
commented
Should we be using the same Should we be using the same `&=` as above? To keep it consistent.
|
||||
guildCommandData.push(command.Command.CommandBuilder);
|
||||
}
|
||||
}
|
||||
|
||||
if (!client.guilds.cache.has(guild)) continue;
|
||||
|
||||
|
||||
rest.put(
|
||||
Routes.applicationGuildCommands(process.env.BOT_CLIENTID!, guild),
|
||||
{
|
||||
|
|
8
src/constants/Environment.ts
Normal file
8
src/constants/Environment.ts
Normal file
|
@ -0,0 +1,8 @@
|
|||
export enum Environment {
|
||||
None = 0,
|
||||
Production = 1 << 0,
|
||||
Stage = 1 << 1,
|
||||
Local = 1 << 2,
|
||||
|
||||
All = Production | Stage | Local,
|
||||
}
|
|
@ -1,6 +1,8 @@
|
|||
import { Environment } from "../constants/Environment";
|
||||
import { ButtonEvent } from "../type/buttonEvent";
|
||||
|
||||
export default interface IButtonEventItem {
|
||||
ButtonId: string,
|
||||
Event: ButtonEvent,
|
||||
Environment: Environment,
|
||||
}
|
|
@ -1,7 +1,9 @@
|
|||
import { Environment } from "../constants/Environment";
|
||||
import { Command } from "../type/command";
|
||||
|
||||
export default interface ICommandItem {
|
||||
Name: string,
|
||||
Command: Command,
|
||||
Environment: Environment,
|
||||
ServerId?: string,
|
||||
}
|
|
@ -1,7 +1,9 @@
|
|||
|
||||
import { Environment } from "../constants/Environment";
|
||||
import { EventType } from "../constants/EventType";
|
||||
|
||||
export default interface IEventItem {
|
||||
EventType: EventType,
|
||||
ExecutionFunction: Function,
|
||||
Environment: Environment,
|
||||
}
|
Loading…
Reference in a new issue
Should we be using the same
&=
as above? To keep it consistent.