Files
BattleBot/deploy-commands.js
VinceC 7e4354e37b Jan 2025 Update
Team Search Improvements:
Added required game selection before team name input
Added VR Battles image as the main embed image
Removed buttons for cleaner display
Added sorting by game mode (Squads > Duo > Solo)
Made team display more compact with icons and shortened stats
Added SQL injection protection and input sanitization
User Search Improvements:
Made game selection required before username input
Added VR Battles image as the main embed image
Added better user status messages:
played
Security Enhancements:
Added input validation and sanitization at multiple levels
Limited input lengths to prevent buffer overflow
Added proper error handling and logging
Implemented safe API calls with timeouts and validation
Added protection against SQL injection
Code Organization:
Improved error messages for better user feedback
Added comprehensive logging for monitoring
Made responses visible to everyone in the channel
Cleaned up code structure and removed redundant parts
Development Environment:
Set up proper development configuration
Added environment variable management
Improved command deployment process
2025-01-04 08:59:51 -06:00

144 lines
4.9 KiB
JavaScript

const { REST, Routes, SlashCommandBuilder, PermissionFlagsBits } = require("discord.js");
require("dotenv").config();
const commands = [
new SlashCommandBuilder()
.setName("ping")
.setDescription("Replies with Pong!"),
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: "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").setRequired(false)
),
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: "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: "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: "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);
}
})();