From 117ece6381729c4fe51b405cdbde1138afcb7d16 Mon Sep 17 00:00:00 2001 From: Ajay Date: Thu, 22 Jan 2026 03:40:45 -0500 Subject: [PATCH] Announce bans from ip ban --- src/config.ts | 1 + src/routes/shadowBanUser.ts | 26 ++++++++++++++++++++++++++ src/utils/checkBan.ts | 3 ++- 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/config.ts b/src/config.ts index 9ff08fe..9531562 100644 --- a/src/config.ts +++ b/src/config.ts @@ -48,6 +48,7 @@ addDefaults(config, { discordDeArrowWarnedWebhookURL: null, discordNewUserWebhookURL: null, discordRejectedNewUserWebhookURL: null, + discordAutobanWebhookURL: null, minReputationToSubmitChapter: 0, minReputationToSubmitFiller: 0, getTopUsersCacheTimeMinutes: 240, diff --git a/src/routes/shadowBanUser.ts b/src/routes/shadowBanUser.ts index 6d58951..5b57578 100644 --- a/src/routes/shadowBanUser.ts +++ b/src/routes/shadowBanUser.ts @@ -8,6 +8,7 @@ import { QueryCacher } from "../utils/queryCacher"; import { isUserVIP } from "../utils/isUserVIP"; import { parseCategories, parseDeArrowTypes } from "../utils/parseParams"; import { Logger } from "../utils/logger"; +import axios from "axios"; export async function shadowBanUser(req: Request, res: Response): Promise { const userID = req.query.userID as UserID; @@ -153,6 +154,7 @@ export async function banIP(hashedIP: HashedIP, unHideOldSubmissions: boolean, t //find all previous submissions and hide them if (unHideOldSubmissions) { const users = await unHideSubmissionsByIP(categories, hashedIP, type); + announceBan([...users]); await Promise.all([...users].map((user) => { return banUser(user, true, unHideOldSubmissions, type, categories, deArrowTypes); @@ -183,4 +185,28 @@ async function unHideSubmissionsByIP(categories: string[], hashedIP: HashedIP, t })); return users; +} + +export function announceBan(userIDs: UserID[]) { + if (config.discordAutobanWebhookURL) { + axios.post(config.discordAutobanWebhookURL, { + "embeds": [{ + "title": "Auto banned user", + "description": userIDs.join("\n"), + "color": 10813440, + }], + }) + .then(res => { + if (res.status >= 400) { + Logger.error("Error sending auto ban Discord hook"); + Logger.error(JSON.stringify((res.data))); + Logger.error("\n"); + } + }) + .catch(err => { + Logger.error("Failed to send auto ban Discord hook."); + Logger.error(JSON.stringify(err)); + Logger.error("\n"); + }); + } } \ No newline at end of file diff --git a/src/utils/checkBan.ts b/src/utils/checkBan.ts index 823fd09..7fda747 100644 --- a/src/utils/checkBan.ts +++ b/src/utils/checkBan.ts @@ -1,7 +1,7 @@ import { HashedUserID } from "../types/user.model"; import { db } from "../databases/databases"; import { Category, HashedIP } from "../types/segments.model"; -import { banUser } from "../routes/shadowBanUser"; +import { announceBan, banUser } from "../routes/shadowBanUser"; import { config } from "../config"; import { Logger } from "./logger"; @@ -19,6 +19,7 @@ export async function checkBanStatus(userID: HashedUserID, ip: HashedIP): Promis if (!userBanStatus && ipBanStatus) { // Make sure the whole user is banned + announceBan([userID]); banUser(userID, true, true, 1, config.categoryList as Category[], config.deArrowTypes) .catch((e) => Logger.error(`Error banning user after submitting from a banned IP: ${e}`)); }