diff options
author | ame <[email protected]> | 2023-09-26 23:12:35 -0500 |
---|---|---|
committer | ame <[email protected]> | 2023-09-26 23:12:35 -0500 |
commit | adc05627661e4b229037dc1e43410846078f4996 (patch) | |
tree | 8bbd7d34085007e36207f8e8c5976b7de64a7b3b /commands/mod/ticket.js |
init
Diffstat (limited to 'commands/mod/ticket.js')
-rw-r--r-- | commands/mod/ticket.js | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/commands/mod/ticket.js b/commands/mod/ticket.js new file mode 100644 index 0000000..5e69ed7 --- /dev/null +++ b/commands/mod/ticket.js @@ -0,0 +1,96 @@ +const Discord = require("discord.js") +const { EmbedBuilder } = require("discord.js"); +const { PermissionsBitField, MessageAttachment } = require('discord.js'); +const {upload_limit} = require("../../src/util") +const settings = require("../../src/settings") +const fs = require('fs'); +let db = require("../../src/db") +let config_loc = __filename+".json" +let config = JSON.parse(fs.readFileSync(config_loc)) +module.exports = { + name: "ticket", + command: ["ticket"], + mod_only:true, + config:config, + config_loc:config_loc, + async main(client,Discord,message,args) { + let matt = Array.from(message.attachments, ([name, value]) => ({ name, value })) + + let action = args[0]; + let ticket_id = args[1]; + args.shift();args.shift(); + let r_message = args.join(' ') + + this.exec(client,{att:matt,action:action,ticket_id:ticket_id,r_message:r_message,message:message}) + }, + s_options:[{type:"string",name:"ticket",desc:"ticket id",required:true,autocomplete: async function(){ let tik = await db.Tickets.findAll({attributes:['ticket'],where:{status:'open'}}); let out = []; for(let t of tik) out.push(t.ticket); return out; }}, + {type:"string",name:"action",desc:"operation to perform",required:true,autocomplete:["reply","close","dump"]}, + {type:"string",name:"message",desc:"message to reply with",required:false,autocomplete:false}, + {type:"attachment",name:"attachment",desc:"attachment to reply with",required:false,autocomplete:false}], + async s_main(client,Discord,interaction){ + this.exec(client,{message:interaction,att:[interaction.options.getAttachment("attachment")] ?? [],action:interaction.options.getString("action"), + ticket_id:interaction.options.getString("ticket"),r_message:interaction.options.getString("message")}) + }, + async exec(client,param){ + let tickets; + let date = new Date().toLocaleString() + switch(param.action){ + case 'reply': + case 'respond': + case 'r': + if(param.r_message==null&¶m.att==null) + return param.message.reply("you must provide a message or attachment") + tickets = await db.Tickets.findAll({where:{status:'open',ticket:param.ticket_id}}) + if(tickets.length==0){ + tickets = await db.Tickets.findAll({where:{ticket:param.ticket_id}}) + if(tickets.length==0) + return param.message.reply("ticket not found:c") + return param.message.reply("ticket is not open") + } + let ticket = tickets[0] + let messages = JSON.parse(ticket.messages) + messages.push({message:param.r_message,attachments:param.att,mod:true}) + db.Tickets.update({'messages':JSON.stringify(messages)},{where:{id:ticket.id}}) + + const embed = new EmbedBuilder() + .setTitle("Updated Ticket | "+ticket.ticket) + .setColor(settings.defaultColor) + .setDescription("Message: '"+param.r_message+"'") + .setFooter({text:"Created: "+date}) + let smatt = [] + for(let att of param.att){ + if(att!=null) + smatt.push({attachment:att?.value?.url ?? att?.url}) + } + param.message.client.users.cache.get(ticket.author).send({embeds:[embed],files:smatt}) + param.message.reply("updated ticket "+ticket.ticket); + break; + case 'close': + tickets = await db.Tickets.findAll({where:{status:'open',ticket:param.ticket_id}}) + if(tickets.length==0){ + tickets = await db.Tickets.findAll({where:{ticket:param.ticket_id}}) + if(ticket.length==0) + return param.message.reply("ticket not found:c") + return param.message.reply("ticket is already closed") + } + db.Tickets.update({'status':'closed'},{where:{id:tickets[0].id}}) + param.message.reply("closed ticket "+tickets[0].ticket); + break; + case 'dump': + case 'list': + tickets = await db.Tickets.findAll({where:{ticket:param.ticket_id}}) + if(tickets.length==0){ + return param.message.reply("ticket not found:c") + } + let filename = "/tmp/"+tickets[0].ticket+".json" + fs.writeFileSync(filename,tickets[0].messages) + let stats = fs.statSync(filename) + if(stats.size / (1024*1024) > upload_limit(param.message.guild)) + return param.message.reply("file too large:( file is "+stats.size / (1024*1024)+"mb") + param.message.reply({files:[filename]}) + break; + default: + param.message.reply("unknown action, try `sns help ticket`") + } + } +};
\ No newline at end of file |