worked on stats, database, ban

pull/63/head
TheCodedProf 3 years ago
parent 1cfa1aeaf8
commit a38cbb3a3e

@ -191,7 +191,10 @@ const check = (interaction: CommandInteraction | ButtonInteraction, partial: boo
if (!interaction.guild) return; if (!interaction.guild) return;
const member = interaction.member as GuildMember; const member = interaction.member as GuildMember;
// Check if the user has ban_members permission // Check if the user has ban_members permission
if (!member.permissions.has("BanMembers")) return "You do not have the *Ban Members* permission"; if (!member.permissions.has("BanMembers")) {
// if(!partial) client.logger.warn("Missing permissions", "Ban", "User does not have Ban Members permission");
return "You do not have the *Ban Members* permission";
}
if (partial) return true; if (partial) return true;
const me = interaction.guild.members.me!; const me = interaction.guild.members.me!;
let apply: GuildMember; let apply: GuildMember;

@ -8,6 +8,7 @@ import {
CommandInteraction, CommandInteraction,
ComponentType, ComponentType,
Guild, Guild,
GuildTextBasedChannel,
ModalBuilder, ModalBuilder,
ModalSubmitInteraction, ModalSubmitInteraction,
TextInputBuilder, TextInputBuilder,
@ -91,7 +92,8 @@ const callback = async (interaction: CommandInteraction): Promise<void> => {
], ],
components: [ components: [
new ActionRowBuilder<ButtonBuilder>().addComponents( new ActionRowBuilder<ButtonBuilder>().addComponents(
new ButtonBuilder().setCustomId("admin").setLabel("Admin Panel").setStyle(ButtonStyle.Primary) new ButtonBuilder().setCustomId("admin").setLabel("Admin Panel").setStyle(ButtonStyle.Primary),
new ButtonBuilder().setCustomId("announce").setLabel("Announce to all Guilds").setStyle(ButtonStyle.Danger)
) )
] ]
}); });
@ -120,16 +122,18 @@ const callback = async (interaction: CommandInteraction): Promise<void> => {
// console.log(interaction) // console.log(interaction)
if (!("awaitMessageComponent" in channel)) return; if (!("awaitMessageComponent" in channel)) return;
let GuildID = interaction.guildId; let GuildID = interaction.guildId;
if (!GuildID) {
try { try {
i1 = await channel!.awaitMessageComponent<ComponentType.Button>({ i1 = await m.awaitMessageComponent<ComponentType.Button>({
filter: (i) => i.customId === "admin" && i.user.id === interaction.user.id && i.message.id === m.id, filter: (i) => i.user.id === interaction.user.id,
time: 300000 time: 300000
}); });
} catch (e) { } catch (e) {
console.log(e); console.log(e);
return; return;
} }
switch(i1.customId) {
case "admin": {
if (!GuildID) {
await i1.showModal(modal); await i1.showModal(modal);
let out: ModalSubmitInteraction; let out: ModalSubmitInteraction;
try { try {
@ -267,6 +271,104 @@ const callback = async (interaction: CommandInteraction): Promise<void> => {
components: [] components: []
}); });
} }
break;
}
case "announce": {
const channelsToNotify = await client.database.guilds.staffChannels()
const modal2 = new ModalBuilder()
.addComponents(
new ActionRowBuilder<TextInputBuilder>().addComponents(
new TextInputBuilder()
.setStyle(TextInputStyle.Paragraph)
.setLabel("Announcement")
.setCustomId("announcement")
.setPlaceholder("Announcement...")
)
)
.setTitle("Announcement")
.setCustomId("announce");
await i1.showModal(modal2);
let out: ModalSubmitInteraction;
try {
out = await i1.awaitModalSubmit({
filter: (i) => i.customId === "announce" && i.user.id === interaction.user.id,
time: 300000
});
} catch {
return;
}
await out.deferUpdate();
const announcement = out.fields.getTextInputValue("announcement");
await interaction.editReply({
embeds: [
new EmojiEmbed()
.setTitle("Announcement")
.setDescription(`Announcement will be sent to ${channelsToNotify.length} channels.\n\n${announcement}`)
.setStatus("Success")
.setEmoji("SETTINGS.STATS.GREEN")
],
components: [
new ActionRowBuilder<ButtonBuilder>().addComponents(
new ButtonBuilder().setCustomId("confirm").setLabel("Confirm").setStyle(ButtonStyle.Success),
new ButtonBuilder().setCustomId("cancel").setLabel("Cancel").setStyle(ButtonStyle.Danger)
)
]
});
let i;
try {
i = await m.awaitMessageComponent<ComponentType.Button>({
filter: (i) => i.user.id === interaction.user.id,
time: 300000
});
} catch {
return;
}
if (i.customId === "confirm") {
await i.deferUpdate();
await interaction.editReply({
embeds: [
new EmojiEmbed()
.setTitle("Announcement")
.setDescription(`Sending to ${channelsToNotify.length} channels. Preview:\n\n${announcement}`)
.setStatus("Success")
.setEmoji("SETTINGS.STATS.GREEN")
],
components: []
});
const announcementEmbed = new EmojiEmbed()
.setTitle("Developer Announcement")
.setDescription(announcement)
.setStatus("Danger")
.setEmoji("NUCLEUS.LOGO")
.setFooter({text: `Sent by ${interaction.user.username}`, iconURL: interaction.user.displayAvatarURL()})
for (const channel of channelsToNotify) {
const ch = await client.channels.fetch(channel) as GuildTextBasedChannel | null;
if (!ch) continue;
await ch.send({
embeds: [announcementEmbed]
});
}
await interaction.editReply({
embeds: [
new EmojiEmbed()
.setTitle("Announcement")
.setDescription(`Sent to ${channelsToNotify.length} channels. Preview:\n\n${announcement}`)
.setStatus("Success")
.setEmoji("SETTINGS.STATS.GREEN")
],
components: []
})
} else if (i.customId === "cancel") {
await i.deferUpdate();
await interaction.editReply({
embeds: [new EmojiEmbed().setTitle("Announcement Cancelled").setStatus("Danger")],
components: []
});
}
break;
}
}
} }
}; };

