diff options
-rw-r--r-- | commands/mod/sticky.js | 84 | ||||
-rw-r--r-- | commands/mod/ticket.js | 1 | ||||
-rw-r--r-- | commands/mod/whois.js | 18 | ||||
-rw-r--r-- | commands/util/defaults/ticket-create.js.json | 2 | ||||
-rw-r--r-- | commands/util/emote.js | 6 | ||||
-rw-r--r-- | commands/util/ticket-create.js | 29 | ||||
-rw-r--r-- | index.js | 7 |
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 @@ -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) |