Fix some more eslint & ts errors

pull/8/head
Skyler Grey 3 years ago
parent 5c4bacccc8
commit c634e2bc18
Signed by: Minion3665
GPG Key ID: 1AFD10256B3C714D

@ -7,7 +7,8 @@ import {
MessageSelectMenu MessageSelectMenu
} from "discord.js"; } from "discord.js";
import { SlashCommandBuilder } from "@discordjs/builders"; import { SlashCommandBuilder } from "@discordjs/builders";
import { WrappedCheck } from "jshaiku"; // @ts-expect-error
import type { WrappedCheck } from "jshaiku";
import EmojiEmbed from "../utils/generateEmojiEmbed.js"; import EmojiEmbed from "../utils/generateEmojiEmbed.js";
import client from "../utils/client.js"; import client from "../utils/client.js";
import addPlural from "../utils/plurals.js"; import addPlural from "../utils/plurals.js";
@ -17,9 +18,7 @@ const command = new SlashCommandBuilder()
.setName("categorise") .setName("categorise")
.setDescription("Categorises your servers channels"); .setDescription("Categorises your servers channels");
const callback = async ( const callback = async (interaction: CommandInteraction): Promise<unknown> => {
interaction: CommandInteraction
): Promise<void | unknown> => {
const channels = interaction.guild.channels.cache.filter( const channels = interaction.guild.channels.cache.filter(
(c) => c.type !== "GUILD_CATEGORY" (c) => c.type !== "GUILD_CATEGORY"
); );

@ -1,4 +1,4 @@
import { HistorySchema } from "../../utils/database"; import { HistorySchema } from "../../utils/database.js";
import Discord, { import Discord, {
CommandInteraction, CommandInteraction,
GuildMember, GuildMember,

@ -71,17 +71,15 @@ const command = (builder: SlashCommandSubcommandBuilder) =>
.setRequired(false) .setRequired(false)
); );
const callback = async ( const callback = async (interaction: CommandInteraction): Promise<unknown> => {
interaction: CommandInteraction
): Promise<void | unknown> => {
const { log, NucleusColors, renderUser, entry, renderDelta } = const { log, NucleusColors, renderUser, entry, renderDelta } =
client.logger; client.logger;
const user = interaction.options.getMember("user") as GuildMember; const user = interaction.options.getMember("user") as GuildMember;
const time = { const time = {
days: interaction.options.getInteger("days") || 0, days: interaction.options.getInteger("days") ?? 0,
hours: interaction.options.getInteger("hours") || 0, hours: interaction.options.getInteger("hours") ?? 0,
minutes: interaction.options.getInteger("minutes") || 0, minutes: interaction.options.getInteger("minutes") ?? 0,
seconds: interaction.options.getInteger("seconds") || 0 seconds: interaction.options.getInteger("seconds") ?? 0
}; };
const config = await client.database.guilds.read(interaction.guild.id); const config = await client.database.guilds.read(interaction.guild.id);
let serverSettingsDescription = config.moderation.mute.timeout let serverSettingsDescription = config.moderation.mute.timeout

@ -1,5 +1,5 @@
import { LoadingEmbed } from "./../../../utils/defaultEmbeds.js"; import { LoadingEmbed } from "./../../../utils/defaultEmbeds.js";
import { ChannelType } from "discord-api-types"; import { ChannelType } from "discord-api-types/v9";
import Discord, { import Discord, {
CommandInteraction, CommandInteraction,
MessageActionRow, MessageActionRow,

@ -1,5 +1,5 @@
import { LoadingEmbed } from "./../../../utils/defaultEmbeds.js"; import { LoadingEmbed } from "./../../../utils/defaultEmbeds.js";
import { ChannelType } from "discord-api-types"; import { ChannelType } from "discord-api-types/v9";
import Discord, { import Discord, {
CommandInteraction, CommandInteraction,
MessageActionRow, MessageActionRow,

@ -1,5 +1,5 @@
import { LoadingEmbed } from "./../../../utils/defaultEmbeds.js"; import { LoadingEmbed } from "./../../../utils/defaultEmbeds.js";
import { ChannelType } from "discord-api-types"; import { ChannelType } from "discord-api-types/v9";
import Discord, { import Discord, {
CommandInteraction, CommandInteraction,
MessageActionRow, MessageActionRow,
@ -9,7 +9,6 @@ import EmojiEmbed from "../../../utils/generateEmojiEmbed.js";
import confirmationMessage from "../../../utils/confirmationMessage.js"; import confirmationMessage from "../../../utils/confirmationMessage.js";
import getEmojiByName from "../../../utils/getEmojiByName.js"; import getEmojiByName from "../../../utils/getEmojiByName.js";
import type { SlashCommandSubcommandBuilder } from "@discordjs/builders"; import type { SlashCommandSubcommandBuilder } from "@discordjs/builders";
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-expect-error // @ts-expect-error
import type { WrappedCheck } from "jshaiku"; import type { WrappedCheck } from "jshaiku";
import client from "../../../utils/client.js"; import client from "../../../utils/client.js";

@ -19,7 +19,7 @@ import {
SelectMenuOption, SelectMenuOption,
SlashCommandSubcommandBuilder SlashCommandSubcommandBuilder
} from "@discordjs/builders"; } from "@discordjs/builders";
import { ChannelType } from "discord-api-types"; import { ChannelType } from "discord-api-types/v9";
import client from "../../utils/client.js"; import client from "../../utils/client.js";
import { import {
toHexInteger, toHexInteger,

@ -8,12 +8,12 @@ import Discord, {
MessageComponentInteraction, MessageComponentInteraction,
Role Role
} from "discord.js"; } from "discord.js";
import { SlashCommandSubcommandBuilder } from "@discordjs/builders"; import type { SlashCommandSubcommandBuilder } from "@discordjs/builders";
import EmojiEmbed from "../../utils/generateEmojiEmbed.js"; import EmojiEmbed from "../../utils/generateEmojiEmbed.js";
import client from "../../utils/client.js"; import client from "../../utils/client.js";
import confirmationMessage from "../../utils/confirmationMessage.js"; import confirmationMessage from "../../utils/confirmationMessage.js";
import generateKeyValueList from "../../utils/generateKeyValueList.js"; import generateKeyValueList from "../../utils/generateKeyValueList.js";
import { ChannelType } from "discord-api-types"; import { ChannelType } from "discord-api-types/v9";
import getEmojiByName from "../../utils/getEmojiByName.js"; import getEmojiByName from "../../utils/getEmojiByName.js";
const command = (builder: SlashCommandSubcommandBuilder) => const command = (builder: SlashCommandSubcommandBuilder) =>
@ -49,9 +49,7 @@ const command = (builder: SlashCommandSubcommandBuilder) =>
.addChannelTypes([ChannelType.GuildText, ChannelType.GuildNews]) .addChannelTypes([ChannelType.GuildText, ChannelType.GuildNews])
); );
const callback = async ( const callback = async (interaction: CommandInteraction): Promise<unknown> => {
interaction: CommandInteraction
): Promise<void | unknown> => {
const { renderRole, renderChannel, log, NucleusColors, entry, renderUser } = const { renderRole, renderChannel, log, NucleusColors, entry, renderUser } =
client.logger; client.logger;
await interaction.reply({ await interaction.reply({
@ -340,7 +338,9 @@ const callback = async (
const check = (interaction: CommandInteraction) => { const check = (interaction: CommandInteraction) => {
const member = interaction.member as Discord.GuildMember; const member = interaction.member as Discord.GuildMember;
if (!member.permissions.has("MANAGE_GUILD")) if (!member.permissions.has("MANAGE_GUILD"))
throw "You must have the *Manage Server* permission to use this command"; throw new Error(
"You must have the *Manage Server* permission to use this command"
);
return true; return true;
}; };

@ -1,5 +1,5 @@
import Discord, { CommandInteraction } from "discord.js"; import type { CommandInteraction, GuildMember } from "discord.js";
import { SlashCommandSubcommandBuilder } from "@discordjs/builders"; import type { SlashCommandSubcommandBuilder } from "@discordjs/builders";
import EmojiEmbed from "../../utils/generateEmojiEmbed.js"; import EmojiEmbed from "../../utils/generateEmojiEmbed.js";
import confirmationMessage from "../../utils/confirmationMessage.js"; import confirmationMessage from "../../utils/confirmationMessage.js";
import keyValueList from "../../utils/generateKeyValueList.js"; import keyValueList from "../../utils/generateKeyValueList.js";
@ -28,10 +28,11 @@ const command = (builder: SlashCommandSubcommandBuilder) =>
.setDescription("The new name of the tag / Edit") .setDescription("The new name of the tag / Edit")
); );
const callback = async (interaction: CommandInteraction): Promise<void> => { const callback = async (interaction: CommandInteraction): Promise<unknown> => {
if (!interaction.guild) return;
const name = interaction.options.getString("name"); const name = interaction.options.getString("name");
const value = interaction.options.getString("value") || ""; const value = interaction.options.getString("value") ?? "";
const newname = interaction.options.getString("newname") || ""; const newname = interaction.options.getString("newname") ?? "";
if (!newname && !value) if (!newname && !value)
return await interaction.reply({ return await interaction.reply({
embeds: [ embeds: [
@ -155,9 +156,11 @@ const callback = async (interaction: CommandInteraction): Promise<void> => {
}; };
const check = (interaction: CommandInteraction) => { const check = (interaction: CommandInteraction) => {
const member = interaction.member as Discord.GuildMember; const member = interaction.member as GuildMember;
if (!member.permissions.has("MANAGE_MESSAGES")) if (!member.permissions.has("MANAGE_MESSAGES"))
throw "You must have the *Manage Messages* permission to use this command"; throw new Error(
"You must have the *Manage Messages* permission to use this command"
);
return true; return true;
}; };

@ -55,8 +55,9 @@ class Embed {
} }
const callback = async (interaction: CommandInteraction): Promise<void> => { const callback = async (interaction: CommandInteraction): Promise<void> => {
if (!interaction.guild) return;
const { renderUser, renderDelta } = client.logger; const { renderUser, renderDelta } = client.logger;
const member = (interaction.options.getMember("user") || const member = (interaction.options.getMember("user") ??
interaction.member) as Discord.GuildMember; interaction.member) as Discord.GuildMember;
const flags: string[] = []; const flags: string[] = [];
if ( if (
@ -107,26 +108,29 @@ const callback = async (interaction: CommandInteraction): Promise<void> => {
}; };
const members = await interaction.guild.members.fetch(); const members = await interaction.guild.members.fetch();
const membersArray = [...members.values()]; const membersArray = [...members.values()];
membersArray.sort((a, b) => a.joinedTimestamp - b.joinedTimestamp); membersArray.sort((a, b) => {
if (a.joinedTimestamp === null) return 1;
if (b.joinedTimestamp === null) return -1;
return a.joinedTimestamp - b.joinedTimestamp;
});
const joinPos = membersArray.findIndex((m) => m.id === member.user.id); const joinPos = membersArray.findIndex((m) => m.id === member.user.id);
const roles = member.roles.cache const roles = member.roles.cache
.filter((r) => r.id !== interaction.guild.id) .filter((r) => r.id !== interaction.guild!.id)
.sort(); .sort();
let s = ""; let s = "";
let count = 0; let count = 0;
let ended = false; let ended = false;
roles.map((item) => { for (const roleId in roles) {
if (ended) return; const string = `<@&${roleId}>, `;
const string = `<@&${item.id}>, `;
if (s.length + string.length > 1000) { if (s.length + string.length > 1000) {
ended = true; ended = true;
s += `and ${roles.size - count} more`; s += `and ${roles.size - count} more`;
return; break;
} }
count++; count++;
s += string; s += string;
}); }
if (s.length > 0 && !ended) s = s.slice(0, -2); if (s.length > 0 && !ended) s = s.slice(0, -2);
let perms = ""; let perms = "";

@ -19,7 +19,7 @@ const command = (builder: SlashCommandSubcommandBuilder) =>
const callback = async (interaction: CommandInteraction): Promise<void> => { const callback = async (interaction: CommandInteraction): Promise<void> => {
const { renderUser } = client.logger; const { renderUser } = client.logger;
const member = (interaction.options.getMember("user") || const member = (interaction.options.getMember("user") ??
interaction.member) as Discord.GuildMember; interaction.member) as Discord.GuildMember;
await interaction.reply({ await interaction.reply({
embeds: [ embeds: [
@ -33,7 +33,7 @@ const callback = async (interaction: CommandInteraction): Promise<void> => {
url: member.user.displayAvatarURL({ dynamic: true }) url: member.user.displayAvatarURL({ dynamic: true })
}) })
) )
.setImage(await member.user.displayAvatarURL({ dynamic: true })) .setImage(member.user.displayAvatarURL({ dynamic: true }))
], ],
ephemeral: true, ephemeral: true,
fetchReply: true fetchReply: true

@ -10,7 +10,6 @@ import {
SelectMenuOption, SelectMenuOption,
SlashCommandSubcommandBuilder SlashCommandSubcommandBuilder
} from "@discordjs/builders"; } from "@discordjs/builders";
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-expect-error // @ts-expect-error
import { WrappedCheck } from "jshaiku"; import { WrappedCheck } from "jshaiku";
import EmojiEmbed from "../../utils/generateEmojiEmbed.js"; import EmojiEmbed from "../../utils/generateEmojiEmbed.js";
@ -45,9 +44,7 @@ const generateFromTrack = (
return "TRACKS.VERTICAL.MIDDLE." + disabled + active; return "TRACKS.VERTICAL.MIDDLE." + disabled + active;
}; };
const callback = async ( const callback = async (interaction: CommandInteraction): Promise<unknown> => {
interaction: CommandInteraction
): Promise<void | unknown> => {
const { renderUser } = client.logger; const { renderUser } = client.logger;
const member = interaction.options.getMember("user") as GuildMember; const member = interaction.options.getMember("user") as GuildMember;
const guild = interaction.guild; const guild = interaction.guild;
@ -57,7 +54,7 @@ const callback = async (
let track = 0; let track = 0;
let generated; let generated;
const roles = await guild.roles.fetch(); const roles = await guild.roles.fetch();
const memberRoles = await member.roles; const memberRoles = member.roles;
let managed: boolean; let managed: boolean;
while (true) { while (true) {
const data = config.tracks[track]; const data = config.tracks[track];
@ -137,9 +134,8 @@ const callback = async (
}) })
.join("\n"); .join("\n");
const selected = []; const selected = [];
for (let i = 0; i < data.track.length; i++) { for (const position of data.track) {
if (memberRoles.cache.has(data.track[i])) if (memberRoles.cache.has(position)) selected.push(position);
selected.push(data.track[i]);
} }
const conflict = data.retainPrevious ? false : selected.length > 1; const conflict = data.retainPrevious ? false : selected.length > 1;
let conflictDropdown; let conflictDropdown;
@ -278,7 +274,8 @@ const check = async (
) => { ) => {
const tracks = (await client.database.guilds.read(interaction.guild.id)) const tracks = (await client.database.guilds.read(interaction.guild.id))
.tracks; .tracks;
if (tracks.length === 0) throw "This server does not have any tracks"; if (tracks.length === 0)
throw new Error("This server does not have any tracks");
const member = interaction.member as GuildMember; const member = interaction.member as GuildMember;
// Allow the owner to promote anyone // Allow the owner to promote anyone
if (member.id === interaction.guild.ownerId) return true; if (member.id === interaction.guild.ownerId) return true;
@ -297,7 +294,7 @@ const check = async (
} }
// Check if the user has manage_roles permission // Check if the user has manage_roles permission
if (!managed && !member.permissions.has("MANAGE_ROLES")) if (!managed && !member.permissions.has("MANAGE_ROLES"))
throw "You do not have the *Manage Roles* permission"; throw new Error("You do not have the *Manage Roles* permission");
// Allow track // Allow track
return true; return true;
}; };

@ -1,6 +1,5 @@
import type { CommandInteraction } from "discord.js"; import type { CommandInteraction } from "discord.js";
import { SlashCommandBuilder } from "@discordjs/builders"; import { SlashCommandBuilder } from "@discordjs/builders";
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-expect-error // @ts-expect-error
import { WrappedCheck } from "jshaiku"; import { WrappedCheck } from "jshaiku";
import verify from "../reflex/verify.js"; import verify from "../reflex/verify.js";

@ -1,5 +1,4 @@
import fs from "fs"; import fs from "fs";
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-expect-error // @ts-expect-error
import * as readLine from "node:readline/promises"; import * as readLine from "node:readline/promises";

@ -40,7 +40,17 @@ export async function callback(client, channel) {
displayName = "Channel"; displayName = "Channel";
} }
} }
const list = { const list: {
channelId: string;
name: string;
topic?: string | null;
type: any;
category: any;
nsfw?: boolean | null;
created: any;
deleted: any;
deletedBy: any;
} = {
channelId: entry(channel.id, `\`${channel.id}\``), channelId: entry(channel.id, `\`${channel.id}\``),
name: entry(channel.id, `${channel.name}`), name: entry(channel.id, `${channel.name}`),
topic: null, topic: null,

@ -1,5 +1,4 @@
import type { Guild } from "discord.js"; import type { Guild } from "discord.js";
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-expect-error // @ts-expect-error
import type { HaikuClient } from "jshaiku"; import type { HaikuClient } from "jshaiku";
import guide from "../reflex/guide.js"; import guide from "../reflex/guide.js";

@ -1,4 +1,3 @@
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-expect-error // @ts-expect-error
import { HaikuClient } from "jshaiku"; import { HaikuClient } from "jshaiku";
import { import {
@ -14,12 +13,11 @@ import createLogException from "../utils/createLogException.js";
import getEmojiByName from "../utils/getEmojiByName.js"; import getEmojiByName from "../utils/getEmojiByName.js";
import client from "../utils/client.js"; import client from "../utils/client.js";
import { callback as a } from "../reflex/statsChannelUpdate.js"; import { callback as a } from "../reflex/statsChannelUpdate.js";
import type { Message } from "discord.js"; import { Message, ThreadChannel } from "discord.js";
export const event = "messageCreate"; export const event = "messageCreate";
export async function callback(_client: HaikuClient, message: Message) { export async function callback(_client: HaikuClient, message: Message) {
if (!message) return;
if (!message.guild) return; if (!message.guild) return;
if (message.author.bot) return; if (message.author.bot) return;
if (message.channel.type === "DM") return; if (message.channel.type === "DM") return;
@ -112,129 +110,56 @@ export async function callback(_client: HaikuClient, message: Message) {
if (fileNames.files.length > 0) { if (fileNames.files.length > 0) {
for (const element of fileNames.files) { for (const element of fileNames.files) {
if (!message) return;
const url = element.url ? element.url : element.local; const url = element.url ? element.url : element.local;
if (url !== undefined) { if (
/\.(jpg|jpeg|png|gif|gifv|webm|webp|mp4|wav|mp3|ogg)$/.test(url)
) {
if ( if (
/\.(jpg|jpeg|png|gif|gifv|webm|webp|mp4|wav|mp3|ogg)$/.test( config.filters.images.NSFW &&
url !(message.channel instanceof ThreadChannel
) ? message.channel.parent?.nsfw
: message.channel.nsfw)
) { ) {
if ( if (await NSFWCheck(url)) {
config.filters.images.NSFW && createLogException(
!(message.channel.type === "GUILD_PUBLIC_THREAD" message.guild.id,
? false message.channel.id,
: message.channel.nsfw) message.id
) {
if (await NSFWCheck(url)) {
createLogException(
message.guild.id,
message.channel.id,
message.id
);
await message.delete();
const data = {
meta: {
type: "messageDelete",
displayName: "Message Deleted",
calculateType: "autoModeratorDeleted",
color: NucleusColors.red,
emoji: "MESSAGE.DELETE",
timestamp: new Date().getTime()
},
separate: {
start:
filter +
" Image detected as NSFW\n\n" +
(content
? `**Message:**\n\`\`\`${content}\`\`\``
: "**Message:** *Message had no content*")
},
list: list,
hidden: {
guild: message.channel.guild.id
}
};
return log(data);
}
}
if (config.filters.wordFilter.enabled) {
const text = await TestImage(url);
const check = TestString(
text ?? "",
config.filters.wordFilter.words.loose,
config.filters.wordFilter.words.strict
); );
if (check !== null) { await message.delete();
createLogException( const data = {
message.guild.id, meta: {
message.channel.id, type: "messageDelete",
message.id displayName: "Message Deleted",
); calculateType: "autoModeratorDeleted",
await message.delete(); color: NucleusColors.red,
const data = { emoji: "MESSAGE.DELETE",
meta: { timestamp: new Date().getTime()
type: "messageDelete", },
displayName: "Message Deleted", separate: {
calculateType: "autoModeratorDeleted", start:
color: NucleusColors.red, filter +
emoji: "MESSAGE.DELETE", " Image detected as NSFW\n\n" +
timestamp: new Date().getTime() (content
}, ? `**Message:**\n\`\`\`${content}\`\`\``
separate: { : "**Message:** *Message had no content*")
start: },
filter + list: list,
" Image contained filtered word\n\n" + hidden: {
(content guild: message.channel.guild.id
? `**Message:**\n\`\`\`${content}\`\`\``
: "**Message:** *Message had no content*")
},
list: list,
hidden: {
guild: message.channel.guild.id
}
};
return log(data);
}
}
if (config.filters.images.size) {
if (url.match(/\.+(webp|png|jpg)$/gi)) {
if (!(await SizeCheck(element))) {
createLogException(
message.guild.id,
message.channel.id,
message.id
);
await message.delete();
const data = {
meta: {
type: "messageDelete",
displayName: "Message Deleted",
calculateType: "autoModeratorDeleted",
color: NucleusColors.red,
emoji: "MESSAGE.DELETE",
timestamp: new Date().getTime()
},
separate: {
start:
filter +
" Image was too small\n\n" +
(content
? `**Message:**\n\`\`\`${content}\`\`\``
: "**Message:** *Message had no content*")
},
list: list,
hidden: {
guild: message.channel.guild.id
}
};
return log(data);
} }
} };
return log(data);
} }
} }
if (config.filters.malware) { if (config.filters.wordFilter.enabled) {
if (!MalwareCheck(url)) { const text = await TestImage(url);
const check = TestString(
text ?? "",
config.filters.wordFilter.words.loose,
config.filters.wordFilter.words.strict
);
if (check !== null) {
createLogException( createLogException(
message.guild.id, message.guild.id,
message.channel.id, message.channel.id,
@ -253,7 +178,7 @@ export async function callback(_client: HaikuClient, message: Message) {
separate: { separate: {
start: start:
filter + filter +
" File detected as malware\n\n" + " Image contained filtered word\n\n" +
(content (content
? `**Message:**\n\`\`\`${content}\`\`\`` ? `**Message:**\n\`\`\`${content}\`\`\``
: "**Message:** *Message had no content*") : "**Message:** *Message had no content*")
@ -266,10 +191,77 @@ export async function callback(_client: HaikuClient, message: Message) {
return log(data); return log(data);
} }
} }
if (config.filters.images.size) {
if (url.match(/\.+(webp|png|jpg)$/gi)) {
if (!(await SizeCheck(element))) {
createLogException(
message.guild.id,
message.channel.id,
message.id
);
await message.delete();
const data = {
meta: {
type: "messageDelete",
displayName: "Message Deleted",
calculateType: "autoModeratorDeleted",
color: NucleusColors.red,
emoji: "MESSAGE.DELETE",
timestamp: new Date().getTime()
},
separate: {
start:
filter +
" Image was too small\n\n" +
(content
? `**Message:**\n\`\`\`${content}\`\`\``
: "**Message:** *Message had no content*")
},
list: list,
hidden: {
guild: message.channel.guild.id
}
};
return log(data);
}
}
}
}
if (config.filters.malware) {
if (!(await MalwareCheck(url))) {
createLogException(
message.guild.id,
message.channel.id,
message.id
);
await message.delete();
const data = {
meta: {
type: "messageDelete",
displayName: "Message Deleted",
calculateType: "autoModeratorDeleted",
color: NucleusColors.red,
emoji: "MESSAGE.DELETE",
timestamp: new Date().getTime()
},
separate: {
start:
filter +
" File detected as malware\n\n" +
(content
? `**Message:**\n\`\`\`${content}\`\`\``
: "**Message:** *Message had no content*")
},
list: list,
hidden: {
guild: message.channel.guild.id
}
};
return log(data);
}
} }
} }
} }
if (!message) return;
const linkDetectionTypes = await LinkCheck(message); const linkDetectionTypes = await LinkCheck(message);
if (linkDetectionTypes.length > 0) { if (linkDetectionTypes.length > 0) {
@ -363,7 +355,6 @@ export async function callback(_client: HaikuClient, message: Message) {
} }
if (config.filters.pings.roles) { if (config.filters.pings.roles) {
for (const roleId in message.mentions.roles) { for (const roleId in message.mentions.roles) {
if (!message) return;
if (!config.filters.pings.allowed.roles.includes(roleId)) { if (!config.filters.pings.allowed.roles.includes(roleId)) {
createLogException( createLogException(
message.guild.id, message.guild.id,

@ -1,5 +1,4 @@
import type Discord from "discord.js"; import type Discord from "discord.js";
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-expect-error // @ts-expect-error
import type { HaikuClient } from "jshaiku"; import type { HaikuClient } from "jshaiku";
export const event = "webhookUpdate"; export const event = "webhookUpdate";

@ -5,8 +5,8 @@ import { Guilds, History, ModNotes, Premium } from "./utils/database.js";
import client from "./utils/client.js"; import client from "./utils/client.js";
import EventScheduler from "./utils/eventScheduler.js"; import EventScheduler from "./utils/eventScheduler.js";
await client.registerCommandsIn("./commands"); await client.registerCommandsIn(`dist/commands`);
await client.registerEventsIn("./events"); await client.registerEventsIn(`dist/events`);
client.on("ready", () => { client.on("ready", () => {
runServer(client); runServer(client);
}); });

@ -22,7 +22,7 @@ export default async function logAttachment(
size: attachment.size size: attachment.size
}); });
} }
const links = message.content.match(/https?:\/\/\S+/gi) || []; const links = message.content.match(/https?:\/\/\S+/gi) ?? [];
for (const link of links) { for (const link of links) {
if ( if (
link link

@ -1,4 +1,3 @@
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-expect-error // @ts-expect-error
import * as us from "unscan"; import * as us from "unscan";
import fetch from "node-fetch"; import fetch from "node-fetch";
@ -17,13 +16,13 @@ interface MalwareSchema {
export async function testNSFW(link: string): Promise<NSFWSchema> { export async function testNSFW(link: string): Promise<NSFWSchema> {
const p = await saveAttachment(link); const p = await saveAttachment(link);
const result = await us.nsfw.file(p); const result = await us.nsfw.file(p);
return result; return { nsfw: result.nsfw ?? false };
} }
export async function testMalware(link: string): Promise<MalwareSchema> { export async function testMalware(link: string): Promise<MalwareSchema> {
const p = await saveAttachment(link); const p = await saveAttachment(link);
const result = await us.malware.file(p); const result = await us.malware.file(p);
return result; return { safe: result.safe ?? true };
} }
export async function saveAttachment(link: string): Promise<string> { export async function saveAttachment(link: string): Promise<string> {

@ -1,6 +1,5 @@
import type Discord from "discord.js"; import type Discord from "discord.js";
import { Collection, MongoClient } from "mongodb"; import { Collection, MongoClient } from "mongodb";
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-expect-error // @ts-expect-error
import structuredClone from "@ungap/structured-clone"; import structuredClone from "@ungap/structured-clone";
import config from "../config/main.json" assert { type: "json" }; import config from "../config/main.json" assert { type: "json" };
@ -95,10 +94,10 @@ export class Guilds {
} }
} }
// eslint-disable-next-line @typescript-eslint/no-explicit-any
async remove( async remove(
guild: string, guild: string,
key: string, key: string,
// eslint-disable-next-line @typescript-eslint/no-explicit-any
value: any, value: any,
innerKey?: string | null innerKey?: string | null
) { ) {

@ -11,7 +11,6 @@ class EmojiEmbed extends MessageEmbed {
_title = ""; _title = "";
_emoji: string | null = null; _emoji: string | null = null;
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-expect-error // @ts-expect-error
// This *is* meant to be an accessor rather than a property // This *is* meant to be an accessor rather than a property
override get title() { override get title() {

Loading…
Cancel
Save