v2.3.3
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
# OT-API Documentation
|
||||
Extend open ticket with your own features!
|
||||
|
||||
The api is made for EXTENDING open ticket, not replacing! So with this api you are not able to replace existing features! You can only add your own features!
|
||||
|
||||
### DISCLAIMER:
|
||||
Only edit or extend the code when you know what you are doing!
|
||||
|
||||
If open ticket crashes while you change the code, then we can't help you!
|
||||
|
||||
**DO IT ON YOUR OWN RISK!**
|
||||
|
||||
## Events:
|
||||
Everything in the `events.js` file!
|
||||
|
||||
### onTicketOpen(...)
|
||||
This function is executed when a new ticket is created. It happens after everything else is done, so the channel is already created!
|
||||
|
||||
Parameters:
|
||||
- user: `discord.User`
|
||||
- channel: `discord.TextChannel`
|
||||
- guild: `discord.Guild`
|
||||
- date: `Date`
|
||||
- ticketdata: `OT TicketData` or `false` (more info further down this document)
|
||||
|
||||
### onTicketClose(...)
|
||||
This function is executed when a ticket gets closed, it can happen multiple times with one ticket (because of reopen).
|
||||
|
||||
Parameters:
|
||||
- user: `discord.User`
|
||||
- channel: `discord.TextChannel`
|
||||
- guild: `discord.Guild`
|
||||
- date: `Date`
|
||||
- ticketdata: `OT TicketData` or `false` (more info further down this document)
|
||||
|
||||
### onTicketDelete(...)
|
||||
This function is executed when a ticket gets deleted, it can happen only 1 time.
|
||||
|
||||
Parameters:
|
||||
- user: `discord.User`
|
||||
- channel: `discord.TextChannel`
|
||||
- guild: `discord.Guild`
|
||||
- date: `Date`
|
||||
- ticketdata: `OT TicketData` or `false` (more info further down this document)
|
||||
|
||||
### onTicketReopen(...)
|
||||
...
|
||||
|
||||
### onTranscriptCreation(...)
|
||||
...
|
||||
|
||||
### onCommand(...)
|
||||
...
|
||||
|
||||
### onReactionRole(...)
|
||||
...
|
||||
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"version":"1.0.0"
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
const discord = require('discord.js')
|
||||
const bot = require("../../../index")
|
||||
const client = bot.client
|
||||
const config = bot.config
|
||||
const log = bot.errorLog.log
|
||||
const l = bot.language
|
||||
const storage = bot.storage
|
||||
|
||||
/** FOR DEVELOPERS ONLY!!
|
||||
* Don't change anything in this file, read the api documentation first!
|
||||
* look into "api docs.md" for the docs!
|
||||
*/
|
||||
|
||||
//used when creating plugins!
|
||||
exports.enableApiLogs = false
|
||||
|
||||
//this is used when embedding open ticket into another bot
|
||||
exports.embeddedMode = false
|
||||
exports.clientLocation = require("../../../index").client
|
||||
|
||||
/** !! WARNING !!
|
||||
* Only edit or extend the code when you know what you are doing!
|
||||
* If open ticket crashes while you change the code, then we can't help you!
|
||||
*
|
||||
* DO IT ON YOUR OWN RISK!
|
||||
*/
|
||||
@@ -0,0 +1,9 @@
|
||||
const discord = require("discord.js")
|
||||
const client = require("../../../index").client
|
||||
|
||||
module.exports = () => {
|
||||
//this code will run when the bot starts!
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
const discord = require('discord.js')
|
||||
const bot = require('../../../index')
|
||||
const client = bot.client
|
||||
const config = bot.config
|
||||
const log = bot.errorLog.log
|
||||
const l = bot.language
|
||||
const storage = bot.storage
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {discord.User} user
|
||||
* @param {discord.TextChannel} channel
|
||||
* @param {discord.Guild} guild
|
||||
* @param {Date} date
|
||||
* @param {{name:String,status:"open"|"closed"|"deleted"|"reopened",ticketOptions:Object|false}} ticketdata
|
||||
*/
|
||||
exports.onTicketOpen = (user,channel,guild,date,ticketdata) => {
|
||||
//system
|
||||
bot.errorLog.log("api","new ticket created",[{key:"userid",value:user.id},{key:"channelid",value:channel.id},{key:"guildid",value:guild.id},{key:"ticketdata",value:JSON.stringify(ticketdata)}])
|
||||
|
||||
//custom code
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {discord.User} user
|
||||
* @param {discord.TextChannel} channel
|
||||
* @param {discord.Guild} guild
|
||||
* @param {Date} date
|
||||
* @param {{name:String,status:"open"|"closed"|"deleted"|"reopened",ticketOptions:Object|false}} ticketdata
|
||||
*/
|
||||
exports.onTicketClose = (user,channel,guild,date,ticketdata) => {
|
||||
//system
|
||||
bot.errorLog.log("api","ticket closed",[{key:"userid",value:user.id},{key:"channelid",value:channel.id},{key:"guildid",value:guild.id},{key:"ticketdata",value:JSON.stringify(ticketdata)}])
|
||||
|
||||
//custom code
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {discord.User} user
|
||||
* @param {discord.TextChannel} channel
|
||||
* @param {discord.Guild} guild
|
||||
* @param {Date} date
|
||||
* @param {{name:String,status:"open"|"closed"|"deleted"|"reopened",ticketOptions:Object|false}} ticketdata
|
||||
*/
|
||||
exports.onTicketDelete = (user,channel,guild,date,ticketdata) => {
|
||||
//system
|
||||
bot.errorLog.log("api","ticket deleted",[{key:"userid",value:user.id},{key:"channelid",value:channel.id},{key:"guildid",value:guild.id},{key:"ticketdata",value:JSON.stringify(ticketdata)}])
|
||||
|
||||
//custom code
|
||||
|
||||
}
|
||||
+34
-12
@@ -131,15 +131,20 @@ module.exports = () => {
|
||||
interaction.deferUpdate()
|
||||
interaction.message.edit({components:[closeRowNormal]})
|
||||
})
|
||||
client.on("interactionCreate",interaction => {
|
||||
|
||||
var closeTicketButtonChecker = false
|
||||
client.on("interactionCreate",async interaction => {
|
||||
if (!interaction.isButton()) return
|
||||
if (interaction.customId != "closeTicketTrue") return
|
||||
|
||||
interaction.deferUpdate()
|
||||
|
||||
if (closeTicketButtonChecker == true) return
|
||||
closeTicketButtonChecker = true
|
||||
|
||||
if (config.system.closeMode == "adminonly"){
|
||||
const permsmember = client.guilds.cache.find(g => g.id == interaction.guild.id).members.cache.find(m => m.id == interaction.member.id)
|
||||
if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("ADMINISTRATOR") && !permsmember.permissions.has("MANAGE_GUILD")){
|
||||
if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("Administrator") && !permsmember.permissions.has("MANAGE_GUILD")){
|
||||
try {
|
||||
return msg.member.send({embeds:[bot.errorLog.noPermsMessage]})
|
||||
}catch{
|
||||
@@ -162,18 +167,23 @@ module.exports = () => {
|
||||
}
|
||||
})
|
||||
|
||||
require("./ticketCloser").closeTicket(interaction,prefix,"close")
|
||||
await require("./ticketCloser").closeTicket(interaction,prefix,"close")
|
||||
closeTicketButtonChecker = false
|
||||
})
|
||||
|
||||
client.on("interactionCreate",interaction => {
|
||||
var closeTicket1ButtonChecker = false
|
||||
client.on("interactionCreate",async interaction => {
|
||||
if (!interaction.isButton()) return
|
||||
if (interaction.customId != "closeTicketTrue1") return
|
||||
|
||||
interaction.deferUpdate()
|
||||
|
||||
if (closeTicket1ButtonChecker == true) return
|
||||
closeTicket1ButtonChecker = true
|
||||
|
||||
if (config.system.closeMode == "adminonly"){
|
||||
const permsmember = client.guilds.cache.find(g => g.id == interaction.guild.id).members.cache.find(m => m.id == interaction.member.id)
|
||||
if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("ADMINISTRATOR") && !permsmember.permissions.has("MANAGE_GUILD")){
|
||||
if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("Administrator") && !permsmember.permissions.has("MANAGE_GUILD")){
|
||||
try {
|
||||
return interaction.member.send({embeds:[bot.errorLog.noPermsMessage]})
|
||||
}catch{
|
||||
@@ -208,7 +218,8 @@ module.exports = () => {
|
||||
}
|
||||
})
|
||||
|
||||
require("./ticketCloser").closeTicket(interaction,prefix,"close")
|
||||
await require("./ticketCloser").closeTicket(interaction,prefix,"close")
|
||||
closeTicket1ButtonChecker = false
|
||||
})
|
||||
|
||||
|
||||
@@ -228,14 +239,18 @@ module.exports = () => {
|
||||
interaction.deferUpdate()
|
||||
interaction.message.edit({components:[closeRowNormal]})
|
||||
})
|
||||
client.on("interactionCreate",interaction => {
|
||||
var deleteTicketButtonChecker = false
|
||||
client.on("interactionCreate",async interaction => {
|
||||
if (!interaction.isButton()) return
|
||||
if (interaction.customId != "deleteTicketTrue") return
|
||||
|
||||
interaction.deferUpdate()
|
||||
|
||||
if (deleteTicketButtonChecker == true) return
|
||||
deleteTicketButtonChecker = true
|
||||
|
||||
const permsmember = client.guilds.cache.find(g => g.id == interaction.guild.id).members.cache.find(m => m.id == interaction.member.id)
|
||||
if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("ADMINISTRATOR") && !permsmember.permissions.has("MANAGE_GUILD")){
|
||||
if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("Administrator") && !permsmember.permissions.has("MANAGE_GUILD")){
|
||||
try {
|
||||
return interaction.member.send({embeds:[bot.errorLog.noPermsMessage]})
|
||||
}catch{
|
||||
@@ -255,7 +270,8 @@ module.exports = () => {
|
||||
}
|
||||
})
|
||||
|
||||
require("./ticketCloser").closeTicket(interaction,prefix,"delete")
|
||||
await require("./ticketCloser").closeTicket(interaction,prefix,"delete")
|
||||
deleteTicketButtonChecker = false
|
||||
})
|
||||
|
||||
|
||||
@@ -277,14 +293,19 @@ module.exports = () => {
|
||||
interaction.deferUpdate()
|
||||
interaction.message.edit({components:[closeRowClosed]})
|
||||
})
|
||||
client.on("interactionCreate",interaction => {
|
||||
|
||||
var deleteTicket1ButtonChecker = false
|
||||
client.on("interactionCreate",async interaction => {
|
||||
if (!interaction.isButton()) return
|
||||
if (interaction.customId != "deleteTicketTrue1") return
|
||||
|
||||
interaction.deferUpdate()
|
||||
|
||||
if (deleteTicket1ButtonChecker == true) return
|
||||
deleteTicket1ButtonChecker = true
|
||||
|
||||
const permsmember = client.guilds.cache.find(g => g.id == interaction.guild.id).members.cache.find(m => m.id == interaction.member.id)
|
||||
if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("ADMINISTRATOR") && !permsmember.permissions.has("MANAGE_GUILD")){
|
||||
if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("Administrator") && !permsmember.permissions.has("MANAGE_GUILD")){
|
||||
try {
|
||||
return interaction.member.send({embeds:[bot.errorLog.noPermsMessage]})
|
||||
}catch{
|
||||
@@ -304,6 +325,7 @@ module.exports = () => {
|
||||
}
|
||||
})
|
||||
|
||||
require("./ticketCloser").closeTicket(interaction,prefix,"deletenotranscript")
|
||||
await require("./ticketCloser").closeTicket(interaction,prefix,"deletenotranscript")
|
||||
deleteTicket1ButtonChecker = false
|
||||
})
|
||||
}
|
||||
@@ -88,11 +88,12 @@ const normalLog = (debugString) => {
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {"system"|"command"|"info"} type
|
||||
* @param {"system"|"command"|"info"|"api"} type
|
||||
* @param {String} message
|
||||
* @param {[{key:String,value:String}]} params
|
||||
*/
|
||||
exports.log = async (type,message,params) => {
|
||||
exports.log = async (ptype,message,params) => {
|
||||
var type = ptype
|
||||
const chalk = await loadChalk()
|
||||
var paramstring = ""
|
||||
if (params){
|
||||
@@ -110,6 +111,11 @@ exports.log = async (type,message,params) => {
|
||||
console.log(chalk.blue("[info] ")+message+" "+chalk.yellow(parameters))
|
||||
}else if (type == "system"){
|
||||
console.log(chalk.green("[system] ")+message+" "+chalk.yellow(parameters))
|
||||
}else if (type == "api"){
|
||||
if (require("./api/base").enableApiLogs == true){
|
||||
console.log(chalk.red("[api v"+require("./api/api.json").version+"] ")+message+" "+chalk.yellow(parameters))
|
||||
}
|
||||
type = "api v"+require("./api/api.json").version
|
||||
}
|
||||
|
||||
const cd = new Date()
|
||||
|
||||
+23
-8
@@ -45,7 +45,7 @@ exports.closeTicket = async (interaction,prefix,mode) => {
|
||||
|
||||
if (mode == "delete"){
|
||||
const permsmember = client.guilds.cache.find(g => g.id == interaction.guild.id).members.cache.find(m => m.id == interaction.member.id)
|
||||
if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("ADMINISTRATOR") && !permsmember.permissions.has("MANAGE_GUILD")){
|
||||
if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("Administrator") && !permsmember.permissions.has("MANAGE_GUILD")){
|
||||
try {
|
||||
return interaction.member.send({embeds:[bot.errorLog.noPermsMessage]})
|
||||
}catch{
|
||||
@@ -53,17 +53,22 @@ exports.closeTicket = async (interaction,prefix,mode) => {
|
||||
}
|
||||
}
|
||||
deleteRequired = true
|
||||
interaction.channel.send({content:"**"+l.messages.gettingdeleted+"**"})
|
||||
await interaction.channel.send({content:"**"+l.messages.gettingdeleted+"**"})
|
||||
log("system","deleted a ticket",[{key:"user",value:interaction.user.tag},{key:"ticket",value:interaction.channel.name}])
|
||||
|
||||
if (!isDatabaseError) storage.set("ticketStorage",getuserID,Number(storage.get("ticketStorage",getuserID)) - 1)
|
||||
|
||||
//getID & send DM
|
||||
interaction.channel.messages.fetchPinned().then(msglist => {
|
||||
await interaction.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)
|
||||
|
||||
require("./api/modules/events").onTicketDelete(interaction.user,interaction.channel,interaction.guild,new Date(),{name:interaction.channel.name,status:"deleted",ticketOptions:ticketData})
|
||||
|
||||
if (!firstmsg.embeds[0].author) return false
|
||||
const id = firstmsg.embeds[0].author.name
|
||||
|
||||
@@ -81,7 +86,7 @@ exports.closeTicket = async (interaction,prefix,mode) => {
|
||||
|
||||
if (config.system.closeMode == "adminonly"){
|
||||
const permsmember = client.guilds.cache.find(g => g.id == interaction.guild.id).members.cache.find(m => m.id == interaction.member.id)
|
||||
if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("ADMINISTRATOR") && !permsmember.permissions.has("MANAGE_GUILD")){
|
||||
if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("Administrator") && !permsmember.permissions.has("MANAGE_GUILD")){
|
||||
try {
|
||||
return interaction.member.send({embeds:[bot.errorLog.noPermsMessage]})
|
||||
}catch{
|
||||
@@ -142,12 +147,17 @@ exports.closeTicket = async (interaction,prefix,mode) => {
|
||||
interaction.channel.send({embeds:[embed],components:[closeButtonRow]})
|
||||
|
||||
log("system","closed a ticket",[{key:"user",value:interaction.user.tag},{key:"ticket",value:interaction.channel.name}])
|
||||
|
||||
|
||||
//getID & send DM
|
||||
interaction.channel.messages.fetchPinned().then(msglist => {
|
||||
await interaction.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)
|
||||
|
||||
require("./api/modules/events").onTicketClose(interaction.user,interaction.channel,interaction.guild,new Date(),{name:interaction.channel.name,status:"closed",ticketOptions:ticketData})
|
||||
|
||||
const id = firstmsg.embeds[0].author.name
|
||||
|
||||
@@ -165,7 +175,7 @@ exports.closeTicket = async (interaction,prefix,mode) => {
|
||||
}else if (mode == "deletenotranscript"){
|
||||
|
||||
const permsmember = client.guilds.cache.find(g => g.id == interaction.guild.id).members.cache.find(m => m.id == interaction.member.id)
|
||||
if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("ADMINISTRATOR") && !permsmember.permissions.has("MANAGE_GUILD")){
|
||||
if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("Administrator") && !permsmember.permissions.has("MANAGE_GUILD")){
|
||||
interaction.channel.send({embeds:[bot.errorLog.noPermsMessage]})
|
||||
return
|
||||
}
|
||||
@@ -178,11 +188,16 @@ exports.closeTicket = async (interaction,prefix,mode) => {
|
||||
if (!isDatabaseError) storage.set("ticketStorage",getuserID,Number(storage.get("ticketStorage",getuserID)) - 1)
|
||||
|
||||
//getID & send DM
|
||||
interaction.channel.messages.fetchPinned().then(msglist => {
|
||||
await interaction.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)
|
||||
|
||||
require("./api/modules/events").onTicketDelete(interaction.user,interaction.channel,interaction.guild,new Date(),{name:interaction.channel.name,status:"deleted",ticketOptions:ticketData})
|
||||
|
||||
const id = firstmsg.embeds[0].author.name
|
||||
|
||||
if (!id) return false
|
||||
@@ -238,7 +253,7 @@ exports.closeTicket = async (interaction,prefix,mode) => {
|
||||
setTimeout(() => {resolve(true)},7000)
|
||||
})}
|
||||
await timer()
|
||||
interaction.channel.delete()
|
||||
await interaction.channel.delete()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -178,6 +178,7 @@ module.exports = () => {
|
||||
.setAuthor({name:interaction.user.id})
|
||||
.setColor(config.main_color)
|
||||
.setTitle(currentTicketOptions.name)
|
||||
.setFooter({text:"Ticket Type: "+currentTicketOptions.id})
|
||||
if (currentTicketOptions.ticketmessage.length > 0) ticketEmbed.setDescription(currentTicketOptions.ticketmessage)
|
||||
|
||||
ticketChannel.send({
|
||||
@@ -190,6 +191,7 @@ module.exports = () => {
|
||||
})
|
||||
|
||||
log("system","created new ticket",[{key:"ticket",value:ticketName},{key:"user",value:interaction.user.tag}])
|
||||
require("./api/modules/events").onTicketOpen(interaction.user,ticketChannel,interaction.guild,new Date(),{name:ticketName,status:"open",ticketOptions:currentTicketOptions})
|
||||
})
|
||||
}else{
|
||||
try {
|
||||
|
||||
Reference in New Issue
Block a user