@ -1,402 +0,0 @@
{
"NUCLEUS": {
"LOGO": "953040840945721385",
"PREMIUMACTIVATE": "a1067536222764925068",
"PREMIUM": "1067928702027042876",
"LOADING": "a946346549271732234",
"INFO": {
"HELP": "751751467014029322",
"ABOUT": "751762088346517504",
"COMMANDS": "751762088229339136",
"SUPPORT": "751762087780286495"
},
"COMMANDS": {
"RAID": "777143043711172608",
"LOCK": "776848800995868682",
"IGNORE": "777520659270074389"
}
},
"ICONS": {
"ADD": "826823514904330251",
"REMOVE": "826823515268186152",
"EDIT": "989911820267577366",
"HISTORY": "989911933069168690",
"FILTER": "990242059451514902",
"ATTACHMENT": "997570687193587812",
"LOGGING": "999613304446144562",
"SAVE": "1065722246322200586",
"REORDER": "1069323453909454890",
"PUBLISH": "1081691380004421743",
"NOTIFY": {
"ON": "1000726394579464232",
"OFF": "1078058136092541008"
},
"OPP": {
"ADD": "837355918831124500",
"REMOVE": "837355918420869162"
},
"CHANNEL": {
"GUILD_TEXT": "990209996182679632",
"GUILD_TEXT_NSFW": "990216363526221824",
"GUILD_VOICE": "990213162697637969",
"GUILD_VOICE_NSFW": "990216017244463124",
"GUILD_STORE": "853668786925469706",
"GUILD_NEWS": "853668786493063169",
"GUILD_NEWS_NSFW": "990216028300673094",
"GUILD_STAGE_VOICE": "853668786842763294",
"THREAD_CHANNEL": "990210005108158514",
"THREAD_PIPE": "990213168183779348",
"RULES": "990213153080115250",
"FORUM": "1061706437526552716",
"CATEGORY": "1064943289708597348"
},
"FLAGS": {
"RED": "1082719687219101800",
"YELLOW": "1082719684060794890",
"GREEN": "1082719681326108763",
"BLUE": "1082719679161843734",
"PURPLE": "1082719686292156628",
"GRAY": "1082719682492125337"
}
},
"CONTROL": {
"TICK": "947441964234702849",
"REDTICK": "999612396727439370",
"CROSS": "947441948543815720",
"BLOCKCROSS": "952261738349330493",
"BLOCKTICK": "991805475777695855",
"LEFT": "947441951148486728",
"RIGHT": "947441957473488916",
"UP": "963409197293273108",
"DOWN": "963409199549796352",
"DOWNLOAD": "947959513032585236",
"TICKET": "973253514488860683",
"MENU": "976580327835320410",
"PILL": {
"TICK": "753314339082993832",
"CROSS": "753314339389309100"
}
},
"STATUS": {
"ONLINE": "729064530084102166",
"IDLE": "729064531577536582",
"DND": "729064531057311886",
"STREAMING": "729764055082074153",
"OFFLINE": "729064531271221289"
},
"CHANNEL": {
"TEXT": {
"CREATE": "729066924943737033",
"EDIT": "951957316117360640",
"DELETE": "729064529211686922"
},
"VOICE": {
"CREATE": "729064530830950530",
"EDIT": "951957316071223336",
"DELETE": "729064530981683200"
},
"CATEGORY": {
"CREATE": "787987508465238026",
"EDIT": "787987508565770300",
"DELETE": "787987508507967488"
},
"PURGE": {
"RED": "729064530797133875",
"GREEN": "947443645391441940"
},
"TITLEUPDATE": "729763053620691044",
"TOPICUPDATE": "729763053477953536",
"SLOWMODE": {
"ON": "973616021304913950",
"OFF": "777138171447869480"
},
"NSFW": {
"ON": "729064531208175736",
"OFF": "729381430991388752"
}
},
"MEMBER": {
"JOIN": "729066519337762878",
"LEAVE": "729064531170558575",
"BOT": {
"JOIN": "729064528666689587",
"LEAVE": "729064528998039633"
},
"KICK": "729263536785850458",
"BAN": "729263536643112991",
"UNBAN": "729263536840114216"
},
"INVITE": {
"CREATE": "729064529274601482",
"DELETE": "729064531103580230"
},
"WEBHOOK": {
"CREATE": "752070251906203679",
"UPDATE": "752073772823216191",
"DELETE": "752070251948146768"
},
"MESSAGE": {
"CREATE": "751762088229339136",
"EDIT": "729065958584614925",
"DELETE": "729064530432360461",
"PIN": "729064530755190894",
"REACTION": {
"ADD": "",
"REMOVE": "",
"CLEAR": "729064531468353606"
},
"PING": {
"MASS": "729620608408879124",
"EVERYONE": "729064531073957909",
"ROLE": "729263536915742770"
}
},
"PUNISH": {
"WARN": {
"RED": "947433493384806430",
"YELLOW": "729764054897524768",
"GREEN": "947433504076091424"
},
"KICK": {
"RED": "729764053794422896",
"YELLOW": "947429333289562132",
"GREEN": "947428786692042764"
},
"BAN": {
"RED": "729764053861400637",
"YELLOW": "729764053941223476",
"GREEN": "947421674364629022"
},
"UNBAN": {
"RED": "972511610885255259",
"YELLOW": "972511620343414794",
"GREEN": "729263536840114216"
},
"MUTE": {
"RED": "947555098974883910",
"YELLOW": "729764053865463840",
"GREEN": "947555107980066866"
},
"SOFTBAN": "729764053941223476",
"VOICEMUTE": "729764054855450697",
"CLEARHISTORY": "729764062270980096",
"NICKNAME": {
"RED": "959762533101731980",
"YELLOW": "729064531019694090",
"GREEN": "959762533072392202"
}
},
"BADGES": {
"NUCLEUSDEVELOPER": "957722888360853595",
"CLICKSDEVELOPER": "957722888314683462",
"BOT": "776375959108190239",
"BOOSTER": "775783766131605545",
"HypeSquadOnlineHouse1": "775783765930016789",
"HypeSquadOnlineHouse2": "775783766152577095",
"HypeSquadOnlineHouse3": "775783766303440937",
"Hypesquad": "775783766194126908",
"PremiumEarlySupporter": "775783766055452693",
"BugHunterLevel1": "775783766252847154",
"BugHunterLevel2": "775783766130950234",
"Partner": "775783766178005033",
"Staff": "775783766383788082",
"VerifiedDeveloper": "775783766425600060",
"Quarantined": "1059794708638994474",
"Spammer": "1059794708638994474",
"ActiveDeveloper": "1059795592966053918"
},
"VOICE": {
"CONNECT": "784785219391193138",
"CHANGE": "784785219353968670",
"LEAVE": "784785219432480808",
"MUTE": "784785219613360149",
"UNMUTE": "784785219441524766",
"DEAFEN": "784785219424747550",
"UNDEAFEN": "784785219324346378",
"STREAM": {
"START": "853519659775819787",
"STOP": "853519660116213780"
},
"VIDEO": {
"START": "853519659945295873",
"STOP": "853519660116738078"
}
},
"SETTINGS": {
"STATS": {
"GREEN": "752214059159650396",
"RED": "1065677252630675556"
}
},
"GUILD": {
"RED": "959779988264079361",
"YELLOW": "729763053352124529",
"GREEN": "959779988503154698",
"EMOJI": {
"CREATE": "953035168115982437",
"EDIT": "729066518549233795",
"DELETE": "953035210121953320"
},
"SETTINGS": {
"GREEN": "752570111063228507",
"RED": "1068607393728049253"
},
"ICONCHANGE": "729763053612302356",
"TICKET": {
"OPEN": "853245836331188264",
"CLOSE": "853580122506133505",
"ARCHIVED": "853580122636025856"
},
"ROLES": {
"CREATE": "729064530763579413",
"DELETE": "729064530885476392",
"EDIT": "776109664793919489",
"MEMBERS": "752570111281594509",
"MESSAGES": "752570111373606942",
"VOICE": "752570111088525354"
}
},
"MOD": {
"IMAGES": {
"SWEARING": "730438422627614810",
"INVISIBLE": "730438422690398238",
"TOOBIG": "730438422921084998",
"TOOSMALL": "730438422921216150"
},
"SWEARING": "730438422816096377",
"SPAM": "730438422853845042"
},
"NUMBERS": [
{
"NORMAL": "753259024404840529",
"GREEN": "753312608378945648",
"RED": "753312608890650664"
},
{
"NORMAL": "753259025990418515",
"GREEN": "753312608550912112",
"RED": "753312609075462246"
},
{
"NORMAL": "753259024409034896",
"GREEN": "753312608513294366",
"RED": "753312608680935446"
},
{
"NORMAL": "753259024358703205",
"GREEN": "753312608815284426",
"RED": "753312609377320966"
},
{
"NORMAL": "753259024555835513",
"GREEN": "753312608735461457",
"RED": "753312609255686223"
},
{
"NORMAL": "753259024744579283",
"GREEN": "753312608630604017",
"RED": "753312609138376777"
},
{
"NORMAL": "753259024354639994",
"GREEN": "753312608656031806",
"RED": "753312609465270412"
},
{
"NORMAL": "753259024530800661",
"GREEN": "753312608718815322",
"RED": "753312609104822313"
},
{
"NORMAL": "753259024895574037",
"GREEN": "753312608790249646",
"RED": "753312609477984319"
},
{
"NORMAL": "753259024681533553",
"GREEN": "753312608899170365",
"RED": "753312609557545089"
}
],
"BOTS": {
"GPS": "878919163937185803",
"NUCLEUS": "878919163597439016",
"CLICKSFORMS": "878919163337388073",
"CASTAWAY": "878919164255944726",
"CMPING": "878919164125929502",
"HOOKY": "878919164121731082"
},
"CFSERVICE": {
"VERIFIED": "881984571242053642",
"UNVERIFIED": "881984571258847232"
},
"TICKETS": {
"SUPPORT": "952295894370369587",
"REPORT": "952295894437482537",
"QUESTION": "952295894403907645",
"ISSUE": "952295894412316672",
"SUGGESTION": "952295894399725588",
"OTHER": "952295894445883502"
},
"TRACKS": {
"ICON": "963170616444334171",
"HORIZONTAL": {
"LEFT": {
"ACTIVE": "963121920038035506",
"INACTIVE": "963121944239153242"
},
"MIDDLE": {
"ACTIVE": "963121925893263420",
"INACTIVE": "963121949796597870"
},
"RIGHT": {
"ACTIVE": "963121933384302602",
"INACTIVE": "963121956125831168"
}
},
"VERTICAL": {
"TOP": {
"ACTIVE": "963122664648630293",
"INACTIVE": "963122659862917140",
"GRAY": {
"ACTIVE": "963123505052934144",
"INACTIVE": "963123495221469194"
}
},
"MIDDLE": {
"ACTIVE": "963122679332880384",
"INACTIVE": "963122673246937199",
"GRAY": {
"ACTIVE": "963123517702955018",
"INACTIVE": "963123511927390329"
}
},
"BOTTOM": {
"ACTIVE": "963122691752218624",
"INACTIVE": "963122685691453552",
"GRAY": {
"ACTIVE": "963123529988059187",
"INACTIVE": "963123523742748742"
}
}
},
"SINGLE": {
"ACTIVE": "963361162215424060",
"INACTIVE": "963361431758176316",
"GRAY": {
"ACTIVE": "963361204695334943",
"INACTIVE": "963361200828198952"
}
}
},
"COLORS": {
"RED": "875822912802803754",
"ORANGE": "875822913104785418",
"YELLOW": "875822913079611402",
"GREEN": "875822913213841418",
"BLUE": "875822912777637889",
"PURPLE": "875822913213841419",
"PINK": "875822913088020541",
"GRAY": "875822913117368340"
}
}

