aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--commands/mod/sticky.js84
-rw-r--r--commands/mod/ticket.js1
-rw-r--r--commands/mod/whois.js18
-rw-r--r--commands/util/defaults/ticket-create.js.json2
-rw-r--r--commands/util/emote.js6
-rw-r--r--commands/util/ticket-create.js29
-rw-r--r--index.js7
7 files changed, 113 insertions, 34 deletions
diff --git a/commands/mod/sticky.js b/commands/mod/sticky.js
index b3dc055..f5034de 100644
--- a/commands/mod/sticky.js
+++ b/commands/mod/sticky.js
@@ -4,6 +4,7 @@ const db = require("../../src/db")
let config_loc = __filename+".json"
let config = JSON.parse(fs.readFileSync(config_loc))
const {upload_limit} = require("../../src/util")
+const options = ["add","remove","dump"]
module.exports = {
name : "sticky",
command: ["sticky"],
@@ -14,44 +15,73 @@ module.exports = {
switch(args[0]){
case 'add':
case 'a':
- if(args.length<3){
- message.reply("not enough parameters, try `sns help sticky`")
- break;
- }
- db.Sticky.create({channel:args[1],message:args[2],last_message:'null',embed:args.includes("embed"),embed_color:config.embed_color});
- message.react("✅")
+ this.p_add(client,Discord,message,args[1],args[2],args.includes("embed"))
break;
case 'rem':
case 'remove':
case 'r':
- if(args.length<2){
- message.reply("not enough parameters, try `sns help sticky`")
- break;
- }
- let initial = await db.Sticky.count()
- await db.Sticky.destroy({
- where: {
- channel: args[1]
- }
- });
- message.reply("removed "+(initial-(await db.Sticky.count()))+" item(s)")
+ this.p_rem(client,Discord,message,args[1]);
break;
case 'dump':
case 'list':
- let list = await db.Sticky.findAll()
- let flist = "channelid : message : last message\n"
- for(let l of list)
- flist+=l.channel+" : "+l.message+" : "+l.last_message+"\n"
- let filename = "/tmp/sticky.json"
- fs.writeFileSync(filename,flist)
- let stats = fs.statSync(filename)
- if(stats.size / (1024*1024) > upload_limit(message.guild))
- return message.reply("file too large:( file is "+stats.size / (1024*1024)+"mb")
- message.reply({files:[filename]})
+ this.p_dump(client,Discord,message);
break;
default:
message.reply("unknown action, try `sns help sticky`")
}
},
+ s_options:[{type:"string",name:"action",desc:"what to do",required:true,autocomplete:["add","remove","dump"]},
+ {type:"string",name:"message",desc:"(required for add) message to be sent",required:false,autocomplete:false},
+ {type:"channel",name:"chan",desc:"(required for remove and add) channel to clear",required:false,autocomplete:false},
+ {type:"bool",name:"embed",desc:"whether or not to use a embed",required:false,autocomplete:false}],
+ async s_main(client,Discord,interaction){
+ let action = interaction.options.getString("action")
+ let mess = interaction.options.getString("message")
+ let chan = interaction.options.getChannel("chan")
+ let embed = interaction.options.getBoolean("embed")
+ if(!options.includes(action))
+ return interaction.reply({content:"please use the autocomplete, (valid values are add, remove, and dump)",ephemeral: true})
+ if(action=="add") return this.p_add(client,Discord,interaction,chan.id,mess,embed)
+ if(action=="remove") return this.p_rem(client,Discord,interaction,chan.id)
+ if(action=="dump") return this.p_dump(client,Discord,interaction)
+ },
+ async p_dump(client,Discord,message){
+ let list = await db.Sticky.findAll()
+ let flist = "channelid : message : last message\n"
+ for(let l of list)
+ flist+=l.channel+" : "+l.message+" : "+l.last_message+"\n"
+ let filename = "/tmp/sticky.json"
+ fs.writeFileSync(filename,flist)
+ let stats = fs.statSync(filename)
+ if(stats.size / (1024*1024) > upload_limit(message.guild))
+ return message.reply("file too large:( file is "+stats.size / (1024*1024)+"mb")
+ message.reply({files:[filename]})
+ },
+ async p_rem(client,Discord,message,chan){
+ if(chan==null){
+ message.reply("no channel provided")
+ return;
+ }
+ let initial = await db.Sticky.count()
+ await db.Sticky.destroy({
+ where: {
+ channel: chan
+ }
+ });
+ message.reply("removed "+(initial-(await db.Sticky.count()))+" item(s)")
+ },
+ async p_add(client,Discord,message,chan,mess,embed){
+ if(chan==null){
+ message.reply("no channel provided")
+ return;
+ }
+ if(mess==null){
+ message.reply("no message provided")
+ return;
+ }
+ db.Sticky.create({channel:chan,message:mess,last_message:'null',embed:embed ?? false,embed_color:config.embed_color});
+ //message.react("✅")
+ message.reply("added")
+ }
} \ No newline at end of file
diff --git a/commands/mod/ticket.js b/commands/mod/ticket.js
index 5e69ed7..e499dd8 100644
--- a/commands/mod/ticket.js
+++ b/commands/mod/ticket.js
@@ -78,6 +78,7 @@ module.exports = {
break;
case 'dump':
case 'list':
+ if(param.ticket_id==null) return param.message.reply("you must provide a ticket id")
tickets = await db.Tickets.findAll({where:{ticket:param.ticket_id}})
if(tickets.length==0){
return param.message.reply("ticket not found:c")
diff --git a/commands/mod/whois.js b/commands/mod/whois.js
index 56d2645..1926885 100644
--- a/commands/mod/whois.js
+++ b/commands/mod/whois.js
@@ -70,13 +70,19 @@ module.exports = {
let created = new Date(parseInt(user.user.createdAt / 1000, 10)*1000).toLocaleDateString(undefined,{ weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' });
let mod = user.permissions!=null&&user.permissions?.has(PermissionsBitField.Flags.KickMembers)
let roles = ""
- //console.log(message.mentions.users)
+ let color = {pos:-1,color:settings.defaultColor};
+
message.channel.send("loading ids").then(async(m)=>{
await m.edit("<@!"+user.id+">")
m.delete()
})
- for(let r of user._roles)
- roles+="<@&"+r+"> "
+ for(let r in user._roles){
+ let role = message.guild.roles.cache.get(user._roles[r])
+ if(role.color!=0&&role.rawPosition>color.pos)
+ color={pos:role.rawPosition,color:role.color}
+ roles+="<@&"+user._roles[r]+"> "
+ }
+
const embed = new EmbedBuilder()
.setAuthor({name:user.user.username,iconURL:user.displayAvatarURL()})
.setThumbnail(user.displayAvatarURL())
@@ -85,12 +91,12 @@ module.exports = {
{ name: 'Created', value:created , inline: true },
{ name: 'Roles ['+user._roles.length+']', value:roles }])
.setFooter({text:"id:"+user.id})
- .setColor(settings.defaultColor)
+ .setColor(color.color)
message.reply({embeds:[embed]})
},
async p_role(client,Discord,message,role){
let members = " "
- //console.log(message.guild.members)
+
let members_m = Object.fromEntries(message.guild.roles.cache.get(role.id).members)
let members_a = []
for(let k of Object.keys(members_m)){
@@ -114,7 +120,7 @@ module.exports = {
.addFields([{ name: 'Mentionable', value:(role.mentionable?"true":"false"), inline: true },
{name: 'Users ['+role.members.size+"]",value:members}])
.setFooter({text:"id:"+role.id})
- .setColor(settings.defaultColor)
+ .setColor(role.color)
message.reply({embeds:[embed]})
}
};
diff --git a/commands/util/defaults/ticket-create.js.json b/commands/util/defaults/ticket-create.js.json
new file mode 100644
index 0000000..7fa5b02
--- /dev/null
+++ b/commands/util/defaults/ticket-create.js.json
@@ -0,0 +1,2 @@
+{"cooldown":-1,"desc":"Create a private ticket thread","restrict":["874305842965516339"],"restricted":[],
+"usage":"{command} [title]"} \ No newline at end of file
diff --git a/commands/util/emote.js b/commands/util/emote.js
index b06bbef..c88f0b4 100644
--- a/commands/util/emote.js
+++ b/commands/util/emote.js
@@ -19,7 +19,11 @@ module.exports = {
s_options:[{type:"string",name:"emote",desc:"emote to send",required:true,autocomplete:subs},
{type:"user",name:"user",desc:"user to emote to (may be optional)",required:false,autocomplete:false}],
async s_main (client,Discord,interaction){
- this.exec(client,{message:interaction,emote:interaction.options.getString("emote"),mentioned:interaction.options.getUser("user")})
+ let emote = interaction.options.getString("emote");
+ if(Object.keys(config.avaliable_multi).includes(emote)||Object.keys(config.avaliable_solo).includes(emote))
+ this.exec(client,{message:interaction,emote:emote,mentioned:interaction.options.getUser("user")})
+ else
+ interaction.reply({content:"invalid emote!", ephemeral: true})
},
async exec(client,param){
let msg = "";
diff --git a/commands/util/ticket-create.js b/commands/util/ticket-create.js
new file mode 100644
index 0000000..3264568
--- /dev/null
+++ b/commands/util/ticket-create.js
@@ -0,0 +1,29 @@
+const fs = require('fs')
+const path = require("path");
+let config_loc = __filename+".json"
+const { PermissionsBitField, ChannelType } = require('discord.js');
+let config = JSON.parse(fs.readFileSync(config_loc))
+module.exports = {
+ name : "ticket-create",
+ command: ["ticket-create"],
+ mod_only: false,
+ config:config,
+ config_loc:config_loc,
+ async main (client,Discord,message,args){
+ this.exec(client,{message:message,thread_name:args[0] ?? 'created by '+message.author.username})
+ },
+ s_options:[{type:"string",name:"title",desc:"thread title",required:false,autocomplete:false}],
+ async s_main (client,Discord,interaction){
+ this.exec(client,{message:interaction,thread_name:interaction.options.getString("title")??'created by '+interaction.author.user.username})
+ },
+ async exec(client,info){
+ let thread = await client.channels.cache.get(info.message.channelId).threads.create({
+ name: info.thread_name,
+ autoArchiveDuration: 60,
+ reason: 'created by <@'+info.message.author.id+'>',
+ type: ChannelType.PrivateThread,
+ })
+ await thread.members.add(info.message.author.id)
+ await info.message.reply({content:"created <#"+thread.id+">"})
+ }
+} \ No newline at end of file
diff --git a/index.js b/index.js
index 8d73ae5..787ef52 100644
--- a/index.js
+++ b/index.js
@@ -8,6 +8,7 @@ process.stdout.write = process.stderr.write = (function(write) {
}
})(process.stdout.write)
process.title = "sns\-chan"
+console.log("["+process.pid+"] running under the name "+process.title)
/**
* Module Imports
*/
@@ -65,6 +66,12 @@ fs.readdirSync("./commands/").forEach(folder => {
.setRequired(opt.required)
.setAutocomplete(opt.autocomplete!=null&&opt.autocomplete!=false))
break;
+ case 'bool': case 'boolean':
+ scom.addBooleanOption(option =>
+ option.setName(opt.name)
+ .setDescription(opt.desc)
+ .setRequired(opt.required))
+ break;
case 'channel':
scom.addChannelOption(option =>
option.setName(opt.name)