From 8034b9495b7b19e22b06718d48b2157daf25fa6c Mon Sep 17 00:00:00 2001 From: Skyler Grey Date: Thu, 9 Mar 2023 00:34:46 +0000 Subject: [PATCH] Fix image conversion and member update avatar checking, nsfw detection is still broken --- src/events/guildMemberUpdate.ts | 2 +- src/reflex/scanners.ts | 18 +++++++----------- src/reflex/verify.ts | 8 +++++--- 3 files changed, 13 insertions(+), 15 deletions(-) diff --git a/src/events/guildMemberUpdate.ts b/src/events/guildMemberUpdate.ts index fe11ee1..d1bbd9b 100644 --- a/src/events/guildMemberUpdate.ts +++ b/src/events/guildMemberUpdate.ts @@ -87,6 +87,7 @@ export async function callback(client: NucleusClient, before: GuildMember, after await log(data); } } + if (before.displayAvatarURL !== after.displayAvatarURL) await doMemberChecks(after); const auditLog = (await getAuditLog(after.guild, AuditLogEvent.MemberUpdate)).filter( (entry: GuildAuditLogsEntry) => (entry.target as GuildMember)!.id === after.id )[0]; @@ -125,7 +126,6 @@ export async function callback(client: NucleusClient, before: GuildMember, after }; await log(data); } - if (before.displayAvatarURL !== after.displayAvatarURL) await doMemberChecks(after); if ( (before.communicationDisabledUntilTimestamp ?? 0) < Date.now() && new Date(after.communicationDisabledUntil ?? 0).getTime() > Date.now() diff --git a/src/reflex/scanners.ts b/src/reflex/scanners.ts index acd3b41..93af960 100644 --- a/src/reflex/scanners.ts +++ b/src/reflex/scanners.ts @@ -12,9 +12,7 @@ import EmojiEmbed from "../utils/generateEmojiEmbed.js"; import getEmojiByName from "../utils/getEmojiByName.js"; import { ActionRowBuilder, ButtonBuilder, ButtonStyle } from "discord.js"; import config from "../config/main.js"; -import GIFEncoder from "gifencoder"; -import gm_var from 'gm'; -const gm = gm_var.subClass({ imageMagick: '7+' }); +import gm from 'gm'; interface NSFWSchema { nsfw: boolean; @@ -34,7 +32,6 @@ const clamscanner = await new ClamScan().init({ export async function testNSFW(attachment: { url: string; - local: string; height: number | null; width: number | null; }): Promise { @@ -44,12 +41,12 @@ export async function testNSFW(attachment: { return { nsfw: alreadyHaveCheck.nsfw } }; - const image = gm(fileStream).command('convert').in('-') + const converted = await new Promise((resolve, reject) => gm(fileStream).command("convert").toBuffer("PNG", (err, buf) => { + if (err) return reject(err); + resolve(buf); + })) as Buffer; + const array = new Uint8Array(converted); - const encoder = new GIFEncoder(attachment.width ?? 1024, attachment.height ?? 1024); - - - // const array = new Uint8Array(fileStream); const img = tf.node.decodeImage(array) as tf.Tensor3D; const predictions = (await nsfw_model.classify(img, 1))[0]!; @@ -156,7 +153,6 @@ export async function LinkCheck(message: Discord.Message): Promise { export async function NSFWCheck(element: { url: string; - local: string; height: number | null; width: number | null; }): Promise { @@ -238,7 +234,7 @@ export async function doMemberChecks(member: Discord.GuildMember): Promise // Is the profile picture NSFW const avatar = member.displayAvatarURL({ extension: "png", size: 1024, forceStatic: true }); const avatarCheck = - guildData.filters.images.NSFW && (await NSFWCheck({url: avatar, local: "", height: 1024, width: 1024})); + guildData.filters.images.NSFW && (await NSFWCheck({url: avatar, height: 1024, width: 1024})); console.log(5, avatarCheck) // Does the username contain an invite const inviteCheck = guildData.filters.invite.enabled && /discord\.gg\/[a-zA-Z0-9]+/gi.test(member.user.username); diff --git a/src/reflex/verify.ts b/src/reflex/verify.ts index 540fb4d..8f68c0e 100644 --- a/src/reflex/verify.ts +++ b/src/reflex/verify.ts @@ -121,9 +121,11 @@ export default async function (interaction: CommandInteraction | ButtonInteracti ] }); if ( - await NSFWCheck( - (interaction.member as GuildMember).user.displayAvatarURL({ extension: "png", forceStatic: true }) - ) + await NSFWCheck({ + url: (interaction.member as GuildMember).user.displayAvatarURL({ extension: "png", forceStatic: true }), + height: 1024, + width: 1024, + }) ) { return await interaction.editReply({ embeds: [