@ -142,6 +142,11 @@ export class Guilds {
// console.log("Guild delete") // console.log("Guild delete")
await this.guilds.deleteOne({ id: guild }); await this.guilds.deleteOne({ id: guild });
} }
async staffChannels(): Promise<string[]> {
const entries = await this.guilds.find({ "logging.staff.channel": {$exists: true}}, { projection: { "logging.staff.channel": 1, _id: 0 } }).toArray();
return entries.map(e => e.logging.staff.channel!);
}
} }
interface TranscriptEmbed { interface TranscriptEmbed {

@ -1,12 +1,25 @@
import emojis from "../config/emojis.json" assert { type: "json" }; import emojis from "../config/emojis.js"
import _ from "lodash"; import _ from "lodash";
interface EmojisIndex { interface EmojisIndex {
[key: string]: string | EmojisIndex | EmojisIndex[]; [key: string]: string | EmojisIndex | EmojisIndex[];
} }
function getEmojiByName(name: string | null, format?: string): string { const EMOJIPATHS: string[] = [];
if (!name) return "";
function getEmojiPaths(obj: EmojisIndex, path: string[] = []) {
for (const key in obj) {
if (typeof obj[key] === "string") {
EMOJIPATHS.push([...path, key].join("."));
} else {
getEmojiPaths(obj[key] as EmojisIndex, [...path, key]);
}
}
}
getEmojiPaths(emojis);
function getEmojiByName(name: typeof EMOJIPATHS[number], format?: string): string {
const parts = name.split("."); const parts = name.split(".");
let id: string | EmojisIndex | EmojisIndex[] | undefined = emojis; let id: string | EmojisIndex | EmojisIndex[] | undefined = emojis;
for (const part of parts) { for (const part of parts) {

Loading…
Cancel
Save