Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4cd3ecf81f | ||
|
|
2f0ddcec3f | ||
|
|
7cdfa68e0e | ||
|
|
f8939a964d | ||
|
|
7830e5dda5 | ||
|
|
6aa2f22294 | ||
|
|
50b14e3d44 | ||
|
|
e09c2192c2 | ||
|
|
b725d2cc62 | ||
|
|
abf3f617a4 | ||
|
|
1eda7e66fe | ||
|
|
b5000531c4 | ||
|
|
d4f95e752b | ||
|
|
e31c611f70 | ||
|
|
085481bee6 | ||
|
|
cf610fbe49 | ||
|
|
b681eb3cd2 | ||
|
|
f8ffdf0e81 | ||
|
|
ba38bce1da | ||
|
|
3a39b05fe4 | ||
|
|
27d2982b28 | ||
|
|
33e4d97be5 | ||
|
|
654064d7c5 | ||
|
|
aeb0da9e0d | ||
|
|
cb1a2fe067 | ||
|
|
85667ddfad | ||
|
|
7ad5016966 | ||
|
|
45c3315fd0 | ||
|
|
c5f550dd00 | ||
|
|
155b768f73 |
No files matched your search
@@ -5,13 +5,12 @@ name: Node.js CI
|
|||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches: [ master ]
|
branches: [master]
|
||||||
pull_request:
|
pull_request:
|
||||||
branches: [ master ]
|
branches: [master]
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
|
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
strategy:
|
strategy:
|
||||||
@@ -20,13 +19,13 @@ jobs:
|
|||||||
# See supported Node.js release schedule at https://nodejs.org/en/about/releases/
|
# See supported Node.js release schedule at https://nodejs.org/en/about/releases/
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
- name: Use Node.js ${{ matrix.node-version }}
|
- name: Use Node.js ${{ matrix.node-version }}
|
||||||
uses: actions/setup-node@v1
|
uses: actions/setup-node@v1
|
||||||
with:
|
with:
|
||||||
node-version: ${{ matrix.node-version }}
|
node-version: ${{ matrix.node-version }}
|
||||||
- run: npm ci
|
- run: npm ci
|
||||||
- run: npm install discord.js --save
|
- run: npm install discord.js --save
|
||||||
- run: npm install js-yaml
|
- run: npm install js-yaml
|
||||||
- run: npm run build --if-present
|
- run: npm run build --if-present
|
||||||
- run: node index.js
|
- run: node index.js
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
node_modules/
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
// SupportBot | Emerald Services
|
||||||
|
// Example (default) Addon
|
||||||
|
|
||||||
|
const fs = require("fs");
|
||||||
|
|
||||||
|
const Discord = require("discord.js");
|
||||||
|
const yaml = require("js-yaml");
|
||||||
|
const supportbot = yaml.load(fs.readFileSync("./Data/supportbot.yml", "utf8"));
|
||||||
|
const cmdconfig = yaml.load(fs.readFileSync("./Data/commands.yml", "utf8"));
|
||||||
|
|
||||||
|
// Your Addon Config file! Saved in /Addons/Settings/YourAddonConfig.yml
|
||||||
|
// const exampleaddon = yaml.load(fs.readFileSync('./Addons/Settings/YourAddonConfig.yml', 'utf8'));
|
||||||
|
|
||||||
|
const Command = require("../Structures/Command.js");
|
||||||
|
|
||||||
|
module.exports = new Command({
|
||||||
|
name: "hello",
|
||||||
|
description: "hello",
|
||||||
|
slashCommandOptions: [],
|
||||||
|
permission: "SEND_MESSAGES",
|
||||||
|
|
||||||
|
async run(interaction) {
|
||||||
|
const Embed = new Discord.MessageEmbed()
|
||||||
|
.setDescription("Hello World!")
|
||||||
|
.setColor(supportbot.InfoColour);
|
||||||
|
|
||||||
|
interaction.reply({
|
||||||
|
embeds: [Embed],
|
||||||
|
});
|
||||||
|
},
|
||||||
|
});
|
||||||
@@ -0,0 +1,95 @@
|
|||||||
|
// SupportBot | Emerald Services
|
||||||
|
// Ticket Add Command
|
||||||
|
|
||||||
|
const fs = require("fs");
|
||||||
|
|
||||||
|
const Discord = require("discord.js");
|
||||||
|
const yaml = require("js-yaml");
|
||||||
|
const supportbot = yaml.load(
|
||||||
|
fs.readFileSync("./Configs/supportbot.yml", "utf8")
|
||||||
|
);
|
||||||
|
const cmdconfig = yaml.load(fs.readFileSync("./Configs/commands.yml", "utf8"));
|
||||||
|
|
||||||
|
const Command = require("../Structures/Command.js");
|
||||||
|
|
||||||
|
async function asyncForEach(array, callback) {
|
||||||
|
for (let index = 0; index < array.length; index++) {
|
||||||
|
await callback(array[index], index, array);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = new Command({
|
||||||
|
name: cmdconfig.TicketAdd,
|
||||||
|
description: cmdconfig.TicketAddDesc,
|
||||||
|
slashCommandOptions: [
|
||||||
|
{
|
||||||
|
name: "user",
|
||||||
|
description: "User to add",
|
||||||
|
type: "USER",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
permission: "SEND_MESSAGES",
|
||||||
|
|
||||||
|
async run(interaction) {
|
||||||
|
let SupportStaff =
|
||||||
|
interaction.guild.roles.cache.find(
|
||||||
|
(SupportTeam) => SupportTeam.name === supportbot.Staff
|
||||||
|
) ||
|
||||||
|
interaction.guild.roles.cache.find(
|
||||||
|
(SupportTeam) => SupportTeam.id === supportbot.Staff
|
||||||
|
);
|
||||||
|
let Admins =
|
||||||
|
interaction.guild.roles.cache.find(
|
||||||
|
(AdminUser) => AdminUser.name === supportbot.Admin
|
||||||
|
) ||
|
||||||
|
interaction.guild.roles.cache.find(
|
||||||
|
(AdminUser) => AdminUser.id === supportbot.Admin
|
||||||
|
);
|
||||||
|
|
||||||
|
const NoPerms = new Discord.MessageEmbed()
|
||||||
|
.setTitle("Invalid Permissions!")
|
||||||
|
.setDescription(
|
||||||
|
`${supportbot.IncorrectPerms}\n\nRole Required: \`${supportbot.Staff}\` or \`${supportbot.Admin}\``
|
||||||
|
)
|
||||||
|
.setColor(supportbot.WarningColour);
|
||||||
|
|
||||||
|
if (
|
||||||
|
interaction.member.roles.cache.has(SupportStaff.id) ||
|
||||||
|
interaction.member.roles.cache.has(Admins.id)
|
||||||
|
) {
|
||||||
|
if (!interaction.channel.name.startsWith(`${supportbot.TicketPrefix}`)) {
|
||||||
|
const Exists = new Discord.MessageEmbed()
|
||||||
|
.setTitle("No Ticket Found!")
|
||||||
|
.setDescription(`${supportbot.NoValidTicket}`)
|
||||||
|
.setColor(supportbot.WarningColour);
|
||||||
|
return interaction.reply({ embeds: [Exists] });
|
||||||
|
}
|
||||||
|
|
||||||
|
let uMember = interaction.options.getUser("user");
|
||||||
|
const UserNotExist = new Discord.MessageEmbed()
|
||||||
|
.setTitle("User Not Found!")
|
||||||
|
.setDescription(
|
||||||
|
`${supportbot.UserNotFound}\n\nTry Again:\`/${cmdconfig.TicketAdd} <user#0000>\``
|
||||||
|
)
|
||||||
|
.setColor(supportbot.ErrorColour);
|
||||||
|
|
||||||
|
if (!uMember) return interaction.reply({ embeds: [UserNotExist] });
|
||||||
|
|
||||||
|
interaction.channel.permissionOverwrites.edit(uMember, {
|
||||||
|
VIEW_CHANNEL: true,
|
||||||
|
READ_MESSAGE_HISTORY: true,
|
||||||
|
SEND_MESSAGES: true,
|
||||||
|
});
|
||||||
|
|
||||||
|
const Complete = new Discord.MessageEmbed()
|
||||||
|
.setTitle("User Added!")
|
||||||
|
.setDescription(supportbot.AddedUser.replace(/%user%/g, uMember.id))
|
||||||
|
.setTimestamp()
|
||||||
|
.setColor(supportbot.EmbedColour);
|
||||||
|
interaction.reply({ embeds: [Complete] });
|
||||||
|
} else {
|
||||||
|
return interaction.reply({ embeds: [NoPerms] });
|
||||||
|
}
|
||||||
|
},
|
||||||
|
});
|
||||||
@@ -0,0 +1,231 @@
|
|||||||
|
// SupportBot | Emerald Services
|
||||||
|
// Close Ticket Command
|
||||||
|
|
||||||
|
const fs = require("fs");
|
||||||
|
|
||||||
|
const Discord = require("discord.js");
|
||||||
|
const yaml = require("js-yaml");
|
||||||
|
const supportbot = yaml.load(
|
||||||
|
fs.readFileSync("./Configs/supportbot.yml", "utf8")
|
||||||
|
);
|
||||||
|
const cmdconfig = yaml.load(fs.readFileSync("./Configs/commands.yml", "utf8"));
|
||||||
|
|
||||||
|
const Command = require("../Structures/Command.js");
|
||||||
|
const TicketNumberID = require("../Structures/TicketID.js");
|
||||||
|
|
||||||
|
async function asyncForEach(array, callback) {
|
||||||
|
for (let index = 0; index < array.length; index++) {
|
||||||
|
await callback(array[index], index, array);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = new Command({
|
||||||
|
name: cmdconfig.CloseTicket,
|
||||||
|
description: cmdconfig.CloseTicketDesc,
|
||||||
|
slashCommandOptions: [
|
||||||
|
{
|
||||||
|
name: "reason",
|
||||||
|
description: "Ticket Close Reason",
|
||||||
|
type: "STRING",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
permission: "SEND_MESSAGES",
|
||||||
|
|
||||||
|
async run(interaction) {
|
||||||
|
if (!interaction.channel.name.startsWith(`${supportbot.TicketPrefix}`)) {
|
||||||
|
const Exists = new Discord.MessageEmbed()
|
||||||
|
.setTitle("No Ticket Found!")
|
||||||
|
.setDescription(`${supportbot.NoValidTicket}`)
|
||||||
|
.setColor(supportbot.WarningColour);
|
||||||
|
return interaction.reply({ embed: Exists });
|
||||||
|
}
|
||||||
|
|
||||||
|
if (supportbot.CloseConfirmation) {
|
||||||
|
const CloseTicketRequest = new Discord.MessageEmbed()
|
||||||
|
.setTitle(`**${supportbot.ClosingTicket}**`)
|
||||||
|
.setDescription(
|
||||||
|
`Please confirm by repeating the following word.. \`${supportbot.ClosingConfirmation_Word}\` `
|
||||||
|
)
|
||||||
|
.setColor(supportbot.EmbedColour);
|
||||||
|
|
||||||
|
interaction
|
||||||
|
.reply(CloseTicketRequest)
|
||||||
|
.then((m) => {
|
||||||
|
interaction.channel
|
||||||
|
.awaitMessages(
|
||||||
|
(response) =>
|
||||||
|
response.content.toLowerCase() ===
|
||||||
|
supportbot.ClosingConfirmation_Word,
|
||||||
|
{
|
||||||
|
max: 1,
|
||||||
|
time: 20000,
|
||||||
|
errors: ["time"],
|
||||||
|
}
|
||||||
|
)
|
||||||
|
.then((collected) => {
|
||||||
|
let logChannel =
|
||||||
|
interaction.guild.channels.cache.find(
|
||||||
|
(channel) => channel.name === supportbot.TranscriptLog
|
||||||
|
) ||
|
||||||
|
interaction.guild.channels.cache.find(
|
||||||
|
(channel) => channel.id === supportbot.TranscriptLog
|
||||||
|
);
|
||||||
|
let user = interaction.user;
|
||||||
|
let reason =
|
||||||
|
interaction.options.getString("reason") ||
|
||||||
|
"No Reason Provided.";
|
||||||
|
|
||||||
|
let name = interaction.channel.name;
|
||||||
|
let ticketChannel = interaction.channel;
|
||||||
|
|
||||||
|
interaction
|
||||||
|
.reply(`**${supportbot.ClosingTicket}**`)
|
||||||
|
|
||||||
|
.then(() => {
|
||||||
|
const logEmbed = new Discord.MessageEmbed()
|
||||||
|
.setTitle(supportbot.TranscriptTitle)
|
||||||
|
.setColor(supportbot.EmbedColour)
|
||||||
|
.setFooter(supportbot.EmbedFooter)
|
||||||
|
.addField("Closed By", interaction.user.tag)
|
||||||
|
.addField("Reason", reason);
|
||||||
|
|
||||||
|
interaction.channel.interactions
|
||||||
|
.fetch({ limit: 100 })
|
||||||
|
.then((msgs) => {
|
||||||
|
let html = "";
|
||||||
|
|
||||||
|
msgs = msgs.sort(
|
||||||
|
(a, b) => a.createdTimestamp - b.createdTimestamp
|
||||||
|
);
|
||||||
|
html += `<style>* {background-color: #2c2f33;color: #fff;font-family: Arial, Helvetica, sans-serif;}</style>`;
|
||||||
|
html += `<strong>Server Name:</strong> ${interaction.guild.name}<br>`;
|
||||||
|
html += `<strong>Ticket:</strong> ${ticketChannel.name}<br>`;
|
||||||
|
html += `<strong>Message:</strong> ${msgs.size} Messages<br><br><br>`;
|
||||||
|
|
||||||
|
msgs.forEach((msg) => {
|
||||||
|
if (msg.content) {
|
||||||
|
html += `<strong>User:</strong> ${msg.author.tag}<br>`;
|
||||||
|
html += `<strong>Message:</strong> ${msg.content}<br>`;
|
||||||
|
html += `-----<br><br>`;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
logChannel.send({ embeds: [logEmbed] }).catch((err) => {
|
||||||
|
interaction.reply(err);
|
||||||
|
});
|
||||||
|
|
||||||
|
let file = new Discord.MessageAttachment(
|
||||||
|
Buffer.from(html),
|
||||||
|
`${name}.html`
|
||||||
|
);
|
||||||
|
logChannel
|
||||||
|
.send({ embeds: [logEmbed], files: [file] })
|
||||||
|
.catch((err) => {
|
||||||
|
interaction.reply(err);
|
||||||
|
});
|
||||||
|
|
||||||
|
interaction.channel.delete().catch((error) => {
|
||||||
|
if (
|
||||||
|
error.code !==
|
||||||
|
Discord.Constants.APIErrors.UNKNOWN_CHANNEL
|
||||||
|
) {
|
||||||
|
console.error(
|
||||||
|
"Failed to delete the interaction:",
|
||||||
|
error
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
})
|
||||||
|
.catch(() => {
|
||||||
|
interaction
|
||||||
|
.followUp({
|
||||||
|
content: "The request to close the ticket has timed out.",
|
||||||
|
})
|
||||||
|
.then((m2) => setTimeout(() => interaction.channel.delete(3000)));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!supportbot.CloseConfirmation) {
|
||||||
|
let logChannel =
|
||||||
|
interaction.guild.channels.cache.find(
|
||||||
|
(channel) => channel.name === supportbot.TranscriptLog
|
||||||
|
) ||
|
||||||
|
interaction.guild.channels.cache.find(
|
||||||
|
(channel) => channel.id === supportbot.TranscriptLog
|
||||||
|
);
|
||||||
|
let user = interaction.user;
|
||||||
|
let reason =
|
||||||
|
(await interaction.options.getString("reason")) ||
|
||||||
|
"No Reason Provided.";
|
||||||
|
|
||||||
|
let name = interaction.channel.name;
|
||||||
|
let ticketChannel = interaction.channel;
|
||||||
|
|
||||||
|
interaction
|
||||||
|
.reply(`**${supportbot.ClosingTicket}**`)
|
||||||
|
|
||||||
|
.then(() => {
|
||||||
|
const logEmbed = new Discord.MessageEmbed()
|
||||||
|
.setTitle(supportbot.TranscriptTitle)
|
||||||
|
.setColor(supportbot.EmbedColour)
|
||||||
|
.setFooter(supportbot.EmbedFooter)
|
||||||
|
.addField("Closed By", interaction.user.tag)
|
||||||
|
.addField("Reason", reason);
|
||||||
|
|
||||||
|
interaction.channel.interactions
|
||||||
|
.fetch({ limit: 100 })
|
||||||
|
.then((msgs) => {
|
||||||
|
let html = "";
|
||||||
|
|
||||||
|
msgs = msgs.sort(
|
||||||
|
(a, b) => a.createdTimestamp - b.createdTimestamp
|
||||||
|
);
|
||||||
|
html += `<style>* {background-color: #2c2f33;color: #fff;font-family: Arial, Helvetica, sans-serif;}</style>`;
|
||||||
|
html += `<strong>Server Name:</strong> ${interaction.guild.name}<br>`;
|
||||||
|
html += `<strong>Ticket:</strong> ${ticketChannel.name}<br>`;
|
||||||
|
html += `<strong>Message:</strong> ${msgs.size} Messages<br><br><br>`;
|
||||||
|
|
||||||
|
msgs.forEach((msg) => {
|
||||||
|
if (msg.content) {
|
||||||
|
html += `<strong>User:</strong> ${msg.author.tag}<br>`;
|
||||||
|
html += `<strong>Message:</strong> ${msg.content}<br>`;
|
||||||
|
html += `-----<br><br>`;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
logChannel.send({ embeds: [logEmbed] }).catch((err) => {
|
||||||
|
interaction.reply(err);
|
||||||
|
});
|
||||||
|
|
||||||
|
let file = new Discord.MessageAttachment(
|
||||||
|
Buffer.from(html),
|
||||||
|
`${name}.html`
|
||||||
|
);
|
||||||
|
logChannel
|
||||||
|
.send({ embeds: [logEmbed], files: [file] })
|
||||||
|
.catch((err) => {
|
||||||
|
interaction.reply(err);
|
||||||
|
});
|
||||||
|
|
||||||
|
interaction.channel.delete().catch((error) => {
|
||||||
|
if (
|
||||||
|
error.code !== Discord.Constants.APIErrors.UNKNOWN_CHANNEL
|
||||||
|
) {
|
||||||
|
console.error("Failed to delete the interaction:", error);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
})
|
||||||
|
.catch(() => {
|
||||||
|
interaction
|
||||||
|
.followUp({
|
||||||
|
content: "The request to close the ticket has timed out.",
|
||||||
|
})
|
||||||
|
.then((m2) => setTimeout(() => interaction.channel.delete(3000)));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
});
|
||||||
@@ -1,173 +0,0 @@
|
|||||||
// SupportBot | Emerald Services
|
|
||||||
// Close Ticket Command
|
|
||||||
|
|
||||||
const fs = require("fs");
|
|
||||||
|
|
||||||
const Discord = require("discord.js");
|
|
||||||
const yaml = require('js-yaml');
|
|
||||||
const supportbot = yaml.load(fs.readFileSync('./Data/supportbot.yml', 'utf8'));
|
|
||||||
|
|
||||||
const Command = require("../Structures/Command.js");
|
|
||||||
const TicketNumberID = require('../Structures/TicketID.js');
|
|
||||||
|
|
||||||
async function asyncForEach(array, callback) {
|
|
||||||
for (let index = 0; index < array.length; index++) {
|
|
||||||
await callback(array[index], index, array);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = new Command({
|
|
||||||
name: "close",
|
|
||||||
description: "Close a support ticket",
|
|
||||||
type: "BOTH",
|
|
||||||
slashCommandOptions: [],
|
|
||||||
permission: "SEND_MESSAGES",
|
|
||||||
|
|
||||||
async run(message, args, client) {
|
|
||||||
|
|
||||||
if (!message.channel.name.startsWith( `${supportbot.TicketChannel}-` )) {
|
|
||||||
const Exists = new Discord.MessageEmbed()
|
|
||||||
.setTitle("No Ticket Found!")
|
|
||||||
.setDescription(`${supportbot.NoValidTicket}`)
|
|
||||||
.setColor(supportbot.WarningColour);
|
|
||||||
message.channel.send({ embed: Exists });
|
|
||||||
|
|
||||||
return;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if (supportbot.CloseConfirmation) {
|
|
||||||
const CloseTicketRequest = new Discord.MessageEmbed()
|
|
||||||
.setTitle(`**${supportbot.ClosingTicket}**`)
|
|
||||||
.setDescription(`Please confirm by repeating the following word.. \`${supportbot.ClosingConfirmation_Word}\` `)
|
|
||||||
.setColor(supportbot.EmbedColour);
|
|
||||||
|
|
||||||
message.channel.send(CloseTicketRequest).then(m => {
|
|
||||||
message.channel.awaitMessages( response => response.content.toLowerCase() === supportbot.ClosingConfirmation_Word, {
|
|
||||||
max: 1,
|
|
||||||
time: 20000,
|
|
||||||
errors: [ 'time' ],
|
|
||||||
|
|
||||||
|
|
||||||
}).then( collected => {
|
|
||||||
let logChannel = message.guild.channels.cache.find(channel => channel.name === supportbot.TranscriptLog) || message.guild.channels.cache.find(channel => channel.id === supportbot.TranscriptLog)
|
|
||||||
let user = message.author;
|
|
||||||
let reason = args.join(" ") || "No Reason Provided.";
|
|
||||||
|
|
||||||
let name = message.channel.name;
|
|
||||||
let ticketChannel = message.channel;
|
|
||||||
|
|
||||||
message.channel.send(`**${supportbot.ClosingTicket}**`)
|
|
||||||
|
|
||||||
.then(() => {
|
|
||||||
const logEmbed = new Discord.MessageEmbed()
|
|
||||||
.setTitle(supportbot.TranscriptTitle)
|
|
||||||
.setColor(supportbot.EmbedColour)
|
|
||||||
.setFooter(supportbot.EmbedFooter)
|
|
||||||
.addField("Closed By", message.author.tag)
|
|
||||||
.addField("Reason", reason);
|
|
||||||
|
|
||||||
message.channel.messages.fetch({ limit: 100 }).then( msgs => {
|
|
||||||
let html = '';
|
|
||||||
|
|
||||||
msgs = msgs.sort( ( a, b ) => a.createdTimestamp - b.createdTimestamp );
|
|
||||||
html += `<strong>Server Name:</strong> ${message.guild.name}<br>`;
|
|
||||||
html += `<strong>Ticket:</strong> ${ticketChannel.name}<br>`;
|
|
||||||
html += `<strong>Message:</strong> ${msgs.size} Messages<br><br><br>`;
|
|
||||||
|
|
||||||
msgs.forEach( msg => {
|
|
||||||
if ( msg.content ) {
|
|
||||||
html += `<strong>User:</strong> ${msg.author.tag}<br>`;
|
|
||||||
html += `<strong>Message:</strong> ${msg.content}<br>`;
|
|
||||||
html += `-----<br><br>`;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
logChannel.send({embeds: [logEmbed]}).catch(err => {
|
|
||||||
message.reply(err)
|
|
||||||
})
|
|
||||||
|
|
||||||
|
|
||||||
let file = new Discord.MessageAttachment( Buffer.from( html ), `${name}.html` )
|
|
||||||
logChannel.send({embeds: [logEmbed], files: [file]}).catch(err => {
|
|
||||||
message.reply(err)
|
|
||||||
})
|
|
||||||
|
|
||||||
message.channel.delete().catch(error => {
|
|
||||||
if (error.code !== Discord.Constants.APIErrors.UNKNOWN_CHANNEL) {
|
|
||||||
console.error('Failed to delete the message:', error);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
})
|
|
||||||
|
|
||||||
}).catch( () => {
|
|
||||||
interaction.m.edit({content: 'The request to close the ticket has timed out.'}).then(m2 => setTimeout(() => channel.delete(3000)) );
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!supportbot.CloseConfirmation) {
|
|
||||||
|
|
||||||
let logChannel = message.guild.channels.cache.find(channel => channel.name === supportbot.TranscriptLog) || message.guild.channels.cache.find(channel => channel.id === supportbot.TranscriptLog)
|
|
||||||
let user = message.author;
|
|
||||||
let reason = args.join(" ") || "No Reason Provided.";
|
|
||||||
|
|
||||||
let name = message.channel.name;
|
|
||||||
let ticketChannel = message.channel;
|
|
||||||
|
|
||||||
message.channel.send(`**${supportbot.ClosingTicket}**`)
|
|
||||||
|
|
||||||
.then(() => {
|
|
||||||
const logEmbed = new Discord.MessageEmbed()
|
|
||||||
.setTitle(supportbot.TranscriptTitle)
|
|
||||||
.setColor(supportbot.EmbedColour)
|
|
||||||
.setFooter(supportbot.EmbedFooter)
|
|
||||||
.addField("Closed By", message.author.tag)
|
|
||||||
.addField("Reason", reason);
|
|
||||||
|
|
||||||
message.channel.messages.fetch({ limit: 100 }).then( msgs => {
|
|
||||||
let html = '';
|
|
||||||
|
|
||||||
msgs = msgs.sort( ( a, b ) => a.createdTimestamp - b.createdTimestamp );
|
|
||||||
html += `<strong>Server Name:</strong> ${message.guild.name}<br>`;
|
|
||||||
html += `<strong>Ticket:</strong> ${ticketChannel.name}<br>`;
|
|
||||||
html += `<strong>Message:</strong> ${msgs.size} Messages<br><br><br>`;
|
|
||||||
|
|
||||||
msgs.forEach( msg => {
|
|
||||||
if ( msg.content ) {
|
|
||||||
html += `<strong>User:</strong> ${msg.author.tag}<br>`;
|
|
||||||
html += `<strong>Message:</strong> ${msg.content}<br>`;
|
|
||||||
html += `-----<br><br>`;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
logChannel.send({embeds: [logEmbed]}).catch(err => {
|
|
||||||
message.reply(err)
|
|
||||||
})
|
|
||||||
|
|
||||||
let file = new Discord.MessageAttachment( Buffer.from( html ), `${name}.html` )
|
|
||||||
logChannel.send({embeds: [logEmbed], files: [file]}).catch(err => {
|
|
||||||
message.reply(err)
|
|
||||||
})
|
|
||||||
|
|
||||||
message.channel.delete().catch(error => {
|
|
||||||
if (error.code !== Discord.Constants.APIErrors.UNKNOWN_CHANNEL) {
|
|
||||||
console.error('Failed to delete the message:', error);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
})
|
|
||||||
|
|
||||||
}).catch( () => {
|
|
||||||
interaction.m.edit({content: 'The request to close the ticket has timed out.'}).then(m2 => setTimeout(() => channel.delete(3000)) );
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
});
|
|
||||||
@@ -0,0 +1,74 @@
|
|||||||
|
// SupportBot | Emerald Services
|
||||||
|
// Embed Command
|
||||||
|
|
||||||
|
const fs = require("fs");
|
||||||
|
|
||||||
|
const Discord = require("discord.js");
|
||||||
|
const yaml = require("js-yaml");
|
||||||
|
const supportbot = yaml.load(
|
||||||
|
fs.readFileSync("./Configs/supportbot.yml", "utf8")
|
||||||
|
);
|
||||||
|
const cmdconfig = yaml.load(fs.readFileSync("./Configs/commands.yml", "utf8"));
|
||||||
|
|
||||||
|
const Command = require("../Structures/Command.js");
|
||||||
|
|
||||||
|
module.exports = new Command({
|
||||||
|
name: cmdconfig.EmbedCommand,
|
||||||
|
description: cmdconfig.EmbedCommandDesc,
|
||||||
|
slashCommandOptions: [
|
||||||
|
{
|
||||||
|
name: "title",
|
||||||
|
description: "Embed Title",
|
||||||
|
type: "STRING",
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
name: "message",
|
||||||
|
description: "Embed Message",
|
||||||
|
type: "STRING",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
permission: "SEND_MESSAGES",
|
||||||
|
|
||||||
|
async run(interaction) {
|
||||||
|
let SupportStaff =
|
||||||
|
interaction.guild.roles.cache.find(
|
||||||
|
(SupportTeam) => SupportTeam.name === supportbot.Staff
|
||||||
|
) ||
|
||||||
|
interaction.guild.roles.cache.find(
|
||||||
|
(SupportTeam) => SupportTeam.id === supportbot.Staff
|
||||||
|
);
|
||||||
|
let Admins =
|
||||||
|
interaction.guild.roles.cache.find(
|
||||||
|
(AdminUser) => AdminUser.name === supportbot.Admin
|
||||||
|
) ||
|
||||||
|
interaction.guild.roles.cache.find(
|
||||||
|
(AdminUser) => AdminUser.id === supportbot.Admin
|
||||||
|
);
|
||||||
|
|
||||||
|
const NoPerms = new Discord.MessageEmbed()
|
||||||
|
.setTitle("Invalid Permissions!")
|
||||||
|
.setDescription(
|
||||||
|
`${supportbot.IncorrectPerms}\n\nRole Required: \`${supportbot.Staff}\` or \`${supportbot.Admin}\``
|
||||||
|
)
|
||||||
|
.setColor(supportbot.WarningColour);
|
||||||
|
|
||||||
|
if (
|
||||||
|
interaction.member.roles.cache.has(SupportStaff.id) ||
|
||||||
|
interaction.member.roles.cache.has(Admins.id)
|
||||||
|
) {
|
||||||
|
const EmbedTitle = interaction.options.getString("title");
|
||||||
|
const EmbedSubject = interaction.options.getString("message");
|
||||||
|
|
||||||
|
const EmbedMsg = new Discord.MessageEmbed()
|
||||||
|
.setTitle(EmbedTitle)
|
||||||
|
.setDescription(EmbedSubject);
|
||||||
|
|
||||||
|
interaction.reply({
|
||||||
|
embeds: [EmbedMsg],
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
return interaction.reply({ embeds: [NoPerms] });
|
||||||
|
}
|
||||||
|
},
|
||||||
|
});
|
||||||
@@ -0,0 +1,106 @@
|
|||||||
|
// SupportBot | Emerald Services
|
||||||
|
// Help Command
|
||||||
|
|
||||||
|
const fs = require("fs");
|
||||||
|
|
||||||
|
const Discord = require("discord.js");
|
||||||
|
const yaml = require("js-yaml");
|
||||||
|
const supportbot = yaml.load(
|
||||||
|
fs.readFileSync("./Configs/supportbot.yml", "utf8")
|
||||||
|
);
|
||||||
|
const cmdconfig = yaml.load(fs.readFileSync("./Configs/commands.yml", "utf8"));
|
||||||
|
|
||||||
|
const Command = require("../Structures/Command.js");
|
||||||
|
|
||||||
|
async function asyncForEach(array, callback) {
|
||||||
|
for (let index = 0; index < array.length; index++) {
|
||||||
|
await callback(array[index], index, array);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = new Command({
|
||||||
|
name: cmdconfig.HelpCommand,
|
||||||
|
description: cmdconfig.HelpCommandDesc,
|
||||||
|
slashCommandOptions: [],
|
||||||
|
permission: "SEND_MESSAGES",
|
||||||
|
|
||||||
|
async run(interaction) {
|
||||||
|
let SupportStaff =
|
||||||
|
interaction.guild.roles.cache.find(
|
||||||
|
(adminRole) => adminRole.name === supportbot.Staff
|
||||||
|
) ||
|
||||||
|
interaction.guild.roles.cache.find(
|
||||||
|
(staffRole) => staffRole.id === supportbot.Staff
|
||||||
|
);
|
||||||
|
let AdminStaff =
|
||||||
|
interaction.guild.roles.cache.find(
|
||||||
|
(adminRole) => adminRole.name === supportbot.Admin
|
||||||
|
) ||
|
||||||
|
interaction.guild.roles.cache.find(
|
||||||
|
(adminRole) => adminRole.id === supportbot.Admin
|
||||||
|
);
|
||||||
|
|
||||||
|
if (supportbot.HelpMenu) {
|
||||||
|
let botCommands = "";
|
||||||
|
botCommands += `**/${cmdconfig.HelpCommand}** ${cmdconfig.HelpCommandDesc}\n`;
|
||||||
|
botCommands += `**/${cmdconfig.InfoCommand}** ${cmdconfig.InfoCommandDesc}\n`;
|
||||||
|
botCommands += `**/${cmdconfig.PingCommand}** ${cmdconfig.PingCommandDesc}\n`;
|
||||||
|
|
||||||
|
let ticketCommands = "";
|
||||||
|
ticketCommands += `**/${cmdconfig.OpenTicket}** ${cmdconfig.OpenTicketDesc}\n`;
|
||||||
|
ticketCommands += `**/${cmdconfig.CloseTicket}** ${cmdconfig.CloseTicketDesc}\n`;
|
||||||
|
|
||||||
|
let staffCommands = "";
|
||||||
|
staffCommands += `**/${cmdconfig.TicketAdd}** ${cmdconfig.TicketAddDesc}\n`;
|
||||||
|
staffCommands += `**/${cmdconfig.TicketRemove}** ${cmdconfig.TicketRemoveDesc}\n`;
|
||||||
|
|
||||||
|
const HelpEmbed1 = new Discord.MessageEmbed()
|
||||||
|
.setTitle(supportbot.Name + " Commands")
|
||||||
|
.setThumbnail(interaction.user.displayAvatarURL())
|
||||||
|
|
||||||
|
.addFields(
|
||||||
|
{
|
||||||
|
name: "🖥️ General Commands\n",
|
||||||
|
value: `${botCommands}\n`,
|
||||||
|
inline: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "🎫 Support Commands\n",
|
||||||
|
value: `${ticketCommands}\n`,
|
||||||
|
inline: false,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
.setColor(supportbot.EmbedColour)
|
||||||
|
.setFooter(supportbot.EmbedFooter, interaction.user.displayAvatarURL());
|
||||||
|
|
||||||
|
if (interaction.member.roles.cache.has(SupportStaff.id)) {
|
||||||
|
HelpEmbed1.addFields({
|
||||||
|
name: "🔐 Staff Commands\n",
|
||||||
|
value: `${staffCommands}\n`,
|
||||||
|
inline: false,
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
if (interaction.member.roles.cache.has(AdminStaff.id)) {
|
||||||
|
HelpEmbed1.addFields({
|
||||||
|
name: "🔐 Staff Commands\n",
|
||||||
|
value: `${staffCommands}\n`,
|
||||||
|
inline: false,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (supportbot.SendHelpPage === "dm") {
|
||||||
|
interaction.user.reply({
|
||||||
|
embeds: [HelpEmbed1],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (supportbot.SendHelpPage === "channel") {
|
||||||
|
interaction.reply({
|
||||||
|
embeds: [HelpEmbed1],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
});
|
||||||
+26
-27
@@ -4,38 +4,37 @@
|
|||||||
const fs = require("fs");
|
const fs = require("fs");
|
||||||
|
|
||||||
const Discord = require("discord.js");
|
const Discord = require("discord.js");
|
||||||
const yaml = require('js-yaml');
|
const yaml = require("js-yaml");
|
||||||
const supportbot = yaml.load(fs.readFileSync('./Data/supportbot.yml', 'utf8'));
|
const supportbot = yaml.load(
|
||||||
|
fs.readFileSync("./Configs/supportbot.yml", "utf8")
|
||||||
|
);
|
||||||
|
const cmdconfig = yaml.load(fs.readFileSync("./Configs/commands.yml", "utf8"));
|
||||||
|
|
||||||
const Command = require("../Structures/Command.js");
|
const Command = require("../Structures/Command.js");
|
||||||
|
|
||||||
module.exports = new Command({
|
module.exports = new Command({
|
||||||
name: "info",
|
name: cmdconfig.InfoCommand,
|
||||||
description: "Displays information about your server!",
|
description: cmdconfig.InfoCommandDesc,
|
||||||
type: "BOTH",
|
slashCommandOptions: [],
|
||||||
slashCommandOptions: [],
|
permission: "SEND_MESSAGES",
|
||||||
permission: "SEND_MESSAGES",
|
|
||||||
|
|
||||||
async run(message, args, client) {
|
async run(interaction) {
|
||||||
|
const InfoButton = new Discord.MessageButton()
|
||||||
|
.setLabel(supportbot.InfoButtonText)
|
||||||
|
.setURL(supportbot.InfoURL)
|
||||||
|
.setStyle("LINK");
|
||||||
|
|
||||||
const InfoButton = new Discord.MessageButton()
|
const inforow = new Discord.MessageActionRow().addComponents(InfoButton);
|
||||||
.setLabel(supportbot.InfoButtonText)
|
|
||||||
.setURL(supportbot.InfoURL)
|
|
||||||
.setStyle('LINK')
|
|
||||||
|
|
||||||
const inforow = new Discord.MessageActionRow()
|
const InfoEmbed = new Discord.MessageEmbed()
|
||||||
.addComponents(InfoButton)
|
.setURL(supportbot.InfoURL)
|
||||||
|
.setTitle(supportbot.InfoTitle)
|
||||||
|
.setDescription(supportbot.AboutMe)
|
||||||
|
.setColor(supportbot.InfoColour);
|
||||||
|
|
||||||
const InfoEmbed = new Discord.MessageEmbed()
|
interaction.reply({
|
||||||
.setURL(supportbot.InfoURL)
|
embeds: [InfoEmbed],
|
||||||
.setTitle(supportbot.InfoTitle)
|
components: [inforow],
|
||||||
.setDescription(supportbot.AboutMe)
|
});
|
||||||
.setColor(supportbot.InfoColour)
|
},
|
||||||
|
});
|
||||||
|
|
||||||
message.channel.send({
|
|
||||||
embeds: [InfoEmbed], components: [inforow]
|
|
||||||
})
|
|
||||||
|
|
||||||
}
|
|
||||||
});
|
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
// SupportBot | Emerald Services
|
||||||
|
// Ping Command
|
||||||
|
|
||||||
|
const fs = require("fs");
|
||||||
|
|
||||||
|
const Discord = require("discord.js");
|
||||||
|
const yaml = require("js-yaml");
|
||||||
|
const supportbot = yaml.load(
|
||||||
|
fs.readFileSync("./Configs/supportbot.yml", "utf8")
|
||||||
|
);
|
||||||
|
const cmdconfig = yaml.load(fs.readFileSync("./Configs/commands.yml", "utf8"));
|
||||||
|
|
||||||
|
const Command = require("../Structures/Command.js");
|
||||||
|
|
||||||
|
module.exports = new Command({
|
||||||
|
name: cmdconfig.PingCommand,
|
||||||
|
description: cmdconfig.PingCommandDesc,
|
||||||
|
slashCommandOptions: [],
|
||||||
|
permission: "SEND_MESSAGES",
|
||||||
|
|
||||||
|
async run(interaction) {
|
||||||
|
const PingEmbed = new Discord.MessageEmbed()
|
||||||
|
.setDescription(
|
||||||
|
`:ping_pong: **Ping:** \`${interaction.client.ws.ping} ms\``
|
||||||
|
)
|
||||||
|
.setColor(supportbot.EmbedColour);
|
||||||
|
|
||||||
|
interaction.reply({
|
||||||
|
embeds: [PingEmbed],
|
||||||
|
});
|
||||||
|
},
|
||||||
|
});
|
||||||
@@ -0,0 +1,95 @@
|
|||||||
|
// SupportBot | Emerald Services
|
||||||
|
// Ticket Remove Command
|
||||||
|
|
||||||
|
const fs = require("fs");
|
||||||
|
|
||||||
|
const Discord = require("discord.js");
|
||||||
|
const yaml = require("js-yaml");
|
||||||
|
const supportbot = yaml.load(
|
||||||
|
fs.readFileSync("./Configs/supportbot.yml", "utf8")
|
||||||
|
);
|
||||||
|
const cmdconfig = yaml.load(fs.readFileSync("./Configs/commands.yml", "utf8"));
|
||||||
|
|
||||||
|
const Command = require("../Structures/Command.js");
|
||||||
|
|
||||||
|
async function asyncForEach(array, callback) {
|
||||||
|
for (let index = 0; index < array.length; index++) {
|
||||||
|
await callback(array[index], index, array);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = new Command({
|
||||||
|
name: cmdconfig.TicketRemove,
|
||||||
|
description: cmdconfig.TicketRemoveDesc,
|
||||||
|
slashCommandOptions: [
|
||||||
|
{
|
||||||
|
name: "user",
|
||||||
|
description: "User to remove",
|
||||||
|
type: "USER",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
permission: "SEND_MESSAGES",
|
||||||
|
|
||||||
|
async run(interaction) {
|
||||||
|
let SupportStaff =
|
||||||
|
interaction.guild.roles.cache.find(
|
||||||
|
(SupportTeam) => SupportTeam.name === supportbot.Staff
|
||||||
|
) ||
|
||||||
|
interaction.guild.roles.cache.find(
|
||||||
|
(SupportTeam) => SupportTeam.id === supportbot.Staff
|
||||||
|
);
|
||||||
|
let Admins =
|
||||||
|
interaction.guild.roles.cache.find(
|
||||||
|
(AdminUser) => AdminUser.name === supportbot.Admin
|
||||||
|
) ||
|
||||||
|
interaction.guild.roles.cache.find(
|
||||||
|
(AdminUser) => AdminUser.id === supportbot.Admin
|
||||||
|
);
|
||||||
|
|
||||||
|
const NoPerms = new Discord.MessageEmbed()
|
||||||
|
.setTitle("Invalid Permissions!")
|
||||||
|
.setDescription(
|
||||||
|
`${supportbot.IncorrectPerms}\n\nRole Required: \`${supportbot.Staff}\` or \`${supportbot.Admin}\``
|
||||||
|
)
|
||||||
|
.setColor(supportbot.WarningColour);
|
||||||
|
|
||||||
|
if (
|
||||||
|
interaction.member.roles.cache.has(SupportStaff.id) ||
|
||||||
|
interaction.member.roles.cache.has(Admins.id)
|
||||||
|
) {
|
||||||
|
if (!interaction.channel.name.startsWith(`${supportbot.TicketPrefix}`)) {
|
||||||
|
const Exists = new Discord.MessageEmbed()
|
||||||
|
.setTitle("No Ticket Found!")
|
||||||
|
.setDescription(`${supportbot.NoValidTicket}`)
|
||||||
|
.setColor(supportbot.WarningColour);
|
||||||
|
return interaction.reply({ embeds: [Exists] });
|
||||||
|
}
|
||||||
|
|
||||||
|
let uMember = interaction.options.getUser("user");
|
||||||
|
const UserNotExist = new Discord.MessageEmbed()
|
||||||
|
.setTitle("User Not Found!")
|
||||||
|
.setDescription(
|
||||||
|
`${supportbot.UserNotFound}\n\nTry Again:\`/${cmdconfig.TicketRemove} <user#0000>\``
|
||||||
|
)
|
||||||
|
.setColor(supportbot.ErrorColour);
|
||||||
|
|
||||||
|
if (!uMember) return interaction.reply({ embeds: [UserNotExist] });
|
||||||
|
|
||||||
|
interaction.channel.permissionOverwrites.edit(uMember, {
|
||||||
|
VIEW_CHANNEL: false,
|
||||||
|
READ_MESSAGE_HISTORY: false,
|
||||||
|
SEND_MESSAGES: false,
|
||||||
|
});
|
||||||
|
|
||||||
|
const Complete = new Discord.MessageEmbed()
|
||||||
|
.setTitle("User Removed!")
|
||||||
|
.setDescription(supportbot.RemovedUser.replace(/%user%/g, uMember.id))
|
||||||
|
.setTimestamp()
|
||||||
|
.setColor(supportbot.EmbedColour);
|
||||||
|
interaction.reply({ embeds: [Complete] });
|
||||||
|
} else {
|
||||||
|
return interaction.reply({ embeds: [NoPerms] });
|
||||||
|
}
|
||||||
|
},
|
||||||
|
});
|
||||||
@@ -0,0 +1,68 @@
|
|||||||
|
// SupportBot | Emerald Services
|
||||||
|
// Ping Command
|
||||||
|
|
||||||
|
const fs = require("fs");
|
||||||
|
|
||||||
|
const Discord = require("discord.js");
|
||||||
|
const yaml = require("js-yaml");
|
||||||
|
const supportbot = yaml.load(
|
||||||
|
fs.readFileSync("./Configs/supportbot.yml", "utf8")
|
||||||
|
);
|
||||||
|
const cmdconfig = yaml.load(fs.readFileSync("./Configs/commands.yml", "utf8"));
|
||||||
|
|
||||||
|
const Command = require("../Structures/Command.js");
|
||||||
|
|
||||||
|
module.exports = new Command({
|
||||||
|
name: cmdconfig.SuggestCommand,
|
||||||
|
description: cmdconfig.SuggestCommandDesc,
|
||||||
|
slashCommandOptions: [
|
||||||
|
{
|
||||||
|
name: "suggestion",
|
||||||
|
description: "Create a Suggestion",
|
||||||
|
type: "STRING",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
permission: "SEND_MESSAGES",
|
||||||
|
|
||||||
|
async run(interaction) {
|
||||||
|
const suggestChannel =
|
||||||
|
interaction.guild.channels.cache.find(
|
||||||
|
(channel) => channel.name === supportbot.SuggestionChannel
|
||||||
|
) ||
|
||||||
|
interaction.guild.channels.cache.find(
|
||||||
|
(channel) => channel.id === supportbot.SuggestionChannel
|
||||||
|
);
|
||||||
|
|
||||||
|
const NoChannel = new Discord.MessageEmbed()
|
||||||
|
.setTitle("Missing Channel!")
|
||||||
|
.setDescription(`${supportbot.InvalidChannel}`)
|
||||||
|
.setColor(supportbot.ErrorColour);
|
||||||
|
|
||||||
|
if (!suggestChannel) return interaction.reply({ embeds: [NoChannel] });
|
||||||
|
|
||||||
|
let suggestion = interaction.options.getString("suggestion");
|
||||||
|
|
||||||
|
const SuggestEmbed = new Discord.MessageEmbed()
|
||||||
|
.addField("Suggestion", suggestion, true)
|
||||||
|
.addField("From", `<@${interaction.user.id}>`)
|
||||||
|
.setThumbnail(interaction.user.displayAvatarURL())
|
||||||
|
.setFooter(supportbot.EmbedFooter, interaction.user.displayAvatarURL())
|
||||||
|
.setColor(supportbot.EmbedColour);
|
||||||
|
|
||||||
|
const suggestionMsg = await suggestChannel.send({ embeds: [SuggestEmbed] });
|
||||||
|
if (supportbot.SuggestionUpvote && supportbot.SuggestionDownvote) {
|
||||||
|
suggestionMsg.react(supportbot.SuggestionUpvote);
|
||||||
|
suggestionMsg.react(supportbot.SuggestionDownvote);
|
||||||
|
}
|
||||||
|
|
||||||
|
const Submitted = new Discord.MessageEmbed()
|
||||||
|
.setTitle("Suggestion Submitted!")
|
||||||
|
.setDescription(
|
||||||
|
`:white_check_mark: You have successfully submitted a suggestion.`
|
||||||
|
)
|
||||||
|
.addField("Sent to:", `<#${suggestChannel.id}>`)
|
||||||
|
.setColor(supportbot.SuccessColour);
|
||||||
|
|
||||||
|
return interaction.reply({ embeds: [Submitted] });
|
||||||
|
},
|
||||||
|
});
|
||||||
@@ -0,0 +1,362 @@
|
|||||||
|
// SupportBot | Emerald Services
|
||||||
|
// Ticket Command
|
||||||
|
|
||||||
|
const fs = require("fs");
|
||||||
|
|
||||||
|
const Discord = require("discord.js");
|
||||||
|
const yaml = require("js-yaml");
|
||||||
|
const supportbot = yaml.load(
|
||||||
|
fs.readFileSync("./Configs/supportbot.yml", "utf8")
|
||||||
|
);
|
||||||
|
const cmdconfig = yaml.load(fs.readFileSync("./Configs/commands.yml", "utf8"));
|
||||||
|
|
||||||
|
const Command = require("../Structures/Command.js");
|
||||||
|
const TicketNumberID = require("../Structures/TicketID.js");
|
||||||
|
|
||||||
|
async function asyncForEach(array, callback) {
|
||||||
|
for (let index = 0; index < array.length; index++) {
|
||||||
|
await callback(array[index], index, array);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = new Command({
|
||||||
|
name: cmdconfig.OpenTicket,
|
||||||
|
description: cmdconfig.OpenTicketDesc,
|
||||||
|
slashCommandOptions: [
|
||||||
|
{
|
||||||
|
name: "reason",
|
||||||
|
description: "Ticket Reason",
|
||||||
|
type: "STRING",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
permission: "SEND_MESSAGES",
|
||||||
|
|
||||||
|
async run(interaction) {
|
||||||
|
let reactionUser = interaction.guild.members.cache.get(interaction.user.id);
|
||||||
|
|
||||||
|
if (
|
||||||
|
reactionUser.roles.cache.find(
|
||||||
|
(role) => role.name === supportbot.TicketBlackListRole
|
||||||
|
) ||
|
||||||
|
reactionUser.roles.cache.find(
|
||||||
|
(role) => role.id === supportbot.TicketBlackListRole
|
||||||
|
)
|
||||||
|
) {
|
||||||
|
return interaction
|
||||||
|
.reply({
|
||||||
|
content: `<@${interaction.user.id}> ${supportbot.TicketBlackListMessage}`,
|
||||||
|
})
|
||||||
|
.then((msg) => {
|
||||||
|
setTimeout(() => msg.delete(), 3500);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ticket ID
|
||||||
|
let ticketNumberID = TicketNumberID.pad(interaction.guild.id);
|
||||||
|
|
||||||
|
// Ticket Subject
|
||||||
|
const TicketSubject =
|
||||||
|
interaction.options?.getString("reason") || supportbot.NoTicketSubject;
|
||||||
|
|
||||||
|
const TicketExists = new Discord.MessageEmbed()
|
||||||
|
.setTitle("Ticket Exists!")
|
||||||
|
.setDescription(`${supportbot.TicketExists}`)
|
||||||
|
.setColor(supportbot.WarningColour);
|
||||||
|
|
||||||
|
if (
|
||||||
|
await interaction.guild.channels.cache.find((ticketChannel) => {
|
||||||
|
ticketChannel.name === `${supportbot.TicketPrefix}${ticketNumberID}`;
|
||||||
|
})
|
||||||
|
) {
|
||||||
|
return interaction.reply({ embeds: [TicketExists] });
|
||||||
|
}
|
||||||
|
const Staff =
|
||||||
|
interaction.guild.roles.cache.find(
|
||||||
|
(SupportTeam) => SupportTeam.name === supportbot.Staff
|
||||||
|
) ||
|
||||||
|
interaction.guild.roles.cache.find(
|
||||||
|
(SupportTeam) => SupportTeam.id === supportbot.Staff
|
||||||
|
);
|
||||||
|
const Admins =
|
||||||
|
interaction.guild.roles.cache.find(
|
||||||
|
(AdminUser) => AdminUser.name === supportbot.Admin
|
||||||
|
) ||
|
||||||
|
interaction.guild.roles.cache.find(
|
||||||
|
(AdminUser) => AdminUser.id === supportbot.Admin
|
||||||
|
);
|
||||||
|
const DeptRole1 =
|
||||||
|
interaction.guild.roles.cache.find(
|
||||||
|
(DepartmentRole) =>
|
||||||
|
DepartmentRole.name === `${supportbot.DepartmentRole_1}`
|
||||||
|
) ||
|
||||||
|
interaction.guild.roles.cache.find(
|
||||||
|
(DepartmentRole) =>
|
||||||
|
DepartmentRole.id === `${supportbot.DepartmentRole_1}`
|
||||||
|
);
|
||||||
|
const DeptRole2 =
|
||||||
|
interaction.guild.roles.cache.find(
|
||||||
|
(DepartmentRole) =>
|
||||||
|
DepartmentRole.name === `${supportbot.DepartmentRole_2}`
|
||||||
|
) ||
|
||||||
|
interaction.guild.roles.cache.find(
|
||||||
|
(DepartmentRole) =>
|
||||||
|
DepartmentRole.id === `${supportbot.DepartmentRole_2}`
|
||||||
|
);
|
||||||
|
const DeptRole3 =
|
||||||
|
interaction.guild.roles.cache.find(
|
||||||
|
(DepartmentRole) =>
|
||||||
|
DepartmentRole.name === `${supportbot.DepartmentRole_3}`
|
||||||
|
) ||
|
||||||
|
interaction.guild.roles.cache.find(
|
||||||
|
(DepartmentRole) =>
|
||||||
|
DepartmentRole.id === `${supportbot.DepartmentRole_3}`
|
||||||
|
);
|
||||||
|
const Author = interaction.user;
|
||||||
|
const Everyone = interaction.guild.id;
|
||||||
|
const ticketChannel = await interaction.guild.channels.create(
|
||||||
|
`${supportbot.TicketPrefix}${ticketNumberID}`,
|
||||||
|
{
|
||||||
|
type: "GUILD_TEXT",
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
if (
|
||||||
|
interaction.channel.name === supportbot.ReactionChannel ||
|
||||||
|
interaction.channel.id === supportbot.ReactionChannel
|
||||||
|
) {
|
||||||
|
const CreatedTicket = new Discord.MessageEmbed()
|
||||||
|
.setDescription(
|
||||||
|
supportbot.TicketCreatedAlert.replace(
|
||||||
|
/%ticketauthor%/g,
|
||||||
|
interaction.user.id
|
||||||
|
)
|
||||||
|
.replace(/%ticketid%/g, ticketChannel.id)
|
||||||
|
.replace(/%ticketusername%/g, interaction.user.username)
|
||||||
|
)
|
||||||
|
.setColor(supportbot.EmbedColour);
|
||||||
|
interaction.reply({ embeds: [CreatedTicket], ephemeral: true });
|
||||||
|
} else {
|
||||||
|
const CreatedTicket = new Discord.MessageEmbed()
|
||||||
|
.setDescription(
|
||||||
|
supportbot.TicketCreatedAlert.replace(
|
||||||
|
/%ticketauthor%/g,
|
||||||
|
interaction.user.id
|
||||||
|
)
|
||||||
|
.replace(/%ticketid%/g, ticketChannel.id)
|
||||||
|
.replace(/%ticketusername%/g, interaction.user.username)
|
||||||
|
)
|
||||||
|
.setColor(supportbot.EmbedColour);
|
||||||
|
interaction.reply({ embeds: [CreatedTicket], ephemeral: true });
|
||||||
|
}
|
||||||
|
let AllowArr = [Staff, Staff, Admins, Author];
|
||||||
|
await asyncForEach(AllowArr, (index) => {
|
||||||
|
ticketChannel.permissionOverwrites.create(index, { VIEW_CHANNEL: true });
|
||||||
|
});
|
||||||
|
|
||||||
|
let DenyArr = [Everyone];
|
||||||
|
await asyncForEach(DenyArr, (index) => {
|
||||||
|
ticketChannel.permissionOverwrites.create(index, { VIEW_CHANNEL: false });
|
||||||
|
});
|
||||||
|
|
||||||
|
let TicketCategory =
|
||||||
|
interaction.guild.channels.cache.find(
|
||||||
|
(category) => category.name === supportbot.TicketCategory
|
||||||
|
) ||
|
||||||
|
interaction.guild.channels.cache.find(
|
||||||
|
(category) => category.id === supportbot.TicketCategory
|
||||||
|
);
|
||||||
|
if (TicketCategory) {
|
||||||
|
ticketChannel.setParent(TicketCategory.id);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (supportbot.AllowTicketMentions) {
|
||||||
|
ticketChannel.send({ content: `${interaction.user}` });
|
||||||
|
}
|
||||||
|
|
||||||
|
const TicketMessage = new Discord.MessageEmbed()
|
||||||
|
.setTitle(
|
||||||
|
supportbot.Ticket_Title.replace(/%ticketauthor%/g, interaction.user.id)
|
||||||
|
.replace(/%ticketid%/g, ticketChannel.id)
|
||||||
|
.replace(/%ticketusername%/g, interaction.user.username)
|
||||||
|
)
|
||||||
|
.setDescription(
|
||||||
|
supportbot.TicketMessage.replace(/%ticketauthor%/g, interaction.user.id)
|
||||||
|
.replace(/%ticketid%/g, ticketChannel.id)
|
||||||
|
.replace(/%ticketusername%/g, interaction.user.username)
|
||||||
|
)
|
||||||
|
.setColor(supportbot.EmbedColour);
|
||||||
|
|
||||||
|
if (supportbot.TicketSubject === "embed") {
|
||||||
|
if (TicketSubject != "No Reason Provided.") {
|
||||||
|
TicketMessage.addFields({ name: "Reason", value: TicketSubject });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (supportbot.TicketSubject === "description") {
|
||||||
|
if (TicketSubject != "No Reason Provided.") {
|
||||||
|
ticketChannel.setTopic(
|
||||||
|
`Reason: ${TicketSubject} - User ID: ${interaction.user.id} - Ticket: ${ticketChannel.name}`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (supportbot.TicketDepartments) {
|
||||||
|
TicketMessage.addFields({
|
||||||
|
name: "Departments",
|
||||||
|
value: ` **${supportbot.DepartmentTitle_1}**\n **${supportbot.DepartmentTitle_2}**\n **${supportbot.DepartmentTitle_3}**`,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
const CloseButton = new Discord.MessageButton()
|
||||||
|
.setCustomId("ticketclose")
|
||||||
|
.setLabel("Close")
|
||||||
|
.setStyle(supportbot.TicketCloseColour)
|
||||||
|
.setEmoji(supportbot.TicketCloseEmoji);
|
||||||
|
|
||||||
|
const LockButton = new Discord.MessageButton()
|
||||||
|
.setCustomId("ticketlock")
|
||||||
|
.setLabel("Lock")
|
||||||
|
.setStyle(supportbot.TicketLockColour)
|
||||||
|
.setEmoji(supportbot.TicketLockEmoji);
|
||||||
|
|
||||||
|
const row2 = new Discord.MessageActionRow().addComponents(
|
||||||
|
CloseButton,
|
||||||
|
LockButton
|
||||||
|
);
|
||||||
|
|
||||||
|
if (supportbot.TicketDepartments) {
|
||||||
|
let DenyArr = [DeptRole1, DeptRole2, DeptRole3];
|
||||||
|
await asyncForEach(DenyArr, (index) => {
|
||||||
|
ticketChannel.permissionOverwrites.create(index, {
|
||||||
|
VIEW_CHANNEL: false,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
const Department1Button = new Discord.MessageButton()
|
||||||
|
.setCustomId("Department1")
|
||||||
|
.setLabel(`${supportbot.DepartmentTitle_1}`)
|
||||||
|
.setStyle(supportbot.TicketDept1Colour)
|
||||||
|
.setEmoji(supportbot.TicketDept1Emoji);
|
||||||
|
|
||||||
|
const Department2Button = new Discord.MessageButton()
|
||||||
|
.setCustomId("Department2")
|
||||||
|
.setLabel(`${supportbot.DepartmentTitle_2}`)
|
||||||
|
.setStyle(supportbot.TicketDept2Colour)
|
||||||
|
.setEmoji(supportbot.TicketDept2Emoji);
|
||||||
|
|
||||||
|
const Department3Button = new Discord.MessageButton()
|
||||||
|
.setCustomId("Department3")
|
||||||
|
.setLabel(`${supportbot.DepartmentTitle_3}`)
|
||||||
|
.setStyle(supportbot.TicketDept3Colour)
|
||||||
|
.setEmoji(supportbot.TicketDept3Emoji);
|
||||||
|
|
||||||
|
const row = new Discord.MessageActionRow().addComponents(
|
||||||
|
Department1Button,
|
||||||
|
Department2Button,
|
||||||
|
Department3Button
|
||||||
|
);
|
||||||
|
|
||||||
|
const m = await ticketChannel.send({
|
||||||
|
embeds: [TicketMessage],
|
||||||
|
components: [row],
|
||||||
|
});
|
||||||
|
|
||||||
|
const filter = (i) => {
|
||||||
|
i.deferUpdate();
|
||||||
|
return i.user.id === interaction.user.id;
|
||||||
|
};
|
||||||
|
const collector = m.createMessageComponentCollector({
|
||||||
|
filter,
|
||||||
|
max: 1,
|
||||||
|
componentType: "BUTTON",
|
||||||
|
time: 60000,
|
||||||
|
});
|
||||||
|
|
||||||
|
collector.on("collect", async (i) => {
|
||||||
|
if (i.customId === "Department1") {
|
||||||
|
ticketChannel.permissionOverwrites.edit(DeptRole1, {
|
||||||
|
VIEW_CHANNEL: true,
|
||||||
|
READ_MESSAGE_HISTORY: true,
|
||||||
|
SEND_MESSAGES: true,
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!supportbot.AllowStaff) {
|
||||||
|
ticketChannel.permissionOverwrites.edit(Staff, {
|
||||||
|
VIEW_CHANNEL: false,
|
||||||
|
READ_MESSAGE_HISTORY: false,
|
||||||
|
SEND_MESSAGES: false,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const Department1 = new Discord.MessageEmbed()
|
||||||
|
.setDescription(
|
||||||
|
`> Thank for reaching out to the **${supportbot.DepartmentTitle_1} Department**. Please provide us information regarding your query.`
|
||||||
|
)
|
||||||
|
.setColor(supportbot.EmbedColour);
|
||||||
|
ticketChannel.send({ embeds: [Department1] });
|
||||||
|
|
||||||
|
if (supportbot.AllowTicketMentions) {
|
||||||
|
ticketChannel.send({ content: `@here` });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
i.message.edit({ embeds: [TicketMessage], components: [row2] });
|
||||||
|
|
||||||
|
if (i.customId === "Department2") {
|
||||||
|
ticketChannel.permissionOverwrites.edit(DeptRole2, {
|
||||||
|
VIEW_CHANNEL: true,
|
||||||
|
READ_MESSAGE_HISTORY: true,
|
||||||
|
SEND_MESSAGES: true,
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!supportbot.AllowStaff) {
|
||||||
|
ticketChannel.permissionOverwrites.edit(Staff, {
|
||||||
|
VIEW_CHANNEL: false,
|
||||||
|
READ_MESSAGE_HISTORY: false,
|
||||||
|
SEND_MESSAGES: false,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const Department2 = new Discord.MessageEmbed()
|
||||||
|
.setDescription(
|
||||||
|
`> Thank for reaching out to the **${supportbot.DepartmentTitle_2} Department**. Please provide us information regarding your query.`
|
||||||
|
)
|
||||||
|
.setColor(supportbot.EmbedColour);
|
||||||
|
ticketChannel.send({ embeds: [Department2] });
|
||||||
|
|
||||||
|
if (supportbot.AllowTicketMentions) {
|
||||||
|
ticketChannel.send({ content: `@here` });
|
||||||
|
}
|
||||||
|
|
||||||
|
i.message.edit({ embeds: [TicketMessage], components: [row2] });
|
||||||
|
}
|
||||||
|
if (i.customId === "Department3") {
|
||||||
|
ticketChannel.permissionOverwrites.edit(DeptRole3, {
|
||||||
|
VIEW_CHANNEL: true,
|
||||||
|
READ_MESSAGE_HISTORY: true,
|
||||||
|
SEND_MESSAGES: true,
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!supportbot.AllowStaff) {
|
||||||
|
ticketChannel.permissionOverwrites.edit(Staff, {
|
||||||
|
VIEW_CHANNEL: false,
|
||||||
|
READ_MESSAGE_HISTORY: false,
|
||||||
|
SEND_MESSAGES: false,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const Department3 = new Discord.MessageEmbed()
|
||||||
|
.setDescription(
|
||||||
|
`> Thank for reaching out to the **${supportbot.DepartmentTitle_3} Department**. Please provide us information regarding your query.`
|
||||||
|
)
|
||||||
|
.setColor(supportbot.EmbedColour);
|
||||||
|
ticketChannel.send({ embeds: [Department3] });
|
||||||
|
|
||||||
|
if (supportbot.AllowTicketMentions) {
|
||||||
|
ticketChannel.send({ content: `@here` });
|
||||||
|
}
|
||||||
|
i.message.edit({ embeds: [TicketMessage], components: [row2] });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
ticketChannel.send({ embeds: [TicketMessage], components: [row2] });
|
||||||
|
}
|
||||||
|
},
|
||||||
|
});
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
# ___ _ ___ _
|
||||||
|
# / __> _ _ ___ ___ ___ _ _ _| |_ | . > ___ _| |_
|
||||||
|
# \__ \| | || . \| . \/ . \| '_> | | | . \/ . \ | |
|
||||||
|
# <___/`___|| _/| _/\___/|_| |_| |___/\___/ |_|
|
||||||
|
# |_| |_|
|
||||||
|
#
|
||||||
|
# SupportBot created by Emerald Services
|
||||||
|
# Installed with MIT License
|
||||||
|
#
|
||||||
|
# Discord Support: https://emeraldsrv.dev/discord
|
||||||
|
# Community Resources: https://emeraldsrv.dev/resources
|
||||||
|
|
||||||
|
# -------------------------------
|
||||||
|
# Command Name Configuration
|
||||||
|
# -------------------------------
|
||||||
|
|
||||||
|
TicketAdd: "add"
|
||||||
|
TicketRemove: "remove"
|
||||||
|
OpenTicket: "ticket"
|
||||||
|
CloseTicket: "close"
|
||||||
|
InfoCommand: "info"
|
||||||
|
PingCommand: "ping"
|
||||||
|
HelpCommand: "help"
|
||||||
|
EmbedCommand: "embed"
|
||||||
|
SuggestCommand: "suggest"
|
||||||
|
|
||||||
|
# ---------------------------------------
|
||||||
|
# Command Description Configuration
|
||||||
|
# ---------------------------------------
|
||||||
|
|
||||||
|
TicketAddDesc: "Add a user to a support ticket."
|
||||||
|
TicketRemoveDesc: "Remove a user from a support ticket."
|
||||||
|
OpenTicketDesc: "Open a new support ticket."
|
||||||
|
CloseTicketDesc: "Close your support ticket."
|
||||||
|
InfoCommandDesc: "Get information about the brand."
|
||||||
|
PingCommandDesc: "Pong!"
|
||||||
|
HelpCommandDesc: "Get a list of all the commands."
|
||||||
|
EmbedCommandDesc: "Send a message as an embed."
|
||||||
|
SuggestCommandDesc: "Suggest a feature for the server."
|
||||||
@@ -1,28 +1,30 @@
|
|||||||
# ___ _ ___ _
|
# ___ _ ___ _
|
||||||
# / __> _ _ ___ ___ ___ _ _ _| |_ | . > ___ _| |_
|
# / __> _ _ ___ ___ ___ _ _ _| |_ | . > ___ _| |_
|
||||||
# \__ \| | || . \| . \/ . \| '_> | | | . \/ . \ | |
|
# \__ \| | || . \| . \/ . \| '_> | | | . \/ . \ | |
|
||||||
# <___/`___|| _/| _/\___/|_| |_| |___/\___/ |_|
|
# <___/`___|| _/| _/\___/|_| |_| |___/\___/ |_|
|
||||||
# |_| |_|
|
# |_| |_|
|
||||||
#
|
#
|
||||||
# SupportBot created by Emerald Services
|
# SupportBot created by Emerald Services
|
||||||
# Installed with MIT License
|
# Installed with MIT License
|
||||||
#
|
#
|
||||||
# Discord Support: https:#emeraldsrv.dev/discord
|
# Discord Support: https://emeraldsrv.dev/discord
|
||||||
# Community Resources: https:#emeraldsrv.dev/resources
|
# Community Resources: https://emeraldsrv.dev/resources
|
||||||
|
|
||||||
|
SupportBot_Version: "7.2"
|
||||||
|
|
||||||
# -------------------------
|
# -------------------------
|
||||||
# General Configuration
|
# General Configuration
|
||||||
# -------------------------
|
# -------------------------
|
||||||
|
|
||||||
Name: "SupportBot"
|
Name: "SupportBot"
|
||||||
Prefix: "!"
|
# No Prefix, as everything uses the new Slash (/) Commands feature!
|
||||||
Token: "BOT_TOKEN"
|
Token: "BOT_TOKEN"
|
||||||
|
|
||||||
# -------------------------
|
# -------------------------
|
||||||
# Activity Configuration
|
# Activity Configuration
|
||||||
# -------------------------
|
# -------------------------
|
||||||
|
|
||||||
BotActivity: "Need Help? -ticket"
|
BotActivity: "Need Help? /ticket"
|
||||||
|
|
||||||
StreamingURL: "https://www.twitch.tv/YOUR_TWITCH_NAME"
|
StreamingURL: "https://www.twitch.tv/YOUR_TWITCH_NAME"
|
||||||
# Set The ActivityType to "STREAMING" for a streaming status!
|
# Set The ActivityType to "STREAMING" for a streaming status!
|
||||||
@@ -39,19 +41,26 @@ EmbedFooter: "SupportBot | An Advanced Ticket System"
|
|||||||
|
|
||||||
ErrorColour: "#d12519"
|
ErrorColour: "#d12519"
|
||||||
SuccessColour: "#04b545"
|
SuccessColour: "#04b545"
|
||||||
WarningColour: "#fca117"
|
WarningColour: "#fca117"
|
||||||
|
|
||||||
# -------------------------
|
# -------------------------
|
||||||
# Information Configuration
|
# Information Configuration
|
||||||
# -------------------------
|
# -------------------------
|
||||||
|
|
||||||
InfoTitle: "Information"
|
InfoTitle: "Information"
|
||||||
AboutMe: "Hi, I'm SupportBot an advanced discord ticket bot with 100% customisation! [Download](https://emeraldsrv.dev/download)"
|
AboutMe: "Hi, I'm SupportBot an advanced discord ticket bot with 100% customization! [Download](https://emeraldsrv.dev/download)"
|
||||||
|
|
||||||
InfoButtonText: "Visit Site"
|
InfoButtonText: "Visit Site"
|
||||||
InfoURL: "https://emeraldsrv.dev"
|
InfoURL: "https://emeraldsrv.dev"
|
||||||
InfoColour: "#f74343"
|
InfoColour: "#f74343"
|
||||||
|
|
||||||
|
# -------------------------
|
||||||
|
# Help Configuration
|
||||||
|
# -------------------------
|
||||||
|
|
||||||
|
HelpMenu: true # Do not change!
|
||||||
|
SendHelpPage: "channel" # Set to channel or dm
|
||||||
|
|
||||||
# -------------------------
|
# -------------------------
|
||||||
# Role Configuration
|
# Role Configuration
|
||||||
# -------------------------
|
# -------------------------
|
||||||
@@ -60,18 +69,25 @@ AutoRole: true
|
|||||||
AutoRole_Role: "Member"
|
AutoRole_Role: "Member"
|
||||||
LockdownRole: "@everyone"
|
LockdownRole: "@everyone"
|
||||||
|
|
||||||
Staff: "Support Team"
|
Staff: "Staff"
|
||||||
Admin: "Project Developer"
|
Admin: "Project Developer"
|
||||||
TicketBlackListRole: "Blacklisted"
|
TicketBlackListRole: "Blacklisted"
|
||||||
|
|
||||||
|
# ----------------------------
|
||||||
|
# Suggestions Configuration
|
||||||
|
# ----------------------------
|
||||||
|
|
||||||
|
SuggestionChannel: "suggestions"
|
||||||
|
|
||||||
# -------------------------
|
# -------------------------
|
||||||
# Tickets Configuration
|
# Tickets Configuration
|
||||||
# -------------------------
|
# -------------------------
|
||||||
|
|
||||||
TicketCategory: "▬▬ TICKETS ▬▬"
|
TicketCategory: "Tickets"
|
||||||
TicketChannel: "ticket"
|
TicketPrefix: "ticket-" # The prefix for ticket channel names
|
||||||
|
|
||||||
TicketLog: "ticket-log"
|
TicketLog: "logs"
|
||||||
TranscriptLog: "ticket-data"
|
TranscriptLog: "transcripts"
|
||||||
|
|
||||||
TranscriptTitle: "Ticket Transcript"
|
TranscriptTitle: "Ticket Transcript"
|
||||||
TicketLog_Title: "Ticket Log"
|
TicketLog_Title: "Ticket Log"
|
||||||
@@ -85,25 +101,6 @@ AllowTicketMentions: true
|
|||||||
# Set to true to allow the ticket to mention the author and the support team.
|
# Set to true to allow the ticket to mention the author and the support team.
|
||||||
# Set to false to dis-allow mentions within tickets.
|
# Set to false to dis-allow mentions within tickets.
|
||||||
|
|
||||||
# --- Panel Config ---
|
|
||||||
# --- Start ---
|
|
||||||
|
|
||||||
ReactionChannel: "create-ticket"
|
|
||||||
ReactionEmoji: "📩"
|
|
||||||
# For cusomt emojis: <:emoji_name:EMOJI_ID>
|
|
||||||
|
|
||||||
ReactionTickets: true
|
|
||||||
ReactionMessage: "React with %reaction_emoji% to create a Support Ticket!"
|
|
||||||
|
|
||||||
ReactionPanel_Description: true
|
|
||||||
ReactionDescription: "Create a support ticket to contact a member of staff."
|
|
||||||
|
|
||||||
ReactionPanel_Thumbnail: true
|
|
||||||
ReactionThumbnail: "https://hotemoji.com/images/dl/5/ticket-emoji-by-twitter.png"
|
|
||||||
|
|
||||||
ReactionPanel_Image: true
|
|
||||||
ReactionImage: "https://wallpapercave.com/wp/wp4462546.jpg"
|
|
||||||
|
|
||||||
# --- Creation Config ---
|
# --- Creation Config ---
|
||||||
# --- Start ---
|
# --- Start ---
|
||||||
|
|
||||||
@@ -124,7 +121,6 @@ TicketCreatedAlert: ":ticket: Your support ticket has been created: <#%ticketid%
|
|||||||
AddedUser: "👍 <@%user%> has been added to this ticket"
|
AddedUser: "👍 <@%user%> has been added to this ticket"
|
||||||
RemovedUser: "👍 <@%user%> has been removed from this ticket"
|
RemovedUser: "👍 <@%user%> has been removed from this ticket"
|
||||||
|
|
||||||
|
|
||||||
# --- Buttons Config ---
|
# --- Buttons Config ---
|
||||||
# --- Start ---
|
# --- Start ---
|
||||||
|
|
||||||
@@ -157,7 +153,7 @@ TicketDept3Emoji: "3️⃣"
|
|||||||
TranscriptSavedMessage: "📝 **Transcript Saved!**"
|
TranscriptSavedMessage: "📝 **Transcript Saved!**"
|
||||||
TicketLockMessage: "❌ **Ticket Locked!**"
|
TicketLockMessage: "❌ **Ticket Locked!**"
|
||||||
TicketDeleteMessage: "⚠ **Ticket Deleting!**" # Tickets deleting after 5 seconds by default.
|
TicketDeleteMessage: "⚠ **Ticket Deleting!**" # Tickets deleting after 5 seconds by default.
|
||||||
TicketDeleteTime: 5000 # Time must be set in miliseconds.
|
TicketDeleteTime: 5000 # Time must be set in milliseconds.
|
||||||
|
|
||||||
# --- Departments Config ---
|
# --- Departments Config ---
|
||||||
# --- Start ---
|
# --- Start ---
|
||||||
@@ -165,7 +161,7 @@ TicketDeleteTime: 5000 # Time must be set in miliseconds.
|
|||||||
TicketDepartments: true
|
TicketDepartments: true
|
||||||
|
|
||||||
AllowStaff: true
|
AllowStaff: true
|
||||||
# If set to false users with the "Staff" role will not be able to view tickets
|
# If set to false users with the "Staff" role will not be able to view tickets
|
||||||
# without a valid department role set below.
|
# without a valid department role set below.
|
||||||
|
|
||||||
# Set to false to allow "Staff" to see tickets whether its a department for them or not.
|
# Set to false to allow "Staff" to see tickets whether its a department for them or not.
|
||||||
@@ -175,10 +171,10 @@ DepartmentTitle_2: "Billing Support"
|
|||||||
DepartmentTitle_3: "Admin Team"
|
DepartmentTitle_3: "Admin Team"
|
||||||
# Ticket department title, This is the title for a ticket department to help users know what is available.
|
# Ticket department title, This is the title for a ticket department to help users know what is available.
|
||||||
|
|
||||||
DepartmentRole_1: "Support Team"
|
DepartmentRole_1: "Support"
|
||||||
DepartmentRole_2: "Support Team"
|
DepartmentRole_2: "Support"
|
||||||
DepartmentRole_3: "Project Developer"
|
DepartmentRole_3: "Admin"
|
||||||
# Ticket roles are the roles that will be able to gain access to tickets depending on what department has been choosen.
|
# Ticket roles are the roles that will be able to gain access to tickets depending on what department has been chosen.
|
||||||
|
|
||||||
# --- Closing Config ---
|
# --- Closing Config ---
|
||||||
# --- Start ---
|
# --- Start ---
|
||||||
@@ -187,3 +183,12 @@ ClosingTicket: ":warning: You have requested to close your support ticket."
|
|||||||
ClosingConfirmation_Word: "confirm"
|
ClosingConfirmation_Word: "confirm"
|
||||||
CloseConfirmation: false
|
CloseConfirmation: false
|
||||||
|
|
||||||
|
# ---------------------------
|
||||||
|
# Error / Warning Messages
|
||||||
|
# ---------------------------
|
||||||
|
|
||||||
|
IncorrectPerms: ":x: **Err!** You do not have the correct permissions to use this command."
|
||||||
|
InvalidChannel: ":x: **Err!** Channel not found. Please create it!"
|
||||||
|
UserNotFound: ":x: **Err!** This user doesn't exist, Are they in this server?"
|
||||||
|
NoValidTicket: ":warning: You cannot execute this command here."
|
||||||
|
TicketExists: ":warning: This ticket cannot be opened, It already exists!"
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
# ___ _ ___ _
|
||||||
|
# / __> _ _ ___ ___ ___ _ _ _| |_ | . > ___ _| |_
|
||||||
|
# \__ \| | || . \| . \/ . \| '_> | | | . \/ . \ | |
|
||||||
|
# <___/`___|| _/| _/\___/|_| |_| |___/\___/ |_|
|
||||||
|
# |_| |_|
|
||||||
|
#
|
||||||
|
# SupportBot created by Emerald Services
|
||||||
|
# Installed with MIT License
|
||||||
|
#
|
||||||
|
# Discord Support: https://emeraldsrv.dev/discord
|
||||||
|
# Community Resources: https://emeraldsrv.dev/resources
|
||||||
|
|
||||||
|
# -------------------------------
|
||||||
|
# Ticket Panel Configuration
|
||||||
|
# -------------------------------
|
||||||
|
|
||||||
|
TicketPanel: true
|
||||||
|
|
||||||
|
# ----------------------------------------
|
||||||
|
# Ticket Panel Message Configuration
|
||||||
|
# ----------------------------------------
|
||||||
|
|
||||||
|
Channel: "create-ticket"
|
||||||
|
ButtonEmoji: "📩"
|
||||||
|
ButtonLabel: "Open Ticket"
|
||||||
|
ButtonColour: "SUCCESS"
|
||||||
|
# Colour Options:
|
||||||
|
# -> PRIMARY - Blurple
|
||||||
|
# -> SECONDARY - Grey
|
||||||
|
# -> SUCCESS - Green
|
||||||
|
# -> DANGER - Red
|
||||||
|
|
||||||
|
PanelTitle: "Need Help? Create a Support Ticket."
|
||||||
|
|
||||||
|
TicketPanel_Description: true
|
||||||
|
TicketPanel_Thumbnail: false
|
||||||
|
TicketPanel_Image: false
|
||||||
|
|
||||||
|
PanelMessage: "Click the button to open a new support ticket."
|
||||||
|
PanelThumbnail: "https://i.imgur.com/ieeZejl.png"
|
||||||
|
PanelImage: "https://i.imgur.com/5NkcmDq.png"
|
||||||
Vendored
BIN
Binary file not shown.
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"854057237495676938": {
|
"854057237495676938": {
|
||||||
"id": 8
|
"id": 2
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
TicketPanelID: ''
|
||||||
Whitespace-only changes.
@@ -0,0 +1,183 @@
|
|||||||
|
// SupportBot | Emerald Services
|
||||||
|
// Interaction Create Event
|
||||||
|
|
||||||
|
const fs = require("fs");
|
||||||
|
|
||||||
|
const Discord = require("discord.js");
|
||||||
|
const yaml = require("js-yaml");
|
||||||
|
const supportbot = yaml.load(
|
||||||
|
fs.readFileSync("./Configs/supportbot.yml", "utf8")
|
||||||
|
);
|
||||||
|
const cmdconfig = yaml.load(fs.readFileSync("./Configs/commands.yml", "utf8"));
|
||||||
|
|
||||||
|
const Event = require("../Structures/Event.js");
|
||||||
|
|
||||||
|
module.exports = new Event("interactionCreate", (client, interaction) => {
|
||||||
|
if (interaction.isCommand()) {
|
||||||
|
const command = client.commands.find(
|
||||||
|
(cmd) => cmd.name.toLowerCase() == interaction.commandName
|
||||||
|
);
|
||||||
|
|
||||||
|
if (interaction.user.bot || !interaction.isCommand() || !interaction.guild)
|
||||||
|
return;
|
||||||
|
|
||||||
|
const NotValid = new Discord.MessageEmbed()
|
||||||
|
.setDescription(`:x: \`Invalid Command\` `)
|
||||||
|
.setColor(supportbot.ErrorColour);
|
||||||
|
|
||||||
|
if (!command)
|
||||||
|
return interaction.reply({
|
||||||
|
embeds: [NotValid],
|
||||||
|
});
|
||||||
|
|
||||||
|
const permission = interaction.member.permissions.has(command.permission);
|
||||||
|
|
||||||
|
const ValidPerms = new Discord.MessageEmbed()
|
||||||
|
.setDescription(
|
||||||
|
":x: `Invalid Permissions` Do you have the correct permissions to execute this command?"
|
||||||
|
)
|
||||||
|
.setColor(supportbot.ErrorColour);
|
||||||
|
|
||||||
|
if (!permission)
|
||||||
|
return interaction.reply({
|
||||||
|
embeds: [ValidPerms],
|
||||||
|
});
|
||||||
|
interaction.user = interaction.user;
|
||||||
|
command.run(interaction);
|
||||||
|
}
|
||||||
|
if (interaction.isButton()) {
|
||||||
|
if (interaction.customId === "openticket") {
|
||||||
|
try {
|
||||||
|
const cmd = client.commands.get(cmdconfig.OpenTicket);
|
||||||
|
if (!cmd) return;
|
||||||
|
cmd.run(interaction);
|
||||||
|
} catch (error) {
|
||||||
|
console.error(error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (interaction.customId === "ticketclose") {
|
||||||
|
if (interaction.channel.name.startsWith(`${supportbot.TicketPrefix}`)) {
|
||||||
|
interaction.message.fetch();
|
||||||
|
interaction.deferUpdate();
|
||||||
|
const DeleteTicketEmbed = new Discord.MessageEmbed()
|
||||||
|
.setDescription(supportbot.TicketDeleteMessage)
|
||||||
|
.setColor(supportbot.EmbedColour);
|
||||||
|
interaction.channel.send({ embeds: [DeleteTicketEmbed] });
|
||||||
|
|
||||||
|
let logChannel =
|
||||||
|
interaction.guild.channels.cache.find(
|
||||||
|
(channel) => channel.name === supportbot.TranscriptLog
|
||||||
|
) ||
|
||||||
|
interaction.guild.channels.cache.find(
|
||||||
|
(channel) => channel.id === supportbot.TranscriptLog
|
||||||
|
);
|
||||||
|
|
||||||
|
let user = interaction.user;
|
||||||
|
let name = interaction.channel.name;
|
||||||
|
let ticketChannel = interaction.channel;
|
||||||
|
let reason = "No Reason Provided.";
|
||||||
|
|
||||||
|
interaction.channel
|
||||||
|
.send({ content: `**${supportbot.ClosingTicket}**` })
|
||||||
|
.then(() => {
|
||||||
|
const logEmbed = new Discord.MessageEmbed()
|
||||||
|
.setTitle(supportbot.TranscriptTitle)
|
||||||
|
.setColor(supportbot.EmbedColour)
|
||||||
|
.setFooter(supportbot.EmbedFooter)
|
||||||
|
.addField("Closed By", user.username)
|
||||||
|
.addField("Reason", reason);
|
||||||
|
|
||||||
|
interaction.channel.messages.fetch({ limit: 100 }).then((msgs) => {
|
||||||
|
let html = "";
|
||||||
|
|
||||||
|
msgs = msgs.sort(
|
||||||
|
(a, b) => a.createdTimestamp - b.createdTimestamp
|
||||||
|
);
|
||||||
|
html += `<style>* {background-color: #2c2f33;color: #fff;font-family: Arial, Helvetica, sans-serif;}</style>`;
|
||||||
|
html += `<strong>Server Name:</strong> ${interaction.guild.name}<br>`;
|
||||||
|
html += `<strong>Ticket:</strong> ${ticketChannel.name}<br>`;
|
||||||
|
html += `<strong>Message:</strong> ${msgs.size} Messages<br><br><br>`;
|
||||||
|
|
||||||
|
msgs.forEach((msg) => {
|
||||||
|
if (msg.content) {
|
||||||
|
html += `<strong>User:</strong> ${msg.author.tag}<br>`;
|
||||||
|
html += `<strong>Message:</strong> ${msg.content}<br>`;
|
||||||
|
html += `-----<br><br>`;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const TranscriptSavedEmbed = new Discord.MessageEmbed()
|
||||||
|
.setDescription(supportbot.TranscriptSavedMessage)
|
||||||
|
.setColor(supportbot.SuccessColour);
|
||||||
|
interaction.channel.send({ embeds: [TranscriptSavedEmbed] });
|
||||||
|
|
||||||
|
let file = new Discord.MessageAttachment(
|
||||||
|
Buffer.from(html),
|
||||||
|
`${name}.html`
|
||||||
|
);
|
||||||
|
logChannel.send({ embeds: [logEmbed], files: [file] });
|
||||||
|
|
||||||
|
setTimeout(
|
||||||
|
() => interaction.channel.delete(),
|
||||||
|
supportbot.TicketDeleteTime
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (interaction.customId === "ticketlock") {
|
||||||
|
if (interaction.channel.name.startsWith(`${supportbot.TicketPrefix}`)) {
|
||||||
|
interaction.message.fetch();
|
||||||
|
interaction.deferUpdate();
|
||||||
|
let Admin =
|
||||||
|
interaction.guild.roles.cache.find(
|
||||||
|
(AdminUser) => AdminUser.name === supportbot.Admin
|
||||||
|
) ||
|
||||||
|
interaction.guild.roles.cache.find(
|
||||||
|
(AdminUser) => AdminUser.id === supportbot.Admin
|
||||||
|
);
|
||||||
|
let all = interaction.channel.permissionOverwrites.cache;
|
||||||
|
|
||||||
|
let parent =
|
||||||
|
interaction.guild.channels.cache.find(
|
||||||
|
(c) => c.name === `${supportbot.LockTicketCategory}`
|
||||||
|
) ||
|
||||||
|
interaction.guild.channels.cache.find(
|
||||||
|
(c) => c.id === `${supportbot.LockTicketCategory}`
|
||||||
|
);
|
||||||
|
if (parent) {
|
||||||
|
interaction.channel.setParent(parent.id);
|
||||||
|
}
|
||||||
|
|
||||||
|
all.forEach((perm) => {
|
||||||
|
interaction.channel.permissionOverwrites.delete(perm.id);
|
||||||
|
});
|
||||||
|
interaction.channel.permissionOverwrites.create(Admin.id, {
|
||||||
|
VIEW_CHANNEL: true,
|
||||||
|
});
|
||||||
|
|
||||||
|
interaction.channel.permissionOverwrites.create(interaction.guild.id, {
|
||||||
|
VIEW_CHANNEL: false,
|
||||||
|
});
|
||||||
|
|
||||||
|
const ticketDeleteButton = new Discord.MessageButton()
|
||||||
|
.setCustomId("ticketclose")
|
||||||
|
.setLabel("Close")
|
||||||
|
.setStyle(supportbot.TicketDeleteColour)
|
||||||
|
.setEmoji(supportbot.TicketDeleteEmoji);
|
||||||
|
|
||||||
|
const row = new Discord.MessageActionRow().addComponents(
|
||||||
|
ticketDeleteButton
|
||||||
|
);
|
||||||
|
const ArchiveEmbed = new Discord.MessageEmbed()
|
||||||
|
.setTitle("Archived")
|
||||||
|
.setDescription(`Archived ${interaction.channel.name}`)
|
||||||
|
.setColor(`${supportbot.SuccessColour}`);
|
||||||
|
|
||||||
|
interaction.channel.send({ embeds: [ArchiveEmbed] });
|
||||||
|
interaction.message.edit({ components: [row] });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
+131
@@ -0,0 +1,131 @@
|
|||||||
|
// SupportBot | Emerald Services
|
||||||
|
// Ready Event
|
||||||
|
|
||||||
|
const fs = require("fs");
|
||||||
|
|
||||||
|
const Discord = require("discord.js");
|
||||||
|
const yaml = require("js-yaml");
|
||||||
|
const supportbot = yaml.load(
|
||||||
|
fs.readFileSync("./Configs/supportbot.yml", "utf8")
|
||||||
|
);
|
||||||
|
const panelconfig = yaml.load(
|
||||||
|
fs.readFileSync("./Configs/ticket-panel.yml", "utf8")
|
||||||
|
);
|
||||||
|
|
||||||
|
const Event = require("../Structures/Event.js");
|
||||||
|
|
||||||
|
module.exports = new Event("ready", (client) => {
|
||||||
|
client.user.setActivity(supportbot.BotActivity, {
|
||||||
|
type: supportbot.ActivityType,
|
||||||
|
url: supportbot.StreamingURL,
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log(`\u001b[32m`, `┏━━━┓╋╋╋╋╋╋╋╋╋╋╋╋╋┏┓┏━━┓╋╋╋┏┓`);
|
||||||
|
console.log(`\u001b[32m`, `┃┏━┓┃╋╋╋╋╋╋╋╋╋╋╋╋┏┛┗┫┏┓┃╋╋┏┛┗┓`);
|
||||||
|
console.log(`\u001b[32m`, `┃┗━━┳┓┏┳━━┳━━┳━━┳┻┓┏┫┗┛┗┳━┻┓┏┛`);
|
||||||
|
console.log(`\u001b[32m`, `┗━━┓┃┃┃┃┏┓┃┏┓┃┏┓┃┏┫┃┃┏━┓┃┏┓┃┃`);
|
||||||
|
console.log(`\u001b[32m`, `┃┗━┛┃┗┛┃┗┛┃┗┛┃┗┛┃┃┃┗┫┗━┛┃┗┛┃┗┓`);
|
||||||
|
console.log(`\u001b[32m`, `┗━━━┻━━┫┏━┫┏━┻━━┻┛┗━┻━━━┻━━┻━┛`);
|
||||||
|
console.log(`\u001b[32m`, `┗╋╋╋╋╋╋╋┃┃╋┃┃`);
|
||||||
|
console.log(`\u001b[32m`, `╋╋╋╋╋╋╋┗┛╋┗┛`);
|
||||||
|
console.log(` `);
|
||||||
|
console.log(`\u001b[31m`, `――――――――――――――――――――――――――――――――――――――――――――`);
|
||||||
|
console.log(` `);
|
||||||
|
console.log(
|
||||||
|
`\u001b[33m`,
|
||||||
|
`${supportbot.Name} v${supportbot.SupportBot_Version}`,
|
||||||
|
`\u001b[36m`,
|
||||||
|
`Connected to Discord`
|
||||||
|
);
|
||||||
|
console.log(
|
||||||
|
`\u001b[33m`,
|
||||||
|
`Resources:`,
|
||||||
|
`\u001b[36m`,
|
||||||
|
`https://emeraldsrv.dev/resources`
|
||||||
|
);
|
||||||
|
console.log(
|
||||||
|
`\u001b[33m`,
|
||||||
|
`Documentation:`,
|
||||||
|
`\u001b[36m`,
|
||||||
|
`https://supportbot.emeraldsrv.dev`
|
||||||
|
);
|
||||||
|
console.log(
|
||||||
|
`\u001b[33m`,
|
||||||
|
`Discord:`,
|
||||||
|
`\u001b[36m`,
|
||||||
|
`https://emeraldsrv.dev/discord`
|
||||||
|
);
|
||||||
|
console.log(
|
||||||
|
`\u001b[33m`,
|
||||||
|
`Hosting:`,
|
||||||
|
`\u001b[36m`,
|
||||||
|
`https://emeraldsrv.dev/hosting`
|
||||||
|
);
|
||||||
|
console.log(` `);
|
||||||
|
console.log(`\u001b[37m`, `SupportBot proudly created by Emerald Services`);
|
||||||
|
console.log(` `);
|
||||||
|
console.log(`\u001b[31m`, `――――――――――――――――――――――――――――――――――――――――――――`);
|
||||||
|
|
||||||
|
if (panelconfig.TicketPanel) {
|
||||||
|
let chan1 = client.channels.cache.find(
|
||||||
|
(channel) => channel.name === panelconfig.Channel
|
||||||
|
);
|
||||||
|
|
||||||
|
if (!chan1) {
|
||||||
|
console.log(
|
||||||
|
"\u001b[33m",
|
||||||
|
"[WARN] Ticket reaction panel is not setup, You can do so via the configuration file!"
|
||||||
|
);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
const panelid = JSON.parse(
|
||||||
|
fs.readFileSync("./Data/ticket-panel-id.json", "utf8")
|
||||||
|
);
|
||||||
|
|
||||||
|
chan1.messages.fetch(panelid.TicketPanelID).catch(async (r) => {
|
||||||
|
let embed = new Discord.MessageEmbed()
|
||||||
|
.setTitle(`${panelconfig.PanelTitle}`)
|
||||||
|
.setColor(supportbot.SuccessColour)
|
||||||
|
.setFooter(supportbot.EmbedFooter);
|
||||||
|
|
||||||
|
if (panelconfig.TicketPanel_Description) {
|
||||||
|
embed.setDescription(panelconfig.PanelMessage);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (panelconfig.TicketPanel_Thumbnail) {
|
||||||
|
embed.setThumbnail(panelconfig.PanelThumbnail);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (panelconfig.TicketPanel_Image) {
|
||||||
|
embed.setImage(panelconfig.PanelImage);
|
||||||
|
}
|
||||||
|
|
||||||
|
let button = new Discord.MessageButton()
|
||||||
|
.setLabel(panelconfig.ButtonLabel)
|
||||||
|
.setCustomId("openticket")
|
||||||
|
.setStyle(panelconfig.ButtonColour);
|
||||||
|
|
||||||
|
let row = new Discord.MessageActionRow().addComponents(button);
|
||||||
|
|
||||||
|
await chan1
|
||||||
|
.send({
|
||||||
|
embeds: [embed],
|
||||||
|
components: [row],
|
||||||
|
})
|
||||||
|
.then((r) => {
|
||||||
|
let data = {
|
||||||
|
TicketPanelID: `${r.id}`,
|
||||||
|
};
|
||||||
|
fs.writeFileSync(
|
||||||
|
"./Data/ticket-panel-id.json",
|
||||||
|
JSON.stringify(data),
|
||||||
|
"utf8"
|
||||||
|
);
|
||||||
|
})
|
||||||
|
.catch((e) => {
|
||||||
|
console.log("Raw" + e);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|

|
||||||
|
|
||||||
|
## What is SupportBot?
|
||||||
|
|
||||||
|
SupportBot is an open-sourced support system for discord. It's completely free to use with high amounts of customisation to match your own brand.
|
||||||
|
|
||||||
|
## Quick Links
|
||||||
|
|
||||||
|
**|** [Discord](https://emeraldsrv.dev/discord) **|**
|
||||||
|
[Hosting](https://emeraldsrv.dev/hosting) **|**
|
||||||
|
[Documentation](https://docs.emeraldsrv.dev) **|**
|
||||||
|
[Download via Polymart](https://polymart.org/resource/supportbot-1-discord-ticket-bot.518) **|**
|
||||||
|
[Download via MC-Market](https://www.mc-market.org/resources/8940/) **|**
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
// SupportBot | Emerald Services
|
||||||
|
// Addon Structure
|
||||||
|
|
||||||
|
const fs = require("fs");
|
||||||
|
|
||||||
|
const Discord = require("discord.js");
|
||||||
|
|
||||||
|
const yaml = require("js-yaml");
|
||||||
|
const supportbot = yaml.load(
|
||||||
|
fs.readFileSync("./Configs/supportbot.yml", "utf8")
|
||||||
|
);
|
||||||
|
|
||||||
|
function RunFunction(interaction) {}
|
||||||
|
|
||||||
|
class Addon {
|
||||||
|
constructor(options) {
|
||||||
|
this.name = options.name;
|
||||||
|
this.description = options.description;
|
||||||
|
this.permission = options.permission;
|
||||||
|
this.slashCommandOptions = options.slashCommandOptions || [];
|
||||||
|
this.run = options.run;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = Addon;
|
||||||
+100
-42
@@ -8,60 +8,118 @@ const Command = require("./Command.js");
|
|||||||
const Event = require("./Event.js");
|
const Event = require("./Event.js");
|
||||||
const intents = new Discord.Intents(32767);
|
const intents = new Discord.Intents(32767);
|
||||||
|
|
||||||
const yaml = require('js-yaml');
|
const yaml = require("js-yaml");
|
||||||
const supportbot = yaml.load(fs.readFileSync('./Data/supportbot.yml', 'utf8'));
|
const supportbot = yaml.load(
|
||||||
|
fs.readFileSync("./Configs/supportbot.yml", "utf8")
|
||||||
|
);
|
||||||
|
|
||||||
class Client extends Discord.Client {
|
class Client extends Discord.Client {
|
||||||
constructor() {
|
constructor() {
|
||||||
super({ intents });
|
super({ intents });
|
||||||
|
|
||||||
this.commands = new Discord.Collection();
|
this.commands = new Discord.Collection();
|
||||||
|
}
|
||||||
|
|
||||||
this.prefix = supportbot.Prefix;
|
start(token) {
|
||||||
}
|
const commandFiles = fs
|
||||||
|
.readdirSync("./Commands")
|
||||||
|
.filter((file) => file.endsWith(".js"));
|
||||||
|
|
||||||
start(token) {
|
const addonFiles = fs
|
||||||
const commandFiles = fs.readdirSync("./Commands")
|
.readdirSync("./Addons")
|
||||||
.filter(file => file.endsWith(".js"));
|
.filter((file) => file.endsWith(".js"));
|
||||||
|
|
||||||
const commands = commandFiles.map(file => require(`../Commands/${file}`));
|
const addons = addonFiles.map((file) => require(`../Addons/${file}`));
|
||||||
|
|
||||||
commands.forEach(cmd => {
|
const commands = commandFiles.map((file) => require(`../Commands/${file}`));
|
||||||
console.log(`Command ${cmd.name} loaded`);
|
|
||||||
this.commands.set(cmd.name, cmd);
|
|
||||||
});
|
|
||||||
|
|
||||||
const slashCommands = commands
|
console.log(`\u001b[34;1m`, "▬▬▬▬▬▬▬ Commands ▬▬▬▬▬▬▬");
|
||||||
.filter(cmd => ["BOTH", "SLASH"].includes(cmd.type))
|
|
||||||
.map(cmd => ({
|
|
||||||
name: cmd.name.toLowerCase(),
|
|
||||||
description: cmd.description,
|
|
||||||
permissions: [],
|
|
||||||
options: cmd.slashCommandOptions,
|
|
||||||
defaultPermission: true
|
|
||||||
}));
|
|
||||||
|
|
||||||
this.removeAllListeners();
|
commands.forEach((cmd) => {
|
||||||
|
console.log(`\u001b[31;1m`, `${cmd.name}`, `\u001b[32;1m`, "Loaded");
|
||||||
|
this.commands.set(cmd.name, cmd);
|
||||||
|
});
|
||||||
|
|
||||||
this.on("ready", async () => {
|
addons.forEach((addon) => {
|
||||||
const cmds = await this.application.commands.set(slashCommands);
|
console.log(
|
||||||
|
`\u001b[33m`,
|
||||||
|
`[ADDON]`,
|
||||||
|
`\u001b[31;1m`,
|
||||||
|
`${addon.name}`,
|
||||||
|
`\u001b[32;1m`,
|
||||||
|
"Loaded"
|
||||||
|
);
|
||||||
|
this.commands.set(addon.name, addon);
|
||||||
|
});
|
||||||
|
|
||||||
cmds.forEach(cmd => console.log(`Slash Command ${cmd.name} registered`));
|
console.log(`\u001b[34;1m`, "▬▬▬▬▬▬▬ Commands ▬▬▬▬▬▬▬");
|
||||||
})
|
|
||||||
|
|
||||||
fs.readdirSync("./Events")
|
// Slash Commands
|
||||||
.filter(file => file.endsWith(".js"))
|
|
||||||
.forEach(file => {
|
|
||||||
/**
|
|
||||||
* @type {Event}
|
|
||||||
*/
|
|
||||||
const event = require(`../Events/${file}`);
|
|
||||||
console.log(`Event ${event.event} loaded`);
|
|
||||||
this.on(event.event, event.run.bind(null, this));
|
|
||||||
});
|
|
||||||
|
|
||||||
this.login(token);
|
const slashCommands = commands.map((cmd) => ({
|
||||||
}
|
name: cmd.name.toLowerCase(),
|
||||||
|
description: cmd.description,
|
||||||
|
permissions: [],
|
||||||
|
options: cmd.slashCommandOptions,
|
||||||
|
defaultPermission: true,
|
||||||
|
}));
|
||||||
|
|
||||||
|
const slashCommands1 = addons.map((addon) => ({
|
||||||
|
name: addon.name.toLowerCase(),
|
||||||
|
description: addon.description,
|
||||||
|
permissions: [],
|
||||||
|
options: addon.slashCommandOptions,
|
||||||
|
defaultPermission: true,
|
||||||
|
}));
|
||||||
|
|
||||||
|
this.removeAllListeners();
|
||||||
|
|
||||||
|
this.on("ready", async () => {
|
||||||
|
const allCommands = slashCommands.concat(slashCommands1);
|
||||||
|
await this.application?.commands.set(allCommands);
|
||||||
|
|
||||||
|
console.log(" ");
|
||||||
|
console.log(`\u001b[34;1m`, "▬▬▬▬▬▬▬ Slash Command ▬▬▬▬▬▬▬"),
|
||||||
|
console.log(" ");
|
||||||
|
|
||||||
|
slashCommands.forEach((cmd) =>
|
||||||
|
console.log(
|
||||||
|
`\u001b[31;1m`,
|
||||||
|
`${cmd.name}`,
|
||||||
|
`\u001b[32;1m`,
|
||||||
|
`| Slash Command Registered`
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
slashCommands1.forEach((addon) =>
|
||||||
|
console.log(
|
||||||
|
`\u001b[33m`,
|
||||||
|
`[ADDON]`,
|
||||||
|
`\u001b[31;1m`,
|
||||||
|
`${addon.name}`,
|
||||||
|
`\u001b[32;1m`,
|
||||||
|
`| Slash Command Registered`
|
||||||
|
)
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log(" ");
|
||||||
|
console.log(`\u001b[34;1m`, "▬▬▬▬▬▬▬ Events ▬▬▬▬▬▬▬");
|
||||||
|
|
||||||
|
fs.readdirSync("./Events")
|
||||||
|
.filter((file) => file.endsWith(".js"))
|
||||||
|
.forEach((file) => {
|
||||||
|
const event = require(`../Events/${file}`);
|
||||||
|
console.log(`\u001b[31;1m`, `${event.event}`, `\u001b[32;1m`, "Loaded");
|
||||||
|
|
||||||
|
this.on(event.event, event.run.bind(null, this));
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log(`\u001b[34;1m`, "▬▬▬▬▬▬▬ Events ▬▬▬▬▬▬▬");
|
||||||
|
console.log(" ");
|
||||||
|
|
||||||
|
this.login(token);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = Client;
|
module.exports = Client;
|
||||||
+13
-12
@@ -5,20 +5,21 @@ const fs = require("fs");
|
|||||||
|
|
||||||
const Discord = require("discord.js");
|
const Discord = require("discord.js");
|
||||||
|
|
||||||
const yaml = require('js-yaml');
|
const yaml = require("js-yaml");
|
||||||
const supportbot = yaml.load(fs.readFileSync('./Data/supportbot.yml', 'utf8'));
|
const supportbot = yaml.load(
|
||||||
|
fs.readFileSync("./Configs/supportbot.yml", "utf8")
|
||||||
|
);
|
||||||
|
|
||||||
function RunFunction(message, args, client) {}
|
function RunFunction(interaction) {}
|
||||||
|
|
||||||
class Command {
|
class Command {
|
||||||
constructor(options) {
|
constructor(options) {
|
||||||
this.name = options.name;
|
this.name = options.name;
|
||||||
this.description = options.description;
|
this.description = options.description;
|
||||||
this.permission = options.permission;
|
this.permission = options.permission;
|
||||||
this.type = ["BOTH", "SLASH", "TEXT"].includes(options.type) ? options.type : "TEXT";
|
this.slashCommandOptions = options.slashCommandOptions || [];
|
||||||
this.slashCommandOptions = options.slashCommandOptions || [];
|
this.run = options.run;
|
||||||
this.run = options.run;
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = Command;
|
module.exports = Command;
|
||||||
+9
-8
@@ -5,17 +5,18 @@ const fs = require("fs");
|
|||||||
|
|
||||||
const Discord = require("discord.js");
|
const Discord = require("discord.js");
|
||||||
|
|
||||||
const yaml = require('js-yaml');
|
const yaml = require("js-yaml");
|
||||||
const supportbot = yaml.load(fs.readFileSync('./Data/supportbot.yml', 'utf8'));
|
const supportbot = yaml.load(
|
||||||
|
fs.readFileSync("./Configs/supportbot.yml", "utf8")
|
||||||
|
);
|
||||||
|
|
||||||
function RunFunction(client, ...eventArgs) {}
|
function RunFunction(client, ...eventArgs) {}
|
||||||
|
|
||||||
class Event {
|
class Event {
|
||||||
|
constructor(event, runFunction) {
|
||||||
constructor(event, runFunction) {
|
this.event = event;
|
||||||
this.event = event;
|
this.run = runFunction;
|
||||||
this.run = runFunction;
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = Event;
|
module.exports = Event;
|
||||||
+59
-43
@@ -8,69 +8,85 @@ const Command = require("./Command.js");
|
|||||||
const Client = require("./Client.js");
|
const Client = require("./Client.js");
|
||||||
const Event = require("./Event.js");
|
const Event = require("./Event.js");
|
||||||
|
|
||||||
const yaml = require('js-yaml');
|
const yaml = require("js-yaml");
|
||||||
const supportbot = yaml.load(fs.readFileSync('./Data/supportbot.yml', 'utf8'));
|
const supportbot = yaml.load(
|
||||||
|
fs.readFileSync("./Configs/supportbot.yml", "utf8")
|
||||||
|
);
|
||||||
|
|
||||||
class TicketNumberID {
|
class TicketNumberID {
|
||||||
|
static pad(guildId) {
|
||||||
static pad(guildId) {
|
let n = this.get(guildId) + "";
|
||||||
let n = this.get(guildId) + '';
|
let z = "0";
|
||||||
let z = '0';
|
let width = 4;
|
||||||
let width = 4;
|
setTimeout(() => {
|
||||||
setTimeout(() => {
|
this.set(guildId, this.get(guildId) + 1);
|
||||||
this.set(guildId, this.get(guildId) + 1);
|
}, 50);
|
||||||
}, 50);
|
return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;
|
||||||
return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
static get(guildId) {
|
static get(guildId) {
|
||||||
|
let ticketnumberID = JSON.parse(
|
||||||
let ticketnumberID = JSON.parse(fs.readFileSync("./Data/TicketData.json", "utf8"));
|
fs.readFileSync("./Data/TicketData.json", "utf8")
|
||||||
|
);
|
||||||
|
|
||||||
if (!ticketnumberID[guildId]) {
|
if (!ticketnumberID[guildId]) {
|
||||||
ticketnumberID[guildId] = {
|
ticketnumberID[guildId] = {
|
||||||
id: 0
|
id: 0,
|
||||||
|
};
|
||||||
|
|
||||||
|
fs.writeFileSync(
|
||||||
|
"./Data/TicketData.json",
|
||||||
|
JSON.stringify(ticketnumberID, null, 4),
|
||||||
|
(err) => {
|
||||||
|
if (err) console.log(err);
|
||||||
}
|
}
|
||||||
|
);
|
||||||
|
|
||||||
fs.writeFileSync("./Data/TicketData.json", JSON.stringify(ticketnumberID, null, 4), err => {
|
return 0;
|
||||||
if (err) console.log(err);
|
|
||||||
});
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
return ticketnumberID[guildId].id;
|
return ticketnumberID[guildId].id;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static set(guildId, value) {
|
||||||
|
let ticketnumberID = JSON.parse(
|
||||||
|
fs.readFileSync("./Data/TicketData.json", "utf8")
|
||||||
|
);
|
||||||
|
|
||||||
static set(guildId, value) {
|
|
||||||
let ticketnumberID = JSON.parse(fs.readFileSync("./Data/TicketData.json", "utf8"));
|
|
||||||
|
|
||||||
ticketnumberID[guildId] = {
|
ticketnumberID[guildId] = {
|
||||||
id: value
|
id: value,
|
||||||
}
|
};
|
||||||
|
|
||||||
fs.writeFileSync("./Data/TicketData.json", JSON.stringify(ticketnumberID, null, 4), err => {
|
fs.writeFileSync(
|
||||||
|
"./Data/TicketData.json",
|
||||||
|
JSON.stringify(ticketnumberID, null, 4),
|
||||||
|
(err) => {
|
||||||
if (err) console.log(err);
|
if (err) console.log(err);
|
||||||
});
|
}
|
||||||
|
);
|
||||||
|
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static reset(guildId) {
|
||||||
|
let ticketnumberID = JSON.parse(
|
||||||
|
fs.readFileSync("./Data/TicketData.json", "utf8")
|
||||||
|
);
|
||||||
|
|
||||||
static reset(guildId) {
|
|
||||||
let ticketnumberID = JSON.parse(fs.readFileSync("./Data/TicketData.json", "utf8"));
|
|
||||||
|
|
||||||
ticketnumberID[guildId] = {
|
ticketnumberID[guildId] = {
|
||||||
id: 0
|
id: 0,
|
||||||
}
|
};
|
||||||
|
|
||||||
fs.writeFileSync("./Data/TicketData.json", JSON.stringify(ticketnumberID, null, 4), err => {
|
fs.writeFileSync(
|
||||||
|
"./Data/TicketData.json",
|
||||||
|
JSON.stringify(ticketnumberID, null, 4),
|
||||||
|
(err) => {
|
||||||
if (err) console.log(err);
|
if (err) console.log(err);
|
||||||
});
|
}
|
||||||
|
);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = TicketNumberID;
|
module.exports = TicketNumberID;
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
// SupportBot | Emerald Services
|
|
||||||
// Ping Command
|
|
||||||
|
|
||||||
const fs = require("fs");
|
|
||||||
|
|
||||||
const Discord = require("discord.js");
|
|
||||||
const yaml = require('js-yaml');
|
|
||||||
const supportbot = yaml.load(fs.readFileSync('./Data/supportbot.yml', 'utf8'));
|
|
||||||
|
|
||||||
const Command = require("../Structures/Command.js");
|
|
||||||
|
|
||||||
module.exports = new Command({
|
|
||||||
name: "ping",
|
|
||||||
description: "Shows the ping of the bot!",
|
|
||||||
type: "BOTH",
|
|
||||||
slashCommandOptions: [],
|
|
||||||
permission: "SEND_MESSAGES",
|
|
||||||
|
|
||||||
async run(message, args, client) {
|
|
||||||
|
|
||||||
const PingEmbed = new Discord.MessageEmbed()
|
|
||||||
.setDescription(`:ping_pong: **Ping:** \`${client.ws.ping} ms\``)
|
|
||||||
.setColor(supportbot.EmbedColour)
|
|
||||||
|
|
||||||
message.channel.send({
|
|
||||||
embeds: [PingEmbed]
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
@@ -1,244 +0,0 @@
|
|||||||
// SupportBot | Emerald Services
|
|
||||||
// Ticket Command
|
|
||||||
|
|
||||||
const fs = require("fs");
|
|
||||||
|
|
||||||
const Discord = require("discord.js");
|
|
||||||
const yaml = require('js-yaml');
|
|
||||||
const supportbot = yaml.load(fs.readFileSync('./Data/supportbot.yml', 'utf8'));
|
|
||||||
|
|
||||||
const Command = require("../Structures/Command.js");
|
|
||||||
const TicketNumberID = require('../Structures/TicketID.js');
|
|
||||||
|
|
||||||
async function asyncForEach(array, callback) {
|
|
||||||
for (let index = 0; index < array.length; index++) {
|
|
||||||
await callback(array[index], index, array);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = new Command({
|
|
||||||
name: "ticket",
|
|
||||||
description: "Creates a support ticket",
|
|
||||||
type: "BOTH",
|
|
||||||
slashCommandOptions: [],
|
|
||||||
permission: "SEND_MESSAGES",
|
|
||||||
|
|
||||||
async run(message, args, client) {
|
|
||||||
|
|
||||||
let reactionUser = message.guild.members.cache.get(message.author.id)
|
|
||||||
|
|
||||||
if (reactionUser.roles.cache.find(role => role.name === supportbot.TicketBlackListRole) || reactionUser.roles.cache.find(role => role.id === supportbot.TicketBlackListRole)) {
|
|
||||||
return message.channel.send({content:`<@${message.author.id}> ${supportbot.TicketBlackListMessage}`}).then(msg => {
|
|
||||||
setTimeout(() => msg.delete(), 3500)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// Ticket ID
|
|
||||||
let ticketNumberID = TicketNumberID.pad(message.guild.id);
|
|
||||||
|
|
||||||
// Ticket Subject
|
|
||||||
const TicketSubject = args || supportbot.NoTicketSubject;
|
|
||||||
|
|
||||||
const TicketExists = new Discord.MessageEmbed()
|
|
||||||
.setTitle("Ticket Exists!")
|
|
||||||
.setDescription(`${supportbot.TicketExists}`)
|
|
||||||
.setColor(supportbot.WarningColour)
|
|
||||||
|
|
||||||
if (message.guild.channels.cache.find(ticketChannel => ticketChannel.name === `${supportbot.TicketChannel}-${ticketNumberID}`)) {
|
|
||||||
return message.channel.send({ embeds: [TicketExists] });
|
|
||||||
}
|
|
||||||
const Staff = message.guild.roles.cache.find(SupportTeam => SupportTeam.name === supportbot.Staff) || message.guild.roles.cache.find(SupportTeam => SupportTeam.id === supportbot.Staff)
|
|
||||||
const Admins = message.guild.roles.cache.find(AdminUser => AdminUser.name === supportbot.Admin) || message.guild.roles.cache.find(AdminUser => AdminUser.id === supportbot.Admin)
|
|
||||||
const DeptRole1 = message.guild.roles.cache.find(DepartmentRole => DepartmentRole.name === `${supportbot.DepartmentRole_1}`) || message.guild.roles.cache.find(DepartmentRole => DepartmentRole.id === `${supportbot.DepartmentRole_1}`)
|
|
||||||
const DeptRole2 = message.guild.roles.cache.find(DepartmentRole => DepartmentRole.name === `${supportbot.DepartmentRole_2}`) || message.guild.roles.cache.find(DepartmentRole => DepartmentRole.id === `${supportbot.DepartmentRole_2}`)
|
|
||||||
const DeptRole3 = message.guild.roles.cache.find(DepartmentRole => DepartmentRole.name === `${supportbot.DepartmentRole_3}`) || message.guild.roles.cache.find(DepartmentRole => DepartmentRole.id === `${supportbot.DepartmentRole_3}`)
|
|
||||||
const Author = message.author
|
|
||||||
const Everyone = message.guild.id
|
|
||||||
const ticketChannel = await message.guild.channels.create(`${supportbot.TicketChannel}-${ticketNumberID}`, {
|
|
||||||
type: "GUILD_TEXT",
|
|
||||||
})
|
|
||||||
|
|
||||||
if (message.channel.name === supportbot.ReactionChannel || message.channel.id === supportbot.ReactionChannel) {
|
|
||||||
const CreatedTicket = new Discord.MessageEmbed()
|
|
||||||
.setDescription(supportbot.TicketCreatedAlert.replace(/%ticketauthor%/g, message.author.id).replace(/%ticketid%/g, ticketChannel.id).replace(/%ticketusername%/g, message.author.username))
|
|
||||||
.setColor(supportbot.EmbedColour)
|
|
||||||
message.channel.send({embeds: [CreatedTicket]}).then(msg => {
|
|
||||||
setTimeout(() => msg.delete(), 5000)
|
|
||||||
})
|
|
||||||
} else {
|
|
||||||
const CreatedTicket = new Discord.MessageEmbed()
|
|
||||||
.setDescription(supportbot.TicketCreatedAlert.replace(/%ticketauthor%/g, message.author.id).replace(/%ticketid%/g, ticketChannel.id).replace(/%ticketusername%/g, message.author.username))
|
|
||||||
.setColor(supportbot.EmbedColour)
|
|
||||||
message.channel.send({embeds: [CreatedTicket]}).then(msg => setTimeout(() => msg.delete(), 5000));
|
|
||||||
}
|
|
||||||
let AllowArr = [Staff, Staff, Admins, Author]
|
|
||||||
await asyncForEach(AllowArr, (index) => {
|
|
||||||
ticketChannel.permissionOverwrites.create(index, {VIEW_CHANNEL: true})
|
|
||||||
})
|
|
||||||
|
|
||||||
let DenyArr = [Everyone]
|
|
||||||
await asyncForEach(DenyArr, (index) => {
|
|
||||||
ticketChannel.permissionOverwrites.create(index, {VIEW_CHANNEL: false})
|
|
||||||
})
|
|
||||||
|
|
||||||
let TicketCategory = message.guild.channels.cache.find(category => category.name === supportbot.TicketCategory) || message.guild.channels.cache.find(category => category.id === supportbot.TicketCategory)
|
|
||||||
if(TicketCategory) {
|
|
||||||
ticketChannel.setParent(TicketCategory.id)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (supportbot.AllowTicketMentions) {
|
|
||||||
ticketChannel.send({content:`${message.author}`})
|
|
||||||
}
|
|
||||||
|
|
||||||
const TicketMessage = new Discord.MessageEmbed()
|
|
||||||
.setTitle(supportbot.Ticket_Title.replace(/%ticketauthor%/g, message.author.id).replace(/%ticketid%/g, ticketChannel.id).replace(/%ticketusername%/g, message.author.username))
|
|
||||||
.setDescription(supportbot.TicketMessage.replace(/%ticketauthor%/g, message.author.id).replace(/%ticketid%/g, ticketChannel.id).replace(/%ticketusername%/g, message.author.username))
|
|
||||||
.setColor(supportbot.EmbedColour)
|
|
||||||
|
|
||||||
if (supportbot.TicketSubject === "embed") {
|
|
||||||
|
|
||||||
if (TicketSubject != 'No Reason Provided.') {
|
|
||||||
TicketMessage.addFields({ name: 'Reason', value: TicketSubject })
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if (supportbot.TicketSubject === "description") {
|
|
||||||
|
|
||||||
if (TicketSubject != 'No Reason Provided.') {
|
|
||||||
ticketChannel.setTopic(`Reason: ${TicketSubject} - User ID: ${message.author.id} - Ticket: ${ticketChannel.name}`)
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if (supportbot.TicketDepartments) {
|
|
||||||
TicketMessage.addFields({ name: 'Departments', value: ` **${supportbot.DepartmentTitle_1}**\n **${supportbot.DepartmentTitle_2}**\n **${supportbot.DepartmentTitle_3}**` })
|
|
||||||
}
|
|
||||||
const CloseButton = new Discord.MessageButton()
|
|
||||||
.setCustomId('ticketclose')
|
|
||||||
.setLabel('Close')
|
|
||||||
.setStyle(supportbot.TicketCloseColour)
|
|
||||||
.setEmoji(supportbot.TicketCloseEmoji)
|
|
||||||
|
|
||||||
const LockButton = new Discord.MessageButton()
|
|
||||||
.setCustomId('ticketlock')
|
|
||||||
.setLabel('Lock')
|
|
||||||
.setStyle(supportbot.TicketLockColour)
|
|
||||||
.setEmoji(supportbot.TicketLockEmoji)
|
|
||||||
|
|
||||||
const row2 = new Discord.MessageActionRow()
|
|
||||||
.addComponents(CloseButton, LockButton)
|
|
||||||
|
|
||||||
if(supportbot.TicketDepartments) {
|
|
||||||
|
|
||||||
let DenyArr = [DeptRole1, DeptRole2, DeptRole3]
|
|
||||||
await asyncForEach(DenyArr, (index) => {
|
|
||||||
ticketChannel.permissionOverwrites.create(index, {VIEW_CHANNEL: false})
|
|
||||||
})
|
|
||||||
const Department1Button = new Discord.MessageButton()
|
|
||||||
.setCustomId('Department1')
|
|
||||||
.setLabel(`${supportbot.DepartmentTitle_1}`)
|
|
||||||
.setStyle(supportbot.TicketDept1Colour)
|
|
||||||
.setEmoji(supportbot.TicketDept1Emoji)
|
|
||||||
|
|
||||||
const Department2Button = new Discord.MessageButton()
|
|
||||||
.setCustomId('Department2')
|
|
||||||
.setLabel(`${supportbot.DepartmentTitle_2}`)
|
|
||||||
.setStyle(supportbot.TicketDept2Colour)
|
|
||||||
.setEmoji(supportbot.TicketDept2Emoji)
|
|
||||||
|
|
||||||
const Department3Button = new Discord.MessageButton()
|
|
||||||
.setCustomId('Department3')
|
|
||||||
.setLabel(`${supportbot.DepartmentTitle_3}`)
|
|
||||||
.setStyle(supportbot.TicketDept3Colour)
|
|
||||||
.setEmoji(supportbot.TicketDept3Emoji)
|
|
||||||
|
|
||||||
const row = new Discord.MessageActionRow()
|
|
||||||
.addComponents(Department1Button, Department2Button, Department3Button)
|
|
||||||
|
|
||||||
const m = await ticketChannel.send({embeds: [TicketMessage], components: [row]})
|
|
||||||
|
|
||||||
const filter = i => {
|
|
||||||
i.deferUpdate();
|
|
||||||
return i.user.id === message.author.id;
|
|
||||||
};
|
|
||||||
const collector = m.createMessageComponentCollector({ filter, max: 1, componentType: 'BUTTON', time: 60000 });
|
|
||||||
|
|
||||||
collector.on('collect',async (i) => {
|
|
||||||
|
|
||||||
if(i.customId === 'Department1') {
|
|
||||||
|
|
||||||
ticketChannel.permissionOverwrites.edit(DeptRole1, {
|
|
||||||
VIEW_CHANNEL: true,
|
|
||||||
READ_MESSAGE_HISTORY: true,
|
|
||||||
SEND_MESSAGES: true,
|
|
||||||
})
|
|
||||||
|
|
||||||
if(!supportbot.AllowStaff) {
|
|
||||||
ticketChannel.permissionOverwrites.edit(Staff, { VIEW_CHANNEL: false, READ_MESSAGE_HISTORY: false, SEND_MESSAGES: false })
|
|
||||||
}
|
|
||||||
|
|
||||||
const Department1 = new Discord.MessageEmbed()
|
|
||||||
.setDescription(`> Thank for reaching out to the **${supportbot.DepartmentTitle_1} Department**. Please provide us information regarding your query.`)
|
|
||||||
.setColor(supportbot.EmbedColour)
|
|
||||||
ticketChannel.send({ embeds: [Department1] });
|
|
||||||
|
|
||||||
if (supportbot.AllowTicketMentions) {
|
|
||||||
ticketChannel.send({content: `@here`})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
i.message.edit({embeds: [TicketMessage], components: [row2]})
|
|
||||||
|
|
||||||
if(i.customId === 'Department2') {
|
|
||||||
|
|
||||||
ticketChannel.permissionOverwrites.edit(DeptRole2, {
|
|
||||||
VIEW_CHANNEL: true,
|
|
||||||
READ_MESSAGE_HISTORY: true,
|
|
||||||
SEND_MESSAGES: true,
|
|
||||||
})
|
|
||||||
|
|
||||||
if(!supportbot.AllowStaff) {
|
|
||||||
ticketChannel.permissionOverwrites.edit(Staff, { VIEW_CHANNEL: false, READ_MESSAGE_HISTORY: false, SEND_MESSAGES: false })
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
const Department2 = new Discord.MessageEmbed()
|
|
||||||
.setDescription(`> Thank for reaching out to the **${supportbot.DepartmentTitle_2} Department**. Please provide us information regarding your query.`)
|
|
||||||
.setColor(supportbot.EmbedColour)
|
|
||||||
ticketChannel.send({ embeds: [Department2] });
|
|
||||||
|
|
||||||
if (supportbot.AllowTicketMentions) {
|
|
||||||
ticketChannel.send({content: `@here`})
|
|
||||||
}
|
|
||||||
|
|
||||||
i.message.edit({embeds: [TicketMessage], components: [row2]})
|
|
||||||
}
|
|
||||||
if(i.customId === 'Department3') {
|
|
||||||
|
|
||||||
ticketChannel.permissionOverwrites.edit(DeptRole3, {
|
|
||||||
VIEW_CHANNEL: true,
|
|
||||||
READ_MESSAGE_HISTORY: true,
|
|
||||||
SEND_MESSAGES: true,
|
|
||||||
})
|
|
||||||
|
|
||||||
if(!supportbot.AllowStaff) {
|
|
||||||
ticketChannel.permissionOverwrites.edit(Staff, { VIEW_CHANNEL: false, READ_MESSAGE_HISTORY: false, SEND_MESSAGES: false })
|
|
||||||
}
|
|
||||||
|
|
||||||
const Department3 = new Discord.MessageEmbed()
|
|
||||||
.setDescription(`> Thank for reaching out to the **${supportbot.DepartmentTitle_3} Department**. Please provide us information regarding your query.`)
|
|
||||||
.setColor(supportbot.EmbedColour)
|
|
||||||
ticketChannel.send({ embeds: [Department3] });
|
|
||||||
|
|
||||||
if (supportbot.AllowTicketMentions) {
|
|
||||||
ticketChannel.send({content: `@here`})
|
|
||||||
}
|
|
||||||
i.message.edit({embeds: [TicketMessage], components: [row2]})
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} else {
|
|
||||||
ticketChannel.send({embeds: [TicketMessage], components: [row2]})
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
});
|
|
||||||
@@ -1,45 +0,0 @@
|
|||||||
// SupportBot | Emerald Services
|
|
||||||
// Interaction Create Event
|
|
||||||
|
|
||||||
const fs = require("fs");
|
|
||||||
|
|
||||||
const Discord = require("discord.js");
|
|
||||||
const yaml = require('js-yaml');
|
|
||||||
const supportbot = yaml.load(fs.readFileSync('./Data/supportbot.yml', 'utf8'));
|
|
||||||
|
|
||||||
const Event = require("../Structures/Event.js");
|
|
||||||
|
|
||||||
module.exports = new Event("interactionCreate", (client, interaction) => {
|
|
||||||
if (interaction.user.bot || !interaction.isCommand() || !interaction.guild)
|
|
||||||
return;
|
|
||||||
|
|
||||||
const args = [
|
|
||||||
interaction.commandName,
|
|
||||||
...client.commands
|
|
||||||
.find(cmd => cmd.name.toLowerCase() == interaction.commandName)
|
|
||||||
.slashCommandOptions.map(v => `${interaction.options.get(v.name).value}`)
|
|
||||||
];
|
|
||||||
|
|
||||||
const command = client.commands.find(cmd => cmd.name.toLowerCase() == interaction.commandName);
|
|
||||||
|
|
||||||
const NotValid = new Discord.MessageEmbed()
|
|
||||||
.setDescription(`:x: \`Invalid Command\` `)
|
|
||||||
.setColor(supportbot.ErrorColour)
|
|
||||||
|
|
||||||
if (!command) return interaction.reply({
|
|
||||||
embeds: [NotValid]
|
|
||||||
});
|
|
||||||
|
|
||||||
const permission = interaction.member.permissions.has(command.permission);
|
|
||||||
|
|
||||||
const ValidPerms = new Discord.MessageEmbed()
|
|
||||||
.setDescription(":x: \`Invalid Permissions\` Do you have the correct permissions to execute this command?")
|
|
||||||
.setColor(supportbot.ErrorColour)
|
|
||||||
|
|
||||||
if (!permission)
|
|
||||||
return interaction.reply({
|
|
||||||
embeds: [ValidPerms]
|
|
||||||
});
|
|
||||||
|
|
||||||
command.run(interaction, args, client);
|
|
||||||
});
|
|
||||||
@@ -1,50 +0,0 @@
|
|||||||
// SupportBot | Emerald Services
|
|
||||||
// Message Create Event
|
|
||||||
|
|
||||||
const fs = require("fs");
|
|
||||||
|
|
||||||
const Discord = require("discord.js");
|
|
||||||
const yaml = require('js-yaml');
|
|
||||||
const supportbot = yaml.load(fs.readFileSync('./Data/supportbot.yml', 'utf8'));
|
|
||||||
|
|
||||||
const Event = require("../Structures/Event.js");
|
|
||||||
|
|
||||||
module.exports = new Event("messageCreate", (client, message) => {
|
|
||||||
if (message.author.bot) return;
|
|
||||||
|
|
||||||
if (!message.content.startsWith(client.prefix)) return;
|
|
||||||
|
|
||||||
const args = message.content.substring(client.prefix.length).split(/ +/);
|
|
||||||
|
|
||||||
const command = client.commands.find(cmd => cmd.name == args[0]);
|
|
||||||
|
|
||||||
const NotValid = new Discord.MessageEmbed()
|
|
||||||
.setDescription(`:x: \`${args[0]}\` is an Invalid Command `)
|
|
||||||
.setColor(supportbot.ErrorColour)
|
|
||||||
|
|
||||||
if (!command) return message.reply({
|
|
||||||
embeds: [NotValid]
|
|
||||||
});
|
|
||||||
|
|
||||||
const OnlySlashCmd = new Discord.MessageEmbed()
|
|
||||||
.setDescription(`:warning: That command is only useable as a \`Slash Command\` `)
|
|
||||||
.setColor(supportbot.WarnColour)
|
|
||||||
|
|
||||||
if (!["BOTH", "TEXT"].includes(command.type))
|
|
||||||
return message.reply({
|
|
||||||
embeds: [OnlySlashCmd]
|
|
||||||
})
|
|
||||||
|
|
||||||
const permission = message.member.permissions.has(command.permission, true);
|
|
||||||
|
|
||||||
const ValidPerms = new Discord.MessageEmbed()
|
|
||||||
.setDescription(":x: Do you have the \`${command.permission}\` permissions to execute this command?")
|
|
||||||
.setColor(supportbot.ErrorColour)
|
|
||||||
|
|
||||||
if (!permission)
|
|
||||||
return message.reply(
|
|
||||||
`You do not have the permission \`${command.permission}\` to run this command!`
|
|
||||||
);
|
|
||||||
|
|
||||||
command.run(message, args, client);
|
|
||||||
});
|
|
||||||
@@ -1,32 +0,0 @@
|
|||||||
// SupportBot | Emerald Services
|
|
||||||
// Ready Event
|
|
||||||
|
|
||||||
const fs = require("fs");
|
|
||||||
|
|
||||||
const Discord = require("discord.js");
|
|
||||||
const yaml = require('js-yaml');
|
|
||||||
const supportbot = yaml.load(fs.readFileSync('./Data/supportbot.yml', 'utf8'));
|
|
||||||
|
|
||||||
const Event = require("../Structures/Event.js");
|
|
||||||
|
|
||||||
module.exports = new Event("ready", client => {
|
|
||||||
console.log(`\u001b[32m`, `┏━━━┓╋╋╋╋╋╋╋╋╋╋╋╋╋┏┓┏━━┓╋╋╋┏┓`)
|
|
||||||
console.log(`\u001b[32m`, `┃┏━┓┃╋╋╋╋╋╋╋╋╋╋╋╋┏┛┗┫┏┓┃╋╋┏┛┗┓`)
|
|
||||||
console.log(`\u001b[32m`, `┃┗━━┳┓┏┳━━┳━━┳━━┳┻┓┏┫┗┛┗┳━┻┓┏┛`)
|
|
||||||
console.log(`\u001b[32m`, `┗━━┓┃┃┃┃┏┓┃┏┓┃┏┓┃┏┫┃┃┏━┓┃┏┓┃┃`)
|
|
||||||
console.log(`\u001b[32m`, `┃┗━┛┃┗┛┃┗┛┃┗┛┃┗┛┃┃┃┗┫┗━┛┃┗┛┃┗┓`)
|
|
||||||
console.log(`\u001b[32m`, `┗━━━┻━━┫┏━┫┏━┻━━┻┛┗━┻━━━┻━━┻━┛`)
|
|
||||||
console.log(`\u001b[32m`, `┗╋╋╋╋╋╋╋┃┃╋┃┃`)
|
|
||||||
console.log(`\u001b[32m`, `╋╋╋╋╋╋╋┗┛╋┗┛`)
|
|
||||||
console.log(` `)
|
|
||||||
console.log(`\u001b[31m`, `――――――――――――――――――――――――――――――――――――――――――――`)
|
|
||||||
console.log(` `)
|
|
||||||
console.log(`\u001b[33m`, `${supportbot.Bot_Name} v${supportbot.SupportBot_Version}`, `\u001b[36m`, `Connected to Discord`)
|
|
||||||
console.log(`\u001b[33m`, `Documentation:`, `\u001b[36m`, `https://supportbot.emeraldsrv.dev`)
|
|
||||||
console.log(`\u001b[33m`, `Discord:`, `\u001b[36m`, `https://emeraldsrv.dev/discord`)
|
|
||||||
console.log(`\u001b[33m`, `Hosting:`, `\u001b[36m`, `https://emeraldsrv.dev/hosting`)
|
|
||||||
console.log(` `)
|
|
||||||
console.log(`\u001b[37m`, `SupportBot proudly created by Emerald Services`)
|
|
||||||
console.log(` `)
|
|
||||||
console.log(`\u001b[31m`, `――――――――――――――――――――――――――――――――――――――――――――`)
|
|
||||||
});
|
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
// ___ _ ___ _
|
// ___ _ ___ _
|
||||||
// / __> _ _ ___ ___ ___ _ _ _| |_ | . > ___ _| |_
|
// / __> _ _ ___ ___ ___ _ _ _| |_ | . > ___ _| |_
|
||||||
// \__ \| | || . \| . \/ . \| '_> | | | . \/ . \ | |
|
// \__ \| | || . \| . \/ . \| '_> | | | . \/ . \ | |
|
||||||
// <___/`___|| _/| _/\___/|_| |_| |___/\___/ |_|
|
// <___/`___|| _/| _/\___/|_| |_| |___/\___/ |_|
|
||||||
// |_| |_|
|
// |_| |_|
|
||||||
//
|
//
|
||||||
// SupportBot created by Emerald Services
|
// SupportBot created by Emerald Services
|
||||||
// Installed with MIT License
|
// Installed with MIT License
|
||||||
@@ -13,12 +13,12 @@
|
|||||||
const fs = require("fs");
|
const fs = require("fs");
|
||||||
|
|
||||||
const Discord = require("discord.js");
|
const Discord = require("discord.js");
|
||||||
const yaml = require('js-yaml');
|
const yaml = require("js-yaml");
|
||||||
const supportbot = yaml.load(fs.readFileSync('./Data/supportbot.yml', 'utf8'));
|
const supportbot = yaml.load(
|
||||||
|
fs.readFileSync("./Configs/supportbot.yml", "utf8")
|
||||||
|
);
|
||||||
|
|
||||||
const Client = require("./Structures/Client.js");
|
const Client = require("./Structures/Client.js");
|
||||||
const client = new Client({});
|
const client = new Client({});
|
||||||
|
|
||||||
client.start(supportbot.Token);
|
client.start(supportbot.Token);
|
||||||
|
|
||||||
|
|
||||||
-1
@@ -1 +0,0 @@
|
|||||||
../js-yaml/bin/js-yaml.js
|
|
||||||
-297
@@ -1,297 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "supportbot",
|
|
||||||
"version": "7.2.0",
|
|
||||||
"lockfileVersion": 2,
|
|
||||||
"requires": true,
|
|
||||||
"packages": {
|
|
||||||
"node_modules/@discordjs/builders": {
|
|
||||||
"version": "0.5.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-0.5.0.tgz",
|
|
||||||
"integrity": "sha512-HP5y4Rqw68o61Qv4qM5tVmDbWi4mdTFftqIOGRo33SNPpLJ1Ga3KEIR2ibKofkmsoQhEpLmopD1AZDs3cKpHuw==",
|
|
||||||
"dependencies": {
|
|
||||||
"@sindresorhus/is": "^4.0.1",
|
|
||||||
"discord-api-types": "^0.22.0",
|
|
||||||
"ow": "^0.27.0",
|
|
||||||
"ts-mixer": "^6.0.0",
|
|
||||||
"tslib": "^2.3.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=14.0.0",
|
|
||||||
"npm": ">=7.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@discordjs/collection": {
|
|
||||||
"version": "0.2.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.2.1.tgz",
|
|
||||||
"integrity": "sha512-vhxqzzM8gkomw0TYRF3tgx7SwElzUlXT/Aa41O7mOcyN6wIJfj5JmDWaO5XGKsGSsNx7F3i5oIlrucCCWV1Nog==",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=14.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@discordjs/form-data": {
|
|
||||||
"version": "3.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/@discordjs/form-data/-/form-data-3.0.1.tgz",
|
|
||||||
"integrity": "sha512-ZfFsbgEXW71Rw/6EtBdrP5VxBJy4dthyC0tpQKGKmYFImlmmrykO14Za+BiIVduwjte0jXEBlhSKf0MWbFp9Eg==",
|
|
||||||
"dependencies": {
|
|
||||||
"asynckit": "^0.4.0",
|
|
||||||
"combined-stream": "^1.0.8",
|
|
||||||
"mime-types": "^2.1.12"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 6"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@sapphire/async-queue": {
|
|
||||||
"version": "1.1.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.1.4.tgz",
|
|
||||||
"integrity": "sha512-fFrlF/uWpGOX5djw5Mu2Hnnrunao75WGey0sP0J3jnhmrJ5TAPzHYOmytD5iN/+pMxS+f+u/gezqHa9tPhRHEA==",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=14",
|
|
||||||
"npm": ">=6"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@sindresorhus/is": {
|
|
||||||
"version": "4.2.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.2.0.tgz",
|
|
||||||
"integrity": "sha512-VkE3KLBmJwcCaVARtQpfuKcKv8gcBmUubrfHGF84dXuuW6jgsRYxPtzcIhPyK9WAPpRt2/xY6zkD9MnRaJzSyw==",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=10"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/sindresorhus/is?sponsor=1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@types/node": {
|
|
||||||
"version": "16.10.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-16.10.2.tgz",
|
|
||||||
"integrity": "sha512-zCclL4/rx+W5SQTzFs9wyvvyCwoK9QtBpratqz2IYJ3O8Umrn0m3nsTv0wQBk9sRGpvUe9CwPDrQFB10f1FIjQ=="
|
|
||||||
},
|
|
||||||
"node_modules/@types/ws": {
|
|
||||||
"version": "7.4.7",
|
|
||||||
"resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.4.7.tgz",
|
|
||||||
"integrity": "sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==",
|
|
||||||
"dependencies": {
|
|
||||||
"@types/node": "*"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/argparse": {
|
|
||||||
"version": "2.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
|
|
||||||
"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
|
|
||||||
},
|
|
||||||
"node_modules/asynckit": {
|
|
||||||
"version": "0.4.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
|
|
||||||
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
|
|
||||||
},
|
|
||||||
"node_modules/callsites": {
|
|
||||||
"version": "3.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
|
|
||||||
"integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=6"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/combined-stream": {
|
|
||||||
"version": "1.0.8",
|
|
||||||
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
|
|
||||||
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
|
|
||||||
"dependencies": {
|
|
||||||
"delayed-stream": "~1.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 0.8"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/delayed-stream": {
|
|
||||||
"version": "1.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
|
|
||||||
"integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=0.4.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/discord-api-types": {
|
|
||||||
"version": "0.22.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.22.0.tgz",
|
|
||||||
"integrity": "sha512-l8yD/2zRbZItUQpy7ZxBJwaLX/Bs2TGaCthRppk8Sw24LOIWg12t9JEreezPoYD0SQcC2htNNo27kYEpYW/Srg==",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=12"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/discord.js": {
|
|
||||||
"version": "13.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/discord.js/-/discord.js-13.1.0.tgz",
|
|
||||||
"integrity": "sha512-gxO4CXKdHpqA+WKG+f5RNnd3srTDj5uFJHgOathksDE90YNq/Qijkd2WlMgTTMS6AJoEnHxI7G9eDQHCuZ+xDA==",
|
|
||||||
"dependencies": {
|
|
||||||
"@discordjs/builders": "^0.5.0",
|
|
||||||
"@discordjs/collection": "^0.2.1",
|
|
||||||
"@discordjs/form-data": "^3.0.1",
|
|
||||||
"@sapphire/async-queue": "^1.1.4",
|
|
||||||
"@types/ws": "^7.4.7",
|
|
||||||
"discord-api-types": "^0.22.0",
|
|
||||||
"node-fetch": "^2.6.1",
|
|
||||||
"ws": "^7.5.1"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=16.6.0",
|
|
||||||
"npm": ">=7.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/dot-prop": {
|
|
||||||
"version": "6.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz",
|
|
||||||
"integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==",
|
|
||||||
"dependencies": {
|
|
||||||
"is-obj": "^2.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=10"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/sponsors/sindresorhus"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/is-obj": {
|
|
||||||
"version": "2.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz",
|
|
||||||
"integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=8"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/js-yaml": {
|
|
||||||
"version": "4.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
|
|
||||||
"integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
|
|
||||||
"dependencies": {
|
|
||||||
"argparse": "^2.0.1"
|
|
||||||
},
|
|
||||||
"bin": {
|
|
||||||
"js-yaml": "bin/js-yaml.js"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/lodash.isequal": {
|
|
||||||
"version": "4.5.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
|
|
||||||
"integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA="
|
|
||||||
},
|
|
||||||
"node_modules/mime-db": {
|
|
||||||
"version": "1.50.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.50.0.tgz",
|
|
||||||
"integrity": "sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A==",
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 0.6"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/mime-types": {
|
|
||||||
"version": "2.1.33",
|
|
||||||
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.33.tgz",
|
|
||||||
"integrity": "sha512-plLElXp7pRDd0bNZHw+nMd52vRYjLwQjygaNg7ddJ2uJtTlmnTCjWuPKxVu6//AdaRuME84SvLW91sIkBqGT0g==",
|
|
||||||
"dependencies": {
|
|
||||||
"mime-db": "1.50.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 0.6"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/node-fetch": {
|
|
||||||
"version": "2.6.5",
|
|
||||||
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.5.tgz",
|
|
||||||
"integrity": "sha512-mmlIVHJEu5rnIxgEgez6b9GgWXbkZj5YZ7fx+2r94a2E+Uirsp6HsPTPlomfdHtpt/B0cdKviwkoaM6pyvUOpQ==",
|
|
||||||
"dependencies": {
|
|
||||||
"whatwg-url": "^5.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "4.x || >=6.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/ow": {
|
|
||||||
"version": "0.27.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/ow/-/ow-0.27.0.tgz",
|
|
||||||
"integrity": "sha512-SGnrGUbhn4VaUGdU0EJLMwZWSupPmF46hnTRII7aCLCrqixTAC5eKo8kI4/XXf1eaaI8YEVT+3FeGNJI9himAQ==",
|
|
||||||
"dependencies": {
|
|
||||||
"@sindresorhus/is": "^4.0.1",
|
|
||||||
"callsites": "^3.1.0",
|
|
||||||
"dot-prop": "^6.0.1",
|
|
||||||
"lodash.isequal": "^4.5.0",
|
|
||||||
"type-fest": "^1.2.1",
|
|
||||||
"vali-date": "^1.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=12"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/sponsors/sindresorhus"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/tr46": {
|
|
||||||
"version": "0.0.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
|
|
||||||
"integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o="
|
|
||||||
},
|
|
||||||
"node_modules/ts-mixer": {
|
|
||||||
"version": "6.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.0.tgz",
|
|
||||||
"integrity": "sha512-nXIb1fvdY5CBSrDIblLn73NW0qRDk5yJ0Sk1qPBF560OdJfQp9jhl+0tzcY09OZ9U+6GpeoI9RjwoIKFIoB9MQ=="
|
|
||||||
},
|
|
||||||
"node_modules/tslib": {
|
|
||||||
"version": "2.3.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz",
|
|
||||||
"integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw=="
|
|
||||||
},
|
|
||||||
"node_modules/type-fest": {
|
|
||||||
"version": "1.4.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz",
|
|
||||||
"integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=10"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/sponsors/sindresorhus"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/vali-date": {
|
|
||||||
"version": "1.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/vali-date/-/vali-date-1.0.0.tgz",
|
|
||||||
"integrity": "sha1-G5BKWWCfsyjvB4E4Qgk09rhnCaY=",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=0.10.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/webidl-conversions": {
|
|
||||||
"version": "3.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
|
|
||||||
"integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE="
|
|
||||||
},
|
|
||||||
"node_modules/whatwg-url": {
|
|
||||||
"version": "5.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
|
|
||||||
"integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=",
|
|
||||||
"dependencies": {
|
|
||||||
"tr46": "~0.0.3",
|
|
||||||
"webidl-conversions": "^3.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/ws": {
|
|
||||||
"version": "7.5.5",
|
|
||||||
"resolved": "https://registry.npmjs.org/ws/-/ws-7.5.5.tgz",
|
|
||||||
"integrity": "sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=8.3.0"
|
|
||||||
},
|
|
||||||
"peerDependencies": {
|
|
||||||
"bufferutil": "^4.0.1",
|
|
||||||
"utf-8-validate": "^5.0.2"
|
|
||||||
},
|
|
||||||
"peerDependenciesMeta": {
|
|
||||||
"bufferutil": {
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"utf-8-validate": {
|
|
||||||
"optional": true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
-190
@@ -1,190 +0,0 @@
|
|||||||
Apache License
|
|
||||||
Version 2.0, January 2004
|
|
||||||
http://www.apache.org/licenses/
|
|
||||||
|
|
||||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
|
||||||
|
|
||||||
1. Definitions.
|
|
||||||
|
|
||||||
"License" shall mean the terms and conditions for use, reproduction,
|
|
||||||
and distribution as defined by Sections 1 through 9 of this document.
|
|
||||||
|
|
||||||
"Licensor" shall mean the copyright owner or entity authorized by
|
|
||||||
the copyright owner that is granting the License.
|
|
||||||
|
|
||||||
"Legal Entity" shall mean the union of the acting entity and all
|
|
||||||
other entities that control, are controlled by, or are under common
|
|
||||||
control with that entity. For the purposes of this definition,
|
|
||||||
"control" means (i) the power, direct or indirect, to cause the
|
|
||||||
direction or management of such entity, whether by contract or
|
|
||||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
|
||||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
|
||||||
|
|
||||||
"You" (or "Your") shall mean an individual or Legal Entity
|
|
||||||
exercising permissions granted by this License.
|
|
||||||
|
|
||||||
"Source" form shall mean the preferred form for making modifications,
|
|
||||||
including but not limited to software source code, documentation
|
|
||||||
source, and configuration files.
|
|
||||||
|
|
||||||
"Object" form shall mean any form resulting from mechanical
|
|
||||||
transformation or translation of a Source form, including but
|
|
||||||
not limited to compiled object code, generated documentation,
|
|
||||||
and conversions to other media types.
|
|
||||||
|
|
||||||
"Work" shall mean the work of authorship, whether in Source or
|
|
||||||
Object form, made available under the License, as indicated by a
|
|
||||||
copyright notice that is included in or attached to the work
|
|
||||||
(an example is provided in the Appendix below).
|
|
||||||
|
|
||||||
"Derivative Works" shall mean any work, whether in Source or Object
|
|
||||||
form, that is based on (or derived from) the Work and for which the
|
|
||||||
editorial revisions, annotations, elaborations, or other modifications
|
|
||||||
represent, as a whole, an original work of authorship. For the purposes
|
|
||||||
of this License, Derivative Works shall not include works that remain
|
|
||||||
separable from, or merely link (or bind by name) to the interfaces of,
|
|
||||||
the Work and Derivative Works thereof.
|
|
||||||
|
|
||||||
"Contribution" shall mean any work of authorship, including
|
|
||||||
the original version of the Work and any modifications or additions
|
|
||||||
to that Work or Derivative Works thereof, that is intentionally
|
|
||||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
|
||||||
or by an individual or Legal Entity authorized to submit on behalf of
|
|
||||||
the copyright owner. For the purposes of this definition, "submitted"
|
|
||||||
means any form of electronic, verbal, or written communication sent
|
|
||||||
to the Licensor or its representatives, including but not limited to
|
|
||||||
communication on electronic mailing lists, source code control systems,
|
|
||||||
and issue tracking systems that are managed by, or on behalf of, the
|
|
||||||
Licensor for the purpose of discussing and improving the Work, but
|
|
||||||
excluding communication that is conspicuously marked or otherwise
|
|
||||||
designated in writing by the copyright owner as "Not a Contribution."
|
|
||||||
|
|
||||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
|
||||||
on behalf of whom a Contribution has been received by Licensor and
|
|
||||||
subsequently incorporated within the Work.
|
|
||||||
|
|
||||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
|
||||||
this License, each Contributor hereby grants to You a perpetual,
|
|
||||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
||||||
copyright license to reproduce, prepare Derivative Works of,
|
|
||||||
publicly display, publicly perform, sublicense, and distribute the
|
|
||||||
Work and such Derivative Works in Source or Object form.
|
|
||||||
|
|
||||||
3. Grant of Patent License. Subject to the terms and conditions of
|
|
||||||
this License, each Contributor hereby grants to You a perpetual,
|
|
||||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
||||||
(except as stated in this section) patent license to make, have made,
|
|
||||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
|
||||||
where such license applies only to those patent claims licensable
|
|
||||||
by such Contributor that are necessarily infringed by their
|
|
||||||
Contribution(s) alone or by combination of their Contribution(s)
|
|
||||||
with the Work to which such Contribution(s) was submitted. If You
|
|
||||||
institute patent litigation against any entity (including a
|
|
||||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
|
||||||
or a Contribution incorporated within the Work constitutes direct
|
|
||||||
or contributory patent infringement, then any patent licenses
|
|
||||||
granted to You under this License for that Work shall terminate
|
|
||||||
as of the date such litigation is filed.
|
|
||||||
|
|
||||||
4. Redistribution. You may reproduce and distribute copies of the
|
|
||||||
Work or Derivative Works thereof in any medium, with or without
|
|
||||||
modifications, and in Source or Object form, provided that You
|
|
||||||
meet the following conditions:
|
|
||||||
|
|
||||||
(a) You must give any other recipients of the Work or
|
|
||||||
Derivative Works a copy of this License; and
|
|
||||||
|
|
||||||
(b) You must cause any modified files to carry prominent notices
|
|
||||||
stating that You changed the files; and
|
|
||||||
|
|
||||||
(c) You must retain, in the Source form of any Derivative Works
|
|
||||||
that You distribute, all copyright, patent, trademark, and
|
|
||||||
attribution notices from the Source form of the Work,
|
|
||||||
excluding those notices that do not pertain to any part of
|
|
||||||
the Derivative Works; and
|
|
||||||
|
|
||||||
(d) If the Work includes a "NOTICE" text file as part of its
|
|
||||||
distribution, then any Derivative Works that You distribute must
|
|
||||||
include a readable copy of the attribution notices contained
|
|
||||||
within such NOTICE file, excluding those notices that do not
|
|
||||||
pertain to any part of the Derivative Works, in at least one
|
|
||||||
of the following places: within a NOTICE text file distributed
|
|
||||||
as part of the Derivative Works; within the Source form or
|
|
||||||
documentation, if provided along with the Derivative Works; or,
|
|
||||||
within a display generated by the Derivative Works, if and
|
|
||||||
wherever such third-party notices normally appear. The contents
|
|
||||||
of the NOTICE file are for informational purposes only and
|
|
||||||
do not modify the License. You may add Your own attribution
|
|
||||||
notices within Derivative Works that You distribute, alongside
|
|
||||||
or as an addendum to the NOTICE text from the Work, provided
|
|
||||||
that such additional attribution notices cannot be construed
|
|
||||||
as modifying the License.
|
|
||||||
|
|
||||||
You may add Your own copyright statement to Your modifications and
|
|
||||||
may provide additional or different license terms and conditions
|
|
||||||
for use, reproduction, or distribution of Your modifications, or
|
|
||||||
for any such Derivative Works as a whole, provided Your use,
|
|
||||||
reproduction, and distribution of the Work otherwise complies with
|
|
||||||
the conditions stated in this License.
|
|
||||||
|
|
||||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
|
||||||
any Contribution intentionally submitted for inclusion in the Work
|
|
||||||
by You to the Licensor shall be under the terms and conditions of
|
|
||||||
this License, without any additional terms or conditions.
|
|
||||||
Notwithstanding the above, nothing herein shall supersede or modify
|
|
||||||
the terms of any separate license agreement you may have executed
|
|
||||||
with Licensor regarding such Contributions.
|
|
||||||
|
|
||||||
6. Trademarks. This License does not grant permission to use the trade
|
|
||||||
names, trademarks, service marks, or product names of the Licensor,
|
|
||||||
except as required for reasonable and customary use in describing the
|
|
||||||
origin of the Work and reproducing the content of the NOTICE file.
|
|
||||||
|
|
||||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
|
||||||
agreed to in writing, Licensor provides the Work (and each
|
|
||||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
||||||
implied, including, without limitation, any warranties or conditions
|
|
||||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
|
||||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
|
||||||
appropriateness of using or redistributing the Work and assume any
|
|
||||||
risks associated with Your exercise of permissions under this License.
|
|
||||||
|
|
||||||
8. Limitation of Liability. In no event and under no legal theory,
|
|
||||||
whether in tort (including negligence), contract, or otherwise,
|
|
||||||
unless required by applicable law (such as deliberate and grossly
|
|
||||||
negligent acts) or agreed to in writing, shall any Contributor be
|
|
||||||
liable to You for damages, including any direct, indirect, special,
|
|
||||||
incidental, or consequential damages of any character arising as a
|
|
||||||
result of this License or out of the use or inability to use the
|
|
||||||
Work (including but not limited to damages for loss of goodwill,
|
|
||||||
work stoppage, computer failure or malfunction, or any and all
|
|
||||||
other commercial damages or losses), even if such Contributor
|
|
||||||
has been advised of the possibility of such damages.
|
|
||||||
|
|
||||||
9. Accepting Warranty or Additional Liability. While redistributing
|
|
||||||
the Work or Derivative Works thereof, You may choose to offer,
|
|
||||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
|
||||||
or other liability obligations and/or rights consistent with this
|
|
||||||
License. However, in accepting such obligations, You may act only
|
|
||||||
on Your own behalf and on Your sole responsibility, not on behalf
|
|
||||||
of any other Contributor, and only if You agree to indemnify,
|
|
||||||
defend, and hold each Contributor harmless for any liability
|
|
||||||
incurred by, or claims asserted against, such Contributor by reason
|
|
||||||
of your accepting any such warranty or additional liability.
|
|
||||||
|
|
||||||
END OF TERMS AND CONDITIONS
|
|
||||||
|
|
||||||
Copyright 2021 Vlad Frangu
|
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
you may not use this file except in compliance with the License.
|
|
||||||
You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
See the License for the specific language governing permissions and
|
|
||||||
limitations under the License.
|
|
||||||
-33
@@ -1,33 +0,0 @@
|
|||||||
<div align="center">
|
|
||||||
<br />
|
|
||||||
<p>
|
|
||||||
<a href="https://discord.js.org"><img src="https://discord.js.org/static/logo.svg" width="546" alt="discord.js" /></a>
|
|
||||||
</p>
|
|
||||||
<br />
|
|
||||||
<p>
|
|
||||||
<a href="https://discord.gg/djs"><img src="https://img.shields.io/discord/222078108977594368?color=5865F2&logo=discord&logoColor=white" alt="Discord server" /></a>
|
|
||||||
<a href="https://github.com/discordjs/builders/actions"><img src="https://github.com/discordjs/builders/workflows/Tests/badge.svg" alt="Test status" /></a>
|
|
||||||
<a href="https://github.com/discordjs/builders/actions"><img src="https://github.com/discordjs/builders/workflows/Lint/badge.svg" alt="Lint status" /></a>
|
|
||||||
<a href="https://codecov.io/gh/discordjs/builders"><img src="https://codecov.io/gh/discordjs/builders/branch/main/graph/badge.svg" alt="Code coverage" /></a>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
## Installation
|
|
||||||
|
|
||||||
Install with [npm](https://www.npmjs.com/) / [yarn](https://yarnpkg.com) / [pnpm](https://pnpm.js.org/):
|
|
||||||
|
|
||||||
```sh
|
|
||||||
npm install @discordjs/builders
|
|
||||||
yarn add @discordjs/builders
|
|
||||||
pnpm add @discordjs/builders
|
|
||||||
```
|
|
||||||
|
|
||||||
## Contribution
|
|
||||||
|
|
||||||
See [Contributing Guide](https://github.com/discordjs/builders/blob/main/.github/CONTRIBUTING.md).
|
|
||||||
|
|
||||||
## Examples
|
|
||||||
|
|
||||||
Here are some examples for the builders and utilities you can find in this package:
|
|
||||||
|
|
||||||
- [Slash Command Builders](./docs/examples/Slash%20Command%20Builders.md)
|
|
||||||
-12
@@ -1,12 +0,0 @@
|
|||||||
export * from './messages/formatters';
|
|
||||||
export * as SlashCommandAssertions from './interactions/slashCommands/Assertions';
|
|
||||||
export * from './interactions/slashCommands/SlashCommandBuilder';
|
|
||||||
export * from './interactions/slashCommands/SlashCommandSubcommands';
|
|
||||||
export * from './interactions/slashCommands/options/boolean';
|
|
||||||
export * from './interactions/slashCommands/options/channel';
|
|
||||||
export * from './interactions/slashCommands/options/integer';
|
|
||||||
export * from './interactions/slashCommands/options/mentionable';
|
|
||||||
export * from './interactions/slashCommands/options/role';
|
|
||||||
export * from './interactions/slashCommands/options/string';
|
|
||||||
export * from './interactions/slashCommands/options/user';
|
|
||||||
//# sourceMappingURL=index.d.ts.map
|
|
||||||
-1
@@ -1 +0,0 @@
|
|||||||
{"version":3,"file":"index.d.ts","sourceRoot":"/","sources":["index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AAEtC,OAAO,KAAK,sBAAsB,MAAM,yCAAyC,CAAC;AAClF,cAAc,kDAAkD,CAAC;AACjE,cAAc,sDAAsD,CAAC;AACrE,cAAc,8CAA8C,CAAC;AAC7D,cAAc,8CAA8C,CAAC;AAC7D,cAAc,8CAA8C,CAAC;AAC7D,cAAc,kDAAkD,CAAC;AACjE,cAAc,2CAA2C,CAAC;AAC1D,cAAc,6CAA6C,CAAC;AAC5D,cAAc,2CAA2C,CAAC"}
|
|
||||||
-16
@@ -1,16 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
|
||||||
exports.SlashCommandAssertions = void 0;
|
|
||||||
const tslib_1 = require("tslib");
|
|
||||||
tslib_1.__exportStar(require("./messages/formatters"), exports);
|
|
||||||
exports.SlashCommandAssertions = tslib_1.__importStar(require("./interactions/slashCommands/Assertions"));
|
|
||||||
tslib_1.__exportStar(require("./interactions/slashCommands/SlashCommandBuilder"), exports);
|
|
||||||
tslib_1.__exportStar(require("./interactions/slashCommands/SlashCommandSubcommands"), exports);
|
|
||||||
tslib_1.__exportStar(require("./interactions/slashCommands/options/boolean"), exports);
|
|
||||||
tslib_1.__exportStar(require("./interactions/slashCommands/options/channel"), exports);
|
|
||||||
tslib_1.__exportStar(require("./interactions/slashCommands/options/integer"), exports);
|
|
||||||
tslib_1.__exportStar(require("./interactions/slashCommands/options/mentionable"), exports);
|
|
||||||
tslib_1.__exportStar(require("./interactions/slashCommands/options/role"), exports);
|
|
||||||
tslib_1.__exportStar(require("./interactions/slashCommands/options/string"), exports);
|
|
||||||
tslib_1.__exportStar(require("./interactions/slashCommands/options/user"), exports);
|
|
||||||
//# sourceMappingURL=index.js.map
|
|
||||||
-1
@@ -1 +0,0 @@
|
|||||||
{"version":3,"file":"index.js","sourceRoot":"/","sources":["index.ts"],"names":[],"mappings":";;;;AAAA,gEAAsC;AAEtC,0GAAkF;AAClF,2FAAiE;AACjE,+FAAqE;AACrE,uFAA6D;AAC7D,uFAA6D;AAC7D,uFAA6D;AAC7D,2FAAiE;AACjE,oFAA0D;AAC1D,sFAA4D;AAC5D,oFAA0D","sourcesContent":["export * from './messages/formatters';\n\nexport * as SlashCommandAssertions from './interactions/slashCommands/Assertions';\nexport * from './interactions/slashCommands/SlashCommandBuilder';\nexport * from './interactions/slashCommands/SlashCommandSubcommands';\nexport * from './interactions/slashCommands/options/boolean';\nexport * from './interactions/slashCommands/options/channel';\nexport * from './interactions/slashCommands/options/integer';\nexport * from './interactions/slashCommands/options/mentionable';\nexport * from './interactions/slashCommands/options/role';\nexport * from './interactions/slashCommands/options/string';\nexport * from './interactions/slashCommands/options/user';\n"]}
|
|
||||||
-33
@@ -1,33 +0,0 @@
|
|||||||
import mod from "./index.js";
|
|
||||||
|
|
||||||
export default mod;
|
|
||||||
export const Faces = mod.Faces;
|
|
||||||
export const SlashCommandAssertions = mod.SlashCommandAssertions;
|
|
||||||
export const SlashCommandBooleanOption = mod.SlashCommandBooleanOption;
|
|
||||||
export const SlashCommandBuilder = mod.SlashCommandBuilder;
|
|
||||||
export const SlashCommandChannelOption = mod.SlashCommandChannelOption;
|
|
||||||
export const SlashCommandIntegerOption = mod.SlashCommandIntegerOption;
|
|
||||||
export const SlashCommandMentionableOption = mod.SlashCommandMentionableOption;
|
|
||||||
export const SlashCommandRoleOption = mod.SlashCommandRoleOption;
|
|
||||||
export const SlashCommandStringOption = mod.SlashCommandStringOption;
|
|
||||||
export const SlashCommandSubcommandBuilder = mod.SlashCommandSubcommandBuilder;
|
|
||||||
export const SlashCommandSubcommandGroupBuilder = mod.SlashCommandSubcommandGroupBuilder;
|
|
||||||
export const SlashCommandUserOption = mod.SlashCommandUserOption;
|
|
||||||
export const TimestampStyles = mod.TimestampStyles;
|
|
||||||
export const blockQuote = mod.blockQuote;
|
|
||||||
export const bold = mod.bold;
|
|
||||||
export const channelMention = mod.channelMention;
|
|
||||||
export const codeBlock = mod.codeBlock;
|
|
||||||
export const formatEmoji = mod.formatEmoji;
|
|
||||||
export const hideLinkEmbed = mod.hideLinkEmbed;
|
|
||||||
export const hyperlink = mod.hyperlink;
|
|
||||||
export const inlineCode = mod.inlineCode;
|
|
||||||
export const italic = mod.italic;
|
|
||||||
export const memberNicknameMention = mod.memberNicknameMention;
|
|
||||||
export const quote = mod.quote;
|
|
||||||
export const roleMention = mod.roleMention;
|
|
||||||
export const spoiler = mod.spoiler;
|
|
||||||
export const strikethrough = mod.strikethrough;
|
|
||||||
export const time = mod.time;
|
|
||||||
export const underscore = mod.underscore;
|
|
||||||
export const userMention = mod.userMention;
|
|
||||||
-11
@@ -1,11 +0,0 @@
|
|||||||
import type { APIApplicationCommandOptionChoice } from 'discord-api-types/v9';
|
|
||||||
import type { SlashCommandOptionBase } from './mixins/CommandOptionBase';
|
|
||||||
import type { ToAPIApplicationCommandOptions } from './SlashCommandBuilder';
|
|
||||||
import type { SlashCommandSubcommandBuilder, SlashCommandSubcommandGroupBuilder } from './SlashCommandSubcommands';
|
|
||||||
export declare function validateRequiredParameters(name: string, description: string, options: ToAPIApplicationCommandOptions[]): void;
|
|
||||||
export declare function validateName(name: unknown): asserts name is string;
|
|
||||||
export declare function validateDescription(description: unknown): asserts description is string;
|
|
||||||
export declare function validateMaxOptionsLength(options: unknown): asserts options is ToAPIApplicationCommandOptions[];
|
|
||||||
export declare function validateMaxChoicesLength(choices: APIApplicationCommandOptionChoice[]): void;
|
|
||||||
export declare function assertReturnOfBuilder<T extends SlashCommandOptionBase | SlashCommandSubcommandBuilder | SlashCommandSubcommandGroupBuilder>(input: unknown, ExpectedInstanceOf: new () => T): asserts input is T;
|
|
||||||
//# sourceMappingURL=Assertions.d.ts.map
|
|
||||||
Generated
Vendored
-1
@@ -1 +0,0 @@
|
|||||||
{"version":3,"file":"Assertions.d.ts","sourceRoot":"/","sources":["interactions/slashCommands/Assertions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,sBAAsB,CAAC;AAE9E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACzE,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,uBAAuB,CAAC;AAC5E,OAAO,KAAK,EAAE,6BAA6B,EAAE,kCAAkC,EAAE,MAAM,2BAA2B,CAAC;AAEnH,wBAAgB,0BAA0B,CACzC,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,8BAA8B,EAAE,QAUzC;AAUD,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,IAAI,MAAM,CAElE;AAID,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,IAAI,MAAM,CAEvF;AAID,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,8BAA8B,EAAE,CAE9G;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,iCAAiC,EAAE,QAEpF;AAED,wBAAgB,qBAAqB,CACpC,CAAC,SAAS,sBAAsB,GAAG,6BAA6B,GAAG,kCAAkC,EACpG,KAAK,EAAE,OAAO,EAAE,kBAAkB,EAAE,UAAU,CAAC,GAAG,OAAO,CAAC,KAAK,IAAI,CAAC,CAuBrE"}
|
|
||||||
-58
@@ -1,58 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
|
||||||
exports.assertReturnOfBuilder = exports.validateMaxChoicesLength = exports.validateMaxOptionsLength = exports.validateDescription = exports.validateName = exports.validateRequiredParameters = void 0;
|
|
||||||
const tslib_1 = require("tslib");
|
|
||||||
const is_1 = tslib_1.__importDefault(require("@sindresorhus/is"));
|
|
||||||
const ow_1 = tslib_1.__importDefault(require("ow"));
|
|
||||||
function validateRequiredParameters(name, description, options) {
|
|
||||||
// Assert name matches all conditions
|
|
||||||
validateName(name);
|
|
||||||
// Assert description conditions
|
|
||||||
validateDescription(description);
|
|
||||||
// Assert options conditions
|
|
||||||
validateMaxOptionsLength(options);
|
|
||||||
}
|
|
||||||
exports.validateRequiredParameters = validateRequiredParameters;
|
|
||||||
const namePredicate = ow_1.default.string.lowercase
|
|
||||||
.minLength(1)
|
|
||||||
.maxLength(32)
|
|
||||||
.addValidator({
|
|
||||||
message: (value, label) => `Expected ${label} to match "^[\\p{L}\\p{N}_-]+$", got ${value} instead`,
|
|
||||||
validator: (value) => /^[\p{L}\p{N}_-]+$/u.test(value),
|
|
||||||
});
|
|
||||||
function validateName(name) {
|
|
||||||
ow_1.default(name, 'name', namePredicate);
|
|
||||||
}
|
|
||||||
exports.validateName = validateName;
|
|
||||||
const descriptionPredicate = ow_1.default.string.minLength(1).maxLength(100);
|
|
||||||
function validateDescription(description) {
|
|
||||||
ow_1.default(description, 'description', descriptionPredicate);
|
|
||||||
}
|
|
||||||
exports.validateDescription = validateDescription;
|
|
||||||
const maxArrayLengthPredicate = ow_1.default.array.maxLength(25);
|
|
||||||
function validateMaxOptionsLength(options) {
|
|
||||||
ow_1.default(options, 'options', maxArrayLengthPredicate);
|
|
||||||
}
|
|
||||||
exports.validateMaxOptionsLength = validateMaxOptionsLength;
|
|
||||||
function validateMaxChoicesLength(choices) {
|
|
||||||
ow_1.default(choices, 'choices', maxArrayLengthPredicate);
|
|
||||||
}
|
|
||||||
exports.validateMaxChoicesLength = validateMaxChoicesLength;
|
|
||||||
function assertReturnOfBuilder(input, ExpectedInstanceOf) {
|
|
||||||
const instanceName = ExpectedInstanceOf.name;
|
|
||||||
if (is_1.default.nullOrUndefined(input)) {
|
|
||||||
throw new TypeError(`Expected to receive a ${instanceName} builder, got ${input === null ? 'null' : 'undefined'} instead.`);
|
|
||||||
}
|
|
||||||
if (is_1.default.primitive(input)) {
|
|
||||||
throw new TypeError(`Expected to receive a ${instanceName} builder, got a primitive (${typeof input}) instead.`);
|
|
||||||
}
|
|
||||||
if (!(input instanceof ExpectedInstanceOf)) {
|
|
||||||
const casted = input;
|
|
||||||
const constructorName = is_1.default.function_(input) ? input.name : casted.constructor.name;
|
|
||||||
const stringTag = Reflect.get(casted, Symbol.toStringTag);
|
|
||||||
const fullResultName = stringTag ? `${constructorName} [${stringTag}]` : constructorName;
|
|
||||||
throw new TypeError(`Expected to receive a ${instanceName} builder, got ${fullResultName} instead.`);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
exports.assertReturnOfBuilder = assertReturnOfBuilder;
|
|
||||||
//# sourceMappingURL=Assertions.js.map
|
|
||||||
Generated
Vendored
-1
@@ -1 +0,0 @@
|
|||||||
{"version":3,"file":"Assertions.js","sourceRoot":"/","sources":["interactions/slashCommands/Assertions.ts"],"names":[],"mappings":";;;;AAAA,kEAAkC;AAElC,oDAAoB;AAKpB,SAAgB,0BAA0B,CACzC,IAAY,EACZ,WAAmB,EACnB,OAAyC;IAEzC,qCAAqC;IACrC,YAAY,CAAC,IAAI,CAAC,CAAC;IAEnB,gCAAgC;IAChC,mBAAmB,CAAC,WAAW,CAAC,CAAC;IAEjC,4BAA4B;IAC5B,wBAAwB,CAAC,OAAO,CAAC,CAAC;AACnC,CAAC;AAbD,gEAaC;AAED,MAAM,aAAa,GAAG,YAAE,CAAC,MAAM,CAAC,SAAS;KACvC,SAAS,CAAC,CAAC,CAAC;KACZ,SAAS,CAAC,EAAE,CAAC;KACb,YAAY,CAAC;IACb,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,YAAY,KAAM,wCAAwC,KAAK,UAAU;IACpG,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC;CACtD,CAAC,CAAC;AAEJ,SAAgB,YAAY,CAAC,IAAa;IACzC,YAAE,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;AACjC,CAAC;AAFD,oCAEC;AAED,MAAM,oBAAoB,GAAG,YAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AAEnE,SAAgB,mBAAmB,CAAC,WAAoB;IACvD,YAAE,CAAC,WAAW,EAAE,aAAa,EAAE,oBAAoB,CAAC,CAAC;AACtD,CAAC;AAFD,kDAEC;AAED,MAAM,uBAAuB,GAAG,YAAE,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;AAEvD,SAAgB,wBAAwB,CAAC,OAAgB;IACxD,YAAE,CAAC,OAAO,EAAE,SAAS,EAAE,uBAAuB,CAAC,CAAC;AACjD,CAAC;AAFD,4DAEC;AAED,SAAgB,wBAAwB,CAAC,OAA4C;IACpF,YAAE,CAAC,OAAO,EAAE,SAAS,EAAE,uBAAuB,CAAC,CAAC;AACjD,CAAC;AAFD,4DAEC;AAED,SAAgB,qBAAqB,CAEnC,KAAc,EAAE,kBAA+B;IAChD,MAAM,YAAY,GAAG,kBAAkB,CAAC,IAAI,CAAC;IAE7C,IAAI,YAAE,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE;QAC9B,MAAM,IAAI,SAAS,CAClB,yBAAyB,YAAY,iBAAiB,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,WAAW,CACtG,CAAC;KACF;IAED,IAAI,YAAE,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;QACxB,MAAM,IAAI,SAAS,CAAC,yBAAyB,YAAY,8BAA8B,OAAO,KAAK,YAAY,CAAC,CAAC;KACjH;IAED,IAAI,CAAC,CAAC,KAAK,YAAY,kBAAkB,CAAC,EAAE;QAC3C,MAAM,MAAM,GAAG,KAAqC,CAAC;QAErD,MAAM,eAAe,GAAG,YAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC;QACnF,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,WAAW,CAAuB,CAAC;QAEhF,MAAM,cAAc,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,eAAe,KAAK,SAAS,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC;QAEzF,MAAM,IAAI,SAAS,CAAC,yBAAyB,YAAY,iBAAiB,cAAc,WAAW,CAAC,CAAC;KACrG;AACF,CAAC;AAzBD,sDAyBC","sourcesContent":["import is from '@sindresorhus/is';\nimport type { APIApplicationCommandOptionChoice } from 'discord-api-types/v9';\nimport ow from 'ow';\nimport type { SlashCommandOptionBase } from './mixins/CommandOptionBase';\nimport type { ToAPIApplicationCommandOptions } from './SlashCommandBuilder';\nimport type { SlashCommandSubcommandBuilder, SlashCommandSubcommandGroupBuilder } from './SlashCommandSubcommands';\n\nexport function validateRequiredParameters(\n\tname: string,\n\tdescription: string,\n\toptions: ToAPIApplicationCommandOptions[],\n) {\n\t// Assert name matches all conditions\n\tvalidateName(name);\n\n\t// Assert description conditions\n\tvalidateDescription(description);\n\n\t// Assert options conditions\n\tvalidateMaxOptionsLength(options);\n}\n\nconst namePredicate = ow.string.lowercase\n\t.minLength(1)\n\t.maxLength(32)\n\t.addValidator({\n\t\tmessage: (value, label) => `Expected ${label!} to match \"^[\\\\p{L}\\\\p{N}_-]+$\", got ${value} instead`,\n\t\tvalidator: (value) => /^[\\p{L}\\p{N}_-]+$/u.test(value),\n\t});\n\nexport function validateName(name: unknown): asserts name is string {\n\tow(name, 'name', namePredicate);\n}\n\nconst descriptionPredicate = ow.string.minLength(1).maxLength(100);\n\nexport function validateDescription(description: unknown): asserts description is string {\n\tow(description, 'description', descriptionPredicate);\n}\n\nconst maxArrayLengthPredicate = ow.array.maxLength(25);\n\nexport function validateMaxOptionsLength(options: unknown): asserts options is ToAPIApplicationCommandOptions[] {\n\tow(options, 'options', maxArrayLengthPredicate);\n}\n\nexport function validateMaxChoicesLength(choices: APIApplicationCommandOptionChoice[]) {\n\tow(choices, 'choices', maxArrayLengthPredicate);\n}\n\nexport function assertReturnOfBuilder<\n\tT extends SlashCommandOptionBase | SlashCommandSubcommandBuilder | SlashCommandSubcommandGroupBuilder,\n>(input: unknown, ExpectedInstanceOf: new () => T): asserts input is T {\n\tconst instanceName = ExpectedInstanceOf.name;\n\n\tif (is.nullOrUndefined(input)) {\n\t\tthrow new TypeError(\n\t\t\t`Expected to receive a ${instanceName} builder, got ${input === null ? 'null' : 'undefined'} instead.`,\n\t\t);\n\t}\n\n\tif (is.primitive(input)) {\n\t\tthrow new TypeError(`Expected to receive a ${instanceName} builder, got a primitive (${typeof input}) instead.`);\n\t}\n\n\tif (!(input instanceof ExpectedInstanceOf)) {\n\t\tconst casted = input as Record<PropertyKey, unknown>;\n\n\t\tconst constructorName = is.function_(input) ? input.name : casted.constructor.name;\n\t\tconst stringTag = Reflect.get(casted, Symbol.toStringTag) as string | undefined;\n\n\t\tconst fullResultName = stringTag ? `${constructorName} [${stringTag}]` : constructorName;\n\n\t\tthrow new TypeError(`Expected to receive a ${instanceName} builder, got ${fullResultName} instead.`);\n\t}\n}\n"]}
|
|
||||||
Generated
Vendored
-50
@@ -1,50 +0,0 @@
|
|||||||
import type { APIApplicationCommandOption } from 'discord-api-types/v9';
|
|
||||||
import { SharedNameAndDescription } from './mixins/NameAndDescription';
|
|
||||||
import { SharedSlashCommandOptions } from './mixins/CommandOptions';
|
|
||||||
import { SlashCommandSubcommandBuilder, SlashCommandSubcommandGroupBuilder } from './SlashCommandSubcommands';
|
|
||||||
export declare class SlashCommandBuilder {
|
|
||||||
/**
|
|
||||||
* The name of this slash command
|
|
||||||
*/
|
|
||||||
readonly name: string;
|
|
||||||
/**
|
|
||||||
* The description of this slash command
|
|
||||||
*/
|
|
||||||
readonly description: string;
|
|
||||||
/**
|
|
||||||
* The options of this slash command
|
|
||||||
*/
|
|
||||||
readonly options: ToAPIApplicationCommandOptions[];
|
|
||||||
/**
|
|
||||||
* Returns the final data that should be sent to Discord.
|
|
||||||
*
|
|
||||||
* **Note:** Calling this function will validate required properties based on their conditions.
|
|
||||||
*/
|
|
||||||
toJSON(): {
|
|
||||||
name: string;
|
|
||||||
description: string;
|
|
||||||
options: APIApplicationCommandOption[];
|
|
||||||
};
|
|
||||||
/**
|
|
||||||
* Adds a new subcommand group to this command
|
|
||||||
* @param input A function that returns a subcommand group builder, or an already built builder
|
|
||||||
*/
|
|
||||||
addSubcommandGroup(input: SlashCommandSubcommandGroupBuilder | ((subcommandGroup: SlashCommandSubcommandGroupBuilder) => SlashCommandSubcommandGroupBuilder)): SlashCommandSubcommandGroupsOnlyBuilder;
|
|
||||||
/**
|
|
||||||
* Adds a new subcommand to this command
|
|
||||||
* @param input A function that returns a subcommand builder, or an already built builder
|
|
||||||
*/
|
|
||||||
addSubcommand(input: SlashCommandSubcommandBuilder | ((subcommandGroup: SlashCommandSubcommandBuilder) => SlashCommandSubcommandBuilder)): SlashCommandSubcommandsOnlyBuilder;
|
|
||||||
}
|
|
||||||
export interface SlashCommandBuilder extends SharedNameAndDescription, SharedSlashCommandOptions {
|
|
||||||
}
|
|
||||||
export interface SlashCommandSubcommandsOnlyBuilder extends SharedNameAndDescription, Pick<SlashCommandBuilder, 'toJSON' | 'addSubcommand'> {
|
|
||||||
}
|
|
||||||
export interface SlashCommandSubcommandGroupsOnlyBuilder extends SharedNameAndDescription, Pick<SlashCommandBuilder, 'toJSON' | 'addSubcommandGroup'> {
|
|
||||||
}
|
|
||||||
export interface SlashCommandOptionsOnlyBuilder extends SharedNameAndDescription, SharedSlashCommandOptions, Pick<SlashCommandBuilder, 'toJSON'> {
|
|
||||||
}
|
|
||||||
export interface ToAPIApplicationCommandOptions {
|
|
||||||
toJSON(): APIApplicationCommandOption;
|
|
||||||
}
|
|
||||||
//# sourceMappingURL=SlashCommandBuilder.d.ts.map
|
|
||||||
Generated
Vendored
-1
@@ -1 +0,0 @@
|
|||||||
{"version":3,"file":"SlashCommandBuilder.d.ts","sourceRoot":"/","sources":["interactions/slashCommands/SlashCommandBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AAGxE,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,6BAA6B,EAAE,kCAAkC,EAAE,MAAM,2BAA2B,CAAC;AAE9G,qBACa,mBAAmB;IAC/B;;OAEG;IACH,SAAgB,IAAI,EAAE,MAAM,CAAc;IAE1C;;OAEG;IACH,SAAgB,WAAW,EAAE,MAAM,CAAc;IAEjD;;OAEG;IACH,SAAgB,OAAO,EAAE,8BAA8B,EAAE,CAAM;IAE/D;;;;OAIG;IACI,MAAM;;;;;IASb;;;OAGG;IACI,kBAAkB,CACxB,KAAK,EACF,kCAAkC,GAClC,CAAC,CAAC,eAAe,EAAE,kCAAkC,KAAK,kCAAkC,CAAC,GAC9F,uCAAuC;IAqB1C;;;OAGG;IACI,aAAa,CACnB,KAAK,EACF,6BAA6B,GAC7B,CAAC,CAAC,eAAe,EAAE,6BAA6B,KAAK,6BAA6B,CAAC,GACpF,kCAAkC;CAqBrC;AAED,MAAM,WAAW,mBAAoB,SAAQ,wBAAwB,EAAE,yBAAyB;CAAG;AAEnG,MAAM,WAAW,kCAChB,SAAQ,wBAAwB,EAC/B,IAAI,CAAC,mBAAmB,EAAE,QAAQ,GAAG,eAAe,CAAC;CAAG;AAE1D,MAAM,WAAW,uCAChB,SAAQ,wBAAwB,EAC/B,IAAI,CAAC,mBAAmB,EAAE,QAAQ,GAAG,oBAAoB,CAAC;CAAG;AAE/D,MAAM,WAAW,8BAChB,SAAQ,wBAAwB,EAC/B,yBAAyB,EACzB,IAAI,CAAC,mBAAmB,EAAE,QAAQ,CAAC;CAAG;AAExC,MAAM,WAAW,8BAA8B;IAC9C,MAAM,IAAI,2BAA2B,CAAC;CACtC"}
|
|
||||||
Generated
Vendored
-96
@@ -1,96 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
|
||||||
exports.SlashCommandBuilder = void 0;
|
|
||||||
const tslib_1 = require("tslib");
|
|
||||||
const ts_mixer_1 = require("ts-mixer");
|
|
||||||
const Assertions_1 = require("./Assertions");
|
|
||||||
const NameAndDescription_1 = require("./mixins/NameAndDescription");
|
|
||||||
const CommandOptions_1 = require("./mixins/CommandOptions");
|
|
||||||
const SlashCommandSubcommands_1 = require("./SlashCommandSubcommands");
|
|
||||||
let SlashCommandBuilder = class SlashCommandBuilder {
|
|
||||||
constructor() {
|
|
||||||
/**
|
|
||||||
* The name of this slash command
|
|
||||||
*/
|
|
||||||
Object.defineProperty(this, "name", {
|
|
||||||
enumerable: true,
|
|
||||||
configurable: true,
|
|
||||||
writable: true,
|
|
||||||
value: undefined
|
|
||||||
});
|
|
||||||
/**
|
|
||||||
* The description of this slash command
|
|
||||||
*/
|
|
||||||
Object.defineProperty(this, "description", {
|
|
||||||
enumerable: true,
|
|
||||||
configurable: true,
|
|
||||||
writable: true,
|
|
||||||
value: undefined
|
|
||||||
});
|
|
||||||
/**
|
|
||||||
* The options of this slash command
|
|
||||||
*/
|
|
||||||
Object.defineProperty(this, "options", {
|
|
||||||
enumerable: true,
|
|
||||||
configurable: true,
|
|
||||||
writable: true,
|
|
||||||
value: []
|
|
||||||
});
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* Returns the final data that should be sent to Discord.
|
|
||||||
*
|
|
||||||
* **Note:** Calling this function will validate required properties based on their conditions.
|
|
||||||
*/
|
|
||||||
toJSON() {
|
|
||||||
Assertions_1.validateRequiredParameters(this.name, this.description, this.options);
|
|
||||||
return {
|
|
||||||
name: this.name,
|
|
||||||
description: this.description,
|
|
||||||
options: this.options.map((option) => option.toJSON()),
|
|
||||||
};
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* Adds a new subcommand group to this command
|
|
||||||
* @param input A function that returns a subcommand group builder, or an already built builder
|
|
||||||
*/
|
|
||||||
addSubcommandGroup(input) {
|
|
||||||
const { options } = this;
|
|
||||||
// First, assert options conditions - we cannot have more than 25 options
|
|
||||||
Assertions_1.validateMaxOptionsLength(options);
|
|
||||||
// Make sure there is no subcommand at the root level - if there is, throw
|
|
||||||
const hasSubcommands = options.some((item) => item instanceof SlashCommandSubcommands_1.SlashCommandSubcommandBuilder);
|
|
||||||
if (hasSubcommands)
|
|
||||||
throw new RangeError(`You cannot mix subcommands and subcommand groups at the root level.`);
|
|
||||||
// Get the final result
|
|
||||||
const result = typeof input === 'function' ? input(new SlashCommandSubcommands_1.SlashCommandSubcommandGroupBuilder()) : input;
|
|
||||||
Assertions_1.assertReturnOfBuilder(result, SlashCommandSubcommands_1.SlashCommandSubcommandGroupBuilder);
|
|
||||||
// Push it
|
|
||||||
options.push(result);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* Adds a new subcommand to this command
|
|
||||||
* @param input A function that returns a subcommand builder, or an already built builder
|
|
||||||
*/
|
|
||||||
addSubcommand(input) {
|
|
||||||
const { options } = this;
|
|
||||||
// First, assert options conditions - we cannot have more than 25 options
|
|
||||||
Assertions_1.validateMaxOptionsLength(options);
|
|
||||||
// Make sure there is no subcommand at the root level - if there is, throw
|
|
||||||
const hasSubcommandGroups = options.some((item) => item instanceof SlashCommandSubcommands_1.SlashCommandSubcommandGroupBuilder);
|
|
||||||
if (hasSubcommandGroups)
|
|
||||||
throw new RangeError(`You cannot mix subcommands and subcommand groups at the root level.`);
|
|
||||||
// Get the final result
|
|
||||||
const result = typeof input === 'function' ? input(new SlashCommandSubcommands_1.SlashCommandSubcommandBuilder()) : input;
|
|
||||||
Assertions_1.assertReturnOfBuilder(result, SlashCommandSubcommands_1.SlashCommandSubcommandBuilder);
|
|
||||||
// Push it
|
|
||||||
options.push(result);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
SlashCommandBuilder = tslib_1.__decorate([
|
|
||||||
ts_mixer_1.mix(CommandOptions_1.SharedSlashCommandOptions, NameAndDescription_1.SharedNameAndDescription)
|
|
||||||
], SlashCommandBuilder);
|
|
||||||
exports.SlashCommandBuilder = SlashCommandBuilder;
|
|
||||||
//# sourceMappingURL=SlashCommandBuilder.js.map
|
|
||||||
Generated
Vendored
-1
@@ -1 +0,0 @@
|
|||||||
{"version":3,"file":"SlashCommandBuilder.js","sourceRoot":"/","sources":["interactions/slashCommands/SlashCommandBuilder.ts"],"names":[],"mappings":";;;;AACA,uCAA+B;AAC/B,6CAA2G;AAC3G,oEAAuE;AACvE,4DAAoE;AACpE,uEAA8G;AAG9G,IAAa,mBAAmB,GAAhC,MAAa,mBAAmB;IAAhC;QACC;;WAEG;QACH;;;;mBAA+B,SAAU;WAAC;QAE1C;;WAEG;QACH;;;;mBAAsC,SAAU;WAAC;QAEjD;;WAEG;QACH;;;;mBAA4D,EAAE;WAAC;IA0EhE,CAAC;IAxEA;;;;OAIG;IACI,MAAM;QACZ,uCAA0B,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACtE,OAAO;YACN,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;SACtD,CAAC;IACH,CAAC;IAED;;;OAGG;IACI,kBAAkB,CACxB,KAEgG;QAEhG,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QAEzB,yEAAyE;QACzE,qCAAwB,CAAC,OAAO,CAAC,CAAC;QAElC,0EAA0E;QAC1E,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,YAAY,uDAA6B,CAAC,CAAC;QAC7F,IAAI,cAAc;YAAE,MAAM,IAAI,UAAU,CAAC,qEAAqE,CAAC,CAAC;QAEhH,uBAAuB;QACvB,MAAM,MAAM,GAAG,OAAO,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,4DAAkC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAErG,kCAAqB,CAAC,MAAM,EAAE,4DAAkC,CAAC,CAAC;QAElE,UAAU;QACV,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAErB,OAAO,IAAI,CAAC;IACb,CAAC;IAED;;;OAGG;IACI,aAAa,CACnB,KAEsF;QAEtF,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QAEzB,yEAAyE;QACzE,qCAAwB,CAAC,OAAO,CAAC,CAAC;QAElC,0EAA0E;QAC1E,MAAM,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,YAAY,4DAAkC,CAAC,CAAC;QACvG,IAAI,mBAAmB;YACtB,MAAM,IAAI,UAAU,CAAC,qEAAqE,CAAC,CAAC;QAE7F,uBAAuB;QACvB,MAAM,MAAM,GAAG,OAAO,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,uDAA6B,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAEhG,kCAAqB,CAAC,MAAM,EAAE,uDAA6B,CAAC,CAAC;QAE7D,UAAU;QACV,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAErB,OAAO,IAAI,CAAC;IACb,CAAC;CACD,CAAA;AAxFY,mBAAmB;IAD/B,cAAG,CAAC,0CAAyB,EAAE,6CAAwB,CAAC;GAC5C,mBAAmB,CAwF/B;AAxFY,kDAAmB","sourcesContent":["import type { APIApplicationCommandOption } from 'discord-api-types/v9';\nimport { mix } from 'ts-mixer';\nimport { assertReturnOfBuilder, validateMaxOptionsLength, validateRequiredParameters } from './Assertions';\nimport { SharedNameAndDescription } from './mixins/NameAndDescription';\nimport { SharedSlashCommandOptions } from './mixins/CommandOptions';\nimport { SlashCommandSubcommandBuilder, SlashCommandSubcommandGroupBuilder } from './SlashCommandSubcommands';\n\n@mix(SharedSlashCommandOptions, SharedNameAndDescription)\nexport class SlashCommandBuilder {\n\t/**\n\t * The name of this slash command\n\t */\n\tpublic readonly name: string = undefined!;\n\n\t/**\n\t * The description of this slash command\n\t */\n\tpublic readonly description: string = undefined!;\n\n\t/**\n\t * The options of this slash command\n\t */\n\tpublic readonly options: ToAPIApplicationCommandOptions[] = [];\n\n\t/**\n\t * Returns the final data that should be sent to Discord.\n\t *\n\t * **Note:** Calling this function will validate required properties based on their conditions.\n\t */\n\tpublic toJSON() {\n\t\tvalidateRequiredParameters(this.name, this.description, this.options);\n\t\treturn {\n\t\t\tname: this.name,\n\t\t\tdescription: this.description,\n\t\t\toptions: this.options.map((option) => option.toJSON()),\n\t\t};\n\t}\n\n\t/**\n\t * Adds a new subcommand group to this command\n\t * @param input A function that returns a subcommand group builder, or an already built builder\n\t */\n\tpublic addSubcommandGroup(\n\t\tinput:\n\t\t\t| SlashCommandSubcommandGroupBuilder\n\t\t\t| ((subcommandGroup: SlashCommandSubcommandGroupBuilder) => SlashCommandSubcommandGroupBuilder),\n\t): SlashCommandSubcommandGroupsOnlyBuilder {\n\t\tconst { options } = this;\n\n\t\t// First, assert options conditions - we cannot have more than 25 options\n\t\tvalidateMaxOptionsLength(options);\n\n\t\t// Make sure there is no subcommand at the root level - if there is, throw\n\t\tconst hasSubcommands = options.some((item) => item instanceof SlashCommandSubcommandBuilder);\n\t\tif (hasSubcommands) throw new RangeError(`You cannot mix subcommands and subcommand groups at the root level.`);\n\n\t\t// Get the final result\n\t\tconst result = typeof input === 'function' ? input(new SlashCommandSubcommandGroupBuilder()) : input;\n\n\t\tassertReturnOfBuilder(result, SlashCommandSubcommandGroupBuilder);\n\n\t\t// Push it\n\t\toptions.push(result);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds a new subcommand to this command\n\t * @param input A function that returns a subcommand builder, or an already built builder\n\t */\n\tpublic addSubcommand(\n\t\tinput:\n\t\t\t| SlashCommandSubcommandBuilder\n\t\t\t| ((subcommandGroup: SlashCommandSubcommandBuilder) => SlashCommandSubcommandBuilder),\n\t): SlashCommandSubcommandsOnlyBuilder {\n\t\tconst { options } = this;\n\n\t\t// First, assert options conditions - we cannot have more than 25 options\n\t\tvalidateMaxOptionsLength(options);\n\n\t\t// Make sure there is no subcommand at the root level - if there is, throw\n\t\tconst hasSubcommandGroups = options.some((item) => itLine truncated
|
|
||||||
Generated
Vendored
-64
@@ -1,64 +0,0 @@
|
|||||||
import { ApplicationCommandOptionType } from 'discord-api-types/v9';
|
|
||||||
import { SharedSlashCommandOptions } from './mixins/CommandOptions';
|
|
||||||
import { SharedNameAndDescription } from './mixins/NameAndDescription';
|
|
||||||
import type { ToAPIApplicationCommandOptions } from './SlashCommandBuilder';
|
|
||||||
/**
|
|
||||||
* Represents a folder for subcommands
|
|
||||||
*
|
|
||||||
* For more information, go to https://discord.com/developers/docs/interactions/slash-commands#subcommands-and-subcommand-groups
|
|
||||||
*/
|
|
||||||
export declare class SlashCommandSubcommandGroupBuilder implements ToAPIApplicationCommandOptions {
|
|
||||||
/**
|
|
||||||
* The name of this subcommand group
|
|
||||||
*/
|
|
||||||
readonly name: string;
|
|
||||||
/**
|
|
||||||
* The description of this subcommand group
|
|
||||||
*/
|
|
||||||
readonly description: string;
|
|
||||||
/**
|
|
||||||
* The subcommands part of this subcommand group
|
|
||||||
*/
|
|
||||||
readonly options: ToAPIApplicationCommandOptions[];
|
|
||||||
/**
|
|
||||||
* Adds a new subcommand to this group
|
|
||||||
* @param input A function that returns a subcommand builder, or an already built builder
|
|
||||||
*/
|
|
||||||
addSubcommand(input: SlashCommandSubcommandBuilder | ((subcommandGroup: SlashCommandSubcommandBuilder) => SlashCommandSubcommandBuilder)): this;
|
|
||||||
toJSON(): {
|
|
||||||
type: ApplicationCommandOptionType;
|
|
||||||
name: string;
|
|
||||||
description: string;
|
|
||||||
options: import("discord-api-types/v9").APIApplicationCommandOption[];
|
|
||||||
};
|
|
||||||
}
|
|
||||||
export interface SlashCommandSubcommandGroupBuilder extends SharedNameAndDescription {
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* Represents a subcommand
|
|
||||||
*
|
|
||||||
* For more information, go to https://discord.com/developers/docs/interactions/slash-commands#subcommands-and-subcommand-groups
|
|
||||||
*/
|
|
||||||
export declare class SlashCommandSubcommandBuilder implements ToAPIApplicationCommandOptions {
|
|
||||||
/**
|
|
||||||
* The name of this subcommand
|
|
||||||
*/
|
|
||||||
readonly name: string;
|
|
||||||
/**
|
|
||||||
* The description of this subcommand
|
|
||||||
*/
|
|
||||||
readonly description: string;
|
|
||||||
/**
|
|
||||||
* The options of this subcommand
|
|
||||||
*/
|
|
||||||
readonly options: ToAPIApplicationCommandOptions[];
|
|
||||||
toJSON(): {
|
|
||||||
type: ApplicationCommandOptionType;
|
|
||||||
name: string;
|
|
||||||
description: string;
|
|
||||||
options: import("discord-api-types/v9").APIApplicationCommandOption[];
|
|
||||||
};
|
|
||||||
}
|
|
||||||
export interface SlashCommandSubcommandBuilder extends SharedNameAndDescription, SharedSlashCommandOptions<false> {
|
|
||||||
}
|
|
||||||
//# sourceMappingURL=SlashCommandSubcommands.d.ts.map
|
|
||||||
Generated
Vendored
-1
@@ -1 +0,0 @@
|
|||||||
{"version":3,"file":"SlashCommandSubcommands.d.ts","sourceRoot":"/","sources":["interactions/slashCommands/SlashCommandSubcommands.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAC;AAGpE,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,uBAAuB,CAAC;AAE5E;;;;GAIG;AACH,qBACa,kCAAmC,YAAW,8BAA8B;IACxF;;OAEG;IACH,SAAgB,IAAI,EAAE,MAAM,CAAc;IAE1C;;OAEG;IACH,SAAgB,WAAW,EAAE,MAAM,CAAc;IAEjD;;OAEG;IACH,SAAgB,OAAO,EAAE,8BAA8B,EAAE,CAAM;IAE/D;;;OAGG;IACI,aAAa,CACnB,KAAK,EACF,6BAA6B,GAC7B,CAAC,CAAC,eAAe,EAAE,6BAA6B,KAAK,6BAA6B,CAAC;IAkBhF,MAAM;;;;;;CASb;AAED,MAAM,WAAW,kCAAmC,SAAQ,wBAAwB;CAAG;AAEvF;;;;GAIG;AACH,qBACa,6BAA8B,YAAW,8BAA8B;IACnF;;OAEG;IACH,SAAgB,IAAI,EAAE,MAAM,CAAc;IAE1C;;OAEG;IACH,SAAgB,WAAW,EAAE,MAAM,CAAc;IAEjD;;OAEG;IACH,SAAgB,OAAO,EAAE,8BAA8B,EAAE,CAAM;IAExD,MAAM;;;;;;CASb;AAED,MAAM,WAAW,6BAA8B,SAAQ,wBAAwB,EAAE,yBAAyB,CAAC,KAAK,CAAC;CAAG"}
|
|
||||||
Generated
Vendored
-123
@@ -1,123 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
|
||||||
exports.SlashCommandSubcommandBuilder = exports.SlashCommandSubcommandGroupBuilder = void 0;
|
|
||||||
const tslib_1 = require("tslib");
|
|
||||||
require("discord-api-types/v9");
|
|
||||||
const ts_mixer_1 = require("ts-mixer");
|
|
||||||
const Assertions_1 = require("./Assertions");
|
|
||||||
const CommandOptions_1 = require("./mixins/CommandOptions");
|
|
||||||
const NameAndDescription_1 = require("./mixins/NameAndDescription");
|
|
||||||
/**
|
|
||||||
* Represents a folder for subcommands
|
|
||||||
*
|
|
||||||
* For more information, go to https://discord.com/developers/docs/interactions/slash-commands#subcommands-and-subcommand-groups
|
|
||||||
*/
|
|
||||||
let SlashCommandSubcommandGroupBuilder = class SlashCommandSubcommandGroupBuilder {
|
|
||||||
constructor() {
|
|
||||||
/**
|
|
||||||
* The name of this subcommand group
|
|
||||||
*/
|
|
||||||
Object.defineProperty(this, "name", {
|
|
||||||
enumerable: true,
|
|
||||||
configurable: true,
|
|
||||||
writable: true,
|
|
||||||
value: undefined
|
|
||||||
});
|
|
||||||
/**
|
|
||||||
* The description of this subcommand group
|
|
||||||
*/
|
|
||||||
Object.defineProperty(this, "description", {
|
|
||||||
enumerable: true,
|
|
||||||
configurable: true,
|
|
||||||
writable: true,
|
|
||||||
value: undefined
|
|
||||||
});
|
|
||||||
/**
|
|
||||||
* The subcommands part of this subcommand group
|
|
||||||
*/
|
|
||||||
Object.defineProperty(this, "options", {
|
|
||||||
enumerable: true,
|
|
||||||
configurable: true,
|
|
||||||
writable: true,
|
|
||||||
value: []
|
|
||||||
});
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* Adds a new subcommand to this group
|
|
||||||
* @param input A function that returns a subcommand builder, or an already built builder
|
|
||||||
*/
|
|
||||||
addSubcommand(input) {
|
|
||||||
const { options } = this;
|
|
||||||
// First, assert options conditions - we cannot have more than 25 options
|
|
||||||
Assertions_1.validateMaxOptionsLength(options);
|
|
||||||
// Get the final result
|
|
||||||
const result = typeof input === 'function' ? input(new SlashCommandSubcommandBuilder()) : input;
|
|
||||||
Assertions_1.assertReturnOfBuilder(result, SlashCommandSubcommandBuilder);
|
|
||||||
// Push it
|
|
||||||
options.push(result);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
toJSON() {
|
|
||||||
Assertions_1.validateRequiredParameters(this.name, this.description, this.options);
|
|
||||||
return {
|
|
||||||
type: 2 /* SubcommandGroup */,
|
|
||||||
name: this.name,
|
|
||||||
description: this.description,
|
|
||||||
options: this.options.map((option) => option.toJSON()),
|
|
||||||
};
|
|
||||||
}
|
|
||||||
};
|
|
||||||
SlashCommandSubcommandGroupBuilder = tslib_1.__decorate([
|
|
||||||
ts_mixer_1.mix(NameAndDescription_1.SharedNameAndDescription)
|
|
||||||
], SlashCommandSubcommandGroupBuilder);
|
|
||||||
exports.SlashCommandSubcommandGroupBuilder = SlashCommandSubcommandGroupBuilder;
|
|
||||||
/**
|
|
||||||
* Represents a subcommand
|
|
||||||
*
|
|
||||||
* For more information, go to https://discord.com/developers/docs/interactions/slash-commands#subcommands-and-subcommand-groups
|
|
||||||
*/
|
|
||||||
let SlashCommandSubcommandBuilder = class SlashCommandSubcommandBuilder {
|
|
||||||
constructor() {
|
|
||||||
/**
|
|
||||||
* The name of this subcommand
|
|
||||||
*/
|
|
||||||
Object.defineProperty(this, "name", {
|
|
||||||
enumerable: true,
|
|
||||||
configurable: true,
|
|
||||||
writable: true,
|
|
||||||
value: undefined
|
|
||||||
});
|
|
||||||
/**
|
|
||||||
* The description of this subcommand
|
|
||||||
*/
|
|
||||||
Object.defineProperty(this, "description", {
|
|
||||||
enumerable: true,
|
|
||||||
configurable: true,
|
|
||||||
writable: true,
|
|
||||||
value: undefined
|
|
||||||
});
|
|
||||||
/**
|
|
||||||
* The options of this subcommand
|
|
||||||
*/
|
|
||||||
Object.defineProperty(this, "options", {
|
|
||||||
enumerable: true,
|
|
||||||
configurable: true,
|
|
||||||
writable: true,
|
|
||||||
value: []
|
|
||||||
});
|
|
||||||
}
|
|
||||||
toJSON() {
|
|
||||||
Assertions_1.validateRequiredParameters(this.name, this.description, this.options);
|
|
||||||
return {
|
|
||||||
type: 1 /* Subcommand */,
|
|
||||||
name: this.name,
|
|
||||||
description: this.description,
|
|
||||||
options: this.options.map((option) => option.toJSON()),
|
|
||||||
};
|
|
||||||
}
|
|
||||||
};
|
|
||||||
SlashCommandSubcommandBuilder = tslib_1.__decorate([
|
|
||||||
ts_mixer_1.mix(NameAndDescription_1.SharedNameAndDescription, CommandOptions_1.SharedSlashCommandOptions)
|
|
||||||
], SlashCommandSubcommandBuilder);
|
|
||||||
exports.SlashCommandSubcommandBuilder = SlashCommandSubcommandBuilder;
|
|
||||||
//# sourceMappingURL=SlashCommandSubcommands.js.map
|
|
||||||
Generated
Vendored
-1
@@ -1 +0,0 @@
|
|||||||
{"version":3,"file":"SlashCommandSubcommands.js","sourceRoot":"/","sources":["interactions/slashCommands/SlashCommandSubcommands.ts"],"names":[],"mappings":";;;;AAAA,gCAAoE;AACpE,uCAA+B;AAC/B,6CAA2G;AAC3G,4DAAoE;AACpE,oEAAuE;AAGvE;;;;GAIG;AAEH,IAAa,kCAAkC,GAA/C,MAAa,kCAAkC;IAA/C;QACC;;WAEG;QACH;;;;mBAA+B,SAAU;WAAC;QAE1C;;WAEG;QACH;;;;mBAAsC,SAAU;WAAC;QAEjD;;WAEG;QACH;;;;mBAA4D,EAAE;WAAC;IAoChE,CAAC;IAlCA;;;OAGG;IACI,aAAa,CACnB,KAEsF;QAEtF,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QAEzB,yEAAyE;QACzE,qCAAwB,CAAC,OAAO,CAAC,CAAC;QAElC,uBAAuB;QACvB,MAAM,MAAM,GAAG,OAAO,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,6BAA6B,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAEhG,kCAAqB,CAAC,MAAM,EAAE,6BAA6B,CAAC,CAAC;QAE7D,UAAU;QACV,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAErB,OAAO,IAAI,CAAC;IACb,CAAC;IAEM,MAAM;QACZ,uCAA0B,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACtE,OAAO;YACN,IAAI,yBAA8C;YAClD,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;SACtD,CAAC;IACH,CAAC;CACD,CAAA;AAlDY,kCAAkC;IAD9C,cAAG,CAAC,6CAAwB,CAAC;GACjB,kCAAkC,CAkD9C;AAlDY,gFAAkC;AAsD/C;;;;GAIG;AAEH,IAAa,6BAA6B,GAA1C,MAAa,6BAA6B;IAA1C;QACC;;WAEG;QACH;;;;mBAA+B,SAAU;WAAC;QAE1C;;WAEG;QACH;;;;mBAAsC,SAAU;WAAC;QAEjD;;WAEG;QACH;;;;mBAA4D,EAAE;WAAC;IAWhE,CAAC;IATO,MAAM;QACZ,uCAA0B,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACtE,OAAO;YACN,IAAI,oBAAyC;YAC7C,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;SACtD,CAAC;IACH,CAAC;CACD,CAAA;AAzBY,6BAA6B;IADzC,cAAG,CAAC,6CAAwB,EAAE,0CAAyB,CAAC;GAC5C,6BAA6B,CAyBzC;AAzBY,sEAA6B","sourcesContent":["import { ApplicationCommandOptionType } from 'discord-api-types/v9';\nimport { mix } from 'ts-mixer';\nimport { assertReturnOfBuilder, validateMaxOptionsLength, validateRequiredParameters } from './Assertions';\nimport { SharedSlashCommandOptions } from './mixins/CommandOptions';\nimport { SharedNameAndDescription } from './mixins/NameAndDescription';\nimport type { ToAPIApplicationCommandOptions } from './SlashCommandBuilder';\n\n/**\n * Represents a folder for subcommands\n *\n * For more information, go to https://discord.com/developers/docs/interactions/slash-commands#subcommands-and-subcommand-groups\n */\n@mix(SharedNameAndDescription)\nexport class SlashCommandSubcommandGroupBuilder implements ToAPIApplicationCommandOptions {\n\t/**\n\t * The name of this subcommand group\n\t */\n\tpublic readonly name: string = undefined!;\n\n\t/**\n\t * The description of this subcommand group\n\t */\n\tpublic readonly description: string = undefined!;\n\n\t/**\n\t * The subcommands part of this subcommand group\n\t */\n\tpublic readonly options: ToAPIApplicationCommandOptions[] = [];\n\n\t/**\n\t * Adds a new subcommand to this group\n\t * @param input A function that returns a subcommand builder, or an already built builder\n\t */\n\tpublic addSubcommand(\n\t\tinput:\n\t\t\t| SlashCommandSubcommandBuilder\n\t\t\t| ((subcommandGroup: SlashCommandSubcommandBuilder) => SlashCommandSubcommandBuilder),\n\t) {\n\t\tconst { options } = this;\n\n\t\t// First, assert options conditions - we cannot have more than 25 options\n\t\tvalidateMaxOptionsLength(options);\n\n\t\t// Get the final result\n\t\tconst result = typeof input === 'function' ? input(new SlashCommandSubcommandBuilder()) : input;\n\n\t\tassertReturnOfBuilder(result, SlashCommandSubcommandBuilder);\n\n\t\t// Push it\n\t\toptions.push(result);\n\n\t\treturn this;\n\t}\n\n\tpublic toJSON() {\n\t\tvalidateRequiredParameters(this.name, this.description, this.options);\n\t\treturn {\n\t\t\ttype: ApplicationCommandOptionType.SubcommandGroup,\n\t\t\tname: this.name,\n\t\t\tdescription: this.description,\n\t\t\toptions: this.options.map((option) => option.toJSON()),\n\t\t};\n\t}\n}\n\nexport interface SlashCommandSubcommandGroupBuilder extends SharedNameAndDescription {}\n\n/**\n * Represents a subcommand\n *\n * For more information, go to https://discord.com/developers/docs/interactions/slash-commands#subcommands-and-subcommand-groups\n */\n@mix(SharedNameAndDescription, SharedSlashCommandOptions)\nexport class SlashCommandSubcommandBuilder implements ToAPIApplicationCommandOptions {\n\t/**\n\t * The name of this subcommand\n\t */\n\tpublic readonly name: string = undefined!;\n\n\t/**\n\t * The description of this subcommand\n\t */\n\tpublic readonly description: string = undefined!;\n\n\t/**\n\t * The options of this subcommand\n\t */\n\tpublic readonly options: ToAPIApplicationCommandOptions[] = [];\n\n\tpublic toJSON() {\n\t\tvalidateRequiredParameters(this.name, this.description, this.options);\n\t\treturn {\n\t\t\ttype: ApplicationCommandOptionType.Subcommand,\n\t\t\tname: this.name,\n\t\t\tdescription: this.description,\n\t\t\toptions: this.options.map((option) => option.toJSON()),\n\t\t};\n\t}\n}\n\nexport interface SlashCommandSubcommandBuilLine truncated
|
|
||||||
Generated
Vendored
-20
@@ -1,20 +0,0 @@
|
|||||||
import type { ApplicationCommandOptionType } from 'discord-api-types/v9';
|
|
||||||
import type { ToAPIApplicationCommandOptions } from '../SlashCommandBuilder';
|
|
||||||
import { SharedNameAndDescription } from './NameAndDescription';
|
|
||||||
export declare class SlashCommandOptionBase extends SharedNameAndDescription implements ToAPIApplicationCommandOptions {
|
|
||||||
required: boolean;
|
|
||||||
readonly type: ApplicationCommandOptionType;
|
|
||||||
constructor(type: ApplicationCommandOptionType);
|
|
||||||
/**
|
|
||||||
* Marks the option as required
|
|
||||||
* @param required If this option should be required
|
|
||||||
*/
|
|
||||||
setRequired(required: boolean): this;
|
|
||||||
toJSON(): {
|
|
||||||
type: ApplicationCommandOptionType;
|
|
||||||
name: string;
|
|
||||||
description: string;
|
|
||||||
required: boolean;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
//# sourceMappingURL=CommandOptionBase.d.ts.map
|
|
||||||
Generated
Vendored
-1
@@ -1 +0,0 @@
|
|||||||
{"version":3,"file":"CommandOptionBase.d.ts","sourceRoot":"/","sources":["interactions/slashCommands/mixins/CommandOptionBase.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAC;AAGzE,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,wBAAwB,CAAC;AAC7E,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAEhE,qBAAa,sBAAuB,SAAQ,wBAAyB,YAAW,8BAA8B;IACtG,QAAQ,UAAS;IACxB,SAAgB,IAAI,EAAE,4BAA4B,CAAC;gBAEhC,IAAI,EAAE,4BAA4B;IAKrD;;;OAGG;IACI,WAAW,CAAC,QAAQ,EAAE,OAAO;IAS7B,MAAM;;;;;;CAab"}
|
|
||||||
Generated
Vendored
-48
@@ -1,48 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
|
||||||
exports.SlashCommandOptionBase = void 0;
|
|
||||||
const tslib_1 = require("tslib");
|
|
||||||
const ow_1 = tslib_1.__importDefault(require("ow"));
|
|
||||||
const Assertions_1 = require("../Assertions");
|
|
||||||
const NameAndDescription_1 = require("./NameAndDescription");
|
|
||||||
class SlashCommandOptionBase extends NameAndDescription_1.SharedNameAndDescription {
|
|
||||||
constructor(type) {
|
|
||||||
super();
|
|
||||||
Object.defineProperty(this, "required", {
|
|
||||||
enumerable: true,
|
|
||||||
configurable: true,
|
|
||||||
writable: true,
|
|
||||||
value: false
|
|
||||||
});
|
|
||||||
Object.defineProperty(this, "type", {
|
|
||||||
enumerable: true,
|
|
||||||
configurable: true,
|
|
||||||
writable: true,
|
|
||||||
value: void 0
|
|
||||||
});
|
|
||||||
this.type = type;
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* Marks the option as required
|
|
||||||
* @param required If this option should be required
|
|
||||||
*/
|
|
||||||
setRequired(required) {
|
|
||||||
// Assert that you actually passed a boolean
|
|
||||||
ow_1.default(required, 'required', ow_1.default.boolean);
|
|
||||||
this.required = required;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
toJSON() {
|
|
||||||
Assertions_1.validateRequiredParameters(this.name, this.description, []);
|
|
||||||
// Assert that you actually passed a boolean
|
|
||||||
ow_1.default(this.required, 'required', ow_1.default.boolean);
|
|
||||||
return {
|
|
||||||
type: this.type,
|
|
||||||
name: this.name,
|
|
||||||
description: this.description,
|
|
||||||
required: this.required,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
exports.SlashCommandOptionBase = SlashCommandOptionBase;
|
|
||||||
//# sourceMappingURL=CommandOptionBase.js.map
|
|
||||||
Generated
Vendored
-1
@@ -1 +0,0 @@
|
|||||||
{"version":3,"file":"CommandOptionBase.js","sourceRoot":"/","sources":["interactions/slashCommands/mixins/CommandOptionBase.ts"],"names":[],"mappings":";;;;AACA,oDAAoB;AACpB,8CAA2D;AAE3D,6DAAgE;AAEhE,MAAa,sBAAuB,SAAQ,6CAAwB;IAInE,YAAmB,IAAkC;QACpD,KAAK,EAAE,CAAC;QAJT;;;;mBAAkB,KAAK;WAAC;QACxB;;;;;WAAmD;QAIlD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IAClB,CAAC;IAED;;;OAGG;IACI,WAAW,CAAC,QAAiB;QACnC,4CAA4C;QAC5C,YAAE,CAAC,QAAQ,EAAE,UAAU,EAAE,YAAE,CAAC,OAAO,CAAC,CAAC;QAErC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAEzB,OAAO,IAAI,CAAC;IACb,CAAC;IAEM,MAAM;QACZ,uCAA0B,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QAE5D,4CAA4C;QAC5C,YAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,YAAE,CAAC,OAAO,CAAC,CAAC;QAE1C,OAAO;YACN,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACvB,CAAC;IACH,CAAC;CACD;AAnCD,wDAmCC","sourcesContent":["import type { ApplicationCommandOptionType } from 'discord-api-types/v9';\nimport ow from 'ow';\nimport { validateRequiredParameters } from '../Assertions';\nimport type { ToAPIApplicationCommandOptions } from '../SlashCommandBuilder';\nimport { SharedNameAndDescription } from './NameAndDescription';\n\nexport class SlashCommandOptionBase extends SharedNameAndDescription implements ToAPIApplicationCommandOptions {\n\tpublic required = false;\n\tpublic readonly type: ApplicationCommandOptionType;\n\n\tpublic constructor(type: ApplicationCommandOptionType) {\n\t\tsuper();\n\t\tthis.type = type;\n\t}\n\n\t/**\n\t * Marks the option as required\n\t * @param required If this option should be required\n\t */\n\tpublic setRequired(required: boolean) {\n\t\t// Assert that you actually passed a boolean\n\t\tow(required, 'required', ow.boolean);\n\n\t\tthis.required = required;\n\n\t\treturn this;\n\t}\n\n\tpublic toJSON() {\n\t\tvalidateRequiredParameters(this.name, this.description, []);\n\n\t\t// Assert that you actually passed a boolean\n\t\tow(this.required, 'required', ow.boolean);\n\n\t\treturn {\n\t\t\ttype: this.type,\n\t\t\tname: this.name,\n\t\t\tdescription: this.description,\n\t\t\trequired: this.required,\n\t\t};\n\t}\n}\n"]}
|
|
||||||
Generated
Vendored
-25
@@ -1,25 +0,0 @@
|
|||||||
import { APIApplicationCommandOptionChoice, ApplicationCommandOptionType } from 'discord-api-types/v9';
|
|
||||||
import type { ToAPIApplicationCommandOptions } from '../SlashCommandBuilder';
|
|
||||||
import { SlashCommandOptionBase } from './CommandOptionBase';
|
|
||||||
export declare abstract class ApplicationCommandOptionWithChoicesBase<T extends string | number> extends SlashCommandOptionBase implements ToAPIApplicationCommandOptions {
|
|
||||||
choices?: APIApplicationCommandOptionChoice[];
|
|
||||||
/**
|
|
||||||
* Adds a choice for this option
|
|
||||||
* @param name The name of the choice
|
|
||||||
* @param value The value of the choice
|
|
||||||
*/
|
|
||||||
addChoice(name: string, value: T): this;
|
|
||||||
/**
|
|
||||||
* Adds multiple choices for this option
|
|
||||||
* @param choices The choices to add
|
|
||||||
*/
|
|
||||||
addChoices(choices: [name: string, value: T][]): this;
|
|
||||||
toJSON(): {
|
|
||||||
choices: APIApplicationCommandOptionChoice[] | undefined;
|
|
||||||
type: ApplicationCommandOptionType;
|
|
||||||
name: string;
|
|
||||||
description: string;
|
|
||||||
required: boolean;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
//# sourceMappingURL=CommandOptionWithChoices.d.ts.map
|
|
||||||
Generated
Vendored
-1
@@ -1 +0,0 @@
|
|||||||
{"version":3,"file":"CommandOptionWithChoices.d.ts","sourceRoot":"/","sources":["interactions/slashCommands/mixins/CommandOptionWithChoices.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iCAAiC,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAC;AAGvG,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,wBAAwB,CAAC;AAC7E,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAU7D,8BAAsB,uCAAuC,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,CACtF,SAAQ,sBACR,YAAW,8BAA8B;IAElC,OAAO,CAAC,EAAE,iCAAiC,EAAE,CAAC;IAErD;;;;OAIG;IACI,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAqBvC;;;OAGG;IACI,UAAU,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE;IAWrC,MAAM;;;;;;;CAMtB"}
|
|
||||||
Generated
Vendored
-59
@@ -1,59 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
|
||||||
exports.ApplicationCommandOptionWithChoicesBase = void 0;
|
|
||||||
const tslib_1 = require("tslib");
|
|
||||||
require("discord-api-types/v9");
|
|
||||||
const ow_1 = tslib_1.__importDefault(require("ow"));
|
|
||||||
const Assertions_1 = require("../Assertions");
|
|
||||||
const CommandOptionBase_1 = require("./CommandOptionBase");
|
|
||||||
const stringPredicate = ow_1.default.string.minLength(1).maxLength(100);
|
|
||||||
const integerPredicate = ow_1.default.number.finite;
|
|
||||||
// TODO: See resolution for sindresorhus/ow#217 in relation to this cast
|
|
||||||
const choicesPredicate = ow_1.default.array.ofType(ow_1.default.array.exactShape([stringPredicate, ow_1.default.any(ow_1.default.string, integerPredicate)]));
|
|
||||||
class ApplicationCommandOptionWithChoicesBase extends CommandOptionBase_1.SlashCommandOptionBase {
|
|
||||||
constructor() {
|
|
||||||
super(...arguments);
|
|
||||||
Object.defineProperty(this, "choices", {
|
|
||||||
enumerable: true,
|
|
||||||
configurable: true,
|
|
||||||
writable: true,
|
|
||||||
value: void 0
|
|
||||||
});
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* Adds a choice for this option
|
|
||||||
* @param name The name of the choice
|
|
||||||
* @param value The value of the choice
|
|
||||||
*/
|
|
||||||
addChoice(name, value) {
|
|
||||||
this.choices ?? (this.choices = []);
|
|
||||||
Assertions_1.validateMaxChoicesLength(this.choices);
|
|
||||||
// Validate name
|
|
||||||
ow_1.default(name, `${this.type === 3 /* String */ ? 'string' : 'integer'} choice name`, stringPredicate);
|
|
||||||
// Validate the value
|
|
||||||
if (this.type === 3 /* String */)
|
|
||||||
ow_1.default(value, 'string choice value', stringPredicate);
|
|
||||||
else
|
|
||||||
ow_1.default(value, 'integer choice value', integerPredicate);
|
|
||||||
this.choices.push({ name, value });
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* Adds multiple choices for this option
|
|
||||||
* @param choices The choices to add
|
|
||||||
*/
|
|
||||||
addChoices(choices) {
|
|
||||||
ow_1.default(choices, `${this.type === 3 /* String */ ? 'string' : 'integer'} choices`, choicesPredicate);
|
|
||||||
for (const [label, value] of choices)
|
|
||||||
this.addChoice(label, value);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
toJSON() {
|
|
||||||
return {
|
|
||||||
...super.toJSON(),
|
|
||||||
choices: this.choices,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
exports.ApplicationCommandOptionWithChoicesBase = ApplicationCommandOptionWithChoicesBase;
|
|
||||||
//# sourceMappingURL=CommandOptionWithChoices.js.map
|
|
||||||
Generated
Vendored
-1
@@ -1 +0,0 @@
|
|||||||
{"version":3,"file":"CommandOptionWithChoices.js","sourceRoot":"/","sources":["interactions/slashCommands/mixins/CommandOptionWithChoices.ts"],"names":[],"mappings":";;;;AAAA,gCAAuG;AACvG,oDAAmC;AACnC,8CAAyD;AAEzD,2DAA6D;AAE7D,MAAM,eAAe,GAAG,YAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AAC9D,MAAM,gBAAgB,GAAG,YAAE,CAAC,MAAM,CAAC,MAAM,CAAC;AAE1C,wEAAwE;AACxE,MAAM,gBAAgB,GAAG,YAAE,CAAC,KAAK,CAAC,MAAM,CACvC,YAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,eAAe,EAAE,YAAE,CAAC,GAAG,CAAC,YAAE,CAAC,MAAM,EAAE,gBAAgB,CAA0C,CAAC,CAAC,CACpH,CAAC;AAEF,MAAsB,uCACrB,SAAQ,0CAAsB;IAD/B;;QAIC;;;;;WAAqD;IAiDtD,CAAC;IA/CA;;;;OAIG;IACI,SAAS,CAAC,IAAY,EAAE,KAAQ;QACtC,IAAI,CAAC,OAAO,KAAZ,IAAI,CAAC,OAAO,GAAK,EAAE,EAAC;QAEpB,qCAAwB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEvC,gBAAgB;QAChB,YAAE,CACD,IAAI,EACJ,GAAG,IAAI,CAAC,IAAI,mBAAwC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,cAAc,EACzF,eAAe,CACf,CAAC;QAEF,qBAAqB;QACrB,IAAI,IAAI,CAAC,IAAI,mBAAwC;YAAE,YAAE,CAAC,KAAK,EAAE,qBAAqB,EAAE,eAAe,CAAC,CAAC;;YACpG,YAAE,CAAC,KAAK,EAAE,sBAAsB,EAAE,gBAAgB,CAAC,CAAC;QAEzD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAEnC,OAAO,IAAI,CAAC;IACb,CAAC;IAED;;;OAGG;IACI,UAAU,CAAC,OAAmC;QACpD,YAAE,CACD,OAAO,EACP,GAAG,IAAI,CAAC,IAAI,mBAAwC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,UAAU,EACrF,gBAAgB,CAChB,CAAC;QAEF,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,OAAO;YAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACnE,OAAO,IAAI,CAAC;IACb,CAAC;IAEe,MAAM;QACrB,OAAO;YACN,GAAG,KAAK,CAAC,MAAM,EAAE;YACjB,OAAO,EAAE,IAAI,CAAC,OAAO;SACrB,CAAC;IACH,CAAC;CACD;AArDD,0FAqDC","sourcesContent":["import { APIApplicationCommandOptionChoice, ApplicationCommandOptionType } from 'discord-api-types/v9';\nimport ow, { Predicate } from 'ow';\nimport { validateMaxChoicesLength } from '../Assertions';\nimport type { ToAPIApplicationCommandOptions } from '../SlashCommandBuilder';\nimport { SlashCommandOptionBase } from './CommandOptionBase';\n\nconst stringPredicate = ow.string.minLength(1).maxLength(100);\nconst integerPredicate = ow.number.finite;\n\n// TODO: See resolution for sindresorhus/ow#217 in relation to this cast\nconst choicesPredicate = ow.array.ofType<[string, string | number]>(\n\tow.array.exactShape([stringPredicate, ow.any(ow.string, integerPredicate) as unknown as Predicate<string | number>]),\n);\n\nexport abstract class ApplicationCommandOptionWithChoicesBase<T extends string | number>\n\textends SlashCommandOptionBase\n\timplements ToAPIApplicationCommandOptions\n{\n\tpublic choices?: APIApplicationCommandOptionChoice[];\n\n\t/**\n\t * Adds a choice for this option\n\t * @param name The name of the choice\n\t * @param value The value of the choice\n\t */\n\tpublic addChoice(name: string, value: T) {\n\t\tthis.choices ??= [];\n\n\t\tvalidateMaxChoicesLength(this.choices);\n\n\t\t// Validate name\n\t\tow(\n\t\t\tname,\n\t\t\t`${this.type === ApplicationCommandOptionType.String ? 'string' : 'integer'} choice name`,\n\t\t\tstringPredicate,\n\t\t);\n\n\t\t// Validate the value\n\t\tif (this.type === ApplicationCommandOptionType.String) ow(value, 'string choice value', stringPredicate);\n\t\telse ow(value, 'integer choice value', integerPredicate);\n\n\t\tthis.choices.push({ name, value });\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds multiple choices for this option\n\t * @param choices The choices to add\n\t */\n\tpublic addChoices(choices: [name: string, value: T][]) {\n\t\tow(\n\t\t\tchoices,\n\t\t\t`${this.type === ApplicationCommandOptionType.String ? 'string' : 'integer'} choices`,\n\t\t\tchoicesPredicate,\n\t\t);\n\n\t\tfor (const [label, value] of choices) this.addChoice(label, value);\n\t\treturn this;\n\t}\n\n\tpublic override toJSON() {\n\t\treturn {\n\t\t\t...super.toJSON(),\n\t\t\tchoices: this.choices,\n\t\t};\n\t}\n}\n"]}
|
|
||||||
Generated
Vendored
-48
@@ -1,48 +0,0 @@
|
|||||||
import { SlashCommandBooleanOption } from '../options/boolean';
|
|
||||||
import { SlashCommandChannelOption } from '../options/channel';
|
|
||||||
import { SlashCommandIntegerOption } from '../options/integer';
|
|
||||||
import { SlashCommandMentionableOption } from '../options/mentionable';
|
|
||||||
import { SlashCommandRoleOption } from '../options/role';
|
|
||||||
import { SlashCommandStringOption } from '../options/string';
|
|
||||||
import { SlashCommandUserOption } from '../options/user';
|
|
||||||
import type { ToAPIApplicationCommandOptions } from '../SlashCommandBuilder';
|
|
||||||
export declare class SharedSlashCommandOptions<ShouldOmitSubcommandFunctions = true> {
|
|
||||||
readonly options: ToAPIApplicationCommandOptions[];
|
|
||||||
/**
|
|
||||||
* Adds a boolean option
|
|
||||||
* @param input A function that returns an option builder, or an already built builder
|
|
||||||
*/
|
|
||||||
addBooleanOption(input: SlashCommandBooleanOption | ((builder: SlashCommandBooleanOption) => SlashCommandBooleanOption)): ShouldOmitSubcommandFunctions extends true ? Omit<this, "addSubcommand" | "addSubcommandGroup"> : this;
|
|
||||||
/**
|
|
||||||
* Adds a user option
|
|
||||||
* @param input A function that returns an option builder, or an already built builder
|
|
||||||
*/
|
|
||||||
addUserOption(input: SlashCommandUserOption | ((builder: SlashCommandUserOption) => SlashCommandUserOption)): ShouldOmitSubcommandFunctions extends true ? Omit<this, "addSubcommand" | "addSubcommandGroup"> : this;
|
|
||||||
/**
|
|
||||||
* Adds a channel option
|
|
||||||
* @param input A function that returns an option builder, or an already built builder
|
|
||||||
*/
|
|
||||||
addChannelOption(input: SlashCommandChannelOption | ((builder: SlashCommandChannelOption) => SlashCommandChannelOption)): ShouldOmitSubcommandFunctions extends true ? Omit<this, "addSubcommand" | "addSubcommandGroup"> : this;
|
|
||||||
/**
|
|
||||||
* Adds a role option
|
|
||||||
* @param input A function that returns an option builder, or an already built builder
|
|
||||||
*/
|
|
||||||
addRoleOption(input: SlashCommandRoleOption | ((builder: SlashCommandRoleOption) => SlashCommandRoleOption)): ShouldOmitSubcommandFunctions extends true ? Omit<this, "addSubcommand" | "addSubcommandGroup"> : this;
|
|
||||||
/**
|
|
||||||
* Adds a mentionable option
|
|
||||||
* @param input A function that returns an option builder, or an already built builder
|
|
||||||
*/
|
|
||||||
addMentionableOption(input: SlashCommandMentionableOption | ((builder: SlashCommandMentionableOption) => SlashCommandMentionableOption)): ShouldOmitSubcommandFunctions extends true ? Omit<this, "addSubcommand" | "addSubcommandGroup"> : this;
|
|
||||||
/**
|
|
||||||
* Adds a string option
|
|
||||||
* @param input A function that returns an option builder, or an already built builder
|
|
||||||
*/
|
|
||||||
addStringOption(input: SlashCommandStringOption | ((builder: SlashCommandStringOption) => SlashCommandStringOption)): ShouldOmitSubcommandFunctions extends true ? Omit<this, "addSubcommand" | "addSubcommandGroup"> : this;
|
|
||||||
/**
|
|
||||||
* Adds an integer option
|
|
||||||
* @param input A function that returns an option builder, or an already built builder
|
|
||||||
*/
|
|
||||||
addIntegerOption(input: SlashCommandIntegerOption | ((builder: SlashCommandIntegerOption) => SlashCommandIntegerOption)): ShouldOmitSubcommandFunctions extends true ? Omit<this, "addSubcommand" | "addSubcommandGroup"> : this;
|
|
||||||
private _sharedAddOptionMethod;
|
|
||||||
}
|
|
||||||
//# sourceMappingURL=CommandOptions.d.ts.map
|
|
||||||
Generated
Vendored
-1
@@ -1 +0,0 @@
|
|||||||
{"version":3,"file":"CommandOptions.d.ts","sourceRoot":"/","sources":["interactions/slashCommands/mixins/CommandOptions.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,6BAA6B,EAAE,MAAM,wBAAwB,CAAC;AACvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,wBAAwB,CAAC;AAE7E,qBAAa,yBAAyB,CAAC,6BAA6B,GAAG,IAAI;IAC1E,SAAgB,OAAO,EAAG,8BAA8B,EAAE,CAAC;IAE3D;;;OAGG;IACI,gBAAgB,CACtB,KAAK,EAAE,yBAAyB,GAAG,CAAC,CAAC,OAAO,EAAE,yBAAyB,KAAK,yBAAyB,CAAC;IAKvG;;;OAGG;IACI,aAAa,CAAC,KAAK,EAAE,sBAAsB,GAAG,CAAC,CAAC,OAAO,EAAE,sBAAsB,KAAK,sBAAsB,CAAC;IAIlH;;;OAGG;IACI,gBAAgB,CACtB,KAAK,EAAE,yBAAyB,GAAG,CAAC,CAAC,OAAO,EAAE,yBAAyB,KAAK,yBAAyB,CAAC;IAKvG;;;OAGG;IACI,aAAa,CAAC,KAAK,EAAE,sBAAsB,GAAG,CAAC,CAAC,OAAO,EAAE,sBAAsB,KAAK,sBAAsB,CAAC;IAIlH;;;OAGG;IACI,oBAAoB,CAC1B,KAAK,EAAE,6BAA6B,GAAG,CAAC,CAAC,OAAO,EAAE,6BAA6B,KAAK,6BAA6B,CAAC;IAKnH;;;OAGG;IACI,eAAe,CACrB,KAAK,EAAE,wBAAwB,GAAG,CAAC,CAAC,OAAO,EAAE,wBAAwB,KAAK,wBAAwB,CAAC;IAKpG;;;OAGG;IACI,gBAAgB,CACtB,KAAK,EAAE,yBAAyB,GAAG,CAAC,CAAC,OAAO,EAAE,yBAAyB,KAAK,yBAAyB,CAAC;IAKvG,OAAO,CAAC,sBAAsB;CAmB9B"}
|
|
||||||
Generated
Vendored
-83
@@ -1,83 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
|
||||||
exports.SharedSlashCommandOptions = void 0;
|
|
||||||
const Assertions_1 = require("../Assertions");
|
|
||||||
const boolean_1 = require("../options/boolean");
|
|
||||||
const channel_1 = require("../options/channel");
|
|
||||||
const integer_1 = require("../options/integer");
|
|
||||||
const mentionable_1 = require("../options/mentionable");
|
|
||||||
const role_1 = require("../options/role");
|
|
||||||
const string_1 = require("../options/string");
|
|
||||||
const user_1 = require("../options/user");
|
|
||||||
class SharedSlashCommandOptions {
|
|
||||||
constructor() {
|
|
||||||
Object.defineProperty(this, "options", {
|
|
||||||
enumerable: true,
|
|
||||||
configurable: true,
|
|
||||||
writable: true,
|
|
||||||
value: void 0
|
|
||||||
});
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* Adds a boolean option
|
|
||||||
* @param input A function that returns an option builder, or an already built builder
|
|
||||||
*/
|
|
||||||
addBooleanOption(input) {
|
|
||||||
return this._sharedAddOptionMethod(input, boolean_1.SlashCommandBooleanOption);
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* Adds a user option
|
|
||||||
* @param input A function that returns an option builder, or an already built builder
|
|
||||||
*/
|
|
||||||
addUserOption(input) {
|
|
||||||
return this._sharedAddOptionMethod(input, user_1.SlashCommandUserOption);
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* Adds a channel option
|
|
||||||
* @param input A function that returns an option builder, or an already built builder
|
|
||||||
*/
|
|
||||||
addChannelOption(input) {
|
|
||||||
return this._sharedAddOptionMethod(input, channel_1.SlashCommandChannelOption);
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* Adds a role option
|
|
||||||
* @param input A function that returns an option builder, or an already built builder
|
|
||||||
*/
|
|
||||||
addRoleOption(input) {
|
|
||||||
return this._sharedAddOptionMethod(input, role_1.SlashCommandRoleOption);
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* Adds a mentionable option
|
|
||||||
* @param input A function that returns an option builder, or an already built builder
|
|
||||||
*/
|
|
||||||
addMentionableOption(input) {
|
|
||||||
return this._sharedAddOptionMethod(input, mentionable_1.SlashCommandMentionableOption);
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* Adds a string option
|
|
||||||
* @param input A function that returns an option builder, or an already built builder
|
|
||||||
*/
|
|
||||||
addStringOption(input) {
|
|
||||||
return this._sharedAddOptionMethod(input, string_1.SlashCommandStringOption);
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* Adds an integer option
|
|
||||||
* @param input A function that returns an option builder, or an already built builder
|
|
||||||
*/
|
|
||||||
addIntegerOption(input) {
|
|
||||||
return this._sharedAddOptionMethod(input, integer_1.SlashCommandIntegerOption);
|
|
||||||
}
|
|
||||||
_sharedAddOptionMethod(input, Instance) {
|
|
||||||
const { options } = this;
|
|
||||||
// First, assert options conditions - we cannot have more than 25 options
|
|
||||||
Assertions_1.validateMaxOptionsLength(options);
|
|
||||||
// Get the final result
|
|
||||||
const result = typeof input === 'function' ? input(new Instance()) : input;
|
|
||||||
Assertions_1.assertReturnOfBuilder(result, Instance);
|
|
||||||
// Push it
|
|
||||||
options.push(result);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
exports.SharedSlashCommandOptions = SharedSlashCommandOptions;
|
|
||||||
//# sourceMappingURL=CommandOptions.js.map
|
|
||||||
Generated
Vendored
-1
@@ -1 +0,0 @@
|
|||||||
{"version":3,"file":"CommandOptions.js","sourceRoot":"/","sources":["interactions/slashCommands/mixins/CommandOptions.ts"],"names":[],"mappings":";;;AAAA,8CAAgF;AAEhF,gDAA+D;AAC/D,gDAA+D;AAC/D,gDAA+D;AAC/D,wDAAuE;AACvE,0CAAyD;AACzD,8CAA6D;AAC7D,0CAAyD;AAGzD,MAAa,yBAAyB;IAAtC;QACC;;;;;WAA2D;IAuF5D,CAAC;IArFA;;;OAGG;IACI,gBAAgB,CACtB,KAAsG;QAEtG,OAAO,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,mCAAyB,CAAC,CAAC;IACtE,CAAC;IAED;;;OAGG;IACI,aAAa,CAAC,KAA6F;QACjH,OAAO,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,6BAAsB,CAAC,CAAC;IACnE,CAAC;IAED;;;OAGG;IACI,gBAAgB,CACtB,KAAsG;QAEtG,OAAO,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,mCAAyB,CAAC,CAAC;IACtE,CAAC;IAED;;;OAGG;IACI,aAAa,CAAC,KAA6F;QACjH,OAAO,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,6BAAsB,CAAC,CAAC;IACnE,CAAC;IAED;;;OAGG;IACI,oBAAoB,CAC1B,KAAkH;QAElH,OAAO,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,2CAA6B,CAAC,CAAC;IAC1E,CAAC;IAED;;;OAGG;IACI,eAAe,CACrB,KAAmG;QAEnG,OAAO,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,iCAAwB,CAAC,CAAC;IACrE,CAAC;IAED;;;OAGG;IACI,gBAAgB,CACtB,KAAsG;QAEtG,OAAO,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,mCAAyB,CAAC,CAAC;IACtE,CAAC;IAEO,sBAAsB,CAC7B,KAA8B,EAC9B,QAAqB;QAErB,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QAEzB,yEAAyE;QACzE,qCAAwB,CAAC,OAAO,CAAC,CAAC;QAElC,uBAAuB;QACvB,MAAM,MAAM,GAAG,OAAO,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAE3E,kCAAqB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAExC,UAAU;QACV,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAErB,OAAO,IAAI,CAAC;IACb,CAAC;CACD;AAxFD,8DAwFC","sourcesContent":["import { assertReturnOfBuilder, validateMaxOptionsLength } from '../Assertions';\nimport type { SlashCommandOptionBase } from './CommandOptionBase';\nimport { SlashCommandBooleanOption } from '../options/boolean';\nimport { SlashCommandChannelOption } from '../options/channel';\nimport { SlashCommandIntegerOption } from '../options/integer';\nimport { SlashCommandMentionableOption } from '../options/mentionable';\nimport { SlashCommandRoleOption } from '../options/role';\nimport { SlashCommandStringOption } from '../options/string';\nimport { SlashCommandUserOption } from '../options/user';\nimport type { ToAPIApplicationCommandOptions } from '../SlashCommandBuilder';\n\nexport class SharedSlashCommandOptions<ShouldOmitSubcommandFunctions = true> {\n\tpublic readonly options!: ToAPIApplicationCommandOptions[];\n\n\t/**\n\t * Adds a boolean option\n\t * @param input A function that returns an option builder, or an already built builder\n\t */\n\tpublic addBooleanOption(\n\t\tinput: SlashCommandBooleanOption | ((builder: SlashCommandBooleanOption) => SlashCommandBooleanOption),\n\t) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandBooleanOption);\n\t}\n\n\t/**\n\t * Adds a user option\n\t * @param input A function that returns an option builder, or an already built builder\n\t */\n\tpublic addUserOption(input: SlashCommandUserOption | ((builder: SlashCommandUserOption) => SlashCommandUserOption)) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandUserOption);\n\t}\n\n\t/**\n\t * Adds a channel option\n\t * @param input A function that returns an option builder, or an already built builder\n\t */\n\tpublic addChannelOption(\n\t\tinput: SlashCommandChannelOption | ((builder: SlashCommandChannelOption) => SlashCommandChannelOption),\n\t) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandChannelOption);\n\t}\n\n\t/**\n\t * Adds a role option\n\t * @param input A function that returns an option builder, or an already built builder\n\t */\n\tpublic addRoleOption(input: SlashCommandRoleOption | ((builder: SlashCommandRoleOption) => SlashCommandRoleOption)) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandRoleOption);\n\t}\n\n\t/**\n\t * Adds a mentionable option\n\t * @param input A function that returns an option builder, or an already built builder\n\t */\n\tpublic addMentionableOption(\n\t\tinput: SlashCommandMentionableOption | ((builder: SlashCommandMentionableOption) => SlashCommandMentionableOption),\n\t) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandMentionableOption);\n\t}\n\n\t/**\n\t * Adds a string option\n\t * @param input A function that returns an option builder, or an already built builder\n\t */\n\tpublic addStringOption(\n\t\tinput: SlashCommandStringOption | ((builder: SlashCommandStringOption) => SlashCommandStringOption),\n\t) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandStringOption);\n\t}\n\n\t/**\n\t * Adds an integer option\n\t * @param input A function that returns an option builder, or an already built builder\n\t */\n\tpublic addIntegerOption(\n\t\tinput: SlashCommandIntegerOption | ((builder: SlashCommandIntegerOption) => SlashCommandIntegerOption),\n\t) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandIntegerOption);\n\t}\n\n\tprivate _sharedAddOptionMethod<T extends SlashCommandOptionBase>(\n\t\tinput: T | ((builder: T) => T),\n\t\tInstance: new () => T,\n\t): ShouldOmitSubcommandFunctions extends true ? Omit<this, 'addSubcommand' | 'addSubcommandGroup'> : this {\n\t\tconLine truncated
|
|
||||||
Generated
Vendored
-15
@@ -1,15 +0,0 @@
|
|||||||
export declare class SharedNameAndDescription {
|
|
||||||
readonly name: string;
|
|
||||||
readonly description: string;
|
|
||||||
/**
|
|
||||||
* Sets the name
|
|
||||||
* @param name The name
|
|
||||||
*/
|
|
||||||
setName(name: string): this;
|
|
||||||
/**
|
|
||||||
* Sets the description
|
|
||||||
* @param description The description
|
|
||||||
*/
|
|
||||||
setDescription(description: string): this;
|
|
||||||
}
|
|
||||||
//# sourceMappingURL=NameAndDescription.d.ts.map
|
|
||||||
Generated
Vendored
-1
@@ -1 +0,0 @@
|
|||||||
{"version":3,"file":"NameAndDescription.d.ts","sourceRoot":"/","sources":["interactions/slashCommands/mixins/NameAndDescription.ts"],"names":[],"mappings":"AAEA,qBAAa,wBAAwB;IACpC,SAAgB,IAAI,EAAG,MAAM,CAAC;IAC9B,SAAgB,WAAW,EAAG,MAAM,CAAC;IAErC;;;OAGG;IACI,OAAO,CAAC,IAAI,EAAE,MAAM;IAS3B;;;OAGG;IACI,cAAc,CAAC,WAAW,EAAE,MAAM;CAQzC"}
|
|
||||||
Generated
Vendored
-42
@@ -1,42 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
|
||||||
exports.SharedNameAndDescription = void 0;
|
|
||||||
const Assertions_1 = require("../Assertions");
|
|
||||||
class SharedNameAndDescription {
|
|
||||||
constructor() {
|
|
||||||
Object.defineProperty(this, "name", {
|
|
||||||
enumerable: true,
|
|
||||||
configurable: true,
|
|
||||||
writable: true,
|
|
||||||
value: void 0
|
|
||||||
});
|
|
||||||
Object.defineProperty(this, "description", {
|
|
||||||
enumerable: true,
|
|
||||||
configurable: true,
|
|
||||||
writable: true,
|
|
||||||
value: void 0
|
|
||||||
});
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* Sets the name
|
|
||||||
* @param name The name
|
|
||||||
*/
|
|
||||||
setName(name) {
|
|
||||||
// Assert the name matches the conditions
|
|
||||||
Assertions_1.validateName(name);
|
|
||||||
Reflect.set(this, 'name', name);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* Sets the description
|
|
||||||
* @param description The description
|
|
||||||
*/
|
|
||||||
setDescription(description) {
|
|
||||||
// Assert the description matches the conditions
|
|
||||||
Assertions_1.validateDescription(description);
|
|
||||||
Reflect.set(this, 'description', description);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
exports.SharedNameAndDescription = SharedNameAndDescription;
|
|
||||||
//# sourceMappingURL=NameAndDescription.js.map
|
|
||||||
Generated
Vendored
-1
@@ -1 +0,0 @@
|
|||||||
{"version":3,"file":"NameAndDescription.js","sourceRoot":"/","sources":["interactions/slashCommands/mixins/NameAndDescription.ts"],"names":[],"mappings":";;;AAAA,8CAAkE;AAElE,MAAa,wBAAwB;IAArC;QACC;;;;;WAA8B;QAC9B;;;;;WAAqC;IA2BtC,CAAC;IAzBA;;;OAGG;IACI,OAAO,CAAC,IAAY;QAC1B,yCAAyC;QACzC,yBAAY,CAAC,IAAI,CAAC,CAAC;QAEnB,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QAEhC,OAAO,IAAI,CAAC;IACb,CAAC;IAED;;;OAGG;IACI,cAAc,CAAC,WAAmB;QACxC,gDAAgD;QAChD,gCAAmB,CAAC,WAAW,CAAC,CAAC;QAEjC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC;QAE9C,OAAO,IAAI,CAAC;IACb,CAAC;CACD;AA7BD,4DA6BC","sourcesContent":["import { validateDescription, validateName } from '../Assertions';\n\nexport class SharedNameAndDescription {\n\tpublic readonly name!: string;\n\tpublic readonly description!: string;\n\n\t/**\n\t * Sets the name\n\t * @param name The name\n\t */\n\tpublic setName(name: string) {\n\t\t// Assert the name matches the conditions\n\t\tvalidateName(name);\n\n\t\tReflect.set(this, 'name', name);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the description\n\t * @param description The description\n\t */\n\tpublic setDescription(description: string) {\n\t\t// Assert the description matches the conditions\n\t\tvalidateDescription(description);\n\n\t\tReflect.set(this, 'description', description);\n\n\t\treturn this;\n\t}\n}\n"]}
|
|
||||||
Generated
Vendored
-7
@@ -1,7 +0,0 @@
|
|||||||
import { ApplicationCommandOptionType } from 'discord-api-types/v9';
|
|
||||||
import { SlashCommandOptionBase } from '../mixins/CommandOptionBase';
|
|
||||||
export declare class SlashCommandBooleanOption extends SlashCommandOptionBase {
|
|
||||||
readonly type: ApplicationCommandOptionType.Boolean;
|
|
||||||
constructor();
|
|
||||||
}
|
|
||||||
//# sourceMappingURL=boolean.d.ts.map
|
|
||||||
Generated
Vendored
-1
@@ -1 +0,0 @@
|
|||||||
{"version":3,"file":"boolean.d.ts","sourceRoot":"/","sources":["interactions/slashCommands/options/boolean.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAErE,qBAAa,yBAA0B,SAAQ,sBAAsB;IACpE,SAAyB,IAAI,uCAAiD;;CAK9E"}
|
|
||||||
Generated
Vendored
-18
@@ -1,18 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
|
||||||
exports.SlashCommandBooleanOption = void 0;
|
|
||||||
require("discord-api-types/v9");
|
|
||||||
const CommandOptionBase_1 = require("../mixins/CommandOptionBase");
|
|
||||||
class SlashCommandBooleanOption extends CommandOptionBase_1.SlashCommandOptionBase {
|
|
||||||
constructor() {
|
|
||||||
super(5 /* Boolean */);
|
|
||||||
Object.defineProperty(this, "type", {
|
|
||||||
enumerable: true,
|
|
||||||
configurable: true,
|
|
||||||
writable: true,
|
|
||||||
value: 5 /* Boolean */
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
exports.SlashCommandBooleanOption = SlashCommandBooleanOption;
|
|
||||||
//# sourceMappingURL=boolean.js.map
|
|
||||||
Generated
Vendored
-1
@@ -1 +0,0 @@
|
|||||||
{"version":3,"file":"boolean.js","sourceRoot":"/","sources":["interactions/slashCommands/options/boolean.ts"],"names":[],"mappings":";;;AAAA,gCAAoE;AACpE,mEAAqE;AAErE,MAAa,yBAA0B,SAAQ,0CAAsB;IAGpE;QACC,KAAK,iBAAsC,CAAC;QAH7C;;;;mBAAgC,eAA6C;WAAC;IAI9E,CAAC;CACD;AAND,8DAMC","sourcesContent":["import { ApplicationCommandOptionType } from 'discord-api-types/v9';\nimport { SlashCommandOptionBase } from '../mixins/CommandOptionBase';\n\nexport class SlashCommandBooleanOption extends SlashCommandOptionBase {\n\tpublic override readonly type = ApplicationCommandOptionType.Boolean as const;\n\n\tpublic constructor() {\n\t\tsuper(ApplicationCommandOptionType.Boolean);\n\t}\n}\n"]}
|
|
||||||
Generated
Vendored
-7
@@ -1,7 +0,0 @@
|
|||||||
import { ApplicationCommandOptionType } from 'discord-api-types/v9';
|
|
||||||
import { SlashCommandOptionBase } from '../mixins/CommandOptionBase';
|
|
||||||
export declare class SlashCommandChannelOption extends SlashCommandOptionBase {
|
|
||||||
readonly type: ApplicationCommandOptionType.Channel;
|
|
||||||
constructor();
|
|
||||||
}
|
|
||||||
//# sourceMappingURL=channel.d.ts.map
|
|
||||||
Generated
Vendored
-1
@@ -1 +0,0 @@
|
|||||||
{"version":3,"file":"channel.d.ts","sourceRoot":"/","sources":["interactions/slashCommands/options/channel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAErE,qBAAa,yBAA0B,SAAQ,sBAAsB;IACpE,SAAyB,IAAI,uCAAiD;;CAK9E"}
|
|
||||||
Generated
Vendored
-18
@@ -1,18 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
|
||||||
exports.SlashCommandChannelOption = void 0;
|
|
||||||
require("discord-api-types/v9");
|
|
||||||
const CommandOptionBase_1 = require("../mixins/CommandOptionBase");
|
|
||||||
class SlashCommandChannelOption extends CommandOptionBase_1.SlashCommandOptionBase {
|
|
||||||
constructor() {
|
|
||||||
super(7 /* Channel */);
|
|
||||||
Object.defineProperty(this, "type", {
|
|
||||||
enumerable: true,
|
|
||||||
configurable: true,
|
|
||||||
writable: true,
|
|
||||||
value: 7 /* Channel */
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
exports.SlashCommandChannelOption = SlashCommandChannelOption;
|
|
||||||
//# sourceMappingURL=channel.js.map
|
|
||||||
Generated
Vendored
-1
@@ -1 +0,0 @@
|
|||||||
{"version":3,"file":"channel.js","sourceRoot":"/","sources":["interactions/slashCommands/options/channel.ts"],"names":[],"mappings":";;;AAAA,gCAAoE;AACpE,mEAAqE;AAErE,MAAa,yBAA0B,SAAQ,0CAAsB;IAGpE;QACC,KAAK,iBAAsC,CAAC;QAH7C;;;;mBAAgC,eAA6C;WAAC;IAI9E,CAAC;CACD;AAND,8DAMC","sourcesContent":["import { ApplicationCommandOptionType } from 'discord-api-types/v9';\nimport { SlashCommandOptionBase } from '../mixins/CommandOptionBase';\n\nexport class SlashCommandChannelOption extends SlashCommandOptionBase {\n\tpublic override readonly type = ApplicationCommandOptionType.Channel as const;\n\n\tpublic constructor() {\n\t\tsuper(ApplicationCommandOptionType.Channel);\n\t}\n}\n"]}
|
|
||||||
Generated
Vendored
-7
@@ -1,7 +0,0 @@
|
|||||||
import { ApplicationCommandOptionType } from 'discord-api-types/v9';
|
|
||||||
import { ApplicationCommandOptionWithChoicesBase } from '../mixins/CommandOptionWithChoices';
|
|
||||||
export declare class SlashCommandIntegerOption extends ApplicationCommandOptionWithChoicesBase<number> {
|
|
||||||
readonly type: ApplicationCommandOptionType.Integer;
|
|
||||||
constructor();
|
|
||||||
}
|
|
||||||
//# sourceMappingURL=integer.d.ts.map
|
|
||||||
Generated
Vendored
-1
@@ -1 +0,0 @@
|
|||||||
{"version":3,"file":"integer.d.ts","sourceRoot":"/","sources":["interactions/slashCommands/options/integer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,uCAAuC,EAAE,MAAM,oCAAoC,CAAC;AAE7F,qBAAa,yBAA0B,SAAQ,uCAAuC,CAAC,MAAM,CAAC;IAC7F,SAAyB,IAAI,uCAAiD;;CAK9E"}
|
|
||||||
Generated
Vendored
-18
@@ -1,18 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
|
||||||
exports.SlashCommandIntegerOption = void 0;
|
|
||||||
require("discord-api-types/v9");
|
|
||||||
const CommandOptionWithChoices_1 = require("../mixins/CommandOptionWithChoices");
|
|
||||||
class SlashCommandIntegerOption extends CommandOptionWithChoices_1.ApplicationCommandOptionWithChoicesBase {
|
|
||||||
constructor() {
|
|
||||||
super(4 /* Integer */);
|
|
||||||
Object.defineProperty(this, "type", {
|
|
||||||
enumerable: true,
|
|
||||||
configurable: true,
|
|
||||||
writable: true,
|
|
||||||
value: 4 /* Integer */
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
exports.SlashCommandIntegerOption = SlashCommandIntegerOption;
|
|
||||||
//# sourceMappingURL=integer.js.map
|
|
||||||
Generated
Vendored
-1
@@ -1 +0,0 @@
|
|||||||
{"version":3,"file":"integer.js","sourceRoot":"/","sources":["interactions/slashCommands/options/integer.ts"],"names":[],"mappings":";;;AAAA,gCAAoE;AACpE,iFAA6F;AAE7F,MAAa,yBAA0B,SAAQ,kEAA+C;IAG7F;QACC,KAAK,iBAAsC,CAAC;QAH7C;;;;mBAAgC,eAA6C;WAAC;IAI9E,CAAC;CACD;AAND,8DAMC","sourcesContent":["import { ApplicationCommandOptionType } from 'discord-api-types/v9';\nimport { ApplicationCommandOptionWithChoicesBase } from '../mixins/CommandOptionWithChoices';\n\nexport class SlashCommandIntegerOption extends ApplicationCommandOptionWithChoicesBase<number> {\n\tpublic override readonly type = ApplicationCommandOptionType.Integer as const;\n\n\tpublic constructor() {\n\t\tsuper(ApplicationCommandOptionType.Integer);\n\t}\n}\n"]}
|
|
||||||
Generated
Vendored
-7
@@ -1,7 +0,0 @@
|
|||||||
import { ApplicationCommandOptionType } from 'discord-api-types/v9';
|
|
||||||
import { SlashCommandOptionBase } from '../mixins/CommandOptionBase';
|
|
||||||
export declare class SlashCommandMentionableOption extends SlashCommandOptionBase {
|
|
||||||
readonly type: ApplicationCommandOptionType.Mentionable;
|
|
||||||
constructor();
|
|
||||||
}
|
|
||||||
//# sourceMappingURL=mentionable.d.ts.map
|
|
||||||
Generated
Vendored
-1
@@ -1 +0,0 @@
|
|||||||
{"version":3,"file":"mentionable.d.ts","sourceRoot":"/","sources":["interactions/slashCommands/options/mentionable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAErE,qBAAa,6BAA8B,SAAQ,sBAAsB;IACxE,SAAyB,IAAI,2CAAqD;;CAKlF"}
|
|
||||||
Generated
Vendored
-18
@@ -1,18 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
|
||||||
exports.SlashCommandMentionableOption = void 0;
|
|
||||||
require("discord-api-types/v9");
|
|
||||||
const CommandOptionBase_1 = require("../mixins/CommandOptionBase");
|
|
||||||
class SlashCommandMentionableOption extends CommandOptionBase_1.SlashCommandOptionBase {
|
|
||||||
constructor() {
|
|
||||||
super(9 /* Mentionable */);
|
|
||||||
Object.defineProperty(this, "type", {
|
|
||||||
enumerable: true,
|
|
||||||
configurable: true,
|
|
||||||
writable: true,
|
|
||||||
value: 9 /* Mentionable */
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
exports.SlashCommandMentionableOption = SlashCommandMentionableOption;
|
|
||||||
//# sourceMappingURL=mentionable.js.map
|
|
||||||
Generated
Vendored
-1
@@ -1 +0,0 @@
|
|||||||
{"version":3,"file":"mentionable.js","sourceRoot":"/","sources":["interactions/slashCommands/options/mentionable.ts"],"names":[],"mappings":";;;AAAA,gCAAoE;AACpE,mEAAqE;AAErE,MAAa,6BAA8B,SAAQ,0CAAsB;IAGxE;QACC,KAAK,qBAA0C,CAAC;QAHjD;;;;mBAAgC,mBAAiD;WAAC;IAIlF,CAAC;CACD;AAND,sEAMC","sourcesContent":["import { ApplicationCommandOptionType } from 'discord-api-types/v9';\nimport { SlashCommandOptionBase } from '../mixins/CommandOptionBase';\n\nexport class SlashCommandMentionableOption extends SlashCommandOptionBase {\n\tpublic override readonly type = ApplicationCommandOptionType.Mentionable as const;\n\n\tpublic constructor() {\n\t\tsuper(ApplicationCommandOptionType.Mentionable);\n\t}\n}\n"]}
|
|
||||||
Generated
Vendored
-7
@@ -1,7 +0,0 @@
|
|||||||
import { ApplicationCommandOptionType } from 'discord-api-types/v9';
|
|
||||||
import { SlashCommandOptionBase } from '../mixins/CommandOptionBase';
|
|
||||||
export declare class SlashCommandRoleOption extends SlashCommandOptionBase {
|
|
||||||
readonly type: ApplicationCommandOptionType.Role;
|
|
||||||
constructor();
|
|
||||||
}
|
|
||||||
//# sourceMappingURL=role.d.ts.map
|
|
||||||
Generated
Vendored
-1
@@ -1 +0,0 @@
|
|||||||
{"version":3,"file":"role.d.ts","sourceRoot":"/","sources":["interactions/slashCommands/options/role.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAErE,qBAAa,sBAAuB,SAAQ,sBAAsB;IACjE,SAAyB,IAAI,oCAA8C;;CAK3E"}
|
|
||||||
-18
@@ -1,18 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
|
||||||
exports.SlashCommandRoleOption = void 0;
|
|
||||||
require("discord-api-types/v9");
|
|
||||||
const CommandOptionBase_1 = require("../mixins/CommandOptionBase");
|
|
||||||
class SlashCommandRoleOption extends CommandOptionBase_1.SlashCommandOptionBase {
|
|
||||||
constructor() {
|
|
||||||
super(8 /* Role */);
|
|
||||||
Object.defineProperty(this, "type", {
|
|
||||||
enumerable: true,
|
|
||||||
configurable: true,
|
|
||||||
writable: true,
|
|
||||||
value: 8 /* Role */
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
exports.SlashCommandRoleOption = SlashCommandRoleOption;
|
|
||||||
//# sourceMappingURL=role.js.map
|
|
||||||
Generated
Vendored
-1
@@ -1 +0,0 @@
|
|||||||
{"version":3,"file":"role.js","sourceRoot":"/","sources":["interactions/slashCommands/options/role.ts"],"names":[],"mappings":";;;AAAA,gCAAoE;AACpE,mEAAqE;AAErE,MAAa,sBAAuB,SAAQ,0CAAsB;IAGjE;QACC,KAAK,cAAmC,CAAC;QAH1C;;;;mBAAgC,YAA0C;WAAC;IAI3E,CAAC;CACD;AAND,wDAMC","sourcesContent":["import { ApplicationCommandOptionType } from 'discord-api-types/v9';\nimport { SlashCommandOptionBase } from '../mixins/CommandOptionBase';\n\nexport class SlashCommandRoleOption extends SlashCommandOptionBase {\n\tpublic override readonly type = ApplicationCommandOptionType.Role as const;\n\n\tpublic constructor() {\n\t\tsuper(ApplicationCommandOptionType.Role);\n\t}\n}\n"]}
|
|
||||||
Generated
Vendored
-7
@@ -1,7 +0,0 @@
|
|||||||
import { ApplicationCommandOptionType } from 'discord-api-types/v9';
|
|
||||||
import { ApplicationCommandOptionWithChoicesBase } from '../mixins/CommandOptionWithChoices';
|
|
||||||
export declare class SlashCommandStringOption extends ApplicationCommandOptionWithChoicesBase<string> {
|
|
||||||
readonly type: ApplicationCommandOptionType.String;
|
|
||||||
constructor();
|
|
||||||
}
|
|
||||||
//# sourceMappingURL=string.d.ts.map
|
|
||||||
Generated
Vendored
-1
@@ -1 +0,0 @@
|
|||||||
{"version":3,"file":"string.d.ts","sourceRoot":"/","sources":["interactions/slashCommands/options/string.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,uCAAuC,EAAE,MAAM,oCAAoC,CAAC;AAE7F,qBAAa,wBAAyB,SAAQ,uCAAuC,CAAC,MAAM,CAAC;IAC5F,SAAyB,IAAI,sCAAgD;;CAK7E"}
|
|
||||||
Generated
Vendored
-18
@@ -1,18 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
|
||||||
exports.SlashCommandStringOption = void 0;
|
|
||||||
require("discord-api-types/v9");
|
|
||||||
const CommandOptionWithChoices_1 = require("../mixins/CommandOptionWithChoices");
|
|
||||||
class SlashCommandStringOption extends CommandOptionWithChoices_1.ApplicationCommandOptionWithChoicesBase {
|
|
||||||
constructor() {
|
|
||||||
super(3 /* String */);
|
|
||||||
Object.defineProperty(this, "type", {
|
|
||||||
enumerable: true,
|
|
||||||
configurable: true,
|
|
||||||
writable: true,
|
|
||||||
value: 3 /* String */
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
exports.SlashCommandStringOption = SlashCommandStringOption;
|
|
||||||
//# sourceMappingURL=string.js.map
|
|
||||||
Generated
Vendored
-1
@@ -1 +0,0 @@
|
|||||||
{"version":3,"file":"string.js","sourceRoot":"/","sources":["interactions/slashCommands/options/string.ts"],"names":[],"mappings":";;;AAAA,gCAAoE;AACpE,iFAA6F;AAE7F,MAAa,wBAAyB,SAAQ,kEAA+C;IAG5F;QACC,KAAK,gBAAqC,CAAC;QAH5C;;;;mBAAgC,cAA4C;WAAC;IAI7E,CAAC;CACD;AAND,4DAMC","sourcesContent":["import { ApplicationCommandOptionType } from 'discord-api-types/v9';\nimport { ApplicationCommandOptionWithChoicesBase } from '../mixins/CommandOptionWithChoices';\n\nexport class SlashCommandStringOption extends ApplicationCommandOptionWithChoicesBase<string> {\n\tpublic override readonly type = ApplicationCommandOptionType.String as const;\n\n\tpublic constructor() {\n\t\tsuper(ApplicationCommandOptionType.String);\n\t}\n}\n"]}
|
|
||||||
Generated
Vendored
-7
@@ -1,7 +0,0 @@
|
|||||||
import { ApplicationCommandOptionType } from 'discord-api-types/v9';
|
|
||||||
import { SlashCommandOptionBase } from '../mixins/CommandOptionBase';
|
|
||||||
export declare class SlashCommandUserOption extends SlashCommandOptionBase {
|
|
||||||
readonly type: ApplicationCommandOptionType.User;
|
|
||||||
constructor();
|
|
||||||
}
|
|
||||||
//# sourceMappingURL=user.d.ts.map
|
|
||||||
Generated
Vendored
-1
@@ -1 +0,0 @@
|
|||||||
{"version":3,"file":"user.d.ts","sourceRoot":"/","sources":["interactions/slashCommands/options/user.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAErE,qBAAa,sBAAuB,SAAQ,sBAAsB;IACjE,SAAyB,IAAI,oCAA8C;;CAK3E"}
|
|
||||||
-18
@@ -1,18 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
|
||||||
exports.SlashCommandUserOption = void 0;
|
|
||||||
require("discord-api-types/v9");
|
|
||||||
const CommandOptionBase_1 = require("../mixins/CommandOptionBase");
|
|
||||||
class SlashCommandUserOption extends CommandOptionBase_1.SlashCommandOptionBase {
|
|
||||||
constructor() {
|
|
||||||
super(6 /* User */);
|
|
||||||
Object.defineProperty(this, "type", {
|
|
||||||
enumerable: true,
|
|
||||||
configurable: true,
|
|
||||||
writable: true,
|
|
||||||
value: 6 /* User */
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
exports.SlashCommandUserOption = SlashCommandUserOption;
|
|
||||||
//# sourceMappingURL=user.js.map
|
|
||||||
Generated
Vendored
-1
@@ -1 +0,0 @@
|
|||||||
{"version":3,"file":"user.js","sourceRoot":"/","sources":["interactions/slashCommands/options/user.ts"],"names":[],"mappings":";;;AAAA,gCAAoE;AACpE,mEAAqE;AAErE,MAAa,sBAAuB,SAAQ,0CAAsB;IAGjE;QACC,KAAK,cAAmC,CAAC;QAH1C;;;;mBAAgC,YAA0C;WAAC;IAI3E,CAAC;CACD;AAND,wDAMC","sourcesContent":["import { ApplicationCommandOptionType } from 'discord-api-types/v9';\nimport { SlashCommandOptionBase } from '../mixins/CommandOptionBase';\n\nexport class SlashCommandUserOption extends SlashCommandOptionBase {\n\tpublic override readonly type = ApplicationCommandOptionType.User as const;\n\n\tpublic constructor() {\n\t\tsuper(ApplicationCommandOptionType.User);\n\t}\n}\n"]}
|
|
||||||
Loaded 100 of 1278 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user