Fix a bunch of linter errors
diff --git a/src/commands/mod/info.ts b/src/commands/mod/info.ts
index 68b3ce7..86a4c4a 100644
--- a/src/commands/mod/info.ts
+++ b/src/commands/mod/info.ts
@@ -1,5 +1,11 @@
import { HistorySchema } from "../../utils/database";
-import Discord, { CommandInteraction, GuildMember, MessageActionRow, MessageButton, TextInputComponent } from "discord.js";
+import Discord, {
+ CommandInteraction,
+ GuildMember,
+ MessageActionRow,
+ MessageButton,
+ TextInputComponent
+} from "discord.js";
import { SlashCommandSubcommandBuilder } from "@discordjs/builders";
import EmojiEmbed from "../../utils/generateEmojiEmbed.js";
import getEmojiByName from "../../utils/getEmojiByName.js";
@@ -11,51 +17,88 @@
builder
.setName("info")
.setDescription("Shows moderator information about a user")
- .addUserOption(option => option.setName("user").setDescription("The user to get information about").setRequired(true));
+ .addUserOption((option) =>
+ option
+ .setName("user")
+ .setDescription("The user to get information about")
+ .setRequired(true)
+ );
const types = {
- "warn": {emoji: "PUNISH.WARN.YELLOW", text: "Warned"},
- "mute": {emoji: "PUNISH.MUTE.YELLOW", text: "Muted"},
- "unmute": {emoji: "PUNISH.MUTE.GREEN", text: "Unmuted"},
- "join": {emoji: "MEMBER.JOIN", text: "Joined"},
- "leave": {emoji: "MEMBER.LEAVE", text: "Left"},
- "kick": {emoji: "MEMBER.KICK", text: "Kicked"},
- "softban": {emoji: "PUNISH.SOFTBAN", text: "Softbanned"},
- "ban": {emoji: "MEMBER.BAN", text: "Banned"},
- "unban": {emoji: "MEMBER.UNBAN", text: "Unbanned"},
- "purge": {emoji: "PUNISH.CLEARHISTORY", text: "Messages cleared"},
- "nickname": {emoji: "PUNISH.NICKNAME.YELLOW", text: "Nickname changed"}
+ warn: { emoji: "PUNISH.WARN.YELLOW", text: "Warned" },
+ mute: { emoji: "PUNISH.MUTE.YELLOW", text: "Muted" },
+ unmute: { emoji: "PUNISH.MUTE.GREEN", text: "Unmuted" },
+ join: { emoji: "MEMBER.JOIN", text: "Joined" },
+ leave: { emoji: "MEMBER.LEAVE", text: "Left" },
+ kick: { emoji: "MEMBER.KICK", text: "Kicked" },
+ softban: { emoji: "PUNISH.SOFTBAN", text: "Softbanned" },
+ ban: { emoji: "MEMBER.BAN", text: "Banned" },
+ unban: { emoji: "MEMBER.UNBAN", text: "Unbanned" },
+ purge: { emoji: "PUNISH.CLEARHISTORY", text: "Messages cleared" },
+ nickname: { emoji: "PUNISH.NICKNAME.YELLOW", text: "Nickname changed" }
};
function historyToString(history: HistorySchema) {
let s = `${getEmojiByName(types[history.type].emoji)} ${
- history.amount ? (history.amount + " ") : ""
- }${
- types[history.type].text
- } on <t:${Math.round(history.occurredAt.getTime() / 1000)}:F>`;
- if (history.moderator) { s += ` by <@${history.moderator}>`; }
- if (history.reason) { s += `\n**Reason:**\n> ${history.reason}`; }
- if (history.before) { s += `\n**Before:**\n> ${history.before}`; }
- if (history.after) { s += `\n**After:**\n> ${history.after}`; }
+ history.amount ? history.amount + " " : ""
+ }${types[history.type].text} on <t:${Math.round(
+ history.occurredAt.getTime() / 1000
+ )}:F>`;
+ if (history.moderator) {
+ s += ` by <@${history.moderator}>`;
+ }
+ if (history.reason) {
+ s += `\n**Reason:**\n> ${history.reason}`;
+ }
+ if (history.before) {
+ s += `\n**Before:**\n> ${history.before}`;
+ }
+ if (history.after) {
+ s += `\n**After:**\n> ${history.after}`;
+ }
return s + "\n";
}
-
class TimelineSection {
name: string;
- content: {data: HistorySchema, rendered: string}[] = [];
+ content: { data: HistorySchema; rendered: string }[] = [];
- addContent = (content: {data: HistorySchema, rendered: string}) => { this.content.push(content); return this; };
- contentLength = () => { return this.content.reduce((acc, cur) => acc + cur.rendered.length, 0); };
+ addContent = (content: { data: HistorySchema; rendered: string }) => {
+ this.content.push(content);
+ return this;
+ };
+ contentLength = () => {
+ return this.content.reduce((acc, cur) => acc + cur.rendered.length, 0);
+ };
generateName = () => {
- const first = Math.round(this.content[0].data.occurredAt.getTime() / 1000);
- const last = Math.round(this.content[this.content.length - 1].data.occurredAt.getTime() / 1000);
- if (first === last) { return this.name = `<t:${first}:F>`; }
- return this.name = `<t:${first}:F> - <t:${last}:F>`;
+ const first = Math.round(
+ this.content[0].data.occurredAt.getTime() / 1000
+ );
+ const last = Math.round(
+ this.content[this.content.length - 1].data.occurredAt.getTime() /
+ 1000
+ );
+ if (first === last) {
+ return (this.name = `<t:${first}:F>`);
+ }
+ return (this.name = `<t:${first}:F> - <t:${last}:F>`);
};
}
-const monthNames = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
+const monthNames = [
+ "January",
+ "February",
+ "March",
+ "April",
+ "May",
+ "June",
+ "July",
+ "August",
+ "September",
+ "October",
+ "November",
+ "December"
+];
async function showHistory(member, interaction: CommandInteraction) {
let currentYear = new Date().getFullYear();
@@ -66,41 +109,72 @@
let openFilterPane = false;
while (true) {
if (refresh) {
- history = await client.database.history.read(member.guild.id, member.id, currentYear);
- history = history.sort((a, b) => b.occurredAt.getTime() - a.occurredAt.getTime()).reverse();
+ history = await client.database.history.read(
+ member.guild.id,
+ member.id,
+ currentYear
+ );
+ history = history
+ .sort((a, b) => b.occurredAt.getTime() - a.occurredAt.getTime())
+ .reverse();
if (openFilterPane) {
let tempFilteredTypes = filteredTypes;
- if (filteredTypes.length === 0) { tempFilteredTypes = Object.keys(types); }
- history = history.filter(h => tempFilteredTypes.includes(h.type));
+ if (filteredTypes.length === 0) {
+ tempFilteredTypes = Object.keys(types);
+ }
+ history = history.filter((h) =>
+ tempFilteredTypes.includes(h.type)
+ );
}
refresh = false;
}
const groups: TimelineSection[] = [];
if (history.length > 0) {
current = new TimelineSection();
- history.forEach(event => {
- if (current.contentLength() + historyToString(event).length > 2000 || current.content.length === 5) {
+ history.forEach((event) => {
+ if (
+ current.contentLength() + historyToString(event).length >
+ 2000 ||
+ current.content.length === 5
+ ) {
groups.push(current);
current.generateName();
current = new TimelineSection();
}
- current.addContent({data: event, rendered: historyToString(event)});
+ current.addContent({
+ data: event,
+ rendered: historyToString(event)
+ });
});
current.generateName();
groups.push(current);
- if (pageIndex === null) { pageIndex = groups.length - 1; }
+ if (pageIndex === null) {
+ pageIndex = groups.length - 1;
+ }
}
const components = (
- openFilterPane ? [
- new MessageActionRow().addComponents([new Discord.MessageSelectMenu().setOptions(
- Object.entries(types).map(([key, value]) => ({
- label: value.text,
- value: key,
- default: filteredTypes.includes(key),
- emoji: client.emojis.resolve(getEmojiByName(value.emoji, "id"))
- }))
- ).setMinValues(1).setMaxValues(Object.keys(types).length).setCustomId("filter").setPlaceholder("Select at least one event")])
- ] : []).concat([
+ openFilterPane
+ ? [
+ new MessageActionRow().addComponents([
+ new Discord.MessageSelectMenu()
+ .setOptions(
+ Object.entries(types).map(([key, value]) => ({
+ label: value.text,
+ value: key,
+ default: filteredTypes.includes(key),
+ emoji: client.emojis.resolve(
+ getEmojiByName(value.emoji, "id")
+ )
+ }))
+ )
+ .setMinValues(1)
+ .setMaxValues(Object.keys(types).length)
+ .setCustomId("filter")
+ .setPlaceholder("Select at least one event")
+ ])
+ ]
+ : []
+ ).concat([
new MessageActionRow().addComponents([
new MessageButton()
.setCustomId("prevYear")
@@ -119,14 +193,18 @@
.setCustomId("nextPage")
.setLabel("Next page")
.setStyle("PRIMARY")
- .setDisabled(pageIndex >= groups.length - 1 && currentYear === new Date().getFullYear()),
+ .setDisabled(
+ pageIndex >= groups.length - 1 &&
+ currentYear === new Date().getFullYear()
+ ),
new MessageButton()
.setCustomId("nextYear")
.setLabel((currentYear + 1).toString())
.setEmoji(getEmojiByName("CONTROL.RIGHT", "id"))
.setStyle("SECONDARY")
.setDisabled(currentYear === new Date().getFullYear())
- ]), new MessageActionRow().addComponents([
+ ]),
+ new MessageActionRow().addComponents([
new MessageButton()
.setLabel("Mod notes")
.setCustomId("modNotes")
@@ -139,40 +217,82 @@
.setEmoji(getEmojiByName("ICONS.FILTER", "id"))
])
]);
- const end = "\n\nJanuary " + currentYear.toString() + pageIndicator(
- Math.max(groups.length, 1),
- groups.length === 0 ? 1 : pageIndex
- ) + (currentYear === new Date().getFullYear() ? monthNames[new Date().getMonth()] : "December"
- ) + " " + currentYear.toString();
+ const end =
+ "\n\nJanuary " +
+ currentYear.toString() +
+ pageIndicator(
+ Math.max(groups.length, 1),
+ groups.length === 0 ? 1 : pageIndex
+ ) +
+ (currentYear === new Date().getFullYear()
+ ? monthNames[new Date().getMonth()]
+ : "December") +
+ " " +
+ currentYear.toString();
if (groups.length > 0) {
const toRender = groups[Math.min(pageIndex, groups.length - 1)];
- m = await interaction.editReply({embeds: [new EmojiEmbed()
- .setEmoji("MEMBER.JOIN")
- .setTitle("Moderation history for " + member.user.username)
- .setDescription(`**${toRender.name}**\n\n` + toRender.content.map(c => c.rendered).join("\n") + end)
- .setStatus("Success")
- .setFooter({text: (openFilterPane && filteredTypes.length) ? "Filters are currently enabled" : ""})
- ], components: components});
+ m = await interaction.editReply({
+ embeds: [
+ new EmojiEmbed()
+ .setEmoji("MEMBER.JOIN")
+ .setTitle(
+ "Moderation history for " + member.user.username
+ )
+ .setDescription(
+ `**${toRender.name}**\n\n` +
+ toRender.content
+ .map((c) => c.rendered)
+ .join("\n") +
+ end
+ )
+ .setStatus("Success")
+ .setFooter({
+ text:
+ openFilterPane && filteredTypes.length
+ ? "Filters are currently enabled"
+ : ""
+ })
+ ],
+ components: components
+ });
} else {
- m = await interaction.editReply({embeds: [new EmojiEmbed()
- .setEmoji("MEMBER.JOIN")
- .setTitle("Moderation history for " + member.user.username)
- .setDescription(`**${currentYear}**\n\n*No events*` + "\n\n" + end)
- .setStatus("Success")
- .setFooter({text: (openFilterPane && filteredTypes.length) ? "Filters are currently enabled" : ""})
- ], components: components});
+ m = await interaction.editReply({
+ embeds: [
+ new EmojiEmbed()
+ .setEmoji("MEMBER.JOIN")
+ .setTitle(
+ "Moderation history for " + member.user.username
+ )
+ .setDescription(
+ `**${currentYear}**\n\n*No events*` + "\n\n" + end
+ )
+ .setStatus("Success")
+ .setFooter({
+ text:
+ openFilterPane && filteredTypes.length
+ ? "Filters are currently enabled"
+ : ""
+ })
+ ],
+ components: components
+ });
}
let i;
try {
i = await m.awaitMessageComponent({ time: 300000 });
} catch (e) {
- interaction.editReply({embeds: [new EmojiEmbed()
- .setEmoji("MEMBER.JOIN")
- .setTitle("Moderation history for " + member.user.username)
- .setDescription(m.embeds[0].description)
- .setStatus("Danger")
- .setFooter({text: "Message timed out"})
- ]});
+ interaction.editReply({
+ embeds: [
+ new EmojiEmbed()
+ .setEmoji("MEMBER.JOIN")
+ .setTitle(
+ "Moderation history for " + member.user.username
+ )
+ .setDescription(m.embeds[0].description)
+ .setStatus("Danger")
+ .setFooter({ text: "Message timed out" })
+ ]
+ });
return 0;
}
i.deferUpdate();
@@ -181,103 +301,170 @@
pageIndex = null;
refresh = true;
}
- if (i.customId === "prevYear") { currentYear--; pageIndex = null; refresh = true; }
- if (i.customId === "nextYear") { currentYear++; pageIndex = null; refresh = true; }
+ if (i.customId === "prevYear") {
+ currentYear--;
+ pageIndex = null;
+ refresh = true;
+ }
+ if (i.customId === "nextYear") {
+ currentYear++;
+ pageIndex = null;
+ refresh = true;
+ }
if (i.customId === "prevPage") {
pageIndex--;
- if (pageIndex < 0) { pageIndex = null; currentYear--; refresh = true; }
+ if (pageIndex < 0) {
+ pageIndex = null;
+ currentYear--;
+ refresh = true;
+ }
}
if (i.customId === "nextPage") {
pageIndex++;
- if (pageIndex >= groups.length) { pageIndex = 0; currentYear++; refresh = true; }
+ if (pageIndex >= groups.length) {
+ pageIndex = 0;
+ currentYear++;
+ refresh = true;
+ }
}
- if (i.customId === "today") { currentYear = new Date().getFullYear(); pageIndex = null; refresh = true; }
- if (i.customId === "modNotes") { return 1; }
- if (i.customId === "openFilter") { openFilterPane = !openFilterPane; refresh = true; }
+ if (i.customId === "today") {
+ currentYear = new Date().getFullYear();
+ pageIndex = null;
+ refresh = true;
+ }
+ if (i.customId === "modNotes") {
+ return 1;
+ }
+ if (i.customId === "openFilter") {
+ openFilterPane = !openFilterPane;
+ refresh = true;
+ }
}
}
-
-const callback = async (interaction: CommandInteraction): Promise<void | unknown> => {
+const callback = async (
+ interaction: CommandInteraction
+): Promise<void | unknown> => {
let m;
- const member = (interaction.options.getMember("user")) as Discord.GuildMember;
- await interaction.reply({embeds: [new EmojiEmbed()
- .setEmoji("NUCLEUS.LOADING")
- .setTitle("Downloading Data")
- .setStatus("Danger")
- ], ephemeral: true, fetchReply: true});
+ const member = interaction.options.getMember("user") as Discord.GuildMember;
+ await interaction.reply({
+ embeds: [
+ new EmojiEmbed()
+ .setEmoji("NUCLEUS.LOADING")
+ .setTitle("Downloading Data")
+ .setStatus("Danger")
+ ],
+ ephemeral: true,
+ fetchReply: true
+ });
let note;
let firstLoad = true;
while (true) {
note = await client.database.notes.read(member.guild.id, member.id);
- if (firstLoad && !note) { await showHistory(member, interaction); }
+ if (firstLoad && !note) {
+ await showHistory(member, interaction);
+ }
firstLoad = false;
- m = await interaction.editReply({embeds: [new EmojiEmbed()
- .setEmoji("MEMBER.JOIN")
- .setTitle("Mod notes for " + member.user.username)
- .setDescription(note ? note : "*No note set*")
- .setStatus("Success")
- ], components: [new MessageActionRow().addComponents([
- new MessageButton()
- .setLabel(`${note ? "Modify" : "Create"} note`)
- .setStyle("PRIMARY")
- .setCustomId("modify")
- .setEmoji(getEmojiByName("ICONS.EDIT", "id")),
- new MessageButton()
- .setLabel("View moderation history")
- .setStyle("PRIMARY")
- .setCustomId("history")
- .setEmoji(getEmojiByName("ICONS.HISTORY", "id"))
- ])]});
+ m = await interaction.editReply({
+ embeds: [
+ new EmojiEmbed()
+ .setEmoji("MEMBER.JOIN")
+ .setTitle("Mod notes for " + member.user.username)
+ .setDescription(note ? note : "*No note set*")
+ .setStatus("Success")
+ ],
+ components: [
+ new MessageActionRow().addComponents([
+ new MessageButton()
+ .setLabel(`${note ? "Modify" : "Create"} note`)
+ .setStyle("PRIMARY")
+ .setCustomId("modify")
+ .setEmoji(getEmojiByName("ICONS.EDIT", "id")),
+ new MessageButton()
+ .setLabel("View moderation history")
+ .setStyle("PRIMARY")
+ .setCustomId("history")
+ .setEmoji(getEmojiByName("ICONS.HISTORY", "id"))
+ ])
+ ]
+ });
let i;
try {
i = await m.awaitMessageComponent({ time: 300000 });
- } catch (e) { return; }
+ } catch (e) {
+ return;
+ }
if (i.customId === "modify") {
- await i.showModal(new Discord.Modal().setCustomId("modal").setTitle("Editing moderator note").addComponents(
- new MessageActionRow<TextInputComponent>().addComponents(new TextInputComponent()
- .setCustomId("note")
- .setLabel("Note")
- .setMaxLength(4000)
- .setRequired(false)
- .setStyle("PARAGRAPH")
- .setValue(note ? note : "")
- )
- ));
+ await i.showModal(
+ new Discord.Modal()
+ .setCustomId("modal")
+ .setTitle("Editing moderator note")
+ .addComponents(
+ new MessageActionRow<TextInputComponent>().addComponents(
+ new TextInputComponent()
+ .setCustomId("note")
+ .setLabel("Note")
+ .setMaxLength(4000)
+ .setRequired(false)
+ .setStyle("PARAGRAPH")
+ .setValue(note ? note : "")
+ )
+ )
+ );
await interaction.editReply({
- embeds: [new EmojiEmbed()
- .setTitle("Mod notes for " + member.user.username)
- .setDescription("Modal opened. If you can't see it, click back and try again.")
- .setStatus("Success")
- .setEmoji("GUILD.TICKET.OPEN")
- ], components: [new MessageActionRow().addComponents([new MessageButton()
- .setLabel("Back")
- .setEmoji(getEmojiByName("CONTROL.LEFT", "id"))
- .setStyle("PRIMARY")
- .setCustomId("back")
- ])]
+ embeds: [
+ new EmojiEmbed()
+ .setTitle("Mod notes for " + member.user.username)
+ .setDescription(
+ "Modal opened. If you can't see it, click back and try again."
+ )
+ .setStatus("Success")
+ .setEmoji("GUILD.TICKET.OPEN")
+ ],
+ components: [
+ new MessageActionRow().addComponents([
+ new MessageButton()
+ .setLabel("Back")
+ .setEmoji(getEmojiByName("CONTROL.LEFT", "id"))
+ .setStyle("PRIMARY")
+ .setCustomId("back")
+ ])
+ ]
});
let out;
try {
- out = await modalInteractionCollector(m, (m) => m.channel.id === interaction.channel.id, (m) => m.customId === "modify");
- } catch (e) { continue; }
+ out = await modalInteractionCollector(
+ m,
+ (m) => m.channel.id === interaction.channel.id,
+ (m) => m.customId === "modify"
+ );
+ } catch (e) {
+ continue;
+ }
if (out.fields) {
const toAdd = out.fields.getTextInputValue("note") || null;
- await client.database.notes.create(member.guild.id, member.id, toAdd);
- } else { continue; }
+ await client.database.notes.create(
+ member.guild.id,
+ member.id,
+ toAdd
+ );
+ } else {
+ continue;
+ }
} else if (i.customId === "history") {
i.deferUpdate();
- if (!await showHistory(member, interaction) ) return;
+ if (!(await showHistory(member, interaction))) return;
}
}
};
const check = (interaction: CommandInteraction) => {
- const member = (interaction.member as GuildMember);
- if (! member.permissions.has("MODERATE_MEMBERS")) throw "You do not have the *Moderate Members* permission";
+ const member = interaction.member as GuildMember;
+ if (!member.permissions.has("MODERATE_MEMBERS"))
+ throw "You do not have the *Moderate Members* permission";
return true;
};
export { command };
export { callback };
-export { check };
\ No newline at end of file
+export { check };