Fix a bunch of linter errors
diff --git a/src/actions/tickets/create.ts b/src/actions/tickets/create.ts
index f724728..ca5147a 100644
--- a/src/actions/tickets/create.ts
+++ b/src/actions/tickets/create.ts
@@ -6,50 +6,84 @@
function capitalize(s: string) {
s = s.replace(/([A-Z])/g, " $1");
- return s.length < 3 ? s.toUpperCase() : s[0].toUpperCase() + s.slice(1).toLowerCase();
+ return s.length < 3
+ ? s.toUpperCase()
+ : s[0].toUpperCase() + s.slice(1).toLowerCase();
}
export default async function (interaction) {
- const { log, NucleusColors, entry, renderUser, renderChannel, renderDelta } = client.logger;
+ const {
+ log,
+ NucleusColors,
+ entry,
+ renderUser,
+ renderChannel,
+ renderDelta
+ } = client.logger;
const config = await client.database.guilds.read(interaction.guild.id);
if (!config.tickets.enabled || !config.tickets.category) {
- return await interaction.reply({embeds: [new EmojiEmbed()
- .setTitle("Tickets are disabled")
- .setDescription("Please enable tickets in the configuration to use this command.")
- .setFooter({text: interaction.member.permissions.has("MANAGE_GUILD") ? "You can enable it by running /settings tickets" : ""})
- .setStatus("Danger")
- .setEmoji("CONTROL.BLOCKCROSS")
- ], ephemeral: true});
+ return await interaction.reply({
+ embeds: [
+ new EmojiEmbed()
+ .setTitle("Tickets are disabled")
+ .setDescription(
+ "Please enable tickets in the configuration to use this command."
+ )
+ .setFooter({
+ text: interaction.member.permissions.has("MANAGE_GUILD")
+ ? "You can enable it by running /settings tickets"
+ : ""
+ })
+ .setStatus("Danger")
+ .setEmoji("CONTROL.BLOCKCROSS")
+ ],
+ ephemeral: true
+ });
}
- const category = interaction.guild.channels.cache.get(config.tickets.category) as Discord.CategoryChannel;
+ const category = interaction.guild.channels.cache.get(
+ config.tickets.category
+ ) as Discord.CategoryChannel;
let count = 0;
- category.children.forEach(element => {
+ category.children.forEach((element) => {
if (!(element.type === "GUILD_TEXT")) return;
- if ((element as Discord.TextChannel).topic.includes(`${interaction.member.user.id}`)) {
+ if (
+ (element as Discord.TextChannel).topic.includes(
+ `${interaction.member.user.id}`
+ )
+ ) {
if ((element as Discord.TextChannel).topic.endsWith("Active")) {
count++;
}
}
});
if (count >= config.tickets.maxTickets) {
- return await interaction.reply({embeds: [new EmojiEmbed()
- .setTitle("Create Ticket")
- .setDescription(`You have reached the maximum amount of tickets (${config.tickets.maxTickets}). Please close one of your active tickets before creating a new one.`)
- .setStatus("Danger")
- .setEmoji("CONTROL.BLOCKCROSS")
- ], ephemeral: true});
+ return await interaction.reply({
+ embeds: [
+ new EmojiEmbed()
+ .setTitle("Create Ticket")
+ .setDescription(
+ `You have reached the maximum amount of tickets (${config.tickets.maxTickets}). Please close one of your active tickets before creating a new one.`
+ )
+ .setStatus("Danger")
+ .setEmoji("CONTROL.BLOCKCROSS")
+ ],
+ ephemeral: true
+ });
}
let ticketTypes;
let custom = false;
- if (config.tickets.customTypes && config.tickets.useCustom) { ticketTypes = config.tickets.customTypes; custom = true; }
- else if (config.tickets.types) ticketTypes = toHexArray(config.tickets.types, tickets);
+ if (config.tickets.customTypes && config.tickets.useCustom) {
+ ticketTypes = config.tickets.customTypes;
+ custom = true;
+ } else if (config.tickets.types)
+ ticketTypes = toHexArray(config.tickets.types, tickets);
else ticketTypes = [];
let chosenType;
let splitFormattedTicketTypes = [];
if (ticketTypes.length > 0) {
let formattedTicketTypes = [];
- formattedTicketTypes = ticketTypes.map(type => {
+ formattedTicketTypes = ticketTypes.map((type) => {
if (custom) {
return new MessageButton()
.setLabel(type)
@@ -60,28 +94,43 @@
.setLabel(capitalize(type))
.setStyle("PRIMARY")
.setCustomId(type)
- .setEmoji(getEmojiByName(("TICKETS." + type.toString().toUpperCase()), "id"));
+ .setEmoji(
+ getEmojiByName(
+ "TICKETS." + type.toString().toUpperCase(),
+ "id"
+ )
+ );
}
});
for (let i = 0; i < formattedTicketTypes.length; i += 5) {
- splitFormattedTicketTypes.push(new MessageActionRow().addComponents(formattedTicketTypes.slice(i, i + 5)));
+ splitFormattedTicketTypes.push(
+ new MessageActionRow().addComponents(
+ formattedTicketTypes.slice(i, i + 5)
+ )
+ );
}
- const m = await interaction.reply({embeds: [new EmojiEmbed()
- .setTitle("Create Ticket")
- .setDescription("Select a ticket type")
- .setStatus("Success")
- .setEmoji("GUILD.TICKET.OPEN")
- ], ephemeral: true, fetchReply: true, components: splitFormattedTicketTypes});
+ const m = await interaction.reply({
+ embeds: [
+ new EmojiEmbed()
+ .setTitle("Create Ticket")
+ .setDescription("Select a ticket type")
+ .setStatus("Success")
+ .setEmoji("GUILD.TICKET.OPEN")
+ ],
+ ephemeral: true,
+ fetchReply: true,
+ components: splitFormattedTicketTypes
+ });
let component;
try {
- component = await m.awaitMessageComponent({time: 300000});
+ component = await m.awaitMessageComponent({ time: 300000 });
} catch (e) {
return;
}
chosenType = component.customId;
splitFormattedTicketTypes = [];
formattedTicketTypes = [];
- formattedTicketTypes = ticketTypes.map(type => {
+ formattedTicketTypes = ticketTypes.map((type) => {
if (custom) {
return new MessageButton()
.setLabel(type)
@@ -93,31 +142,57 @@
.setLabel(capitalize(type))
.setStyle(chosenType === type ? "SUCCESS" : "SECONDARY")
.setCustomId(type)
- .setEmoji(getEmojiByName(("TICKETS." + type.toString().toUpperCase()), "id"))
+ .setEmoji(
+ getEmojiByName(
+ "TICKETS." + type.toString().toUpperCase(),
+ "id"
+ )
+ )
.setDisabled(true);
}
});
for (let i = 0; i < formattedTicketTypes.length; i += 5) {
- splitFormattedTicketTypes.push(new MessageActionRow().addComponents(formattedTicketTypes.slice(i, i + 5)));
+ splitFormattedTicketTypes.push(
+ new MessageActionRow().addComponents(
+ formattedTicketTypes.slice(i, i + 5)
+ )
+ );
}
- component.update({embeds: [new EmojiEmbed()
- .setTitle("Create Ticket")
- .setDescription("Select a ticket type")
- .setStatus("Success")
- .setEmoji("GUILD.TICKET.OPEN")
- ], components: splitFormattedTicketTypes});
+ component.update({
+ embeds: [
+ new EmojiEmbed()
+ .setTitle("Create Ticket")
+ .setDescription("Select a ticket type")
+ .setStatus("Success")
+ .setEmoji("GUILD.TICKET.OPEN")
+ ],
+ components: splitFormattedTicketTypes
+ });
} else {
chosenType = null;
- await interaction.reply({embeds: [new EmojiEmbed()
- .setTitle("Create Ticket")
- .setEmoji("GUILD.TICKET.OPEN")
- ], ephemeral: true, components: splitFormattedTicketTypes});
+ await interaction.reply({
+ embeds: [
+ new EmojiEmbed()
+ .setTitle("Create Ticket")
+ .setEmoji("GUILD.TICKET.OPEN")
+ ],
+ ephemeral: true,
+ components: splitFormattedTicketTypes
+ });
}
- const overwrites = [{
- id: interaction.member,
- allow: ["VIEW_CHANNEL", "SEND_MESSAGES", "ATTACH_FILES", "ADD_REACTIONS", "READ_MESSAGE_HISTORY"],
- type: "member"
- }] as Discord.OverwriteResolvable[];
+ const overwrites = [
+ {
+ id: interaction.member,
+ allow: [
+ "VIEW_CHANNEL",
+ "SEND_MESSAGES",
+ "ATTACH_FILES",
+ "ADD_REACTIONS",
+ "READ_MESSAGE_HISTORY"
+ ],
+ type: "member"
+ }
+ ] as Discord.OverwriteResolvable[];
overwrites.push({
id: interaction.guild.roles.everyone,
deny: ["VIEW_CHANNEL"],
@@ -126,60 +201,93 @@
if (config.tickets.supportRole !== null) {
overwrites.push({
id: interaction.guild.roles.cache.get(config.tickets.supportRole),
- allow: ["VIEW_CHANNEL", "SEND_MESSAGES", "ATTACH_FILES", "ADD_REACTIONS", "READ_MESSAGE_HISTORY"],
+ allow: [
+ "VIEW_CHANNEL",
+ "SEND_MESSAGES",
+ "ATTACH_FILES",
+ "ADD_REACTIONS",
+ "READ_MESSAGE_HISTORY"
+ ],
type: "role"
});
}
let c;
try {
- c = await interaction.guild.channels.create(interaction.member.user.username, {
- type: "GUILD_TEXT",
- topic: `${interaction.member.user.id} Active`,
- parent: config.tickets.category,
- nsfw: false,
- permissionOverwrites: (overwrites as Discord.OverwriteResolvable[]),
- reason: "Creating ticket"
- });
- } catch (e) {
- return await interaction.editReply({embeds: [new EmojiEmbed()
- .setTitle("Create Ticket")
- .setDescription("Failed to create ticket")
- .setStatus("Danger")
- .setEmoji("CONTROL.BLOCKCROSS")
- ]});
- }
- try {
- await c.send(
+ c = await interaction.guild.channels.create(
+ interaction.member.user.username,
{
- content: (`<@${interaction.member.user.id}>` + (config.tickets.supportRole !== null ? ` • <@&${config.tickets.supportRole}>` : "")),
- allowedMentions: {
- users: [(interaction.member as Discord.GuildMember).id],
- roles: (config.tickets.supportRole !== null ? [config.tickets.supportRole] : [])
- }
+ type: "GUILD_TEXT",
+ topic: `${interaction.member.user.id} Active`,
+ parent: config.tickets.category,
+ nsfw: false,
+ permissionOverwrites:
+ overwrites as Discord.OverwriteResolvable[],
+ reason: "Creating ticket"
}
);
- let content = interaction.options ? interaction.options.getString("message") || "" : "";
+ } catch (e) {
+ return await interaction.editReply({
+ embeds: [
+ new EmojiEmbed()
+ .setTitle("Create Ticket")
+ .setDescription("Failed to create ticket")
+ .setStatus("Danger")
+ .setEmoji("CONTROL.BLOCKCROSS")
+ ]
+ });
+ }
+ try {
+ await c.send({
+ content:
+ `<@${interaction.member.user.id}>` +
+ (config.tickets.supportRole !== null
+ ? ` • <@&${config.tickets.supportRole}>`
+ : ""),
+ allowedMentions: {
+ users: [(interaction.member as Discord.GuildMember).id],
+ roles:
+ config.tickets.supportRole !== null
+ ? [config.tickets.supportRole]
+ : []
+ }
+ });
+ let content = interaction.options
+ ? interaction.options.getString("message") || ""
+ : "";
if (content) content = `**Message:**\n> ${content}\n`;
- const emoji = custom ? "" : getEmojiByName("TICKETS." + chosenType.toUpperCase());
- await c.send({ embeds: [new EmojiEmbed()
- .setTitle("New Ticket")
- .setDescription(
- `Ticket created by <@${interaction.member.user.id}>\n` +
- `**Support type:** ${chosenType !== null ? (emoji) + " " + capitalize(chosenType) : "General"}\n` +
- `**Ticket ID:** \`${c.id}\`\n${content}\n` +
- "Type `/ticket close` to close this ticket."
- )
- .setStatus("Success")
- .setEmoji("GUILD.TICKET.OPEN")
- ], components: [new MessageActionRow().addComponents([new MessageButton()
- .setLabel("Close")
- .setStyle("DANGER")
- .setCustomId("closeticket")
- .setEmoji(getEmojiByName("CONTROL.CROSS", "id"))
- ])]});
+ const emoji = custom
+ ? ""
+ : getEmojiByName("TICKETS." + chosenType.toUpperCase());
+ await c.send({
+ embeds: [
+ new EmojiEmbed()
+ .setTitle("New Ticket")
+ .setDescription(
+ `Ticket created by <@${interaction.member.user.id}>\n` +
+ `**Support type:** ${
+ chosenType !== null
+ ? emoji + " " + capitalize(chosenType)
+ : "General"
+ }\n` +
+ `**Ticket ID:** \`${c.id}\`\n${content}\n` +
+ "Type `/ticket close` to close this ticket."
+ )
+ .setStatus("Success")
+ .setEmoji("GUILD.TICKET.OPEN")
+ ],
+ components: [
+ new MessageActionRow().addComponents([
+ new MessageButton()
+ .setLabel("Close")
+ .setStyle("DANGER")
+ .setCustomId("closeticket")
+ .setEmoji(getEmojiByName("CONTROL.CROSS", "id"))
+ ])
+ ]
+ });
const data = {
- meta:{
+ meta: {
type: "ticketCreate",
displayName: "Ticket Created",
calculateType: "ticketUpdate",
@@ -188,8 +296,14 @@
timestamp: new Date().getTime()
},
list: {
- ticketFor: entry(interaction.member.user.id, renderUser(interaction.member.user)),
- created: entry(new Date().getTime(), renderDelta(new Date().getTime())),
+ ticketFor: entry(
+ interaction.member.user.id,
+ renderUser(interaction.member.user)
+ ),
+ created: entry(
+ new Date().getTime(),
+ renderDelta(new Date().getTime())
+ ),
ticketChannel: entry(c.id, renderChannel(c))
},
hidden: {
@@ -197,11 +311,19 @@
}
};
log(data);
- } catch (e) { console.log(e);}
- await interaction.editReply({embeds: [new EmojiEmbed()
- .setTitle("Create Ticket")
- .setDescription(`Ticket created. You can view it here: <#${c.id}>`)
- .setStatus("Success")
- .setEmoji("GUILD.TICKET.OPEN")
- ], components: splitFormattedTicketTypes});
-}
\ No newline at end of file
+ } catch (e) {
+ console.log(e);
+ }
+ await interaction.editReply({
+ embeds: [
+ new EmojiEmbed()
+ .setTitle("Create Ticket")
+ .setDescription(
+ `Ticket created. You can view it here: <#${c.id}>`
+ )
+ .setStatus("Success")
+ .setEmoji("GUILD.TICKET.OPEN")
+ ],
+ components: splitFormattedTicketTypes
+ });
+}
diff --git a/src/actions/tickets/delete.ts b/src/actions/tickets/delete.ts
index e5c017f..6509c03 100644
--- a/src/actions/tickets/delete.ts
+++ b/src/actions/tickets/delete.ts
@@ -4,31 +4,53 @@
import getEmojiByName from "../../utils/getEmojiByName.js";
export default async function (interaction) {
- const { log, NucleusColors, entry, renderUser, renderChannel, renderDelta } = client.logger;
+ const {
+ log,
+ NucleusColors,
+ entry,
+ renderUser,
+ renderChannel,
+ renderDelta
+ } = client.logger;
const config = await client.database.guilds.read(interaction.guild.id);
let thread = false;
if (interaction.channel instanceof Discord.ThreadChannel) thread = true;
const threadChannel = interaction.channel as Discord.ThreadChannel;
- const channel = (interaction.channel as Discord.TextChannel);
- if (!channel.parent || config.tickets.category !== channel.parent.id || (thread ? (threadChannel.parent.parent.id !== config.tickets.category) : false)) {
- return interaction.reply({embeds: [new EmojiEmbed()
- .setTitle("Deleting Ticket...")
- .setDescription("This ticket is not in your tickets category, so cannot be deleted. You cannot run close in a thread.")
- .setStatus("Danger")
- .setEmoji("CONTROL.BLOCKCROSS")
- ], ephemeral: true});
+ const channel = interaction.channel as Discord.TextChannel;
+ if (
+ !channel.parent ||
+ config.tickets.category !== channel.parent.id ||
+ (thread
+ ? threadChannel.parent.parent.id !== config.tickets.category
+ : false)
+ ) {
+ return interaction.reply({
+ embeds: [
+ new EmojiEmbed()
+ .setTitle("Deleting Ticket...")
+ .setDescription(
+ "This ticket is not in your tickets category, so cannot be deleted. You cannot run close in a thread."
+ )
+ .setStatus("Danger")
+ .setEmoji("CONTROL.BLOCKCROSS")
+ ],
+ ephemeral: true
+ });
}
const status = channel.topic.split(" ")[1];
if (status === "Archived") {
- await interaction.reply({embeds: [new EmojiEmbed()
- .setTitle("Delete Ticket")
- .setDescription("Your ticket is being deleted...")
- .setStatus("Danger")
- .setEmoji("GUILD.TICKET.CLOSE")
- ]});
+ await interaction.reply({
+ embeds: [
+ new EmojiEmbed()
+ .setTitle("Delete Ticket")
+ .setDescription("Your ticket is being deleted...")
+ .setStatus("Danger")
+ .setEmoji("GUILD.TICKET.CLOSE")
+ ]
+ });
const data = {
- meta:{
+ meta: {
type: "ticketDeleted",
displayName: "Ticket Deleted",
calculateType: "ticketUpdate",
@@ -37,9 +59,24 @@
timestamp: new Date().getTime()
},
list: {
- ticketFor: entry(channel.topic.split(" ")[0], renderUser((await interaction.guild.members.fetch(channel.topic.split(" ")[0])).user)),
- deletedBy: entry(interaction.member.user.id, renderUser(interaction.member.user)),
- deleted: entry(new Date().getTime(), renderDelta(new Date().getTime()))
+ ticketFor: entry(
+ channel.topic.split(" ")[0],
+ renderUser(
+ (
+ await interaction.guild.members.fetch(
+ channel.topic.split(" ")[0]
+ )
+ ).user
+ )
+ ),
+ deletedBy: entry(
+ interaction.member.user.id,
+ renderUser(interaction.member.user)
+ ),
+ deleted: entry(
+ new Date().getTime(),
+ renderDelta(new Date().getTime())
+ )
},
hidden: {
guild: interaction.guild.id
@@ -49,12 +86,15 @@
interaction.channel.delete();
return;
} else if (status === "Active") {
- await interaction.reply({embeds: [new EmojiEmbed()
- .setTitle("Close Ticket")
- .setDescription("Your ticket is being closed...")
- .setStatus("Warning")
- .setEmoji("GUILD.TICKET.ARCHIVED")
- ]});
+ await interaction.reply({
+ embeds: [
+ new EmojiEmbed()
+ .setTitle("Close Ticket")
+ .setDescription("Your ticket is being closed...")
+ .setStatus("Warning")
+ .setEmoji("GUILD.TICKET.ARCHIVED")
+ ]
+ });
const overwrites = [
{
id: channel.topic.split(" ")[0],
@@ -69,15 +109,23 @@
] as Discord.OverwriteResolvable[];
if (config.tickets.supportRole !== null) {
overwrites.push({
- id: interaction.guild.roles.cache.get(config.tickets.supportRole),
- allow: ["VIEW_CHANNEL", "SEND_MESSAGES", "ATTACH_FILES", "ADD_REACTIONS", "READ_MESSAGE_HISTORY"],
+ id: interaction.guild.roles.cache.get(
+ config.tickets.supportRole
+ ),
+ allow: [
+ "VIEW_CHANNEL",
+ "SEND_MESSAGES",
+ "ATTACH_FILES",
+ "ADD_REACTIONS",
+ "READ_MESSAGE_HISTORY"
+ ],
type: "role"
});
}
- channel.edit({permissionOverwrites: overwrites});
+ channel.edit({ permissionOverwrites: overwrites });
channel.setTopic(`${channel.topic.split(" ")[0]} Archived`);
const data = {
- meta:{
+ meta: {
type: "ticketClosed",
displayName: "Ticket Closed",
calculateType: "ticketUpdate",
@@ -86,9 +134,24 @@
timestamp: new Date().getTime()
},
list: {
- ticketFor: entry(channel.topic.split(" ")[0], renderUser((await interaction.guild.members.fetch(channel.topic.split(" ")[0])).user)),
- closedBy: entry(interaction.member.user.id, renderUser(interaction.member.user)),
- closed: entry(new Date().getTime(), renderDelta(new Date().getTime())),
+ ticketFor: entry(
+ channel.topic.split(" ")[0],
+ renderUser(
+ (
+ await interaction.guild.members.fetch(
+ channel.topic.split(" ")[0]
+ )
+ ).user
+ )
+ ),
+ closedBy: entry(
+ interaction.member.user.id,
+ renderUser(interaction.member.user)
+ ),
+ closed: entry(
+ new Date().getTime(),
+ renderDelta(new Date().getTime())
+ ),
ticketChannel: entry(channel.id, renderChannel(channel))
},
hidden: {
@@ -96,26 +159,43 @@
}
};
log(data);
- await interaction.editReply({embeds: [new EmojiEmbed()
- .setTitle("Close Ticket")
- .setDescription("This ticket has been closed.\nType `/ticket close` again to delete it.\n\nNote: Check `/privacy` for details about transcripts.")
- .setStatus("Warning")
- .setEmoji("GUILD.TICKET.ARCHIVED")
- ], components: [
- new MessageActionRow().addComponents([
- new MessageButton()
- .setLabel("Delete")
- .setStyle("DANGER")
- .setCustomId("closeticket")
- .setEmoji(getEmojiByName("CONTROL.CROSS", "id"))
- ].concat(client.database.premium.hasPremium(interaction.guild.id) ? [
- new MessageButton()
- .setLabel("Create Transcript and Delete")
- .setStyle("PRIMARY")
- .setCustomId("createtranscript")
- .setEmoji(getEmojiByName("CONTROL.DOWNLOAD", "id"))
- ] : []))
- ]});
+ await interaction.editReply({
+ embeds: [
+ new EmojiEmbed()
+ .setTitle("Close Ticket")
+ .setDescription(
+ "This ticket has been closed.\nType `/ticket close` again to delete it.\n\nNote: Check `/privacy` for details about transcripts."
+ )
+ .setStatus("Warning")
+ .setEmoji("GUILD.TICKET.ARCHIVED")
+ ],
+ components: [
+ new MessageActionRow().addComponents(
+ [
+ new MessageButton()
+ .setLabel("Delete")
+ .setStyle("DANGER")
+ .setCustomId("closeticket")
+ .setEmoji(getEmojiByName("CONTROL.CROSS", "id"))
+ ].concat(
+ client.database.premium.hasPremium(interaction.guild.id)
+ ? [
+ new MessageButton()
+ .setLabel("Create Transcript and Delete")
+ .setStyle("PRIMARY")
+ .setCustomId("createtranscript")
+ .setEmoji(
+ getEmojiByName(
+ "CONTROL.DOWNLOAD",
+ "id"
+ )
+ )
+ ]
+ : []
+ )
+ )
+ ]
+ });
return;
}
}
@@ -127,19 +207,22 @@
if (!tickets) return;
const ticketChannels = tickets.children;
let deleted = 0;
- ticketChannels.forEach(element => {
+ ticketChannels.forEach((element) => {
if (element.type !== "GUILD_TEXT") return;
if (element.topic.split(" ")[0] === member) {
try {
element.delete();
- } catch { /* Errors if the channel does not exist (deleted already) */ }
+ } catch {
+ /* Errors if the channel does not exist (deleted already) */
+ }
deleted++;
}
});
if (deleted) {
- const { log, NucleusColors, entry, renderUser, renderDelta } = member.client.logger;
+ const { log, NucleusColors, entry, renderUser, renderDelta } =
+ member.client.logger;
const data = {
- meta:{
+ meta: {
type: "ticketPurge",
displayName: "Tickets Purged",
calculateType: "ticketUpdate",
@@ -150,7 +233,10 @@
list: {
ticketFor: entry(member, renderUser(member)),
deletedBy: entry(null, "Member left server"),
- deleted: entry(new Date().getTime(), renderDelta(new Date().getTime())),
+ deleted: entry(
+ new Date().getTime(),
+ renderDelta(new Date().getTime())
+ ),
ticketsDeleted: deleted
},
hidden: {
@@ -161,4 +247,4 @@
}
}
-export { purgeByUser };
\ No newline at end of file
+export { purgeByUser };