diff --git a/commands/add.js b/commands/add.js index 074acd7..be5b848 100644 --- a/commands/add.js +++ b/commands/add.js @@ -6,6 +6,8 @@ const log = bot.errorLog.log const l = bot.language const permsChecker = require("../core/utils/permisssionChecker") +const APIEvents = require("../core/api/modules/events") + module.exports = () => { client.on("messageCreate",msg => { if (!msg.content.startsWith(config.prefix+"add")) return @@ -29,6 +31,12 @@ module.exports = () => { var loguser = msg.mentions.users.first() log("command","someone used the 'add' command",[{key:"user",value:msg.author.tag}]) log("system","user added to ticket",[{key:"user",value:msg.author.tag},{key:"ticket",value:msg.channel.name},{key:"added_user",value:loguser.tag}]) + + const ticketId = firstmsg.embeds[0].footer.text.split("Ticket Type: ")[1] + const ticketData = require("../core/getoptions").getOptionsById("newT"+ticketId) + APIEvents.onTicketAdd(msg.author,loguser,msg.channel,msg.guild,new Date(),{status:"open",name:msg.channel.name,ticketOptions:ticketData}) + + APIEvents.onCommand("add",permsChecker.command(msg.author.id,msg.guild.id),msg.author,msg.channel,msg.guild,new Date()) }) }) @@ -57,6 +65,12 @@ module.exports = () => { var loguser = user log("command","someone used the 'add' command",[{key:"user",value:interaction.user.tag}]) log("system","user added to ticket",[{key:"user",value:interaction.user.tag},{key:"ticket",value:interaction.channel.name},{key:"added_user",value:loguser.tag}]) + + const ticketId = firstmsg.embeds[0].footer.text.split("Ticket Type: ")[1] + const ticketData = require("../core/getoptions").getOptionsById("newT"+ticketId) + APIEvents.onTicketAdd(interaction.user,loguser,interaction.channel,interaction.guild,new Date(),{status:"open",name:interaction.channel.name,ticketOptions:ticketData}) + APIEvents.onCommand("add",permsChecker.command(interaction.user.id,interaction.guild.id),interaction.user,interaction.channel,interaction.guild,new Date()) + }) diff --git a/commands/close.js b/commands/close.js index 81be348..3c622f1 100644 --- a/commands/close.js +++ b/commands/close.js @@ -6,6 +6,8 @@ const log = bot.errorLog.log const l = bot.language const permsChecker = require("../core/utils/permisssionChecker") +const APIEvents = require("../core/api/modules/events") + module.exports = () => { client.on("messageCreate",msg => { if (!msg.content.startsWith(config.prefix+"close")) return @@ -28,6 +30,7 @@ module.exports = () => { msg.channel.send({embeds:[bot.errorLog.success(l.commands.closeTitle,l.commands.closeDescription)],components:[closebutton]}) log("command","someone used the 'close' command",[{key:"user",value:msg.author.tag}]) + APIEvents.onCommand("close",true,msg.author,msg.channel,msg.guild,new Date()) }) @@ -57,6 +60,7 @@ module.exports = () => { interaction.reply({embeds:[bot.errorLog.success(l.commands.closeTitle,l.commands.closeDescription)],components:[closebutton]}) log("command","someone used the 'close' command",[{key:"user",value:interaction.user.tag}]) + APIEvents.onCommand("close",true,interaction.user,interaction.channel,interaction.guild,new Date()) }) }) diff --git a/commands/delete.js b/commands/delete.js index af5a193..e3f1190 100644 --- a/commands/delete.js +++ b/commands/delete.js @@ -6,6 +6,8 @@ const log = bot.errorLog.log const l = bot.language const permsChecker = require("../core/utils/permisssionChecker") +const APIEvents = require("../core/api/modules/events") + module.exports = () => { client.on("messageCreate",msg => { if (!msg.content.startsWith(config.prefix+"delete")) return @@ -33,7 +35,7 @@ module.exports = () => { msg.channel.send({embeds:[bot.errorLog.success(l.commands.deleteTitle,l.commands.deleteDescription)],components:[closebutton]}) log("command","someone used the 'delete' command",[{key:"user",value:msg.author.tag}]) - + APIEvents.onCommand("delete",permsChecker.command(msg.author.id,msg.guild.id),msg.author,msg.channel,msg.guild,new Date()) }) @@ -68,6 +70,7 @@ module.exports = () => { interaction.reply({embeds:[bot.errorLog.success(l.commands.deleteTitle,l.commands.deleteDescription)],components:[closebutton]}) log("command","someone used the 'close' command",[{key:"user",value:interaction.user.tag}]) + APIEvents.onCommand("delete",permsChecker.command(interaction.user.id,interaction.guild.id),interaction.user,interaction.channel,interaction.guild,new Date()) }) }) diff --git a/commands/help.js b/commands/help.js index 5c925b0..25df27e 100644 --- a/commands/help.js +++ b/commands/help.js @@ -5,6 +5,8 @@ const config = bot.config const log = bot.errorLog.log const l = bot.language +const APIEvents = require("../core/api/modules/events") + module.exports = () => { const helpEmbed = new discord.EmbedBuilder() .setColor(config.main_color) @@ -24,6 +26,7 @@ module.exports = () => { if (!args[1]){ msg.channel.send({embeds:[helpEmbed]}) log("command","someone used the 'help' command",[{key:"user",value:msg.author.tag}]) + APIEvents.onCommand("help",true,msg.author,msg.channel,msg.guild,new Date()) return } @@ -31,6 +34,7 @@ module.exports = () => { msg.channel.send({embeds:[helpEmbed]}) log("command","someone used the 'help' command",[{key:"user",value:msg.author.tag}]) + APIEvents.onCommand("help",true,msg.author,msg.channel,msg.guild,new Date()) } }) @@ -40,5 +44,6 @@ module.exports = () => { interaction.reply({embeds:[helpEmbed]}) log("command","someone used the 'help' command",[{key:"user",value:interaction.user.tag}]) + APIEvents.onCommand("help",true,interaction.user,interaction.channel,interaction.guild,new Date()) }) } \ No newline at end of file diff --git a/commands/remove.js b/commands/remove.js index 3511663..29730b3 100644 --- a/commands/remove.js +++ b/commands/remove.js @@ -6,6 +6,8 @@ const log = bot.errorLog.log const l = bot.language const permsChecker = require("../core/utils/permisssionChecker") +const APIEvents = require("../core/api/modules/events") + module.exports = () => { client.on("messageCreate",msg => { if (!msg.content.startsWith(config.prefix+"remove")) return @@ -32,6 +34,11 @@ module.exports = () => { log("command","someone used the 'remove' command",[{key:"user",value:msg.author.tag}]) log("system","user removed from ticket",[{key:"user",value:msg.author.tag},{key:"ticket",value:msg.channel.name},{key:"removed_user",value:loguser.tag}]) + + const ticketId = firstmsg.embeds[0].footer.text.split("Ticket Type: ")[1] + const ticketData = require("../core/getoptions").getOptionsById("newT"+ticketId) + APIEvents.onTicketRemove(msg.author,loguser,msg.channel,msg.guild,new Date(),{status:"open",name:msg.channel.name,ticketOptions:ticketData}) + APIEvents.onCommand("remove",permsChecker.command(msg.author.id,msg.guild.id),msg.author,msg.channel,msg.guild,new Date()) }) }) @@ -61,6 +68,11 @@ module.exports = () => { log("command","someone used the 'remove' command",[{key:"user",value:interaction.user.tag}]) log("system","user removed from ticket",[{key:"user",value:interaction.user.tag},{key:"ticket",value:interaction.channel.name},{key:"removed_user",value:loguser.tag}]) + + const ticketId = firstmsg.embeds[0].footer.text.split("Ticket Type: ")[1] + const ticketData = require("../core/getoptions").getOptionsById("newT"+ticketId) + APIEvents.onTicketRemove(interaction.user,loguser,interaction.channel,interaction.guild,new Date(),{status:"open",name:interaction.channel.name,ticketOptions:ticketData}) + APIEvents.onCommand("remove",permsChecker.command(interaction.user.id,interaction.guild.id),interaction.user,interaction.channel,interaction.guild,new Date()) }) diff --git a/commands/rename.js b/commands/rename.js index 9f716c8..e9ef4ef 100644 --- a/commands/rename.js +++ b/commands/rename.js @@ -6,6 +6,8 @@ const log = bot.errorLog.log const l = bot.language const permsChecker = require("../core/utils/permisssionChecker") +const APIEvents = require("../core/api/modules/events") + module.exports = () => { client.on("messageCreate",msg => { if (!msg.content.startsWith(config.prefix+"rename")) return @@ -41,7 +43,7 @@ module.exports = () => { log("command","someone used the 'rename' command",[{key:"user",value:msg.author.tag}]) log("system","ticket renamed",[{key:"user",value:msg.author.tag},{key:"ticket",value:name},{key:"newname",value:newname}]) - + APIEvents.onCommand("rename",permsChecker.command(msg.author.id,msg.guild.id),msg.author,msg.channel,msg.guild,new Date()) }) @@ -81,7 +83,8 @@ module.exports = () => { log("command","someone used the 'rename' command",[{key:"user",value:interaction.user.tag}]) log("system","ticket renamed",[{key:"user",value:interaction.user.tag},{key:"ticket",value:name},{key:"newname",value:newname}]) - + + APIEvents.onCommand("rename",permsChecker.command(interaction.user.id,interaction.guild.id),interaction.user,interaction.channel,interaction.guild,new Date()) }) }) } \ No newline at end of file diff --git a/commands/reopen.js b/commands/reopen.js index 0f89ecd..20e6e6f 100644 --- a/commands/reopen.js +++ b/commands/reopen.js @@ -6,6 +6,8 @@ const log = bot.errorLog.log const l = bot.language const permsChecker = require("../core/utils/permisssionChecker") +const APIEvents = require("../core/api/modules/events") + module.exports = () => { var reopenCommandBar = new discord.ActionRowBuilder() .addComponents( @@ -28,6 +30,7 @@ module.exports = () => { log("command","someone used the 'reopen' command",[{key:"user",value:msg.author.tag}]) + APIEvents.onCommand("reopen",true,msg.author,msg.channel,msg.guild,new Date()) }) }) @@ -51,6 +54,7 @@ module.exports = () => { log("command","someone used the 'reopen' command",[{key:"user",value:interaction.user.tag}]) + APIEvents.onCommand("reopen",true,interaction.user,interaction.channel,interaction.guild,new Date()) }) diff --git a/commands/ticket.js b/commands/ticket.js index 6735ab5..d64d7c4 100644 --- a/commands/ticket.js +++ b/commands/ticket.js @@ -6,6 +6,8 @@ const log = bot.errorLog.log const l = bot.language const permsChecker = require("../core/utils/permisssionChecker") +const APIEvents = require("../core/api/modules/events") + module.exports = () => { /**@type {String[]} */ var msgIds = [] @@ -33,7 +35,8 @@ module.exports = () => { msg.channel.send({embeds:[embed],components:componentRows}) - log("command","someone used the 'msg' command",[{key:"user",value:msg.author.tag},{key:"id",value:id}]) + log("command","someone used the 'message' command",[{key:"user",value:msg.author.tag},{key:"id",value:id}]) + APIEvents.onCommand("message",permsChecker.command(msg.author.id,msg.guild.id),msg.author,msg.channel,msg.guild,new Date()) } }) @@ -56,7 +59,9 @@ module.exports = () => { interaction.reply({content:l.commands.ticketWarning}) interaction.channel.send({embeds:[embed],components:componentRows}) - log("command","someone used the 'msg' command",[{key:"user",value:interaction.user.tag},{key:"id",value:id}]) + log("command","someone used the 'message' command",[{key:"user",value:interaction.user.tag},{key:"id",value:id}]) + + APIEvents.onCommand("message",permsChecker.command(interaction.user.id,interaction.guild.id),interaction.user,interaction.channel,interaction.guild,new Date()) }) } \ No newline at end of file diff --git a/core/api/modules/base.js b/core/api/modules/base.js index 1da67c2..1f96c22 100644 --- a/core/api/modules/base.js +++ b/core/api/modules/base.js @@ -14,6 +14,8 @@ const storage = bot.storage //used when creating plugins! exports.enableApiLogs = false + +//DOESN'T WORK YET //this is used when embedding open ticket into another bot exports.embeddedMode = false exports.clientLocation = require("../../../index").client diff --git a/core/api/modules/events.js b/core/api/modules/events.js index b9efe7c..4e7d024 100644 --- a/core/api/modules/events.js +++ b/core/api/modules/events.js @@ -13,6 +13,10 @@ const ticketCloseListeners = [] const ticketDeleteListeners = [] const ticketReopenListeners = [] +const ticketAddListeners = [] +const ticketRemoveListeners = [] + + const transcriptCreationListeners = [] const commandListeners = [] const reactionRoleListeners = [] @@ -85,7 +89,7 @@ exports.onTicketDelete = (user,channel,guild,date,ticketdata) => { * @param {Date} date * @param {{name:String,status:"open"|"closed"|"deleted"|"reopened",ticketOptions:Object|false}} ticketdata */ - exports.onTicketReopen = (user,channel,guild,date,ticketdata) => { +exports.onTicketReopen = (user,channel,guild,date,ticketdata) => { //system bot.errorLog.log("api","ticket reopened",[{key:"userid",value:user.id},{key:"channelid",value:channel.id},{key:"guildid",value:guild.id},{key:"ticketdata",value:JSON.stringify(ticketdata)}]) @@ -97,6 +101,48 @@ exports.onTicketDelete = (user,channel,guild,date,ticketdata) => { } +/** + * + * @param {discord.User} user + * @param {discord.User} editeduser + * @param {discord.TextChannel} channel + * @param {discord.Guild} guild + * @param {Date} date + * @param {{name:String,status:"open"|"closed"|"deleted"|"reopened",ticketOptions:Object|false}} ticketdata + */ +exports.onTicketAdd = (user,editeduser,channel,guild,date,ticketdata) => { + //system + bot.errorLog.log("api","user added to ticket",[{key:"userid",value:user.id},{key:"editeduser",value:editeduser.id},{key:"channelid",value:channel.id},{key:"guildid",value:guild.id},{key:"ticketdata",value:JSON.stringify(ticketdata)}]) + + ticketAddListeners.forEach((func) => { + try { + func(user,editeduser,channel,guild,date,ticketdata) + }catch{} + }) + +} + +/** + * + * @param {discord.User} user + * @param {discord.User} editeduser + * @param {discord.TextChannel} channel + * @param {discord.Guild} guild + * @param {Date} date + * @param {{name:String,status:"open"|"closed"|"deleted"|"reopened",ticketOptions:Object|false}} ticketdata + */ +exports.onTicketRemove = (user,editeduser,channel,guild,date,ticketdata) => { + //system + bot.errorLog.log("api","user removed from ticket",[{key:"userid",value:user.id},{key:"editeduser",value:editeduser.id},{key:"channelid",value:channel.id},{key:"guildid",value:guild.id},{key:"ticketdata",value:JSON.stringify(ticketdata)}]) + + ticketRemoveListeners.forEach((func) => { + try { + func(user,editeduser,channel,guild,date,ticketdata) + }catch{} + }) + +} + /** * * @param {discord.Message[]} messages @@ -104,7 +150,7 @@ exports.onTicketDelete = (user,channel,guild,date,ticketdata) => { * @param {discord.Guild} guild * @param {Date} date */ - exports.transcriptCreation = (messages,channel,guild,date) => { +exports.onTranscriptCreation = (messages,channel,guild,date) => { //system bot.errorLog.log("api","transcript created",[{key:"messages",value:JSON.stringify(messages)},{key:"channelid",value:channel.id},{key:"guildid",value:guild.id}]) @@ -116,9 +162,29 @@ exports.onTicketDelete = (user,channel,guild,date,ticketdata) => { } -//onTicketAdd -//onTicketRemove -//command +/**@typedef {"help"|"message"|"close"|"delete"|"reopen"|"rename"|"add"|"remove"} OTCommandType */ + +/** + * + * @param {OTCommandType} type + * @param {Boolean} hasPerms + * @param {discord.User} user + * @param {discord.TextChannel} channel + * @param {discord.Guild} guild + * @param {Date} date + */ + exports.onCommand = (type,hasPerms,user,channel,guild,date) => { + //system + bot.errorLog.log("api","someone used a command",[{key:"type",value:type},{key:"hasPerms",value:hasPerms},{key:"userid",value:user},{key:"channelid",value:channel.id},{key:"guildid",value:guild.id}]) + + commandListeners.forEach((func) => { + try { + func(type,hasPerms,user,channel,guild,date) + }catch{} + }) + +} + //reactionrole //error @@ -141,6 +207,26 @@ exports.onTicketDelete = (user,channel,guild,date,ticketdata) => { * @param {Date} date */ +/** + * @callback TicketUserChangeEvent + * @param {discord.User} user + * @param {discord.User} editeduser + * @param {discord.TextChannel} channel + * @param {discord.Guild} guild + * @param {Date} date + * @param {{name:String,status:"open"|"closed"|"deleted"|"reopened",ticketOptions:Object|false}} ticketdata + */ + +/** + * @callback CommandEvent + * @param {OTCommandType} type + * @param {Boolean} hasPerms + * @param {discord.User} user + * @param {discord.TextChannel} channel + * @param {discord.Guild} guild + * @param {Date} date + */ + //EVENT EXPORT: /**@param {TicketActionEvent} callback */ @@ -163,15 +249,33 @@ const onTicketReopen = (callback) => { ticketReopenListeners.push(callback) } +/**@param {TicketUserChangeEvent} callback */ +const onTicketAdd = (callback) => { + ticketAddListeners.push(callback) +} + +/**@param {TicketUserChangeEvent} callback */ +const onTicketRemove = (callback) => { + ticketRemoveListeners.push(callback) +} + /**@param {TranscriptCreationEvent} callback */ const onTranscriptCreation = (callback) => { transcriptCreationListeners.push(callback) } +/**@param {CommandEvent} callback */ +const onCommand = (callback) => { + commandListeners.push(callback) +} + exports.events = { onTicketOpen, onTicketClose, onTicketDelete, onTicketReopen, - onTranscriptCreation + onTicketAdd, + onTicketRemove, + onTranscriptCreation, + onCommand } \ No newline at end of file diff --git a/core/checker.js b/core/checker.js index 6247236..14315ca 100644 --- a/core/checker.js +++ b/core/checker.js @@ -25,7 +25,7 @@ exports.checker = async () => { if (value.length < 16 || value.length > 20 || !/^\d+$/.test(value)){ createError("'"+path+"' | this channel id is invalid") } - }else if (mode == "roleid"){ + }else if (mode == "roleid"){ if (value.length < 16 || value.length > 20 || !/^\d+$/.test(value)){ createError("'"+path+"' | this role id is invalid") } diff --git a/core/other/images/1.png b/core/other/images/1.png deleted file mode 100644 index 24e7eb7..0000000 Binary files a/core/other/images/1.png and /dev/null differ diff --git a/core/other/images/2.png b/core/other/images/2.png deleted file mode 100644 index 8dc2626..0000000 Binary files a/core/other/images/2.png and /dev/null differ diff --git a/core/other/images/3.png b/core/other/images/3.png deleted file mode 100644 index 9635d27..0000000 Binary files a/core/other/images/3.png and /dev/null differ diff --git a/core/other/images/4.png b/core/other/images/4.png deleted file mode 100644 index 6375867..0000000 Binary files a/core/other/images/4.png and /dev/null differ diff --git a/core/other/images/5.png b/core/other/images/5.png deleted file mode 100644 index 8f8f7a1..0000000 Binary files a/core/other/images/5.png and /dev/null differ diff --git a/core/ticketCloser.js b/core/ticketCloser.js index 484c381..9654066 100755 --- a/core/ticketCloser.js +++ b/core/ticketCloser.js @@ -137,6 +137,55 @@ exports.NEWcloseTicket = async (member,channel,prefix,mode) => { deny:[pfb.AddReactions,pfb.AttachFiles,pfb.EmbedLinks,pfb.SendMessages,pfb.ViewChannel] }) + //add main adminroles + config.main_adminroles.forEach((role,index) => { + try { + const adminrole = guild.roles.cache.find(r => r.id == role) + if (!adminrole) return + + permissionArray.push({ + id:adminrole, + type:"role", + allow:[pfb.AddReactions,pfb.AttachFiles,pfb.EmbedLinks,pfb.SendMessages,pfb.ViewChannel] + }) + }catch{ + log("system","invalid role! At 'config.json => main_adminroles:"+index) + } + }) + + //add ticket adminroles + await channel.messages.fetchPinned().then(msglist => { + var firstmsg = msglist.last() + + if (firstmsg == undefined || firstmsg.author.id != client.user.id) return false + const ticketId = firstmsg.embeds[0].footer.text.split("Ticket Type: ")[1] + const ticketData = require("./getoptions").getOptionsById("newT"+ticketId) + + if (!ticketData) return + + /** + * @type {String[]} + */ + const ticketadmin = ticketData.adminroles + ticketadmin.forEach((role,index) => { + if (!config.main_adminroles.includes(role)){ + try { + const adminrole = guild.roles.cache.find(r => r.id == role) + if (!adminrole) return + + permissionArray.push({ + id:adminrole, + type:"role", + allow:[pfb.AddReactions,pfb.ViewChannel], + deny:[pfb.AttachFiles,pfb.EmbedLinks,pfb.SendMessages] + }) + }catch{ + log("system","invalid role! At 'config.json => options/ticket/...:"+index) + } + } + }) + }) + channel.permissionOverwrites.set(permissionArray) //message diff --git a/core/transcript.js b/core/transcript.js index 0602079..4140271 100755 --- a/core/transcript.js +++ b/core/transcript.js @@ -45,7 +45,7 @@ const getUserInfo = (channel) => { exports.createTranscript = async (messagecollection,channel) => { const ticketuserdata = await getUserInfo(channel) - require("./api/modules/events").transcriptCreation(messagecollection,channel,channel.guild,new Date()) + require("./api/modules/events").onTranscriptCreation(messagecollection,channel,channel.guild,new Date()) try { const cd = new Date() const months = ["January","February","March","April","May","June","July","August","September","October","November","December"]