aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--commands/mod/confirm.js99
-rw-r--r--commands/mod/defaults/confirm.js.json2
-rw-r--r--events/message.js7
-rw-r--r--events/ready.js10
-rw-r--r--readme.md2
-rw-r--r--src/util.js10
6 files changed, 123 insertions, 7 deletions
diff --git a/commands/mod/confirm.js b/commands/mod/confirm.js
new file mode 100644
index 0000000..bc53d22
--- /dev/null
+++ b/commands/mod/confirm.js
@@ -0,0 +1,99 @@
+const Discord = require("discord.js")
+const { EmbedBuilder, ActionRowBuilder,ButtonBuilder,ButtonStyle,ChannelType } = require("discord.js");
+const { PermissionsBitField } = require('discord.js');
+const settings = require("../../src/settings")
+const fs = require('fs');
+const message = require("../../events/message");
+let config_loc = __filename+".json"
+let config = JSON.parse(fs.readFileSync(config_loc))
+module.exports = {
+ name: "sns",
+ command: ["sns"],
+ mod_only:true,
+ config:config,
+ config_loc:config_loc,
+ main(client,Discord,message,args) {
+
+ },
+ s_options:[{type:"sub",name:"ban",options:[
+ {type:"user",name:"user",desc:"message to be sent",required:true,autocomplete:false},
+ {type:"string",name:"ban-reason",desc:"ban reason to be sent to the user",required:true,autocomplete:false},
+ {type:"string",name:"details",desc:"staff note (mod side only)",required:false,autocomplete:false},
+ {type:"boolean",name:"send-appeal",desc:"whether to send your user id for appealing (default : false)", required:false,autocomplete:false}]},
+ ],
+ s_main(client,Discord,interaction){
+ this.exec(client, {
+ message : interaction,
+ user : interaction.guild.members.cache.get(interaction.options.getUser("user").id),
+ reason : interaction.options.getString("ban-reason"),
+ details : interaction.options.getString("details"),
+ appeal : interaction.options.getBoolean("send-appeal"),
+ })
+ },
+ async exec(client,param){
+ let embed = new EmbedBuilder()
+ .setTitle("Waiting for Confirmation")
+ .setThumbnail(param.user.displayAvatarURL())
+ .setFooter({text:"0 confirmations"})
+ .setColor(settings.defaultColor)
+
+ embed.addFields(
+ {name : "Confirmed by Staff:", value: "<@!"+param.message.author.id+">", inline : true},
+ {name : "User:", value: "<@!"+param.user.id+">", inline : true},
+ {name : "Ban Reason:", value : param.reason},
+ )
+ if(param.details) embed.addFields({name : "Staff Note:", value : param.details})
+
+ const confirm_button = new ButtonBuilder()
+ .setCustomId('confirm')
+ .setLabel('Confirm')
+ .setStyle(ButtonStyle.Primary)
+ const row = new ActionRowBuilder()
+ .addComponents(confirm_button);
+
+ let confirms = [param.message.author.id]
+ let mess = await param.message.reply({embeds:[embed],components:[row]})
+ let th = await client.channels.cache.get(param.message.channelId).threads.create({
+ name: param.user.user.username,
+ reason: 'Ban request discussion',
+ autoArchiveDuration: 60,
+ type: ChannelType.PublicThread,
+ })
+
+ async function rec_read(){
+ const collectorFilter = i => i.user.id != param.message.author.id && !confirms.includes(i.user.id);
+ try {
+ const confirmation = await mess.awaitMessageComponent({ filter: collectorFilter, time: 60000000 });
+ if(confirmation.customId == "confirm"){
+ confirms.push(confirmation.author.id)
+ let comb_mod = ""
+ for(let mod of confirms){
+ comb_mod += "<@" + mod + ">"
+ if(mod != confirms[confirms.length-1]) comb_mod += ","
+ }
+ embed.setFooter({text:confirms.length - 1 + "/2 confirmations"})
+ embed.data.fields[0].value = comb_mod
+
+ if(confirms.length >= 3){
+ let ban_embed = new EmbedBuilder()
+ .setTitle("Banned from Supernoobs")
+ .setFooter({text:"You have been banned from this server. Maybe in another life, we could have been friends. But not in this one. 💔"})
+ .setColor(settings.defaultColor)
+ .setFields({name : "Reason", value : param.reason})
+ if(param.appeal) ban_embed.addFields({name : "Appeal id", value : "" + param.message.author.id})
+ param.message.client.users.cache.get(param.user.id).send({embeds:[ban_embed]})
+ embed.setTitle("Ban Confirmed | " + param.user.user.username);
+ mess.edit({embeds:[embed],components:[]})
+ } else {
+ mess.edit({embeds:[embed]})
+ rec_read()
+ confirmation.deferUpdate()
+ }
+ }
+ } catch (e) {
+ console.log(e)
+ }
+ }
+ await rec_read();
+ }
+}; \ No newline at end of file
diff --git a/commands/mod/defaults/confirm.js.json b/commands/mod/defaults/confirm.js.json
new file mode 100644
index 0000000..83df9de
--- /dev/null
+++ b/commands/mod/defaults/confirm.js.json
@@ -0,0 +1,2 @@
+{"cooldown":-1,"desc":"Creates a vote to ban/kick","restrict":[],"restricted":[],
+"usage":"{command} {action} {user} {desc}"} \ No newline at end of file
diff --git a/events/message.js b/events/message.js
index b93f081..c9234e0 100644
--- a/events/message.js
+++ b/events/message.js
@@ -19,6 +19,7 @@ module.exports = {
if(!settings["allowed-servers"].includes(message.guild.id)||message.author.bot||message.member==null)
return;
+
//spam messages
for(let i = 0; i < global.recent_messages.length; i++){
let diff = util.diff((new Date(message.createdTimestamp)).getUTCSeconds(),(new Date(global.recent_messages[i].createdTimestamp)).getUTCSeconds());
@@ -37,7 +38,7 @@ module.exports = {
}
}
global.recent_messages.push(message)
- if(matching_ids.length > 3){
+ if(false && matching_ids.length > 3){
//let temp_msg = global.recent_messages;
global.recent_messages = global.recent_messages.filter(x => x.author != message.author)
let could_timeout = true
@@ -47,8 +48,8 @@ module.exports = {
could_timeout = false;
}
for(let mm of matching_ids){
- mm.delete();
- //try { await mm.delete(); } catch (e) {}
+ //mm.delete();
+ mm.delete().then().catch();
}
let embed = new EmbedBuilder()
diff --git a/events/ready.js b/events/ready.js
index c694c00..889c0b1 100644
--- a/events/ready.js
+++ b/events/ready.js
@@ -11,17 +11,21 @@ module.exports = {
async main (client,Discord){
await db._raw.sync()
let config = JSON.parse(fs.readFileSync(config_loc))
- client.once("ready", () => {
+ client.once("ready", async () => {
//preload
global.channels = {}
for(let guild of Object.keys(settings.preloads)){
-
+ let mem = Object.fromEntries(await client.guilds.cache.get(guild).members.fetch())
+ console.log(Object.keys(mem))
+
for(let chan of Object.keys(settings.preloads[guild])){
let t_add = client.guilds.cache.get(guild).channels.cache.get(chan)
if(t_add==null)
console.log("failed to load "+chan+" from "+guild+", skipping");
else
- global.channels[settings.preloads[guild][chan].name] = t_add
+ global.channels[settings.preloads[guild][chan].name] = t_add;
+
+
}
}
//end
diff --git a/readme.md b/readme.md
index 36bed50..a78ac9f 100644
--- a/readme.md
+++ b/readme.md
@@ -10,7 +10,7 @@ made for linux or unix systems, running elsewhere isnt supported but should prob
- `npm i`
- put tokens and api keys in .env-example, and move it to .env
- `sh buildconfig.sh`
-- `node .` or `sh snschan.sh` (to restart on error)
+- `node index.js` or `sh snschan.sh` (to restart on error)
## todo ~
diff --git a/src/util.js b/src/util.js
index 3321744..880c3c4 100644
--- a/src/util.js
+++ b/src/util.js
@@ -1,6 +1,16 @@
const rem_emp = function (e) {return e !== "";}
module.exports = {
+ generate_id(){
+ let config = JSON.parse(fs.readFileSync(config_loc))
+ var ticket = "";
+ var characters = config["ticket-id-chars"].value;
+ for (var i = 0; i < config["ticket-id-length"].value; i++) {
+ ticket += characters.charAt(Math.floor(Math.random() * characters.length));
+ if (i == config["ticket-id-split"].value) ticket += "-";
+ }
+ return ticket
+ },
diff(a,b){
return (a>b)?(a-b):(b-a);
},