Skip to content
Open

Mod #211

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
54 commits
Select commit Hold shift + click to select a range
3f8362a
Anti-System
psicopatadevx Sep 7, 2026
e8b3462
AntiNuke
psicopatadevx Sep 7, 2026
9eb4a07
Anti-Nuke Service
psicopatadevx Sep 7, 2026
034f056
guildAuditLogEntryCreate.
psicopatadevx Sep 7, 2026
39bbede
guildAuditLogEntryCreate.js
psicopatadevx Sep 7, 2026
f83eca8
Update antiNukeService.js
psicopatadevx Sep 7, 2026
024e3f4
Delete src/commands/Moderation/antiNuke.js
psicopatadevx Sep 7, 2026
c194f56
Create antinuke.js
psicopatadevx Sep 7, 2026
954c438
Create setprefix.js
psicopatadevx Sep 7, 2026
91f0cb6
Update setprefix.js
psicopatadevx Sep 7, 2026
7af7b52
Create antilinkservice.js
psicopatadevx Sep 7, 2026
ff13c3f
Create antilink.js
psicopatadevx Sep 7, 2026
f1cf91b
Create whitelistservice.js
psicopatadevx Sep 7, 2026
8d6b75b
Create whitelist.js
psicopatadevx Sep 7, 2026
053f68f
Update antiNukeService.js
psicopatadevx Sep 7, 2026
ad16a25
Update antilinkservice.js
psicopatadevx Sep 7, 2026
276404e
Create nuke.js
psicopatadevx Sep 7, 2026
451dd10
Update antiNukeService.js
psicopatadevx Sep 7, 2026
e2bed03
Update antiNukeService.js
psicopatadevx Sep 7, 2026
c9fc20f
Update antilinkservice.js
psicopatadevx Sep 7, 2026
b49d7bd
Delete src/commands/Moderation/antilink.js
psicopatadevx Sep 7, 2026
93adf01
Create antilink.js
psicopatadevx Sep 7, 2026
2cce0b1
Delete src/services/antilinkservice.js
psicopatadevx Sep 7, 2026
50ca796
Delete src/services/antiNukeService.js
psicopatadevx Sep 7, 2026
74fc4e2
Create antiLinkService.js
psicopatadevx Sep 7, 2026
0c7ad34
Create antiLink.js
psicopatadevx Sep 7, 2026
2881c8e
Delete src/services/whitelistservice.js
psicopatadevx Sep 7, 2026
669305f
Create whitelistService.js
psicopatadevx Sep 7, 2026
7c6adf6
Create whiteList.js
psicopatadevx Sep 7, 2026
86ac4db
Delete src/commands/Moderation/whiteList.js
psicopatadevx Sep 7, 2026
096b006
Delete src/commands/Moderation/whitelist.js
psicopatadevx Sep 7, 2026
8d2eba0
Delete src/commands/Moderation/antiLink.js
psicopatadevx Sep 7, 2026
a905c59
Delete src/commands/Moderation/antilink.js
psicopatadevx Sep 7, 2026
d5a3102
Delete src/services/config/antiLinkService.js
psicopatadevx Sep 7, 2026
e724d1b
Delete src/services/whitelistService.js
psicopatadevx Sep 7, 2026
ae4f982
Delete src/commands/Moderation/antinuke.js
psicopatadevx Sep 10, 2026
1eb34c6
Create antinukeX.js
psicopatadevx Sep 10, 2026
5f85789
Create index.js
psicopatadevx Sep 10, 2026
9a9f6c9
Create antiNuke.js
psicopatadevx Sep 10, 2026
548016e
Delete src/commands/Moderation directory
psicopatadevx Sep 10, 2026
1015790
Delete src/commands/Birthday directory
psicopatadevx Sep 10, 2026
c5085ff
Delete src/commands/Community directory
psicopatadevx Sep 10, 2026
23d6d9a
Delete src/commands/Core directory
psicopatadevx Sep 10, 2026
e50e498
Delete src/commands/Economy directory
psicopatadevx Sep 10, 2026
f766c66
Delete src/commands/Giveaway directory
psicopatadevx Sep 10, 2026
b49d0cc
Delete src/commands/Fun directory
psicopatadevx Sep 10, 2026
21e0523
Delete src/commands/JoinToCreate directory
psicopatadevx Sep 10, 2026
9372a13
Delete src/commands/Reaction_roles directory
psicopatadevx Sep 10, 2026
e9acffe
Delete src/commands/Search directory
psicopatadevx Sep 10, 2026
4cd473c
Delete src/commands/Ticket directory
psicopatadevx Sep 10, 2026
73063b0
Delete src/commands/Tools directory
psicopatadevx Sep 10, 2026
dd216d2
Delete src/commands/Utility directory
psicopatadevx Sep 10, 2026
a4f36e2
Delete src/commands/Verification directory
psicopatadevx Sep 10, 2026
280b18d
Create Moderation
psicopatadevx Sep 10, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
354 changes: 354 additions & 0 deletions Anti-sys
Original file line number Diff line number Diff line change
@@ -0,0 +1,354 @@
/**
* antiNuke.js
* Discord.js v14 Anti-Nuke Module
*
* Protects against:
* - Mass channel deletion
* - Mass role deletion
* - Mass bans/kicks
* - Unauthorized bot additions
* - Webhook abuse
* - Dangerous permission changes
*
* Default punishment: remove dangerous roles/permissions.
*/

