Files
BattleBot/deploy-commands.js
VinceC a8e836fd5b Add help system, deployment docs, and improve setup
Introduces a new interactive help command with button navigation, adds a detailed DEPLOYMENT.md guide, and improves server setup validation and error handling. Updates command registration to include all 9 games, adds version reporting, enhances Docker deployment with a multi-platform script, and removes local .env files from the repo. Also refactors bot startup for better diagnostics and graceful shutdown.
2025-07-13 04:00:39 -05:00

182 lines
6.5 KiB
JavaScript

const { REST, Routes, SlashCommandBuilder, PermissionFlagsBits } = require("discord.js");
require("dotenv").config();
const commands = [
new SlashCommandBuilder()
.setName("help")
.setDescription("Get help with BattleBot commands and features")
.addStringOption((option) =>
option
.setName("category")
.setDescription("Select a help category")
.setRequired(false)
.addChoices(
{ name: "Big Ballers VR", value: "Big Ballers VR" },
{ name: "Blacktop Hoops", value: "Blacktop Hoops" },
{ name: "Breachers", value: "Breachers" },
{ name: "Echo Arena", value: "Echo Arena" },
{ name: "Echo Combat", value: "Echo Combat" },
{ name: "Gun Raiders", value: "Gun Raiders" },
{ name: "Nock", value: "Nock" },
{ name: "Orion Drift", value: "Orion Drift" },
{ name: "VAIL", value: "VAIL" }
)
),
new SlashCommandBuilder()
.setName("version")
.setDescription("Show bot version and system information"),
new SlashCommandBuilder()
.setName("finduser")
.setDescription("Find a user by username")
.addStringOption((option) =>
option
.setName("game")
.setDescription("Select the game")
.setRequired(true)
.addChoices(
{ name: "Big Ballers VR", value: "Big Ballers VR" },
{ name: "Blacktop Hoops", value: "Blacktop Hoops" },
{ name: "Breachers", value: "Breachers" },
{ name: "Echo Arena", value: "Echo Arena" },
{ name: "Echo Combat", value: "Echo Combat" },
{ name: "Gun Raiders", value: "Gun Raiders" },
{ name: "Nock", value: "Nock" },
{ name: "Orion Drift", value: "Orion Drift" },
{ name: "VAIL", value: "VAIL" }
)
)
.addStringOption((option) =>
option
.setName("username")
.setDescription("The username to search for")
.setRequired(true)
),
new SlashCommandBuilder()
.setName("matchhistory")
.setDescription("View match history")
.addStringOption((option) =>
option
.setName("username")
.setDescription("The username to search for")
.setRequired(true)
)
.addStringOption((option) =>
option
.setName("game")
.setDescription("Filter by game (optional)")
.setRequired(false)
.addChoices(
{ name: "Big Ballers VR", value: "Big Ballers VR" },
{ name: "Blacktop Hoops", value: "Blacktop Hoops" },
{ name: "Breachers", value: "Breachers" },
{ name: "Echo Arena", value: "Echo Arena" },
{ name: "Echo Combat", value: "Echo Combat" },
{ name: "Gun Raiders", value: "Gun Raiders" },
{ name: "Nock", value: "Nock" },
{ name: "Orion Drift", value: "Orion Drift" },
{ name: "VAIL", value: "VAIL" }
)
),
new SlashCommandBuilder()
.setName("subscribe")
.setDescription("Subscribe to game notifications")
.setDefaultMemberPermissions(PermissionFlagsBits.Administrator)
.addStringOption((option) =>
option
.setName("game")
.setDescription("Game to subscribe to")
.setRequired(true)
.addChoices(
{ name: "Big Ballers VR", value: "Big Ballers VR" },
{ name: "Blacktop Hoops", value: "Blacktop Hoops" },
{ name: "Breachers", value: "Breachers" },
{ name: "Echo Arena", value: "Echo Arena" },
{ name: "Echo Combat", value: "Echo Combat" },
{ name: "Gun Raiders", value: "Gun Raiders" },
{ name: "Nock", value: "Nock" },
{ name: "Orion Drift", value: "Orion Drift" },
{ name: "VAIL", value: "VAIL" }
)
)
.addChannelOption((option) =>
option
.setName("channel")
.setDescription("Channel for notifications")
.setRequired(true)
),
new SlashCommandBuilder()
.setName("unsubscribe")
.setDescription("Unsubscribe from game notifications")
.setDefaultMemberPermissions(PermissionFlagsBits.Administrator)
.addStringOption((option) =>
option
.setName("game")
.setDescription("Game to unsubscribe from")
.setRequired(true)
.addChoices(
{ name: "Big Ballers VR", value: "Big Ballers VR" },
{ name: "Blacktop Hoops", value: "Blacktop Hoops" },
{ name: "Breachers", value: "Breachers" },
{ name: "Echo Arena", value: "Echo Arena" },
{ name: "Echo Combat", value: "Echo Combat" },
{ name: "Gun Raiders", value: "Gun Raiders" },
{ name: "Nock", value: "Nock" },
{ name: "Orion Drift", value: "Orion Drift" },
{ name: "VAIL", value: "VAIL" }
)
),
new SlashCommandBuilder()
.setName("register_server")
.setDescription("Register this Discord server with BattleBot")
.setDefaultMemberPermissions(PermissionFlagsBits.Administrator),
new SlashCommandBuilder()
.setName("list_subscriptions")
.setDescription("List all game subscriptions for this server")
.setDefaultMemberPermissions(PermissionFlagsBits.Administrator),
new SlashCommandBuilder()
.setName("findteam")
.setDescription("Find a team by name")
.addStringOption((option) =>
option
.setName("game")
.setDescription("Select the game")
.setRequired(true)
.addChoices(
{ name: "Big Ballers VR", value: "Big Ballers VR" },
{ name: "Blacktop Hoops", value: "Blacktop Hoops" },
{ name: "Breachers", value: "Breachers" },
{ name: "Echo Arena", value: "Echo Arena" },
{ name: "Echo Combat", value: "Echo Combat" },
{ name: "Gun Raiders", value: "Gun Raiders" },
{ name: "Nock", value: "Nock" },
{ name: "Orion Drift", value: "Orion Drift" },
{ name: "VAIL", value: "VAIL" }
)
)
.addStringOption((option) =>
option
.setName("teamname")
.setDescription("The team name to search for")
.setRequired(true)
),
];
const rest = new REST({ version: "10" }).setToken(process.env.DISCORD_TOKEN);
(async () => {
try {
console.log("Started refreshing application (/) commands.");
console.log(
"Commands to be deployed:",
commands.map((cmd) => cmd.name)
);
await rest.put(Routes.applicationCommands(process.env.CLIENT_ID), {
body: commands.map((command) => command.toJSON()),
});
console.log("Successfully reloaded application (/) commands.");
} catch (error) {
console.error(error);
}
})();