mirror of https://github.com/clickscodes/nucleus
parent
52906cde18
commit
da6e534dbf
@ -0,0 +1,94 @@
|
||||
{
|
||||
"filters": {
|
||||
"images": {
|
||||
"NSFW": false,
|
||||
"size": false
|
||||
},
|
||||
"malware": false,
|
||||
"wordFilter": {
|
||||
"enabled": false,
|
||||
"words": {
|
||||
"strict": [],
|
||||
"loose": []
|
||||
},
|
||||
"allowed": {
|
||||
"users": [],
|
||||
"roles": [],
|
||||
"channels": []
|
||||
}
|
||||
},
|
||||
"invite": {
|
||||
"enabled": false,
|
||||
"allowed": {
|
||||
"users": [],
|
||||
"channels": [],
|
||||
"roles": []
|
||||
}
|
||||
},
|
||||
"pings": {
|
||||
"mass": 5,
|
||||
"everyone": true,
|
||||
"roles": true,
|
||||
"allowed": {
|
||||
"roles": [],
|
||||
"rolesToMention": [],
|
||||
"users": [],
|
||||
"channels": []
|
||||
}
|
||||
}
|
||||
},
|
||||
"welcome": {
|
||||
"enabled": false,
|
||||
"welcomeRole": null,
|
||||
"channel": null,
|
||||
"message": null
|
||||
},
|
||||
"stats": [
|
||||
{
|
||||
"enabled": true,
|
||||
"channel": "9849175359",
|
||||
"text": "{count} members | {count:bots} bots | {count:humans} humans"
|
||||
}
|
||||
],
|
||||
"moderation": {
|
||||
"mute": {
|
||||
"timeout": true,
|
||||
"role": null,
|
||||
"text": null,
|
||||
"link": null
|
||||
},
|
||||
"kick": {
|
||||
"text": null,
|
||||
"link": null
|
||||
},
|
||||
"ban": {
|
||||
"text": null,
|
||||
"link": null
|
||||
},
|
||||
"softban": {
|
||||
"text": null,
|
||||
"link": null
|
||||
},
|
||||
"warn": {
|
||||
"text": null,
|
||||
"link": null
|
||||
},
|
||||
"role": {
|
||||
"role": null
|
||||
}
|
||||
},
|
||||
"tracks": [
|
||||
],
|
||||
"logging": {
|
||||
"logs": {
|
||||
"enabled": true,
|
||||
"toLog": "3fffff"
|
||||
}
|
||||
},
|
||||
"roleMenu": {
|
||||
"enabled": true,
|
||||
"allowWebUI": true,
|
||||
"options": [
|
||||
]
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,20 @@
|
||||
import { CommandInteraction } from "discord.js";
|
||||
import { SlashCommandBuilder } from "@discordjs/builders";
|
||||
import { WrappedCheck } from "jshaiku";
|
||||
import { callback as roleMenu } from "../automations/roleMenu.js"
|
||||
|
||||
const command = new SlashCommandBuilder()
|
||||
.setName("rolemenu")
|
||||
.setDescription("Lets you choose from sets of roles to apply to yourself")
|
||||
|
||||
const callback = async (interaction: CommandInteraction): Promise<any> => {
|
||||
await roleMenu(interaction);
|
||||
}
|
||||
|
||||
const check = (interaction: CommandInteraction, defaultCheck: WrappedCheck) => {
|
||||
return true;
|
||||
}
|
||||
|
||||
export { command };
|
||||
export { callback };
|
||||
export { check };
|
||||
@ -0,0 +1,26 @@
|
||||
import Discord, { CommandInteraction, MessageActionRow, MessageButton } from "discord.js";
|
||||
import EmojiEmbed from "../../utils/generateEmojiEmbed.js";
|
||||
import confirmationMessage from "../../utils/confirmationMessage.js";
|
||||
import getEmojiByName from "../../utils/getEmojiByName.js";
|
||||
import { SlashCommandSubcommandBuilder } from "@discordjs/builders";
|
||||
import { WrappedCheck } from "jshaiku";
|
||||
import client from "../../utils/client.js";
|
||||
|
||||
const command = (builder: SlashCommandSubcommandBuilder) =>
|
||||
builder
|
||||
.setName("role")
|
||||
.setDescription("Sets or shows the role given to users after using /verify")
|
||||
.addRoleOption(option => option.setName("role").setDescription("The role to give after verifying"))
|
||||
|
||||
const callback = async (interaction: CommandInteraction): Promise<any> => {
|
||||
}
|
||||
|
||||
const check = (interaction: CommandInteraction, defaultCheck: WrappedCheck) => {
|
||||
let member = (interaction.member as Discord.GuildMember)
|
||||
if (!member.permissions.has("MANAGE_ROLES")) throw "You must have the Manage roles permission to use this command"
|
||||
return true;
|
||||
}
|
||||
|
||||
export { command };
|
||||
export { callback };
|
||||
export { check };
|
||||
@ -1,4 +0,0 @@
|
||||
const name = "warnings";
|
||||
const description = "Settings for mod warnings";
|
||||
|
||||
export { name, description };
|
||||
@ -1,4 +0,0 @@
|
||||
const name = "verify";
|
||||
const description = "Settings for verification";
|
||||
|
||||
export { name, description };
|
||||
@ -0,0 +1,30 @@
|
||||
export const event = 'stickerCreate'
|
||||
|
||||
export async function callback(client, emoji) {
|
||||
try {
|
||||
const { getAuditLog, log, NucleusColors, entry, renderUser, renderDelta } = emoji.client.logger
|
||||
let auditLog = await getAuditLog(emoji.guild, 'STICKER_CREATE');
|
||||
let audit = auditLog.entries.filter(entry => entry.target.id == emoji.id).first();
|
||||
if (audit.executor.id == client.user.id) return;
|
||||
let data = {
|
||||
meta: {
|
||||
type: 'stickerCreate',
|
||||
displayName: 'Sticker Created',
|
||||
calculateType: 'stickerUpdate',
|
||||
color: NucleusColors.green,
|
||||
emoji: "GUILD.EMOJI.CREATE",
|
||||
timestamp: emoji.createdTimestamp
|
||||
},
|
||||
list: {
|
||||
stickerId: entry(emoji.id, `\`${emoji.id}\``),
|
||||
emoji: entry(emoji.name, `\`:${emoji.name}:\``),
|
||||
createdBy: entry(audit.executor.id, renderUser(audit.executor)),
|
||||
created: entry(emoji.createdTimestamp, renderDelta(emoji.createdTimestamp))
|
||||
},
|
||||
hidden: {
|
||||
guild: emoji.guild.id
|
||||
}
|
||||
}
|
||||
log(data);
|
||||
} catch {}
|
||||
}
|
||||
@ -0,0 +1,31 @@
|
||||
export const event = 'stickerDelete'
|
||||
|
||||
export async function callback(client, emoji) {
|
||||
try{
|
||||
const { getAuditLog, log, NucleusColors, entry, renderUser, renderDelta } = emoji.client.logger
|
||||
let auditLog = await getAuditLog(emoji.guild, 'STICKER_DELETE');
|
||||
let audit = auditLog.entries.filter(entry => entry.target.id == emoji.id).first();
|
||||
if (audit.executor.id == client.user.id) return;
|
||||
let data = {
|
||||
meta: {
|
||||
type: 'stickerDelete',
|
||||
displayName: 'Sticker Deleted',
|
||||
calculateType: 'stickerUpdate',
|
||||
color: NucleusColors.red,
|
||||
emoji: "GUILD.EMOJI.DELETE",
|
||||
timestamp: audit.createdTimestamp,
|
||||
},
|
||||
list: {
|
||||
stickerId:entry(emoji.id, `\`${emoji.id}\``),
|
||||
sticker: entry(emoji.name, `\`${emoji.name}\``),
|
||||
deletedBy: entry(audit.executor.id, renderUser(audit.executor)),
|
||||
created: entry(emoji.createdTimestamp, renderDelta(emoji.createdTimestamp)),
|
||||
deleted: entry(audit.createdTimestamp, renderDelta(audit.createdTimestamp)),
|
||||
},
|
||||
hidden: {
|
||||
guild: emoji.guild.id
|
||||
}
|
||||
}
|
||||
log(data);
|
||||
} catch {}
|
||||
}
|
||||
@ -0,0 +1,34 @@
|
||||
export const event = 'stickerUpdate';
|
||||
|
||||
export async function callback(client, oe, ne) {
|
||||
try {
|
||||
const { getAuditLog, log, NucleusColors, entry, renderDelta, renderUser, renderEmoji } = client.logger
|
||||
|
||||
if (oe.name == ne.name) return
|
||||
let auditLog = await getAuditLog(ne.guild, 'EMOJI_UPDATE');
|
||||
let audit = auditLog.entries.first();
|
||||
if (audit.executor.id == client.user.id) return;
|
||||
|
||||
let changes = {
|
||||
stickerId:entry(ne.id, `\`${ne.id}\``),
|
||||
edited: entry(ne.createdTimestamp, renderDelta(ne.createdTimestamp)),
|
||||
editedBy: entry(audit.executor.id, renderUser((await ne.guild.members.fetch(audit.executor.id)).user)),
|
||||
name: entry([oe.name, ne.name], `\`:${oe.name}:\` -> \`:${ne.name}:\``),
|
||||
}
|
||||
let data = {
|
||||
meta:{
|
||||
type: 'stickerUpdate',
|
||||
displayName: 'Sticker Edited',
|
||||
calculateType: 'stickerUpdate',
|
||||
color: NucleusColors.yellow,
|
||||
emoji: "GUILD.EMOJI.EDIT",
|
||||
timestamp: audit.createdTimestamp
|
||||
},
|
||||
list: changes,
|
||||
hidden: {
|
||||
guild: ne.guild.id
|
||||
}
|
||||
}
|
||||
log(data);
|
||||
} catch {}
|
||||
}
|
||||
@ -0,0 +1,78 @@
|
||||
import humanizeDuration from 'humanize-duration';
|
||||
export const event = 'webhookUpdate'
|
||||
|
||||
export async function callback(client, channel) {
|
||||
try {
|
||||
const { getAuditLog, log, NucleusColors, entry, renderUser, renderChannel, renderDelta } = client.logger
|
||||
let auditLogCreate = getAuditLog(channel.guild, 'WEBHOOK_CREATE');
|
||||
let auditLogUpdate = getAuditLog(channel.guild, 'WEBHOOK_UPDATE');
|
||||
let auditLogDelete = getAuditLog(channel.guild, 'WEBHOOK_DELETE');
|
||||
[auditLogCreate, auditLogUpdate, auditLogDelete] = await Promise.all([auditLogCreate, auditLogUpdate, auditLogDelete]);
|
||||
let auditCreate = auditLogCreate.entries.filter(entry => entry.target.channelId == channel.id).first();
|
||||
let auditUpdate = auditLogUpdate.entries.filter(entry => entry.target.channelId == channel.id).first();
|
||||
let auditDelete = auditLogDelete.entries.filter(entry => entry.target.channelId == channel.id).first();
|
||||
if (!auditCreate && !auditUpdate && !auditDelete) return;
|
||||
let audit = auditCreate;
|
||||
let action = "Create";
|
||||
let list = {} as any;
|
||||
if (auditUpdate && auditUpdate.createdTimestamp > audit.createdTimestamp) {
|
||||
let {before, after} = auditUpdate.changes.reduce(
|
||||
(acc, change) => { acc.before[change.key] = change.old; acc.after[change.key] = change.new; return acc; },
|
||||
{before: {}, after: {}}
|
||||
);
|
||||
if (before.name !== after.name) list['name'] = entry([before.name, after.name], `${before.name} -> ${after.name}`)
|
||||
if (before.channel_id !== after.channel_id) list['channel'] = entry([before.channel_id, after.channel_id], renderChannel(await client.channels.fetch(before.channel_id)) + ` -> ` + renderChannel(await client.channels.fetch(after.channel_id)))
|
||||
if (!(Object.keys(list)).length) return;
|
||||
list.created = entry(auditUpdate.target.createdTimestamp, renderDelta(auditUpdate.target.createdTimestamp));
|
||||
list.edited = entry(after.editedTimestamp, renderDelta(new Date().getTime()));
|
||||
list.editedBy = entry(auditUpdate.executor.id, renderUser(auditUpdate.executor));
|
||||
audit = auditUpdate;
|
||||
action = "Update"
|
||||
} else if (auditDelete && auditDelete.createdTimestamp > audit.createdTimestamp) {
|
||||
let {before, after} = auditDelete.changes.reduce(
|
||||
(acc, change) => { acc.before[change.key] = change.old; acc.after[change.key] = change.new; return acc; },
|
||||
{before: {}, after: {}}
|
||||
);
|
||||
list = {
|
||||
name: entry(before.name, `${before.name}`),
|
||||
channel: entry(before.channel_id, renderChannel(await client.channels.fetch(before.channel_id))),
|
||||
created: entry(auditDelete.target.createdTimestamp, renderDelta(auditDelete.target.createdTimestamp)),
|
||||
deleted: entry(new Date().getTime(), renderDelta(new Date().getTime())),
|
||||
deletedBy: entry(auditDelete.executor.id, renderUser((await channel.guild.members.fetch(auditDelete.executor.id)).user)),
|
||||
}
|
||||
audit = auditDelete;
|
||||
action = "Delete"
|
||||
} else {
|
||||
let {before, after} = auditDelete.changes.reduce(
|
||||
(acc, change) => { acc.before[change.key] = change.old; acc.after[change.key] = change.new; return acc; },
|
||||
{before: {}, after: {}}
|
||||
);
|
||||
list = {
|
||||
name: entry(before.name, `${before.name}`),
|
||||
channel: entry(before.channel_id, renderChannel(await client.channels.fetch(before.channel_id))),
|
||||
createdBy: entry(auditCreate.executor.id, renderUser((await channel.guild.members.fetch(auditCreate.executor.id)).user)),
|
||||
created: entry(new Date().getTime(), renderDelta(new Date().getTime())),
|
||||
}
|
||||
}
|
||||
let cols = {
|
||||
"Create": "green",
|
||||
"Update": "yellow",
|
||||
"Delete": "red",
|
||||
}
|
||||
let data = {
|
||||
meta: {
|
||||
type: 'webhook' + action,
|
||||
displayName: `Webhook ${action}d`,
|
||||
calculateType: 'webhookUpdate',
|
||||
color: NucleusColors[cols[action]],
|
||||
emoji: "WEBHOOK." + action.toUpperCase(),
|
||||
timestamp: new Date().getTime()
|
||||
},
|
||||
list: list,
|
||||
hidden: {
|
||||
guild: channel.guild.id
|
||||
}
|
||||
} // TODO
|
||||
log(data);
|
||||
} catch(e) { console.log(e) }
|
||||
}
|
||||
Loading…
Reference in new issue