const {
AuditLogEvent,
PermissionsBitField,
} = require("discord.js");

const DEFAULT_CONFIG = {
enabled: true,

// Number of suspicious actions allowed
// before protection triggers.
threshold: 3,

// Time window in milliseconds.
// 10 seconds = 10000.
windowMs: 10000,

// "strip" = remove dangerous permissions
// "kick" = kick the user if possible
punishment: "strip",

// Optional channel ID for alerts.
logChannelId: null,
};

const DANGEROUS_EVENTS = new Set([
AuditLogEvent.ChannelDelete,
AuditLogEvent.RoleDelete,
AuditLogEvent.BanAdd,
AuditLogEvent.Kick,
AuditLogEvent.BotAdd,
AuditLogEvent.WebhookCreate,
AuditLogEvent.WebhookDelete,
AuditLogEvent.GuildUpdate,
AuditLogEvent.RoleUpdate,
AuditLogEvent.ChannelOverwriteCreate,
AuditLogEvent.ChannelOverwriteUpdate,
AuditLogEvent.ChannelOverwriteDelete,
]);

class AntiNuke {
constructor(client) {
this.client = client;

// Guild configuration
this.configs = new Map();

// Whitelisted users
this.whitelists = new Map();

// Recent suspicious actions
this.activity = new Map();

this.boundHandler = (entry, guild) => {
this.handle(entry, guild);
};
}

enable() {
this.client.on(
"guildAuditLogEntryCreate",
this.boundHandler
);

console.log("✅ Anti-nuke protection enabled.");

return this;
}

disable() {
this.client.off(
"guildAuditLogEntryCreate",
this.boundHandler
);

console.log("🛑 Anti-nuke protection disabled.");

return this;
}

setConfig(guildId, changes = {}) {
const current =
this.configs.get(guildId) ||
{ ...DEFAULT_CONFIG };

const updated = {
...current,
...changes,
};

this.configs.set(guildId, updated);

return updated;
}

getConfig(guildId) {
return {
...(this.configs.get(guildId) ||
DEFAULT_CONFIG),
};
}

addWhitelist(guildId, userId) {
if (!this.whitelists.has(guildId)) {
this.whitelists.set(guildId, new Set());
}

this.whitelists
.get(guildId)
.add(userId);
}

removeWhitelist(guildId, userId) {
this.whitelists
.get(guildId)
?.delete(userId);
}

isWhitelisted(guildId, userId) {
return (
this.whitelists
.get(guildId)
?.has(userId) || false
);
}

async handle(entry, guild) {
try {
if (!guild) return;

const config = this.getConfig(guild.id);

// Anti-nuke disabled
if (!config.enabled) return;

// Ignore actions that aren't dangerous
if (!DANGEROUS_EVENTS.has(entry.action)) {
return;
}

const executorId = entry.executorId;

if (!executorId) return;

// Never punish the bot itself.
if (
executorId === this.client.user?.id
) {
return;
}

// Never punish the server owner.
if (executorId === guild.ownerId) {
return;
}

// Ignore whitelisted users.
if (
this.isWhitelisted(
guild.id,
executorId
)
) {
return;
}

const key =
`${guild.id}:${executorId}`;

const now = Date.now();

// Get recent actions.
const recent =
this.activity.get(key) || [];

// Remove actions outside the time window.
const validActions =
recent.filter(
timestamp =>
now - timestamp <=
config.windowMs
);

validActions.push(now);

this.activity.set(
key,
validActions
);

console.log(
`[AntiNuke] ${executorId} ` +
`performed ${validActions.length} ` +
`dangerous actions in guild ${guild.id}`
);

// Threshold not reached yet.
if (
validActions.length <
config.threshold
) {
return;
}

// Reset counter so the same user
// isn't punished repeatedly.
this.activity.set(key, []);

const member =
await guild.members
.fetch(executorId)
.catch(() => null);

if (!member) return;

console.log(
`🚨 ANTI-NUKE TRIGGERED: ` +
`${member.user.tag}`
);

// -------------------------
// KICK PUNISHMENT
// -------------------------

if (
config.punishment === "kick"
) {
if (member.kickable) {
await member
.kick(
"Anti-nuke: suspicious destructive activity"
)
.catch(console.error);
}
}

// -------------------------
// STRIP PERMISSIONS
// -------------------------

else {
const dangerousPermissions =
new PermissionsBitField([
PermissionsBitField.Flags.Administrator,

PermissionsBitField.Flags.ManageGuild,

PermissionsBitField.Flags.ManageChannels,

PermissionsBitField.Flags.ManageRoles,

PermissionsBitField.Flags.ManageWebhooks,

PermissionsBitField.Flags.BanMembers,

PermissionsBitField.Flags.KickMembers,

PermissionsBitField.Flags.ManageMessages,

PermissionsBitField.Flags.ManageThreads,

PermissionsBitField.Flags.ManageEmojisAndStickers,
]);

const roles =
member.roles.cache.filter(
role =>
role.id !== guild.id &&
role.editable &&
role.permissions.any(
dangerousPermissions.toArray()
)
);

for (const role of roles.values()) {
await member.roles
.remove(
role,
"Anti-nuke: suspicious destructive activity"
)
.catch(console.error);
}
}

// Send alert.
await this.sendLog(
guild,
entry,
executorId,
config
);

} catch (error) {
console.error(
"[AntiNuke Error]",
error
);
}
}

async sendLog(
guild,
entry,
executorId,
config
) {
if (!config.logChannelId) {
return;
}

const channel =
guild.channels.cache.get(
config.logChannelId
);

if (
!channel ||
!channel.isTextBased()
) {
return;
}

await channel
.send({
content:
`🚨 **ANTI-NUKE TRIGGERED**\n\n` +
`👤 User: <@${executorId}>\n` +
`⚠️ Action: \`${entry.action}\`\n` +
`🔢 Threshold: \`${config.threshold}\`\n` +
`⏱️ Window: \`${config.windowMs / 1000}s\`\n` +
`🛡️ Protection has been activated.`,
})
.catch(console.error);
}
}

module.exports = {
AntiNuke,
DEFAULT_CONFIG,
};
Loading