BREAKING: changed openticket to opendiscord in API

This commit is contained in:
DJj123dj
2025-02-01 10:22:27 +01:00
parent ce242741cd
commit 29f8e1452c
103 changed files with 2160 additions and 2175 deletions
+7 -7
View File
@@ -1,4 +1,4 @@
import {api, openticket, utilities} from "#opendiscord" import {api, opendiscord, utilities} from "#opendiscord"
import * as discord from "discord.js" import * as discord from "discord.js"
///////////////////////////////////////////// /////////////////////////////////////////////
@@ -19,7 +19,7 @@ declare module "#opendiscord-types" {
} }
//Let's register the example config. This way it's available for all plugins & systems. //Let's register the example config. This way it's available for all plugins & systems.
openticket.events.get("onConfigLoad").listen((configManager) => { opendiscord.events.get("onConfigLoad").listen((configManager) => {
configManager.add(new api.ODJsonConfig("example-plugin:config","config.json","./plugins/example-plugin/")) configManager.add(new api.ODJsonConfig("example-plugin:config","config.json","./plugins/example-plugin/"))
/*===== What did we do? ===== /*===== What did we do? =====
- "example-plugin:config" Is the ID of this config. You can use this id troughout the bot to access this config file. Even in other plugins. - "example-plugin:config" Is the ID of this config. You can use this id troughout the bot to access this config file. Even in other plugins.
@@ -29,18 +29,18 @@ openticket.events.get("onConfigLoad").listen((configManager) => {
//Let's also log it to the console to let us know it worked! //Let's also log it to the console to let us know it worked!
const ourConfig = configManager.get("example-plugin:config") const ourConfig = configManager.get("example-plugin:config")
openticket.log("The example config loaded successfully!","plugin",[ opendiscord.log("The example config loaded successfully!","plugin",[
{key:"var-1",value:ourConfig.data.testVariable1}, {key:"var-1",value:ourConfig.data.testVariable1},
{key:"var-2",value:ourConfig.data.testVariable2.toString()}, {key:"var-2",value:ourConfig.data.testVariable2.toString()},
{key:"var-3",value:ourConfig.data.testVariable3.toString()} {key:"var-3",value:ourConfig.data.testVariable3.toString()}
]) ])
}) })
openticket.events.get("onTicketCreate").listen((creator) => { opendiscord.events.get("onTicketCreate").listen((creator) => {
//This is logged before the ticket is created (after the button is pressed) //This is logged before the ticket is created (after the button is pressed)
openticket.log("Ticket is getting created...","plugin") opendiscord.log("Ticket is getting created...","plugin")
}) })
openticket.events.get("afterTicketCreated").listen((ticket,creator,channel) => { opendiscord.events.get("afterTicketCreated").listen((ticket,creator,channel) => {
//This is logged after the ticket is created //This is logged after the ticket is created
openticket.log("Ticket ready!","plugin") opendiscord.log("Ticket ready!","plugin")
}) })
+18 -18
View File
@@ -1,19 +1,19 @@
/////////////////////////////////////// ///////////////////////////////////////
//TICKET ADD USER SYSTEM //TICKET ADD USER SYSTEM
/////////////////////////////////////// ///////////////////////////////////////
import {openticket, api, utilities} from "../index" import {opendiscord, api, utilities} from "../index"
import * as discord from "discord.js" import * as discord from "discord.js"
const generalConfig = openticket.configs.get("openticket:general") const generalConfig = opendiscord.configs.get("openticket:general")
export const registerActions = async () => { export const registerActions = async () => {
openticket.actions.add(new api.ODAction("openticket:add-ticket-user")) opendiscord.actions.add(new api.ODAction("openticket:add-ticket-user"))
openticket.actions.get("openticket:add-ticket-user").workers.add([ opendiscord.actions.get("openticket:add-ticket-user").workers.add([
new api.ODWorker("openticket:add-ticket-user",2,async (instance,params,source,cancel) => { new api.ODWorker("openticket:add-ticket-user",2,async (instance,params,source,cancel) => {
const {guild,channel,user,ticket,reason,data} = params const {guild,channel,user,ticket,reason,data} = params
if (channel.isThread()) throw new api.ODSystemError("Unable to add user to ticket! Open Ticket doesn't support threads!") if (channel.isThread()) throw new api.ODSystemError("Unable to add user to ticket! Open Ticket doesn't support threads!")
await openticket.events.get("onTicketUserAdd").emit([ticket,user,data,channel,reason]) await opendiscord.events.get("onTicketUserAdd").emit([ticket,user,data,channel,reason])
//update ticket //update ticket
ticket.get("openticket:participants").value.push({type:"user",id:data.id}) ticket.get("openticket:participants").value.push({type:"user",id:data.id})
@@ -31,47 +31,47 @@ export const registerActions = async () => {
ReadMessageHistory:true ReadMessageHistory:true
}) })
}catch{ }catch{
openticket.log("Failed to add channel permission overwrites on add-ticket-user","error") opendiscord.log("Failed to add channel permission overwrites on add-ticket-user","error")
} }
//update ticket message //update ticket message
const ticketMessage = await openticket.tickets.getTicketMessage(ticket) const ticketMessage = await opendiscord.tickets.getTicketMessage(ticket)
if (ticketMessage){ if (ticketMessage){
try{ try{
ticketMessage.edit((await openticket.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket})).message) ticketMessage.edit((await opendiscord.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket})).message)
}catch(e){ }catch(e){
openticket.log("Unable to edit ticket message on ticket user adding!","error",[ opendiscord.log("Unable to edit ticket message on ticket user adding!","error",[
{key:"channel",value:"#"+channel.name}, {key:"channel",value:"#"+channel.name},
{key:"channelid",value:channel.id,hidden:true}, {key:"channelid",value:channel.id,hidden:true},
{key:"messageid",value:ticketMessage.id}, {key:"messageid",value:ticketMessage.id},
{key:"option",value:ticket.option.id.value,hidden:true} {key:"option",value:ticket.option.id.value,hidden:true}
]) ])
openticket.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException")) opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
} }
} }
//reply with new message //reply with new message
if (params.sendMessage) await channel.send((await openticket.builders.messages.getSafe("openticket:add-message").build(source,{guild,channel,user,ticket,reason,data})).message) if (params.sendMessage) await channel.send((await opendiscord.builders.messages.getSafe("openticket:add-message").build(source,{guild,channel,user,ticket,reason,data})).message)
ticket.get("openticket:busy").value = false ticket.get("openticket:busy").value = false
await openticket.events.get("afterTicketUserAdded").emit([ticket,user,data,channel,reason]) await opendiscord.events.get("afterTicketUserAdded").emit([ticket,user,data,channel,reason])
}), }),
new api.ODWorker("openticket:discord-logs",1,async (instance,params,source,cancel) => { new api.ODWorker("openticket:discord-logs",1,async (instance,params,source,cancel) => {
const {guild,channel,user,ticket,reason,data} = params const {guild,channel,user,ticket,reason,data} = params
//to logs //to logs
if (generalConfig.data.system.logs.enabled && generalConfig.data.system.messages.adding.logs){ if (generalConfig.data.system.logs.enabled && generalConfig.data.system.messages.adding.logs){
const logChannel = openticket.posts.get("openticket:logs") const logChannel = opendiscord.posts.get("openticket:logs")
if (logChannel) logChannel.send(await openticket.builders.messages.getSafe("openticket:ticket-action-logs").build(source,{guild,channel,user,ticket,mode:"add",reason,additionalData:data})) if (logChannel) logChannel.send(await opendiscord.builders.messages.getSafe("openticket:ticket-action-logs").build(source,{guild,channel,user,ticket,mode:"add",reason,additionalData:data}))
} }
//to dm //to dm
const creator = await openticket.tickets.getTicketUser(ticket,"creator") const creator = await opendiscord.tickets.getTicketUser(ticket,"creator")
if (creator && generalConfig.data.system.messages.adding.dm) await openticket.client.sendUserDm(creator,await openticket.builders.messages.getSafe("openticket:ticket-action-dm").build(source,{guild,channel,user,ticket,mode:"add",reason,additionalData:data})) if (creator && generalConfig.data.system.messages.adding.dm) await opendiscord.client.sendUserDm(creator,await opendiscord.builders.messages.getSafe("openticket:ticket-action-dm").build(source,{guild,channel,user,ticket,mode:"add",reason,additionalData:data}))
}), }),
new api.ODWorker("openticket:logs",0,(instance,params,source,cancel) => { new api.ODWorker("openticket:logs",0,(instance,params,source,cancel) => {
const {guild,channel,user,ticket,data} = params const {guild,channel,user,ticket,data} = params
openticket.log(user.displayName+" added "+data.displayName+" to a ticket!","info",[ opendiscord.log(user.displayName+" added "+data.displayName+" to a ticket!","info",[
{key:"user",value:user.username}, {key:"user",value:user.username},
{key:"userid",value:user.id,hidden:true}, {key:"userid",value:user.id,hidden:true},
{key:"channel",value:"#"+channel.name}, {key:"channel",value:"#"+channel.name},
@@ -81,7 +81,7 @@ export const registerActions = async () => {
]) ])
}) })
]) ])
openticket.actions.get("openticket:add-ticket-user").workers.backupWorker = new api.ODWorker("openticket:cancel-busy",0,(instance,params) => { opendiscord.actions.get("openticket:add-ticket-user").workers.backupWorker = new api.ODWorker("openticket:cancel-busy",0,(instance,params) => {
//set busy to false in case of crash or cancel //set busy to false in case of crash or cancel
params.ticket.get("openticket:busy").value = false params.ticket.get("openticket:busy").value = false
}) })
+65 -65
View File
@@ -1,19 +1,19 @@
/////////////////////////////////////// ///////////////////////////////////////
//TICKET CLAIMING SYSTEM //TICKET CLAIMING SYSTEM
/////////////////////////////////////// ///////////////////////////////////////
import {openticket, api, utilities} from "../index" import {opendiscord, api, utilities} from "../index"
import * as discord from "discord.js" import * as discord from "discord.js"
const generalConfig = openticket.configs.get("openticket:general") const generalConfig = opendiscord.configs.get("openticket:general")
export const registerActions = async () => { export const registerActions = async () => {
openticket.actions.add(new api.ODAction("openticket:claim-ticket")) opendiscord.actions.add(new api.ODAction("openticket:claim-ticket"))
openticket.actions.get("openticket:claim-ticket").workers.add([ opendiscord.actions.get("openticket:claim-ticket").workers.add([
new api.ODWorker("openticket:claim-ticket",2,async (instance,params,source,cancel) => { new api.ODWorker("openticket:claim-ticket",2,async (instance,params,source,cancel) => {
const {guild,channel,user,ticket,reason} = params const {guild,channel,user,ticket,reason} = params
if (channel.isThread()) throw new api.ODSystemError("Unable to claim ticket! Open Ticket doesn't support threads!") if (channel.isThread()) throw new api.ODSystemError("Unable to claim ticket! Open Ticket doesn't support threads!")
await openticket.events.get("onTicketClaim").emit([ticket,user,channel,reason]) await opendiscord.events.get("onTicketClaim").emit([ticket,user,channel,reason])
//update ticket //update ticket
ticket.get("openticket:claimed").value = true ticket.get("openticket:claimed").value = true
@@ -22,8 +22,8 @@ export const registerActions = async () => {
ticket.get("openticket:busy").value = true ticket.get("openticket:busy").value = true
//update stats //update stats
await openticket.stats.get("openticket:global").setStat("openticket:tickets-claimed",1,"increase") await opendiscord.stats.get("openticket:global").setStat("openticket:tickets-claimed",1,"increase")
await openticket.stats.get("openticket:user").setStat("openticket:tickets-claimed",user.id,1,"increase") await opendiscord.stats.get("openticket:user").setStat("openticket:tickets-claimed",user.id,1,"increase")
//update category //update category
const rawClaimCategory = ticket.option.get("openticket:channel-categories-claimed").value.find((c) => c.user == user.id) const rawClaimCategory = ticket.option.get("openticket:channel-categories-claimed").value.find((c) => c.user == user.id)
@@ -34,53 +34,53 @@ export const registerActions = async () => {
ticket.get("openticket:category-mode").value = "claimed" ticket.get("openticket:category-mode").value = "claimed"
ticket.get("openticket:category").value = claimCategory ticket.get("openticket:category").value = claimCategory
}catch(e){ }catch(e){
openticket.log("Unable to move ticket to 'claimed category'!","error",[ opendiscord.log("Unable to move ticket to 'claimed category'!","error",[
{key:"channel",value:"#"+channel.name}, {key:"channel",value:"#"+channel.name},
{key:"channelid",value:channel.id,hidden:true}, {key:"channelid",value:channel.id,hidden:true},
{key:"categoryid",value:claimCategory} {key:"categoryid",value:claimCategory}
]) ])
openticket.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException")) opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
} }
} }
//update ticket message //update ticket message
const ticketMessage = await openticket.tickets.getTicketMessage(ticket) const ticketMessage = await opendiscord.tickets.getTicketMessage(ticket)
if (ticketMessage){ if (ticketMessage){
try{ try{
ticketMessage.edit((await openticket.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket})).message) ticketMessage.edit((await opendiscord.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket})).message)
}catch(e){ }catch(e){
openticket.log("Unable to edit ticket message on ticket claiming!","error",[ opendiscord.log("Unable to edit ticket message on ticket claiming!","error",[
{key:"channel",value:"#"+channel.name}, {key:"channel",value:"#"+channel.name},
{key:"channelid",value:channel.id,hidden:true}, {key:"channelid",value:channel.id,hidden:true},
{key:"messageid",value:ticketMessage.id}, {key:"messageid",value:ticketMessage.id},
{key:"option",value:ticket.option.id.value} {key:"option",value:ticket.option.id.value}
]) ])
openticket.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException")) opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
} }
} }
//reply with new message //reply with new message
if (params.sendMessage) await channel.send((await openticket.builders.messages.getSafe("openticket:claim-message").build(source,{guild,channel,user,ticket,reason})).message) if (params.sendMessage) await channel.send((await opendiscord.builders.messages.getSafe("openticket:claim-message").build(source,{guild,channel,user,ticket,reason})).message)
ticket.get("openticket:busy").value = false ticket.get("openticket:busy").value = false
await openticket.events.get("afterTicketClaimed").emit([ticket,user,channel,reason]) await opendiscord.events.get("afterTicketClaimed").emit([ticket,user,channel,reason])
}), }),
new api.ODWorker("openticket:discord-logs",1,async (instance,params,source,cancel) => { new api.ODWorker("openticket:discord-logs",1,async (instance,params,source,cancel) => {
const {guild,channel,user,ticket,reason} = params const {guild,channel,user,ticket,reason} = params
//to logs //to logs
if (generalConfig.data.system.logs.enabled && generalConfig.data.system.messages.claiming.logs){ if (generalConfig.data.system.logs.enabled && generalConfig.data.system.messages.claiming.logs){
const logChannel = openticket.posts.get("openticket:logs") const logChannel = opendiscord.posts.get("openticket:logs")
if (logChannel) logChannel.send(await openticket.builders.messages.getSafe("openticket:ticket-action-logs").build(source,{guild,channel,user,ticket,mode:"claim",reason,additionalData:null})) if (logChannel) logChannel.send(await opendiscord.builders.messages.getSafe("openticket:ticket-action-logs").build(source,{guild,channel,user,ticket,mode:"claim",reason,additionalData:null}))
} }
//to dm //to dm
const creator = await openticket.tickets.getTicketUser(ticket,"creator") const creator = await opendiscord.tickets.getTicketUser(ticket,"creator")
if (creator && generalConfig.data.system.messages.claiming.dm) await openticket.client.sendUserDm(creator,await openticket.builders.messages.getSafe("openticket:ticket-action-dm").build(source,{guild,channel,user,ticket,mode:"claim",reason,additionalData:null})) if (creator && generalConfig.data.system.messages.claiming.dm) await opendiscord.client.sendUserDm(creator,await opendiscord.builders.messages.getSafe("openticket:ticket-action-dm").build(source,{guild,channel,user,ticket,mode:"claim",reason,additionalData:null}))
}), }),
new api.ODWorker("openticket:logs",0,(instance,params,source,cancel) => { new api.ODWorker("openticket:logs",0,(instance,params,source,cancel) => {
const {guild,channel,user,ticket} = params const {guild,channel,user,ticket} = params
openticket.log(user.displayName+" claimed a ticket!","info",[ opendiscord.log(user.displayName+" claimed a ticket!","info",[
{key:"user",value:user.username}, {key:"user",value:user.username},
{key:"userid",value:user.id,hidden:true}, {key:"userid",value:user.id,hidden:true},
{key:"channel",value:"#"+channel.name}, {key:"channel",value:"#"+channel.name},
@@ -90,7 +90,7 @@ export const registerActions = async () => {
]) ])
}) })
]) ])
openticket.actions.get("openticket:claim-ticket").workers.backupWorker = new api.ODWorker("openticket:cancel-busy",0,(instance,params) => { opendiscord.actions.get("openticket:claim-ticket").workers.backupWorker = new api.ODWorker("openticket:cancel-busy",0,(instance,params) => {
//set busy to false in case of crash or cancel //set busy to false in case of crash or cancel
params.ticket.get("openticket:busy").value = false params.ticket.get("openticket:busy").value = false
}) })
@@ -98,37 +98,37 @@ export const registerActions = async () => {
export const registerVerifyBars = async () => { export const registerVerifyBars = async () => {
//CLAIM TICKET TICKET MESSAGE //CLAIM TICKET TICKET MESSAGE
openticket.verifybars.add(new api.ODVerifyBar("openticket:claim-ticket-ticket-message",openticket.builders.messages.getSafe("openticket:verifybar-ticket-message"),!generalConfig.data.system.disableVerifyBars)) opendiscord.verifybars.add(new api.ODVerifyBar("openticket:claim-ticket-ticket-message",opendiscord.builders.messages.getSafe("openticket:verifybar-ticket-message"),!generalConfig.data.system.disableVerifyBars))
openticket.verifybars.get("openticket:claim-ticket-ticket-message").success.add([ opendiscord.verifybars.get("openticket:claim-ticket-ticket-message").success.add([
new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => { new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => {
const permissionMode = generalConfig.data.system.permissions.claim const permissionMode = generalConfig.data.system.permissions.claim
if (permissionMode == "none"){ if (permissionMode == "none"){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel() return cancel()
}else if (permissionMode == "everyone") return }else if (permissionMode == "everyone") return
else if (permissionMode == "admin"){ else if (permissionMode == "admin"){
if (!openticket.permissions.hasPermissions("support",await openticket.permissions.getPermissions(instance.user,instance.channel,instance.guild))){ if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
return cancel() return cancel()
}else return }else return
}else{ }else{
if (!instance.guild || !instance.member){ if (!instance.guild || !instance.member){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
return cancel() return cancel()
} }
const role = await openticket.client.fetchGuildRole(instance.guild,permissionMode) const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
if (!role){ if (!role){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
return cancel() return cancel()
} }
if (!role.members.has(instance.member.id)){ if (!role.members.has(instance.member.id)){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel() return cancel()
}else return }else return
} }
@@ -136,86 +136,86 @@ export const registerVerifyBars = async () => {
new api.ODWorker("openticket:claim-ticket",0,async (instance,params,source,cancel) => { new api.ODWorker("openticket:claim-ticket",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance const {guild,channel,user} = instance
if (!guild){ if (!guild){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
return cancel() return cancel()
} }
const ticket = openticket.tickets.get(channel.id) const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){ if (!ticket || channel.isDMBased()){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
//return when already claimed //return when already claimed
if (ticket.get("openticket:claimed").value){ if (ticket.get("openticket:claimed").value){
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild,channel,user,error:openticket.languages.getTranslation("errors.actionInvalid.claim"),layout:"simple"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build("button",{guild,channel,user,error:opendiscord.languages.getTranslation("errors.actionInvalid.claim"),layout:"simple"}))
return cancel() return cancel()
} }
//return when busy //return when busy
if (ticket.get("openticket:busy").value){ if (ticket.get("openticket:busy").value){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
//start claiming ticket //start claiming ticket
if (params.data == "reason"){ if (params.data == "reason"){
//claim with reason //claim with reason
instance.modal(await openticket.builders.modals.getSafe("openticket:claim-ticket-reason").build("ticket-message",{guild,channel,user,ticket})) instance.modal(await opendiscord.builders.modals.getSafe("openticket:claim-ticket-reason").build("ticket-message",{guild,channel,user,ticket}))
}else{ }else{
//claim without reason //claim without reason
await instance.defer("update",false) await instance.defer("update",false)
await openticket.actions.get("openticket:claim-ticket").run("ticket-message",{guild,channel,user,ticket,reason:null,sendMessage:true}) await opendiscord.actions.get("openticket:claim-ticket").run("ticket-message",{guild,channel,user,ticket,reason:null,sendMessage:true})
await instance.update(await openticket.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket})) await instance.update(await opendiscord.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket}))
} }
}) })
]) ])
openticket.verifybars.get("openticket:claim-ticket-ticket-message").failure.add([ opendiscord.verifybars.get("openticket:claim-ticket-ticket-message").failure.add([
new api.ODWorker("openticket:back-to-ticket-message",0,async (instance,params,source,cancel) => { new api.ODWorker("openticket:back-to-ticket-message",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance const {guild,channel,user} = instance
if (!guild){ if (!guild){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
return cancel() return cancel()
} }
const ticket = openticket.tickets.get(channel.id) const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){ if (!ticket || channel.isDMBased()){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
await instance.update(await openticket.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket})) await instance.update(await opendiscord.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket}))
}) })
]) ])
//CLAIM TICKET UNCLAIM MESSAGE //CLAIM TICKET UNCLAIM MESSAGE
openticket.verifybars.add(new api.ODVerifyBar("openticket:claim-ticket-unclaim-message",openticket.builders.messages.getSafe("openticket:verifybar-unclaim-message"),!generalConfig.data.system.disableVerifyBars)) opendiscord.verifybars.add(new api.ODVerifyBar("openticket:claim-ticket-unclaim-message",opendiscord.builders.messages.getSafe("openticket:verifybar-unclaim-message"),!generalConfig.data.system.disableVerifyBars))
openticket.verifybars.get("openticket:claim-ticket-unclaim-message").success.add([ opendiscord.verifybars.get("openticket:claim-ticket-unclaim-message").success.add([
new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => { new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => {
const permissionMode = generalConfig.data.system.permissions.claim const permissionMode = generalConfig.data.system.permissions.claim
if (permissionMode == "none"){ if (permissionMode == "none"){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel() return cancel()
}else if (permissionMode == "everyone") return }else if (permissionMode == "everyone") return
else if (permissionMode == "admin"){ else if (permissionMode == "admin"){
if (!openticket.permissions.hasPermissions("support",await openticket.permissions.getPermissions(instance.user,instance.channel,instance.guild))){ if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
return cancel() return cancel()
}else return }else return
}else{ }else{
if (!instance.guild || !instance.member){ if (!instance.guild || !instance.member){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
return cancel() return cancel()
} }
const role = await openticket.client.fetchGuildRole(instance.guild,permissionMode) const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
if (!role){ if (!role){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
return cancel() return cancel()
} }
if (!role.members.has(instance.member.id)){ if (!role.members.has(instance.member.id)){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel() return cancel()
}else return }else return
} }
@@ -223,55 +223,55 @@ export const registerVerifyBars = async () => {
new api.ODWorker("openticket:claim-ticket",0,async (instance,params,source,cancel) => { new api.ODWorker("openticket:claim-ticket",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance const {guild,channel,user} = instance
if (!guild){ if (!guild){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
return cancel() return cancel()
} }
const ticket = openticket.tickets.get(channel.id) const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){ if (!ticket || channel.isDMBased()){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
//return when already claimed //return when already claimed
if (ticket.get("openticket:claimed").value){ if (ticket.get("openticket:claimed").value){
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild,channel,user,error:openticket.languages.getTranslation("errors.actionInvalid.claim"),layout:"simple"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build("button",{guild,channel,user,error:opendiscord.languages.getTranslation("errors.actionInvalid.claim"),layout:"simple"}))
return cancel() return cancel()
} }
//return when busy //return when busy
if (ticket.get("openticket:busy").value){ if (ticket.get("openticket:busy").value){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
//start claiming ticket //start claiming ticket
if (params.data == "reason"){ if (params.data == "reason"){
//claim with reason //claim with reason
instance.modal(await openticket.builders.modals.getSafe("openticket:claim-ticket-reason").build("unclaim-message",{guild,channel,user,ticket})) instance.modal(await opendiscord.builders.modals.getSafe("openticket:claim-ticket-reason").build("unclaim-message",{guild,channel,user,ticket}))
}else{ }else{
//claim without reason //claim without reason
await instance.defer("update",false) await instance.defer("update",false)
await openticket.actions.get("openticket:claim-ticket").run("unclaim-message",{guild,channel,user,ticket,reason:null,sendMessage:false}) await opendiscord.actions.get("openticket:claim-ticket").run("unclaim-message",{guild,channel,user,ticket,reason:null,sendMessage:false})
await instance.update(await openticket.builders.messages.getSafe("openticket:claim-message").build("unclaim-message",{guild,channel,user,ticket,reason:null})) await instance.update(await opendiscord.builders.messages.getSafe("openticket:claim-message").build("unclaim-message",{guild,channel,user,ticket,reason:null}))
} }
}) })
]) ])
openticket.verifybars.get("openticket:claim-ticket-unclaim-message").failure.add([ opendiscord.verifybars.get("openticket:claim-ticket-unclaim-message").failure.add([
new api.ODWorker("openticket:back-to-unclaim-message",0,async (instance,params,source,cancel) => { new api.ODWorker("openticket:back-to-unclaim-message",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance const {guild,channel,user} = instance
const {verifybarMessage} = params const {verifybarMessage} = params
if (!guild){ if (!guild){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
return cancel() return cancel()
} }
const ticket = openticket.tickets.get(channel.id) const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){ if (!ticket || channel.isDMBased()){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
const rawReason = (verifybarMessage && verifybarMessage.embeds[0] && verifybarMessage.embeds[0].fields[0]) ? verifybarMessage.embeds[0].fields[0].value : null const rawReason = (verifybarMessage && verifybarMessage.embeds[0] && verifybarMessage.embeds[0].fields[0]) ? verifybarMessage.embeds[0].fields[0].value : null
const reason = (rawReason == null) ? null : rawReason.substring(3,rawReason.length-3) const reason = (rawReason == null) ? null : rawReason.substring(3,rawReason.length-3)
await instance.update(await openticket.builders.messages.getSafe("openticket:unclaim-message").build("other",{guild,channel,user,ticket,reason})) await instance.update(await opendiscord.builders.messages.getSafe("openticket:unclaim-message").build("other",{guild,channel,user,ticket,reason}))
}) })
]) ])
} }
+11 -11
View File
@@ -1,40 +1,40 @@
/////////////////////////////////////// ///////////////////////////////////////
//CLEAR TICKETS SYSTEM //CLEAR TICKETS SYSTEM
/////////////////////////////////////// ///////////////////////////////////////
import {openticket, api, utilities} from "../index" import {opendiscord, api, utilities} from "../index"
import * as discord from "discord.js" import * as discord from "discord.js"
const generalConfig = openticket.configs.get("openticket:general") const generalConfig = opendiscord.configs.get("openticket:general")
export const registerActions = async () => { export const registerActions = async () => {
openticket.actions.add(new api.ODAction("openticket:clear-tickets")) opendiscord.actions.add(new api.ODAction("openticket:clear-tickets"))
openticket.actions.get("openticket:clear-tickets").workers.add([ opendiscord.actions.get("openticket:clear-tickets").workers.add([
new api.ODWorker("openticket:clear-tickets",2,async (instance,params,source,cancel) => { new api.ODWorker("openticket:clear-tickets",2,async (instance,params,source,cancel) => {
const {guild,channel,user,filter,list} = params const {guild,channel,user,filter,list} = params
await openticket.events.get("onTicketsClear").emit([list,user,channel,filter]) await opendiscord.events.get("onTicketsClear").emit([list,user,channel,filter])
const nameList: string[] = [] const nameList: string[] = []
for (const ticket of list){ for (const ticket of list){
const ticketChannel = await openticket.tickets.getTicketChannel(ticket) const ticketChannel = await opendiscord.tickets.getTicketChannel(ticket)
if (!ticketChannel) return if (!ticketChannel) return
nameList.push("#"+ticketChannel.name) nameList.push("#"+ticketChannel.name)
await openticket.actions.get("openticket:delete-ticket").run("clear",{guild,channel:ticketChannel,user,ticket,reason:"Cleared Ticket",sendMessage:true,withoutTranscript:false}) await opendiscord.actions.get("openticket:delete-ticket").run("clear",{guild,channel:ticketChannel,user,ticket,reason:"Cleared Ticket",sendMessage:true,withoutTranscript:false})
} }
instance.list = nameList instance.list = nameList
await openticket.events.get("afterTicketsCleared").emit([list,user,channel,filter]) await opendiscord.events.get("afterTicketsCleared").emit([list,user,channel,filter])
}), }),
new api.ODWorker("openticket:discord-logs",1,async (instance,params,source,cancel) => { new api.ODWorker("openticket:discord-logs",1,async (instance,params,source,cancel) => {
const {guild,channel,user,filter,list} = params const {guild,channel,user,filter,list} = params
//to logs //to logs
if (generalConfig.data.system.logs.enabled && generalConfig.data.system.messages.deleting.logs){ if (generalConfig.data.system.logs.enabled && generalConfig.data.system.messages.deleting.logs){
const logChannel = openticket.posts.get("openticket:logs") const logChannel = opendiscord.posts.get("openticket:logs")
if (logChannel) logChannel.send(await openticket.builders.messages.getSafe("openticket:clear-logs").build(source,{guild,channel,user,filter,list:instance.list ?? []})) if (logChannel) logChannel.send(await opendiscord.builders.messages.getSafe("openticket:clear-logs").build(source,{guild,channel,user,filter,list:instance.list ?? []}))
} }
}), }),
new api.ODWorker("openticket:logs",0,(instance,params,source,cancel) => { new api.ODWorker("openticket:logs",0,(instance,params,source,cancel) => {
const {guild,user,filter,list} = params const {guild,user,filter,list} = params
openticket.log(user.displayName+" cleared "+list.length+" tickets!","info",[ opendiscord.log(user.displayName+" cleared "+list.length+" tickets!","info",[
{key:"user",value:user.username}, {key:"user",value:user.username},
{key:"userid",value:user.id,hidden:true}, {key:"userid",value:user.id,hidden:true},
{key:"method",value:source}, {key:"method",value:source},
+66 -66
View File
@@ -1,19 +1,19 @@
/////////////////////////////////////// ///////////////////////////////////////
//TICKET CLOSING SYSTEM //TICKET CLOSING SYSTEM
/////////////////////////////////////// ///////////////////////////////////////
import {openticket, api, utilities} from "../index" import {opendiscord, api, utilities} from "../index"
import * as discord from "discord.js" import * as discord from "discord.js"
const generalConfig = openticket.configs.get("openticket:general") const generalConfig = opendiscord.configs.get("openticket:general")
export const registerActions = async () => { export const registerActions = async () => {
openticket.actions.add(new api.ODAction("openticket:close-ticket")) opendiscord.actions.add(new api.ODAction("openticket:close-ticket"))
openticket.actions.get("openticket:close-ticket").workers.add([ opendiscord.actions.get("openticket:close-ticket").workers.add([
new api.ODWorker("openticket:close-ticket",2,async (instance,params,source,cancel) => { new api.ODWorker("openticket:close-ticket",2,async (instance,params,source,cancel) => {
const {guild,channel,user,ticket,reason} = params const {guild,channel,user,ticket,reason} = params
if (channel.isThread()) throw new api.ODSystemError("Unable to close ticket! Open Ticket doesn't support threads!") if (channel.isThread()) throw new api.ODSystemError("Unable to close ticket! Open Ticket doesn't support threads!")
await openticket.events.get("onTicketClose").emit([ticket,user,channel,reason]) await opendiscord.events.get("onTicketClose").emit([ticket,user,channel,reason])
//update ticket //update ticket
ticket.get("openticket:closed").value = true ticket.get("openticket:closed").value = true
@@ -24,8 +24,8 @@ export const registerActions = async () => {
ticket.get("openticket:busy").value = true ticket.get("openticket:busy").value = true
//update stats //update stats
await openticket.stats.get("openticket:global").setStat("openticket:tickets-closed",1,"increase") await opendiscord.stats.get("openticket:global").setStat("openticket:tickets-closed",1,"increase")
await openticket.stats.get("openticket:user").setStat("openticket:tickets-closed",user.id,1,"increase") await opendiscord.stats.get("openticket:user").setStat("openticket:tickets-closed",user.id,1,"increase")
//update category //update category
const closeCategory = ticket.option.get("openticket:channel-category-closed").value const closeCategory = ticket.option.get("openticket:channel-category-closed").value
@@ -35,12 +35,12 @@ export const registerActions = async () => {
ticket.get("openticket:category-mode").value = "closed" ticket.get("openticket:category-mode").value = "closed"
ticket.get("openticket:category").value = closeCategory ticket.get("openticket:category").value = closeCategory
}catch(e){ }catch(e){
openticket.log("Unable to move ticket to 'closed category'!","error",[ opendiscord.log("Unable to move ticket to 'closed category'!","error",[
{key:"channel",value:"#"+channel.name}, {key:"channel",value:"#"+channel.name},
{key:"channelid",value:channel.id,hidden:true}, {key:"channelid",value:channel.id,hidden:true},
{key:"categoryid",value:closeCategory} {key:"categoryid",value:closeCategory}
]) ])
openticket.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException")) opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
} }
} }
@@ -51,7 +51,7 @@ export const registerActions = async () => {
allow:[], allow:[],
deny:["ViewChannel","SendMessages","ReadMessageHistory"] deny:["ViewChannel","SendMessages","ReadMessageHistory"]
}] }]
const globalAdmins = openticket.configs.get("openticket:general").data.globalAdmins const globalAdmins = opendiscord.configs.get("openticket:general").data.globalAdmins
const optionAdmins = ticket.option.get("openticket:admins").value const optionAdmins = ticket.option.get("openticket:admins").value
const readonlyAdmins = ticket.option.get("openticket:admins-readonly").value const readonlyAdmins = ticket.option.get("openticket:admins-readonly").value
@@ -102,43 +102,43 @@ export const registerActions = async () => {
channel.permissionOverwrites.set(permissions) channel.permissionOverwrites.set(permissions)
//update ticket message //update ticket message
const ticketMessage = await openticket.tickets.getTicketMessage(ticket) const ticketMessage = await opendiscord.tickets.getTicketMessage(ticket)
if (ticketMessage){ if (ticketMessage){
try{ try{
ticketMessage.edit((await openticket.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket})).message) ticketMessage.edit((await opendiscord.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket})).message)
}catch(e){ }catch(e){
openticket.log("Unable to edit ticket message on ticket closing!","error",[ opendiscord.log("Unable to edit ticket message on ticket closing!","error",[
{key:"channel",value:"#"+channel.name}, {key:"channel",value:"#"+channel.name},
{key:"channelid",value:channel.id,hidden:true}, {key:"channelid",value:channel.id,hidden:true},
{key:"messageid",value:ticketMessage.id}, {key:"messageid",value:ticketMessage.id},
{key:"option",value:ticket.option.id.value} {key:"option",value:ticket.option.id.value}
]) ])
openticket.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException")) opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
} }
} }
//reply with new message //reply with new message
if (params.sendMessage) await channel.send((await openticket.builders.messages.getSafe("openticket:close-message").build(source,{guild,channel,user,ticket,reason})).message) if (params.sendMessage) await channel.send((await opendiscord.builders.messages.getSafe("openticket:close-message").build(source,{guild,channel,user,ticket,reason})).message)
ticket.get("openticket:busy").value = false ticket.get("openticket:busy").value = false
await openticket.events.get("afterTicketClosed").emit([ticket,user,channel,reason]) await opendiscord.events.get("afterTicketClosed").emit([ticket,user,channel,reason])
}), }),
new api.ODWorker("openticket:discord-logs",1,async (instance,params,source,cancel) => { new api.ODWorker("openticket:discord-logs",1,async (instance,params,source,cancel) => {
const {guild,channel,user,ticket,reason} = params const {guild,channel,user,ticket,reason} = params
//to logs //to logs
if (generalConfig.data.system.logs.enabled && generalConfig.data.system.messages.closing.logs){ if (generalConfig.data.system.logs.enabled && generalConfig.data.system.messages.closing.logs){
const logChannel = openticket.posts.get("openticket:logs") const logChannel = opendiscord.posts.get("openticket:logs")
if (logChannel) logChannel.send(await openticket.builders.messages.getSafe("openticket:ticket-action-logs").build(source,{guild,channel,user,ticket,mode:"close",reason,additionalData:null})) if (logChannel) logChannel.send(await opendiscord.builders.messages.getSafe("openticket:ticket-action-logs").build(source,{guild,channel,user,ticket,mode:"close",reason,additionalData:null}))
} }
//to dm //to dm
const creator = await openticket.tickets.getTicketUser(ticket,"creator") const creator = await opendiscord.tickets.getTicketUser(ticket,"creator")
if (creator && generalConfig.data.system.messages.closing.dm) await openticket.client.sendUserDm(creator,await openticket.builders.messages.getSafe("openticket:ticket-action-dm").build(source,{guild,channel,user,ticket,mode:"close",reason,additionalData:null})) if (creator && generalConfig.data.system.messages.closing.dm) await opendiscord.client.sendUserDm(creator,await opendiscord.builders.messages.getSafe("openticket:ticket-action-dm").build(source,{guild,channel,user,ticket,mode:"close",reason,additionalData:null}))
}), }),
new api.ODWorker("openticket:logs",0,(instance,params,source,cancel) => { new api.ODWorker("openticket:logs",0,(instance,params,source,cancel) => {
const {guild,channel,user,ticket} = params const {guild,channel,user,ticket} = params
openticket.log(user.displayName+" closed a ticket!","info",[ opendiscord.log(user.displayName+" closed a ticket!","info",[
{key:"user",value:user.username}, {key:"user",value:user.username},
{key:"userid",value:user.id,hidden:true}, {key:"userid",value:user.id,hidden:true},
{key:"channel",value:"#"+channel.name}, {key:"channel",value:"#"+channel.name},
@@ -148,7 +148,7 @@ export const registerActions = async () => {
]) ])
}) })
]) ])
openticket.actions.get("openticket:close-ticket").workers.backupWorker = new api.ODWorker("openticket:cancel-busy",0,(instance,params) => { opendiscord.actions.get("openticket:close-ticket").workers.backupWorker = new api.ODWorker("openticket:cancel-busy",0,(instance,params) => {
//set busy to false in case of crash or cancel //set busy to false in case of crash or cancel
params.ticket.get("openticket:busy").value = false params.ticket.get("openticket:busy").value = false
}) })
@@ -156,37 +156,37 @@ export const registerActions = async () => {
export const registerVerifyBars = async () => { export const registerVerifyBars = async () => {
//CLOSE TICKET TICKET MESSAGE //CLOSE TICKET TICKET MESSAGE
openticket.verifybars.add(new api.ODVerifyBar("openticket:close-ticket-ticket-message",openticket.builders.messages.getSafe("openticket:verifybar-ticket-message"),!generalConfig.data.system.disableVerifyBars)) opendiscord.verifybars.add(new api.ODVerifyBar("openticket:close-ticket-ticket-message",opendiscord.builders.messages.getSafe("openticket:verifybar-ticket-message"),!generalConfig.data.system.disableVerifyBars))
openticket.verifybars.get("openticket:close-ticket-ticket-message").success.add([ opendiscord.verifybars.get("openticket:close-ticket-ticket-message").success.add([
new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => { new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => {
const permissionMode = generalConfig.data.system.permissions.close const permissionMode = generalConfig.data.system.permissions.close
if (permissionMode == "none"){ if (permissionMode == "none"){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel() return cancel()
}else if (permissionMode == "everyone") return }else if (permissionMode == "everyone") return
else if (permissionMode == "admin"){ else if (permissionMode == "admin"){
if (!openticket.permissions.hasPermissions("support",await openticket.permissions.getPermissions(instance.user,instance.channel,instance.guild))){ if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
return cancel() return cancel()
}else return }else return
}else{ }else{
if (!instance.guild || !instance.member){ if (!instance.guild || !instance.member){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
return cancel() return cancel()
} }
const role = await openticket.client.fetchGuildRole(instance.guild,permissionMode) const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
if (!role){ if (!role){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
return cancel() return cancel()
} }
if (!role.members.has(instance.member.id)){ if (!role.members.has(instance.member.id)){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel() return cancel()
}else return }else return
} }
@@ -194,86 +194,86 @@ export const registerVerifyBars = async () => {
new api.ODWorker("openticket:close-ticket",0,async (instance,params,source,cancel) => { new api.ODWorker("openticket:close-ticket",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance const {guild,channel,user} = instance
if (!guild){ if (!guild){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
return cancel() return cancel()
} }
const ticket = openticket.tickets.get(channel.id) const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){ if (!ticket || channel.isDMBased()){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
//return when already closed //return when already closed
if (ticket.get("openticket:closed").value){ if (ticket.get("openticket:closed").value){
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild,channel,user,error:openticket.languages.getTranslation("errors.actionInvalid.close"),layout:"simple"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build("button",{guild,channel,user,error:opendiscord.languages.getTranslation("errors.actionInvalid.close"),layout:"simple"}))
return cancel() return cancel()
} }
//return when busy //return when busy
if (ticket.get("openticket:busy").value){ if (ticket.get("openticket:busy").value){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
//start closing ticket //start closing ticket
if (params.data == "reason"){ if (params.data == "reason"){
//close with reason //close with reason
instance.modal(await openticket.builders.modals.getSafe("openticket:close-ticket-reason").build("ticket-message",{guild,channel,user,ticket})) instance.modal(await opendiscord.builders.modals.getSafe("openticket:close-ticket-reason").build("ticket-message",{guild,channel,user,ticket}))
}else{ }else{
//close without reason //close without reason
await instance.defer("update",false) await instance.defer("update",false)
await openticket.actions.get("openticket:close-ticket").run("ticket-message",{guild,channel,user,ticket,reason:null,sendMessage:true}) await opendiscord.actions.get("openticket:close-ticket").run("ticket-message",{guild,channel,user,ticket,reason:null,sendMessage:true})
await instance.update(await openticket.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket})) await instance.update(await opendiscord.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket}))
} }
}) })
]) ])
openticket.verifybars.get("openticket:close-ticket-ticket-message").failure.add([ opendiscord.verifybars.get("openticket:close-ticket-ticket-message").failure.add([
new api.ODWorker("openticket:back-to-ticket-message",0,async (instance,params,source,cancel) => { new api.ODWorker("openticket:back-to-ticket-message",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance const {guild,channel,user} = instance
if (!guild){ if (!guild){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
return cancel() return cancel()
} }
const ticket = openticket.tickets.get(channel.id) const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){ if (!ticket || channel.isDMBased()){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
await instance.update(await openticket.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket})) await instance.update(await opendiscord.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket}))
}) })
]) ])
//CLOSE TICKET REOPEN MESSAGE //CLOSE TICKET REOPEN MESSAGE
openticket.verifybars.add(new api.ODVerifyBar("openticket:close-ticket-reopen-message",openticket.builders.messages.getSafe("openticket:verifybar-reopen-message"),!generalConfig.data.system.disableVerifyBars)) opendiscord.verifybars.add(new api.ODVerifyBar("openticket:close-ticket-reopen-message",opendiscord.builders.messages.getSafe("openticket:verifybar-reopen-message"),!generalConfig.data.system.disableVerifyBars))
openticket.verifybars.get("openticket:close-ticket-reopen-message").success.add([ opendiscord.verifybars.get("openticket:close-ticket-reopen-message").success.add([
new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => { new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => {
const permissionMode = generalConfig.data.system.permissions.close const permissionMode = generalConfig.data.system.permissions.close
if (permissionMode == "none"){ if (permissionMode == "none"){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel() return cancel()
}else if (permissionMode == "everyone") return }else if (permissionMode == "everyone") return
else if (permissionMode == "admin"){ else if (permissionMode == "admin"){
if (!openticket.permissions.hasPermissions("support",await openticket.permissions.getPermissions(instance.user,instance.channel,instance.guild))){ if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
return cancel() return cancel()
}else return }else return
}else{ }else{
if (!instance.guild || !instance.member){ if (!instance.guild || !instance.member){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
return cancel() return cancel()
} }
const role = await openticket.client.fetchGuildRole(instance.guild,permissionMode) const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
if (!role){ if (!role){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
return cancel() return cancel()
} }
if (!role.members.has(instance.member.id)){ if (!role.members.has(instance.member.id)){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel() return cancel()
}else return }else return
} }
@@ -281,55 +281,55 @@ export const registerVerifyBars = async () => {
new api.ODWorker("openticket:close-ticket",0,async (instance,params,source,cancel) => { new api.ODWorker("openticket:close-ticket",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance const {guild,channel,user} = instance
if (!guild){ if (!guild){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
return cancel() return cancel()
} }
const ticket = openticket.tickets.get(channel.id) const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){ if (!ticket || channel.isDMBased()){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
//return when already closed //return when already closed
if (ticket.get("openticket:closed").value){ if (ticket.get("openticket:closed").value){
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild,channel,user,error:openticket.languages.getTranslation("errors.actionInvalid.close"),layout:"simple"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build("button",{guild,channel,user,error:opendiscord.languages.getTranslation("errors.actionInvalid.close"),layout:"simple"}))
return cancel() return cancel()
} }
//return when busy //return when busy
if (ticket.get("openticket:busy").value){ if (ticket.get("openticket:busy").value){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
//start closing ticket //start closing ticket
if (params.data == "reason"){ if (params.data == "reason"){
//close with reason //close with reason
instance.modal(await openticket.builders.modals.getSafe("openticket:close-ticket-reason").build("reopen-message",{guild,channel,user,ticket})) instance.modal(await opendiscord.builders.modals.getSafe("openticket:close-ticket-reason").build("reopen-message",{guild,channel,user,ticket}))
}else{ }else{
//close without reason //close without reason
await instance.defer("update",false) await instance.defer("update",false)
await openticket.actions.get("openticket:close-ticket").run("reopen-message",{guild,channel,user,ticket,reason:null,sendMessage:false}) await opendiscord.actions.get("openticket:close-ticket").run("reopen-message",{guild,channel,user,ticket,reason:null,sendMessage:false})
await instance.update(await openticket.builders.messages.getSafe("openticket:close-message").build("reopen-message",{guild,channel,user,ticket,reason:null})) await instance.update(await opendiscord.builders.messages.getSafe("openticket:close-message").build("reopen-message",{guild,channel,user,ticket,reason:null}))
} }
}) })
]) ])
openticket.verifybars.get("openticket:close-ticket-reopen-message").failure.add([ opendiscord.verifybars.get("openticket:close-ticket-reopen-message").failure.add([
new api.ODWorker("openticket:back-to-reopen-message",0,async (instance,params,source,cancel) => { new api.ODWorker("openticket:back-to-reopen-message",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance const {guild,channel,user} = instance
const {verifybarMessage} = params const {verifybarMessage} = params
if (!guild){ if (!guild){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
return cancel() return cancel()
} }
const ticket = openticket.tickets.get(channel.id) const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){ if (!ticket || channel.isDMBased()){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
const rawReason = (verifybarMessage && verifybarMessage.embeds[0] && verifybarMessage.embeds[0].fields[0]) ? verifybarMessage.embeds[0].fields[0].value : null const rawReason = (verifybarMessage && verifybarMessage.embeds[0] && verifybarMessage.embeds[0].fields[0]) ? verifybarMessage.embeds[0].fields[0].value : null
const reason = (rawReason == null) ? null : rawReason.substring(3,rawReason.length-3) const reason = (rawReason == null) ? null : rawReason.substring(3,rawReason.length-3)
await instance.update(await openticket.builders.messages.getSafe("openticket:reopen-message").build("other",{guild,channel,user,ticket,reason})) await instance.update(await opendiscord.builders.messages.getSafe("openticket:reopen-message").build("other",{guild,channel,user,ticket,reason}))
}) })
]) ])
} }
+30 -30
View File
@@ -1,26 +1,26 @@
/////////////////////////////////////// ///////////////////////////////////////
//TICKET CREATION SYSTEM //TICKET CREATION SYSTEM
/////////////////////////////////////// ///////////////////////////////////////
import {openticket, api, utilities} from "../index" import {opendiscord, api, utilities} from "../index"
import * as discord from "discord.js" import * as discord from "discord.js"
const generalConfig = openticket.configs.get("openticket:general") const generalConfig = opendiscord.configs.get("openticket:general")
export const registerActions = async () => { export const registerActions = async () => {
openticket.actions.add(new api.ODAction("openticket:create-ticket")) opendiscord.actions.add(new api.ODAction("openticket:create-ticket"))
openticket.actions.get("openticket:create-ticket").workers.add([ opendiscord.actions.get("openticket:create-ticket").workers.add([
new api.ODWorker("openticket:create-ticket",3,async (instance,params,source,cancel) => { new api.ODWorker("openticket:create-ticket",3,async (instance,params,source,cancel) => {
const {guild,user,answers,option} = params const {guild,user,answers,option} = params
await openticket.events.get("onTicketCreate").emit([user]) await opendiscord.events.get("onTicketCreate").emit([user])
await openticket.events.get("onTicketChannelCreation").emit([option,user]) await opendiscord.events.get("onTicketChannelCreation").emit([option,user])
//get channel properties //get channel properties
const channelPrefix = option.get("openticket:channel-prefix").value const channelPrefix = option.get("openticket:channel-prefix").value
const channelCategory = option.get("openticket:channel-category").value const channelCategory = option.get("openticket:channel-category").value
const channelBackupCategory = option.get("openticket:channel-category-backup").value const channelBackupCategory = option.get("openticket:channel-category-backup").value
const channelDescription = option.get("openticket:channel-description").value const channelDescription = option.get("openticket:channel-description").value
const channelSuffix = openticket.options.suffix.getSuffixFromOption(option,user) const channelSuffix = opendiscord.options.suffix.getSuffixFromOption(option,user)
const channelName = channelPrefix+channelSuffix const channelName = channelPrefix+channelSuffix
//handle category //handle category
@@ -28,10 +28,10 @@ export const registerActions = async () => {
let categoryMode: "backup"|"normal"|null = null let categoryMode: "backup"|"normal"|null = null
if (channelCategory != ""){ if (channelCategory != ""){
//category enabled //category enabled
const normalCategory = await openticket.client.fetchGuildCategoryChannel(guild,channelCategory) const normalCategory = await opendiscord.client.fetchGuildCategoryChannel(guild,channelCategory)
if (!normalCategory){ if (!normalCategory){
//default category was not found //default category was not found
openticket.log("Ticket Creation Error: Unable to find category! #1","error",[ opendiscord.log("Ticket Creation Error: Unable to find category! #1","error",[
{key:"categoryid",value:channelCategory}, {key:"categoryid",value:channelCategory},
{key:"backup",value:"false"} {key:"backup",value:"false"}
]) ])
@@ -39,10 +39,10 @@ export const registerActions = async () => {
//default category was found //default category was found
if (normalCategory.children.cache.size >= 50 && channelBackupCategory != ""){ if (normalCategory.children.cache.size >= 50 && channelBackupCategory != ""){
//use backup category //use backup category
const backupCategory = await openticket.client.fetchGuildCategoryChannel(guild,channelBackupCategory) const backupCategory = await opendiscord.client.fetchGuildCategoryChannel(guild,channelBackupCategory)
if (!backupCategory){ if (!backupCategory){
//default category was not found //default category was not found
openticket.log("Ticket Creation Error: Unable to find category! #2","error",[ opendiscord.log("Ticket Creation Error: Unable to find category! #2","error",[
{key:"categoryid",value:channelBackupCategory}, {key:"categoryid",value:channelBackupCategory},
{key:"backup",value:"true"} {key:"backup",value:"true"}
]) ])
@@ -65,7 +65,7 @@ export const registerActions = async () => {
allow:[], allow:[],
deny:["ViewChannel","SendMessages","ReadMessageHistory"] deny:["ViewChannel","SendMessages","ReadMessageHistory"]
}] }]
const globalAdmins = openticket.configs.get("openticket:general").data.globalAdmins const globalAdmins = opendiscord.configs.get("openticket:general").data.globalAdmins
const optionAdmins = option.get("openticket:admins").value const optionAdmins = option.get("openticket:admins").value
const readonlyAdmins = option.get("openticket:admins-readonly").value const readonlyAdmins = option.get("openticket:admins-readonly").value
@@ -114,7 +114,7 @@ export const registerActions = async () => {
permissionOverwrites:permissions permissionOverwrites:permissions
}) })
await openticket.events.get("afterTicketChannelCreated").emit([option,channel,user]) await opendiscord.events.get("afterTicketChannelCreated").emit([option,channel,user])
//create participants //create participants
const participants: {type:"role"|"user",id:string}[] = [] const participants: {type:"role"|"user",id:string}[] = []
@@ -159,43 +159,43 @@ export const registerActions = async () => {
]) ])
//manage stats //manage stats
await openticket.stats.get("openticket:global").setStat("openticket:tickets-created",1,"increase") await opendiscord.stats.get("openticket:global").setStat("openticket:tickets-created",1,"increase")
await openticket.stats.get("openticket:user").setStat("openticket:tickets-created",user.id,1,"increase") await opendiscord.stats.get("openticket:user").setStat("openticket:tickets-created",user.id,1,"increase")
//manage bot permissions //manage bot permissions
await openticket.events.get("onTicketPermissionsCreated").emit([option,openticket.permissions,channel,user]) await opendiscord.events.get("onTicketPermissionsCreated").emit([option,opendiscord.permissions,channel,user])
await (await import("../data/framework/permissionLoader.js")).addTicketPermissions(ticket) await (await import("../data/framework/permissionLoader.js")).addTicketPermissions(ticket)
await openticket.events.get("afterTicketPermissionsCreated").emit([option,openticket.permissions,channel,user]) await opendiscord.events.get("afterTicketPermissionsCreated").emit([option,opendiscord.permissions,channel,user])
//export channel & ticket //export channel & ticket
instance.channel = channel instance.channel = channel
instance.ticket = ticket instance.ticket = ticket
openticket.tickets.add(ticket) opendiscord.tickets.add(ticket)
}), }),
new api.ODWorker("openticket:send-ticket-message",2,async (instance,params,source,cancel) => { new api.ODWorker("openticket:send-ticket-message",2,async (instance,params,source,cancel) => {
const {guild,user,answers,option} = params const {guild,user,answers,option} = params
const {ticket,channel} = instance const {ticket,channel} = instance
if (!ticket || !channel) return openticket.log("Ticket Creation Error: Unable to send ticket message. Previous worker failed!","error") if (!ticket || !channel) return opendiscord.log("Ticket Creation Error: Unable to send ticket message. Previous worker failed!","error")
await openticket.events.get("onTicketMainMessageCreated").emit([ticket,channel,user]) await opendiscord.events.get("onTicketMainMessageCreated").emit([ticket,channel,user])
//check if ticket message is enabled //check if ticket message is enabled
if (!option.get("openticket:ticket-message-enabled").value) return if (!option.get("openticket:ticket-message-enabled").value) return
try { try {
const msg = await channel.send((await openticket.builders.messages.getSafe("openticket:ticket-message").build(source,{guild,channel,user,ticket})).message) const msg = await channel.send((await opendiscord.builders.messages.getSafe("openticket:ticket-message").build(source,{guild,channel,user,ticket})).message)
ticket.get("openticket:ticket-message").value = msg.id ticket.get("openticket:ticket-message").value = msg.id
//manage stats //manage stats
await openticket.stats.get("openticket:ticket").setStat("openticket:messages-sent",ticket.id.value,1,"increase") await opendiscord.stats.get("openticket:ticket").setStat("openticket:messages-sent",ticket.id.value,1,"increase")
await openticket.events.get("afterTicketMainMessageCreated").emit([ticket,msg,channel,user]) await opendiscord.events.get("afterTicketMainMessageCreated").emit([ticket,msg,channel,user])
}catch(err){ }catch(err){
process.emit("uncaughtException",err) process.emit("uncaughtException",err)
//something went wrong while sending the ticket message //something went wrong while sending the ticket message
channel.send((await openticket.builders.messages.getSafe("openticket:error").build("other",{guild,channel,user,error:"Ticket Message: Creation Error!\n=> Ticket Is Still Created Succesfully",layout:"advanced"})).message) channel.send((await opendiscord.builders.messages.getSafe("openticket:error").build("other",{guild,channel,user,error:"Ticket Message: Creation Error!\n=> Ticket Is Still Created Succesfully",layout:"advanced"})).message)
} }
await openticket.events.get("afterTicketCreated").emit([ticket,user,channel]) await opendiscord.events.get("afterTicketCreated").emit([ticket,user,channel])
}), }),
new api.ODWorker("openticket:discord-logs",1,async (instance,params,source,cancel) => { new api.ODWorker("openticket:discord-logs",1,async (instance,params,source,cancel) => {
const {guild,user,answers,option} = params const {guild,user,answers,option} = params
@@ -203,20 +203,20 @@ export const registerActions = async () => {
//to logs //to logs
if (generalConfig.data.system.logs.enabled && generalConfig.data.system.messages.creation.logs){ if (generalConfig.data.system.logs.enabled && generalConfig.data.system.messages.creation.logs){
const logChannel = openticket.posts.get("openticket:logs") const logChannel = opendiscord.posts.get("openticket:logs")
if (logChannel) logChannel.send(await openticket.builders.messages.getSafe("openticket:ticket-created-logs").build(source,{guild,channel,user,ticket})) if (logChannel) logChannel.send(await opendiscord.builders.messages.getSafe("openticket:ticket-created-logs").build(source,{guild,channel,user,ticket}))
} }
//to dm //to dm
if (generalConfig.data.system.messages.creation.dm) await openticket.client.sendUserDm(user,await openticket.builders.messages.getSafe("openticket:ticket-created-dm").build(source,{guild,channel,user,ticket})) if (generalConfig.data.system.messages.creation.dm) await opendiscord.client.sendUserDm(user,await opendiscord.builders.messages.getSafe("openticket:ticket-created-dm").build(source,{guild,channel,user,ticket}))
}), }),
new api.ODWorker("openticket:logs",0,(instance,params,source,cancel) => { new api.ODWorker("openticket:logs",0,(instance,params,source,cancel) => {
const {guild,user,answers,option} = params const {guild,user,answers,option} = params
const {ticket,channel} = instance const {ticket,channel} = instance
if (!ticket || !channel) return openticket.log("Ticket Creation Error: Unable to create logs. Previous worker failed!","error") if (!ticket || !channel) return opendiscord.log("Ticket Creation Error: Unable to create logs. Previous worker failed!","error")
openticket.log(user.displayName+" created a ticket!","info",[ opendiscord.log(user.displayName+" created a ticket!","info",[
{key:"user",value:user.username}, {key:"user",value:user.username},
{key:"userid",value:user.id,hidden:true}, {key:"userid",value:user.id,hidden:true},
{key:"channel",value:"#"+channel.name}, {key:"channel",value:"#"+channel.name},
+16 -16
View File
@@ -1,17 +1,17 @@
/////////////////////////////////////// ///////////////////////////////////////
//TICKET CREATION SYSTEM //TICKET CREATION SYSTEM
/////////////////////////////////////// ///////////////////////////////////////
import {openticket, api, utilities} from "../index" import {opendiscord, api, utilities} from "../index"
import * as discord from "discord.js" import * as discord from "discord.js"
export const registerActions = async () => { export const registerActions = async () => {
openticket.actions.add(new api.ODAction("openticket:create-ticket-permissions")) opendiscord.actions.add(new api.ODAction("openticket:create-ticket-permissions"))
openticket.actions.get("openticket:create-ticket-permissions").workers.add([ opendiscord.actions.get("openticket:create-ticket-permissions").workers.add([
new api.ODWorker("openticket:check-blacklist",4,(instance,params,source,cancel) => { new api.ODWorker("openticket:check-blacklist",4,(instance,params,source,cancel) => {
if (!params.option.get("openticket:allow-blacklisted-users").value && openticket.blacklist.exists(params.user.id)){ if (!params.option.get("openticket:allow-blacklisted-users").value && opendiscord.blacklist.exists(params.user.id)){
instance.valid = false instance.valid = false
instance.reason = "blacklist" instance.reason = "blacklist"
openticket.log(params.user.displayName+" tried to create a ticket but is blacklisted!","info",[ opendiscord.log(params.user.displayName+" tried to create a ticket but is blacklisted!","info",[
{key:"user",value:params.user.username}, {key:"user",value:params.user.username},
{key:"userid",value:params.user.id,hidden:true}, {key:"userid",value:params.user.id,hidden:true},
{key:"option",value:params.option.id.value} {key:"option",value:params.option.id.value}
@@ -20,14 +20,14 @@ export const registerActions = async () => {
} }
}), }),
new api.ODWorker("openticket:check-cooldown",3,(instance,params,source,cancel) => { new api.ODWorker("openticket:check-cooldown",3,(instance,params,source,cancel) => {
const cooldown = openticket.cooldowns.get("openticket:option-cooldown_"+params.option.id.value) const cooldown = opendiscord.cooldowns.get("openticket:option-cooldown_"+params.option.id.value)
if (cooldown && cooldown instanceof api.ODTimeoutCooldown && cooldown.use(params.user.id)){ if (cooldown && cooldown instanceof api.ODTimeoutCooldown && cooldown.use(params.user.id)){
instance.valid = false instance.valid = false
instance.reason = "cooldown" instance.reason = "cooldown"
const remaining = cooldown.remaining(params.user.id) ?? 0 const remaining = cooldown.remaining(params.user.id) ?? 0
instance.cooldownUntil = new Date(new Date().getTime() + remaining) instance.cooldownUntil = new Date(new Date().getTime() + remaining)
openticket.log(params.user.displayName+" tried to create a ticket but is on cooldown!","info",[ opendiscord.log(params.user.displayName+" tried to create a ticket but is on cooldown!","info",[
{key:"user",value:params.user.username}, {key:"user",value:params.user.username},
{key:"userid",value:params.user.id,hidden:true}, {key:"userid",value:params.user.id,hidden:true},
{key:"option",value:params.option.id.value}, {key:"option",value:params.option.id.value},
@@ -37,18 +37,18 @@ export const registerActions = async () => {
} }
}), }),
new api.ODWorker("openticket:check-global-limits",2,(instance,params,source,cancel) => { new api.ODWorker("openticket:check-global-limits",2,(instance,params,source,cancel) => {
const generalConfig = openticket.configs.get("openticket:general") const generalConfig = opendiscord.configs.get("openticket:general")
if (!generalConfig.data.system.limits.enabled) return if (!generalConfig.data.system.limits.enabled) return
const allTickets = openticket.tickets.getAll() const allTickets = opendiscord.tickets.getAll()
const globalTicketCount = allTickets.length const globalTicketCount = allTickets.length
const userTickets = openticket.tickets.getFiltered((ticket) => ticket.exists("openticket:opened-by") && (ticket.get("openticket:opened-by").value == params.user.id)) const userTickets = opendiscord.tickets.getFiltered((ticket) => ticket.exists("openticket:opened-by") && (ticket.get("openticket:opened-by").value == params.user.id))
const userTicketCount = userTickets.length const userTicketCount = userTickets.length
if (globalTicketCount >= generalConfig.data.system.limits.globalMaximum){ if (globalTicketCount >= generalConfig.data.system.limits.globalMaximum){
instance.valid = false instance.valid = false
instance.reason = "global-limit" instance.reason = "global-limit"
openticket.log(params.user.displayName+" tried to create a ticket but reached the limit!","info",[ opendiscord.log(params.user.displayName+" tried to create a ticket but reached the limit!","info",[
{key:"user",value:params.user.username}, {key:"user",value:params.user.username},
{key:"userid",value:params.user.id,hidden:true}, {key:"userid",value:params.user.id,hidden:true},
{key:"option",value:params.option.id.value}, {key:"option",value:params.option.id.value},
@@ -58,7 +58,7 @@ export const registerActions = async () => {
}else if (userTicketCount >= generalConfig.data.system.limits.userMaximum){ }else if (userTicketCount >= generalConfig.data.system.limits.userMaximum){
instance.valid = false instance.valid = false
instance.reason = "global-user-limit" instance.reason = "global-user-limit"
openticket.log(params.user.displayName+" tried to create a ticket, but reached the limit!","info",[ opendiscord.log(params.user.displayName+" tried to create a ticket, but reached the limit!","info",[
{key:"user",value:params.user.username}, {key:"user",value:params.user.username},
{key:"userid",value:params.user.id,hidden:true}, {key:"userid",value:params.user.id,hidden:true},
{key:"option",value:params.option.id.value}, {key:"option",value:params.option.id.value},
@@ -70,15 +70,15 @@ export const registerActions = async () => {
new api.ODWorker("openticket:check-option-limits",1,(instance,params,source,cancel) => { new api.ODWorker("openticket:check-option-limits",1,(instance,params,source,cancel) => {
if (!params.option.exists("openticket:limits-enabled") || !params.option.get("openticket:limits-enabled").value) return if (!params.option.exists("openticket:limits-enabled") || !params.option.get("openticket:limits-enabled").value) return
const allTickets = openticket.tickets.getFiltered((ticket) => ticket.option.id.value == params.option.id.value) const allTickets = opendiscord.tickets.getFiltered((ticket) => ticket.option.id.value == params.option.id.value)
const globalTicketCount = allTickets.length const globalTicketCount = allTickets.length
const userTickets = openticket.tickets.getFiltered((ticket) => ticket.option.id.value == params.option.id.value && ticket.exists("openticket:opened-by") && (ticket.get("openticket:opened-by").value == params.user.id)) const userTickets = opendiscord.tickets.getFiltered((ticket) => ticket.option.id.value == params.option.id.value && ticket.exists("openticket:opened-by") && (ticket.get("openticket:opened-by").value == params.user.id))
const userTicketCount = userTickets.length const userTicketCount = userTickets.length
if (globalTicketCount >= params.option.get("openticket:limits-maximum-global").value){ if (globalTicketCount >= params.option.get("openticket:limits-maximum-global").value){
instance.valid = false instance.valid = false
instance.reason = "option-limit" instance.reason = "option-limit"
openticket.log(params.user.displayName+" tried to create a ticket, but reached the limit!","info",[ opendiscord.log(params.user.displayName+" tried to create a ticket, but reached the limit!","info",[
{key:"user",value:params.user.username}, {key:"user",value:params.user.username},
{key:"userid",value:params.user.id,hidden:true}, {key:"userid",value:params.user.id,hidden:true},
{key:"option",value:params.option.id.value}, {key:"option",value:params.option.id.value},
@@ -88,7 +88,7 @@ export const registerActions = async () => {
}else if (userTicketCount >= params.option.get("openticket:limits-maximum-user").value){ }else if (userTicketCount >= params.option.get("openticket:limits-maximum-user").value){
instance.valid = false instance.valid = false
instance.reason = "option-user-limit" instance.reason = "option-user-limit"
openticket.log(params.user.displayName+" tried to create a ticket, but reached the limit!","info",[ opendiscord.log(params.user.displayName+" tried to create a ticket, but reached the limit!","info",[
{key:"user",value:params.user.username}, {key:"user",value:params.user.username},
{key:"userid",value:params.user.id,hidden:true}, {key:"userid",value:params.user.id,hidden:true},
{key:"option",value:params.option.id.value}, {key:"option",value:params.option.id.value},
+24 -24
View File
@@ -1,23 +1,23 @@
/////////////////////////////////////// ///////////////////////////////////////
//TRANSCRIPT CREATION SYSTEM //TRANSCRIPT CREATION SYSTEM
/////////////////////////////////////// ///////////////////////////////////////
import {openticket, api, utilities} from "../index" import {opendiscord, api, utilities} from "../index"
import * as discord from "discord.js" import * as discord from "discord.js"
const transcriptConfig = openticket.configs.get("openticket:transcripts") const transcriptConfig = opendiscord.configs.get("openticket:transcripts")
export const registerActions = async () => { export const registerActions = async () => {
openticket.actions.add(new api.ODAction("openticket:create-transcript")) opendiscord.actions.add(new api.ODAction("openticket:create-transcript"))
openticket.actions.get("openticket:create-transcript").workers.add([ opendiscord.actions.get("openticket:create-transcript").workers.add([
new api.ODWorker("openticket:select-compiler",4,async (instance,params,source,cancel) => { new api.ODWorker("openticket:select-compiler",4,async (instance,params,source,cancel) => {
const {channel,user,ticket} = params const {channel,user,ticket} = params
if (channel.type != discord.ChannelType.GuildText) return cancel() if (channel.type != discord.ChannelType.GuildText) return cancel()
if (!transcriptConfig.data.general.enabled) return cancel() if (!transcriptConfig.data.general.enabled) return cancel()
await openticket.events.get("onTranscriptCreate").emit([openticket.transcripts,ticket,channel,user]) await opendiscord.events.get("onTranscriptCreate").emit([opendiscord.transcripts,ticket,channel,user])
instance.errorReason = null instance.errorReason = null
const participants = await openticket.tickets.getAllTicketParticipants(params.ticket) const participants = await opendiscord.tickets.getAllTicketParticipants(params.ticket)
if (!participants){ if (!participants){
instance.pendingMessage = null instance.pendingMessage = null
instance.errorReason = "Unable to fetch ticket channel participants!" instance.errorReason = "Unable to fetch ticket channel participants!"
@@ -26,8 +26,8 @@ export const registerActions = async () => {
instance.participants = participants instance.participants = participants
//select transcript compiler //select transcript compiler
if (transcriptConfig.data.general.mode == "text") instance.compiler = openticket.transcripts.get("openticket:text-compiler") if (transcriptConfig.data.general.mode == "text") instance.compiler = opendiscord.transcripts.get("openticket:text-compiler")
else if (transcriptConfig.data.general.mode == "html") instance.compiler = openticket.transcripts.get("openticket:html-compiler") else if (transcriptConfig.data.general.mode == "html") instance.compiler = opendiscord.transcripts.get("openticket:html-compiler")
}), }),
new api.ODWorker("openticket:init-transcript",3,async (instance,params,source,cancel) => { new api.ODWorker("openticket:init-transcript",3,async (instance,params,source,cancel) => {
const {channel,user,ticket} = params const {channel,user,ticket} = params
@@ -35,13 +35,13 @@ export const registerActions = async () => {
if (!transcriptConfig.data.general.enabled) return cancel() if (!transcriptConfig.data.general.enabled) return cancel()
//run transcript compiler init() //run transcript compiler init()
await openticket.events.get("onTranscriptInit").emit([openticket.transcripts,ticket,channel,user]) await opendiscord.events.get("onTranscriptInit").emit([opendiscord.transcripts,ticket,channel,user])
if (instance.compiler.init){ if (instance.compiler.init){
try{ try{
const result = await instance.compiler.init(ticket,channel,user) const result = await instance.compiler.init(ticket,channel,user)
if (result.success && result.pendingMessage && transcriptConfig.data.general.enableChannel){ if (result.success && result.pendingMessage && transcriptConfig.data.general.enableChannel){
//send init message to channel //send init message to channel
const post = openticket.posts.get("openticket:transcripts") const post = opendiscord.posts.get("openticket:transcripts")
if (post){ if (post){
instance.pendingMessage = await post.send(result.pendingMessage) instance.pendingMessage = await post.send(result.pendingMessage)
} }
@@ -57,7 +57,7 @@ export const registerActions = async () => {
throw new api.ODSystemError("ODAction(ot:create-transcript) => Failed transcript compiler init()! (see error above)") throw new api.ODSystemError("ODAction(ot:create-transcript) => Failed transcript compiler init()! (see error above)")
} }
} }
await openticket.events.get("afterTranscriptInitiated").emit([openticket.transcripts,ticket,channel,user]) await opendiscord.events.get("afterTranscriptInitiated").emit([opendiscord.transcripts,ticket,channel,user])
}), }),
new api.ODWorker("openticket:compile-transcript",2,async (instance,params,source,cancel) => { new api.ODWorker("openticket:compile-transcript",2,async (instance,params,source,cancel) => {
const {channel,user,ticket} = params const {channel,user,ticket} = params
@@ -69,7 +69,7 @@ export const registerActions = async () => {
} }
//run transcript compiler compile() //run transcript compiler compile()
await openticket.events.get("onTranscriptCompile").emit([openticket.transcripts,ticket,channel,user]) await opendiscord.events.get("onTranscriptCompile").emit([opendiscord.transcripts,ticket,channel,user])
if (instance.compiler.compile){ if (instance.compiler.compile){
try{ try{
const result = await instance.compiler.compile(ticket,channel,user) const result = await instance.compiler.compile(ticket,channel,user)
@@ -87,7 +87,7 @@ export const registerActions = async () => {
throw new api.ODSystemError("ODAction(ot:create-transcript) => Failed transcript compiler compile()! (see error above)") throw new api.ODSystemError("ODAction(ot:create-transcript) => Failed transcript compiler compile()! (see error above)")
} }
} }
await openticket.events.get("afterTranscriptCompiled").emit([openticket.transcripts,ticket,channel,user]) await opendiscord.events.get("afterTranscriptCompiled").emit([opendiscord.transcripts,ticket,channel,user])
}), }),
new api.ODWorker("openticket:ready-transcript",1,async (instance,params,source,cancel) => { new api.ODWorker("openticket:ready-transcript",1,async (instance,params,source,cancel) => {
if (!instance.result){ if (!instance.result){
@@ -98,7 +98,7 @@ export const registerActions = async () => {
//run transcript compiler ready() //run transcript compiler ready()
utilities.runAsync(async () => { utilities.runAsync(async () => {
await openticket.events.get("onTranscriptReady").emit([openticket.transcripts,instance.result.ticket,instance.result.channel,instance.result.user]) await opendiscord.events.get("onTranscriptReady").emit([opendiscord.transcripts,instance.result.ticket,instance.result.channel,instance.result.user])
if (instance.compiler.ready){ if (instance.compiler.ready){
try{ try{
const {channelMessage,creatorDmMessage,participantDmMessage,activeAdminDmMessage,everyAdminDmMessage} = await instance.compiler.ready(instance.result) const {channelMessage,creatorDmMessage,participantDmMessage,activeAdminDmMessage,everyAdminDmMessage} = await instance.compiler.ready(instance.result)
@@ -110,7 +110,7 @@ export const registerActions = async () => {
instance.pendingMessage.message.edit(channelMessage.message) instance.pendingMessage.message.edit(channelMessage.message)
}else{ }else{
//send ready message to channel //send ready message to channel
const post = openticket.posts.get("openticket:transcripts") const post = opendiscord.posts.get("openticket:transcripts")
if (post) await post.send(channelMessage) if (post) await post.send(channelMessage)
} }
} }
@@ -120,16 +120,16 @@ export const registerActions = async () => {
for (const p of instance.participants){ for (const p of instance.participants){
if (p.role == "creator" && transcriptConfig.data.general.enableCreatorDM && creatorDmMessage){ if (p.role == "creator" && transcriptConfig.data.general.enableCreatorDM && creatorDmMessage){
//send creator dm message //send creator dm message
await openticket.client.sendUserDm(p.user,creatorDmMessage) await opendiscord.client.sendUserDm(p.user,creatorDmMessage)
}else if (p.role == "participant" && transcriptConfig.data.general.enableParticipantDM && participantDmMessage){ }else if (p.role == "participant" && transcriptConfig.data.general.enableParticipantDM && participantDmMessage){
//send participant dm message //send participant dm message
await openticket.client.sendUserDm(p.user,participantDmMessage) await opendiscord.client.sendUserDm(p.user,participantDmMessage)
}else if (p.role == "admin" && transcriptConfig.data.general.enableActiveAdminDM && instance.result.success && instance.result.messages && instance.result.messages.some((msg) => msg.author.id == p.user.id) && activeAdminDmMessage){ }else if (p.role == "admin" && transcriptConfig.data.general.enableActiveAdminDM && instance.result.success && instance.result.messages && instance.result.messages.some((msg) => msg.author.id == p.user.id) && activeAdminDmMessage){
//send active admin dm message //send active admin dm message
await openticket.client.sendUserDm(p.user,activeAdminDmMessage) await opendiscord.client.sendUserDm(p.user,activeAdminDmMessage)
}else if (p.role == "admin" && transcriptConfig.data.general.enableEveryAdminDM && everyAdminDmMessage){ }else if (p.role == "admin" && transcriptConfig.data.general.enableEveryAdminDM && everyAdminDmMessage){
//send every admin dm message //send every admin dm message
await openticket.client.sendUserDm(p.user,everyAdminDmMessage) await opendiscord.client.sendUserDm(p.user,everyAdminDmMessage)
} }
} }
} }
@@ -141,17 +141,17 @@ export const registerActions = async () => {
throw new api.ODSystemError("ODAction(ot:create-transcript) => Failed transcript compiler ready()! (see error above)") throw new api.ODSystemError("ODAction(ot:create-transcript) => Failed transcript compiler ready()! (see error above)")
} }
} }
await openticket.events.get("afterTranscriptReady").emit([openticket.transcripts,instance.result.ticket,instance.result.channel,instance.result.user]) await opendiscord.events.get("afterTranscriptReady").emit([opendiscord.transcripts,instance.result.ticket,instance.result.channel,instance.result.user])
}) })
//update stats //update stats
await openticket.stats.get("openticket:global").setStat("openticket:transcripts-created",1,"increase") await opendiscord.stats.get("openticket:global").setStat("openticket:transcripts-created",1,"increase")
await openticket.stats.get("openticket:user").setStat("openticket:transcripts-created",params.user.id,1,"increase") await opendiscord.stats.get("openticket:user").setStat("openticket:transcripts-created",params.user.id,1,"increase")
await openticket.events.get("afterTranscriptCreated").emit([openticket.transcripts,instance.result.ticket,instance.result.channel,instance.result.user]) await opendiscord.events.get("afterTranscriptCreated").emit([opendiscord.transcripts,instance.result.ticket,instance.result.channel,instance.result.user])
}), }),
new api.ODWorker("openticket:logs",0,(instance,params,source,cancel) => { new api.ODWorker("openticket:logs",0,(instance,params,source,cancel) => {
const {user,channel,ticket} = params const {user,channel,ticket} = params
openticket.log(user.displayName+" created a transcript!","info",[ opendiscord.log(user.displayName+" created a transcript!","info",[
{key:"user",value:user.username}, {key:"user",value:user.username},
{key:"userid",value:user.id,hidden:true}, {key:"userid",value:user.id,hidden:true},
{key:"channel",value:"#"+channel.name}, {key:"channel",value:"#"+channel.name},
+111 -111
View File
@@ -1,55 +1,55 @@
/////////////////////////////////////// ///////////////////////////////////////
//TICKET DELETION SYSTEM //TICKET DELETION SYSTEM
/////////////////////////////////////// ///////////////////////////////////////
import {openticket, api, utilities} from "../index" import {opendiscord, api, utilities} from "../index"
import * as discord from "discord.js" import * as discord from "discord.js"
const generalConfig = openticket.configs.get("openticket:general") const generalConfig = opendiscord.configs.get("openticket:general")
export const registerActions = async () => { export const registerActions = async () => {
openticket.actions.add(new api.ODAction("openticket:delete-ticket")) opendiscord.actions.add(new api.ODAction("openticket:delete-ticket"))
openticket.actions.get("openticket:delete-ticket").workers.add([ opendiscord.actions.get("openticket:delete-ticket").workers.add([
new api.ODWorker("openticket:delete-ticket",3,async (instance,params,source,cancel) => { new api.ODWorker("openticket:delete-ticket",3,async (instance,params,source,cancel) => {
const {guild,channel,user,ticket,reason} = params const {guild,channel,user,ticket,reason} = params
if (channel.isThread()) throw new api.ODSystemError("Unable to delete ticket! Open Ticket doesn't support threads!") if (channel.isThread()) throw new api.ODSystemError("Unable to delete ticket! Open Ticket doesn't support threads!")
await openticket.events.get("onTicketDelete").emit([ticket,user,channel,reason]) await opendiscord.events.get("onTicketDelete").emit([ticket,user,channel,reason])
//update ticket //update ticket
ticket.get("openticket:for-deletion").value = true ticket.get("openticket:for-deletion").value = true
ticket.get("openticket:busy").value = true ticket.get("openticket:busy").value = true
//update ticket message //update ticket message
const ticketMessage = await openticket.tickets.getTicketMessage(ticket) const ticketMessage = await opendiscord.tickets.getTicketMessage(ticket)
if (ticketMessage){ if (ticketMessage){
try{ try{
ticketMessage.edit((await openticket.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket})).message) ticketMessage.edit((await opendiscord.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket})).message)
}catch(e){ }catch(e){
openticket.log("Unable to edit ticket message on ticket deletion!","error",[ opendiscord.log("Unable to edit ticket message on ticket deletion!","error",[
{key:"channel",value:"#"+channel.name}, {key:"channel",value:"#"+channel.name},
{key:"channelid",value:channel.id,hidden:true}, {key:"channelid",value:channel.id,hidden:true},
{key:"messageid",value:ticketMessage.id}, {key:"messageid",value:ticketMessage.id},
{key:"option",value:ticket.option.id.value} {key:"option",value:ticket.option.id.value}
]) ])
openticket.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException")) opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
} }
} }
if (params.sendMessage) await channel.send((await openticket.builders.messages.getSafe("openticket:delete-message").build(source,{guild,channel,user,ticket,reason})).message) if (params.sendMessage) await channel.send((await opendiscord.builders.messages.getSafe("openticket:delete-message").build(source,{guild,channel,user,ticket,reason})).message)
//create transcript //create transcript
if (!params.withoutTranscript){ if (!params.withoutTranscript){
const transcriptRes = await openticket.actions.get("openticket:create-transcript").run(source,{guild,channel,user,ticket}) const transcriptRes = await opendiscord.actions.get("openticket:create-transcript").run(source,{guild,channel,user,ticket})
//transcript failure //transcript failure
if (typeof transcriptRes.success == "boolean" && !transcriptRes.success && transcriptRes.compiler){ if (typeof transcriptRes.success == "boolean" && !transcriptRes.success && transcriptRes.compiler){
const {compiler} = transcriptRes const {compiler} = transcriptRes
await channel.send((await openticket.builders.messages.getSafe("openticket:transcript-error").build(source,{guild,channel,user,ticket,compiler,reason:transcriptRes.errorReason ?? null})).message) await channel.send((await opendiscord.builders.messages.getSafe("openticket:transcript-error").build(source,{guild,channel,user,ticket,compiler,reason:transcriptRes.errorReason ?? null})).message)
.catch((reason) => openticket.log("Unable to send transcript failure to ticket channel!","error",[{key:"id",value:channel.id}])) .catch((reason) => opendiscord.log("Unable to send transcript failure to ticket channel!","error",[{key:"id",value:channel.id}]))
//undo deletion //undo deletion
ticket.get("openticket:for-deletion").value = false ticket.get("openticket:for-deletion").value = false
ticket.get("openticket:busy").value = false ticket.get("openticket:busy").value = false
openticket.log("Canceled ticket deletion because of transcript system malfunction!","warning",[ opendiscord.log("Canceled ticket deletion because of transcript system malfunction!","warning",[
{key:"compiler",value:compiler.id.value}, {key:"compiler",value:compiler.id.value},
{key:"reason",value:transcriptRes.errorReason ?? "/"}, {key:"reason",value:transcriptRes.errorReason ?? "/"},
]) ])
@@ -58,11 +58,11 @@ export const registerActions = async () => {
} }
//update stats //update stats
await openticket.stats.get("openticket:global").setStat("openticket:tickets-deleted",1,"increase") await opendiscord.stats.get("openticket:global").setStat("openticket:tickets-deleted",1,"increase")
await openticket.stats.get("openticket:user").setStat("openticket:tickets-deleted",user.id,1,"increase") await opendiscord.stats.get("openticket:user").setStat("openticket:tickets-deleted",user.id,1,"increase")
//delete ticket from manager //delete ticket from manager
openticket.tickets.remove(ticket.id) opendiscord.tickets.remove(ticket.id)
//delete permissions from manager //delete permissions from manager
await (await import("../data/framework/permissionLoader.js")).removeTicketPermissions(ticket) await (await import("../data/framework/permissionLoader.js")).removeTicketPermissions(ticket)
@@ -73,30 +73,30 @@ export const registerActions = async () => {
//to logs //to logs
if (generalConfig.data.system.logs.enabled && generalConfig.data.system.messages.deleting.logs){ if (generalConfig.data.system.logs.enabled && generalConfig.data.system.messages.deleting.logs){
const logChannel = openticket.posts.get("openticket:logs") const logChannel = opendiscord.posts.get("openticket:logs")
if (logChannel) logChannel.send(await openticket.builders.messages.getSafe("openticket:ticket-action-logs").build(source,{guild,channel,user,ticket,mode:"delete",reason,additionalData:null})) if (logChannel) logChannel.send(await opendiscord.builders.messages.getSafe("openticket:ticket-action-logs").build(source,{guild,channel,user,ticket,mode:"delete",reason,additionalData:null}))
} }
//to dm //to dm
const creator = await openticket.tickets.getTicketUser(ticket,"creator") const creator = await opendiscord.tickets.getTicketUser(ticket,"creator")
if (creator && generalConfig.data.system.messages.deleting.dm) await openticket.client.sendUserDm(creator,await openticket.builders.messages.getSafe("openticket:ticket-action-dm").build(source,{guild,channel,user,ticket,mode:"delete",reason,additionalData:null})) if (creator && generalConfig.data.system.messages.deleting.dm) await opendiscord.client.sendUserDm(creator,await opendiscord.builders.messages.getSafe("openticket:ticket-action-dm").build(source,{guild,channel,user,ticket,mode:"delete",reason,additionalData:null}))
}), }),
new api.ODWorker("openticket:delete-channel",1,async (instance,params,source,cancel) => { new api.ODWorker("openticket:delete-channel",1,async (instance,params,source,cancel) => {
const {guild,channel,user,ticket,reason} = params const {guild,channel,user,ticket,reason} = params
//delete channel & events //delete channel & events
await openticket.events.get("onTicketChannelDeletion").emit([ticket,channel,user]) await opendiscord.events.get("onTicketChannelDeletion").emit([ticket,channel,user])
await channel.delete("Ticket Deleted").catch((reason) => openticket.log("Unable to delete ticket channel!","error",[{key:"id",value:channel.id}])) await channel.delete("Ticket Deleted").catch((reason) => opendiscord.log("Unable to delete ticket channel!","error",[{key:"id",value:channel.id}]))
await openticket.events.get("afterTicketChannelDeleted").emit([ticket,user]) await opendiscord.events.get("afterTicketChannelDeleted").emit([ticket,user])
//delete permissions from manager //delete permissions from manager
await (await import("../data/framework/permissionLoader.js")).removeTicketPermissions(ticket) await (await import("../data/framework/permissionLoader.js")).removeTicketPermissions(ticket)
await openticket.events.get("afterTicketDeleted").emit([ticket,user,reason]) await opendiscord.events.get("afterTicketDeleted").emit([ticket,user,reason])
}), }),
new api.ODWorker("openticket:logs",0,(instance,params,source,cancel) => { new api.ODWorker("openticket:logs",0,(instance,params,source,cancel) => {
const {guild,channel,user,ticket} = params const {guild,channel,user,ticket} = params
openticket.log(user.displayName+" deleted a ticket!","info",[ opendiscord.log(user.displayName+" deleted a ticket!","info",[
{key:"user",value:user.username}, {key:"user",value:user.username},
{key:"userid",value:user.id,hidden:true}, {key:"userid",value:user.id,hidden:true},
{key:"channel",value:"#"+channel.name}, {key:"channel",value:"#"+channel.name},
@@ -107,7 +107,7 @@ export const registerActions = async () => {
]) ])
}) })
]) ])
openticket.actions.get("openticket:delete-ticket").workers.backupWorker = new api.ODWorker("openticket:cancel-busy",0,(instance,params) => { opendiscord.actions.get("openticket:delete-ticket").workers.backupWorker = new api.ODWorker("openticket:cancel-busy",0,(instance,params) => {
//set busy to false in case of crash or cancel //set busy to false in case of crash or cancel
params.ticket.get("openticket:busy").value = false params.ticket.get("openticket:busy").value = false
params.ticket.get("openticket:for-deletion").value = false params.ticket.get("openticket:for-deletion").value = false
@@ -116,37 +116,37 @@ export const registerActions = async () => {
export const registerVerifyBars = async () => { export const registerVerifyBars = async () => {
//DELETE TICKET TICKET MESSAGE //DELETE TICKET TICKET MESSAGE
openticket.verifybars.add(new api.ODVerifyBar("openticket:delete-ticket-ticket-message",openticket.builders.messages.getSafe("openticket:verifybar-ticket-message"),!generalConfig.data.system.disableVerifyBars)) opendiscord.verifybars.add(new api.ODVerifyBar("openticket:delete-ticket-ticket-message",opendiscord.builders.messages.getSafe("openticket:verifybar-ticket-message"),!generalConfig.data.system.disableVerifyBars))
openticket.verifybars.get("openticket:delete-ticket-ticket-message").success.add([ opendiscord.verifybars.get("openticket:delete-ticket-ticket-message").success.add([
new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => { new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => {
const permissionMode = generalConfig.data.system.permissions.delete const permissionMode = generalConfig.data.system.permissions.delete
if (permissionMode == "none"){ if (permissionMode == "none"){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel() return cancel()
}else if (permissionMode == "everyone") return }else if (permissionMode == "everyone") return
else if (permissionMode == "admin"){ else if (permissionMode == "admin"){
if (!openticket.permissions.hasPermissions("support",await openticket.permissions.getPermissions(instance.user,instance.channel,instance.guild))){ if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
return cancel() return cancel()
}else return }else return
}else{ }else{
if (!instance.guild || !instance.member){ if (!instance.guild || !instance.member){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
return cancel() return cancel()
} }
const role = await openticket.client.fetchGuildRole(instance.guild,permissionMode) const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
if (!role){ if (!role){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
return cancel() return cancel()
} }
if (!role.members.has(instance.member.id)){ if (!role.members.has(instance.member.id)){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel() return cancel()
}else return }else return
} }
@@ -154,84 +154,84 @@ export const registerVerifyBars = async () => {
new api.ODWorker("openticket:delete-ticket",0,async (instance,params,source,cancel) => { new api.ODWorker("openticket:delete-ticket",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance const {guild,channel,user} = instance
if (!guild){ if (!guild){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
return cancel() return cancel()
} }
const ticket = openticket.tickets.get(channel.id) const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){ if (!ticket || channel.isDMBased()){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
//return when busy //return when busy
if (ticket.get("openticket:busy").value){ if (ticket.get("openticket:busy").value){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
//start deleting ticket //start deleting ticket
if (params.data == "reason"){ if (params.data == "reason"){
//delete with reason //delete with reason
instance.modal(await openticket.builders.modals.getSafe("openticket:delete-ticket-reason").build("ticket-message",{guild,channel,user,ticket})) instance.modal(await opendiscord.builders.modals.getSafe("openticket:delete-ticket-reason").build("ticket-message",{guild,channel,user,ticket}))
}else{ }else{
//delete without reason //delete without reason
await instance.defer("update",false) await instance.defer("update",false)
//don't await DELETE action => else it will update the message after the channel has been deleted //don't await DELETE action => else it will update the message after the channel has been deleted
openticket.actions.get("openticket:delete-ticket").run("ticket-message",{guild,channel,user,ticket,reason:null,sendMessage:true,withoutTranscript:(params.data == "no-transcript")}) opendiscord.actions.get("openticket:delete-ticket").run("ticket-message",{guild,channel,user,ticket,reason:null,sendMessage:true,withoutTranscript:(params.data == "no-transcript")})
//update ticket (for ticket message) => no-await doesn't wait for the action to set this variable //update ticket (for ticket message) => no-await doesn't wait for the action to set this variable
ticket.get("openticket:for-deletion").value = true ticket.get("openticket:for-deletion").value = true
await instance.update(await openticket.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket})) await instance.update(await opendiscord.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket}))
} }
}) })
]) ])
openticket.verifybars.get("openticket:delete-ticket-ticket-message").failure.add([ opendiscord.verifybars.get("openticket:delete-ticket-ticket-message").failure.add([
new api.ODWorker("openticket:back-to-ticket-message",0,async (instance,params,source,cancel) => { new api.ODWorker("openticket:back-to-ticket-message",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance const {guild,channel,user} = instance
if (!guild){ if (!guild){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
return cancel() return cancel()
} }
const ticket = openticket.tickets.get(channel.id) const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){ if (!ticket || channel.isDMBased()){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
await instance.update(await openticket.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket})) await instance.update(await opendiscord.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket}))
}) })
]) ])
//DELETE TICKET CLOSE MESSAGE //DELETE TICKET CLOSE MESSAGE
openticket.verifybars.add(new api.ODVerifyBar("openticket:delete-ticket-close-message",openticket.builders.messages.getSafe("openticket:verifybar-close-message"),!generalConfig.data.system.disableVerifyBars)) opendiscord.verifybars.add(new api.ODVerifyBar("openticket:delete-ticket-close-message",opendiscord.builders.messages.getSafe("openticket:verifybar-close-message"),!generalConfig.data.system.disableVerifyBars))
openticket.verifybars.get("openticket:delete-ticket-close-message").success.add([ opendiscord.verifybars.get("openticket:delete-ticket-close-message").success.add([
new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => { new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => {
const permissionMode = generalConfig.data.system.permissions.delete const permissionMode = generalConfig.data.system.permissions.delete
if (permissionMode == "none"){ if (permissionMode == "none"){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel() return cancel()
}else if (permissionMode == "everyone") return }else if (permissionMode == "everyone") return
else if (permissionMode == "admin"){ else if (permissionMode == "admin"){
if (!openticket.permissions.hasPermissions("support",await openticket.permissions.getPermissions(instance.user,instance.channel,instance.guild))){ if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
return cancel() return cancel()
}else return }else return
}else{ }else{
if (!instance.guild || !instance.member){ if (!instance.guild || !instance.member){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
return cancel() return cancel()
} }
const role = await openticket.client.fetchGuildRole(instance.guild,permissionMode) const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
if (!role){ if (!role){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
return cancel() return cancel()
} }
if (!role.members.has(instance.member.id)){ if (!role.members.has(instance.member.id)){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel() return cancel()
}else return }else return
} }
@@ -239,88 +239,88 @@ export const registerVerifyBars = async () => {
new api.ODWorker("openticket:delete-ticket",0,async (instance,params,source,cancel) => { new api.ODWorker("openticket:delete-ticket",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance const {guild,channel,user} = instance
if (!guild){ if (!guild){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
return cancel() return cancel()
} }
const ticket = openticket.tickets.get(channel.id) const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){ if (!ticket || channel.isDMBased()){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
//return when busy //return when busy
if (ticket.get("openticket:busy").value){ if (ticket.get("openticket:busy").value){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
//start deleting ticket //start deleting ticket
if (params.data == "reason"){ if (params.data == "reason"){
//delete with reason //delete with reason
instance.modal(await openticket.builders.modals.getSafe("openticket:delete-ticket-reason").build("close-message",{guild,channel,user,ticket})) instance.modal(await opendiscord.builders.modals.getSafe("openticket:delete-ticket-reason").build("close-message",{guild,channel,user,ticket}))
}else{ }else{
//delete without reason //delete without reason
await instance.defer("update",false) await instance.defer("update",false)
//don't await DELETE action => else it will update the message after the channel has been deleted //don't await DELETE action => else it will update the message after the channel has been deleted
openticket.actions.get("openticket:delete-ticket").run("close-message",{guild,channel,user,ticket,reason:null,sendMessage:false,withoutTranscript:(params.data == "no-transcript")}) opendiscord.actions.get("openticket:delete-ticket").run("close-message",{guild,channel,user,ticket,reason:null,sendMessage:false,withoutTranscript:(params.data == "no-transcript")})
//update ticket (for ticket message) => no-await doesn't wait for the action to set this variable //update ticket (for ticket message) => no-await doesn't wait for the action to set this variable
ticket.get("openticket:for-deletion").value = true ticket.get("openticket:for-deletion").value = true
await instance.update(await openticket.builders.messages.getSafe("openticket:delete-message").build("close-message",{guild,channel,user,ticket,reason:null})) await instance.update(await opendiscord.builders.messages.getSafe("openticket:delete-message").build("close-message",{guild,channel,user,ticket,reason:null}))
} }
}) })
]) ])
openticket.verifybars.get("openticket:delete-ticket-close-message").failure.add([ opendiscord.verifybars.get("openticket:delete-ticket-close-message").failure.add([
new api.ODWorker("openticket:back-to-close-message",0,async (instance,params,source,cancel) => { new api.ODWorker("openticket:back-to-close-message",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance const {guild,channel,user} = instance
const {verifybarMessage} = params const {verifybarMessage} = params
if (!guild){ if (!guild){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
return cancel() return cancel()
} }
const ticket = openticket.tickets.get(channel.id) const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){ if (!ticket || channel.isDMBased()){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
const rawReason = (verifybarMessage && verifybarMessage.embeds[0] && verifybarMessage.embeds[0].fields[0]) ? verifybarMessage.embeds[0].fields[0].value : null const rawReason = (verifybarMessage && verifybarMessage.embeds[0] && verifybarMessage.embeds[0].fields[0]) ? verifybarMessage.embeds[0].fields[0].value : null
const reason = (rawReason == null) ? null : rawReason.substring(3,rawReason.length-3) const reason = (rawReason == null) ? null : rawReason.substring(3,rawReason.length-3)
await instance.update(await openticket.builders.messages.getSafe("openticket:close-message").build("other",{guild,channel,user,ticket,reason})) await instance.update(await opendiscord.builders.messages.getSafe("openticket:close-message").build("other",{guild,channel,user,ticket,reason}))
}) })
]) ])
//DELETE TICKET REOPEN MESSAGE //DELETE TICKET REOPEN MESSAGE
openticket.verifybars.add(new api.ODVerifyBar("openticket:delete-ticket-reopen-message",openticket.builders.messages.getSafe("openticket:verifybar-reopen-message"),!generalConfig.data.system.disableVerifyBars)) opendiscord.verifybars.add(new api.ODVerifyBar("openticket:delete-ticket-reopen-message",opendiscord.builders.messages.getSafe("openticket:verifybar-reopen-message"),!generalConfig.data.system.disableVerifyBars))
openticket.verifybars.get("openticket:delete-ticket-reopen-message").success.add([ opendiscord.verifybars.get("openticket:delete-ticket-reopen-message").success.add([
new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => { new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => {
const permissionMode = generalConfig.data.system.permissions.delete const permissionMode = generalConfig.data.system.permissions.delete
if (permissionMode == "none"){ if (permissionMode == "none"){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel() return cancel()
}else if (permissionMode == "everyone") return }else if (permissionMode == "everyone") return
else if (permissionMode == "admin"){ else if (permissionMode == "admin"){
if (!openticket.permissions.hasPermissions("support",await openticket.permissions.getPermissions(instance.user,instance.channel,instance.guild))){ if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
return cancel() return cancel()
}else return }else return
}else{ }else{
if (!instance.guild || !instance.member){ if (!instance.guild || !instance.member){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
return cancel() return cancel()
} }
const role = await openticket.client.fetchGuildRole(instance.guild,permissionMode) const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
if (!role){ if (!role){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
return cancel() return cancel()
} }
if (!role.members.has(instance.member.id)){ if (!role.members.has(instance.member.id)){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel() return cancel()
}else return }else return
} }
@@ -328,88 +328,88 @@ export const registerVerifyBars = async () => {
new api.ODWorker("openticket:delete-ticket",0,async (instance,params,source,cancel) => { new api.ODWorker("openticket:delete-ticket",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance const {guild,channel,user} = instance
if (!guild){ if (!guild){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
return cancel() return cancel()
} }
const ticket = openticket.tickets.get(channel.id) const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){ if (!ticket || channel.isDMBased()){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
//return when busy //return when busy
if (ticket.get("openticket:busy").value){ if (ticket.get("openticket:busy").value){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
//start deleting ticket //start deleting ticket
if (params.data == "reason"){ if (params.data == "reason"){
//delete with reason //delete with reason
instance.modal(await openticket.builders.modals.getSafe("openticket:delete-ticket-reason").build("reopen-message",{guild,channel,user,ticket})) instance.modal(await opendiscord.builders.modals.getSafe("openticket:delete-ticket-reason").build("reopen-message",{guild,channel,user,ticket}))
}else{ }else{
//delete without reason //delete without reason
await instance.defer("update",false) await instance.defer("update",false)
//don't await DELETE action => else it will update the message after the channel has been deleted //don't await DELETE action => else it will update the message after the channel has been deleted
openticket.actions.get("openticket:delete-ticket").run("reopen-message",{guild,channel,user,ticket,reason:null,sendMessage:false,withoutTranscript:(params.data == "no-transcript")}) opendiscord.actions.get("openticket:delete-ticket").run("reopen-message",{guild,channel,user,ticket,reason:null,sendMessage:false,withoutTranscript:(params.data == "no-transcript")})
//update ticket (for ticket message) => no-await doesn't wait for the action to set this variable //update ticket (for ticket message) => no-await doesn't wait for the action to set this variable
ticket.get("openticket:for-deletion").value = true ticket.get("openticket:for-deletion").value = true
await instance.update(await openticket.builders.messages.getSafe("openticket:delete-message").build("reopen-message",{guild,channel,user,ticket,reason:null})) await instance.update(await opendiscord.builders.messages.getSafe("openticket:delete-message").build("reopen-message",{guild,channel,user,ticket,reason:null}))
} }
}) })
]) ])
openticket.verifybars.get("openticket:delete-ticket-reopen-message").failure.add([ opendiscord.verifybars.get("openticket:delete-ticket-reopen-message").failure.add([
new api.ODWorker("openticket:back-to-reopen-message",0,async (instance,params,source,cancel) => { new api.ODWorker("openticket:back-to-reopen-message",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance const {guild,channel,user} = instance
const {verifybarMessage} = params const {verifybarMessage} = params
if (!guild){ if (!guild){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
return cancel() return cancel()
} }
const ticket = openticket.tickets.get(channel.id) const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){ if (!ticket || channel.isDMBased()){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
const rawReason = (verifybarMessage && verifybarMessage.embeds[0] && verifybarMessage.embeds[0].fields[0]) ? verifybarMessage.embeds[0].fields[0].value : null const rawReason = (verifybarMessage && verifybarMessage.embeds[0] && verifybarMessage.embeds[0].fields[0]) ? verifybarMessage.embeds[0].fields[0].value : null
const reason = (rawReason == null) ? null : rawReason.substring(3,rawReason.length-3) const reason = (rawReason == null) ? null : rawReason.substring(3,rawReason.length-3)
await instance.update(await openticket.builders.messages.getSafe("openticket:reopen-message").build("other",{guild,channel,user,ticket,reason})) await instance.update(await opendiscord.builders.messages.getSafe("openticket:reopen-message").build("other",{guild,channel,user,ticket,reason}))
}) })
]) ])
//DELETE TICKET AUTOCLOSE MESSAGE //DELETE TICKET AUTOCLOSE MESSAGE
openticket.verifybars.add(new api.ODVerifyBar("openticket:delete-ticket-autoclose-message",openticket.builders.messages.getSafe("openticket:verifybar-autoclose-message"),!generalConfig.data.system.disableVerifyBars)) opendiscord.verifybars.add(new api.ODVerifyBar("openticket:delete-ticket-autoclose-message",opendiscord.builders.messages.getSafe("openticket:verifybar-autoclose-message"),!generalConfig.data.system.disableVerifyBars))
openticket.verifybars.get("openticket:delete-ticket-autoclose-message").success.add([ opendiscord.verifybars.get("openticket:delete-ticket-autoclose-message").success.add([
new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => { new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => {
const permissionMode = generalConfig.data.system.permissions.delete const permissionMode = generalConfig.data.system.permissions.delete
if (permissionMode == "none"){ if (permissionMode == "none"){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel() return cancel()
}else if (permissionMode == "everyone") return }else if (permissionMode == "everyone") return
else if (permissionMode == "admin"){ else if (permissionMode == "admin"){
if (!openticket.permissions.hasPermissions("support",await openticket.permissions.getPermissions(instance.user,instance.channel,instance.guild))){ if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
return cancel() return cancel()
}else return }else return
}else{ }else{
if (!instance.guild || !instance.member){ if (!instance.guild || !instance.member){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
return cancel() return cancel()
} }
const role = await openticket.client.fetchGuildRole(instance.guild,permissionMode) const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
if (!role){ if (!role){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
return cancel() return cancel()
} }
if (!role.members.has(instance.member.id)){ if (!role.members.has(instance.member.id)){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel() return cancel()
}else return }else return
} }
@@ -417,50 +417,50 @@ export const registerVerifyBars = async () => {
new api.ODWorker("openticket:delete-ticket",0,async (instance,params,source,cancel) => { new api.ODWorker("openticket:delete-ticket",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance const {guild,channel,user} = instance
if (!guild){ if (!guild){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
return cancel() return cancel()
} }
const ticket = openticket.tickets.get(channel.id) const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){ if (!ticket || channel.isDMBased()){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
//return when busy //return when busy
if (ticket.get("openticket:busy").value){ if (ticket.get("openticket:busy").value){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
//start deleting ticket //start deleting ticket
if (params.data == "reason"){ if (params.data == "reason"){
//delete with reason //delete with reason
instance.modal(await openticket.builders.modals.getSafe("openticket:delete-ticket-reason").build("autoclose-message",{guild,channel,user,ticket})) instance.modal(await opendiscord.builders.modals.getSafe("openticket:delete-ticket-reason").build("autoclose-message",{guild,channel,user,ticket}))
}else{ }else{
//delete without reason //delete without reason
await instance.defer("update",false) await instance.defer("update",false)
//don't await DELETE action => else it will update the message after the channel has been deleted //don't await DELETE action => else it will update the message after the channel has been deleted
openticket.actions.get("openticket:delete-ticket").run("autoclose-message",{guild,channel,user,ticket,reason:null,sendMessage:false,withoutTranscript:(params.data == "no-transcript")}) opendiscord.actions.get("openticket:delete-ticket").run("autoclose-message",{guild,channel,user,ticket,reason:null,sendMessage:false,withoutTranscript:(params.data == "no-transcript")})
//update ticket (for ticket message) => no-await doesn't wait for the action to set this variable //update ticket (for ticket message) => no-await doesn't wait for the action to set this variable
ticket.get("openticket:for-deletion").value = true ticket.get("openticket:for-deletion").value = true
await instance.update(await openticket.builders.messages.getSafe("openticket:delete-message").build("autoclose-message",{guild,channel,user,ticket,reason:null})) await instance.update(await opendiscord.builders.messages.getSafe("openticket:delete-message").build("autoclose-message",{guild,channel,user,ticket,reason:null}))
} }
}) })
]) ])
openticket.verifybars.get("openticket:delete-ticket-autoclose-message").failure.add([ opendiscord.verifybars.get("openticket:delete-ticket-autoclose-message").failure.add([
new api.ODWorker("openticket:back-to-autoclose-message",0,async (instance,params,source,cancel) => { new api.ODWorker("openticket:back-to-autoclose-message",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance const {guild,channel,user} = instance
const {verifybarMessage} = params const {verifybarMessage} = params
if (!guild){ if (!guild){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
return cancel() return cancel()
} }
const ticket = openticket.tickets.get(channel.id) const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){ if (!ticket || channel.isDMBased()){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
await instance.update(await openticket.builders.messages.getSafe("openticket:autoclose-message").build("other",{guild,channel,user,ticket})) await instance.update(await opendiscord.builders.messages.getSafe("openticket:autoclose-message").build("other",{guild,channel,user,ticket}))
}) })
]) ])
} }
+34 -34
View File
@@ -1,43 +1,43 @@
/////////////////////////////////////// ///////////////////////////////////////
//TRANSCRIPT ERROR SYSTEM //TRANSCRIPT ERROR SYSTEM
/////////////////////////////////////// ///////////////////////////////////////
import {openticket, api, utilities} from "../index" import {opendiscord, api, utilities} from "../index"
const generalConfig = openticket.configs.get("openticket:general") const generalConfig = opendiscord.configs.get("openticket:general")
export const registerButtonResponders = async () => { export const registerButtonResponders = async () => {
//TRANSCRIPT ERROR RETRY //TRANSCRIPT ERROR RETRY
openticket.responders.buttons.add(new api.ODButtonResponder("openticket:transcript-error-retry",/^od:transcript-error-retry_([^_]+)/)) opendiscord.responders.buttons.add(new api.ODButtonResponder("openticket:transcript-error-retry",/^od:transcript-error-retry_([^_]+)/))
openticket.responders.buttons.get("openticket:transcript-error-retry").workers.add([ opendiscord.responders.buttons.get("openticket:transcript-error-retry").workers.add([
new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => { new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => {
const permissionMode = generalConfig.data.system.permissions.delete const permissionMode = generalConfig.data.system.permissions.delete
if (permissionMode == "none"){ if (permissionMode == "none"){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel() return cancel()
}else if (permissionMode == "everyone") return }else if (permissionMode == "everyone") return
else if (permissionMode == "admin"){ else if (permissionMode == "admin"){
if (!openticket.permissions.hasPermissions("support",await openticket.permissions.getPermissions(instance.user,instance.channel,instance.guild))){ if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
return cancel() return cancel()
}else return }else return
}else{ }else{
if (!instance.guild || !instance.member){ if (!instance.guild || !instance.member){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
return cancel() return cancel()
} }
const role = await openticket.client.fetchGuildRole(instance.guild,permissionMode) const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
if (!role){ if (!role){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
return cancel() return cancel()
} }
if (!role.members.has(instance.member.id)){ if (!role.members.has(instance.member.id)){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel() return cancel()
}else return }else return
} }
@@ -48,33 +48,33 @@ export const registerButtonResponders = async () => {
if (originalSource != "slash" && originalSource != "text" && originalSource != "ticket-message" && originalSource != "reopen-message" && originalSource != "close-message" && originalSource != "other") return if (originalSource != "slash" && originalSource != "text" && originalSource != "ticket-message" && originalSource != "reopen-message" && originalSource != "close-message" && originalSource != "other") return
if (!guild){ if (!guild){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
return cancel() return cancel()
} }
const ticket = openticket.tickets.get(channel.id) const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){ if (!ticket || channel.isDMBased()){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
//return when busy //return when busy
if (ticket.get("openticket:busy").value){ if (ticket.get("openticket:busy").value){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
//start deleting ticket (without reason) //start deleting ticket (without reason)
await instance.defer("update",false) await instance.defer("update",false)
//don't await DELETE action => else it will update the message after the channel has been deleted //don't await DELETE action => else it will update the message after the channel has been deleted
openticket.actions.get("openticket:delete-ticket").run(originalSource,{guild,channel,user,ticket,reason:"Transcript Error (Retried)",sendMessage:false,withoutTranscript:false}) opendiscord.actions.get("openticket:delete-ticket").run(originalSource,{guild,channel,user,ticket,reason:"Transcript Error (Retried)",sendMessage:false,withoutTranscript:false})
//update ticket (for ticket message) => no-await doesn't wait for the action to set this variable //update ticket (for ticket message) => no-await doesn't wait for the action to set this variable
ticket.get("openticket:for-deletion").value = true ticket.get("openticket:for-deletion").value = true
await instance.update(await openticket.builders.messages.getSafe("openticket:delete-message").build("other",{guild,channel,user,ticket,reason:"Transcript Error (Retried)"})) await instance.update(await opendiscord.builders.messages.getSafe("openticket:delete-message").build("other",{guild,channel,user,ticket,reason:"Transcript Error (Retried)"}))
}), }),
new api.ODWorker("openticket:logs",-1,async (instance,params,source,cancel) => { new api.ODWorker("openticket:logs",-1,async (instance,params,source,cancel) => {
const {user,channel} = instance const {user,channel} = instance
if (channel.isDMBased()) return if (channel.isDMBased()) return
openticket.log(user.displayName+" retried deleting a ticket with transcript!","info",[ opendiscord.log(user.displayName+" retried deleting a ticket with transcript!","info",[
{key:"user",value:user.username}, {key:"user",value:user.username},
{key:"userid",value:user.id,hidden:true}, {key:"userid",value:user.id,hidden:true},
{key:"channel",value:"#"+channel.name}, {key:"channel",value:"#"+channel.name},
@@ -85,37 +85,37 @@ export const registerButtonResponders = async () => {
]) ])
//TRANSCRIPT ERROR CONTINUE //TRANSCRIPT ERROR CONTINUE
openticket.responders.buttons.add(new api.ODButtonResponder("openticket:transcript-error-continue",/^od:transcript-error-continue_([^_]+)/)) opendiscord.responders.buttons.add(new api.ODButtonResponder("openticket:transcript-error-continue",/^od:transcript-error-continue_([^_]+)/))
openticket.responders.buttons.get("openticket:transcript-error-continue").workers.add([ opendiscord.responders.buttons.get("openticket:transcript-error-continue").workers.add([
new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => { new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => {
const permissionMode = generalConfig.data.system.permissions.delete const permissionMode = generalConfig.data.system.permissions.delete
if (permissionMode == "none"){ if (permissionMode == "none"){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel() return cancel()
}else if (permissionMode == "everyone") return }else if (permissionMode == "everyone") return
else if (permissionMode == "admin"){ else if (permissionMode == "admin"){
if (!openticket.permissions.hasPermissions("support",await openticket.permissions.getPermissions(instance.user,instance.channel,instance.guild))){ if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
return cancel() return cancel()
}else return }else return
}else{ }else{
if (!instance.guild || !instance.member){ if (!instance.guild || !instance.member){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
return cancel() return cancel()
} }
const role = await openticket.client.fetchGuildRole(instance.guild,permissionMode) const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
if (!role){ if (!role){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
return cancel() return cancel()
} }
if (!role.members.has(instance.member.id)){ if (!role.members.has(instance.member.id)){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel() return cancel()
}else return }else return
} }
@@ -126,33 +126,33 @@ export const registerButtonResponders = async () => {
if (originalSource != "slash" && originalSource != "text" && originalSource != "ticket-message" && originalSource != "reopen-message" && originalSource != "close-message" && originalSource != "other") return if (originalSource != "slash" && originalSource != "text" && originalSource != "ticket-message" && originalSource != "reopen-message" && originalSource != "close-message" && originalSource != "other") return
if (!guild){ if (!guild){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
return cancel() return cancel()
} }
const ticket = openticket.tickets.get(channel.id) const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){ if (!ticket || channel.isDMBased()){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
//return when busy //return when busy
if (ticket.get("openticket:busy").value){ if (ticket.get("openticket:busy").value){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
//start deleting ticket (without reason) //start deleting ticket (without reason)
await instance.defer("update",false) await instance.defer("update",false)
//don't await DELETE action => else it will update the message after the channel has been deleted //don't await DELETE action => else it will update the message after the channel has been deleted
openticket.actions.get("openticket:delete-ticket").run(originalSource,{guild,channel,user,ticket,reason:"Transcript Error (Continued)",sendMessage:false,withoutTranscript:true}) opendiscord.actions.get("openticket:delete-ticket").run(originalSource,{guild,channel,user,ticket,reason:"Transcript Error (Continued)",sendMessage:false,withoutTranscript:true})
//update ticket (for ticket message) => no-await doesn't wait for the action to set this variable //update ticket (for ticket message) => no-await doesn't wait for the action to set this variable
ticket.get("openticket:for-deletion").value = true ticket.get("openticket:for-deletion").value = true
await instance.update(await openticket.builders.messages.getSafe("openticket:delete-message").build("other",{guild,channel,user,ticket,reason:"Transcript Error (Continued)"})) await instance.update(await opendiscord.builders.messages.getSafe("openticket:delete-message").build("other",{guild,channel,user,ticket,reason:"Transcript Error (Continued)"}))
}), }),
new api.ODWorker("openticket:logs",-1,async (instance,params,source,cancel) => { new api.ODWorker("openticket:logs",-1,async (instance,params,source,cancel) => {
const {user,channel} = instance const {user,channel} = instance
if (channel.isDMBased()) return if (channel.isDMBased()) return
openticket.log(user.displayName+" continued deleting a ticket without transcript!","info",[ opendiscord.log(user.displayName+" continued deleting a ticket without transcript!","info",[
{key:"user",value:user.username}, {key:"user",value:user.username},
{key:"userid",value:user.id,hidden:true}, {key:"userid",value:user.id,hidden:true},
{key:"channel",value:"#"+channel.name}, {key:"channel",value:"#"+channel.name},
+7 -7
View File
@@ -1,30 +1,30 @@
/////////////////////////////////////// ///////////////////////////////////////
//VERIFYBAR SYSTEM //VERIFYBAR SYSTEM
/////////////////////////////////////// ///////////////////////////////////////
import {openticket, api, utilities} from "../index" import {opendiscord, api, utilities} from "../index"
export const registerButtonResponders = async () => { export const registerButtonResponders = async () => {
//VERIFYBAR SUCCESS //VERIFYBAR SUCCESS
openticket.responders.buttons.add(new api.ODButtonResponder("openticket:verifybar-success",/^od:verifybar-success_([^_]+)/)) opendiscord.responders.buttons.add(new api.ODButtonResponder("openticket:verifybar-success",/^od:verifybar-success_([^_]+)/))
openticket.responders.buttons.get("openticket:verifybar-success").workers.add( opendiscord.responders.buttons.get("openticket:verifybar-success").workers.add(
new api.ODWorker("openticket:handle-verifybar",0,async (instance,params,source,cancel) => { new api.ODWorker("openticket:handle-verifybar",0,async (instance,params,source,cancel) => {
const id = instance.interaction.customId.split("_")[1] const id = instance.interaction.customId.split("_")[1]
const customData = instance.interaction.customId.split("_")[2] as string|undefined const customData = instance.interaction.customId.split("_")[2] as string|undefined
const verifybar = openticket.verifybars.get(id) const verifybar = opendiscord.verifybars.get(id)
if (!verifybar) return if (!verifybar) return
if (verifybar.success) await verifybar.success.executeWorkers(instance,"verifybar",{data:customData ?? null,verifybarMessage:instance.message}) if (verifybar.success) await verifybar.success.executeWorkers(instance,"verifybar",{data:customData ?? null,verifybarMessage:instance.message})
}) })
) )
//VERIFYBAR FAILURE //VERIFYBAR FAILURE
openticket.responders.buttons.add(new api.ODButtonResponder("openticket:verifybar-failure",/^od:verifybar-failure_([^_]+)/)) opendiscord.responders.buttons.add(new api.ODButtonResponder("openticket:verifybar-failure",/^od:verifybar-failure_([^_]+)/))
openticket.responders.buttons.get("openticket:verifybar-failure").workers.add( opendiscord.responders.buttons.get("openticket:verifybar-failure").workers.add(
new api.ODWorker("openticket:handle-verifybar",0,async (instance,params,source,cancel) => { new api.ODWorker("openticket:handle-verifybar",0,async (instance,params,source,cancel) => {
const id = instance.interaction.customId.split("_")[1] const id = instance.interaction.customId.split("_")[1]
const customData = instance.interaction.customId.split("_")[2] as string|undefined const customData = instance.interaction.customId.split("_")[2] as string|undefined
const verifybar = openticket.verifybars.get(id) const verifybar = opendiscord.verifybars.get(id)
if (!verifybar) return if (!verifybar) return
if (verifybar.failure) await verifybar.failure.executeWorkers(instance,"verifybar",{data:customData ?? null,verifybarMessage:instance.message}) if (verifybar.failure) await verifybar.failure.executeWorkers(instance,"verifybar",{data:customData ?? null,verifybarMessage:instance.message})
}) })
+30 -30
View File
@@ -1,24 +1,24 @@
/////////////////////////////////////// ///////////////////////////////////////
//TICKET MOVING SYSTEM //TICKET MOVING SYSTEM
/////////////////////////////////////// ///////////////////////////////////////
import {openticket, api, utilities} from "../index" import {opendiscord, api, utilities} from "../index"
import * as discord from "discord.js" import * as discord from "discord.js"
const generalConfig = openticket.configs.get("openticket:general") const generalConfig = opendiscord.configs.get("openticket:general")
export const registerActions = async () => { export const registerActions = async () => {
openticket.actions.add(new api.ODAction("openticket:move-ticket")) opendiscord.actions.add(new api.ODAction("openticket:move-ticket"))
openticket.actions.get("openticket:move-ticket").workers.add([ opendiscord.actions.get("openticket:move-ticket").workers.add([
new api.ODWorker("openticket:move-ticket",2,async (instance,params,source,cancel) => { new api.ODWorker("openticket:move-ticket",2,async (instance,params,source,cancel) => {
const {guild,channel,user,ticket,reason,data} = params const {guild,channel,user,ticket,reason,data} = params
if (channel.isThread()) throw new api.ODSystemError("Unable to move ticket! Open Ticket doesn't support threads!") if (channel.isThread()) throw new api.ODSystemError("Unable to move ticket! Open Ticket doesn't support threads!")
await openticket.events.get("onTicketMove").emit([ticket,user,channel,reason]) await opendiscord.events.get("onTicketMove").emit([ticket,user,channel,reason])
ticket.option = data ticket.option = data
//update stats //update stats
await openticket.stats.get("openticket:global").setStat("openticket:tickets-moved",1,"increase") await opendiscord.stats.get("openticket:global").setStat("openticket:tickets-moved",1,"increase")
await openticket.stats.get("openticket:user").setStat("openticket:tickets-moved",user.id,1,"increase") await opendiscord.stats.get("openticket:user").setStat("openticket:tickets-moved",user.id,1,"increase")
//get new channel properties //get new channel properties
const channelPrefix = ticket.option.get("openticket:channel-prefix").value const channelPrefix = ticket.option.get("openticket:channel-prefix").value
@@ -44,10 +44,10 @@ export const registerActions = async () => {
categoryMode = "closed" categoryMode = "closed"
}else if (channelCategory != ""){ }else if (channelCategory != ""){
//category enabled //category enabled
const normalCategory = await openticket.client.fetchGuildCategoryChannel(guild,channelCategory) const normalCategory = await opendiscord.client.fetchGuildCategoryChannel(guild,channelCategory)
if (!normalCategory){ if (!normalCategory){
//default category was not found //default category was not found
openticket.log("Ticket Move Error: Unable to find category! #1","error",[ opendiscord.log("Ticket Move Error: Unable to find category! #1","error",[
{key:"categoryid",value:channelCategory}, {key:"categoryid",value:channelCategory},
{key:"backup",value:"false"} {key:"backup",value:"false"}
]) ])
@@ -55,10 +55,10 @@ export const registerActions = async () => {
//default category was found //default category was found
if (normalCategory.children.cache.size >= 50 && channelBackupCategory != ""){ if (normalCategory.children.cache.size >= 50 && channelBackupCategory != ""){
//use backup category //use backup category
const backupCategory = await openticket.client.fetchGuildCategoryChannel(guild,channelBackupCategory) const backupCategory = await opendiscord.client.fetchGuildCategoryChannel(guild,channelBackupCategory)
if (!backupCategory){ if (!backupCategory){
//default category was not found //default category was not found
openticket.log("Ticket Move Error: Unable to find category! #2","error",[ opendiscord.log("Ticket Move Error: Unable to find category! #2","error",[
{key:"categoryid",value:channelBackupCategory}, {key:"categoryid",value:channelBackupCategory},
{key:"backup",value:"true"} {key:"backup",value:"true"}
]) ])
@@ -77,17 +77,17 @@ export const registerActions = async () => {
try { try {
//only move category when not the same. //only move category when not the same.
if (channel.parentId != category) await utilities.timedAwait(channel.setParent(category,{lockPermissions:false}),2500,(err) => { if (channel.parentId != category) await utilities.timedAwait(channel.setParent(category,{lockPermissions:false}),2500,(err) => {
openticket.log("Failed to change channel category on ticket move","error") opendiscord.log("Failed to change channel category on ticket move","error")
}) })
ticket.get("openticket:category-mode").value = categoryMode ticket.get("openticket:category-mode").value = categoryMode
ticket.get("openticket:category").value = category ticket.get("openticket:category").value = category
}catch(e){ }catch(e){
openticket.log("Unable to move ticket to 'moved category'!","error",[ opendiscord.log("Unable to move ticket to 'moved category'!","error",[
{key:"channel",value:"#"+channel.name}, {key:"channel",value:"#"+channel.name},
{key:"channelid",value:channel.id,hidden:true}, {key:"channelid",value:channel.id,hidden:true},
{key:"categoryid",value:category ?? "/"} {key:"categoryid",value:category ?? "/"}
]) ])
openticket.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException")) opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
} }
//handle permissions //handle permissions
@@ -97,7 +97,7 @@ export const registerActions = async () => {
allow:[], allow:[],
deny:["ViewChannel","SendMessages","ReadMessageHistory"] deny:["ViewChannel","SendMessages","ReadMessageHistory"]
}] }]
const globalAdmins = openticket.configs.get("openticket:general").data.globalAdmins const globalAdmins = opendiscord.configs.get("openticket:general").data.globalAdmins
const optionAdmins = ticket.option.get("openticket:admins").value const optionAdmins = ticket.option.get("openticket:admins").value
const readonlyAdmins = ticket.option.get("openticket:admins-readonly").value const readonlyAdmins = ticket.option.get("openticket:admins-readonly").value
@@ -140,7 +140,7 @@ export const registerActions = async () => {
try{ try{
await channel.permissionOverwrites.set(permissions) await channel.permissionOverwrites.set(permissions)
}catch{ }catch{
openticket.log("Failed to reset channel permissions on ticket move!","error") opendiscord.log("Failed to reset channel permissions on ticket move!","error")
} }
//handle participants //handle participants
@@ -158,53 +158,53 @@ export const registerActions = async () => {
const originalName = channel.name const originalName = channel.name
try{ try{
await utilities.timedAwait(channel.setName(channelName),2500,(err) => { await utilities.timedAwait(channel.setName(channelName),2500,(err) => {
openticket.log("Failed to rename channel on ticket move","error") opendiscord.log("Failed to rename channel on ticket move","error")
}) })
}catch(err){ }catch(err){
await channel.send((await openticket.builders.messages.getSafe("openticket:error-channel-rename").build("ticket-move",{guild,channel,user,originalName,newName:channelName})).message) await channel.send((await opendiscord.builders.messages.getSafe("openticket:error-channel-rename").build("ticket-move",{guild,channel,user,originalName,newName:channelName})).message)
} }
try{ try{
if (channel.type == discord.ChannelType.GuildText) channel.setTopic(channelDescription) if (channel.type == discord.ChannelType.GuildText) channel.setTopic(channelDescription)
}catch{} }catch{}
//update ticket message //update ticket message
const ticketMessage = await openticket.tickets.getTicketMessage(ticket) const ticketMessage = await opendiscord.tickets.getTicketMessage(ticket)
if (ticketMessage){ if (ticketMessage){
try{ try{
ticketMessage.edit((await openticket.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket})).message) ticketMessage.edit((await opendiscord.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket})).message)
}catch(e){ }catch(e){
openticket.log("Unable to edit ticket message on ticket renaming!","error",[ opendiscord.log("Unable to edit ticket message on ticket renaming!","error",[
{key:"channel",value:"#"+channel.name}, {key:"channel",value:"#"+channel.name},
{key:"channelid",value:channel.id,hidden:true}, {key:"channelid",value:channel.id,hidden:true},
{key:"messageid",value:ticketMessage.id}, {key:"messageid",value:ticketMessage.id},
{key:"option",value:ticket.option.id.value} {key:"option",value:ticket.option.id.value}
]) ])
openticket.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException")) opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
} }
} }
//reply with new message //reply with new message
if (params.sendMessage) await channel.send((await openticket.builders.messages.getSafe("openticket:move-message").build(source,{guild,channel,user,ticket,reason,data})).message) if (params.sendMessage) await channel.send((await opendiscord.builders.messages.getSafe("openticket:move-message").build(source,{guild,channel,user,ticket,reason,data})).message)
ticket.get("openticket:busy").value = false ticket.get("openticket:busy").value = false
await openticket.events.get("afterTicketMoved").emit([ticket,user,channel,reason]) await opendiscord.events.get("afterTicketMoved").emit([ticket,user,channel,reason])
}), }),
new api.ODWorker("openticket:discord-logs",1,async (instance,params,source,cancel) => { new api.ODWorker("openticket:discord-logs",1,async (instance,params,source,cancel) => {
const {guild,channel,user,ticket,reason,data} = params const {guild,channel,user,ticket,reason,data} = params
//to logs //to logs
if (generalConfig.data.system.logs.enabled && generalConfig.data.system.messages.moving.logs){ if (generalConfig.data.system.logs.enabled && generalConfig.data.system.messages.moving.logs){
const logChannel = openticket.posts.get("openticket:logs") const logChannel = opendiscord.posts.get("openticket:logs")
if (logChannel) logChannel.send(await openticket.builders.messages.getSafe("openticket:ticket-action-logs").build(source,{guild,channel,user,ticket,mode:"move",reason,additionalData:data})) if (logChannel) logChannel.send(await opendiscord.builders.messages.getSafe("openticket:ticket-action-logs").build(source,{guild,channel,user,ticket,mode:"move",reason,additionalData:data}))
} }
//to dm //to dm
const creator = await openticket.tickets.getTicketUser(ticket,"creator") const creator = await opendiscord.tickets.getTicketUser(ticket,"creator")
if (creator && generalConfig.data.system.messages.moving.dm) await openticket.client.sendUserDm(creator,await openticket.builders.messages.getSafe("openticket:ticket-action-dm").build(source,{guild,channel,user,ticket,mode:"move",reason,additionalData:data})) if (creator && generalConfig.data.system.messages.moving.dm) await opendiscord.client.sendUserDm(creator,await opendiscord.builders.messages.getSafe("openticket:ticket-action-dm").build(source,{guild,channel,user,ticket,mode:"move",reason,additionalData:data}))
}), }),
new api.ODWorker("openticket:logs",0,(instance,params,source,cancel) => { new api.ODWorker("openticket:logs",0,(instance,params,source,cancel) => {
const {guild,channel,user,ticket} = params const {guild,channel,user,ticket} = params
openticket.log(user.displayName+" moved a ticket!","info",[ opendiscord.log(user.displayName+" moved a ticket!","info",[
{key:"user",value:user.username}, {key:"user",value:user.username},
{key:"userid",value:user.id,hidden:true}, {key:"userid",value:user.id,hidden:true},
{key:"channel",value:"#"+channel.name}, {key:"channel",value:"#"+channel.name},
@@ -214,7 +214,7 @@ export const registerActions = async () => {
]) ])
}) })
]) ])
openticket.actions.get("openticket:move-ticket").workers.backupWorker = new api.ODWorker("openticket:cancel-busy",0,(instance,params) => { opendiscord.actions.get("openticket:move-ticket").workers.backupWorker = new api.ODWorker("openticket:cancel-busy",0,(instance,params) => {
//set busy to false in case of crash or cancel //set busy to false in case of crash or cancel
params.ticket.get("openticket:busy").value = false params.ticket.get("openticket:busy").value = false
}) })
+65 -65
View File
@@ -1,19 +1,19 @@
/////////////////////////////////////// ///////////////////////////////////////
//TICKET PINNING SYSTEM //TICKET PINNING SYSTEM
/////////////////////////////////////// ///////////////////////////////////////
import {openticket, api, utilities} from "../index" import {opendiscord, api, utilities} from "../index"
import * as discord from "discord.js" import * as discord from "discord.js"
const generalConfig = openticket.configs.get("openticket:general") const generalConfig = opendiscord.configs.get("openticket:general")
export const registerActions = async () => { export const registerActions = async () => {
openticket.actions.add(new api.ODAction("openticket:pin-ticket")) opendiscord.actions.add(new api.ODAction("openticket:pin-ticket"))
openticket.actions.get("openticket:pin-ticket").workers.add([ opendiscord.actions.get("openticket:pin-ticket").workers.add([
new api.ODWorker("openticket:pin-ticket",2,async (instance,params,source,cancel) => { new api.ODWorker("openticket:pin-ticket",2,async (instance,params,source,cancel) => {
const {guild,channel,user,ticket,reason} = params const {guild,channel,user,ticket,reason} = params
if (channel.isThread()) throw new api.ODSystemError("Unable to pin ticket! Open Ticket doesn't support threads!") if (channel.isThread()) throw new api.ODSystemError("Unable to pin ticket! Open Ticket doesn't support threads!")
await openticket.events.get("onTicketPin").emit([ticket,user,channel,reason]) await opendiscord.events.get("onTicketPin").emit([ticket,user,channel,reason])
//update ticket //update ticket
ticket.get("openticket:pinned").value = true ticket.get("openticket:pinned").value = true
@@ -22,8 +22,8 @@ export const registerActions = async () => {
ticket.get("openticket:busy").value = true ticket.get("openticket:busy").value = true
//update stats //update stats
await openticket.stats.get("openticket:global").setStat("openticket:tickets-pinned",1,"increase") await opendiscord.stats.get("openticket:global").setStat("openticket:tickets-pinned",1,"increase")
await openticket.stats.get("openticket:user").setStat("openticket:tickets-pinned",user.id,1,"increase") await opendiscord.stats.get("openticket:user").setStat("openticket:tickets-pinned",user.id,1,"increase")
//move to top of category //move to top of category
if (channel.parent){ if (channel.parent){
@@ -35,50 +35,50 @@ export const registerActions = async () => {
const newName = "📌"+channel.name const newName = "📌"+channel.name
try{ try{
await utilities.timedAwait(channel.setName(newName),2500,(err) => { await utilities.timedAwait(channel.setName(newName),2500,(err) => {
openticket.log("Failed to rename channel on ticket pin","error") opendiscord.log("Failed to rename channel on ticket pin","error")
}) })
}catch(err){ }catch(err){
await channel.send((await openticket.builders.messages.getSafe("openticket:error-channel-rename").build("ticket-pin",{guild,channel,user,originalName,newName})).message) await channel.send((await opendiscord.builders.messages.getSafe("openticket:error-channel-rename").build("ticket-pin",{guild,channel,user,originalName,newName})).message)
} }
//update ticket message //update ticket message
const ticketMessage = await openticket.tickets.getTicketMessage(ticket) const ticketMessage = await opendiscord.tickets.getTicketMessage(ticket)
if (ticketMessage){ if (ticketMessage){
try{ try{
ticketMessage.edit((await openticket.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket})).message) ticketMessage.edit((await opendiscord.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket})).message)
}catch(e){ }catch(e){
openticket.log("Unable to edit ticket message on ticket pinning!","error",[ opendiscord.log("Unable to edit ticket message on ticket pinning!","error",[
{key:"channel",value:"#"+channel.name}, {key:"channel",value:"#"+channel.name},
{key:"channelid",value:channel.id,hidden:true}, {key:"channelid",value:channel.id,hidden:true},
{key:"message",value:ticketMessage.id}, {key:"message",value:ticketMessage.id},
{key:"option",value:ticket.option.id.value} {key:"option",value:ticket.option.id.value}
]) ])
openticket.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException")) opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
} }
} }
//reply with new message //reply with new message
if (params.sendMessage) await channel.send((await openticket.builders.messages.getSafe("openticket:pin-message").build(source,{guild,channel,user,ticket,reason})).message) if (params.sendMessage) await channel.send((await opendiscord.builders.messages.getSafe("openticket:pin-message").build(source,{guild,channel,user,ticket,reason})).message)
ticket.get("openticket:busy").value = false ticket.get("openticket:busy").value = false
await openticket.events.get("afterTicketPinned").emit([ticket,user,channel,reason]) await opendiscord.events.get("afterTicketPinned").emit([ticket,user,channel,reason])
}), }),
new api.ODWorker("openticket:discord-logs",1,async (instance,params,source,cancel) => { new api.ODWorker("openticket:discord-logs",1,async (instance,params,source,cancel) => {
const {guild,channel,user,ticket,reason} = params const {guild,channel,user,ticket,reason} = params
//to logs //to logs
if (generalConfig.data.system.logs.enabled && generalConfig.data.system.messages.pinning.logs){ if (generalConfig.data.system.logs.enabled && generalConfig.data.system.messages.pinning.logs){
const logChannel = openticket.posts.get("openticket:logs") const logChannel = opendiscord.posts.get("openticket:logs")
if (logChannel) logChannel.send(await openticket.builders.messages.getSafe("openticket:ticket-action-logs").build(source,{guild,channel,user,ticket,mode:"pin",reason,additionalData:null})) if (logChannel) logChannel.send(await opendiscord.builders.messages.getSafe("openticket:ticket-action-logs").build(source,{guild,channel,user,ticket,mode:"pin",reason,additionalData:null}))
} }
//to dm //to dm
const creator = await openticket.tickets.getTicketUser(ticket,"creator") const creator = await opendiscord.tickets.getTicketUser(ticket,"creator")
if (creator && generalConfig.data.system.messages.pinning.dm) await openticket.client.sendUserDm(creator,await openticket.builders.messages.getSafe("openticket:ticket-action-dm").build(source,{guild,channel,user,ticket,mode:"pin",reason,additionalData:null})) if (creator && generalConfig.data.system.messages.pinning.dm) await opendiscord.client.sendUserDm(creator,await opendiscord.builders.messages.getSafe("openticket:ticket-action-dm").build(source,{guild,channel,user,ticket,mode:"pin",reason,additionalData:null}))
}), }),
new api.ODWorker("openticket:logs",0,(instance,params,source,cancel) => { new api.ODWorker("openticket:logs",0,(instance,params,source,cancel) => {
const {guild,channel,user,ticket} = params const {guild,channel,user,ticket} = params
openticket.log(user.displayName+" pinned a ticket!","info",[ opendiscord.log(user.displayName+" pinned a ticket!","info",[
{key:"user",value:user.username}, {key:"user",value:user.username},
{key:"userid",value:user.id,hidden:true}, {key:"userid",value:user.id,hidden:true},
{key:"channel",value:"#"+channel.name}, {key:"channel",value:"#"+channel.name},
@@ -92,37 +92,37 @@ export const registerActions = async () => {
export const registerVerifyBars = async () => { export const registerVerifyBars = async () => {
//PIN TICKET TICKET MESSAGE //PIN TICKET TICKET MESSAGE
openticket.verifybars.add(new api.ODVerifyBar("openticket:pin-ticket-ticket-message",openticket.builders.messages.getSafe("openticket:verifybar-ticket-message"),!generalConfig.data.system.disableVerifyBars)) opendiscord.verifybars.add(new api.ODVerifyBar("openticket:pin-ticket-ticket-message",opendiscord.builders.messages.getSafe("openticket:verifybar-ticket-message"),!generalConfig.data.system.disableVerifyBars))
openticket.verifybars.get("openticket:pin-ticket-ticket-message").success.add([ opendiscord.verifybars.get("openticket:pin-ticket-ticket-message").success.add([
new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => { new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => {
const permissionMode = generalConfig.data.system.permissions.pin const permissionMode = generalConfig.data.system.permissions.pin
if (permissionMode == "none"){ if (permissionMode == "none"){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel() return cancel()
}else if (permissionMode == "everyone") return }else if (permissionMode == "everyone") return
else if (permissionMode == "admin"){ else if (permissionMode == "admin"){
if (!openticket.permissions.hasPermissions("support",await openticket.permissions.getPermissions(instance.user,instance.channel,instance.guild))){ if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
return cancel() return cancel()
}else return }else return
}else{ }else{
if (!instance.guild || !instance.member){ if (!instance.guild || !instance.member){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
return cancel() return cancel()
} }
const role = await openticket.client.fetchGuildRole(instance.guild,permissionMode) const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
if (!role){ if (!role){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
return cancel() return cancel()
} }
if (!role.members.has(instance.member.id)){ if (!role.members.has(instance.member.id)){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel() return cancel()
}else return }else return
} }
@@ -130,86 +130,86 @@ export const registerVerifyBars = async () => {
new api.ODWorker("openticket:pin-ticket",0,async (instance,params,source,cancel) => { new api.ODWorker("openticket:pin-ticket",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance const {guild,channel,user} = instance
if (!guild){ if (!guild){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
return cancel() return cancel()
} }
const ticket = openticket.tickets.get(channel.id) const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){ if (!ticket || channel.isDMBased()){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
//return when already pinned //return when already pinned
if (ticket.get("openticket:pinned").value){ if (ticket.get("openticket:pinned").value){
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild,channel,user,error:openticket.languages.getTranslation("errors.actionInvalid.pin"),layout:"simple"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build("button",{guild,channel,user,error:opendiscord.languages.getTranslation("errors.actionInvalid.pin"),layout:"simple"}))
return cancel() return cancel()
} }
//return when busy //return when busy
if (ticket.get("openticket:busy").value){ if (ticket.get("openticket:busy").value){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
//start pinning ticket //start pinning ticket
if (params.data == "reason"){ if (params.data == "reason"){
//pin with reason //pin with reason
instance.modal(await openticket.builders.modals.getSafe("openticket:pin-ticket-reason").build("ticket-message",{guild,channel,user,ticket})) instance.modal(await opendiscord.builders.modals.getSafe("openticket:pin-ticket-reason").build("ticket-message",{guild,channel,user,ticket}))
}else{ }else{
//pin without reason //pin without reason
await instance.defer("update",false) await instance.defer("update",false)
await openticket.actions.get("openticket:pin-ticket").run("ticket-message",{guild,channel,user,ticket,reason:null,sendMessage:true}) await opendiscord.actions.get("openticket:pin-ticket").run("ticket-message",{guild,channel,user,ticket,reason:null,sendMessage:true})
await instance.update(await openticket.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket})) await instance.update(await opendiscord.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket}))
} }
}) })
]) ])
openticket.verifybars.get("openticket:pin-ticket-ticket-message").failure.add([ opendiscord.verifybars.get("openticket:pin-ticket-ticket-message").failure.add([
new api.ODWorker("openticket:back-to-ticket-message",0,async (instance,params,source,cancel) => { new api.ODWorker("openticket:back-to-ticket-message",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance const {guild,channel,user} = instance
if (!guild){ if (!guild){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
return cancel() return cancel()
} }
const ticket = openticket.tickets.get(channel.id) const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){ if (!ticket || channel.isDMBased()){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
await instance.update(await openticket.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket})) await instance.update(await opendiscord.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket}))
}) })
]) ])
//PIN TICKET UNPIN MESSAGE //PIN TICKET UNPIN MESSAGE
openticket.verifybars.add(new api.ODVerifyBar("openticket:pin-ticket-unpin-message",openticket.builders.messages.getSafe("openticket:verifybar-unpin-message"),!generalConfig.data.system.disableVerifyBars)) opendiscord.verifybars.add(new api.ODVerifyBar("openticket:pin-ticket-unpin-message",opendiscord.builders.messages.getSafe("openticket:verifybar-unpin-message"),!generalConfig.data.system.disableVerifyBars))
openticket.verifybars.get("openticket:pin-ticket-unpin-message").success.add([ opendiscord.verifybars.get("openticket:pin-ticket-unpin-message").success.add([
new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => { new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => {
const permissionMode = generalConfig.data.system.permissions.pin const permissionMode = generalConfig.data.system.permissions.pin
if (permissionMode == "none"){ if (permissionMode == "none"){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel() return cancel()
}else if (permissionMode == "everyone") return }else if (permissionMode == "everyone") return
else if (permissionMode == "admin"){ else if (permissionMode == "admin"){
if (!openticket.permissions.hasPermissions("support",await openticket.permissions.getPermissions(instance.user,instance.channel,instance.guild))){ if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
return cancel() return cancel()
}else return }else return
}else{ }else{
if (!instance.guild || !instance.member){ if (!instance.guild || !instance.member){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
return cancel() return cancel()
} }
const role = await openticket.client.fetchGuildRole(instance.guild,permissionMode) const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
if (!role){ if (!role){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
return cancel() return cancel()
} }
if (!role.members.has(instance.member.id)){ if (!role.members.has(instance.member.id)){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel() return cancel()
}else return }else return
} }
@@ -217,58 +217,58 @@ export const registerVerifyBars = async () => {
new api.ODWorker("openticket:pin-ticket",0,async (instance,params,source,cancel) => { new api.ODWorker("openticket:pin-ticket",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance const {guild,channel,user} = instance
if (!guild){ if (!guild){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
return cancel() return cancel()
} }
const ticket = openticket.tickets.get(channel.id) const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){ if (!ticket || channel.isDMBased()){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
//return when already pinned //return when already pinned
if (ticket.get("openticket:pinned").value){ if (ticket.get("openticket:pinned").value){
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild,channel,user,error:openticket.languages.getTranslation("errors.actionInvalid.pin"),layout:"simple"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build("button",{guild,channel,user,error:opendiscord.languages.getTranslation("errors.actionInvalid.pin"),layout:"simple"}))
return cancel() return cancel()
} }
//return when busy //return when busy
if (ticket.get("openticket:busy").value){ if (ticket.get("openticket:busy").value){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
//start pinning ticket //start pinning ticket
if (params.data == "reason"){ if (params.data == "reason"){
//pin with reason //pin with reason
instance.modal(await openticket.builders.modals.getSafe("openticket:pin-ticket-reason").build("unpin-message",{guild,channel,user,ticket})) instance.modal(await opendiscord.builders.modals.getSafe("openticket:pin-ticket-reason").build("unpin-message",{guild,channel,user,ticket}))
}else{ }else{
//pin without reason //pin without reason
await instance.defer("update",false) await instance.defer("update",false)
await openticket.actions.get("openticket:pin-ticket").run("unpin-message",{guild,channel,user,ticket,reason:null,sendMessage:false}) await opendiscord.actions.get("openticket:pin-ticket").run("unpin-message",{guild,channel,user,ticket,reason:null,sendMessage:false})
await instance.update(await openticket.builders.messages.getSafe("openticket:pin-message").build("unpin-message",{guild,channel,user,ticket,reason:null})) await instance.update(await opendiscord.builders.messages.getSafe("openticket:pin-message").build("unpin-message",{guild,channel,user,ticket,reason:null}))
} }
}) })
]) ])
openticket.verifybars.get("openticket:pin-ticket-unpin-message").failure.add([ opendiscord.verifybars.get("openticket:pin-ticket-unpin-message").failure.add([
new api.ODWorker("openticket:back-to-unpin-message",0,async (instance,params,source,cancel) => { new api.ODWorker("openticket:back-to-unpin-message",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance const {guild,channel,user} = instance
const {verifybarMessage} = params const {verifybarMessage} = params
if (!guild){ if (!guild){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
return cancel() return cancel()
} }
const ticket = openticket.tickets.get(channel.id) const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){ if (!ticket || channel.isDMBased()){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
const rawReason = (verifybarMessage && verifybarMessage.embeds[0] && verifybarMessage.embeds[0].fields[0]) ? verifybarMessage.embeds[0].fields[0].value : null const rawReason = (verifybarMessage && verifybarMessage.embeds[0] && verifybarMessage.embeds[0].fields[0]) ? verifybarMessage.embeds[0].fields[0].value : null
const reason = (rawReason == null) ? null : rawReason.substring(3,rawReason.length-3) const reason = (rawReason == null) ? null : rawReason.substring(3,rawReason.length-3)
await instance.update(await openticket.builders.messages.getSafe("openticket:unpin-message").build("other",{guild,channel,user,ticket,reason})) await instance.update(await opendiscord.builders.messages.getSafe("openticket:unpin-message").build("other",{guild,channel,user,ticket,reason}))
}) })
]) ])
openticket.actions.get("openticket:pin-ticket").workers.backupWorker = new api.ODWorker("openticket:cancel-busy",0,(instance,params) => { opendiscord.actions.get("openticket:pin-ticket").workers.backupWorker = new api.ODWorker("openticket:cancel-busy",0,(instance,params) => {
//set busy to false in case of crash or cancel //set busy to false in case of crash or cancel
params.ticket.get("openticket:busy").value = false params.ticket.get("openticket:busy").value = false
}) })
+12 -12
View File
@@ -1,32 +1,32 @@
/////////////////////////////////////// ///////////////////////////////////////
//REACTION ROLE SYSTEM //REACTION ROLE SYSTEM
/////////////////////////////////////// ///////////////////////////////////////
import {openticket, api, utilities} from "../index" import {opendiscord, api, utilities} from "../index"
import * as discord from "discord.js" import * as discord from "discord.js"
export const registerActions = async () => { export const registerActions = async () => {
openticket.actions.add(new api.ODAction("openticket:reaction-role")) opendiscord.actions.add(new api.ODAction("openticket:reaction-role"))
openticket.actions.get("openticket:reaction-role").workers.add([ opendiscord.actions.get("openticket:reaction-role").workers.add([
new api.ODWorker("openticket:reaction-role",2,async (instance,params,source,cancel) => { new api.ODWorker("openticket:reaction-role",2,async (instance,params,source,cancel) => {
const {guild,user,option,overwriteMode} = params const {guild,user,option,overwriteMode} = params
const role = openticket.roles.get(option.id) const role = opendiscord.roles.get(option.id)
if (!role) throw new api.ODSystemError("ODAction(ot:reaction-role) => Unknown reaction role (ODRole)") if (!role) throw new api.ODSystemError("ODAction(ot:reaction-role) => Unknown reaction role (ODRole)")
instance.role = role instance.role = role
const mode = (overwriteMode) ? overwriteMode : role.get("openticket:mode").value const mode = (overwriteMode) ? overwriteMode : role.get("openticket:mode").value
await openticket.events.get("onRoleUpdate").emit([user,role]) await opendiscord.events.get("onRoleUpdate").emit([user,role])
//get guild member //get guild member
const member = await openticket.client.fetchGuildMember(guild,user.id) const member = await opendiscord.client.fetchGuildMember(guild,user.id)
if (!member) throw new api.ODSystemError("ODAction(ot:reaction-role) => User isn't a member of the server!") if (!member) throw new api.ODSystemError("ODAction(ot:reaction-role) => User isn't a member of the server!")
//get all roles //get all roles
const roleIds = role.get("openticket:roles").value const roleIds = role.get("openticket:roles").value
const roles: discord.Role[] = [] const roles: discord.Role[] = []
for (const id of roleIds){ for (const id of roleIds){
const r = await openticket.client.fetchGuildRole(guild,id) const r = await opendiscord.client.fetchGuildRole(guild,id)
if (r) roles.push(r) if (r) roles.push(r)
else openticket.log("Unable to find role in server!","warning",[ else opendiscord.log("Unable to find role in server!","warning",[
{key:"roleid",value:id} {key:"roleid",value:id}
]) ])
} }
@@ -58,9 +58,9 @@ export const registerActions = async () => {
const removeRoleIds = role.get("openticket:remove-roles-on-add").value const removeRoleIds = role.get("openticket:remove-roles-on-add").value
const removeRoles: discord.Role[] = [] const removeRoles: discord.Role[] = []
for (const id of removeRoleIds){ for (const id of removeRoleIds){
const r = await openticket.client.fetchGuildRole(guild,id) const r = await opendiscord.client.fetchGuildRole(guild,id)
if (r) removeRoles.push(r) if (r) removeRoles.push(r)
else openticket.log("Unable to find role in server!","warning",[ else opendiscord.log("Unable to find role in server!","warning",[
{key:"roleid",value:id} {key:"roleid",value:id}
]) ])
} }
@@ -79,11 +79,11 @@ export const registerActions = async () => {
//update instance & finish event //update instance & finish event
instance.result = result instance.result = result
await openticket.events.get("afterRolesUpdated").emit([user,role]) await opendiscord.events.get("afterRolesUpdated").emit([user,role])
}), }),
new api.ODWorker("openticket:logs",0,(instance,params,source,cancel) => { new api.ODWorker("openticket:logs",0,(instance,params,source,cancel) => {
const {guild,user,option} = params const {guild,user,option} = params
openticket.log(user.displayName+" updated his roles!","info",[ opendiscord.log(user.displayName+" updated his roles!","info",[
{key:"user",value:user.username}, {key:"user",value:user.username},
{key:"userid",value:user.id,hidden:true}, {key:"userid",value:user.id,hidden:true},
{key:"method",value:source}, {key:"method",value:source},
+18 -18
View File
@@ -1,19 +1,19 @@
/////////////////////////////////////// ///////////////////////////////////////
//TICKET REMOVE USER SYSTEM //TICKET REMOVE USER SYSTEM
/////////////////////////////////////// ///////////////////////////////////////
import {openticket, api, utilities} from "../index" import {opendiscord, api, utilities} from "../index"
import * as discord from "discord.js" import * as discord from "discord.js"
const generalConfig = openticket.configs.get("openticket:general") const generalConfig = opendiscord.configs.get("openticket:general")
export const registerActions = async () => { export const registerActions = async () => {
openticket.actions.add(new api.ODAction("openticket:remove-ticket-user")) opendiscord.actions.add(new api.ODAction("openticket:remove-ticket-user"))
openticket.actions.get("openticket:remove-ticket-user").workers.add([ opendiscord.actions.get("openticket:remove-ticket-user").workers.add([
new api.ODWorker("openticket:remove-ticket-user",2,async (instance,params,source,cancel) => { new api.ODWorker("openticket:remove-ticket-user",2,async (instance,params,source,cancel) => {
const {guild,channel,user,ticket,reason,data} = params const {guild,channel,user,ticket,reason,data} = params
if (channel.isThread()) throw new api.ODSystemError("Unable to remove user from ticket! Open Ticket doesn't support threads!") if (channel.isThread()) throw new api.ODSystemError("Unable to remove user from ticket! Open Ticket doesn't support threads!")
await openticket.events.get("onTicketUserRemove").emit([ticket,user,data,channel,reason]) await opendiscord.events.get("onTicketUserRemove").emit([ticket,user,data,channel,reason])
//update ticket //update ticket
const index = ticket.get("openticket:participants").value.findIndex((p) => p.type == "user" && p.id == data.id) const index = ticket.get("openticket:participants").value.findIndex((p) => p.type == "user" && p.id == data.id)
@@ -26,46 +26,46 @@ export const registerActions = async () => {
try{ try{
await channel.permissionOverwrites.delete(data) await channel.permissionOverwrites.delete(data)
}catch{ }catch{
openticket.log("Failed to remove channel permission overwrites on remove-ticket-user","error") opendiscord.log("Failed to remove channel permission overwrites on remove-ticket-user","error")
} }
//update ticket message //update ticket message
const ticketMessage = await openticket.tickets.getTicketMessage(ticket) const ticketMessage = await opendiscord.tickets.getTicketMessage(ticket)
if (ticketMessage){ if (ticketMessage){
try{ try{
ticketMessage.edit((await openticket.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket})).message) ticketMessage.edit((await opendiscord.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket})).message)
}catch(e){ }catch(e){
openticket.log("Unable to edit ticket message on ticket user removal!","error",[ opendiscord.log("Unable to edit ticket message on ticket user removal!","error",[
{key:"channel",value:channel.id}, {key:"channel",value:channel.id},
{key:"message",value:ticketMessage.id}, {key:"message",value:ticketMessage.id},
{key:"option",value:ticket.option.id.value} {key:"option",value:ticket.option.id.value}
]) ])
openticket.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException")) opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
} }
} }
//reply with new message //reply with new message
if (params.sendMessage) await channel.send((await openticket.builders.messages.getSafe("openticket:remove-message").build(source,{guild,channel,user,ticket,reason,data})).message) if (params.sendMessage) await channel.send((await opendiscord.builders.messages.getSafe("openticket:remove-message").build(source,{guild,channel,user,ticket,reason,data})).message)
ticket.get("openticket:busy").value = false ticket.get("openticket:busy").value = false
await openticket.events.get("afterTicketUserRemoved").emit([ticket,user,data,channel,reason]) await opendiscord.events.get("afterTicketUserRemoved").emit([ticket,user,data,channel,reason])
}), }),
new api.ODWorker("openticket:discord-logs",1,async (instance,params,source,cancel) => { new api.ODWorker("openticket:discord-logs",1,async (instance,params,source,cancel) => {
const {guild,channel,user,ticket,reason,data} = params const {guild,channel,user,ticket,reason,data} = params
//to logs //to logs
if (generalConfig.data.system.logs.enabled && generalConfig.data.system.messages.removing.logs){ if (generalConfig.data.system.logs.enabled && generalConfig.data.system.messages.removing.logs){
const logChannel = openticket.posts.get("openticket:logs") const logChannel = opendiscord.posts.get("openticket:logs")
if (logChannel) logChannel.send(await openticket.builders.messages.getSafe("openticket:ticket-action-logs").build(source,{guild,channel,user,ticket,mode:"remove",reason,additionalData:data})) if (logChannel) logChannel.send(await opendiscord.builders.messages.getSafe("openticket:ticket-action-logs").build(source,{guild,channel,user,ticket,mode:"remove",reason,additionalData:data}))
} }
//to dm //to dm
const creator = await openticket.tickets.getTicketUser(ticket,"creator") const creator = await opendiscord.tickets.getTicketUser(ticket,"creator")
if (creator && generalConfig.data.system.messages.removing.dm) await openticket.client.sendUserDm(creator,await openticket.builders.messages.getSafe("openticket:ticket-action-dm").build(source,{guild,channel,user,ticket,mode:"remove",reason,additionalData:data})) if (creator && generalConfig.data.system.messages.removing.dm) await opendiscord.client.sendUserDm(creator,await opendiscord.builders.messages.getSafe("openticket:ticket-action-dm").build(source,{guild,channel,user,ticket,mode:"remove",reason,additionalData:data}))
}), }),
new api.ODWorker("openticket:logs",0,(instance,params,source,cancel) => { new api.ODWorker("openticket:logs",0,(instance,params,source,cancel) => {
const {guild,channel,user,ticket,data} = params const {guild,channel,user,ticket,data} = params
openticket.log(user.displayName+" removed "+data.displayName+" from a ticket!","info",[ opendiscord.log(user.displayName+" removed "+data.displayName+" from a ticket!","info",[
{key:"user",value:user.username}, {key:"user",value:user.username},
{key:"userid",value:user.id,hidden:true}, {key:"userid",value:user.id,hidden:true},
{key:"channel",value:"#"+channel.name}, {key:"channel",value:"#"+channel.name},
@@ -75,7 +75,7 @@ export const registerActions = async () => {
]) ])
}) })
]) ])
openticket.actions.get("openticket:remove-ticket-user").workers.backupWorker = new api.ODWorker("openticket:cancel-busy",0,(instance,params) => { opendiscord.actions.get("openticket:remove-ticket-user").workers.backupWorker = new api.ODWorker("openticket:cancel-busy",0,(instance,params) => {
//set busy to false in case of crash or cancel //set busy to false in case of crash or cancel
params.ticket.get("openticket:busy").value = false params.ticket.get("openticket:busy").value = false
}) })
+19 -19
View File
@@ -1,68 +1,68 @@
/////////////////////////////////////// ///////////////////////////////////////
//TICKET RENAMING SYSTEM //TICKET RENAMING SYSTEM
/////////////////////////////////////// ///////////////////////////////////////
import {openticket, api, utilities} from "../index" import {opendiscord, api, utilities} from "../index"
import * as discord from "discord.js" import * as discord from "discord.js"
const generalConfig = openticket.configs.get("openticket:general") const generalConfig = opendiscord.configs.get("openticket:general")
export const registerActions = async () => { export const registerActions = async () => {
openticket.actions.add(new api.ODAction("openticket:rename-ticket")) opendiscord.actions.add(new api.ODAction("openticket:rename-ticket"))
openticket.actions.get("openticket:rename-ticket").workers.add([ opendiscord.actions.get("openticket:rename-ticket").workers.add([
new api.ODWorker("openticket:rename-ticket",2,async (instance,params,source,cancel) => { new api.ODWorker("openticket:rename-ticket",2,async (instance,params,source,cancel) => {
const {guild,channel,user,ticket,reason,data} = params const {guild,channel,user,ticket,reason,data} = params
if (channel.isThread()) throw new api.ODSystemError("Unable to rename ticket! Open Ticket doesn't support threads!") if (channel.isThread()) throw new api.ODSystemError("Unable to rename ticket! Open Ticket doesn't support threads!")
await openticket.events.get("onTicketRename").emit([ticket,user,channel,reason]) await opendiscord.events.get("onTicketRename").emit([ticket,user,channel,reason])
//rename channel (and give error when crashed) //rename channel (and give error when crashed)
const originalName = channel.name const originalName = channel.name
try{ try{
await utilities.timedAwait(channel.setName(data),2500,(err) => { await utilities.timedAwait(channel.setName(data),2500,(err) => {
openticket.log("Failed to rename channel on ticket rename","error") opendiscord.log("Failed to rename channel on ticket rename","error")
}) })
}catch(err){ }catch(err){
await channel.send((await openticket.builders.messages.getSafe("openticket:error-channel-rename").build("ticket-rename",{guild,channel,user,originalName,newName:data})).message) await channel.send((await opendiscord.builders.messages.getSafe("openticket:error-channel-rename").build("ticket-rename",{guild,channel,user,originalName,newName:data})).message)
} }
//update ticket message //update ticket message
const ticketMessage = await openticket.tickets.getTicketMessage(ticket) const ticketMessage = await opendiscord.tickets.getTicketMessage(ticket)
if (ticketMessage){ if (ticketMessage){
try{ try{
ticketMessage.edit((await openticket.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket})).message) ticketMessage.edit((await opendiscord.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket})).message)
}catch(e){ }catch(e){
openticket.log("Unable to edit ticket message on ticket renaming!","error",[ opendiscord.log("Unable to edit ticket message on ticket renaming!","error",[
{key:"channel",value:"#"+channel.name}, {key:"channel",value:"#"+channel.name},
{key:"channelid",value:channel.id,hidden:true}, {key:"channelid",value:channel.id,hidden:true},
{key:"messageid",value:ticketMessage.id}, {key:"messageid",value:ticketMessage.id},
{key:"option",value:ticket.option.id.value} {key:"option",value:ticket.option.id.value}
]) ])
openticket.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException")) opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
} }
} }
//reply with new message //reply with new message
if (params.sendMessage) await channel.send((await openticket.builders.messages.getSafe("openticket:rename-message").build(source,{guild,channel,user,ticket,reason,data})).message) if (params.sendMessage) await channel.send((await opendiscord.builders.messages.getSafe("openticket:rename-message").build(source,{guild,channel,user,ticket,reason,data})).message)
ticket.get("openticket:busy").value = false ticket.get("openticket:busy").value = false
await openticket.events.get("afterTicketRenamed").emit([ticket,user,channel,reason]) await opendiscord.events.get("afterTicketRenamed").emit([ticket,user,channel,reason])
}), }),
new api.ODWorker("openticket:discord-logs",1,async (instance,params,source,cancel) => { new api.ODWorker("openticket:discord-logs",1,async (instance,params,source,cancel) => {
const {guild,channel,user,ticket,reason,data} = params const {guild,channel,user,ticket,reason,data} = params
//to logs //to logs
if (generalConfig.data.system.logs.enabled && generalConfig.data.system.messages.renaming.logs){ if (generalConfig.data.system.logs.enabled && generalConfig.data.system.messages.renaming.logs){
const logChannel = openticket.posts.get("openticket:logs") const logChannel = opendiscord.posts.get("openticket:logs")
if (logChannel) logChannel.send(await openticket.builders.messages.getSafe("openticket:ticket-action-logs").build(source,{guild,channel,user,ticket,mode:"rename",reason,additionalData:data})) if (logChannel) logChannel.send(await opendiscord.builders.messages.getSafe("openticket:ticket-action-logs").build(source,{guild,channel,user,ticket,mode:"rename",reason,additionalData:data}))
} }
//to dm //to dm
const creator = await openticket.tickets.getTicketUser(ticket,"creator") const creator = await opendiscord.tickets.getTicketUser(ticket,"creator")
if (creator && generalConfig.data.system.messages.renaming.dm) await openticket.client.sendUserDm(creator,await openticket.builders.messages.getSafe("openticket:ticket-action-dm").build(source,{guild,channel,user,ticket,mode:"rename",reason,additionalData:data})) if (creator && generalConfig.data.system.messages.renaming.dm) await opendiscord.client.sendUserDm(creator,await opendiscord.builders.messages.getSafe("openticket:ticket-action-dm").build(source,{guild,channel,user,ticket,mode:"rename",reason,additionalData:data}))
}), }),
new api.ODWorker("openticket:logs",0,(instance,params,source,cancel) => { new api.ODWorker("openticket:logs",0,(instance,params,source,cancel) => {
const {guild,channel,user,ticket} = params const {guild,channel,user,ticket} = params
openticket.log(user.displayName+" renamed a ticket!","info",[ opendiscord.log(user.displayName+" renamed a ticket!","info",[
{key:"user",value:user.username}, {key:"user",value:user.username},
{key:"userid",value:user.id,hidden:true}, {key:"userid",value:user.id,hidden:true},
{key:"channel",value:"#"+channel.name}, {key:"channel",value:"#"+channel.name},
@@ -72,7 +72,7 @@ export const registerActions = async () => {
]) ])
}) })
]) ])
openticket.actions.get("openticket:rename-ticket").workers.backupWorker = new api.ODWorker("openticket:cancel-busy",0,(instance,params) => { opendiscord.actions.get("openticket:rename-ticket").workers.backupWorker = new api.ODWorker("openticket:cancel-busy",0,(instance,params) => {
//set busy to false in case of crash or cancel //set busy to false in case of crash or cancel
params.ticket.get("openticket:busy").value = false params.ticket.get("openticket:busy").value = false
}) })
+92 -92
View File
@@ -1,19 +1,19 @@
/////////////////////////////////////// ///////////////////////////////////////
//TICKET REOPENING SYSTEM //TICKET REOPENING SYSTEM
/////////////////////////////////////// ///////////////////////////////////////
import {openticket, api, utilities} from "../index" import {opendiscord, api, utilities} from "../index"
import * as discord from "discord.js" import * as discord from "discord.js"
const generalConfig = openticket.configs.get("openticket:general") const generalConfig = opendiscord.configs.get("openticket:general")
export const registerActions = async () => { export const registerActions = async () => {
openticket.actions.add(new api.ODAction("openticket:reopen-ticket")) opendiscord.actions.add(new api.ODAction("openticket:reopen-ticket"))
openticket.actions.get("openticket:reopen-ticket").workers.add([ opendiscord.actions.get("openticket:reopen-ticket").workers.add([
new api.ODWorker("openticket:reopen-ticket",2,async (instance,params,source,cancel) => { new api.ODWorker("openticket:reopen-ticket",2,async (instance,params,source,cancel) => {
const {guild,channel,user,ticket,reason} = params const {guild,channel,user,ticket,reason} = params
if (channel.isThread()) throw new api.ODSystemError("Unable to reopen ticket! Open Ticket doesn't support threads!") if (channel.isThread()) throw new api.ODSystemError("Unable to reopen ticket! Open Ticket doesn't support threads!")
await openticket.events.get("onTicketReopen").emit([ticket,user,channel,reason]) await opendiscord.events.get("onTicketReopen").emit([ticket,user,channel,reason])
//update ticket //update ticket
ticket.get("openticket:closed").value = false ticket.get("openticket:closed").value = false
@@ -24,8 +24,8 @@ export const registerActions = async () => {
ticket.get("openticket:busy").value = true ticket.get("openticket:busy").value = true
//update stats //update stats
await openticket.stats.get("openticket:global").setStat("openticket:tickets-reopened",1,"increase") await opendiscord.stats.get("openticket:global").setStat("openticket:tickets-reopened",1,"increase")
await openticket.stats.get("openticket:user").setStat("openticket:tickets-reopened",user.id,1,"increase") await opendiscord.stats.get("openticket:user").setStat("openticket:tickets-reopened",user.id,1,"increase")
//update category //update category
const channelCategory = ticket.option.get("openticket:channel-category").value const channelCategory = ticket.option.get("openticket:channel-category").value
@@ -33,10 +33,10 @@ export const registerActions = async () => {
if (channelCategory !== ""){ if (channelCategory !== ""){
//category enabled //category enabled
try { try {
const normalCategory = await openticket.client.fetchGuildCategoryChannel(guild,channelCategory) const normalCategory = await opendiscord.client.fetchGuildCategoryChannel(guild,channelCategory)
if (!normalCategory){ if (!normalCategory){
//default category was not found //default category was not found
openticket.log("Ticket Reopening Error: Unable to find category! #1","error",[ opendiscord.log("Ticket Reopening Error: Unable to find category! #1","error",[
{key:"categoryid",value:channelCategory}, {key:"categoryid",value:channelCategory},
{key:"backup",value:"false"} {key:"backup",value:"false"}
]) ])
@@ -44,10 +44,10 @@ export const registerActions = async () => {
//default category was found //default category was found
if (normalCategory.children.cache.size >= 49 && channelBackupCategory != ""){ if (normalCategory.children.cache.size >= 49 && channelBackupCategory != ""){
//use backup category //use backup category
const backupCategory = await openticket.client.fetchGuildCategoryChannel(guild,channelBackupCategory) const backupCategory = await opendiscord.client.fetchGuildCategoryChannel(guild,channelBackupCategory)
if (!backupCategory){ if (!backupCategory){
//default category was not found //default category was not found
openticket.log("Ticket Reopening Error: Unable to find category! #2","error",[ opendiscord.log("Ticket Reopening Error: Unable to find category! #2","error",[
{key:"categoryid",value:channelBackupCategory}, {key:"categoryid",value:channelBackupCategory},
{key:"backup",value:"true"} {key:"backup",value:"true"}
]) ])
@@ -65,11 +65,11 @@ export const registerActions = async () => {
} }
} }
}catch(e){ }catch(e){
openticket.log("Unable to move ticket to 'reopened category'!","error",[ opendiscord.log("Unable to move ticket to 'reopened category'!","error",[
{key:"channel",value:"#"+channel.name}, {key:"channel",value:"#"+channel.name},
{key:"channelid",value:channel.id,hidden:true}, {key:"channelid",value:channel.id,hidden:true},
]) ])
openticket.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException")) opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
} }
}else{ }else{
channel.setParent(null,{lockPermissions:false}) channel.setParent(null,{lockPermissions:false})
@@ -84,7 +84,7 @@ export const registerActions = async () => {
allow:[], allow:[],
deny:["ViewChannel","SendMessages","ReadMessageHistory"] deny:["ViewChannel","SendMessages","ReadMessageHistory"]
}] }]
const globalAdmins = openticket.configs.get("openticket:general").data.globalAdmins const globalAdmins = opendiscord.configs.get("openticket:general").data.globalAdmins
const optionAdmins = ticket.option.get("openticket:admins").value const optionAdmins = ticket.option.get("openticket:admins").value
const readonlyAdmins = ticket.option.get("openticket:admins-readonly").value const readonlyAdmins = ticket.option.get("openticket:admins-readonly").value
@@ -129,42 +129,42 @@ export const registerActions = async () => {
channel.permissionOverwrites.set(permissions) channel.permissionOverwrites.set(permissions)
//update ticket message //update ticket message
const ticketMessage = await openticket.tickets.getTicketMessage(ticket) const ticketMessage = await opendiscord.tickets.getTicketMessage(ticket)
if (ticketMessage){ if (ticketMessage){
try{ try{
ticketMessage.edit((await openticket.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket})).message) ticketMessage.edit((await opendiscord.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket})).message)
}catch(e){ }catch(e){
openticket.log("Unable to edit ticket message on ticket reopening!","error",[ opendiscord.log("Unable to edit ticket message on ticket reopening!","error",[
{key:"channel",value:"#"+channel.name}, {key:"channel",value:"#"+channel.name},
{key:"channelid",value:channel.id,hidden:true}, {key:"channelid",value:channel.id,hidden:true},
{key:"messageid",value:ticketMessage.id}, {key:"messageid",value:ticketMessage.id},
{key:"option",value:ticket.option.id.value} {key:"option",value:ticket.option.id.value}
]) ])
openticket.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException")) opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
} }
} }
if (params.sendMessage) await channel.send((await openticket.builders.messages.getSafe("openticket:reopen-message").build(source,{guild,channel,user,ticket,reason})).message) if (params.sendMessage) await channel.send((await opendiscord.builders.messages.getSafe("openticket:reopen-message").build(source,{guild,channel,user,ticket,reason})).message)
ticket.get("openticket:busy").value = false ticket.get("openticket:busy").value = false
await openticket.events.get("afterTicketReopened").emit([ticket,user,channel,reason]) await opendiscord.events.get("afterTicketReopened").emit([ticket,user,channel,reason])
}), }),
new api.ODWorker("openticket:discord-logs",1,async (instance,params,source,cancel) => { new api.ODWorker("openticket:discord-logs",1,async (instance,params,source,cancel) => {
const {guild,channel,user,ticket,reason} = params const {guild,channel,user,ticket,reason} = params
//to logs //to logs
if (generalConfig.data.system.logs.enabled && generalConfig.data.system.messages.reopening.logs){ if (generalConfig.data.system.logs.enabled && generalConfig.data.system.messages.reopening.logs){
const logChannel = openticket.posts.get("openticket:logs") const logChannel = opendiscord.posts.get("openticket:logs")
if (logChannel) logChannel.send(await openticket.builders.messages.getSafe("openticket:ticket-action-logs").build(source,{guild,channel,user,ticket,mode:"reopen",reason,additionalData:null})) if (logChannel) logChannel.send(await opendiscord.builders.messages.getSafe("openticket:ticket-action-logs").build(source,{guild,channel,user,ticket,mode:"reopen",reason,additionalData:null}))
} }
//to dm //to dm
const creator = await openticket.tickets.getTicketUser(ticket,"creator") const creator = await opendiscord.tickets.getTicketUser(ticket,"creator")
if (creator && generalConfig.data.system.messages.reopening.dm) await openticket.client.sendUserDm(creator,await openticket.builders.messages.getSafe("openticket:ticket-action-dm").build(source,{guild,channel,user,ticket,mode:"reopen",reason,additionalData:null})) if (creator && generalConfig.data.system.messages.reopening.dm) await opendiscord.client.sendUserDm(creator,await opendiscord.builders.messages.getSafe("openticket:ticket-action-dm").build(source,{guild,channel,user,ticket,mode:"reopen",reason,additionalData:null}))
}), }),
new api.ODWorker("openticket:logs",0,(instance,params,source,cancel) => { new api.ODWorker("openticket:logs",0,(instance,params,source,cancel) => {
const {guild,channel,user,ticket} = params const {guild,channel,user,ticket} = params
openticket.log(user.displayName+" reopened a ticket!","info",[ opendiscord.log(user.displayName+" reopened a ticket!","info",[
{key:"user",value:user.username}, {key:"user",value:user.username},
{key:"userid",value:user.id,hidden:true}, {key:"userid",value:user.id,hidden:true},
{key:"channel",value:"#"+channel.name}, {key:"channel",value:"#"+channel.name},
@@ -178,37 +178,37 @@ export const registerActions = async () => {
export const registerVerifyBars = async () => { export const registerVerifyBars = async () => {
//REOPEN TICKET TICKET MESSAGE //REOPEN TICKET TICKET MESSAGE
openticket.verifybars.add(new api.ODVerifyBar("openticket:reopen-ticket-ticket-message",openticket.builders.messages.getSafe("openticket:verifybar-ticket-message"),!generalConfig.data.system.disableVerifyBars)) opendiscord.verifybars.add(new api.ODVerifyBar("openticket:reopen-ticket-ticket-message",opendiscord.builders.messages.getSafe("openticket:verifybar-ticket-message"),!generalConfig.data.system.disableVerifyBars))
openticket.verifybars.get("openticket:reopen-ticket-ticket-message").success.add([ opendiscord.verifybars.get("openticket:reopen-ticket-ticket-message").success.add([
new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => { new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => {
const permissionMode = generalConfig.data.system.permissions.reopen const permissionMode = generalConfig.data.system.permissions.reopen
if (permissionMode == "none"){ if (permissionMode == "none"){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel() return cancel()
}else if (permissionMode == "everyone") return }else if (permissionMode == "everyone") return
else if (permissionMode == "admin"){ else if (permissionMode == "admin"){
if (!openticket.permissions.hasPermissions("support",await openticket.permissions.getPermissions(instance.user,instance.channel,instance.guild))){ if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
return cancel() return cancel()
}else return }else return
}else{ }else{
if (!instance.guild || !instance.member){ if (!instance.guild || !instance.member){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
return cancel() return cancel()
} }
const role = await openticket.client.fetchGuildRole(instance.guild,permissionMode) const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
if (!role){ if (!role){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
return cancel() return cancel()
} }
if (!role.members.has(instance.member.id)){ if (!role.members.has(instance.member.id)){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel() return cancel()
}else return }else return
} }
@@ -216,86 +216,86 @@ export const registerVerifyBars = async () => {
new api.ODWorker("openticket:reopen-ticket",0,async (instance,params,source,cancel) => { new api.ODWorker("openticket:reopen-ticket",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance const {guild,channel,user} = instance
if (!guild){ if (!guild){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
return cancel() return cancel()
} }
const ticket = openticket.tickets.get(channel.id) const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){ if (!ticket || channel.isDMBased()){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
//return when not closed //return when not closed
if (!ticket.get("openticket:closed").value){ if (!ticket.get("openticket:closed").value){
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild,channel,user,error:openticket.languages.getTranslation("errors.actionInvalid.reopen"),layout:"simple"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build("button",{guild,channel,user,error:opendiscord.languages.getTranslation("errors.actionInvalid.reopen"),layout:"simple"}))
return cancel() return cancel()
} }
//return when busy //return when busy
if (ticket.get("openticket:busy").value){ if (ticket.get("openticket:busy").value){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
//start reopening ticket //start reopening ticket
if (params.data == "reason"){ if (params.data == "reason"){
//reopen with reason //reopen with reason
instance.modal(await openticket.builders.modals.getSafe("openticket:reopen-ticket-reason").build("ticket-message",{guild,channel,user,ticket})) instance.modal(await opendiscord.builders.modals.getSafe("openticket:reopen-ticket-reason").build("ticket-message",{guild,channel,user,ticket}))
}else{ }else{
//reopen without reason //reopen without reason
await instance.defer("update",false) await instance.defer("update",false)
await openticket.actions.get("openticket:reopen-ticket").run("ticket-message",{guild,channel,user,ticket,reason:null,sendMessage:true}) await opendiscord.actions.get("openticket:reopen-ticket").run("ticket-message",{guild,channel,user,ticket,reason:null,sendMessage:true})
await instance.update(await openticket.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket})) await instance.update(await opendiscord.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket}))
} }
}) })
]) ])
openticket.verifybars.get("openticket:reopen-ticket-ticket-message").failure.add([ opendiscord.verifybars.get("openticket:reopen-ticket-ticket-message").failure.add([
new api.ODWorker("openticket:back-to-ticket-message",0,async (instance,params,source,cancel) => { new api.ODWorker("openticket:back-to-ticket-message",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance const {guild,channel,user} = instance
if (!guild){ if (!guild){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
return cancel() return cancel()
} }
const ticket = openticket.tickets.get(channel.id) const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){ if (!ticket || channel.isDMBased()){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
await instance.update(await openticket.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket})) await instance.update(await opendiscord.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket}))
}) })
]) ])
//REOPEN TICKET CLOSE MESSAGE //REOPEN TICKET CLOSE MESSAGE
openticket.verifybars.add(new api.ODVerifyBar("openticket:reopen-ticket-close-message",openticket.builders.messages.getSafe("openticket:verifybar-close-message"),!generalConfig.data.system.disableVerifyBars)) opendiscord.verifybars.add(new api.ODVerifyBar("openticket:reopen-ticket-close-message",opendiscord.builders.messages.getSafe("openticket:verifybar-close-message"),!generalConfig.data.system.disableVerifyBars))
openticket.verifybars.get("openticket:reopen-ticket-close-message").success.add([ opendiscord.verifybars.get("openticket:reopen-ticket-close-message").success.add([
new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => { new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => {
const permissionMode = generalConfig.data.system.permissions.reopen const permissionMode = generalConfig.data.system.permissions.reopen
if (permissionMode == "none"){ if (permissionMode == "none"){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel() return cancel()
}else if (permissionMode == "everyone") return }else if (permissionMode == "everyone") return
else if (permissionMode == "admin"){ else if (permissionMode == "admin"){
if (!openticket.permissions.hasPermissions("support",await openticket.permissions.getPermissions(instance.user,instance.channel,instance.guild))){ if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
return cancel() return cancel()
}else return }else return
}else{ }else{
if (!instance.guild || !instance.member){ if (!instance.guild || !instance.member){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
return cancel() return cancel()
} }
const role = await openticket.client.fetchGuildRole(instance.guild,permissionMode) const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
if (!role){ if (!role){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
return cancel() return cancel()
} }
if (!role.members.has(instance.member.id)){ if (!role.members.has(instance.member.id)){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel() return cancel()
}else return }else return
} }
@@ -303,90 +303,90 @@ export const registerVerifyBars = async () => {
new api.ODWorker("openticket:reopen-ticket",0,async (instance,params,source,cancel) => { new api.ODWorker("openticket:reopen-ticket",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance const {guild,channel,user} = instance
if (!guild){ if (!guild){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
return cancel() return cancel()
} }
const ticket = openticket.tickets.get(channel.id) const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){ if (!ticket || channel.isDMBased()){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
//return when not closed //return when not closed
if (!ticket.get("openticket:closed").value){ if (!ticket.get("openticket:closed").value){
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild,channel,user,error:openticket.languages.getTranslation("errors.actionInvalid.reopen"),layout:"simple"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build("button",{guild,channel,user,error:opendiscord.languages.getTranslation("errors.actionInvalid.reopen"),layout:"simple"}))
return cancel() return cancel()
} }
//return when busy //return when busy
if (ticket.get("openticket:busy").value){ if (ticket.get("openticket:busy").value){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
//start reopening ticket //start reopening ticket
if (params.data == "reason"){ if (params.data == "reason"){
//reopen with reason //reopen with reason
instance.modal(await openticket.builders.modals.getSafe("openticket:reopen-ticket-reason").build("close-message",{guild,channel,user,ticket})) instance.modal(await opendiscord.builders.modals.getSafe("openticket:reopen-ticket-reason").build("close-message",{guild,channel,user,ticket}))
}else{ }else{
//reopen without reason //reopen without reason
await instance.defer("update",false) await instance.defer("update",false)
await openticket.actions.get("openticket:reopen-ticket").run("close-message",{guild,channel,user,ticket,reason:null,sendMessage:false}) await opendiscord.actions.get("openticket:reopen-ticket").run("close-message",{guild,channel,user,ticket,reason:null,sendMessage:false})
await instance.update(await openticket.builders.messages.getSafe("openticket:reopen-message").build("close-message",{guild,channel,user,ticket,reason:null})) await instance.update(await opendiscord.builders.messages.getSafe("openticket:reopen-message").build("close-message",{guild,channel,user,ticket,reason:null}))
} }
}) })
]) ])
openticket.verifybars.get("openticket:reopen-ticket-close-message").failure.add([ opendiscord.verifybars.get("openticket:reopen-ticket-close-message").failure.add([
new api.ODWorker("openticket:back-to-close-message",0,async (instance,params,source,cancel) => { new api.ODWorker("openticket:back-to-close-message",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance const {guild,channel,user} = instance
const {verifybarMessage} = params const {verifybarMessage} = params
if (!guild){ if (!guild){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
return cancel() return cancel()
} }
const ticket = openticket.tickets.get(channel.id) const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){ if (!ticket || channel.isDMBased()){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
const rawReason = (verifybarMessage && verifybarMessage.embeds[0] && verifybarMessage.embeds[0].fields[0]) ? verifybarMessage.embeds[0].fields[0].value : null const rawReason = (verifybarMessage && verifybarMessage.embeds[0] && verifybarMessage.embeds[0].fields[0]) ? verifybarMessage.embeds[0].fields[0].value : null
const reason = (rawReason == null) ? null : rawReason.substring(3,rawReason.length-3) const reason = (rawReason == null) ? null : rawReason.substring(3,rawReason.length-3)
await instance.update(await openticket.builders.messages.getSafe("openticket:close-message").build("other",{guild,channel,user,ticket,reason})) await instance.update(await opendiscord.builders.messages.getSafe("openticket:close-message").build("other",{guild,channel,user,ticket,reason}))
}) })
]) ])
//REOPEN TICKET AUTOCLOSE MESSAGE //REOPEN TICKET AUTOCLOSE MESSAGE
openticket.verifybars.add(new api.ODVerifyBar("openticket:reopen-ticket-autoclose-message",openticket.builders.messages.getSafe("openticket:verifybar-autoclose-message"),!generalConfig.data.system.disableVerifyBars)) opendiscord.verifybars.add(new api.ODVerifyBar("openticket:reopen-ticket-autoclose-message",opendiscord.builders.messages.getSafe("openticket:verifybar-autoclose-message"),!generalConfig.data.system.disableVerifyBars))
openticket.verifybars.get("openticket:reopen-ticket-autoclose-message").success.add([ opendiscord.verifybars.get("openticket:reopen-ticket-autoclose-message").success.add([
new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => { new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => {
const permissionMode = generalConfig.data.system.permissions.reopen const permissionMode = generalConfig.data.system.permissions.reopen
if (permissionMode == "none"){ if (permissionMode == "none"){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel() return cancel()
}else if (permissionMode == "everyone") return }else if (permissionMode == "everyone") return
else if (permissionMode == "admin"){ else if (permissionMode == "admin"){
if (!openticket.permissions.hasPermissions("support",await openticket.permissions.getPermissions(instance.user,instance.channel,instance.guild))){ if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
return cancel() return cancel()
}else return }else return
}else{ }else{
if (!instance.guild || !instance.member){ if (!instance.guild || !instance.member){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
return cancel() return cancel()
} }
const role = await openticket.client.fetchGuildRole(instance.guild,permissionMode) const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
if (!role){ if (!role){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
return cancel() return cancel()
} }
if (!role.members.has(instance.member.id)){ if (!role.members.has(instance.member.id)){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel() return cancel()
}else return }else return
} }
@@ -394,55 +394,55 @@ export const registerVerifyBars = async () => {
new api.ODWorker("openticket:reopen-ticket",0,async (instance,params,source,cancel) => { new api.ODWorker("openticket:reopen-ticket",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance const {guild,channel,user} = instance
if (!guild){ if (!guild){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
return cancel() return cancel()
} }
const ticket = openticket.tickets.get(channel.id) const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){ if (!ticket || channel.isDMBased()){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
//return when not closed //return when not closed
if (!ticket.get("openticket:closed").value){ if (!ticket.get("openticket:closed").value){
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild,channel,user,error:openticket.languages.getTranslation("errors.actionInvalid.reopen"),layout:"simple"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build("button",{guild,channel,user,error:opendiscord.languages.getTranslation("errors.actionInvalid.reopen"),layout:"simple"}))
return cancel() return cancel()
} }
//return when busy //return when busy
if (ticket.get("openticket:busy").value){ if (ticket.get("openticket:busy").value){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
//start reopening ticket //start reopening ticket
if (params.data == "reason"){ if (params.data == "reason"){
//reopen with reason //reopen with reason
instance.modal(await openticket.builders.modals.getSafe("openticket:reopen-ticket-reason").build("autoclose-message",{guild,channel,user,ticket})) instance.modal(await opendiscord.builders.modals.getSafe("openticket:reopen-ticket-reason").build("autoclose-message",{guild,channel,user,ticket}))
}else{ }else{
//reopen without reason //reopen without reason
await instance.defer("update",false) await instance.defer("update",false)
await openticket.actions.get("openticket:reopen-ticket").run("autoclose-message",{guild,channel,user,ticket,reason:null,sendMessage:false}) await opendiscord.actions.get("openticket:reopen-ticket").run("autoclose-message",{guild,channel,user,ticket,reason:null,sendMessage:false})
await instance.update(await openticket.builders.messages.getSafe("openticket:reopen-message").build("autoclose-message",{guild,channel,user,ticket,reason:null})) await instance.update(await opendiscord.builders.messages.getSafe("openticket:reopen-message").build("autoclose-message",{guild,channel,user,ticket,reason:null}))
} }
}) })
]) ])
openticket.verifybars.get("openticket:reopen-ticket-autoclose-message").failure.add([ opendiscord.verifybars.get("openticket:reopen-ticket-autoclose-message").failure.add([
new api.ODWorker("openticket:back-to-autoclose-message",0,async (instance,params,source,cancel) => { new api.ODWorker("openticket:back-to-autoclose-message",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance const {guild,channel,user} = instance
const {verifybarMessage} = params const {verifybarMessage} = params
if (!guild){ if (!guild){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
return cancel() return cancel()
} }
const ticket = openticket.tickets.get(channel.id) const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){ if (!ticket || channel.isDMBased()){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
await instance.update(await openticket.builders.messages.getSafe("openticket:autoclose-message").build("other",{guild,channel,user,ticket})) await instance.update(await opendiscord.builders.messages.getSafe("openticket:autoclose-message").build("other",{guild,channel,user,ticket}))
}) })
]) ])
openticket.actions.get("openticket:reopen-ticket").workers.backupWorker = new api.ODWorker("openticket:cancel-busy",0,(instance,params) => { opendiscord.actions.get("openticket:reopen-ticket").workers.backupWorker = new api.ODWorker("openticket:cancel-busy",0,(instance,params) => {
//set busy to false in case of crash or cancel //set busy to false in case of crash or cancel
params.ticket.get("openticket:busy").value = false params.ticket.get("openticket:busy").value = false
}) })
+67 -67
View File
@@ -1,19 +1,19 @@
/////////////////////////////////////// ///////////////////////////////////////
//TICKET UNCLAIMING SYSTEM //TICKET UNCLAIMING SYSTEM
/////////////////////////////////////// ///////////////////////////////////////
import {openticket, api, utilities} from "../index" import {opendiscord, api, utilities} from "../index"
import * as discord from "discord.js" import * as discord from "discord.js"
const generalConfig = openticket.configs.get("openticket:general") const generalConfig = opendiscord.configs.get("openticket:general")
export const registerActions = async () => { export const registerActions = async () => {
openticket.actions.add(new api.ODAction("openticket:unclaim-ticket")) opendiscord.actions.add(new api.ODAction("openticket:unclaim-ticket"))
openticket.actions.get("openticket:unclaim-ticket").workers.add([ opendiscord.actions.get("openticket:unclaim-ticket").workers.add([
new api.ODWorker("openticket:unclaim-ticket",2,async (instance,params,source,cancel) => { new api.ODWorker("openticket:unclaim-ticket",2,async (instance,params,source,cancel) => {
const {guild,channel,user,ticket,reason} = params const {guild,channel,user,ticket,reason} = params
if (channel.isThread()) throw new api.ODSystemError("Unable to unclaim ticket! Open Ticket doesn't support threads!") if (channel.isThread()) throw new api.ODSystemError("Unable to unclaim ticket! Open Ticket doesn't support threads!")
await openticket.events.get("onTicketUnclaim").emit([ticket,user,channel,reason]) await opendiscord.events.get("onTicketUnclaim").emit([ticket,user,channel,reason])
//update ticket //update ticket
ticket.get("openticket:claimed").value = false ticket.get("openticket:claimed").value = false
@@ -27,10 +27,10 @@ export const registerActions = async () => {
if (channelCategory !== ""){ if (channelCategory !== ""){
//category enabled //category enabled
try { try {
const normalCategory = await openticket.client.fetchGuildCategoryChannel(guild,channelCategory) const normalCategory = await opendiscord.client.fetchGuildCategoryChannel(guild,channelCategory)
if (!normalCategory){ if (!normalCategory){
//default category was not found //default category was not found
openticket.log("Ticket Unclaiming Error: Unable to find category! #1","error",[ opendiscord.log("Ticket Unclaiming Error: Unable to find category! #1","error",[
{key:"categoryid",value:channelCategory}, {key:"categoryid",value:channelCategory},
{key:"backup",value:"false"} {key:"backup",value:"false"}
]) ])
@@ -38,10 +38,10 @@ export const registerActions = async () => {
//default category was found //default category was found
if (normalCategory.children.cache.size >= 49 && channelBackupCategory != ""){ if (normalCategory.children.cache.size >= 49 && channelBackupCategory != ""){
//use backup category //use backup category
const backupCategory = await openticket.client.fetchGuildCategoryChannel(guild,channelBackupCategory) const backupCategory = await opendiscord.client.fetchGuildCategoryChannel(guild,channelBackupCategory)
if (!backupCategory){ if (!backupCategory){
//default category was not found //default category was not found
openticket.log("Ticket Unclaiming Error: Unable to find category! #2","error",[ opendiscord.log("Ticket Unclaiming Error: Unable to find category! #2","error",[
{key:"categoryid",value:channelBackupCategory}, {key:"categoryid",value:channelBackupCategory},
{key:"backup",value:"true"} {key:"backup",value:"true"}
]) ])
@@ -60,11 +60,11 @@ export const registerActions = async () => {
} }
}catch(e){ }catch(e){
openticket.log("Unable to move ticket to 'unclaimed category'!","error",[ opendiscord.log("Unable to move ticket to 'unclaimed category'!","error",[
{key:"channel",value:"#"+channel.name}, {key:"channel",value:"#"+channel.name},
{key:"channelid",value:channel.id,hidden:true} {key:"channelid",value:channel.id,hidden:true}
]) ])
openticket.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException")) opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
} }
}else{ }else{
channel.setParent(null,{lockPermissions:false}) channel.setParent(null,{lockPermissions:false})
@@ -73,43 +73,43 @@ export const registerActions = async () => {
} }
//update ticket message //update ticket message
const ticketMessage = await openticket.tickets.getTicketMessage(ticket) const ticketMessage = await opendiscord.tickets.getTicketMessage(ticket)
if (ticketMessage){ if (ticketMessage){
try{ try{
ticketMessage.edit((await openticket.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket})).message) ticketMessage.edit((await opendiscord.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket})).message)
}catch(e){ }catch(e){
openticket.log("Unable to edit ticket message on ticket unclaiming!","error",[ opendiscord.log("Unable to edit ticket message on ticket unclaiming!","error",[
{key:"channel",value:"#"+channel.name}, {key:"channel",value:"#"+channel.name},
{key:"channelid",value:channel.id,hidden:true}, {key:"channelid",value:channel.id,hidden:true},
{key:"messageid",value:ticketMessage.id}, {key:"messageid",value:ticketMessage.id},
{key:"option",value:ticket.option.id.value} {key:"option",value:ticket.option.id.value}
]) ])
openticket.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException")) opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
} }
} }
//reply with new message //reply with new message
if (params.sendMessage) await channel.send((await openticket.builders.messages.getSafe("openticket:unclaim-message").build(source,{guild,channel,user,ticket,reason})).message) if (params.sendMessage) await channel.send((await opendiscord.builders.messages.getSafe("openticket:unclaim-message").build(source,{guild,channel,user,ticket,reason})).message)
ticket.get("openticket:busy").value = false ticket.get("openticket:busy").value = false
await openticket.events.get("afterTicketUnclaimed").emit([ticket,user,channel,reason]) await opendiscord.events.get("afterTicketUnclaimed").emit([ticket,user,channel,reason])
}), }),
new api.ODWorker("openticket:discord-logs",1,async (instance,params,source,cancel) => { new api.ODWorker("openticket:discord-logs",1,async (instance,params,source,cancel) => {
const {guild,channel,user,ticket,reason} = params const {guild,channel,user,ticket,reason} = params
//to logs //to logs
if (generalConfig.data.system.logs.enabled && generalConfig.data.system.messages.claiming.logs){ if (generalConfig.data.system.logs.enabled && generalConfig.data.system.messages.claiming.logs){
const logChannel = openticket.posts.get("openticket:logs") const logChannel = opendiscord.posts.get("openticket:logs")
if (logChannel) logChannel.send(await openticket.builders.messages.getSafe("openticket:ticket-action-logs").build(source,{guild,channel,user,ticket,mode:"unclaim",reason,additionalData:null})) if (logChannel) logChannel.send(await opendiscord.builders.messages.getSafe("openticket:ticket-action-logs").build(source,{guild,channel,user,ticket,mode:"unclaim",reason,additionalData:null}))
} }
//to dm //to dm
const creator = await openticket.tickets.getTicketUser(ticket,"creator") const creator = await opendiscord.tickets.getTicketUser(ticket,"creator")
if (creator && generalConfig.data.system.messages.claiming.dm) await openticket.client.sendUserDm(creator,await openticket.builders.messages.getSafe("openticket:ticket-action-dm").build(source,{guild,channel,user,ticket,mode:"unclaim",reason,additionalData:null})) if (creator && generalConfig.data.system.messages.claiming.dm) await opendiscord.client.sendUserDm(creator,await opendiscord.builders.messages.getSafe("openticket:ticket-action-dm").build(source,{guild,channel,user,ticket,mode:"unclaim",reason,additionalData:null}))
}), }),
new api.ODWorker("openticket:logs",0,(instance,params,source,cancel) => { new api.ODWorker("openticket:logs",0,(instance,params,source,cancel) => {
const {guild,channel,user,ticket} = params const {guild,channel,user,ticket} = params
openticket.log(user.displayName+" unclaimed a ticket!","info",[ opendiscord.log(user.displayName+" unclaimed a ticket!","info",[
{key:"user",value:user.username}, {key:"user",value:user.username},
{key:"userid",value:user.id,hidden:true}, {key:"userid",value:user.id,hidden:true},
{key:"channel",value:"#"+channel.name}, {key:"channel",value:"#"+channel.name},
@@ -123,37 +123,37 @@ export const registerActions = async () => {
export const registerVerifyBars = async () => { export const registerVerifyBars = async () => {
//UNCLAIM TICKET TICKET MESSAGE //UNCLAIM TICKET TICKET MESSAGE
openticket.verifybars.add(new api.ODVerifyBar("openticket:unclaim-ticket-ticket-message",openticket.builders.messages.getSafe("openticket:verifybar-ticket-message"),!generalConfig.data.system.disableVerifyBars)) opendiscord.verifybars.add(new api.ODVerifyBar("openticket:unclaim-ticket-ticket-message",opendiscord.builders.messages.getSafe("openticket:verifybar-ticket-message"),!generalConfig.data.system.disableVerifyBars))
openticket.verifybars.get("openticket:unclaim-ticket-ticket-message").success.add([ opendiscord.verifybars.get("openticket:unclaim-ticket-ticket-message").success.add([
new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => { new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => {
const permissionMode = generalConfig.data.system.permissions.unclaim const permissionMode = generalConfig.data.system.permissions.unclaim
if (permissionMode == "none"){ if (permissionMode == "none"){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel() return cancel()
}else if (permissionMode == "everyone") return }else if (permissionMode == "everyone") return
else if (permissionMode == "admin"){ else if (permissionMode == "admin"){
if (!openticket.permissions.hasPermissions("support",await openticket.permissions.getPermissions(instance.user,instance.channel,instance.guild))){ if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
return cancel() return cancel()
}else return }else return
}else{ }else{
if (!instance.guild || !instance.member){ if (!instance.guild || !instance.member){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
return cancel() return cancel()
} }
const role = await openticket.client.fetchGuildRole(instance.guild,permissionMode) const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
if (!role){ if (!role){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
return cancel() return cancel()
} }
if (!role.members.has(instance.member.id)){ if (!role.members.has(instance.member.id)){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel() return cancel()
}else return }else return
} }
@@ -161,86 +161,86 @@ export const registerVerifyBars = async () => {
new api.ODWorker("openticket:unclaim-ticket",0,async (instance,params,source,cancel) => { new api.ODWorker("openticket:unclaim-ticket",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance const {guild,channel,user} = instance
if (!guild){ if (!guild){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
return cancel() return cancel()
} }
const ticket = openticket.tickets.get(channel.id) const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){ if (!ticket || channel.isDMBased()){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
//return when not claimed //return when not claimed
if (!ticket.get("openticket:claimed").value){ if (!ticket.get("openticket:claimed").value){
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild,channel,user,error:openticket.languages.getTranslation("errors.actionInvalid.unclaim"),layout:"simple"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build("button",{guild,channel,user,error:opendiscord.languages.getTranslation("errors.actionInvalid.unclaim"),layout:"simple"}))
return cancel() return cancel()
} }
//return when busy //return when busy
if (ticket.get("openticket:busy").value){ if (ticket.get("openticket:busy").value){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
//start unclaiming ticket //start unclaiming ticket
if (params.data == "reason"){ if (params.data == "reason"){
//unclaim with reason //unclaim with reason
instance.modal(await openticket.builders.modals.getSafe("openticket:unclaim-ticket-reason").build("ticket-message",{guild,channel,user,ticket})) instance.modal(await opendiscord.builders.modals.getSafe("openticket:unclaim-ticket-reason").build("ticket-message",{guild,channel,user,ticket}))
}else{ }else{
//unclaim without reason //unclaim without reason
await instance.defer("update",false) await instance.defer("update",false)
await openticket.actions.get("openticket:unclaim-ticket").run("ticket-message",{guild,channel,user,ticket,reason:null,sendMessage:true}) await opendiscord.actions.get("openticket:unclaim-ticket").run("ticket-message",{guild,channel,user,ticket,reason:null,sendMessage:true})
await instance.update(await openticket.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket})) await instance.update(await opendiscord.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket}))
} }
}) })
]) ])
openticket.verifybars.get("openticket:unclaim-ticket-ticket-message").failure.add([ opendiscord.verifybars.get("openticket:unclaim-ticket-ticket-message").failure.add([
new api.ODWorker("openticket:back-to-ticket-message",0,async (instance,params,source,cancel) => { new api.ODWorker("openticket:back-to-ticket-message",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance const {guild,channel,user} = instance
if (!guild){ if (!guild){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
return cancel() return cancel()
} }
const ticket = openticket.tickets.get(channel.id) const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){ if (!ticket || channel.isDMBased()){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
await instance.update(await openticket.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket})) await instance.update(await opendiscord.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket}))
}) })
]) ])
//UNCLAIM TICKET CLAIM MESSAGE //UNCLAIM TICKET CLAIM MESSAGE
openticket.verifybars.add(new api.ODVerifyBar("openticket:unclaim-ticket-claim-message",openticket.builders.messages.getSafe("openticket:verifybar-claim-message"),!generalConfig.data.system.disableVerifyBars)) opendiscord.verifybars.add(new api.ODVerifyBar("openticket:unclaim-ticket-claim-message",opendiscord.builders.messages.getSafe("openticket:verifybar-claim-message"),!generalConfig.data.system.disableVerifyBars))
openticket.verifybars.get("openticket:unclaim-ticket-claim-message").success.add([ opendiscord.verifybars.get("openticket:unclaim-ticket-claim-message").success.add([
new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => { new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => {
const permissionMode = generalConfig.data.system.permissions.unclaim const permissionMode = generalConfig.data.system.permissions.unclaim
if (permissionMode == "none"){ if (permissionMode == "none"){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel() return cancel()
}else if (permissionMode == "everyone") return }else if (permissionMode == "everyone") return
else if (permissionMode == "admin"){ else if (permissionMode == "admin"){
if (!openticket.permissions.hasPermissions("support",await openticket.permissions.getPermissions(instance.user,instance.channel,instance.guild))){ if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
return cancel() return cancel()
}else return }else return
}else{ }else{
if (!instance.guild || !instance.member){ if (!instance.guild || !instance.member){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
return cancel() return cancel()
} }
const role = await openticket.client.fetchGuildRole(instance.guild,permissionMode) const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
if (!role){ if (!role){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
return cancel() return cancel()
} }
if (!role.members.has(instance.member.id)){ if (!role.members.has(instance.member.id)){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel() return cancel()
}else return }else return
} }
@@ -248,58 +248,58 @@ export const registerVerifyBars = async () => {
new api.ODWorker("openticket:unclaim-ticket",0,async (instance,params,source,cancel) => { new api.ODWorker("openticket:unclaim-ticket",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance const {guild,channel,user} = instance
if (!guild){ if (!guild){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
return cancel() return cancel()
} }
const ticket = openticket.tickets.get(channel.id) const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){ if (!ticket || channel.isDMBased()){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
//return when not claimed //return when not claimed
if (!ticket.get("openticket:claimed").value){ if (!ticket.get("openticket:claimed").value){
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild,channel,user,error:openticket.languages.getTranslation("errors.actionInvalid.unclaim"),layout:"simple"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build("button",{guild,channel,user,error:opendiscord.languages.getTranslation("errors.actionInvalid.unclaim"),layout:"simple"}))
return cancel() return cancel()
} }
//return when busy //return when busy
if (ticket.get("openticket:busy").value){ if (ticket.get("openticket:busy").value){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
//start unclaiming ticket //start unclaiming ticket
if (params.data == "reason"){ if (params.data == "reason"){
//unclaim with reason //unclaim with reason
instance.modal(await openticket.builders.modals.getSafe("openticket:unclaim-ticket-reason").build("claim-message",{guild,channel,user,ticket})) instance.modal(await opendiscord.builders.modals.getSafe("openticket:unclaim-ticket-reason").build("claim-message",{guild,channel,user,ticket}))
}else{ }else{
//unclaim without reason //unclaim without reason
await instance.defer("update",false) await instance.defer("update",false)
await openticket.actions.get("openticket:unclaim-ticket").run("claim-message",{guild,channel,user,ticket,reason:null,sendMessage:false}) await opendiscord.actions.get("openticket:unclaim-ticket").run("claim-message",{guild,channel,user,ticket,reason:null,sendMessage:false})
await instance.update(await openticket.builders.messages.getSafe("openticket:unclaim-message").build("claim-message",{guild,channel,user,ticket,reason:null})) await instance.update(await opendiscord.builders.messages.getSafe("openticket:unclaim-message").build("claim-message",{guild,channel,user,ticket,reason:null}))
} }
}) })
]) ])
openticket.verifybars.get("openticket:unclaim-ticket-claim-message").failure.add([ opendiscord.verifybars.get("openticket:unclaim-ticket-claim-message").failure.add([
new api.ODWorker("openticket:back-to-claim-message",0,async (instance,params,source,cancel) => { new api.ODWorker("openticket:back-to-claim-message",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance const {guild,channel,user} = instance
const {verifybarMessage} = params const {verifybarMessage} = params
if (!guild){ if (!guild){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
return cancel() return cancel()
} }
const ticket = openticket.tickets.get(channel.id) const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){ if (!ticket || channel.isDMBased()){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
const rawReason = (verifybarMessage && verifybarMessage.embeds[0] && verifybarMessage.embeds[0].fields[0]) ? verifybarMessage.embeds[0].fields[0].value : null const rawReason = (verifybarMessage && verifybarMessage.embeds[0] && verifybarMessage.embeds[0].fields[0]) ? verifybarMessage.embeds[0].fields[0].value : null
const reason = (rawReason == null) ? null : rawReason.substring(3,rawReason.length-3) const reason = (rawReason == null) ? null : rawReason.substring(3,rawReason.length-3)
await instance.update(await openticket.builders.messages.getSafe("openticket:claim-message").build("other",{guild,channel,user,ticket,reason})) await instance.update(await opendiscord.builders.messages.getSafe("openticket:claim-message").build("other",{guild,channel,user,ticket,reason}))
}) })
]) ])
openticket.actions.get("openticket:unclaim-ticket").workers.backupWorker = new api.ODWorker("openticket:cancel-busy",0,(instance,params) => { opendiscord.actions.get("openticket:unclaim-ticket").workers.backupWorker = new api.ODWorker("openticket:cancel-busy",0,(instance,params) => {
//set busy to false in case of crash or cancel //set busy to false in case of crash or cancel
params.ticket.get("openticket:busy").value = false params.ticket.get("openticket:busy").value = false
}) })
+63 -63
View File
@@ -1,19 +1,19 @@
/////////////////////////////////////// ///////////////////////////////////////
//TICKET UNPINNING SYSTEM //TICKET UNPINNING SYSTEM
/////////////////////////////////////// ///////////////////////////////////////
import {openticket, api, utilities} from "../index" import {opendiscord, api, utilities} from "../index"
import * as discord from "discord.js" import * as discord from "discord.js"
const generalConfig = openticket.configs.get("openticket:general") const generalConfig = opendiscord.configs.get("openticket:general")
export const registerActions = async () => { export const registerActions = async () => {
openticket.actions.add(new api.ODAction("openticket:unpin-ticket")) opendiscord.actions.add(new api.ODAction("openticket:unpin-ticket"))
openticket.actions.get("openticket:unpin-ticket").workers.add([ opendiscord.actions.get("openticket:unpin-ticket").workers.add([
new api.ODWorker("openticket:unpin-ticket",2,async (instance,params,source,cancel) => { new api.ODWorker("openticket:unpin-ticket",2,async (instance,params,source,cancel) => {
const {guild,channel,user,ticket,reason} = params const {guild,channel,user,ticket,reason} = params
if (channel.isThread()) throw new api.ODSystemError("Unable to unpin ticket! Open Ticket doesn't support threads!") if (channel.isThread()) throw new api.ODSystemError("Unable to unpin ticket! Open Ticket doesn't support threads!")
await openticket.events.get("onTicketUnpin").emit([ticket,user,channel,reason]) await opendiscord.events.get("onTicketUnpin").emit([ticket,user,channel,reason])
//update ticket //update ticket
ticket.get("openticket:pinned").value = false ticket.get("openticket:pinned").value = false
@@ -27,51 +27,51 @@ export const registerActions = async () => {
const newName = originalName.replace("📌",""); const newName = originalName.replace("📌","");
try{ try{
await utilities.timedAwait(channel.setName(newName),2500,(err) => { await utilities.timedAwait(channel.setName(newName),2500,(err) => {
openticket.log("Failed to rename channel on ticket unpin","error") opendiscord.log("Failed to rename channel on ticket unpin","error")
}) })
}catch(err){ }catch(err){
await channel.send((await openticket.builders.messages.getSafe("openticket:error-channel-rename").build("ticket-unpin",{guild,channel,user,originalName,newName})).message) await channel.send((await opendiscord.builders.messages.getSafe("openticket:error-channel-rename").build("ticket-unpin",{guild,channel,user,originalName,newName})).message)
} }
} }
//update ticket message //update ticket message
const ticketMessage = await openticket.tickets.getTicketMessage(ticket) const ticketMessage = await opendiscord.tickets.getTicketMessage(ticket)
if (ticketMessage){ if (ticketMessage){
try{ try{
ticketMessage.edit((await openticket.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket})).message) ticketMessage.edit((await opendiscord.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket})).message)
}catch(e){ }catch(e){
openticket.log("Unable to edit ticket message on ticket unpinning!","error",[ opendiscord.log("Unable to edit ticket message on ticket unpinning!","error",[
{key:"channel",value:"#"+channel.name}, {key:"channel",value:"#"+channel.name},
{key:"channelid",value:channel.id,hidden:true}, {key:"channelid",value:channel.id,hidden:true},
{key:"messageid",value:ticketMessage.id}, {key:"messageid",value:ticketMessage.id},
{key:"option",value:ticket.option.id.value} {key:"option",value:ticket.option.id.value}
]) ])
openticket.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException")) opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
} }
} }
//reply with new message //reply with new message
if (params.sendMessage) await channel.send((await openticket.builders.messages.getSafe("openticket:unpin-message").build(source,{guild,channel,user,ticket,reason})).message) if (params.sendMessage) await channel.send((await opendiscord.builders.messages.getSafe("openticket:unpin-message").build(source,{guild,channel,user,ticket,reason})).message)
ticket.get("openticket:busy").value = false ticket.get("openticket:busy").value = false
await openticket.events.get("afterTicketUnpinned").emit([ticket,user,channel,reason]) await opendiscord.events.get("afterTicketUnpinned").emit([ticket,user,channel,reason])
}), }),
new api.ODWorker("openticket:discord-logs",1,async (instance,params,source,cancel) => { new api.ODWorker("openticket:discord-logs",1,async (instance,params,source,cancel) => {
const {guild,channel,user,ticket,reason} = params const {guild,channel,user,ticket,reason} = params
//to logs //to logs
if (generalConfig.data.system.logs.enabled && generalConfig.data.system.messages.pinning.logs){ if (generalConfig.data.system.logs.enabled && generalConfig.data.system.messages.pinning.logs){
const logChannel = openticket.posts.get("openticket:logs") const logChannel = opendiscord.posts.get("openticket:logs")
if (logChannel) logChannel.send(await openticket.builders.messages.getSafe("openticket:ticket-action-logs").build(source,{guild,channel,user,ticket,mode:"unpin",reason,additionalData:null})) if (logChannel) logChannel.send(await opendiscord.builders.messages.getSafe("openticket:ticket-action-logs").build(source,{guild,channel,user,ticket,mode:"unpin",reason,additionalData:null}))
} }
//to dm //to dm
const creator = await openticket.tickets.getTicketUser(ticket,"creator") const creator = await opendiscord.tickets.getTicketUser(ticket,"creator")
if (creator && generalConfig.data.system.messages.pinning.dm) await openticket.client.sendUserDm(creator,await openticket.builders.messages.getSafe("openticket:ticket-action-dm").build(source,{guild,channel,user,ticket,mode:"unpin",reason,additionalData:null})) if (creator && generalConfig.data.system.messages.pinning.dm) await opendiscord.client.sendUserDm(creator,await opendiscord.builders.messages.getSafe("openticket:ticket-action-dm").build(source,{guild,channel,user,ticket,mode:"unpin",reason,additionalData:null}))
}), }),
new api.ODWorker("openticket:logs",0,(instance,params,source,cancel) => { new api.ODWorker("openticket:logs",0,(instance,params,source,cancel) => {
const {guild,channel,user,ticket} = params const {guild,channel,user,ticket} = params
openticket.log(user.displayName+" unpinned a ticket!","info",[ opendiscord.log(user.displayName+" unpinned a ticket!","info",[
{key:"user",value:user.username}, {key:"user",value:user.username},
{key:"userid",value:user.id,hidden:true}, {key:"userid",value:user.id,hidden:true},
{key:"channel",value:"#"+channel.name}, {key:"channel",value:"#"+channel.name},
@@ -85,37 +85,37 @@ export const registerActions = async () => {
export const registerVerifyBars = async () => { export const registerVerifyBars = async () => {
//UNPIN TICKET TICKET MESSAGE //UNPIN TICKET TICKET MESSAGE
openticket.verifybars.add(new api.ODVerifyBar("openticket:unpin-ticket-ticket-message",openticket.builders.messages.getSafe("openticket:verifybar-ticket-message"),!generalConfig.data.system.disableVerifyBars)) opendiscord.verifybars.add(new api.ODVerifyBar("openticket:unpin-ticket-ticket-message",opendiscord.builders.messages.getSafe("openticket:verifybar-ticket-message"),!generalConfig.data.system.disableVerifyBars))
openticket.verifybars.get("openticket:unpin-ticket-ticket-message").success.add([ opendiscord.verifybars.get("openticket:unpin-ticket-ticket-message").success.add([
new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => { new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => {
const permissionMode = generalConfig.data.system.permissions.unpin const permissionMode = generalConfig.data.system.permissions.unpin
if (permissionMode == "none"){ if (permissionMode == "none"){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel() return cancel()
}else if (permissionMode == "everyone") return }else if (permissionMode == "everyone") return
else if (permissionMode == "admin"){ else if (permissionMode == "admin"){
if (!openticket.permissions.hasPermissions("support",await openticket.permissions.getPermissions(instance.user,instance.channel,instance.guild))){ if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
return cancel() return cancel()
}else return }else return
}else{ }else{
if (!instance.guild || !instance.member){ if (!instance.guild || !instance.member){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
return cancel() return cancel()
} }
const role = await openticket.client.fetchGuildRole(instance.guild,permissionMode) const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
if (!role){ if (!role){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
return cancel() return cancel()
} }
if (!role.members.has(instance.member.id)){ if (!role.members.has(instance.member.id)){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel() return cancel()
}else return }else return
} }
@@ -123,86 +123,86 @@ export const registerVerifyBars = async () => {
new api.ODWorker("openticket:unpin-ticket",0,async (instance,params,source,cancel) => { new api.ODWorker("openticket:unpin-ticket",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance const {guild,channel,user} = instance
if (!guild){ if (!guild){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
return cancel() return cancel()
} }
const ticket = openticket.tickets.get(channel.id) const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){ if (!ticket || channel.isDMBased()){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
//return when not pinned //return when not pinned
if (!ticket.get("openticket:pinned").value){ if (!ticket.get("openticket:pinned").value){
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild,channel,user,error:openticket.languages.getTranslation("errors.actionInvalid.unpin"),layout:"simple"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build("button",{guild,channel,user,error:opendiscord.languages.getTranslation("errors.actionInvalid.unpin"),layout:"simple"}))
return cancel() return cancel()
} }
//return when busy //return when busy
if (ticket.get("openticket:busy").value){ if (ticket.get("openticket:busy").value){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
//start unpining ticket //start unpining ticket
if (params.data == "reason"){ if (params.data == "reason"){
//unpin with reason //unpin with reason
instance.modal(await openticket.builders.modals.getSafe("openticket:unpin-ticket-reason").build("ticket-message",{guild,channel,user,ticket})) instance.modal(await opendiscord.builders.modals.getSafe("openticket:unpin-ticket-reason").build("ticket-message",{guild,channel,user,ticket}))
}else{ }else{
//unpin without reason //unpin without reason
await instance.defer("update",false) await instance.defer("update",false)
await openticket.actions.get("openticket:unpin-ticket").run("ticket-message",{guild,channel,user,ticket,reason:null,sendMessage:true}) await opendiscord.actions.get("openticket:unpin-ticket").run("ticket-message",{guild,channel,user,ticket,reason:null,sendMessage:true})
await instance.update(await openticket.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket})) await instance.update(await opendiscord.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket}))
} }
}) })
]) ])
openticket.verifybars.get("openticket:unpin-ticket-ticket-message").failure.add([ opendiscord.verifybars.get("openticket:unpin-ticket-ticket-message").failure.add([
new api.ODWorker("openticket:back-to-ticket-message",0,async (instance,params,source,cancel) => { new api.ODWorker("openticket:back-to-ticket-message",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance const {guild,channel,user} = instance
if (!guild){ if (!guild){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
return cancel() return cancel()
} }
const ticket = openticket.tickets.get(channel.id) const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){ if (!ticket || channel.isDMBased()){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
await instance.update(await openticket.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket})) await instance.update(await opendiscord.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket}))
}) })
]) ])
//UNPIN TICKET PIN MESSAGE //UNPIN TICKET PIN MESSAGE
openticket.verifybars.add(new api.ODVerifyBar("openticket:unpin-ticket-pin-message",openticket.builders.messages.getSafe("openticket:verifybar-pin-message"),!generalConfig.data.system.disableVerifyBars)) opendiscord.verifybars.add(new api.ODVerifyBar("openticket:unpin-ticket-pin-message",opendiscord.builders.messages.getSafe("openticket:verifybar-pin-message"),!generalConfig.data.system.disableVerifyBars))
openticket.verifybars.get("openticket:unpin-ticket-pin-message").success.add([ opendiscord.verifybars.get("openticket:unpin-ticket-pin-message").success.add([
new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => { new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => {
const permissionMode = generalConfig.data.system.permissions.unpin const permissionMode = generalConfig.data.system.permissions.unpin
if (permissionMode == "none"){ if (permissionMode == "none"){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel() return cancel()
}else if (permissionMode == "everyone") return }else if (permissionMode == "everyone") return
else if (permissionMode == "admin"){ else if (permissionMode == "admin"){
if (!openticket.permissions.hasPermissions("support",await openticket.permissions.getPermissions(instance.user,instance.channel,instance.guild))){ if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
return cancel() return cancel()
}else return }else return
}else{ }else{
if (!instance.guild || !instance.member){ if (!instance.guild || !instance.member){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
return cancel() return cancel()
} }
const role = await openticket.client.fetchGuildRole(instance.guild,permissionMode) const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
if (!role){ if (!role){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
return cancel() return cancel()
} }
if (!role.members.has(instance.member.id)){ if (!role.members.has(instance.member.id)){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel() return cancel()
}else return }else return
} }
@@ -210,58 +210,58 @@ export const registerVerifyBars = async () => {
new api.ODWorker("openticket:unpin-ticket",0,async (instance,params,source,cancel) => { new api.ODWorker("openticket:unpin-ticket",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance const {guild,channel,user} = instance
if (!guild){ if (!guild){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
return cancel() return cancel()
} }
const ticket = openticket.tickets.get(channel.id) const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){ if (!ticket || channel.isDMBased()){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
//return when not pinned //return when not pinned
if (!ticket.get("openticket:pinned").value){ if (!ticket.get("openticket:pinned").value){
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild,channel,user,error:openticket.languages.getTranslation("errors.actionInvalid.unpin"),layout:"simple"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build("button",{guild,channel,user,error:opendiscord.languages.getTranslation("errors.actionInvalid.unpin"),layout:"simple"}))
return cancel() return cancel()
} }
//return when busy //return when busy
if (ticket.get("openticket:busy").value){ if (ticket.get("openticket:busy").value){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
//start unpinning ticket //start unpinning ticket
if (params.data == "reason"){ if (params.data == "reason"){
//unpin with reason //unpin with reason
instance.modal(await openticket.builders.modals.getSafe("openticket:unpin-ticket-reason").build("pin-message",{guild,channel,user,ticket})) instance.modal(await opendiscord.builders.modals.getSafe("openticket:unpin-ticket-reason").build("pin-message",{guild,channel,user,ticket}))
}else{ }else{
//unpin without reason //unpin without reason
await instance.defer("update",false) await instance.defer("update",false)
await openticket.actions.get("openticket:unpin-ticket").run("pin-message",{guild,channel,user,ticket,reason:null,sendMessage:false}) await opendiscord.actions.get("openticket:unpin-ticket").run("pin-message",{guild,channel,user,ticket,reason:null,sendMessage:false})
await instance.update(await openticket.builders.messages.getSafe("openticket:unpin-message").build("pin-message",{guild,channel,user,ticket,reason:null})) await instance.update(await opendiscord.builders.messages.getSafe("openticket:unpin-message").build("pin-message",{guild,channel,user,ticket,reason:null}))
} }
}) })
]) ])
openticket.verifybars.get("openticket:unpin-ticket-pin-message").failure.add([ opendiscord.verifybars.get("openticket:unpin-ticket-pin-message").failure.add([
new api.ODWorker("openticket:back-to-pin-message",0,async (instance,params,source,cancel) => { new api.ODWorker("openticket:back-to-pin-message",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance const {guild,channel,user} = instance
const {verifybarMessage} = params const {verifybarMessage} = params
if (!guild){ if (!guild){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
return cancel() return cancel()
} }
const ticket = openticket.tickets.get(channel.id) const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){ if (!ticket || channel.isDMBased()){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
const rawReason = (verifybarMessage && verifybarMessage.embeds[0] && verifybarMessage.embeds[0].fields[0]) ? verifybarMessage.embeds[0].fields[0].value : null const rawReason = (verifybarMessage && verifybarMessage.embeds[0] && verifybarMessage.embeds[0].fields[0]) ? verifybarMessage.embeds[0].fields[0].value : null
const reason = (rawReason == null) ? null : rawReason.substring(3,rawReason.length-3) const reason = (rawReason == null) ? null : rawReason.substring(3,rawReason.length-3)
await instance.update(await openticket.builders.messages.getSafe("openticket:pin-message").build("other",{guild,channel,user,ticket,reason})) await instance.update(await opendiscord.builders.messages.getSafe("openticket:pin-message").build("other",{guild,channel,user,ticket,reason}))
}) })
]) ])
openticket.actions.get("openticket:unpin-ticket").workers.backupWorker = new api.ODWorker("openticket:cancel-busy",0,(instance,params) => { opendiscord.actions.get("openticket:unpin-ticket").workers.backupWorker = new api.ODWorker("openticket:cancel-busy",0,(instance,params) => {
//set busy to false in case of crash or cancel //set busy to false in case of crash or cancel
params.ticket.get("openticket:busy").value = false params.ticket.get("openticket:busy").value = false
}) })
+6 -6
View File
@@ -1,12 +1,12 @@
/////////////////////////////////////// ///////////////////////////////////////
//BUTTON BUILDERS //BUTTON BUILDERS
/////////////////////////////////////// ///////////////////////////////////////
import {openticket, api, utilities} from "../index" import {opendiscord, api, utilities} from "../index"
import * as discord from "discord.js" import * as discord from "discord.js"
const buttons = openticket.builders.buttons const buttons = opendiscord.builders.buttons
const lang = openticket.languages const lang = opendiscord.languages
const generalConfig = openticket.configs.get("openticket:general") const generalConfig = opendiscord.configs.get("openticket:general")
export const registerAllButtons = async () => { export const registerAllButtons = async () => {
verifybarButtons() verifybarButtons()
@@ -83,7 +83,7 @@ const helpMenuButtons = () => {
buttons.get("openticket:help-menu-page").workers.add( buttons.get("openticket:help-menu-page").workers.add(
new api.ODWorker("openticket:help-menu-page",0,async (instance,params) => { new api.ODWorker("openticket:help-menu-page",0,async (instance,params) => {
const {mode,page} = params const {mode,page} = params
const totalPages = (await openticket.helpmenu.render(mode)).length const totalPages = (await opendiscord.helpmenu.render(mode)).length
const pageText = (page+1).toString()+"/"+totalPages.toString() const pageText = (page+1).toString()+"/"+totalPages.toString()
instance.setCustomId("od:help-menu-page_"+page.toString()) instance.setCustomId("od:help-menu-page_"+page.toString())
@@ -127,7 +127,7 @@ const helpMenuButtons = () => {
buttons.get("openticket:help-menu-next").workers.add( buttons.get("openticket:help-menu-next").workers.add(
new api.ODWorker("openticket:help-menu-next",0,async (instance,params) => { new api.ODWorker("openticket:help-menu-next",0,async (instance,params) => {
const {mode,page} = params const {mode,page} = params
const totalPages = (await openticket.helpmenu.render(mode)).length const totalPages = (await opendiscord.helpmenu.render(mode)).length
instance.setCustomId("od:help-menu-next") instance.setCustomId("od:help-menu-next")
instance.setMode("button") instance.setMode("button")
+2 -2
View File
@@ -1,10 +1,10 @@
/////////////////////////////////////// ///////////////////////////////////////
//DROPDOWN BUILDERS //DROPDOWN BUILDERS
/////////////////////////////////////// ///////////////////////////////////////
import {openticket, api, utilities} from "../index" import {opendiscord, api, utilities} from "../index"
import * as discord from "discord.js" import * as discord from "discord.js"
const dropdowns = openticket.builders.dropdowns const dropdowns = opendiscord.builders.dropdowns
export const registerAllDropdowns = async () => { export const registerAllDropdowns = async () => {
panelDropdowns() panelDropdowns()
+24 -24
View File
@@ -1,13 +1,13 @@
/////////////////////////////////////// ///////////////////////////////////////
//EMBED BUILDERS //EMBED BUILDERS
/////////////////////////////////////// ///////////////////////////////////////
import {openticket, api, utilities} from "../index" import {opendiscord, api, utilities} from "../index"
import * as discord from "discord.js" import * as discord from "discord.js"
import nodepath from "path" import nodepath from "path"
const embeds = openticket.builders.embeds const embeds = opendiscord.builders.embeds
const lang = openticket.languages const lang = opendiscord.languages
const generalConfig = openticket.configs.get("openticket:general") const generalConfig = opendiscord.configs.get("openticket:general")
export const registerAllEmbeds = async () => { export const registerAllEmbeds = async () => {
errorEmbeds() errorEmbeds()
@@ -274,7 +274,7 @@ const errorEmbeds = () => {
new api.ODWorker("openticket:error-option-unknown",0,async (instance,params,source) => { new api.ODWorker("openticket:error-option-unknown",0,async (instance,params,source) => {
const {user} = params const {user} = params
const renderedTicketOptions = openticket.options.getAll().map((option) => { const renderedTicketOptions = opendiscord.options.getAll().map((option) => {
if (option instanceof api.ODTicketOption && option.exists("openticket:name")){ if (option instanceof api.ODTicketOption && option.exists("openticket:name")){
return "- **"+option.get("openticket:name").value+":** `"+option.id.value+"`" return "- **"+option.get("openticket:name").value+":** `"+option.id.value+"`"
}else return "- `"+option.id.value+"`" }else return "- `"+option.id.value+"`"
@@ -294,7 +294,7 @@ const errorEmbeds = () => {
new api.ODWorker("openticket:error-panel-unknown",0,async (instance,params,source) => { new api.ODWorker("openticket:error-panel-unknown",0,async (instance,params,source) => {
const {user} = params const {user} = params
const renderedPanels = openticket.panels.getAll().map((panel) => { const renderedPanels = opendiscord.panels.getAll().map((panel) => {
if (panel.exists("openticket:name")){ if (panel.exists("openticket:name")){
return "- **"+panel.get("openticket:name").value+":** `"+panel.id.value+"`" return "- **"+panel.get("openticket:name").value+":** `"+panel.id.value+"`"
}else return "- `"+panel.id.value+"`" }else return "- `"+panel.id.value+"`"
@@ -370,9 +370,9 @@ const helpMenuEmbeds = () => {
instance.setColor(generalConfig.data.mainColor) instance.setColor(generalConfig.data.mainColor)
instance.setTitle(utilities.emojiTitle("ℹ️",lang.getTranslation("actions.titles.help"))) instance.setTitle(utilities.emojiTitle("ℹ️",lang.getTranslation("actions.titles.help")))
instance.setDescription(lang.getTranslation("actions.descriptions.helpExplanation")) instance.setDescription(lang.getTranslation("actions.descriptions.helpExplanation"))
instance.setThumbnail(openticket.client.client.user.displayAvatarURL()) instance.setThumbnail(opendiscord.client.client.user.displayAvatarURL())
const data = await openticket.helpmenu.render(mode) const data = await opendiscord.helpmenu.render(mode)
const currentData = data[page] ?? [] const currentData = data[page] ?? []
instance.setFields(currentData) instance.setFields(currentData)
}) })
@@ -386,7 +386,7 @@ const statsEmbeds = () => {
new api.ODWorker("openticket:stats-global",0,async (instance,params) => { new api.ODWorker("openticket:stats-global",0,async (instance,params) => {
const {guild,channel,user} = params const {guild,channel,user} = params
const scope = openticket.stats.get("openticket:global") const scope = opendiscord.stats.get("openticket:global")
if (!scope) return if (!scope) return
const data = await scope.render("GLOBAL",guild,channel,user) const data = await scope.render("GLOBAL",guild,channel,user)
@@ -394,9 +394,9 @@ const statsEmbeds = () => {
instance.setTitle(scope.name) instance.setTitle(scope.name)
instance.setDescription(data) instance.setDescription(data)
if (openticket.permissions.hasPermissions("owner",await openticket.permissions.getPermissions(user,channel,guild))){ if (opendiscord.permissions.hasPermissions("owner",await opendiscord.permissions.getPermissions(user,channel,guild))){
//show system data when owner or developer //show system data when owner or developer
const systemScope = openticket.stats.get("openticket:system") const systemScope = opendiscord.stats.get("openticket:system")
if (!systemScope) return if (!systemScope) return
const systemData = await systemScope.render("GLOBAL",guild,channel,user) const systemData = await systemScope.render("GLOBAL",guild,channel,user)
instance.addFields({name:systemScope.name,value:systemData,inline:false}) instance.addFields({name:systemScope.name,value:systemData,inline:false})
@@ -410,8 +410,8 @@ const statsEmbeds = () => {
new api.ODWorker("openticket:stats-ticket",0,async (instance,params) => { new api.ODWorker("openticket:stats-ticket",0,async (instance,params) => {
const {guild,channel,user,scopeData} = params const {guild,channel,user,scopeData} = params
const scope = openticket.stats.get("openticket:ticket") const scope = opendiscord.stats.get("openticket:ticket")
const participantsScope = openticket.stats.get("openticket:participants") const participantsScope = opendiscord.stats.get("openticket:participants")
if (!scope || !participantsScope) return if (!scope || !participantsScope) return
const data = await scope.render(scopeData.id.value,guild,channel,user) const data = await scope.render(scopeData.id.value,guild,channel,user)
const participantsData = await participantsScope.render(scopeData.id.value,guild,channel,user) const participantsData = await participantsScope.render(scopeData.id.value,guild,channel,user)
@@ -429,7 +429,7 @@ const statsEmbeds = () => {
new api.ODWorker("openticket:stats-user",0,async (instance,params) => { new api.ODWorker("openticket:stats-user",0,async (instance,params) => {
const {guild,channel,user,scopeData} = params const {guild,channel,user,scopeData} = params
const scope = openticket.stats.get("openticket:user") const scope = opendiscord.stats.get("openticket:user")
if (!scope) return if (!scope) return
const data = await scope.render(scopeData.id,guild,channel,user) const data = await scope.render(scopeData.id,guild,channel,user)
@@ -439,8 +439,8 @@ const statsEmbeds = () => {
instance.setThumbnail(scopeData.displayAvatarURL()) instance.setThumbnail(scopeData.displayAvatarURL())
}), }),
new api.ODWorker("openticket:easter-egg",-1,async (instance,params) => { new api.ODWorker("openticket:easter-egg",-1,async (instance,params) => {
if (!openticket.flags.exists("openticket:no-easter")) return if (!opendiscord.flags.exists("openticket:no-easter")) return
const easterFlag = openticket.flags.get("openticket:no-easter") const easterFlag = opendiscord.flags.get("openticket:no-easter")
if (!easterFlag.value){ if (!easterFlag.value){
//🥚 add easter egg 🥚 //🥚 add easter egg 🥚
const {user} = params const {user} = params
@@ -563,7 +563,7 @@ const ticketEmbeds = () => {
const {user,ticket} = params const {user,ticket} = params
const method = (source == "panel-button" || source == "panel-dropdown") ? lang.getTranslation("params.uppercase.panel") : (source == "slash" || source == "text") ? lang.getTranslation("params.uppercase.command") : lang.getTranslation("params.uppercase.system") const method = (source == "panel-button" || source == "panel-dropdown") ? lang.getTranslation("params.uppercase.panel") : (source == "slash" || source == "text") ? lang.getTranslation("params.uppercase.command") : lang.getTranslation("params.uppercase.system")
const blacklisted = openticket.blacklist.exists(user.id) ? lang.getTranslation("params.uppercase.true") : lang.getTranslation("params.uppercase.false") const blacklisted = opendiscord.blacklist.exists(user.id) ? lang.getTranslation("params.uppercase.true") : lang.getTranslation("params.uppercase.false")
instance.setColor(generalConfig.data.mainColor) instance.setColor(generalConfig.data.mainColor)
instance.setTitle(utilities.emojiTitle("🎫",lang.getTranslation("actions.titles.created"))) instance.setTitle(utilities.emojiTitle("🎫",lang.getTranslation("actions.titles.created")))
@@ -608,7 +608,7 @@ const ticketEmbeds = () => {
else if (!ticket.get("openticket:closed").value && ticket.get("openticket:autoclose-enabled").value) instance.setFooter("⏱️ "+lang.getTranslationWithParams("actions.descriptions.ticketMessageAutoclose",[ticket.option.get("openticket:autoclose-hours").value.toString()])) else if (!ticket.get("openticket:closed").value && ticket.get("openticket:autoclose-enabled").value) instance.setFooter("⏱️ "+lang.getTranslationWithParams("actions.descriptions.ticketMessageAutoclose",[ticket.option.get("openticket:autoclose-hours").value.toString()]))
if (ticket.get("openticket:claimed").value){ if (ticket.get("openticket:claimed").value){
const claimUser = await openticket.tickets.getTicketUser(ticket,"claimer") const claimUser = await opendiscord.tickets.getTicketUser(ticket,"claimer")
if (!claimUser) return if (!claimUser) return
instance.setAuthor(lang.getTranslationWithParams("params.uppercase.claimedBy",[claimUser.displayName]),claimUser.displayAvatarURL()) instance.setAuthor(lang.getTranslationWithParams("params.uppercase.claimedBy",[claimUser.displayName]),claimUser.displayAvatarURL())
} }
@@ -774,7 +774,7 @@ const ticketEmbeds = () => {
embeds.get("openticket:ticket-action-dm").workers.add( embeds.get("openticket:ticket-action-dm").workers.add(
new api.ODWorker("openticket:ticket-action-dm",0,async (instance,params,source) => { new api.ODWorker("openticket:ticket-action-dm",0,async (instance,params,source) => {
const {user,mode,ticket,reason,additionalData} = params const {user,mode,ticket,reason,additionalData} = params
const channel = await openticket.tickets.getTicketChannel(ticket) const channel = await opendiscord.tickets.getTicketChannel(ticket)
instance.setColor(generalConfig.data.mainColor) instance.setColor(generalConfig.data.mainColor)
instance.setTimestamp(new Date()) instance.setTimestamp(new Date())
@@ -823,7 +823,7 @@ const ticketEmbeds = () => {
embeds.get("openticket:ticket-action-logs").workers.add( embeds.get("openticket:ticket-action-logs").workers.add(
new api.ODWorker("openticket:ticket-action-logs",0,async (instance,params,source) => { new api.ODWorker("openticket:ticket-action-logs",0,async (instance,params,source) => {
const {user,mode,ticket,reason,additionalData} = params const {user,mode,ticket,reason,additionalData} = params
const channel = await openticket.tickets.getTicketChannel(ticket) const channel = await opendiscord.tickets.getTicketChannel(ticket)
instance.setColor(generalConfig.data.mainColor) instance.setColor(generalConfig.data.mainColor)
instance.setThumbnail(user.displayAvatarURL()) instance.setThumbnail(user.displayAvatarURL())
@@ -882,7 +882,7 @@ const blacklistEmbeds = () => {
const {user} = params const {user} = params
const renderedUsers: string[] = [] const renderedUsers: string[] = []
await openticket.blacklist.loopAll((blacklist,id) => {renderedUsers.push(discord.userMention(id.value)+" - "+(blacklist.reason ? blacklist.reason : "/"))}) await opendiscord.blacklist.loopAll((blacklist,id) => {renderedUsers.push(discord.userMention(id.value)+" - "+(blacklist.reason ? blacklist.reason : "/"))})
instance.setAuthor(user.displayName,user.displayAvatarURL()) instance.setAuthor(user.displayName,user.displayAvatarURL())
instance.setColor(generalConfig.data.mainColor) instance.setColor(generalConfig.data.mainColor)
@@ -900,7 +900,7 @@ const blacklistEmbeds = () => {
embeds.get("openticket:blacklist-get").workers.add( embeds.get("openticket:blacklist-get").workers.add(
new api.ODWorker("openticket:blacklist-get",0,async (instance,params,source) => { new api.ODWorker("openticket:blacklist-get",0,async (instance,params,source) => {
const {user,data} = params const {user,data} = params
const blacklist = openticket.blacklist.get(data.id) const blacklist = opendiscord.blacklist.get(data.id)
instance.setAuthor(user.displayName,user.displayAvatarURL()) instance.setAuthor(user.displayName,user.displayAvatarURL())
instance.setColor(generalConfig.data.mainColor) instance.setColor(generalConfig.data.mainColor)
@@ -985,7 +985,7 @@ const transcriptEmbeds = () => {
embeds.get("openticket:transcript-text-ready").workers.add( embeds.get("openticket:transcript-text-ready").workers.add(
new api.ODWorker("openticket:transcript-text-ready",0,async (instance,params,source) => { new api.ODWorker("openticket:transcript-text-ready",0,async (instance,params,source) => {
const {guild,channel,user,ticket,compiler} = params const {guild,channel,user,ticket,compiler} = params
const transcriptConfig = openticket.configs.get("openticket:transcripts") const transcriptConfig = opendiscord.configs.get("openticket:transcripts")
instance.setColor(transcriptConfig.data.embedSettings.customColor ? transcriptConfig.data.embedSettings.customColor : generalConfig.data.mainColor) instance.setColor(transcriptConfig.data.embedSettings.customColor ? transcriptConfig.data.embedSettings.customColor : generalConfig.data.mainColor)
instance.setTitle(utilities.emojiTitle("📄",lang.getTranslation("transcripts.success.ready"))) instance.setTitle(utilities.emojiTitle("📄",lang.getTranslation("transcripts.success.ready")))
@@ -1015,7 +1015,7 @@ const transcriptEmbeds = () => {
embeds.get("openticket:transcript-html-ready").workers.add( embeds.get("openticket:transcript-html-ready").workers.add(
new api.ODWorker("openticket:transcript-html-ready",0,async (instance,params,source) => { new api.ODWorker("openticket:transcript-html-ready",0,async (instance,params,source) => {
const {guild,channel,user,ticket,compiler,result} = params const {guild,channel,user,ticket,compiler,result} = params
const transcriptConfig = openticket.configs.get("openticket:transcripts") const transcriptConfig = opendiscord.configs.get("openticket:transcripts")
instance.setColor(transcriptConfig.data.embedSettings.customColor ? transcriptConfig.data.embedSettings.customColor : generalConfig.data.mainColor) instance.setColor(transcriptConfig.data.embedSettings.customColor ? transcriptConfig.data.embedSettings.customColor : generalConfig.data.mainColor)
instance.setTitle(utilities.emojiTitle("📄",lang.getTranslation("transcripts.success.ready"))) instance.setTitle(utilities.emojiTitle("📄",lang.getTranslation("transcripts.success.ready")))
+5 -5
View File
@@ -1,12 +1,12 @@
/////////////////////////////////////// ///////////////////////////////////////
//FILE BUILDERS //FILE BUILDERS
/////////////////////////////////////// ///////////////////////////////////////
import {openticket, api, utilities} from "../index" import {opendiscord, api, utilities} from "../index"
import * as discord from "discord.js" import * as discord from "discord.js"
const files = openticket.builders.files const files = opendiscord.builders.files
const lang = openticket.languages const lang = opendiscord.languages
const transcriptConfig = openticket.configs.get("openticket:transcripts") const transcriptConfig = opendiscord.configs.get("openticket:transcripts")
export const registerAllFiles = async () => { export const registerAllFiles = async () => {
transcriptFiles() transcriptFiles()
@@ -24,7 +24,7 @@ const transcriptFiles = () => {
const customName = transcriptConfig.data.textTranscriptStyle.customFileName const customName = transcriptConfig.data.textTranscriptStyle.customFileName
const creatorId = ticket.get("openticket:opened-by").value ?? "unknown-creator-id" const creatorId = ticket.get("openticket:opened-by").value ?? "unknown-creator-id"
const creator = (await openticket.tickets.getTicketUser(ticket,"creator")) const creator = (await opendiscord.tickets.getTicketUser(ticket,"creator"))
if (fileMode == "custom") instance.setName(customName.split(".")[0]+".txt") if (fileMode == "custom") instance.setName(customName.split(".")[0]+".txt")
else if (fileMode == "user-id") instance.setName(creatorId+".txt") else if (fileMode == "user-id") instance.setName(creatorId+".txt")
+18 -18
View File
@@ -1,16 +1,16 @@
/////////////////////////////////////// ///////////////////////////////////////
//MESSAGE BUILDERS //MESSAGE BUILDERS
/////////////////////////////////////// ///////////////////////////////////////
import {openticket, api, utilities} from "../index" import {opendiscord, api, utilities} from "../index"
import * as discord from "discord.js" import * as discord from "discord.js"
const messages = openticket.builders.messages const messages = opendiscord.builders.messages
const buttons = openticket.builders.buttons const buttons = opendiscord.builders.buttons
const dropdowns = openticket.builders.dropdowns const dropdowns = opendiscord.builders.dropdowns
const files = openticket.builders.files const files = opendiscord.builders.files
const embeds = openticket.builders.embeds const embeds = opendiscord.builders.embeds
const lang = openticket.languages const lang = opendiscord.languages
const generalConfig = openticket.configs.get("openticket:general") const generalConfig = opendiscord.configs.get("openticket:general")
export const registerAllMessages = async () => { export const registerAllMessages = async () => {
verifyBarMessages() verifyBarMessages()
@@ -36,7 +36,7 @@ const verifyBarMessages = () => {
instance.setContent("ODError: Not In Guild => `openticket:verifybar-ticket-message`") instance.setContent("ODError: Not In Guild => `openticket:verifybar-ticket-message`")
return return
} }
const ticket = openticket.tickets.get(channel.id) const ticket = opendiscord.tickets.get(channel.id)
if (!ticket){ if (!ticket){
instance.setContent("ODError: Unknown Ticket => `openticket:verifybar-ticket-message`") instance.setContent("ODError: Unknown Ticket => `openticket:verifybar-ticket-message`")
return return
@@ -110,7 +110,7 @@ const verifyBarMessages = () => {
instance.setContent("ODError: Not In Guild => `openticket:verifybar-close-message`") instance.setContent("ODError: Not In Guild => `openticket:verifybar-close-message`")
return return
} }
const ticket = openticket.tickets.get(channel.id) const ticket = opendiscord.tickets.get(channel.id)
if (!ticket){ if (!ticket){
instance.setContent("ODError: Unknown Ticket => `openticket:verifybar-close-message`") instance.setContent("ODError: Unknown Ticket => `openticket:verifybar-close-message`")
return return
@@ -146,7 +146,7 @@ const verifyBarMessages = () => {
instance.setContent("ODError: Not In Guild => `openticket:verifybar-reopen-message`") instance.setContent("ODError: Not In Guild => `openticket:verifybar-reopen-message`")
return return
} }
const ticket = openticket.tickets.get(channel.id) const ticket = opendiscord.tickets.get(channel.id)
if (!ticket){ if (!ticket){
instance.setContent("ODError: Unknown Ticket => `openticket:verifybar-reopen-message`") instance.setContent("ODError: Unknown Ticket => `openticket:verifybar-reopen-message`")
return return
@@ -182,7 +182,7 @@ const verifyBarMessages = () => {
instance.setContent("ODError: Not In Guild => `openticket:verifybar-claim-message`") instance.setContent("ODError: Not In Guild => `openticket:verifybar-claim-message`")
return return
} }
const ticket = openticket.tickets.get(channel.id) const ticket = opendiscord.tickets.get(channel.id)
if (!ticket){ if (!ticket){
instance.setContent("ODError: Unknown Ticket => `openticket:verifybar-claim-message`") instance.setContent("ODError: Unknown Ticket => `openticket:verifybar-claim-message`")
return return
@@ -212,7 +212,7 @@ const verifyBarMessages = () => {
instance.setContent("ODError: Not In Guild => `openticket:verifybar-unclaim-message`") instance.setContent("ODError: Not In Guild => `openticket:verifybar-unclaim-message`")
return return
} }
const ticket = openticket.tickets.get(channel.id) const ticket = opendiscord.tickets.get(channel.id)
if (!ticket){ if (!ticket){
instance.setContent("ODError: Unknown Ticket => `openticket:verifybar-unclaim-message`") instance.setContent("ODError: Unknown Ticket => `openticket:verifybar-unclaim-message`")
return return
@@ -242,7 +242,7 @@ const verifyBarMessages = () => {
instance.setContent("ODError: Not In Guild => `openticket:verifybar-pin-message`") instance.setContent("ODError: Not In Guild => `openticket:verifybar-pin-message`")
return return
} }
const ticket = openticket.tickets.get(channel.id) const ticket = opendiscord.tickets.get(channel.id)
if (!ticket){ if (!ticket){
instance.setContent("ODError: Unknown Ticket => `openticket:verifybar-pin-message`") instance.setContent("ODError: Unknown Ticket => `openticket:verifybar-pin-message`")
return return
@@ -272,7 +272,7 @@ const verifyBarMessages = () => {
instance.setContent("ODError: Not In Guild => `openticket:verifybar-unpin-message`") instance.setContent("ODError: Not In Guild => `openticket:verifybar-unpin-message`")
return return
} }
const ticket = openticket.tickets.get(channel.id) const ticket = opendiscord.tickets.get(channel.id)
if (!ticket){ if (!ticket){
instance.setContent("ODError: Unknown Ticket => `openticket:verifybar-unpin-message`") instance.setContent("ODError: Unknown Ticket => `openticket:verifybar-unpin-message`")
return return
@@ -302,7 +302,7 @@ const verifyBarMessages = () => {
instance.setContent("ODError: Not In Guild => `openticket:verifybar-autoclose-message`") instance.setContent("ODError: Not In Guild => `openticket:verifybar-autoclose-message`")
return return
} }
const ticket = openticket.tickets.get(channel.id) const ticket = opendiscord.tickets.get(channel.id)
if (!ticket){ if (!ticket){
instance.setContent("ODError: Unknown Ticket => `openticket:verifybar-autoclose-message`") instance.setContent("ODError: Unknown Ticket => `openticket:verifybar-autoclose-message`")
return return
@@ -496,7 +496,7 @@ const helpMenuMessages = () => {
messages.get("openticket:help-menu").workers.add( messages.get("openticket:help-menu").workers.add(
new api.ODWorker("openticket:help-menu",0,async (instance,params,source) => { new api.ODWorker("openticket:help-menu",0,async (instance,params,source) => {
const {mode,page} = params const {mode,page} = params
const totalPages = (await openticket.helpmenu.render(mode)).length const totalPages = (await opendiscord.helpmenu.render(mode)).length
const embed = await embeds.getSafe("openticket:help-menu").build(source,{mode,page}) const embed = await embeds.getSafe("openticket:help-menu").build(source,{mode,page})
instance.addEmbed(embed) instance.addEmbed(embed)
@@ -589,7 +589,7 @@ const panelMessages = () => {
const {guild,channel,user,panel} = params const {guild,channel,user,panel} = params
const options: api.ODOption[] = [] const options: api.ODOption[] = []
panel.get("openticket:options").value.forEach((id) => { panel.get("openticket:options").value.forEach((id) => {
const opt = openticket.options.get(id) const opt = opendiscord.options.get(id)
if (opt) options.push(opt) if (opt) options.push(opt)
}) })
+4 -4
View File
@@ -1,11 +1,11 @@
/////////////////////////////////////// ///////////////////////////////////////
//MODAL BUILDERS //MODAL BUILDERS
/////////////////////////////////////// ///////////////////////////////////////
import {openticket, api, utilities} from "../index" import {opendiscord, api, utilities} from "../index"
import * as discord from "discord.js" import * as discord from "discord.js"
const modals = openticket.builders.modals const modals = opendiscord.builders.modals
const lang = openticket.languages const lang = opendiscord.languages
export const registerAllModals = async () => { export const registerAllModals = async () => {
ticketModals() ticketModals()
@@ -21,7 +21,7 @@ const ticketModals = () => {
instance.setTitle(option.exists("openticket:name") ? option.get("openticket:name").value : option.id.value) instance.setTitle(option.exists("openticket:name") ? option.get("openticket:name").value : option.id.value)
const questionIds = option.get("openticket:questions").value const questionIds = option.get("openticket:questions").value
questionIds.forEach((id) => { questionIds.forEach((id) => {
const question = openticket.questions.get(id) const question = opendiscord.questions.get(id)
if (!question) return if (!question) return
if (question instanceof api.ODShortQuestion) instance.addQuestion({ if (question instanceof api.ODShortQuestion) instance.addQuestion({
customId:question.id.value, customId:question.id.value,
+20 -20
View File
@@ -1,44 +1,44 @@
/////////////////////////////////////// ///////////////////////////////////////
//ADD COMMAND //ADD COMMAND
/////////////////////////////////////// ///////////////////////////////////////
import {openticket, api, utilities} from "../index" import {opendiscord, api, utilities} from "../index"
import * as discord from "discord.js" import * as discord from "discord.js"
const generalConfig = openticket.configs.get("openticket:general") const generalConfig = opendiscord.configs.get("openticket:general")
export const registerCommandResponders = async () => { export const registerCommandResponders = async () => {
//ADD COMMAND RESPONDER //ADD COMMAND RESPONDER
openticket.responders.commands.add(new api.ODCommandResponder("openticket:add",generalConfig.data.prefix,"add")) opendiscord.responders.commands.add(new api.ODCommandResponder("openticket:add",generalConfig.data.prefix,"add"))
openticket.responders.commands.get("openticket:add").workers.add([ opendiscord.responders.commands.get("openticket:add").workers.add([
new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => { new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => {
const permissionMode = generalConfig.data.system.permissions.add const permissionMode = generalConfig.data.system.permissions.add
if (permissionMode == "none"){ if (permissionMode == "none"){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel() return cancel()
}else if (permissionMode == "everyone") return }else if (permissionMode == "everyone") return
else if (permissionMode == "admin"){ else if (permissionMode == "admin"){
if (!openticket.permissions.hasPermissions("support",await openticket.permissions.getPermissions(instance.user,instance.channel,instance.guild))){ if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
return cancel() return cancel()
}else return }else return
}else{ }else{
if (!instance.guild || !instance.member){ if (!instance.guild || !instance.member){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
return cancel() return cancel()
} }
const role = await openticket.client.fetchGuildRole(instance.guild,permissionMode) const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
if (!role){ if (!role){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
return cancel() return cancel()
} }
if (!role.members.has(instance.member.id)){ if (!role.members.has(instance.member.id)){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel() return cancel()
}else return }else return
} }
@@ -46,17 +46,17 @@ export const registerCommandResponders = async () => {
new api.ODWorker("openticket:add",0,async (instance,params,source,cancel) => { new api.ODWorker("openticket:add",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance const {guild,channel,user} = instance
if (!guild){ if (!guild){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
return cancel() return cancel()
} }
const ticket = openticket.tickets.get(channel.id) const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){ if (!ticket || channel.isDMBased()){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
//return when busy //return when busy
if (ticket.get("openticket:busy").value){ if (ticket.get("openticket:busy").value){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
@@ -64,19 +64,19 @@ export const registerCommandResponders = async () => {
const reason = instance.options.getString("reason",false) const reason = instance.options.getString("reason",false)
//return when user already added to ticket //return when user already added to ticket
const participants = await openticket.tickets.getAllTicketParticipants(ticket) const participants = await opendiscord.tickets.getAllTicketParticipants(ticket)
if (!participants || participants.find((p) => p.user.id == data.id)){ if (!participants || participants.find((p) => p.user.id == data.id)){
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild,channel,user,error:openticket.languages.getTranslation("errors.actionInvalid.add"),layout:"simple"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build("button",{guild,channel,user,error:opendiscord.languages.getTranslation("errors.actionInvalid.add"),layout:"simple"}))
return cancel() return cancel()
} }
//start adding user to ticket //start adding user to ticket
await instance.defer(false) await instance.defer(false)
await openticket.actions.get("openticket:add-ticket-user").run(source,{guild,channel,user,ticket,reason,sendMessage:false,data}) await opendiscord.actions.get("openticket:add-ticket-user").run(source,{guild,channel,user,ticket,reason,sendMessage:false,data})
await instance.reply(await openticket.builders.messages.getSafe("openticket:add-message").build(source,{guild,channel,user,ticket,reason,data})) await instance.reply(await opendiscord.builders.messages.getSafe("openticket:add-message").build(source,{guild,channel,user,ticket,reason,data}))
}), }),
new api.ODWorker("openticket:logs",-1,(instance,params,source,cancel) => { new api.ODWorker("openticket:logs",-1,(instance,params,source,cancel) => {
openticket.log(instance.user.displayName+" used the 'add' command!","info",[ opendiscord.log(instance.user.displayName+" used the 'add' command!","info",[
{key:"user",value:instance.user.username}, {key:"user",value:instance.user.username},
{key:"userid",value:instance.user.id,hidden:true}, {key:"userid",value:instance.user.id,hidden:true},
{key:"channelid",value:instance.channel.id,hidden:true}, {key:"channelid",value:instance.channel.id,hidden:true},
+23 -23
View File
@@ -1,44 +1,44 @@
/////////////////////////////////////// ///////////////////////////////////////
//AUTOCLOSE COMMAND //AUTOCLOSE COMMAND
/////////////////////////////////////// ///////////////////////////////////////
import {openticket, api, utilities} from "../index" import {opendiscord, api, utilities} from "../index"
import * as discord from "discord.js" import * as discord from "discord.js"
const generalConfig = openticket.configs.get("openticket:general") const generalConfig = opendiscord.configs.get("openticket:general")
export const registerCommandResponders = async () => { export const registerCommandResponders = async () => {
//AUTOCLOSE COMMAND RESPONDER //AUTOCLOSE COMMAND RESPONDER
openticket.responders.commands.add(new api.ODCommandResponder("openticket:autoclose",generalConfig.data.prefix,/^autoclose/)) opendiscord.responders.commands.add(new api.ODCommandResponder("openticket:autoclose",generalConfig.data.prefix,/^autoclose/))
openticket.responders.commands.get("openticket:autoclose").workers.add([ opendiscord.responders.commands.get("openticket:autoclose").workers.add([
new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => { new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => {
const permissionMode = generalConfig.data.system.permissions.autoclose const permissionMode = generalConfig.data.system.permissions.autoclose
if (permissionMode == "none"){ if (permissionMode == "none"){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel() return cancel()
}else if (permissionMode == "everyone") return }else if (permissionMode == "everyone") return
else if (permissionMode == "admin"){ else if (permissionMode == "admin"){
if (!openticket.permissions.hasPermissions("support",await openticket.permissions.getPermissions(instance.user,instance.channel,instance.guild))){ if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
return cancel() return cancel()
}else return }else return
}else{ }else{
if (!instance.guild || !instance.member){ if (!instance.guild || !instance.member){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
return cancel() return cancel()
} }
const role = await openticket.client.fetchGuildRole(instance.guild,permissionMode) const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
if (!role){ if (!role){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
return cancel() return cancel()
} }
if (!role.members.has(instance.member.id)){ if (!role.members.has(instance.member.id)){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel() return cancel()
}else return }else return
} }
@@ -47,22 +47,22 @@ export const registerCommandResponders = async () => {
const {guild,channel,user} = instance const {guild,channel,user} = instance
if (!guild){ if (!guild){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build(source,{channel:instance.channel,user:instance.user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-not-in-guild").build(source,{channel:instance.channel,user:instance.user}))
return cancel() return cancel()
} }
const ticket = openticket.tickets.get(channel.id) const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){ if (!ticket || channel.isDMBased()){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
return return
} }
//return when already closed //return when already closed
if (ticket.get("openticket:closed").value){ if (ticket.get("openticket:closed").value){
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild,channel,user,error:openticket.languages.getTranslation("errors.actionInvalid.close"),layout:"simple"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build("button",{guild,channel,user,error:opendiscord.languages.getTranslation("errors.actionInvalid.close"),layout:"simple"}))
return cancel() return cancel()
} }
//return when busy //return when busy
if (ticket.get("openticket:busy").value){ if (ticket.get("openticket:busy").value){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
@@ -73,36 +73,36 @@ export const registerCommandResponders = async () => {
const reason = instance.options.getString("reason",false) const reason = instance.options.getString("reason",false)
ticket.get("openticket:autoclose-enabled").value = false ticket.get("openticket:autoclose-enabled").value = false
ticket.get("openticket:autoclose-hours").value = 0 ticket.get("openticket:autoclose-hours").value = 0
await instance.reply(await openticket.builders.messages.getSafe("openticket:autoclose-disable").build(source,{guild,channel,user,ticket,reason})) await instance.reply(await opendiscord.builders.messages.getSafe("openticket:autoclose-disable").build(source,{guild,channel,user,ticket,reason}))
}else if (scope == "enable"){ }else if (scope == "enable"){
const time = instance.options.getNumber("time",true) const time = instance.options.getNumber("time",true)
const reason = instance.options.getString("reason",false) const reason = instance.options.getString("reason",false)
ticket.get("openticket:autoclose-enabled").value = true ticket.get("openticket:autoclose-enabled").value = true
ticket.get("openticket:autoclose-hours").value = time ticket.get("openticket:autoclose-hours").value = time
await instance.reply(await openticket.builders.messages.getSafe("openticket:autoclose-enable").build(source,{guild,channel,user,ticket,reason,time})) await instance.reply(await opendiscord.builders.messages.getSafe("openticket:autoclose-enable").build(source,{guild,channel,user,ticket,reason,time}))
} }
//update ticket message //update ticket message
const ticketMessage = await openticket.tickets.getTicketMessage(ticket) const ticketMessage = await opendiscord.tickets.getTicketMessage(ticket)
if (ticketMessage){ if (ticketMessage){
try{ try{
ticketMessage.edit((await openticket.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket})).message) ticketMessage.edit((await opendiscord.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket})).message)
}catch(e){ }catch(e){
openticket.log("Unable to edit ticket message on autoclose "+scope+"!","error",[ opendiscord.log("Unable to edit ticket message on autoclose "+scope+"!","error",[
{key:"channel",value:"#"+channel.name}, {key:"channel",value:"#"+channel.name},
{key:"channelid",value:channel.id,hidden:true}, {key:"channelid",value:channel.id,hidden:true},
{key:"messageid",value:ticketMessage.id}, {key:"messageid",value:ticketMessage.id},
{key:"option",value:ticket.option.id.value} {key:"option",value:ticket.option.id.value}
]) ])
openticket.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException")) opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
} }
} }
}), }),
new api.ODWorker("openticket:logs",-1,(instance,params,source,cancel) => { new api.ODWorker("openticket:logs",-1,(instance,params,source,cancel) => {
const scope = instance.options.getSubCommand() const scope = instance.options.getSubCommand()
const reason = instance.options.getString("reason",false) const reason = instance.options.getString("reason",false)
openticket.log(instance.user.displayName+" used the 'autoclose "+scope+"' command!","info",[ opendiscord.log(instance.user.displayName+" used the 'autoclose "+scope+"' command!","info",[
{key:"user",value:instance.user.username}, {key:"user",value:instance.user.username},
{key:"userid",value:instance.user.id,hidden:true}, {key:"userid",value:instance.user.id,hidden:true},
{key:"channelid",value:instance.channel.id,hidden:true}, {key:"channelid",value:instance.channel.id,hidden:true},
+22 -22
View File
@@ -1,44 +1,44 @@
/////////////////////////////////////// ///////////////////////////////////////
//AUTODELETE COMMAND //AUTODELETE COMMAND
/////////////////////////////////////// ///////////////////////////////////////
import {openticket, api, utilities} from "../index" import {opendiscord, api, utilities} from "../index"
import * as discord from "discord.js" import * as discord from "discord.js"
const generalConfig = openticket.configs.get("openticket:general") const generalConfig = opendiscord.configs.get("openticket:general")
export const registerCommandResponders = async () => { export const registerCommandResponders = async () => {
//AUTODELETE COMMAND RESPONDER //AUTODELETE COMMAND RESPONDER
openticket.responders.commands.add(new api.ODCommandResponder("openticket:autodelete",generalConfig.data.prefix,/^autodelete/)) opendiscord.responders.commands.add(new api.ODCommandResponder("openticket:autodelete",generalConfig.data.prefix,/^autodelete/))
openticket.responders.commands.get("openticket:autodelete").workers.add([ opendiscord.responders.commands.get("openticket:autodelete").workers.add([
new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => { new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => {
const permissionMode = generalConfig.data.system.permissions.autodelete const permissionMode = generalConfig.data.system.permissions.autodelete
if (permissionMode == "none"){ if (permissionMode == "none"){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel() return cancel()
}else if (permissionMode == "everyone") return }else if (permissionMode == "everyone") return
else if (permissionMode == "admin"){ else if (permissionMode == "admin"){
if (!openticket.permissions.hasPermissions("support",await openticket.permissions.getPermissions(instance.user,instance.channel,instance.guild))){ if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
return cancel() return cancel()
}else return }else return
}else{ }else{
if (!instance.guild || !instance.member){ if (!instance.guild || !instance.member){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
return cancel() return cancel()
} }
const role = await openticket.client.fetchGuildRole(instance.guild,permissionMode) const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
if (!role){ if (!role){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
return cancel() return cancel()
} }
if (!role.members.has(instance.member.id)){ if (!role.members.has(instance.member.id)){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel() return cancel()
}else return }else return
} }
@@ -47,17 +47,17 @@ export const registerCommandResponders = async () => {
const {guild,channel,user} = instance const {guild,channel,user} = instance
if (!guild){ if (!guild){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build(source,{channel:instance.channel,user:instance.user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-not-in-guild").build(source,{channel:instance.channel,user:instance.user}))
return cancel() return cancel()
} }
const ticket = openticket.tickets.get(channel.id) const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){ if (!ticket || channel.isDMBased()){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
return return
} }
//return when busy //return when busy
if (ticket.get("openticket:busy").value){ if (ticket.get("openticket:busy").value){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
@@ -68,36 +68,36 @@ export const registerCommandResponders = async () => {
const reason = instance.options.getString("reason",false) const reason = instance.options.getString("reason",false)
ticket.get("openticket:autodelete-enabled").value = false ticket.get("openticket:autodelete-enabled").value = false
ticket.get("openticket:autodelete-days").value = 0 ticket.get("openticket:autodelete-days").value = 0
await instance.reply(await openticket.builders.messages.getSafe("openticket:autodelete-disable").build(source,{guild,channel,user,ticket,reason})) await instance.reply(await opendiscord.builders.messages.getSafe("openticket:autodelete-disable").build(source,{guild,channel,user,ticket,reason}))
}else if (scope == "enable"){ }else if (scope == "enable"){
const time = instance.options.getNumber("time",true) const time = instance.options.getNumber("time",true)
const reason = instance.options.getString("reason",false) const reason = instance.options.getString("reason",false)
ticket.get("openticket:autodelete-enabled").value = true ticket.get("openticket:autodelete-enabled").value = true
ticket.get("openticket:autodelete-days").value = time ticket.get("openticket:autodelete-days").value = time
await instance.reply(await openticket.builders.messages.getSafe("openticket:autodelete-enable").build(source,{guild,channel,user,ticket,reason,time})) await instance.reply(await opendiscord.builders.messages.getSafe("openticket:autodelete-enable").build(source,{guild,channel,user,ticket,reason,time}))
} }
//update ticket message //update ticket message
const ticketMessage = await openticket.tickets.getTicketMessage(ticket) const ticketMessage = await opendiscord.tickets.getTicketMessage(ticket)
if (ticketMessage){ if (ticketMessage){
try{ try{
ticketMessage.edit((await openticket.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket})).message) ticketMessage.edit((await opendiscord.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket})).message)
}catch(e){ }catch(e){
openticket.log("Unable to edit ticket message on autodelete "+scope+"!","error",[ opendiscord.log("Unable to edit ticket message on autodelete "+scope+"!","error",[
{key:"channel",value:"#"+channel.name}, {key:"channel",value:"#"+channel.name},
{key:"channelid",value:channel.id,hidden:true}, {key:"channelid",value:channel.id,hidden:true},
{key:"messageid",value:ticketMessage.id}, {key:"messageid",value:ticketMessage.id},
{key:"option",value:ticket.option.id.value} {key:"option",value:ticket.option.id.value}
]) ])
openticket.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException")) opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
} }
} }
}), }),
new api.ODWorker("openticket:logs",-1,(instance,params,source,cancel) => { new api.ODWorker("openticket:logs",-1,(instance,params,source,cancel) => {
const scope = instance.options.getSubCommand() const scope = instance.options.getSubCommand()
const reason = instance.options.getString("reason",false) const reason = instance.options.getString("reason",false)
openticket.log(instance.user.displayName+" used the 'autodelete "+scope+"' command!","info",[ opendiscord.log(instance.user.displayName+" used the 'autodelete "+scope+"' command!","info",[
{key:"user",value:instance.user.username}, {key:"user",value:instance.user.username},
{key:"userid",value:instance.user.id,hidden:true}, {key:"userid",value:instance.user.id,hidden:true},
{key:"channelid",value:instance.channel.id,hidden:true}, {key:"channelid",value:instance.channel.id,hidden:true},
+26 -26
View File
@@ -1,44 +1,44 @@
/////////////////////////////////////// ///////////////////////////////////////
//BLACKLIST COMMAND //BLACKLIST COMMAND
/////////////////////////////////////// ///////////////////////////////////////
import {openticket, api, utilities} from "../index" import {opendiscord, api, utilities} from "../index"
import * as discord from "discord.js" import * as discord from "discord.js"
const generalConfig = openticket.configs.get("openticket:general") const generalConfig = opendiscord.configs.get("openticket:general")
export const registerCommandResponders = async () => { export const registerCommandResponders = async () => {
//BLACKLIST COMMAND RESPONDER //BLACKLIST COMMAND RESPONDER
openticket.responders.commands.add(new api.ODCommandResponder("openticket:blacklist",generalConfig.data.prefix,/^blacklist/)) opendiscord.responders.commands.add(new api.ODCommandResponder("openticket:blacklist",generalConfig.data.prefix,/^blacklist/))
openticket.responders.commands.get("openticket:blacklist").workers.add([ opendiscord.responders.commands.get("openticket:blacklist").workers.add([
new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => { new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => {
const permissionMode = generalConfig.data.system.permissions.blacklist const permissionMode = generalConfig.data.system.permissions.blacklist
if (permissionMode == "none"){ if (permissionMode == "none"){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel() return cancel()
}else if (permissionMode == "everyone") return }else if (permissionMode == "everyone") return
else if (permissionMode == "admin"){ else if (permissionMode == "admin"){
if (!openticket.permissions.hasPermissions("support",await openticket.permissions.getPermissions(instance.user,instance.channel,instance.guild))){ if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
return cancel() return cancel()
}else return }else return
}else{ }else{
if (!instance.guild || !instance.member){ if (!instance.guild || !instance.member){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
return cancel() return cancel()
} }
const role = await openticket.client.fetchGuildRole(instance.guild,permissionMode) const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
if (!role){ if (!role){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
return cancel() return cancel()
} }
if (!role.members.has(instance.member.id)){ if (!role.members.has(instance.member.id)){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel() return cancel()
}else return }else return
} }
@@ -47,25 +47,25 @@ export const registerCommandResponders = async () => {
const {guild,channel,user} = instance const {guild,channel,user} = instance
if (!guild){ if (!guild){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build(source,{channel:instance.channel,user:instance.user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-not-in-guild").build(source,{channel:instance.channel,user:instance.user}))
return cancel() return cancel()
} }
const scope = instance.options.getSubCommand() const scope = instance.options.getSubCommand()
if (!scope || (scope != "add" && scope != "get" && scope != "remove" && scope != "view")) return if (!scope || (scope != "add" && scope != "get" && scope != "remove" && scope != "view")) return
if (scope == "view"){ if (scope == "view"){
await instance.reply(await openticket.builders.messages.getSafe("openticket:blacklist-view").build(source,{guild,channel,user})) await instance.reply(await opendiscord.builders.messages.getSafe("openticket:blacklist-view").build(source,{guild,channel,user}))
}else if (scope == "get"){ }else if (scope == "get"){
const data = instance.options.getUser("user",true) const data = instance.options.getUser("user",true)
await instance.reply(await openticket.builders.messages.getSafe("openticket:blacklist-get").build(source,{guild,channel,user,data})) await instance.reply(await opendiscord.builders.messages.getSafe("openticket:blacklist-get").build(source,{guild,channel,user,data}))
}else if (scope == "add"){ }else if (scope == "add"){
const data = instance.options.getUser("user",true) const data = instance.options.getUser("user",true)
const reason = instance.options.getString("reason",false) const reason = instance.options.getString("reason",false)
openticket.blacklist.add(new api.ODBlacklist(data.id,reason),true) opendiscord.blacklist.add(new api.ODBlacklist(data.id,reason),true)
openticket.log(instance.user.displayName+" added "+data.displayName+" to blacklist!","info",[ opendiscord.log(instance.user.displayName+" added "+data.displayName+" to blacklist!","info",[
{key:"user",value:user.username}, {key:"user",value:user.username},
{key:"userid",value:user.id,hidden:true}, {key:"userid",value:user.id,hidden:true},
{key:"channelid",value:channel.id,hidden:true}, {key:"channelid",value:channel.id,hidden:true},
@@ -74,17 +74,17 @@ export const registerCommandResponders = async () => {
]) ])
//manage stats //manage stats
await openticket.stats.get("openticket:global").setStat("openticket:users-blacklisted",1,"increase") await opendiscord.stats.get("openticket:global").setStat("openticket:users-blacklisted",1,"increase")
await openticket.stats.get("openticket:user").setStat("openticket:users-blacklisted",user.id,1,"increase") await opendiscord.stats.get("openticket:user").setStat("openticket:users-blacklisted",user.id,1,"increase")
await instance.reply(await openticket.builders.messages.getSafe("openticket:blacklist-add").build(source,{guild,channel,user,data,reason})) await instance.reply(await opendiscord.builders.messages.getSafe("openticket:blacklist-add").build(source,{guild,channel,user,data,reason}))
}else if (scope == "remove"){ }else if (scope == "remove"){
const data = instance.options.getUser("user",true) const data = instance.options.getUser("user",true)
const reason = instance.options.getString("reason",false) const reason = instance.options.getString("reason",false)
openticket.blacklist.remove(data.id) opendiscord.blacklist.remove(data.id)
openticket.log(instance.user.displayName+" removed "+data.displayName+" from blacklist!","info",[ opendiscord.log(instance.user.displayName+" removed "+data.displayName+" from blacklist!","info",[
{key:"user",value:user.username}, {key:"user",value:user.username},
{key:"userid",value:user.id,hidden:true}, {key:"userid",value:user.id,hidden:true},
{key:"channelid",value:channel.id,hidden:true}, {key:"channelid",value:channel.id,hidden:true},
@@ -92,7 +92,7 @@ export const registerCommandResponders = async () => {
{key:"reason",value:reason ?? "/"} {key:"reason",value:reason ?? "/"}
]) ])
await instance.reply(await openticket.builders.messages.getSafe("openticket:blacklist-remove").build(source,{guild,channel,user,data,reason})) await instance.reply(await opendiscord.builders.messages.getSafe("openticket:blacklist-remove").build(source,{guild,channel,user,data,reason}))
} }
}), }),
new api.ODWorker("openticket:discord-logs",1,async (instance,params,source,cancel) => { new api.ODWorker("openticket:discord-logs",1,async (instance,params,source,cancel) => {
@@ -107,16 +107,16 @@ export const registerCommandResponders = async () => {
//to logs //to logs
if (generalConfig.data.system.logs.enabled && generalConfig.data.system.messages.blacklisting.logs){ if (generalConfig.data.system.logs.enabled && generalConfig.data.system.messages.blacklisting.logs){
const logChannel = openticket.posts.get("openticket:logs") const logChannel = opendiscord.posts.get("openticket:logs")
if (logChannel) logChannel.send(await openticket.builders.messages.getSafe("openticket:blacklist-logs").build(source,{guild,channel,user,mode:scope,data,reason})) if (logChannel) logChannel.send(await opendiscord.builders.messages.getSafe("openticket:blacklist-logs").build(source,{guild,channel,user,mode:scope,data,reason}))
} }
//to dm //to dm
if (generalConfig.data.system.messages.blacklisting.dm) await openticket.client.sendUserDm(user,await openticket.builders.messages.getSafe("openticket:blacklist-dm").build(source,{guild,channel,user,mode:scope,data,reason})) if (generalConfig.data.system.messages.blacklisting.dm) await opendiscord.client.sendUserDm(user,await opendiscord.builders.messages.getSafe("openticket:blacklist-dm").build(source,{guild,channel,user,mode:scope,data,reason}))
}), }),
new api.ODWorker("openticket:logs",-1,(instance,params,source,cancel) => { new api.ODWorker("openticket:logs",-1,(instance,params,source,cancel) => {
const scope = instance.options.getSubCommand() const scope = instance.options.getSubCommand()
openticket.log(instance.user.displayName+" used the 'blacklist "+scope+"' command!","info",[ opendiscord.log(instance.user.displayName+" used the 'blacklist "+scope+"' command!","info",[
{key:"user",value:instance.user.username}, {key:"user",value:instance.user.username},
{key:"userid",value:instance.user.id,hidden:true}, {key:"userid",value:instance.user.id,hidden:true},
{key:"channelid",value:instance.channel.id,hidden:true}, {key:"channelid",value:instance.channel.id,hidden:true},
+33 -33
View File
@@ -1,44 +1,44 @@
/////////////////////////////////////// ///////////////////////////////////////
//CLAIM COMMAND //CLAIM COMMAND
/////////////////////////////////////// ///////////////////////////////////////
import {openticket, api, utilities} from "../index" import {opendiscord, api, utilities} from "../index"
import * as discord from "discord.js" import * as discord from "discord.js"
const generalConfig = openticket.configs.get("openticket:general") const generalConfig = opendiscord.configs.get("openticket:general")
export const registerCommandResponders = async () => { export const registerCommandResponders = async () => {
//CLAIM COMMAND RESPONDER //CLAIM COMMAND RESPONDER
openticket.responders.commands.add(new api.ODCommandResponder("openticket:claim",generalConfig.data.prefix,"claim")) opendiscord.responders.commands.add(new api.ODCommandResponder("openticket:claim",generalConfig.data.prefix,"claim"))
openticket.responders.commands.get("openticket:claim").workers.add([ opendiscord.responders.commands.get("openticket:claim").workers.add([
new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => { new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => {
const permissionMode = generalConfig.data.system.permissions.claim const permissionMode = generalConfig.data.system.permissions.claim
if (permissionMode == "none"){ if (permissionMode == "none"){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel() return cancel()
}else if (permissionMode == "everyone") return }else if (permissionMode == "everyone") return
else if (permissionMode == "admin"){ else if (permissionMode == "admin"){
if (!openticket.permissions.hasPermissions("support",await openticket.permissions.getPermissions(instance.user,instance.channel,instance.guild))){ if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
return cancel() return cancel()
}else return }else return
}else{ }else{
if (!instance.guild || !instance.member){ if (!instance.guild || !instance.member){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
return cancel() return cancel()
} }
const role = await openticket.client.fetchGuildRole(instance.guild,permissionMode) const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
if (!role){ if (!role){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
return cancel() return cancel()
} }
if (!role.members.has(instance.member.id)){ if (!role.members.has(instance.member.id)){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel() return cancel()
}else return }else return
} }
@@ -46,22 +46,22 @@ export const registerCommandResponders = async () => {
new api.ODWorker("openticket:claim",0,async (instance,params,source,cancel) => { new api.ODWorker("openticket:claim",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance const {guild,channel,user} = instance
if (!guild){ if (!guild){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
return cancel() return cancel()
} }
const ticket = openticket.tickets.get(channel.id) const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){ if (!ticket || channel.isDMBased()){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
//return when already claimed //return when already claimed
if (ticket.get("openticket:claimed").value){ if (ticket.get("openticket:claimed").value){
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild,channel,user,error:openticket.languages.getTranslation("errors.actionInvalid.claim"),layout:"simple"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build("button",{guild,channel,user,error:opendiscord.languages.getTranslation("errors.actionInvalid.claim"),layout:"simple"}))
return cancel() return cancel()
} }
//return when busy //return when busy
if (ticket.get("openticket:busy").value){ if (ticket.get("openticket:busy").value){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
@@ -70,11 +70,11 @@ export const registerCommandResponders = async () => {
//start claiming ticket //start claiming ticket
await instance.defer(false) await instance.defer(false)
await openticket.actions.get("openticket:claim-ticket").run(source,{guild,channel,user:claimUser,ticket,reason,sendMessage:false}) await opendiscord.actions.get("openticket:claim-ticket").run(source,{guild,channel,user:claimUser,ticket,reason,sendMessage:false})
await instance.reply(await openticket.builders.messages.getSafe("openticket:claim-message").build(source,{guild,channel,user:claimUser,ticket,reason})) await instance.reply(await opendiscord.builders.messages.getSafe("openticket:claim-message").build(source,{guild,channel,user:claimUser,ticket,reason}))
}), }),
new api.ODWorker("openticket:logs",-1,(instance,params,source,cancel) => { new api.ODWorker("openticket:logs",-1,(instance,params,source,cancel) => {
openticket.log(instance.user.displayName+" used the 'claim' command!","info",[ opendiscord.log(instance.user.displayName+" used the 'claim' command!","info",[
{key:"user",value:instance.user.username}, {key:"user",value:instance.user.username},
{key:"userid",value:instance.user.id,hidden:true}, {key:"userid",value:instance.user.id,hidden:true},
{key:"channelid",value:instance.channel.id,hidden:true}, {key:"channelid",value:instance.channel.id,hidden:true},
@@ -86,33 +86,33 @@ export const registerCommandResponders = async () => {
export const registerButtonResponders = async () => { export const registerButtonResponders = async () => {
//CLAIM TICKET BUTTON RESPONDER //CLAIM TICKET BUTTON RESPONDER
openticket.responders.buttons.add(new api.ODButtonResponder("openticket:claim-ticket",/^od:claim-ticket/)) opendiscord.responders.buttons.add(new api.ODButtonResponder("openticket:claim-ticket",/^od:claim-ticket/))
openticket.responders.buttons.get("openticket:claim-ticket").workers.add( opendiscord.responders.buttons.get("openticket:claim-ticket").workers.add(
new api.ODWorker("openticket:claim-ticket",0,async (instance,params,source,cancel) => { new api.ODWorker("openticket:claim-ticket",0,async (instance,params,source,cancel) => {
const originalSource = instance.interaction.customId.split("_")[1] const originalSource = instance.interaction.customId.split("_")[1]
if (originalSource != "ticket-message" && originalSource != "unclaim-message") return if (originalSource != "ticket-message" && originalSource != "unclaim-message") return
if (originalSource == "ticket-message") await openticket.verifybars.get("openticket:claim-ticket-ticket-message").activate(instance) if (originalSource == "ticket-message") await opendiscord.verifybars.get("openticket:claim-ticket-ticket-message").activate(instance)
else await openticket.verifybars.get("openticket:claim-ticket-unclaim-message").activate(instance) else await opendiscord.verifybars.get("openticket:claim-ticket-unclaim-message").activate(instance)
}) })
) )
} }
export const registerModalResponders = async () => { export const registerModalResponders = async () => {
//CLAIM WITH REASON MODAL RESPONDER //CLAIM WITH REASON MODAL RESPONDER
openticket.responders.modals.add(new api.ODModalResponder("openticket:claim-ticket-reason",/^od:claim-ticket-reason_/)) opendiscord.responders.modals.add(new api.ODModalResponder("openticket:claim-ticket-reason",/^od:claim-ticket-reason_/))
openticket.responders.modals.get("openticket:claim-ticket-reason").workers.add([ opendiscord.responders.modals.get("openticket:claim-ticket-reason").workers.add([
new api.ODWorker("openticket:claim-ticket-reason",0,async (instance,params,source,cancel) => { new api.ODWorker("openticket:claim-ticket-reason",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance const {guild,channel,user} = instance
if (!channel) return if (!channel) return
if (!guild){ if (!guild){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build(source,{channel,user:instance.user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-not-in-guild").build(source,{channel,user:instance.user}))
return cancel() return cancel()
} }
const ticket = openticket.tickets.get(instance.interaction.customId.split("_")[1]) const ticket = opendiscord.tickets.get(instance.interaction.customId.split("_")[1])
if (!ticket || channel.isDMBased()){ if (!ticket || channel.isDMBased()){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
return return
} }
@@ -122,15 +122,15 @@ export const registerModalResponders = async () => {
//claim with reason //claim with reason
if (originalSource == "ticket-message"){ if (originalSource == "ticket-message"){
await instance.defer("update",false) await instance.defer("update",false)
await openticket.actions.get("openticket:claim-ticket").run(originalSource,{guild,channel,user,ticket,reason,sendMessage:true}) await opendiscord.actions.get("openticket:claim-ticket").run(originalSource,{guild,channel,user,ticket,reason,sendMessage:true})
await instance.update(await openticket.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket})) await instance.update(await opendiscord.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket}))
}else if (originalSource == "unclaim-message"){ }else if (originalSource == "unclaim-message"){
await instance.defer("update",false) await instance.defer("update",false)
await openticket.actions.get("openticket:claim-ticket").run(originalSource,{guild,channel,user,ticket,reason,sendMessage:false}) await opendiscord.actions.get("openticket:claim-ticket").run(originalSource,{guild,channel,user,ticket,reason,sendMessage:false})
await instance.update(await openticket.builders.messages.getSafe("openticket:claim-message").build("other",{guild,channel,user,ticket,reason})) await instance.update(await opendiscord.builders.messages.getSafe("openticket:claim-message").build("other",{guild,channel,user,ticket,reason}))
}else if (originalSource == "other"){ }else if (originalSource == "other"){
await instance.defer("update",false) await instance.defer("update",false)
await openticket.actions.get("openticket:claim-ticket").run(originalSource,{guild,channel,user,ticket,reason,sendMessage:true}) await opendiscord.actions.get("openticket:claim-ticket").run(originalSource,{guild,channel,user,ticket,reason,sendMessage:true})
} }
}) })
+22 -22
View File
@@ -1,45 +1,45 @@
/////////////////////////////////////// ///////////////////////////////////////
//CLEAR COMMAND //CLEAR COMMAND
/////////////////////////////////////// ///////////////////////////////////////
import {openticket, api, utilities} from "../index" import {opendiscord, api, utilities} from "../index"
import * as discord from "discord.js" import * as discord from "discord.js"
const generalConfig = openticket.configs.get("openticket:general") const generalConfig = opendiscord.configs.get("openticket:general")
export const registerCommandResponders = async () => { export const registerCommandResponders = async () => {
//CLEAR COMMAND RESPONDER //CLEAR COMMAND RESPONDER
openticket.responders.commands.add(new api.ODCommandResponder("openticket:clear",generalConfig.data.prefix,"clear")) opendiscord.responders.commands.add(new api.ODCommandResponder("openticket:clear",generalConfig.data.prefix,"clear"))
openticket.responders.commands.get("openticket:clear").workers.add([ opendiscord.responders.commands.get("openticket:clear").workers.add([
new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => { new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => {
const permissionMode = generalConfig.data.system.permissions.clear const permissionMode = generalConfig.data.system.permissions.clear
if (permissionMode == "none"){ if (permissionMode == "none"){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel() return cancel()
}else if (permissionMode == "everyone") return }else if (permissionMode == "everyone") return
else if (permissionMode == "admin"){ else if (permissionMode == "admin"){
//only allow global admins (ticket admins aren't allowed to clear tickets) //only allow global admins (ticket admins aren't allowed to clear tickets)
if (!openticket.permissions.hasPermissions("support",await openticket.permissions.getPermissions(instance.user,instance.channel,instance.guild,{allowChannelUserScope:false,allowChannelRoleScope:false}))){ if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild,{allowChannelUserScope:false,allowChannelRoleScope:false}))){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
return cancel() return cancel()
}else return }else return
}else{ }else{
if (!instance.guild || !instance.member){ if (!instance.guild || !instance.member){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
return cancel() return cancel()
} }
const role = await openticket.client.fetchGuildRole(instance.guild,permissionMode) const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
if (!role){ if (!role){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
return cancel() return cancel()
} }
if (!role.members.has(instance.member.id)){ if (!role.members.has(instance.member.id)){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel() return cancel()
}else return }else return
} }
@@ -47,14 +47,14 @@ export const registerCommandResponders = async () => {
new api.ODWorker("openticket:clear",0,async (instance,params,source,cancel) => { new api.ODWorker("openticket:clear",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance const {guild,channel,user} = instance
if (!guild || channel.isDMBased()){ if (!guild || channel.isDMBased()){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
return cancel() return cancel()
} }
const tempFilter = instance.options.getString("filter",false) const tempFilter = instance.options.getString("filter",false)
const filter = (tempFilter) ? tempFilter.toLowerCase() as api.ODTicketClearFilter : "all" const filter = (tempFilter) ? tempFilter.toLowerCase() as api.ODTicketClearFilter : "all"
const list: string[] = [] const list: string[] = []
const ticketList = openticket.tickets.getAll().filter((ticket) => { const ticketList = opendiscord.tickets.getAll().filter((ticket) => {
if (filter == "all") return true if (filter == "all") return true
else if (filter == "open" && ticket.get("openticket:open").value) return true else if (filter == "open" && ticket.get("openticket:open").value) return true
else if (filter == "closed" && ticket.get("openticket:closed").value) return true else if (filter == "closed" && ticket.get("openticket:closed").value) return true
@@ -66,16 +66,16 @@ export const registerCommandResponders = async () => {
else return false else return false
}) })
for (const ticket of ticketList){ for (const ticket of ticketList){
const ticketChannel = await openticket.tickets.getTicketChannel(ticket) const ticketChannel = await opendiscord.tickets.getTicketChannel(ticket)
if (ticketChannel) list.push("#"+ticketChannel.name) if (ticketChannel) list.push("#"+ticketChannel.name)
} }
//reply with clear verify //reply with clear verify
await instance.defer(true) await instance.defer(true)
await instance.reply(await openticket.builders.messages.getSafe("openticket:clear-verify-message").build(source,{guild,channel,user,filter,list})) await instance.reply(await opendiscord.builders.messages.getSafe("openticket:clear-verify-message").build(source,{guild,channel,user,filter,list}))
}), }),
new api.ODWorker("openticket:logs",-1,(instance,params,source,cancel) => { new api.ODWorker("openticket:logs",-1,(instance,params,source,cancel) => {
openticket.log(instance.user.displayName+" used the 'clear' command!","info",[ opendiscord.log(instance.user.displayName+" used the 'clear' command!","info",[
{key:"user",value:instance.user.username}, {key:"user",value:instance.user.username},
{key:"userid",value:instance.user.id,hidden:true}, {key:"userid",value:instance.user.id,hidden:true},
{key:"channelid",value:instance.channel.id,hidden:true}, {key:"channelid",value:instance.channel.id,hidden:true},
@@ -87,8 +87,8 @@ export const registerCommandResponders = async () => {
export const registerButtonResponders = async () => { export const registerButtonResponders = async () => {
//CLEAR CONTINUE BUTTON RESPONDER //CLEAR CONTINUE BUTTON RESPONDER
openticket.responders.buttons.add(new api.ODButtonResponder("openticket:clear-continue",/^od:clear-continue_/)) opendiscord.responders.buttons.add(new api.ODButtonResponder("openticket:clear-continue",/^od:clear-continue_/))
openticket.responders.buttons.get("openticket:clear-continue").workers.add( opendiscord.responders.buttons.get("openticket:clear-continue").workers.add(
new api.ODWorker("openticket:clear-continue",0,async (instance,params,source,cancel) => { new api.ODWorker("openticket:clear-continue",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance const {guild,channel,user} = instance
if (!guild || channel.isDMBased()) return if (!guild || channel.isDMBased()) return
@@ -99,7 +99,7 @@ export const registerButtonResponders = async () => {
//start ticket clear //start ticket clear
instance.defer("update",true) instance.defer("update",true)
const list: string[] = [] const list: string[] = []
const ticketList = openticket.tickets.getAll().filter((ticket) => { const ticketList = opendiscord.tickets.getAll().filter((ticket) => {
if (filter == "all") return true if (filter == "all") return true
else if (filter == "open" && ticket.get("openticket:open").value) return true else if (filter == "open" && ticket.get("openticket:open").value) return true
else if (filter == "closed" && ticket.get("openticket:closed").value) return true else if (filter == "closed" && ticket.get("openticket:closed").value) return true
@@ -111,12 +111,12 @@ export const registerButtonResponders = async () => {
else return false else return false
}) })
for (const ticket of ticketList){ for (const ticket of ticketList){
const ticketChannel = await openticket.tickets.getTicketChannel(ticket) const ticketChannel = await opendiscord.tickets.getTicketChannel(ticket)
if (ticketChannel) list.push("#"+ticketChannel.name) if (ticketChannel) list.push("#"+ticketChannel.name)
} }
await openticket.actions.get("openticket:clear-tickets").run(originalSource,{guild,channel,user,filter,list:ticketList}) await opendiscord.actions.get("openticket:clear-tickets").run(originalSource,{guild,channel,user,filter,list:ticketList})
await instance.update(await openticket.builders.messages.getSafe("openticket:clear-message").build(originalSource,{guild,channel,user,filter,list})) await instance.update(await opendiscord.builders.messages.getSafe("openticket:clear-message").build(originalSource,{guild,channel,user,filter,list}))
}) })
) )
} }
+33 -33
View File
@@ -1,44 +1,44 @@
/////////////////////////////////////// ///////////////////////////////////////
//CLOSE COMMAND //CLOSE COMMAND
/////////////////////////////////////// ///////////////////////////////////////
import {openticket, api, utilities} from "../index" import {opendiscord, api, utilities} from "../index"
import * as discord from "discord.js" import * as discord from "discord.js"
const generalConfig = openticket.configs.get("openticket:general") const generalConfig = opendiscord.configs.get("openticket:general")
export const registerCommandResponders = async () => { export const registerCommandResponders = async () => {
//CLOSE COMMAND RESPONDER //CLOSE COMMAND RESPONDER
openticket.responders.commands.add(new api.ODCommandResponder("openticket:close",generalConfig.data.prefix,"close")) opendiscord.responders.commands.add(new api.ODCommandResponder("openticket:close",generalConfig.data.prefix,"close"))
openticket.responders.commands.get("openticket:close").workers.add([ opendiscord.responders.commands.get("openticket:close").workers.add([
new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => { new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => {
const permissionMode = generalConfig.data.system.permissions.close const permissionMode = generalConfig.data.system.permissions.close
if (permissionMode == "none"){ if (permissionMode == "none"){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel() return cancel()
}else if (permissionMode == "everyone") return }else if (permissionMode == "everyone") return
else if (permissionMode == "admin"){ else if (permissionMode == "admin"){
if (!openticket.permissions.hasPermissions("support",await openticket.permissions.getPermissions(instance.user,instance.channel,instance.guild))){ if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
return cancel() return cancel()
}else return }else return
}else{ }else{
if (!instance.guild || !instance.member){ if (!instance.guild || !instance.member){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
return cancel() return cancel()
} }
const role = await openticket.client.fetchGuildRole(instance.guild,permissionMode) const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
if (!role){ if (!role){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
return cancel() return cancel()
} }
if (!role.members.has(instance.member.id)){ if (!role.members.has(instance.member.id)){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel() return cancel()
}else return }else return
} }
@@ -46,22 +46,22 @@ export const registerCommandResponders = async () => {
new api.ODWorker("openticket:close",0,async (instance,params,source,cancel) => { new api.ODWorker("openticket:close",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance const {guild,channel,user} = instance
if (!guild){ if (!guild){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
return cancel() return cancel()
} }
const ticket = openticket.tickets.get(channel.id) const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){ if (!ticket || channel.isDMBased()){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
//return when already closed //return when already closed
if (ticket.get("openticket:closed").value){ if (ticket.get("openticket:closed").value){
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild,channel,user,error:openticket.languages.getTranslation("errors.actionInvalid.close"),layout:"simple"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build("button",{guild,channel,user,error:opendiscord.languages.getTranslation("errors.actionInvalid.close"),layout:"simple"}))
return cancel() return cancel()
} }
//return when busy //return when busy
if (ticket.get("openticket:busy").value){ if (ticket.get("openticket:busy").value){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
@@ -69,11 +69,11 @@ export const registerCommandResponders = async () => {
//start closing ticket //start closing ticket
await instance.defer(false) await instance.defer(false)
await openticket.actions.get("openticket:close-ticket").run(source,{guild,channel,user,ticket,reason,sendMessage:false}) await opendiscord.actions.get("openticket:close-ticket").run(source,{guild,channel,user,ticket,reason,sendMessage:false})
await instance.reply(await openticket.builders.messages.getSafe("openticket:close-message").build(source,{guild,channel,user,ticket,reason})) await instance.reply(await opendiscord.builders.messages.getSafe("openticket:close-message").build(source,{guild,channel,user,ticket,reason}))
}), }),
new api.ODWorker("openticket:logs",-1,(instance,params,source,cancel) => { new api.ODWorker("openticket:logs",-1,(instance,params,source,cancel) => {
openticket.log(instance.user.displayName+" used the 'close' command!","info",[ opendiscord.log(instance.user.displayName+" used the 'close' command!","info",[
{key:"user",value:instance.user.username}, {key:"user",value:instance.user.username},
{key:"userid",value:instance.user.id,hidden:true}, {key:"userid",value:instance.user.id,hidden:true},
{key:"channelid",value:instance.channel.id,hidden:true}, {key:"channelid",value:instance.channel.id,hidden:true},
@@ -85,33 +85,33 @@ export const registerCommandResponders = async () => {
export const registerButtonResponders = async () => { export const registerButtonResponders = async () => {
//CLOSE TICKET BUTTON RESPONDER //CLOSE TICKET BUTTON RESPONDER
openticket.responders.buttons.add(new api.ODButtonResponder("openticket:close-ticket",/^od:close-ticket_/)) opendiscord.responders.buttons.add(new api.ODButtonResponder("openticket:close-ticket",/^od:close-ticket_/))
openticket.responders.buttons.get("openticket:close-ticket").workers.add( opendiscord.responders.buttons.get("openticket:close-ticket").workers.add(
new api.ODWorker("openticket:close-ticket",0,async (instance,params,source,cancel) => { new api.ODWorker("openticket:close-ticket",0,async (instance,params,source,cancel) => {
const originalSource = instance.interaction.customId.split("_")[1] const originalSource = instance.interaction.customId.split("_")[1]
if (originalSource != "ticket-message" && originalSource != "reopen-message") return if (originalSource != "ticket-message" && originalSource != "reopen-message") return
if (originalSource == "ticket-message") await openticket.verifybars.get("openticket:close-ticket-ticket-message").activate(instance) if (originalSource == "ticket-message") await opendiscord.verifybars.get("openticket:close-ticket-ticket-message").activate(instance)
else await openticket.verifybars.get("openticket:close-ticket-reopen-message").activate(instance) else await opendiscord.verifybars.get("openticket:close-ticket-reopen-message").activate(instance)
}) })
) )
} }
export const registerModalResponders = async () => { export const registerModalResponders = async () => {
//CLOSE WITH REASON MODAL RESPONDER //CLOSE WITH REASON MODAL RESPONDER
openticket.responders.modals.add(new api.ODModalResponder("openticket:close-ticket-reason",/^od:close-ticket-reason_/)) opendiscord.responders.modals.add(new api.ODModalResponder("openticket:close-ticket-reason",/^od:close-ticket-reason_/))
openticket.responders.modals.get("openticket:close-ticket-reason").workers.add([ opendiscord.responders.modals.get("openticket:close-ticket-reason").workers.add([
new api.ODWorker("openticket:close-ticket-reason",0,async (instance,params,source,cancel) => { new api.ODWorker("openticket:close-ticket-reason",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance const {guild,channel,user} = instance
if (!channel) return if (!channel) return
if (!guild){ if (!guild){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build(source,{channel,user:instance.user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-not-in-guild").build(source,{channel,user:instance.user}))
return cancel() return cancel()
} }
const ticket = openticket.tickets.get(instance.interaction.customId.split("_")[1]) const ticket = opendiscord.tickets.get(instance.interaction.customId.split("_")[1])
if (!ticket || channel.isDMBased()){ if (!ticket || channel.isDMBased()){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
return return
} }
@@ -121,15 +121,15 @@ export const registerModalResponders = async () => {
//close with reason //close with reason
if (originalSource == "ticket-message"){ if (originalSource == "ticket-message"){
await instance.defer("update",false) await instance.defer("update",false)
await openticket.actions.get("openticket:close-ticket").run(originalSource,{guild,channel,user,ticket,reason,sendMessage:true}) await opendiscord.actions.get("openticket:close-ticket").run(originalSource,{guild,channel,user,ticket,reason,sendMessage:true})
await instance.update(await openticket.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket})) await instance.update(await opendiscord.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket}))
}else if (originalSource == "reopen-message"){ }else if (originalSource == "reopen-message"){
await instance.defer("update",false) await instance.defer("update",false)
await openticket.actions.get("openticket:close-ticket").run(originalSource,{guild,channel,user,ticket,reason,sendMessage:false}) await opendiscord.actions.get("openticket:close-ticket").run(originalSource,{guild,channel,user,ticket,reason,sendMessage:false})
await instance.update(await openticket.builders.messages.getSafe("openticket:close-message").build("other",{guild,channel,user,ticket,reason})) await instance.update(await opendiscord.builders.messages.getSafe("openticket:close-message").build("other",{guild,channel,user,ticket,reason}))
}else if (originalSource == "other"){ }else if (originalSource == "other"){
await instance.defer("update",false) await instance.defer("update",false)
await openticket.actions.get("openticket:close-ticket").run(originalSource,{guild,channel,user,ticket,reason,sendMessage:true}) await opendiscord.actions.get("openticket:close-ticket").run(originalSource,{guild,channel,user,ticket,reason,sendMessage:true})
} }
}) })
+38 -38
View File
@@ -1,44 +1,44 @@
/////////////////////////////////////// ///////////////////////////////////////
//DELETE COMMAND //DELETE COMMAND
/////////////////////////////////////// ///////////////////////////////////////
import {openticket, api, utilities} from "../index" import {opendiscord, api, utilities} from "../index"
import * as discord from "discord.js" import * as discord from "discord.js"
const generalConfig = openticket.configs.get("openticket:general") const generalConfig = opendiscord.configs.get("openticket:general")
export const registerCommandResponders = async () => { export const registerCommandResponders = async () => {
//DELETE COMMAND RESPONDER //DELETE COMMAND RESPONDER
openticket.responders.commands.add(new api.ODCommandResponder("openticket:delete",generalConfig.data.prefix,"delete")) opendiscord.responders.commands.add(new api.ODCommandResponder("openticket:delete",generalConfig.data.prefix,"delete"))
openticket.responders.commands.get("openticket:delete").workers.add([ opendiscord.responders.commands.get("openticket:delete").workers.add([
new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => { new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => {
const permissionMode = generalConfig.data.system.permissions.delete const permissionMode = generalConfig.data.system.permissions.delete
if (permissionMode == "none"){ if (permissionMode == "none"){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel() return cancel()
}else if (permissionMode == "everyone") return }else if (permissionMode == "everyone") return
else if (permissionMode == "admin"){ else if (permissionMode == "admin"){
if (!openticket.permissions.hasPermissions("support",await openticket.permissions.getPermissions(instance.user,instance.channel,instance.guild))){ if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
return cancel() return cancel()
}else return }else return
}else{ }else{
if (!instance.guild || !instance.member){ if (!instance.guild || !instance.member){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
return cancel() return cancel()
} }
const role = await openticket.client.fetchGuildRole(instance.guild,permissionMode) const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
if (!role){ if (!role){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
return cancel() return cancel()
} }
if (!role.members.has(instance.member.id)){ if (!role.members.has(instance.member.id)){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel() return cancel()
}else return }else return
} }
@@ -46,17 +46,17 @@ export const registerCommandResponders = async () => {
new api.ODWorker("openticket:delete",0,async (instance,params,source,cancel) => { new api.ODWorker("openticket:delete",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance const {guild,channel,user} = instance
if (!guild){ if (!guild){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
return cancel() return cancel()
} }
const ticket = openticket.tickets.get(channel.id) const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){ if (!ticket || channel.isDMBased()){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
//return when busy //return when busy
if (ticket.get("openticket:busy").value){ if (ticket.get("openticket:busy").value){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
@@ -65,11 +65,11 @@ export const registerCommandResponders = async () => {
//start deleting ticket //start deleting ticket
await instance.defer(false) await instance.defer(false)
await instance.reply(await openticket.builders.messages.getSafe("openticket:delete-message").build(source,{guild,channel,user,ticket,reason})) await instance.reply(await opendiscord.builders.messages.getSafe("openticket:delete-message").build(source,{guild,channel,user,ticket,reason}))
await openticket.actions.get("openticket:delete-ticket").run(source,{guild,channel,user,ticket,reason,sendMessage:false,withoutTranscript}) await opendiscord.actions.get("openticket:delete-ticket").run(source,{guild,channel,user,ticket,reason,sendMessage:false,withoutTranscript})
}), }),
new api.ODWorker("openticket:logs",-1,(instance,params,source,cancel) => { new api.ODWorker("openticket:logs",-1,(instance,params,source,cancel) => {
openticket.log(instance.user.displayName+" used the 'delete' command!","info",[ opendiscord.log(instance.user.displayName+" used the 'delete' command!","info",[
{key:"user",value:instance.user.username}, {key:"user",value:instance.user.username},
{key:"userid",value:instance.user.id,hidden:true}, {key:"userid",value:instance.user.id,hidden:true},
{key:"channelid",value:instance.channel.id,hidden:true}, {key:"channelid",value:instance.channel.id,hidden:true},
@@ -81,35 +81,35 @@ export const registerCommandResponders = async () => {
export const registerButtonResponders = async () => { export const registerButtonResponders = async () => {
//DELETE TICKET BUTTON RESPONDER //DELETE TICKET BUTTON RESPONDER
openticket.responders.buttons.add(new api.ODButtonResponder("openticket:delete-ticket",/^od:delete-ticket/)) opendiscord.responders.buttons.add(new api.ODButtonResponder("openticket:delete-ticket",/^od:delete-ticket/))
openticket.responders.buttons.get("openticket:delete-ticket").workers.add( opendiscord.responders.buttons.get("openticket:delete-ticket").workers.add(
new api.ODWorker("openticket:delete-ticket",0,async (instance,params,source,cancel) => { new api.ODWorker("openticket:delete-ticket",0,async (instance,params,source,cancel) => {
const originalSource = instance.interaction.customId.split("_")[1] const originalSource = instance.interaction.customId.split("_")[1]
if (originalSource != "ticket-message" && originalSource != "reopen-message" && originalSource != "close-message" && originalSource != "autoclose-message") return if (originalSource != "ticket-message" && originalSource != "reopen-message" && originalSource != "close-message" && originalSource != "autoclose-message") return
if (originalSource == "ticket-message") await openticket.verifybars.get("openticket:delete-ticket-ticket-message").activate(instance) if (originalSource == "ticket-message") await opendiscord.verifybars.get("openticket:delete-ticket-ticket-message").activate(instance)
else if (originalSource == "close-message") await openticket.verifybars.get("openticket:delete-ticket-close-message").activate(instance) else if (originalSource == "close-message") await opendiscord.verifybars.get("openticket:delete-ticket-close-message").activate(instance)
else if (originalSource == "reopen-message") await openticket.verifybars.get("openticket:delete-ticket-reopen-message").activate(instance) else if (originalSource == "reopen-message") await opendiscord.verifybars.get("openticket:delete-ticket-reopen-message").activate(instance)
else if (originalSource == "autoclose-message") await openticket.verifybars.get("openticket:delete-ticket-autoclose-message").activate(instance) else if (originalSource == "autoclose-message") await opendiscord.verifybars.get("openticket:delete-ticket-autoclose-message").activate(instance)
}) })
) )
} }
export const registerModalResponders = async () => { export const registerModalResponders = async () => {
//REOPEN WITH REASON MODAL RESPONDER //REOPEN WITH REASON MODAL RESPONDER
openticket.responders.modals.add(new api.ODModalResponder("openticket:delete-ticket-reason",/^od:delete-ticket-reason_/)) opendiscord.responders.modals.add(new api.ODModalResponder("openticket:delete-ticket-reason",/^od:delete-ticket-reason_/))
openticket.responders.modals.get("openticket:delete-ticket-reason").workers.add([ opendiscord.responders.modals.get("openticket:delete-ticket-reason").workers.add([
new api.ODWorker("openticket:delete-ticket-reason",0,async (instance,params,source,cancel) => { new api.ODWorker("openticket:delete-ticket-reason",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance const {guild,channel,user} = instance
if (!channel) return if (!channel) return
if (!guild){ if (!guild){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build(source,{channel,user:instance.user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-not-in-guild").build(source,{channel,user:instance.user}))
return cancel() return cancel()
} }
const ticket = openticket.tickets.get(instance.interaction.customId.split("_")[1]) const ticket = opendiscord.tickets.get(instance.interaction.customId.split("_")[1])
if (!ticket || channel.isDMBased()){ if (!ticket || channel.isDMBased()){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
return return
} }
@@ -120,29 +120,29 @@ export const registerModalResponders = async () => {
if (originalSource == "ticket-message"){ if (originalSource == "ticket-message"){
await instance.defer("update",false) await instance.defer("update",false)
//don't await DELETE action => else it will update the message after the channel has been deleted //don't await DELETE action => else it will update the message after the channel has been deleted
openticket.actions.get("openticket:delete-ticket").run(originalSource,{guild,channel,user,ticket,reason,sendMessage:true,withoutTranscript:false}) opendiscord.actions.get("openticket:delete-ticket").run(originalSource,{guild,channel,user,ticket,reason,sendMessage:true,withoutTranscript:false})
//update ticket (for ticket message) => no-await doesn't wait for the action to set this variable //update ticket (for ticket message) => no-await doesn't wait for the action to set this variable
ticket.get("openticket:for-deletion").value = true ticket.get("openticket:for-deletion").value = true
await instance.update(await openticket.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket})) await instance.update(await opendiscord.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket}))
}else if (originalSource == "close-message"){ }else if (originalSource == "close-message"){
await instance.defer("update",false) await instance.defer("update",false)
//don't await DELETE action => else it will update the message after the channel has been deleted //don't await DELETE action => else it will update the message after the channel has been deleted
openticket.actions.get("openticket:delete-ticket").run(originalSource,{guild,channel,user,ticket,reason,sendMessage:false,withoutTranscript:false}) opendiscord.actions.get("openticket:delete-ticket").run(originalSource,{guild,channel,user,ticket,reason,sendMessage:false,withoutTranscript:false})
await instance.update(await openticket.builders.messages.getSafe("openticket:delete-message").build("other",{guild,channel,user,ticket,reason})) await instance.update(await opendiscord.builders.messages.getSafe("openticket:delete-message").build("other",{guild,channel,user,ticket,reason}))
}else if (originalSource == "reopen-message"){ }else if (originalSource == "reopen-message"){
await instance.defer("update",false) await instance.defer("update",false)
//don't await DELETE action => else it will update the message after the channel has been deleted //don't await DELETE action => else it will update the message after the channel has been deleted
openticket.actions.get("openticket:delete-ticket").run(originalSource,{guild,channel,user,ticket,reason,sendMessage:false,withoutTranscript:false}) opendiscord.actions.get("openticket:delete-ticket").run(originalSource,{guild,channel,user,ticket,reason,sendMessage:false,withoutTranscript:false})
await instance.update(await openticket.builders.messages.getSafe("openticket:delete-message").build("other",{guild,channel,user,ticket,reason})) await instance.update(await opendiscord.builders.messages.getSafe("openticket:delete-message").build("other",{guild,channel,user,ticket,reason}))
}else if (originalSource == "autoclose-message"){ }else if (originalSource == "autoclose-message"){
await instance.defer("update",false) await instance.defer("update",false)
//don't await DELETE action => else it will update the message after the channel has been deleted //don't await DELETE action => else it will update the message after the channel has been deleted
openticket.actions.get("openticket:delete-ticket").run(originalSource,{guild,channel,user,ticket,reason,sendMessage:false,withoutTranscript:false}) opendiscord.actions.get("openticket:delete-ticket").run(originalSource,{guild,channel,user,ticket,reason,sendMessage:false,withoutTranscript:false})
await instance.update(await openticket.builders.messages.getSafe("openticket:delete-message").build("other",{guild,channel,user,ticket,reason})) await instance.update(await opendiscord.builders.messages.getSafe("openticket:delete-message").build("other",{guild,channel,user,ticket,reason}))
}else if (originalSource == "other"){ }else if (originalSource == "other"){
await instance.defer("update",false) await instance.defer("update",false)
//don't await DELETE action => else it will update the message after the channel has been deleted //don't await DELETE action => else it will update the message after the channel has been deleted
openticket.actions.get("openticket:delete-ticket").run(originalSource,{guild,channel,user,ticket,reason,sendMessage:true,withoutTranscript:false}) opendiscord.actions.get("openticket:delete-ticket").run(originalSource,{guild,channel,user,ticket,reason,sendMessage:true,withoutTranscript:false})
} }
}) })
]) ])
+22 -22
View File
@@ -1,44 +1,44 @@
/////////////////////////////////////// ///////////////////////////////////////
//HELP COMMAND //HELP COMMAND
/////////////////////////////////////// ///////////////////////////////////////
import {openticket, api, utilities} from "../index" import {opendiscord, api, utilities} from "../index"
import * as discord from "discord.js" import * as discord from "discord.js"
const generalConfig = openticket.configs.get("openticket:general") const generalConfig = opendiscord.configs.get("openticket:general")
export const registerCommandResponders = async () => { export const registerCommandResponders = async () => {
//HELP COMMAND RESPONDER //HELP COMMAND RESPONDER
openticket.responders.commands.add(new api.ODCommandResponder("openticket:help",generalConfig.data.prefix,"help")) opendiscord.responders.commands.add(new api.ODCommandResponder("openticket:help",generalConfig.data.prefix,"help"))
openticket.responders.commands.get("openticket:help").workers.add([ opendiscord.responders.commands.get("openticket:help").workers.add([
new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => { new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => {
const permissionMode = generalConfig.data.system.permissions.help const permissionMode = generalConfig.data.system.permissions.help
if (permissionMode == "none"){ if (permissionMode == "none"){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel() return cancel()
}else if (permissionMode == "everyone") return }else if (permissionMode == "everyone") return
else if (permissionMode == "admin"){ else if (permissionMode == "admin"){
if (!openticket.permissions.hasPermissions("support",await openticket.permissions.getPermissions(instance.user,instance.channel,instance.guild))){ if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
return cancel() return cancel()
}else return }else return
}else{ }else{
if (!instance.guild || !instance.member){ if (!instance.guild || !instance.member){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
return cancel() return cancel()
} }
const role = await openticket.client.fetchGuildRole(instance.guild,permissionMode) const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
if (!role){ if (!role){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
return cancel() return cancel()
} }
if (!role.members.has(instance.member.id)){ if (!role.members.has(instance.member.id)){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel() return cancel()
}else return }else return
} }
@@ -53,10 +53,10 @@ export const registerCommandResponders = async () => {
}else if (!generalConfig.data.slashCommands) mode = "text" }else if (!generalConfig.data.slashCommands) mode = "text"
else mode = "slash" else mode = "slash"
await instance.reply(await openticket.builders.messages.getSafe("openticket:help-menu").build(source,{mode,page:0})) await instance.reply(await opendiscord.builders.messages.getSafe("openticket:help-menu").build(source,{mode,page:0}))
}), }),
new api.ODWorker("openticket:logs",-1,(instance,params,source,cancel) => { new api.ODWorker("openticket:logs",-1,(instance,params,source,cancel) => {
openticket.log(instance.user.displayName+" used the 'help' command!","info",[ opendiscord.log(instance.user.displayName+" used the 'help' command!","info",[
{key:"user",value:instance.user.username}, {key:"user",value:instance.user.username},
{key:"userid",value:instance.user.id,hidden:true}, {key:"userid",value:instance.user.id,hidden:true},
{key:"channelid",value:instance.channel.id,hidden:true}, {key:"channelid",value:instance.channel.id,hidden:true},
@@ -68,8 +68,8 @@ export const registerCommandResponders = async () => {
export const registerButtonResponders = async () => { export const registerButtonResponders = async () => {
//HELP MENU SWITCH BUTTON RESPONDER //HELP MENU SWITCH BUTTON RESPONDER
openticket.responders.buttons.add(new api.ODButtonResponder("openticket:help-menu-switch",/^od:help-menu-switch_(slash|text)/)) opendiscord.responders.buttons.add(new api.ODButtonResponder("openticket:help-menu-switch",/^od:help-menu-switch_(slash|text)/))
openticket.responders.buttons.get("openticket:help-menu-switch").workers.add( opendiscord.responders.buttons.get("openticket:help-menu-switch").workers.add(
new api.ODWorker("openticket:update-help-menu",0,async (instance,params,source,cancel) => { new api.ODWorker("openticket:update-help-menu",0,async (instance,params,source,cancel) => {
const mode = instance.interaction.customId.split("_")[1] as "slash"|"text" const mode = instance.interaction.customId.split("_")[1] as "slash"|"text"
const pageButton = instance.getMessageComponent("button",/^od:help-menu-page_([0-9]+)/) const pageButton = instance.getMessageComponent("button",/^od:help-menu-page_([0-9]+)/)
@@ -77,35 +77,35 @@ export const registerButtonResponders = async () => {
const newMode = (mode == "slash") ? "text" : "slash" const newMode = (mode == "slash") ? "text" : "slash"
const msg = await openticket.builders.messages.getSafe("openticket:help-menu").build("button",{mode:newMode,page:currentPage}) const msg = await opendiscord.builders.messages.getSafe("openticket:help-menu").build("button",{mode:newMode,page:currentPage})
await instance.update(msg) await instance.update(msg)
}) })
) )
//HELP MENU PREVIOUS BUTTON RESPONDER //HELP MENU PREVIOUS BUTTON RESPONDER
openticket.responders.buttons.add(new api.ODButtonResponder("openticket:help-menu-previous",/^od:help-menu-previous/)) opendiscord.responders.buttons.add(new api.ODButtonResponder("openticket:help-menu-previous",/^od:help-menu-previous/))
openticket.responders.buttons.get("openticket:help-menu-previous").workers.add( opendiscord.responders.buttons.get("openticket:help-menu-previous").workers.add(
new api.ODWorker("openticket:update-help-menu",0,async (instance,params,source,cancel) => { new api.ODWorker("openticket:update-help-menu",0,async (instance,params,source,cancel) => {
const switchButton = instance.getMessageComponent("button",/^od:help-menu-switch_(slash|text)/) const switchButton = instance.getMessageComponent("button",/^od:help-menu-switch_(slash|text)/)
const pageButton = instance.getMessageComponent("button",/^od:help-menu-page_([0-9]+)/) const pageButton = instance.getMessageComponent("button",/^od:help-menu-page_([0-9]+)/)
const currentPage = (pageButton && pageButton.customId) ? Number(pageButton.customId.split("_")[1]) : 0 const currentPage = (pageButton && pageButton.customId) ? Number(pageButton.customId.split("_")[1]) : 0
const currentMode = (switchButton && switchButton.customId) ? switchButton.customId.split("_")[1] as "text"|"slash" : "slash" const currentMode = (switchButton && switchButton.customId) ? switchButton.customId.split("_")[1] as "text"|"slash" : "slash"
const msg = await openticket.builders.messages.getSafe("openticket:help-menu").build("button",{mode:currentMode,page:currentPage-1}) const msg = await opendiscord.builders.messages.getSafe("openticket:help-menu").build("button",{mode:currentMode,page:currentPage-1})
await instance.update(msg) await instance.update(msg)
}) })
) )
//HELP MENU NEXT BUTTON RESPONDER //HELP MENU NEXT BUTTON RESPONDER
openticket.responders.buttons.add(new api.ODButtonResponder("openticket:help-menu-next",/^od:help-menu-next/)) opendiscord.responders.buttons.add(new api.ODButtonResponder("openticket:help-menu-next",/^od:help-menu-next/))
openticket.responders.buttons.get("openticket:help-menu-next").workers.add( opendiscord.responders.buttons.get("openticket:help-menu-next").workers.add(
new api.ODWorker("openticket:update-help-menu",0,async (instance,params,source,cancel) => { new api.ODWorker("openticket:update-help-menu",0,async (instance,params,source,cancel) => {
const switchButton = instance.getMessageComponent("button",/^od:help-menu-switch_(slash|text)/) const switchButton = instance.getMessageComponent("button",/^od:help-menu-switch_(slash|text)/)
const pageButton = instance.getMessageComponent("button",/^od:help-menu-page_([0-9]+)/) const pageButton = instance.getMessageComponent("button",/^od:help-menu-page_([0-9]+)/)
const currentPage = (pageButton && pageButton.customId) ? Number(pageButton.customId.split("_")[1]) : 0 const currentPage = (pageButton && pageButton.customId) ? Number(pageButton.customId.split("_")[1]) : 0
const currentMode = (switchButton && switchButton.customId) ? switchButton.customId.split("_")[1] as "text"|"slash" : "slash" const currentMode = (switchButton && switchButton.customId) ? switchButton.customId.split("_")[1] as "text"|"slash" : "slash"
const msg = await openticket.builders.messages.getSafe("openticket:help-menu").build("button",{mode:currentMode,page:currentPage+1}) const msg = await opendiscord.builders.messages.getSafe("openticket:help-menu").build("button",{mode:currentMode,page:currentPage+1})
await instance.update(msg) await instance.update(msg)
}) })
) )
+21 -21
View File
@@ -1,44 +1,44 @@
/////////////////////////////////////// ///////////////////////////////////////
//MOVE COMMAND //MOVE COMMAND
/////////////////////////////////////// ///////////////////////////////////////
import {openticket, api, utilities} from "../index" import {opendiscord, api, utilities} from "../index"
import * as discord from "discord.js" import * as discord from "discord.js"
const generalConfig = openticket.configs.get("openticket:general") const generalConfig = opendiscord.configs.get("openticket:general")
export const registerCommandResponders = async () => { export const registerCommandResponders = async () => {
//MOVE COMMAND RESPONDER //MOVE COMMAND RESPONDER
openticket.responders.commands.add(new api.ODCommandResponder("openticket:move",generalConfig.data.prefix,"move")) opendiscord.responders.commands.add(new api.ODCommandResponder("openticket:move",generalConfig.data.prefix,"move"))
openticket.responders.commands.get("openticket:move").workers.add([ opendiscord.responders.commands.get("openticket:move").workers.add([
new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => { new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => {
const permissionMode = generalConfig.data.system.permissions.move const permissionMode = generalConfig.data.system.permissions.move
if (permissionMode == "none"){ if (permissionMode == "none"){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel() return cancel()
}else if (permissionMode == "everyone") return }else if (permissionMode == "everyone") return
else if (permissionMode == "admin"){ else if (permissionMode == "admin"){
if (!openticket.permissions.hasPermissions("support",await openticket.permissions.getPermissions(instance.user,instance.channel,instance.guild))){ if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
return cancel() return cancel()
}else return }else return
}else{ }else{
if (!instance.guild || !instance.member){ if (!instance.guild || !instance.member){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
return cancel() return cancel()
} }
const role = await openticket.client.fetchGuildRole(instance.guild,permissionMode) const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
if (!role){ if (!role){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
return cancel() return cancel()
} }
if (!role.members.has(instance.member.id)){ if (!role.members.has(instance.member.id)){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel() return cancel()
}else return }else return
} }
@@ -46,42 +46,42 @@ export const registerCommandResponders = async () => {
new api.ODWorker("openticket:move",0,async (instance,params,source,cancel) => { new api.ODWorker("openticket:move",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance const {guild,channel,user} = instance
if (!guild){ if (!guild){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
return cancel() return cancel()
} }
const ticket = openticket.tickets.get(channel.id) const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){ if (!ticket || channel.isDMBased()){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
//return when busy //return when busy
if (ticket.get("openticket:busy").value){ if (ticket.get("openticket:busy").value){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
const id = instance.options.getString("id",true) const id = instance.options.getString("id",true)
const reason = instance.options.getString("reason",false) const reason = instance.options.getString("reason",false)
const option = openticket.options.get(id) const option = opendiscord.options.get(id)
//return if unknown option //return if unknown option
if (!option || !(option instanceof api.ODTicketOption)){ if (!option || !(option instanceof api.ODTicketOption)){
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild,channel,user,error:openticket.languages.getTranslation("errors.titles.unknownOption"),layout:"simple"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build("button",{guild,channel,user,error:opendiscord.languages.getTranslation("errors.titles.unknownOption"),layout:"simple"}))
return cancel() return cancel()
} }
//return if option is the same //return if option is the same
if (ticket.option.id.value == option.id.value){ if (ticket.option.id.value == option.id.value){
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild,channel,user,error:"This ticket is already the same as the chosen option!",layout:"simple"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build("button",{guild,channel,user,error:"This ticket is already the same as the chosen option!",layout:"simple"}))
return cancel() return cancel()
} }
//start moving ticket //start moving ticket
await instance.defer(false) await instance.defer(false)
await openticket.actions.get("openticket:move-ticket").run(source,{guild,channel,user,ticket,reason,sendMessage:false,data:option}) await opendiscord.actions.get("openticket:move-ticket").run(source,{guild,channel,user,ticket,reason,sendMessage:false,data:option})
await instance.reply(await openticket.builders.messages.getSafe("openticket:move-message").build(source,{guild,channel,user,ticket,reason,data:option})) await instance.reply(await opendiscord.builders.messages.getSafe("openticket:move-message").build(source,{guild,channel,user,ticket,reason,data:option}))
}), }),
new api.ODWorker("openticket:logs",-1,(instance,params,source,cancel) => { new api.ODWorker("openticket:logs",-1,(instance,params,source,cancel) => {
openticket.log(instance.user.displayName+" used the 'move' command!","info",[ opendiscord.log(instance.user.displayName+" used the 'move' command!","info",[
{key:"user",value:instance.user.username}, {key:"user",value:instance.user.username},
{key:"userid",value:instance.user.id,hidden:true}, {key:"userid",value:instance.user.id,hidden:true},
{key:"channelid",value:instance.channel.id,hidden:true}, {key:"channelid",value:instance.channel.id,hidden:true},
+18 -18
View File
@@ -1,45 +1,45 @@
/////////////////////////////////////// ///////////////////////////////////////
//STATS COMMAND //STATS COMMAND
/////////////////////////////////////// ///////////////////////////////////////
import {openticket, api, utilities} from "../index" import {opendiscord, api, utilities} from "../index"
import * as discord from "discord.js" import * as discord from "discord.js"
const generalConfig = openticket.configs.get("openticket:general") const generalConfig = opendiscord.configs.get("openticket:general")
export const registerCommandResponders = async () => { export const registerCommandResponders = async () => {
//PANEL COMMAND RESPONDER //PANEL COMMAND RESPONDER
openticket.responders.commands.add(new api.ODCommandResponder("openticket:panel",generalConfig.data.prefix,/^panel/)) opendiscord.responders.commands.add(new api.ODCommandResponder("openticket:panel",generalConfig.data.prefix,/^panel/))
openticket.responders.commands.get("openticket:panel").workers.add([ opendiscord.responders.commands.get("openticket:panel").workers.add([
new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => { new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => {
const permissionMode = generalConfig.data.system.permissions.panel const permissionMode = generalConfig.data.system.permissions.panel
//command is disabled //command is disabled
if (permissionMode == "none"){ if (permissionMode == "none"){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel() return cancel()
}else if (permissionMode == "everyone") return }else if (permissionMode == "everyone") return
else if (permissionMode == "admin"){ else if (permissionMode == "admin"){
if (!openticket.permissions.hasPermissions("support",await openticket.permissions.getPermissions(instance.user,instance.channel,instance.guild))){ if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
return cancel() return cancel()
}else return }else return
}else{ }else{
if (!instance.guild || !instance.member){ if (!instance.guild || !instance.member){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
return cancel() return cancel()
} }
const role = await openticket.client.fetchGuildRole(instance.guild,permissionMode) const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
if (!role){ if (!role){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
return cancel() return cancel()
} }
if (!role.members.has(instance.member.id)){ if (!role.members.has(instance.member.id)){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel() return cancel()
}else return }else return
} }
@@ -48,30 +48,30 @@ export const registerCommandResponders = async () => {
const {guild,channel,user} = instance const {guild,channel,user} = instance
if (!guild || instance.channel.type == discord.ChannelType.GroupDM){ if (!guild || instance.channel.type == discord.ChannelType.GroupDM){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build(source,{channel:instance.channel,user:instance.user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-not-in-guild").build(source,{channel:instance.channel,user:instance.user}))
return cancel() return cancel()
} }
const id = instance.options.getString("id",true) const id = instance.options.getString("id",true)
const panel = openticket.panels.get(id) const panel = opendiscord.panels.get(id)
if (!panel){ if (!panel){
//invalid panel //invalid panel
instance.reply(await openticket.builders.messages.getSafe("openticket:error-panel-unknown").build(source,{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-panel-unknown").build(source,{guild,channel,user}))
return cancel() return cancel()
} }
await instance.reply(await openticket.builders.messages.getSafe("openticket:panel-ready").build(source,{guild,channel,user,panel})) await instance.reply(await opendiscord.builders.messages.getSafe("openticket:panel-ready").build(source,{guild,channel,user,panel}))
const panelMessage = await instance.channel.send((await openticket.builders.messages.getSafe("openticket:panel").build(source,{guild,channel,user,panel})).message) const panelMessage = await instance.channel.send((await opendiscord.builders.messages.getSafe("openticket:panel").build(source,{guild,channel,user,panel})).message)
//add panel to database on auto-update //add panel to database on auto-update
if (instance.options.getBoolean("auto-update",false)){ if (instance.options.getBoolean("auto-update",false)){
const globalDatabase = openticket.databases.get("openticket:global") const globalDatabase = opendiscord.databases.get("openticket:global")
await globalDatabase.set("openticket:panel-update",panelMessage.channel.id+"_"+panelMessage.id,panel.id.value) await globalDatabase.set("openticket:panel-update",panelMessage.channel.id+"_"+panelMessage.id,panel.id.value)
} }
}), }),
new api.ODWorker("openticket:logs",-1,(instance,params,source,cancel) => { new api.ODWorker("openticket:logs",-1,(instance,params,source,cancel) => {
openticket.log(instance.user.displayName+" used the 'panel' command!","info",[ opendiscord.log(instance.user.displayName+" used the 'panel' command!","info",[
{key:"user",value:instance.user.username}, {key:"user",value:instance.user.username},
{key:"userid",value:instance.user.id,hidden:true}, {key:"userid",value:instance.user.id,hidden:true},
{key:"channelid",value:instance.channel.id,hidden:true}, {key:"channelid",value:instance.channel.id,hidden:true},
+33 -33
View File
@@ -1,44 +1,44 @@
/////////////////////////////////////// ///////////////////////////////////////
//PIN COMMAND //PIN COMMAND
/////////////////////////////////////// ///////////////////////////////////////
import {openticket, api, utilities} from "../index" import {opendiscord, api, utilities} from "../index"
import * as discord from "discord.js" import * as discord from "discord.js"
const generalConfig = openticket.configs.get("openticket:general") const generalConfig = opendiscord.configs.get("openticket:general")
export const registerCommandResponders = async () => { export const registerCommandResponders = async () => {
//PIN COMMAND RESPONDER //PIN COMMAND RESPONDER
openticket.responders.commands.add(new api.ODCommandResponder("openticket:pin",generalConfig.data.prefix,"pin")) opendiscord.responders.commands.add(new api.ODCommandResponder("openticket:pin",generalConfig.data.prefix,"pin"))
openticket.responders.commands.get("openticket:pin").workers.add([ opendiscord.responders.commands.get("openticket:pin").workers.add([
new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => { new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => {
const permissionMode = generalConfig.data.system.permissions.pin const permissionMode = generalConfig.data.system.permissions.pin
if (permissionMode == "none"){ if (permissionMode == "none"){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel() return cancel()
}else if (permissionMode == "everyone") return }else if (permissionMode == "everyone") return
else if (permissionMode == "admin"){ else if (permissionMode == "admin"){
if (!openticket.permissions.hasPermissions("support",await openticket.permissions.getPermissions(instance.user,instance.channel,instance.guild))){ if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
return cancel() return cancel()
}else return }else return
}else{ }else{
if (!instance.guild || !instance.member){ if (!instance.guild || !instance.member){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
return cancel() return cancel()
} }
const role = await openticket.client.fetchGuildRole(instance.guild,permissionMode) const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
if (!role){ if (!role){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
return cancel() return cancel()
} }
if (!role.members.has(instance.member.id)){ if (!role.members.has(instance.member.id)){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel() return cancel()
}else return }else return
} }
@@ -46,22 +46,22 @@ export const registerCommandResponders = async () => {
new api.ODWorker("openticket:pin",0,async (instance,params,source,cancel) => { new api.ODWorker("openticket:pin",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance const {guild,channel,user} = instance
if (!guild){ if (!guild){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
return cancel() return cancel()
} }
const ticket = openticket.tickets.get(channel.id) const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){ if (!ticket || channel.isDMBased()){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
//return when already pinned //return when already pinned
if (ticket.get("openticket:pinned").value){ if (ticket.get("openticket:pinned").value){
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild,channel,user,error:openticket.languages.getTranslation("errors.actionInvalid.pin"),layout:"simple"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build("button",{guild,channel,user,error:opendiscord.languages.getTranslation("errors.actionInvalid.pin"),layout:"simple"}))
return cancel() return cancel()
} }
//return when busy //return when busy
if (ticket.get("openticket:busy").value){ if (ticket.get("openticket:busy").value){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
@@ -69,11 +69,11 @@ export const registerCommandResponders = async () => {
//start pinning ticket //start pinning ticket
await instance.defer(false) await instance.defer(false)
await openticket.actions.get("openticket:pin-ticket").run(source,{guild,channel,user,ticket,reason,sendMessage:false}) await opendiscord.actions.get("openticket:pin-ticket").run(source,{guild,channel,user,ticket,reason,sendMessage:false})
await instance.reply(await openticket.builders.messages.getSafe("openticket:pin-message").build(source,{guild,channel,user,ticket,reason})) await instance.reply(await opendiscord.builders.messages.getSafe("openticket:pin-message").build(source,{guild,channel,user,ticket,reason}))
}), }),
new api.ODWorker("openticket:logs",-1,(instance,params,source,cancel) => { new api.ODWorker("openticket:logs",-1,(instance,params,source,cancel) => {
openticket.log(instance.user.displayName+" used the 'pin' command!","info",[ opendiscord.log(instance.user.displayName+" used the 'pin' command!","info",[
{key:"user",value:instance.user.username}, {key:"user",value:instance.user.username},
{key:"userid",value:instance.user.id,hidden:true}, {key:"userid",value:instance.user.id,hidden:true},
{key:"channelid",value:instance.channel.id,hidden:true}, {key:"channelid",value:instance.channel.id,hidden:true},
@@ -85,33 +85,33 @@ export const registerCommandResponders = async () => {
export const registerButtonResponders = async () => { export const registerButtonResponders = async () => {
//PIN TICKET BUTTON RESPONDER //PIN TICKET BUTTON RESPONDER
openticket.responders.buttons.add(new api.ODButtonResponder("openticket:pin-ticket",/^od:pin-ticket/)) opendiscord.responders.buttons.add(new api.ODButtonResponder("openticket:pin-ticket",/^od:pin-ticket/))
openticket.responders.buttons.get("openticket:pin-ticket").workers.add( opendiscord.responders.buttons.get("openticket:pin-ticket").workers.add(
new api.ODWorker("openticket:pin-ticket",0,async (instance,params,source,cancel) => { new api.ODWorker("openticket:pin-ticket",0,async (instance,params,source,cancel) => {
const originalSource = instance.interaction.customId.split("_")[1] const originalSource = instance.interaction.customId.split("_")[1]
if (originalSource != "ticket-message" && originalSource != "unpin-message") return if (originalSource != "ticket-message" && originalSource != "unpin-message") return
if (originalSource == "ticket-message") await openticket.verifybars.get("openticket:pin-ticket-ticket-message").activate(instance) if (originalSource == "ticket-message") await opendiscord.verifybars.get("openticket:pin-ticket-ticket-message").activate(instance)
else await openticket.verifybars.get("openticket:pin-ticket-unpin-message").activate(instance) else await opendiscord.verifybars.get("openticket:pin-ticket-unpin-message").activate(instance)
}) })
) )
} }
export const registerModalResponders = async () => { export const registerModalResponders = async () => {
//PIN WITH REASON MODAL RESPONDER //PIN WITH REASON MODAL RESPONDER
openticket.responders.modals.add(new api.ODModalResponder("openticket:pin-ticket-reason",/^od:pin-ticket-reason_/)) opendiscord.responders.modals.add(new api.ODModalResponder("openticket:pin-ticket-reason",/^od:pin-ticket-reason_/))
openticket.responders.modals.get("openticket:pin-ticket-reason").workers.add([ opendiscord.responders.modals.get("openticket:pin-ticket-reason").workers.add([
new api.ODWorker("openticket:pin-ticket-reason",0,async (instance,params,source,cancel) => { new api.ODWorker("openticket:pin-ticket-reason",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance const {guild,channel,user} = instance
if (!channel) return if (!channel) return
if (!guild){ if (!guild){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build(source,{channel,user:instance.user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-not-in-guild").build(source,{channel,user:instance.user}))
return cancel() return cancel()
} }
const ticket = openticket.tickets.get(instance.interaction.customId.split("_")[1]) const ticket = opendiscord.tickets.get(instance.interaction.customId.split("_")[1])
if (!ticket || channel.isDMBased()){ if (!ticket || channel.isDMBased()){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
return return
} }
@@ -121,15 +121,15 @@ export const registerModalResponders = async () => {
//pin with reason //pin with reason
if (originalSource == "ticket-message"){ if (originalSource == "ticket-message"){
await instance.defer("update",false) await instance.defer("update",false)
await openticket.actions.get("openticket:pin-ticket").run(originalSource,{guild,channel,user,ticket,reason,sendMessage:true}) await opendiscord.actions.get("openticket:pin-ticket").run(originalSource,{guild,channel,user,ticket,reason,sendMessage:true})
await instance.update(await openticket.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket})) await instance.update(await opendiscord.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket}))
}else if (originalSource == "unpin-message"){ }else if (originalSource == "unpin-message"){
await instance.defer("update",false) await instance.defer("update",false)
await openticket.actions.get("openticket:pin-ticket").run(originalSource,{guild,channel,user,ticket,reason,sendMessage:false}) await opendiscord.actions.get("openticket:pin-ticket").run(originalSource,{guild,channel,user,ticket,reason,sendMessage:false})
await instance.update(await openticket.builders.messages.getSafe("openticket:pin-message").build("other",{guild,channel,user,ticket,reason})) await instance.update(await opendiscord.builders.messages.getSafe("openticket:pin-message").build("other",{guild,channel,user,ticket,reason}))
}else if (originalSource == "other"){ }else if (originalSource == "other"){
await instance.defer("update",false) await instance.defer("update",false)
await openticket.actions.get("openticket:pin-ticket").run(originalSource,{guild,channel,user,ticket,reason,sendMessage:true}) await opendiscord.actions.get("openticket:pin-ticket").run(originalSource,{guild,channel,user,ticket,reason,sendMessage:true})
} }
}) })
+20 -20
View File
@@ -1,44 +1,44 @@
/////////////////////////////////////// ///////////////////////////////////////
//REMOVE COMMAND //REMOVE COMMAND
/////////////////////////////////////// ///////////////////////////////////////
import {openticket, api, utilities} from "../index" import {opendiscord, api, utilities} from "../index"
import * as discord from "discord.js" import * as discord from "discord.js"
const generalConfig = openticket.configs.get("openticket:general") const generalConfig = opendiscord.configs.get("openticket:general")
export const registerCommandResponders = async () => { export const registerCommandResponders = async () => {
//REMOVE COMMAND RESPONDER //REMOVE COMMAND RESPONDER
openticket.responders.commands.add(new api.ODCommandResponder("openticket:remove",generalConfig.data.prefix,"remove")) opendiscord.responders.commands.add(new api.ODCommandResponder("openticket:remove",generalConfig.data.prefix,"remove"))
openticket.responders.commands.get("openticket:remove").workers.add([ opendiscord.responders.commands.get("openticket:remove").workers.add([
new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => { new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => {
const permissionMode = generalConfig.data.system.permissions.remove const permissionMode = generalConfig.data.system.permissions.remove
if (permissionMode == "none"){ if (permissionMode == "none"){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel() return cancel()
}else if (permissionMode == "everyone") return }else if (permissionMode == "everyone") return
else if (permissionMode == "admin"){ else if (permissionMode == "admin"){
if (!openticket.permissions.hasPermissions("support",await openticket.permissions.getPermissions(instance.user,instance.channel,instance.guild))){ if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
return cancel() return cancel()
}else return }else return
}else{ }else{
if (!instance.guild || !instance.member){ if (!instance.guild || !instance.member){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
return cancel() return cancel()
} }
const role = await openticket.client.fetchGuildRole(instance.guild,permissionMode) const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
if (!role){ if (!role){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
return cancel() return cancel()
} }
if (!role.members.has(instance.member.id)){ if (!role.members.has(instance.member.id)){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel() return cancel()
}else return }else return
} }
@@ -46,17 +46,17 @@ export const registerCommandResponders = async () => {
new api.ODWorker("openticket:remove",0,async (instance,params,source,cancel) => { new api.ODWorker("openticket:remove",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance const {guild,channel,user} = instance
if (!guild){ if (!guild){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
return cancel() return cancel()
} }
const ticket = openticket.tickets.get(channel.id) const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){ if (!ticket || channel.isDMBased()){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
//return when busy //return when busy
if (ticket.get("openticket:busy").value){ if (ticket.get("openticket:busy").value){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
@@ -64,19 +64,19 @@ export const registerCommandResponders = async () => {
const reason = instance.options.getString("reason",false) const reason = instance.options.getString("reason",false)
//return when user is not a participant of the ticket (admins & creator can't be removed) //return when user is not a participant of the ticket (admins & creator can't be removed)
const participants = await openticket.tickets.getAllTicketParticipants(ticket) const participants = await opendiscord.tickets.getAllTicketParticipants(ticket)
if (!participants || !participants.find((p) => p.user.id == data.id && p.role == "participant")){ if (!participants || !participants.find((p) => p.user.id == data.id && p.role == "participant")){
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild,channel,user,error:openticket.languages.getTranslation("errors.actionInvalid.remove"),layout:"simple"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build("button",{guild,channel,user,error:opendiscord.languages.getTranslation("errors.actionInvalid.remove"),layout:"simple"}))
return cancel() return cancel()
} }
//start removing user from ticket //start removing user from ticket
await instance.defer(false) await instance.defer(false)
await openticket.actions.get("openticket:remove-ticket-user").run(source,{guild,channel,user,ticket,reason,sendMessage:false,data}) await opendiscord.actions.get("openticket:remove-ticket-user").run(source,{guild,channel,user,ticket,reason,sendMessage:false,data})
await instance.reply(await openticket.builders.messages.getSafe("openticket:remove-message").build(source,{guild,channel,user,ticket,reason,data})) await instance.reply(await opendiscord.builders.messages.getSafe("openticket:remove-message").build(source,{guild,channel,user,ticket,reason,data}))
}), }),
new api.ODWorker("openticket:logs",-1,(instance,params,source,cancel) => { new api.ODWorker("openticket:logs",-1,(instance,params,source,cancel) => {
openticket.log(instance.user.displayName+" used the 'remove' command!","info",[ opendiscord.log(instance.user.displayName+" used the 'remove' command!","info",[
{key:"user",value:instance.user.username}, {key:"user",value:instance.user.username},
{key:"userid",value:instance.user.id,hidden:true}, {key:"userid",value:instance.user.id,hidden:true},
{key:"channelid",value:instance.channel.id,hidden:true}, {key:"channelid",value:instance.channel.id,hidden:true},
+18 -18
View File
@@ -1,44 +1,44 @@
/////////////////////////////////////// ///////////////////////////////////////
//RENAME COMMAND //RENAME COMMAND
/////////////////////////////////////// ///////////////////////////////////////
import {openticket, api, utilities} from "../index" import {opendiscord, api, utilities} from "../index"
import * as discord from "discord.js" import * as discord from "discord.js"
const generalConfig = openticket.configs.get("openticket:general") const generalConfig = opendiscord.configs.get("openticket:general")
export const registerCommandResponders = async () => { export const registerCommandResponders = async () => {
//RENAME COMMAND RESPONDER //RENAME COMMAND RESPONDER
openticket.responders.commands.add(new api.ODCommandResponder("openticket:rename",generalConfig.data.prefix,"rename")) opendiscord.responders.commands.add(new api.ODCommandResponder("openticket:rename",generalConfig.data.prefix,"rename"))
openticket.responders.commands.get("openticket:rename").workers.add([ opendiscord.responders.commands.get("openticket:rename").workers.add([
new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => { new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => {
const permissionMode = generalConfig.data.system.permissions.rename const permissionMode = generalConfig.data.system.permissions.rename
if (permissionMode == "none"){ if (permissionMode == "none"){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel() return cancel()
}else if (permissionMode == "everyone") return }else if (permissionMode == "everyone") return
else if (permissionMode == "admin"){ else if (permissionMode == "admin"){
if (!openticket.permissions.hasPermissions("support",await openticket.permissions.getPermissions(instance.user,instance.channel,instance.guild))){ if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
return cancel() return cancel()
}else return }else return
}else{ }else{
if (!instance.guild || !instance.member){ if (!instance.guild || !instance.member){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
return cancel() return cancel()
} }
const role = await openticket.client.fetchGuildRole(instance.guild,permissionMode) const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
if (!role){ if (!role){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
return cancel() return cancel()
} }
if (!role.members.has(instance.member.id)){ if (!role.members.has(instance.member.id)){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel() return cancel()
}else return }else return
} }
@@ -46,17 +46,17 @@ export const registerCommandResponders = async () => {
new api.ODWorker("openticket:rename",0,async (instance,params,source,cancel) => { new api.ODWorker("openticket:rename",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance const {guild,channel,user} = instance
if (!guild){ if (!guild){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
return cancel() return cancel()
} }
const ticket = openticket.tickets.get(channel.id) const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){ if (!ticket || channel.isDMBased()){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
//return when busy //return when busy
if (ticket.get("openticket:busy").value){ if (ticket.get("openticket:busy").value){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
@@ -65,11 +65,11 @@ export const registerCommandResponders = async () => {
//start renaming ticket //start renaming ticket
await instance.defer(false) await instance.defer(false)
await openticket.actions.get("openticket:rename-ticket").run(source,{guild,channel,user,ticket,reason,sendMessage:false,data:name}) await opendiscord.actions.get("openticket:rename-ticket").run(source,{guild,channel,user,ticket,reason,sendMessage:false,data:name})
await instance.reply(await openticket.builders.messages.getSafe("openticket:rename-message").build(source,{guild,channel,user,ticket,reason,data:name})) await instance.reply(await opendiscord.builders.messages.getSafe("openticket:rename-message").build(source,{guild,channel,user,ticket,reason,data:name}))
}), }),
new api.ODWorker("openticket:logs",-1,(instance,params,source,cancel) => { new api.ODWorker("openticket:logs",-1,(instance,params,source,cancel) => {
openticket.log(instance.user.displayName+" used the 'rename' command!","info",[ opendiscord.log(instance.user.displayName+" used the 'rename' command!","info",[
{key:"user",value:instance.user.username}, {key:"user",value:instance.user.username},
{key:"userid",value:instance.user.id,hidden:true}, {key:"userid",value:instance.user.id,hidden:true},
{key:"channelid",value:instance.channel.id,hidden:true}, {key:"channelid",value:instance.channel.id,hidden:true},
+36 -36
View File
@@ -1,44 +1,44 @@
/////////////////////////////////////// ///////////////////////////////////////
//REOPEN COMMAND //REOPEN COMMAND
/////////////////////////////////////// ///////////////////////////////////////
import {openticket, api, utilities} from "../index" import {opendiscord, api, utilities} from "../index"
import * as discord from "discord.js" import * as discord from "discord.js"
const generalConfig = openticket.configs.get("openticket:general") const generalConfig = opendiscord.configs.get("openticket:general")
export const registerCommandResponders = async () => { export const registerCommandResponders = async () => {
//REOPEN COMMAND RESPONDER //REOPEN COMMAND RESPONDER
openticket.responders.commands.add(new api.ODCommandResponder("openticket:reopen",generalConfig.data.prefix,"reopen")) opendiscord.responders.commands.add(new api.ODCommandResponder("openticket:reopen",generalConfig.data.prefix,"reopen"))
openticket.responders.commands.get("openticket:reopen").workers.add([ opendiscord.responders.commands.get("openticket:reopen").workers.add([
new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => { new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => {
const permissionMode = generalConfig.data.system.permissions.reopen const permissionMode = generalConfig.data.system.permissions.reopen
if (permissionMode == "none"){ if (permissionMode == "none"){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel() return cancel()
}else if (permissionMode == "everyone") return }else if (permissionMode == "everyone") return
else if (permissionMode == "admin"){ else if (permissionMode == "admin"){
if (!openticket.permissions.hasPermissions("support",await openticket.permissions.getPermissions(instance.user,instance.channel,instance.guild))){ if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
return cancel() return cancel()
}else return }else return
}else{ }else{
if (!instance.guild || !instance.member){ if (!instance.guild || !instance.member){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
return cancel() return cancel()
} }
const role = await openticket.client.fetchGuildRole(instance.guild,permissionMode) const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
if (!role){ if (!role){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
return cancel() return cancel()
} }
if (!role.members.has(instance.member.id)){ if (!role.members.has(instance.member.id)){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel() return cancel()
}else return }else return
} }
@@ -46,22 +46,22 @@ export const registerCommandResponders = async () => {
new api.ODWorker("openticket:reopen",0,async (instance,params,source,cancel) => { new api.ODWorker("openticket:reopen",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance const {guild,channel,user} = instance
if (!guild){ if (!guild){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
return cancel() return cancel()
} }
const ticket = openticket.tickets.get(channel.id) const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){ if (!ticket || channel.isDMBased()){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
//return when not closed //return when not closed
if (!ticket.get("openticket:closed").value){ if (!ticket.get("openticket:closed").value){
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild,channel,user,error:openticket.languages.getTranslation("errors.actionInvalid.reopen"),layout:"simple"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build("button",{guild,channel,user,error:opendiscord.languages.getTranslation("errors.actionInvalid.reopen"),layout:"simple"}))
return cancel() return cancel()
} }
//return when busy //return when busy
if (ticket.get("openticket:busy").value){ if (ticket.get("openticket:busy").value){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
@@ -69,11 +69,11 @@ export const registerCommandResponders = async () => {
//start reopening ticket //start reopening ticket
await instance.defer(false) await instance.defer(false)
await openticket.actions.get("openticket:reopen-ticket").run(source,{guild,channel,user,ticket,reason,sendMessage:false}) await opendiscord.actions.get("openticket:reopen-ticket").run(source,{guild,channel,user,ticket,reason,sendMessage:false})
await instance.reply(await openticket.builders.messages.getSafe("openticket:reopen-message").build(source,{guild,channel,user,ticket,reason})) await instance.reply(await opendiscord.builders.messages.getSafe("openticket:reopen-message").build(source,{guild,channel,user,ticket,reason}))
}), }),
new api.ODWorker("openticket:logs",-1,(instance,params,source,cancel) => { new api.ODWorker("openticket:logs",-1,(instance,params,source,cancel) => {
openticket.log(instance.user.displayName+" used the 'reopen' command!","info",[ opendiscord.log(instance.user.displayName+" used the 'reopen' command!","info",[
{key:"user",value:instance.user.username}, {key:"user",value:instance.user.username},
{key:"userid",value:instance.user.id,hidden:true}, {key:"userid",value:instance.user.id,hidden:true},
{key:"channelid",value:instance.channel.id,hidden:true}, {key:"channelid",value:instance.channel.id,hidden:true},
@@ -85,34 +85,34 @@ export const registerCommandResponders = async () => {
export const registerButtonResponders = async () => { export const registerButtonResponders = async () => {
//REOPEN TICKET BUTTON RESPONDER //REOPEN TICKET BUTTON RESPONDER
openticket.responders.buttons.add(new api.ODButtonResponder("openticket:reopen-ticket",/^od:reopen-ticket/)) opendiscord.responders.buttons.add(new api.ODButtonResponder("openticket:reopen-ticket",/^od:reopen-ticket/))
openticket.responders.buttons.get("openticket:reopen-ticket").workers.add( opendiscord.responders.buttons.get("openticket:reopen-ticket").workers.add(
new api.ODWorker("openticket:reopen-ticket",0,async (instance,params,source,cancel) => { new api.ODWorker("openticket:reopen-ticket",0,async (instance,params,source,cancel) => {
const originalSource = instance.interaction.customId.split("_")[1] const originalSource = instance.interaction.customId.split("_")[1]
if (originalSource != "ticket-message" && originalSource != "close-message" && originalSource != "autoclose-message") return if (originalSource != "ticket-message" && originalSource != "close-message" && originalSource != "autoclose-message") return
if (originalSource == "ticket-message") await openticket.verifybars.get("openticket:reopen-ticket-ticket-message").activate(instance) if (originalSource == "ticket-message") await opendiscord.verifybars.get("openticket:reopen-ticket-ticket-message").activate(instance)
else if (originalSource == "close-message") await openticket.verifybars.get("openticket:reopen-ticket-close-message").activate(instance) else if (originalSource == "close-message") await opendiscord.verifybars.get("openticket:reopen-ticket-close-message").activate(instance)
else await openticket.verifybars.get("openticket:reopen-ticket-autoclose-message").activate(instance) else await opendiscord.verifybars.get("openticket:reopen-ticket-autoclose-message").activate(instance)
}) })
) )
} }
export const registerModalResponders = async () => { export const registerModalResponders = async () => {
//REOPEN WITH REASON MODAL RESPONDER //REOPEN WITH REASON MODAL RESPONDER
openticket.responders.modals.add(new api.ODModalResponder("openticket:reopen-ticket-reason",/^od:reopen-ticket-reason_/)) opendiscord.responders.modals.add(new api.ODModalResponder("openticket:reopen-ticket-reason",/^od:reopen-ticket-reason_/))
openticket.responders.modals.get("openticket:reopen-ticket-reason").workers.add([ opendiscord.responders.modals.get("openticket:reopen-ticket-reason").workers.add([
new api.ODWorker("openticket:reopen-ticket-reason",0,async (instance,params,source,cancel) => { new api.ODWorker("openticket:reopen-ticket-reason",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance const {guild,channel,user} = instance
if (!channel) return if (!channel) return
if (!guild){ if (!guild){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build(source,{channel,user:instance.user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-not-in-guild").build(source,{channel,user:instance.user}))
return cancel() return cancel()
} }
const ticket = openticket.tickets.get(instance.interaction.customId.split("_")[1]) const ticket = opendiscord.tickets.get(instance.interaction.customId.split("_")[1])
if (!ticket || channel.isDMBased()){ if (!ticket || channel.isDMBased()){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
return return
} }
@@ -122,19 +122,19 @@ export const registerModalResponders = async () => {
//reopen with reason //reopen with reason
if (originalSource == "ticket-message"){ if (originalSource == "ticket-message"){
await instance.defer("update",false) await instance.defer("update",false)
await openticket.actions.get("openticket:reopen-ticket").run(originalSource,{guild,channel,user,ticket,reason,sendMessage:true}) await opendiscord.actions.get("openticket:reopen-ticket").run(originalSource,{guild,channel,user,ticket,reason,sendMessage:true})
await instance.update(await openticket.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket})) await instance.update(await opendiscord.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket}))
}else if (originalSource == "close-message"){ }else if (originalSource == "close-message"){
await instance.defer("update",false) await instance.defer("update",false)
await openticket.actions.get("openticket:reopen-ticket").run(originalSource,{guild,channel,user,ticket,reason,sendMessage:false}) await opendiscord.actions.get("openticket:reopen-ticket").run(originalSource,{guild,channel,user,ticket,reason,sendMessage:false})
await instance.update(await openticket.builders.messages.getSafe("openticket:reopen-message").build("other",{guild,channel,user,ticket,reason})) await instance.update(await opendiscord.builders.messages.getSafe("openticket:reopen-message").build("other",{guild,channel,user,ticket,reason}))
}else if (originalSource == "autoclose-message"){ }else if (originalSource == "autoclose-message"){
await instance.defer("update",false) await instance.defer("update",false)
await openticket.actions.get("openticket:reopen-ticket").run(originalSource,{guild,channel,user,ticket,reason,sendMessage:false}) await opendiscord.actions.get("openticket:reopen-ticket").run(originalSource,{guild,channel,user,ticket,reason,sendMessage:false})
await instance.update(await openticket.builders.messages.getSafe("openticket:reopen-message").build("other",{guild,channel,user,ticket,reason})) await instance.update(await opendiscord.builders.messages.getSafe("openticket:reopen-message").build("other",{guild,channel,user,ticket,reason}))
}else if (originalSource == "other"){ }else if (originalSource == "other"){
await instance.defer("update",false) await instance.defer("update",false)
await openticket.actions.get("openticket:reopen-ticket").run(originalSource,{guild,channel,user,ticket,reason,sendMessage:true}) await opendiscord.actions.get("openticket:reopen-ticket").run(originalSource,{guild,channel,user,ticket,reason,sendMessage:true})
} }
}) })
+10 -10
View File
@@ -1,41 +1,41 @@
/////////////////////////////////////// ///////////////////////////////////////
//ROLE BUTTON (not command) //ROLE BUTTON (not command)
/////////////////////////////////////// ///////////////////////////////////////
import {openticket, api, utilities} from "../index" import {opendiscord, api, utilities} from "../index"
import * as discord from "discord.js" import * as discord from "discord.js"
const generalConfig = openticket.configs.get("openticket:general") const generalConfig = opendiscord.configs.get("openticket:general")
export const registerButtonResponders = async () => { export const registerButtonResponders = async () => {
//ROLE OPTION BUTTON RESPONDER //ROLE OPTION BUTTON RESPONDER
openticket.responders.buttons.add(new api.ODButtonResponder("openticket:role-option",/^od:role-option_/)) opendiscord.responders.buttons.add(new api.ODButtonResponder("openticket:role-option",/^od:role-option_/))
openticket.responders.buttons.get("openticket:role-option").workers.add( opendiscord.responders.buttons.get("openticket:role-option").workers.add(
new api.ODWorker("openticket:role-option",0,async (instance,params,source,cancel) => { new api.ODWorker("openticket:role-option",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance const {guild,channel,user} = instance
if (!guild){ if (!guild){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build(source,{channel:instance.channel,user:instance.user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-not-in-guild").build(source,{channel:instance.channel,user:instance.user}))
return cancel() return cancel()
} }
//get option //get option
const optionId = instance.interaction.customId.split("_")[2] const optionId = instance.interaction.customId.split("_")[2]
const option = openticket.options.get(optionId) const option = opendiscord.options.get(optionId)
if (!option || !(option instanceof api.ODRoleOption)){ if (!option || !(option instanceof api.ODRoleOption)){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error-option-unknown").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-option-unknown").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user}))
return cancel() return cancel()
} }
//reaction role //reaction role
await instance.defer("reply",true) await instance.defer("reply",true)
const res = await openticket.actions.get("openticket:reaction-role").run("panel-button",{guild,user,option,overwriteMode:null}) const res = await opendiscord.actions.get("openticket:reaction-role").run("panel-button",{guild,user,option,overwriteMode:null})
if (!res.result || !res.role){ if (!res.result || !res.role){
//error //error
await instance.reply(await openticket.builders.messages.getSafe("openticket:error").build(source,{guild,channel:instance.channel,user,error:"Unable to receive role update data from worker!",layout:"advanced"})) await instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build(source,{guild,channel:instance.channel,user,error:"Unable to receive role update data from worker!",layout:"advanced"}))
return cancel() return cancel()
} }
if (generalConfig.data.system.replyOnReactionRole) await instance.reply(await openticket.builders.messages.getSafe("openticket:reaction-role").build("panel-button",{guild,user,role:res.role,result:res.result})) if (generalConfig.data.system.replyOnReactionRole) await instance.reply(await opendiscord.builders.messages.getSafe("openticket:reaction-role").build("panel-button",{guild,user,role:res.role,result:res.result}))
}) })
) )
} }
+22 -22
View File
@@ -1,30 +1,30 @@
/////////////////////////////////////// ///////////////////////////////////////
//STATS COMMAND //STATS COMMAND
/////////////////////////////////////// ///////////////////////////////////////
import {openticket, api, utilities} from "../index" import {opendiscord, api, utilities} from "../index"
import * as discord from "discord.js" import * as discord from "discord.js"
const generalConfig = openticket.configs.get("openticket:general") const generalConfig = opendiscord.configs.get("openticket:general")
export const registerCommandResponders = async () => { export const registerCommandResponders = async () => {
//STATS COMMAND RESPONDER //STATS COMMAND RESPONDER
openticket.responders.commands.add(new api.ODCommandResponder("openticket:stats",generalConfig.data.prefix,/^stats/)) opendiscord.responders.commands.add(new api.ODCommandResponder("openticket:stats",generalConfig.data.prefix,/^stats/))
openticket.responders.commands.get("openticket:stats").workers.add([ opendiscord.responders.commands.get("openticket:stats").workers.add([
new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => { new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => {
const permissionMode = generalConfig.data.system.permissions.stats const permissionMode = generalConfig.data.system.permissions.stats
//command is disabled //command is disabled
if (permissionMode == "none"){ if (permissionMode == "none"){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel() return cancel()
} }
//reset subcommand is owner/developer only //reset subcommand is owner/developer only
if (instance.options.getSubCommand() == "reset"){ if (instance.options.getSubCommand() == "reset"){
if (!openticket.permissions.hasPermissions("owner",await openticket.permissions.getPermissions(instance.user,instance.channel,instance.guild))){ if (!opendiscord.permissions.hasPermissions("owner",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["owner","developer"]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["owner","developer"]}))
return cancel() return cancel()
}else return }else return
} }
@@ -32,26 +32,26 @@ export const registerCommandResponders = async () => {
//permissions for normal scopes //permissions for normal scopes
if (permissionMode == "everyone") return if (permissionMode == "everyone") return
else if (permissionMode == "admin"){ else if (permissionMode == "admin"){
if (!openticket.permissions.hasPermissions("support",await openticket.permissions.getPermissions(instance.user,instance.channel,instance.guild))){ if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
return cancel() return cancel()
}else return }else return
}else{ }else{
if (!instance.guild || !instance.member){ if (!instance.guild || !instance.member){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
return cancel() return cancel()
} }
const role = await openticket.client.fetchGuildRole(instance.guild,permissionMode) const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
if (!role){ if (!role){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
return cancel() return cancel()
} }
if (!role.members.has(instance.member.id)){ if (!role.members.has(instance.member.id)){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel() return cancel()
}else return }else return
} }
@@ -60,30 +60,30 @@ export const registerCommandResponders = async () => {
const {guild,channel,user} = instance const {guild,channel,user} = instance
if (!guild){ if (!guild){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build(source,{channel:instance.channel,user:instance.user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-not-in-guild").build(source,{channel:instance.channel,user:instance.user}))
return cancel() return cancel()
} }
const scope = instance.options.getSubCommand() const scope = instance.options.getSubCommand()
if (!scope || (scope != "global" && scope != "ticket" && scope != "user" && scope != "reset")) return if (!scope || (scope != "global" && scope != "ticket" && scope != "user" && scope != "reset")) return
if (scope == "global"){ if (scope == "global"){
await instance.reply(await openticket.builders.messages.getSafe("openticket:stats-global").build(source,{guild,channel,user})) await instance.reply(await opendiscord.builders.messages.getSafe("openticket:stats-global").build(source,{guild,channel,user}))
}else if (scope == "ticket"){ }else if (scope == "ticket"){
const id = instance.options.getChannel("ticket",false)?.id ?? channel.id const id = instance.options.getChannel("ticket",false)?.id ?? channel.id
const ticket = openticket.tickets.get(id) const ticket = opendiscord.tickets.get(id)
if (ticket) await instance.reply(await openticket.builders.messages.getSafe("openticket:stats-ticket").build(source,{guild,channel,user,scopeData:ticket})) if (ticket) await instance.reply(await opendiscord.builders.messages.getSafe("openticket:stats-ticket").build(source,{guild,channel,user,scopeData:ticket}))
else await instance.reply(await openticket.builders.messages.getSafe("openticket:stats-ticket-unknown").build(source,{guild,channel,user,id})) else await instance.reply(await opendiscord.builders.messages.getSafe("openticket:stats-ticket-unknown").build(source,{guild,channel,user,id}))
}else if (scope == "user"){ }else if (scope == "user"){
const statsUser = instance.options.getUser("user",false) ?? user const statsUser = instance.options.getUser("user",false) ?? user
await instance.reply(await openticket.builders.messages.getSafe("openticket:stats-user").build(source,{guild,channel,user,scopeData:statsUser})) await instance.reply(await opendiscord.builders.messages.getSafe("openticket:stats-user").build(source,{guild,channel,user,scopeData:statsUser}))
}else if (scope == "reset"){ }else if (scope == "reset"){
const reason = instance.options.getString("reason",false) const reason = instance.options.getString("reason",false)
openticket.stats.reset() opendiscord.stats.reset()
await instance.reply(await openticket.builders.messages.getSafe("openticket:stats-reset").build(source,{guild,channel,user,reason})) await instance.reply(await opendiscord.builders.messages.getSafe("openticket:stats-reset").build(source,{guild,channel,user,reason}))
} }
}), }),
@@ -95,7 +95,7 @@ export const registerCommandResponders = async () => {
}else if (scope == "user"){ }else if (scope == "user"){
data = instance.options.getUser("user",false)?.id ?? instance.user.id data = instance.options.getUser("user",false)?.id ?? instance.user.id
}else data = "/" }else data = "/"
openticket.log(instance.user.displayName+" used the 'stats "+scope+"' command!","info",[ opendiscord.log(instance.user.displayName+" used the 'stats "+scope+"' command!","info",[
{key:"user",value:instance.user.username}, {key:"user",value:instance.user.username},
{key:"userid",value:instance.user.id,hidden:true}, {key:"userid",value:instance.user.id,hidden:true},
{key:"channelid",value:instance.channel.id,hidden:true}, {key:"channelid",value:instance.channel.id,hidden:true},
+70 -70
View File
@@ -1,44 +1,44 @@
/////////////////////////////////////// ///////////////////////////////////////
//TICKET COMMAND //TICKET COMMAND
/////////////////////////////////////// ///////////////////////////////////////
import {openticket, api, utilities} from "../index" import {opendiscord, api, utilities} from "../index"
import * as discord from "discord.js" import * as discord from "discord.js"
const generalConfig = openticket.configs.get("openticket:general") const generalConfig = opendiscord.configs.get("openticket:general")
export const registerCommandResponders = async () => { export const registerCommandResponders = async () => {
//TICKET COMMAND RESPONDER //TICKET COMMAND RESPONDER
openticket.responders.commands.add(new api.ODCommandResponder("openticket:ticket",generalConfig.data.prefix,/^ticket/)) opendiscord.responders.commands.add(new api.ODCommandResponder("openticket:ticket",generalConfig.data.prefix,/^ticket/))
openticket.responders.commands.get("openticket:ticket").workers.add([ opendiscord.responders.commands.get("openticket:ticket").workers.add([
new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => { new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => {
const permissionMode = generalConfig.data.system.permissions.ticket const permissionMode = generalConfig.data.system.permissions.ticket
if (permissionMode == "none"){ if (permissionMode == "none"){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel() return cancel()
}else if (permissionMode == "everyone") return }else if (permissionMode == "everyone") return
else if (permissionMode == "admin"){ else if (permissionMode == "admin"){
if (!openticket.permissions.hasPermissions("support",await openticket.permissions.getPermissions(instance.user,instance.channel,instance.guild))){ if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
return cancel() return cancel()
}else return }else return
}else{ }else{
if (!instance.guild || !instance.member){ if (!instance.guild || !instance.member){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
return cancel() return cancel()
} }
const role = await openticket.client.fetchGuildRole(instance.guild,permissionMode) const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
if (!role){ if (!role){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
return cancel() return cancel()
} }
if (!role.members.has(instance.member.id)){ if (!role.members.has(instance.member.id)){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel() return cancel()
}else return }else return
} }
@@ -47,51 +47,51 @@ export const registerCommandResponders = async () => {
const {guild,channel,user} = instance const {guild,channel,user} = instance
if (!guild){ if (!guild){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build(source,{channel:instance.channel,user:instance.user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-not-in-guild").build(source,{channel:instance.channel,user:instance.user}))
return cancel() return cancel()
} }
//get option //get option
const optionId = instance.options.getString("id",true) const optionId = instance.options.getString("id",true)
const option = openticket.options.get(optionId) const option = opendiscord.options.get(optionId)
if (!option || !(option instanceof api.ODTicketOption)){ if (!option || !(option instanceof api.ODTicketOption)){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error-option-unknown").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-option-unknown").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user}))
return cancel() return cancel()
} }
//check ticket permissions //check ticket permissions
const res = await openticket.actions.get("openticket:create-ticket-permissions").run(source,{guild,user,option}) const res = await opendiscord.actions.get("openticket:create-ticket-permissions").run(source,{guild,user,option})
if (!res.valid){ if (!res.valid){
//error //error
if (res.reason == "blacklist") instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions-blacklisted").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user})) if (res.reason == "blacklist") instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions-blacklisted").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user}))
else if (res.reason == "cooldown") instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions-cooldown").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,until:res.cooldownUntil})) else if (res.reason == "cooldown") instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions-cooldown").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,until:res.cooldownUntil}))
else if (res.reason == "global-limit") instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions-limits").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,limit:"global"})) else if (res.reason == "global-limit") instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions-limits").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,limit:"global"}))
else if (res.reason == "global-user-limit") instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions-limits").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,limit:"global-user"})) else if (res.reason == "global-user-limit") instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions-limits").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,limit:"global-user"}))
else if (res.reason == "option-limit") instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions-limits").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,limit:"option"})) else if (res.reason == "option-limit") instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions-limits").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,limit:"option"}))
else if (res.reason == "option-user-limit") instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions-limits").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,limit:"option-user"})) else if (res.reason == "option-user-limit") instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions-limits").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,limit:"option-user"}))
else instance.reply(await openticket.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Unknown invalid_permission reason => calculation failed #1",layout:"advanced"})) else instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Unknown invalid_permission reason => calculation failed #1",layout:"advanced"}))
return cancel() return cancel()
} }
//start ticket creation //start ticket creation
if (option.exists("openticket:questions") && option.get("openticket:questions").value.length > 0){ if (option.exists("openticket:questions") && option.get("openticket:questions").value.length > 0){
//send modal //send modal
instance.modal(await openticket.builders.modals.getSafe("openticket:ticket-questions").build(source,{guild,channel,user,option})) instance.modal(await opendiscord.builders.modals.getSafe("openticket:ticket-questions").build(source,{guild,channel,user,option}))
}else{ }else{
//create ticket //create ticket
await instance.defer(true) await instance.defer(true)
const res = await openticket.actions.get("openticket:create-ticket").run(source,{guild,user,answers:[],option}) const res = await opendiscord.actions.get("openticket:create-ticket").run(source,{guild,user,answers:[],option})
if (!res.channel || !res.ticket){ if (!res.channel || !res.ticket){
//error //error
await instance.reply(await openticket.builders.messages.getSafe("openticket:error").build(source,{guild,channel:instance.channel,user,error:"Unable to receive ticket or channel from callback! #1",layout:"advanced"})) await instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build(source,{guild,channel:instance.channel,user,error:"Unable to receive ticket or channel from callback! #1",layout:"advanced"}))
return cancel() return cancel()
} }
await instance.reply(await openticket.builders.messages.getSafe("openticket:ticket-created").build(source,{guild,channel:res.channel,user,ticket:res.ticket})) await instance.reply(await opendiscord.builders.messages.getSafe("openticket:ticket-created").build(source,{guild,channel:res.channel,user,ticket:res.ticket}))
} }
}), }),
new api.ODWorker("openticket:logs",-1,(instance,params,source,cancel) => { new api.ODWorker("openticket:logs",-1,(instance,params,source,cancel) => {
openticket.log(instance.user.displayName+" used the 'ticket' command!","info",[ opendiscord.log(instance.user.displayName+" used the 'ticket' command!","info",[
{key:"user",value:instance.user.username}, {key:"user",value:instance.user.username},
{key:"userid",value:instance.user.id,hidden:true}, {key:"userid",value:instance.user.id,hidden:true},
{key:"channelid",value:instance.channel.id,hidden:true}, {key:"channelid",value:instance.channel.id,hidden:true},
@@ -103,53 +103,53 @@ export const registerCommandResponders = async () => {
export const registerButtonResponders = async () => { export const registerButtonResponders = async () => {
//TICKET OPTION BUTTON RESPONDER //TICKET OPTION BUTTON RESPONDER
openticket.responders.buttons.add(new api.ODButtonResponder("openticket:ticket-option",/^od:ticket-option_/)) opendiscord.responders.buttons.add(new api.ODButtonResponder("openticket:ticket-option",/^od:ticket-option_/))
openticket.responders.buttons.get("openticket:ticket-option").workers.add( opendiscord.responders.buttons.get("openticket:ticket-option").workers.add(
new api.ODWorker("openticket:ticket-option",0,async (instance,params,source,cancel) => { new api.ODWorker("openticket:ticket-option",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance const {guild,channel,user} = instance
if (!guild){ if (!guild){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build(source,{channel:instance.channel,user:instance.user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-not-in-guild").build(source,{channel:instance.channel,user:instance.user}))
return cancel() return cancel()
} }
//get option //get option
const optionId = instance.interaction.customId.split("_")[2] const optionId = instance.interaction.customId.split("_")[2]
const option = openticket.options.get(optionId) const option = opendiscord.options.get(optionId)
if (!option || !(option instanceof api.ODTicketOption)){ if (!option || !(option instanceof api.ODTicketOption)){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error-option-unknown").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-option-unknown").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user}))
return cancel() return cancel()
} }
//check ticket permissions //check ticket permissions
const res = await openticket.actions.get("openticket:create-ticket-permissions").run("panel-button",{guild,user,option}) const res = await opendiscord.actions.get("openticket:create-ticket-permissions").run("panel-button",{guild,user,option})
if (!res.valid){ if (!res.valid){
//error //error
if (res.reason == "blacklist") instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions-blacklisted").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user})) if (res.reason == "blacklist") instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions-blacklisted").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user}))
else if (res.reason == "cooldown") instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions-cooldown").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,until:res.cooldownUntil})) else if (res.reason == "cooldown") instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions-cooldown").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,until:res.cooldownUntil}))
else if (res.reason == "global-limit") instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions-limits").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,limit:"global"})) else if (res.reason == "global-limit") instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions-limits").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,limit:"global"}))
else if (res.reason == "global-user-limit") instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions-limits").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,limit:"global-user"})) else if (res.reason == "global-user-limit") instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions-limits").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,limit:"global-user"}))
else if (res.reason == "option-limit") instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions-limits").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,limit:"option"})) else if (res.reason == "option-limit") instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions-limits").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,limit:"option"}))
else if (res.reason == "option-user-limit") instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions-limits").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,limit:"option-user"})) else if (res.reason == "option-user-limit") instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions-limits").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,limit:"option-user"}))
else instance.reply(await openticket.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Unknown invalid_permission reason => calculation failed #1",layout:"advanced"})) else instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Unknown invalid_permission reason => calculation failed #1",layout:"advanced"}))
return cancel() return cancel()
} }
//start ticket creation //start ticket creation
if (option.exists("openticket:questions") && option.get("openticket:questions").value.length > 0){ if (option.exists("openticket:questions") && option.get("openticket:questions").value.length > 0){
//send modal //send modal
instance.modal(await openticket.builders.modals.getSafe("openticket:ticket-questions").build("panel-button",{guild,channel,user,option})) instance.modal(await opendiscord.builders.modals.getSafe("openticket:ticket-questions").build("panel-button",{guild,channel,user,option}))
}else{ }else{
//create ticket //create ticket
await instance.defer("reply",true) await instance.defer("reply",true)
const res = await openticket.actions.get("openticket:create-ticket").run("panel-button",{guild,user,answers:[],option}) const res = await opendiscord.actions.get("openticket:create-ticket").run("panel-button",{guild,user,answers:[],option})
if (!res.channel || !res.ticket){ if (!res.channel || !res.ticket){
//error //error
await instance.reply(await openticket.builders.messages.getSafe("openticket:error").build(source,{guild,channel:instance.channel,user,error:"Unable to receive ticket or channel from callback! #1",layout:"advanced"})) await instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build(source,{guild,channel:instance.channel,user,error:"Unable to receive ticket or channel from callback! #1",layout:"advanced"}))
return cancel() return cancel()
} }
if (generalConfig.data.system.replyOnTicketCreation) await instance.reply(await openticket.builders.messages.getSafe("openticket:ticket-created").build("panel-button",{guild,channel:res.channel,user,ticket:res.ticket})) if (generalConfig.data.system.replyOnTicketCreation) await instance.reply(await opendiscord.builders.messages.getSafe("openticket:ticket-created").build("panel-button",{guild,channel:res.channel,user,ticket:res.ticket}))
} }
}) })
) )
@@ -157,53 +157,53 @@ export const registerButtonResponders = async () => {
export const registerDropdownResponders = async () => { export const registerDropdownResponders = async () => {
//PANEL DROPDOWN TICKETS DROPDOWN RESPONDER //PANEL DROPDOWN TICKETS DROPDOWN RESPONDER
openticket.responders.dropdowns.add(new api.ODDropdownResponder("openticket:panel-dropdown-tickets",/^od:panel-dropdown_/)) opendiscord.responders.dropdowns.add(new api.ODDropdownResponder("openticket:panel-dropdown-tickets",/^od:panel-dropdown_/))
openticket.responders.dropdowns.get("openticket:panel-dropdown-tickets").workers.add( opendiscord.responders.dropdowns.get("openticket:panel-dropdown-tickets").workers.add(
new api.ODWorker("openticket:panel-dropdown-tickets",0,async (instance,params,source,cancel) => { new api.ODWorker("openticket:panel-dropdown-tickets",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance const {guild,channel,user} = instance
if (!guild){ if (!guild){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build(source,{channel:instance.channel,user:instance.user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-not-in-guild").build(source,{channel:instance.channel,user:instance.user}))
return cancel() return cancel()
} }
//get option //get option
const optionId = instance.values.getStringValues()[0].split("_")[2] const optionId = instance.values.getStringValues()[0].split("_")[2]
const option = openticket.options.get(optionId) const option = opendiscord.options.get(optionId)
if (!option || !(option instanceof api.ODTicketOption)){ if (!option || !(option instanceof api.ODTicketOption)){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error-option-unknown").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-option-unknown").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user}))
return cancel() return cancel()
} }
//check ticket permissions //check ticket permissions
const res = await openticket.actions.get("openticket:create-ticket-permissions").run("panel-dropdown",{guild,user,option}) const res = await opendiscord.actions.get("openticket:create-ticket-permissions").run("panel-dropdown",{guild,user,option})
if (!res.valid){ if (!res.valid){
//error //error
if (res.reason == "blacklist") instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions-blacklisted").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user})) if (res.reason == "blacklist") instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions-blacklisted").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user}))
else if (res.reason == "cooldown") instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions-cooldown").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,until:res.cooldownUntil})) else if (res.reason == "cooldown") instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions-cooldown").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,until:res.cooldownUntil}))
else if (res.reason == "global-limit") instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions-limits").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,limit:"global"})) else if (res.reason == "global-limit") instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions-limits").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,limit:"global"}))
else if (res.reason == "global-user-limit") instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions-limits").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,limit:"global-user"})) else if (res.reason == "global-user-limit") instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions-limits").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,limit:"global-user"}))
else if (res.reason == "option-limit") instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions-limits").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,limit:"option"})) else if (res.reason == "option-limit") instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions-limits").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,limit:"option"}))
else if (res.reason == "option-user-limit") instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions-limits").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,limit:"option-user"})) else if (res.reason == "option-user-limit") instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions-limits").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,limit:"option-user"}))
else instance.reply(await openticket.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Unknown invalid_permission reason => calculation failed #1",layout:"advanced"})) else instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Unknown invalid_permission reason => calculation failed #1",layout:"advanced"}))
return cancel() return cancel()
} }
//start ticket creation //start ticket creation
if (option.exists("openticket:questions") && option.get("openticket:questions").value.length > 0){ if (option.exists("openticket:questions") && option.get("openticket:questions").value.length > 0){
//send modal //send modal
instance.modal(await openticket.builders.modals.getSafe("openticket:ticket-questions").build("panel-dropdown",{guild,channel,user,option})) instance.modal(await opendiscord.builders.modals.getSafe("openticket:ticket-questions").build("panel-dropdown",{guild,channel,user,option}))
}else{ }else{
//create ticket //create ticket
await instance.defer("reply",true) await instance.defer("reply",true)
const res = await openticket.actions.get("openticket:create-ticket").run("panel-dropdown",{guild,user,answers:[],option}) const res = await opendiscord.actions.get("openticket:create-ticket").run("panel-dropdown",{guild,user,answers:[],option})
if (!res.channel || !res.ticket){ if (!res.channel || !res.ticket){
//error //error
await instance.reply(await openticket.builders.messages.getSafe("openticket:error").build(source,{guild,channel:instance.channel,user,error:"Unable to receive ticket or channel from callback! #1",layout:"advanced"})) await instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build(source,{guild,channel:instance.channel,user,error:"Unable to receive ticket or channel from callback! #1",layout:"advanced"}))
return cancel() return cancel()
} }
if (generalConfig.data.system.replyOnTicketCreation) await instance.reply(await openticket.builders.messages.getSafe("openticket:ticket-created").build("panel-dropdown",{guild,channel:res.channel,user,ticket:res.ticket})) if (generalConfig.data.system.replyOnTicketCreation) await instance.reply(await opendiscord.builders.messages.getSafe("openticket:ticket-created").build("panel-dropdown",{guild,channel:res.channel,user,ticket:res.ticket}))
} }
}) })
) )
@@ -211,14 +211,14 @@ export const registerDropdownResponders = async () => {
export const registerModalResponders = async () => { export const registerModalResponders = async () => {
//TICKET QUESTIONS RESPONDER //TICKET QUESTIONS RESPONDER
openticket.responders.modals.add(new api.ODModalResponder("openticket:ticket-questions",/^od:ticket-questions_/)) opendiscord.responders.modals.add(new api.ODModalResponder("openticket:ticket-questions",/^od:ticket-questions_/))
openticket.responders.modals.get("openticket:ticket-questions").workers.add([ opendiscord.responders.modals.get("openticket:ticket-questions").workers.add([
new api.ODWorker("openticket:ticket-questions",0,async (instance,params,source,cancel) => { new api.ODWorker("openticket:ticket-questions",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance const {guild,channel,user} = instance
if (!channel) throw new api.ODSystemError("The 'Ticket Questions' modal requires a channel for responding!") if (!channel) throw new api.ODSystemError("The 'Ticket Questions' modal requires a channel for responding!")
if (!guild){ if (!guild){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build(source,{channel,user:instance.user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-not-in-guild").build(source,{channel,user:instance.user}))
return cancel() return cancel()
} }
@@ -226,17 +226,17 @@ export const registerModalResponders = async () => {
//get option //get option
const optionId = instance.interaction.customId.split("_")[1] const optionId = instance.interaction.customId.split("_")[1]
const option = openticket.options.get(optionId) const option = opendiscord.options.get(optionId)
if (!option || !(option instanceof api.ODTicketOption)){ if (!option || !(option instanceof api.ODTicketOption)){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error-option-unknown").build(source,{guild:instance.guild,channel,user:instance.user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-option-unknown").build(source,{guild:instance.guild,channel,user:instance.user}))
return cancel() return cancel()
} }
//get answers //get answers
const answers: {id:string,name:string,type:"short"|"paragraph",value:string|null}[] = [] const answers: {id:string,name:string,type:"short"|"paragraph",value:string|null}[] = []
option.get("openticket:questions").value.forEach((id) => { option.get("openticket:questions").value.forEach((id) => {
const question = openticket.questions.get(id) const question = opendiscord.questions.get(id)
if (!question) return if (!question) return
if (question instanceof api.ODShortQuestion){ if (question instanceof api.ODShortQuestion){
answers.push({ answers.push({
@@ -257,13 +257,13 @@ export const registerModalResponders = async () => {
//create ticket //create ticket
await instance.defer("reply",true) await instance.defer("reply",true)
const res = await openticket.actions.get("openticket:create-ticket").run(originalSource,{guild,user,answers,option}) const res = await opendiscord.actions.get("openticket:create-ticket").run(originalSource,{guild,user,answers,option})
if (!res.channel || !res.ticket){ if (!res.channel || !res.ticket){
//error //error
await instance.reply(await openticket.builders.messages.getSafe("openticket:error").build(source,{guild,channel,user,error:"Unable to receive ticket or channel from callback! #2",layout:"advanced"})) await instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build(source,{guild,channel,user,error:"Unable to receive ticket or channel from callback! #2",layout:"advanced"}))
return cancel() return cancel()
} }
if (generalConfig.data.system.replyOnTicketCreation) await instance.reply(await openticket.builders.messages.getSafe("openticket:ticket-created").build(originalSource,{guild,channel:res.channel,user,ticket:res.ticket})) if (generalConfig.data.system.replyOnTicketCreation) await instance.reply(await opendiscord.builders.messages.getSafe("openticket:ticket-created").build(originalSource,{guild,channel:res.channel,user,ticket:res.ticket}))
}) })
]) ])
} }
+33 -33
View File
@@ -1,44 +1,44 @@
/////////////////////////////////////// ///////////////////////////////////////
//UNCLAIM COMMAND //UNCLAIM COMMAND
/////////////////////////////////////// ///////////////////////////////////////
import {openticket, api, utilities} from "../index" import {opendiscord, api, utilities} from "../index"
import * as discord from "discord.js" import * as discord from "discord.js"
const generalConfig = openticket.configs.get("openticket:general") const generalConfig = opendiscord.configs.get("openticket:general")
export const registerCommandResponders = async () => { export const registerCommandResponders = async () => {
//UNCLAIM COMMAND RESPONDER //UNCLAIM COMMAND RESPONDER
openticket.responders.commands.add(new api.ODCommandResponder("openticket:unclaim",generalConfig.data.prefix,"unclaim")) opendiscord.responders.commands.add(new api.ODCommandResponder("openticket:unclaim",generalConfig.data.prefix,"unclaim"))
openticket.responders.commands.get("openticket:unclaim").workers.add([ opendiscord.responders.commands.get("openticket:unclaim").workers.add([
new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => { new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => {
const permissionMode = generalConfig.data.system.permissions.unclaim const permissionMode = generalConfig.data.system.permissions.unclaim
if (permissionMode == "none"){ if (permissionMode == "none"){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel() return cancel()
}else if (permissionMode == "everyone") return }else if (permissionMode == "everyone") return
else if (permissionMode == "admin"){ else if (permissionMode == "admin"){
if (!openticket.permissions.hasPermissions("support",await openticket.permissions.getPermissions(instance.user,instance.channel,instance.guild))){ if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
return cancel() return cancel()
}else return }else return
}else{ }else{
if (!instance.guild || !instance.member){ if (!instance.guild || !instance.member){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
return cancel() return cancel()
} }
const role = await openticket.client.fetchGuildRole(instance.guild,permissionMode) const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
if (!role){ if (!role){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
return cancel() return cancel()
} }
if (!role.members.has(instance.member.id)){ if (!role.members.has(instance.member.id)){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel() return cancel()
}else return }else return
} }
@@ -46,22 +46,22 @@ export const registerCommandResponders = async () => {
new api.ODWorker("openticket:unclaim",0,async (instance,params,source,cancel) => { new api.ODWorker("openticket:unclaim",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance const {guild,channel,user} = instance
if (!guild){ if (!guild){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
return cancel() return cancel()
} }
const ticket = openticket.tickets.get(channel.id) const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){ if (!ticket || channel.isDMBased()){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
//return when not claimed //return when not claimed
if (!ticket.get("openticket:claimed").value){ if (!ticket.get("openticket:claimed").value){
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild,channel,user,error:openticket.languages.getTranslation("errors.actionInvalid.unclaim"),layout:"simple"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build("button",{guild,channel,user,error:opendiscord.languages.getTranslation("errors.actionInvalid.unclaim"),layout:"simple"}))
return cancel() return cancel()
} }
//return when busy //return when busy
if (ticket.get("openticket:busy").value){ if (ticket.get("openticket:busy").value){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
@@ -69,11 +69,11 @@ export const registerCommandResponders = async () => {
//start unclaiming ticket //start unclaiming ticket
await instance.defer(false) await instance.defer(false)
await openticket.actions.get("openticket:unclaim-ticket").run(source,{guild,channel,user,ticket,reason,sendMessage:false}) await opendiscord.actions.get("openticket:unclaim-ticket").run(source,{guild,channel,user,ticket,reason,sendMessage:false})
await instance.reply(await openticket.builders.messages.getSafe("openticket:unclaim-message").build(source,{guild,channel,user,ticket,reason})) await instance.reply(await opendiscord.builders.messages.getSafe("openticket:unclaim-message").build(source,{guild,channel,user,ticket,reason}))
}), }),
new api.ODWorker("openticket:logs",-1,(instance,params,source,cancel) => { new api.ODWorker("openticket:logs",-1,(instance,params,source,cancel) => {
openticket.log(instance.user.displayName+" used the 'unclaim' command!","info",[ opendiscord.log(instance.user.displayName+" used the 'unclaim' command!","info",[
{key:"user",value:instance.user.username}, {key:"user",value:instance.user.username},
{key:"userid",value:instance.user.id,hidden:true}, {key:"userid",value:instance.user.id,hidden:true},
{key:"channelid",value:instance.channel.id,hidden:true}, {key:"channelid",value:instance.channel.id,hidden:true},
@@ -85,33 +85,33 @@ export const registerCommandResponders = async () => {
export const registerButtonResponders = async () => { export const registerButtonResponders = async () => {
//UNCLAIM TICKET BUTTON RESPONDER //UNCLAIM TICKET BUTTON RESPONDER
openticket.responders.buttons.add(new api.ODButtonResponder("openticket:unclaim-ticket",/^od:unclaim-ticket/)) opendiscord.responders.buttons.add(new api.ODButtonResponder("openticket:unclaim-ticket",/^od:unclaim-ticket/))
openticket.responders.buttons.get("openticket:unclaim-ticket").workers.add( opendiscord.responders.buttons.get("openticket:unclaim-ticket").workers.add(
new api.ODWorker("openticket:unclaim-ticket",0,async (instance,params,source,cancel) => { new api.ODWorker("openticket:unclaim-ticket",0,async (instance,params,source,cancel) => {
const originalSource = instance.interaction.customId.split("_")[1] const originalSource = instance.interaction.customId.split("_")[1]
if (originalSource != "ticket-message" && originalSource != "claim-message") return if (originalSource != "ticket-message" && originalSource != "claim-message") return
if (originalSource == "ticket-message") await openticket.verifybars.get("openticket:unclaim-ticket-ticket-message").activate(instance) if (originalSource == "ticket-message") await opendiscord.verifybars.get("openticket:unclaim-ticket-ticket-message").activate(instance)
else await openticket.verifybars.get("openticket:unclaim-ticket-claim-message").activate(instance) else await opendiscord.verifybars.get("openticket:unclaim-ticket-claim-message").activate(instance)
}) })
) )
} }
export const registerModalResponders = async () => { export const registerModalResponders = async () => {
//UNCLAIM WITH REASON MODAL RESPONDER //UNCLAIM WITH REASON MODAL RESPONDER
openticket.responders.modals.add(new api.ODModalResponder("openticket:unclaim-ticket-reason",/^od:unclaim-ticket-reason_/)) opendiscord.responders.modals.add(new api.ODModalResponder("openticket:unclaim-ticket-reason",/^od:unclaim-ticket-reason_/))
openticket.responders.modals.get("openticket:unclaim-ticket-reason").workers.add([ opendiscord.responders.modals.get("openticket:unclaim-ticket-reason").workers.add([
new api.ODWorker("openticket:unclaim-ticket-reason",0,async (instance,params,source,cancel) => { new api.ODWorker("openticket:unclaim-ticket-reason",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance const {guild,channel,user} = instance
if (!channel) return if (!channel) return
if (!guild){ if (!guild){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build(source,{channel,user:instance.user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-not-in-guild").build(source,{channel,user:instance.user}))
return cancel() return cancel()
} }
const ticket = openticket.tickets.get(instance.interaction.customId.split("_")[1]) const ticket = opendiscord.tickets.get(instance.interaction.customId.split("_")[1])
if (!ticket || channel.isDMBased()){ if (!ticket || channel.isDMBased()){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
return return
} }
@@ -121,15 +121,15 @@ export const registerModalResponders = async () => {
//unclaim with reason //unclaim with reason
if (originalSource == "ticket-message"){ if (originalSource == "ticket-message"){
await instance.defer("update",false) await instance.defer("update",false)
await openticket.actions.get("openticket:unclaim-ticket").run(originalSource,{guild,channel,user,ticket,reason,sendMessage:true}) await opendiscord.actions.get("openticket:unclaim-ticket").run(originalSource,{guild,channel,user,ticket,reason,sendMessage:true})
await instance.update(await openticket.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket})) await instance.update(await opendiscord.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket}))
}else if (originalSource == "claim-message"){ }else if (originalSource == "claim-message"){
await instance.defer("update",false) await instance.defer("update",false)
await openticket.actions.get("openticket:unclaim-ticket").run(originalSource,{guild,channel,user,ticket,reason,sendMessage:false}) await opendiscord.actions.get("openticket:unclaim-ticket").run(originalSource,{guild,channel,user,ticket,reason,sendMessage:false})
await instance.update(await openticket.builders.messages.getSafe("openticket:unclaim-message").build("other",{guild,channel,user,ticket,reason})) await instance.update(await opendiscord.builders.messages.getSafe("openticket:unclaim-message").build("other",{guild,channel,user,ticket,reason}))
}else if (originalSource == "other"){ }else if (originalSource == "other"){
await instance.defer("update",false) await instance.defer("update",false)
await openticket.actions.get("openticket:unclaim-ticket").run(originalSource,{guild,channel,user,ticket,reason,sendMessage:true}) await opendiscord.actions.get("openticket:unclaim-ticket").run(originalSource,{guild,channel,user,ticket,reason,sendMessage:true})
} }
}) })
]) ])
+33 -33
View File
@@ -1,44 +1,44 @@
/////////////////////////////////////// ///////////////////////////////////////
//UNPIN COMMAND //UNPIN COMMAND
/////////////////////////////////////// ///////////////////////////////////////
import {openticket, api, utilities} from "../index" import {opendiscord, api, utilities} from "../index"
import * as discord from "discord.js" import * as discord from "discord.js"
const generalConfig = openticket.configs.get("openticket:general") const generalConfig = opendiscord.configs.get("openticket:general")
export const registerCommandResponders = async () => { export const registerCommandResponders = async () => {
//UNPIN COMMAND RESPONDER //UNPIN COMMAND RESPONDER
openticket.responders.commands.add(new api.ODCommandResponder("openticket:unpin",generalConfig.data.prefix,"unpin")) opendiscord.responders.commands.add(new api.ODCommandResponder("openticket:unpin",generalConfig.data.prefix,"unpin"))
openticket.responders.commands.get("openticket:unpin").workers.add([ opendiscord.responders.commands.get("openticket:unpin").workers.add([
new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => { new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => {
const permissionMode = generalConfig.data.system.permissions.unpin const permissionMode = generalConfig.data.system.permissions.unpin
if (permissionMode == "none"){ if (permissionMode == "none"){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel() return cancel()
}else if (permissionMode == "everyone") return }else if (permissionMode == "everyone") return
else if (permissionMode == "admin"){ else if (permissionMode == "admin"){
if (!openticket.permissions.hasPermissions("support",await openticket.permissions.getPermissions(instance.user,instance.channel,instance.guild))){ if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
return cancel() return cancel()
}else return }else return
}else{ }else{
if (!instance.guild || !instance.member){ if (!instance.guild || !instance.member){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
return cancel() return cancel()
} }
const role = await openticket.client.fetchGuildRole(instance.guild,permissionMode) const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
if (!role){ if (!role){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
return cancel() return cancel()
} }
if (!role.members.has(instance.member.id)){ if (!role.members.has(instance.member.id)){
//no permissions //no permissions
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel() return cancel()
}else return }else return
} }
@@ -46,22 +46,22 @@ export const registerCommandResponders = async () => {
new api.ODWorker("openticket:unpin",0,async (instance,params,source,cancel) => { new api.ODWorker("openticket:unpin",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance const {guild,channel,user} = instance
if (!guild){ if (!guild){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
return cancel() return cancel()
} }
const ticket = openticket.tickets.get(channel.id) const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){ if (!ticket || channel.isDMBased()){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
//return when not pinned yet //return when not pinned yet
if (!ticket.get("openticket:pinned").value){ if (!ticket.get("openticket:pinned").value){
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild,channel,user,error:openticket.languages.getTranslation("errors.actionInvalid.unpin"),layout:"simple"})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error").build("button",{guild,channel,user,error:opendiscord.languages.getTranslation("errors.actionInvalid.unpin"),layout:"simple"}))
return cancel() return cancel()
} }
//return when busy //return when busy
if (ticket.get("openticket:busy").value){ if (ticket.get("openticket:busy").value){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user}))
return cancel() return cancel()
} }
@@ -69,11 +69,11 @@ export const registerCommandResponders = async () => {
//start unpinning ticket //start unpinning ticket
await instance.defer(false) await instance.defer(false)
await openticket.actions.get("openticket:unpin-ticket").run(source,{guild,channel,user,ticket,reason,sendMessage:false}) await opendiscord.actions.get("openticket:unpin-ticket").run(source,{guild,channel,user,ticket,reason,sendMessage:false})
await instance.reply(await openticket.builders.messages.getSafe("openticket:unpin-message").build(source,{guild,channel,user,ticket,reason})) await instance.reply(await opendiscord.builders.messages.getSafe("openticket:unpin-message").build(source,{guild,channel,user,ticket,reason}))
}), }),
new api.ODWorker("openticket:logs",-1,(instance,params,source,cancel) => { new api.ODWorker("openticket:logs",-1,(instance,params,source,cancel) => {
openticket.log(instance.user.displayName+" used the 'unpin' command!","info",[ opendiscord.log(instance.user.displayName+" used the 'unpin' command!","info",[
{key:"user",value:instance.user.username}, {key:"user",value:instance.user.username},
{key:"userid",value:instance.user.id,hidden:true}, {key:"userid",value:instance.user.id,hidden:true},
{key:"channelid",value:instance.channel.id,hidden:true}, {key:"channelid",value:instance.channel.id,hidden:true},
@@ -85,33 +85,33 @@ export const registerCommandResponders = async () => {
export const registerButtonResponders = async () => { export const registerButtonResponders = async () => {
//UNPIN TICKET BUTTON RESPONDER //UNPIN TICKET BUTTON RESPONDER
openticket.responders.buttons.add(new api.ODButtonResponder("openticket:unpin-ticket",/^od:unpin-ticket/)) opendiscord.responders.buttons.add(new api.ODButtonResponder("openticket:unpin-ticket",/^od:unpin-ticket/))
openticket.responders.buttons.get("openticket:unpin-ticket").workers.add( opendiscord.responders.buttons.get("openticket:unpin-ticket").workers.add(
new api.ODWorker("openticket:unpin-ticket",0,async (instance,params,source,cancel) => { new api.ODWorker("openticket:unpin-ticket",0,async (instance,params,source,cancel) => {
const originalSource = instance.interaction.customId.split("_")[1] const originalSource = instance.interaction.customId.split("_")[1]
if (originalSource != "ticket-message" && originalSource != "pin-message") return if (originalSource != "ticket-message" && originalSource != "pin-message") return
if (originalSource == "ticket-message") await openticket.verifybars.get("openticket:unpin-ticket-ticket-message").activate(instance) if (originalSource == "ticket-message") await opendiscord.verifybars.get("openticket:unpin-ticket-ticket-message").activate(instance)
else await openticket.verifybars.get("openticket:unpin-ticket-pin-message").activate(instance) else await opendiscord.verifybars.get("openticket:unpin-ticket-pin-message").activate(instance)
}) })
) )
} }
export const registerModalResponders = async () => { export const registerModalResponders = async () => {
//UNPIN WITH REASON MODAL RESPONDER //UNPIN WITH REASON MODAL RESPONDER
openticket.responders.modals.add(new api.ODModalResponder("openticket:unpin-ticket-reason",/^od:unpin-ticket-reason_/)) opendiscord.responders.modals.add(new api.ODModalResponder("openticket:unpin-ticket-reason",/^od:unpin-ticket-reason_/))
openticket.responders.modals.get("openticket:unpin-ticket-reason").workers.add([ opendiscord.responders.modals.get("openticket:unpin-ticket-reason").workers.add([
new api.ODWorker("openticket:unpin-ticket-reason",0,async (instance,params,source,cancel) => { new api.ODWorker("openticket:unpin-ticket-reason",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance const {guild,channel,user} = instance
if (!channel) return if (!channel) return
if (!guild){ if (!guild){
//error //error
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build(source,{channel,user:instance.user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-not-in-guild").build(source,{channel,user:instance.user}))
return cancel() return cancel()
} }
const ticket = openticket.tickets.get(instance.interaction.customId.split("_")[1]) const ticket = opendiscord.tickets.get(instance.interaction.customId.split("_")[1])
if (!ticket || channel.isDMBased()){ if (!ticket || channel.isDMBased()){
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
return return
} }
@@ -121,15 +121,15 @@ export const registerModalResponders = async () => {
//unpin with reason //unpin with reason
if (originalSource == "ticket-message"){ if (originalSource == "ticket-message"){
await instance.defer("update",false) await instance.defer("update",false)
await openticket.actions.get("openticket:unpin-ticket").run(originalSource,{guild,channel,user,ticket,reason,sendMessage:true}) await opendiscord.actions.get("openticket:unpin-ticket").run(originalSource,{guild,channel,user,ticket,reason,sendMessage:true})
await instance.update(await openticket.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket})) await instance.update(await opendiscord.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket}))
}else if (originalSource == "pin-message"){ }else if (originalSource == "pin-message"){
await instance.defer("update",false) await instance.defer("update",false)
await openticket.actions.get("openticket:unpin-ticket").run(originalSource,{guild,channel,user,ticket,reason,sendMessage:false}) await opendiscord.actions.get("openticket:unpin-ticket").run(originalSource,{guild,channel,user,ticket,reason,sendMessage:false})
await instance.update(await openticket.builders.messages.getSafe("openticket:unpin-message").build("other",{guild,channel,user,ticket,reason})) await instance.update(await opendiscord.builders.messages.getSafe("openticket:unpin-message").build("other",{guild,channel,user,ticket,reason}))
}else if (originalSource == "other"){ }else if (originalSource == "other"){
await instance.defer("update",false) await instance.defer("update",false)
await openticket.actions.get("openticket:unpin-ticket").run(originalSource,{guild,channel,user,ticket,reason,sendMessage:true}) await opendiscord.actions.get("openticket:unpin-ticket").run(originalSource,{guild,channel,user,ticket,reason,sendMessage:true})
} }
}) })
]) ])
+1 -1
View File
@@ -118,7 +118,7 @@ export interface ODActionManagerIds_Default {
* This is a special class that adds type definitions & typescript to the ODActionManager class. * This is a special class that adds type definitions & typescript to the ODActionManager class.
* It doesn't add any extra features! * It doesn't add any extra features!
* *
* This default class is made for the global variable `openticket.actions`! * This default class is made for the global variable `opendiscord.actions`!
*/ */
export class ODActionManager_Default extends ODActionManager { export class ODActionManager_Default extends ODActionManager {
get<ActionId extends keyof ODActionManagerIds_Default>(id:ActionId): ODAction_Default<ODActionManagerIds_Default[ActionId]["source"],ODActionManagerIds_Default[ActionId]["params"],ODActionManagerIds_Default[ActionId]["result"],ODActionManagerIds_Default[ActionId]["workers"]> get<ActionId extends keyof ODActionManagerIds_Default>(id:ActionId): ODAction_Default<ODActionManagerIds_Default[ActionId]["source"],ODActionManagerIds_Default[ActionId]["params"],ODActionManagerIds_Default[ActionId]["result"],ODActionManagerIds_Default[ActionId]["workers"]>
+1 -1
View File
@@ -19,7 +19,7 @@ export interface ODVersionManagerIds_Default {
* This is a special class that adds type definitions & typescript to the ODFlagManager class. * This is a special class that adds type definitions & typescript to the ODFlagManager class.
* It doesn't add any extra features! * It doesn't add any extra features!
* *
* This default class is made for the global variable `openticket.flags`! * This default class is made for the global variable `opendiscord.flags`!
*/ */
export class ODVersionManager_Default extends ODVersionManager { export class ODVersionManager_Default extends ODVersionManager {
get<VersionId extends keyof ODVersionManagerIds_Default>(id:VersionId): ODVersionManagerIds_Default[VersionId] get<VersionId extends keyof ODVersionManagerIds_Default>(id:VersionId): ODVersionManagerIds_Default[VersionId]
+7 -7
View File
@@ -18,7 +18,7 @@ import { ODRole, ODRoleUpdateResult } from "../openticket/role"
* This is a special class that adds type definitions & typescript to the ODBuilderManager class. * This is a special class that adds type definitions & typescript to the ODBuilderManager class.
* It doesn't add any extra features! * It doesn't add any extra features!
* *
* This default class is made for the global variable `openticket.builders`! * This default class is made for the global variable `opendiscord.builders`!
*/ */
export class ODBuilderManager_Default extends ODBuilderManager { export class ODBuilderManager_Default extends ODBuilderManager {
declare buttons: ODButtonManager_Default declare buttons: ODButtonManager_Default
@@ -69,7 +69,7 @@ export interface ODButtonManagerIds_Default {
* This is a special class that adds type definitions & typescript to the ODButtonManager class. * This is a special class that adds type definitions & typescript to the ODButtonManager class.
* It doesn't add any extra features! * It doesn't add any extra features!
* *
* This default class is made for the global variable `openticket.builders.buttons`! * This default class is made for the global variable `opendiscord.builders.buttons`!
*/ */
export class ODButtonManager_Default extends ODButtonManager { export class ODButtonManager_Default extends ODButtonManager {
get<ButtonId extends keyof ODButtonManagerIds_Default>(id:ButtonId): ODButton_Default<ODButtonManagerIds_Default[ButtonId]["source"],ODButtonManagerIds_Default[ButtonId]["params"],ODButtonManagerIds_Default[ButtonId]["workers"]> get<ButtonId extends keyof ODButtonManagerIds_Default>(id:ButtonId): ODButton_Default<ODButtonManagerIds_Default[ButtonId]["source"],ODButtonManagerIds_Default[ButtonId]["params"],ODButtonManagerIds_Default[ButtonId]["workers"]>
@@ -123,7 +123,7 @@ export interface ODDropdownManagerIds_Default {
* This is a special class that adds type definitions & typescript to the ODDropdownManager class. * This is a special class that adds type definitions & typescript to the ODDropdownManager class.
* It doesn't add any extra features! * It doesn't add any extra features!
* *
* This default class is made for the global variable `openticket.builders.dropdowns`! * This default class is made for the global variable `opendiscord.builders.dropdowns`!
*/ */
export class ODDropdownManager_Default extends ODDropdownManager { export class ODDropdownManager_Default extends ODDropdownManager {
get<DropdownId extends keyof ODDropdownManagerIds_Default>(id:DropdownId): ODDropdown_Default<ODDropdownManagerIds_Default[DropdownId]["source"],ODDropdownManagerIds_Default[DropdownId]["params"],ODDropdownManagerIds_Default[DropdownId]["workers"]> get<DropdownId extends keyof ODDropdownManagerIds_Default>(id:DropdownId): ODDropdown_Default<ODDropdownManagerIds_Default[DropdownId]["source"],ODDropdownManagerIds_Default[DropdownId]["params"],ODDropdownManagerIds_Default[DropdownId]["workers"]>
@@ -177,7 +177,7 @@ export interface ODFileManagerIds_Default {
* This is a special class that adds type definitions & typescript to the ODFileManager class. * This is a special class that adds type definitions & typescript to the ODFileManager class.
* It doesn't add any extra features! * It doesn't add any extra features!
* *
* This default class is made for the global variable `openticket.builders.files`! * This default class is made for the global variable `opendiscord.builders.files`!
*/ */
export class ODFileManager_Default extends ODFileManager { export class ODFileManager_Default extends ODFileManager {
get<FileId extends keyof ODFileManagerIds_Default>(id:FileId): ODFile_Default<ODFileManagerIds_Default[FileId]["source"],ODFileManagerIds_Default[FileId]["params"],ODFileManagerIds_Default[FileId]["workers"]> get<FileId extends keyof ODFileManagerIds_Default>(id:FileId): ODFile_Default<ODFileManagerIds_Default[FileId]["source"],ODFileManagerIds_Default[FileId]["params"],ODFileManagerIds_Default[FileId]["workers"]>
@@ -297,7 +297,7 @@ export interface ODEmbedManagerIds_Default {
* This is a special class that adds type definitions & typescript to the ODEmbedManager class. * This is a special class that adds type definitions & typescript to the ODEmbedManager class.
* It doesn't add any extra features! * It doesn't add any extra features!
* *
* This default class is made for the global variable `openticket.builders.embeds`! * This default class is made for the global variable `opendiscord.builders.embeds`!
*/ */
export class ODEmbedManager_Default extends ODEmbedManager { export class ODEmbedManager_Default extends ODEmbedManager {
get<EmbedId extends keyof ODEmbedManagerIds_Default>(id:EmbedId): ODEmbed_Default<ODEmbedManagerIds_Default[EmbedId]["source"],ODEmbedManagerIds_Default[EmbedId]["params"],ODEmbedManagerIds_Default[EmbedId]["workers"]> get<EmbedId extends keyof ODEmbedManagerIds_Default>(id:EmbedId): ODEmbed_Default<ODEmbedManagerIds_Default[EmbedId]["source"],ODEmbedManagerIds_Default[EmbedId]["params"],ODEmbedManagerIds_Default[EmbedId]["workers"]>
@@ -428,7 +428,7 @@ export interface ODMessageManagerIds_Default {
* This is a special class that adds type definitions & typescript to the ODMessageManager class. * This is a special class that adds type definitions & typescript to the ODMessageManager class.
* It doesn't add any extra features! * It doesn't add any extra features!
* *
* This default class is made for the global variable `openticket.builders.messages`! * This default class is made for the global variable `opendiscord.builders.messages`!
*/ */
export class ODMessageManager_Default extends ODMessageManager { export class ODMessageManager_Default extends ODMessageManager {
get<MessageId extends keyof ODMessageManagerIds_Default>(id:MessageId): ODMessage_Default<ODMessageManagerIds_Default[MessageId]["source"],ODMessageManagerIds_Default[MessageId]["params"],ODMessageManagerIds_Default[MessageId]["workers"]> get<MessageId extends keyof ODMessageManagerIds_Default>(id:MessageId): ODMessage_Default<ODMessageManagerIds_Default[MessageId]["source"],ODMessageManagerIds_Default[MessageId]["params"],ODMessageManagerIds_Default[MessageId]["workers"]>
@@ -489,7 +489,7 @@ export interface ODModalManagerIds_Default {
* This is a special class that adds type definitions & typescript to the ODModalManager class. * This is a special class that adds type definitions & typescript to the ODModalManager class.
* It doesn't add any extra features! * It doesn't add any extra features!
* *
* This default class is made for the global variable `openticket.builders.modals`! * This default class is made for the global variable `opendiscord.builders.modals`!
*/ */
export class ODModalManager_Default extends ODModalManager { export class ODModalManager_Default extends ODModalManager {
get<ModalId extends keyof ODModalManagerIds_Default>(id:ModalId): ODModal_Default<ODModalManagerIds_Default[ModalId]["source"],ODModalManagerIds_Default[ModalId]["params"],ODModalManagerIds_Default[ModalId]["workers"]> get<ModalId extends keyof ODModalManagerIds_Default>(id:ModalId): ODModal_Default<ODModalManagerIds_Default[ModalId]["source"],ODModalManagerIds_Default[ModalId]["params"],ODModalManagerIds_Default[ModalId]["workers"]>
+4 -4
View File
@@ -22,7 +22,7 @@ export interface ODCheckerManagerIds_Default {
* This is a special class that adds type definitions & typescript to the ODCheckerManager class. * This is a special class that adds type definitions & typescript to the ODCheckerManager class.
* It doesn't add any extra features! * It doesn't add any extra features!
* *
* This default class is made for the global variable `openticket.checkers`! * This default class is made for the global variable `opendiscord.checkers`!
*/ */
export class ODCheckerManager_Default extends ODCheckerManager { export class ODCheckerManager_Default extends ODCheckerManager {
declare translation: ODCheckerTranslationRegister_Default declare translation: ODCheckerTranslationRegister_Default
@@ -55,7 +55,7 @@ export class ODCheckerManager_Default extends ODCheckerManager {
* This is a special class that adds type definitions & features to the ODCheckerRenderer class. * This is a special class that adds type definitions & features to the ODCheckerRenderer class.
* It contains the code that renders the default config checker. * It contains the code that renders the default config checker.
* *
* This default class is made for the global variable `openticket.checkers.renderer`! * This default class is made for the global variable `opendiscord.checkers.renderer`!
*/ */
export class ODCheckerRenderer_Default extends ODCheckerRenderer { export class ODCheckerRenderer_Default extends ODCheckerRenderer {
extraHeaderText: string[] = [] extraHeaderText: string[] = []
@@ -306,7 +306,7 @@ export type ODCheckerTranslationRegisterMessageIds_Default = (
* This is a special class that adds type definitions & typescript to the ODCheckerTranslationRegister class. * This is a special class that adds type definitions & typescript to the ODCheckerTranslationRegister class.
* It doesn't add any extra features! * It doesn't add any extra features!
* *
* This default class is made for the global variable `openticket.checkers.translation`! * This default class is made for the global variable `opendiscord.checkers.translation`!
*/ */
export class ODCheckerTranslationRegister_Default extends ODCheckerTranslationRegister { export class ODCheckerTranslationRegister_Default extends ODCheckerTranslationRegister {
get(type:"other", id:ODCheckerTranslationRegisterOtherIds_Default): string get(type:"other", id:ODCheckerTranslationRegisterOtherIds_Default): string
@@ -355,7 +355,7 @@ export interface ODCheckerFunctionManagerIds_Default {
* This is a special class that adds type definitions & typescript to the ODCheckerFunctionManager class. * This is a special class that adds type definitions & typescript to the ODCheckerFunctionManager class.
* It doesn't add any extra features! * It doesn't add any extra features!
* *
* This default class is made for the global variable `openticket.checkers.functions`! * This default class is made for the global variable `opendiscord.checkers.functions`!
*/ */
export class ODCheckerFunctionManager_Default extends ODCheckerFunctionManager { export class ODCheckerFunctionManager_Default extends ODCheckerFunctionManager {
get<CheckerFunctionId extends keyof ODCheckerFunctionManagerIds_Default>(id:CheckerFunctionId): ODCheckerFunctionManagerIds_Default[CheckerFunctionId] get<CheckerFunctionId extends keyof ODCheckerFunctionManagerIds_Default>(id:CheckerFunctionId): ODCheckerFunctionManagerIds_Default[CheckerFunctionId]
+3 -3
View File
@@ -8,7 +8,7 @@ import { ODClientManager, ODSlashCommand, ODTextCommand, ODSlashCommandManager,
* This is a special class that adds type definitions & typescript to the ODClientManager class. * This is a special class that adds type definitions & typescript to the ODClientManager class.
* It doesn't add any extra features! * It doesn't add any extra features!
* *
* This default class is made for the global variable `openticket.client`! * This default class is made for the global variable `opendiscord.client`!
*/ */
export class ODClientManager_Default extends ODClientManager { export class ODClientManager_Default extends ODClientManager {
declare slashCommands: ODSlashCommandManager_Default declare slashCommands: ODSlashCommandManager_Default
@@ -45,7 +45,7 @@ export interface ODSlashCommandManagerIds_Default {
* This is a special class that adds type definitions & typescript to the ODSlashCommandManager class. * This is a special class that adds type definitions & typescript to the ODSlashCommandManager class.
* It doesn't add any extra features! * It doesn't add any extra features!
* *
* This default class is made for the global variable `openticket.client.slashCommands`! * This default class is made for the global variable `opendiscord.client.slashCommands`!
*/ */
export class ODSlashCommandManager_Default extends ODSlashCommandManager { export class ODSlashCommandManager_Default extends ODSlashCommandManager {
get<SlashCommandId extends keyof ODSlashCommandManagerIds_Default>(id:SlashCommandId): ODSlashCommandManagerIds_Default[SlashCommandId] get<SlashCommandId extends keyof ODSlashCommandManagerIds_Default>(id:SlashCommandId): ODSlashCommandManagerIds_Default[SlashCommandId]
@@ -115,7 +115,7 @@ export interface ODTextCommandManagerIds_Default {
* This is a special class that adds type definitions & typescript to the ODTextCommandManager class. * This is a special class that adds type definitions & typescript to the ODTextCommandManager class.
* It doesn't add any extra features! * It doesn't add any extra features!
* *
* This default class is made for the global variable `openticket.client.textCommands`! * This default class is made for the global variable `opendiscord.client.textCommands`!
*/ */
export class ODTextCommandManager_Default extends ODTextCommandManager { export class ODTextCommandManager_Default extends ODTextCommandManager {
get<TextCommandId extends keyof ODTextCommandManagerIds_Default>(id:TextCommandId): ODTextCommandManagerIds_Default[TextCommandId] get<TextCommandId extends keyof ODTextCommandManagerIds_Default>(id:TextCommandId): ODTextCommandManagerIds_Default[TextCommandId]
+1 -1
View File
@@ -31,7 +31,7 @@ export interface ODCodeManagerIds_Default {
* This is a special class that adds type definitions & typescript to the ODCodeManager class. * This is a special class that adds type definitions & typescript to the ODCodeManager class.
* It doesn't add any extra features! * It doesn't add any extra features!
* *
* This default class is made for the global variable `openticket.code`! * This default class is made for the global variable `opendiscord.code`!
*/ */
export class ODCodeManager_Default extends ODCodeManager { export class ODCodeManager_Default extends ODCodeManager {
get<CodeId extends keyof ODCodeManagerIds_Default>(id:CodeId): ODCodeManagerIds_Default[CodeId] get<CodeId extends keyof ODCodeManagerIds_Default>(id:CodeId): ODCodeManagerIds_Default[CodeId]
+1 -1
View File
@@ -23,7 +23,7 @@ export interface ODConfigManagerIds_Default {
* This is a special class that adds type definitions & typescript to the ODConfigManager class. * This is a special class that adds type definitions & typescript to the ODConfigManager class.
* It doesn't add any extra features! * It doesn't add any extra features!
* *
* This default class is made for the global variable `openticket.configs`! * This default class is made for the global variable `opendiscord.configs`!
*/ */
export class ODConfigManager_Default extends ODConfigManager { export class ODConfigManager_Default extends ODConfigManager {
get<ConfigId extends keyof ODConfigManagerIds_Default>(id:ConfigId): ODConfigManagerIds_Default[ConfigId] get<ConfigId extends keyof ODConfigManagerIds_Default>(id:ConfigId): ODConfigManagerIds_Default[ConfigId]
+1 -1
View File
@@ -16,7 +16,7 @@ export interface ODLiveStatusManagerIds_Default {
* This is a special class that adds type definitions & typescript to the ODLiveStatusManager class. * This is a special class that adds type definitions & typescript to the ODLiveStatusManager class.
* It doesn't add any extra features! * It doesn't add any extra features!
* *
* This default class is made for the global variable `openticket.livestatus`! * This default class is made for the global variable `opendiscord.livestatus`!
*/ */
export class ODLiveStatusManager_Default extends ODLiveStatusManager { export class ODLiveStatusManager_Default extends ODLiveStatusManager {
get<LiveStatusId extends keyof ODLiveStatusManagerIds_Default>(id:LiveStatusId): ODLiveStatusManagerIds_Default[LiveStatusId] get<LiveStatusId extends keyof ODLiveStatusManagerIds_Default>(id:LiveStatusId): ODLiveStatusManagerIds_Default[LiveStatusId]
+1 -1
View File
@@ -16,7 +16,7 @@ export interface ODCooldownManagerIds_Default {
* This is a special class that adds type definitions & typescript to the ODCooldownManager class. * This is a special class that adds type definitions & typescript to the ODCooldownManager class.
* It doesn't add any extra features! * It doesn't add any extra features!
* *
* This default class is made for the global variable `openticket.cooldowns`! * This default class is made for the global variable `opendiscord.cooldowns`!
*/ */
export class ODCooldownManager_Default extends ODCooldownManager { export class ODCooldownManager_Default extends ODCooldownManager {
get<CooldownId extends keyof ODCooldownManagerIds_Default>(id:CooldownId): ODCooldownManagerIds_Default[CooldownId] get<CooldownId extends keyof ODCooldownManagerIds_Default>(id:CooldownId): ODCooldownManagerIds_Default[CooldownId]
+1 -1
View File
@@ -22,7 +22,7 @@ export interface ODDatabaseManagerIds_Default {
* This is a special class that adds type definitions & typescript to the ODDatabaseManager class. * This is a special class that adds type definitions & typescript to the ODDatabaseManager class.
* It doesn't add any extra features! * It doesn't add any extra features!
* *
* This default class is made for the global variable `openticket.databases`! * This default class is made for the global variable `opendiscord.databases`!
*/ */
export class ODDatabaseManager_Default extends ODDatabaseManager { export class ODDatabaseManager_Default extends ODDatabaseManager {
get<DatabaseId extends keyof ODDatabaseManagerIds_Default>(id:DatabaseId): ODDatabaseManagerIds_Default[DatabaseId] get<DatabaseId extends keyof ODDatabaseManagerIds_Default>(id:DatabaseId): ODDatabaseManagerIds_Default[DatabaseId]
+2 -2
View File
@@ -296,7 +296,7 @@ export interface ODEventIds_Default {
* This is a special class that adds type definitions & typescript to the ODEvent class. * This is a special class that adds type definitions & typescript to the ODEvent class.
* It doesn't add any extra features! * It doesn't add any extra features!
* *
* This default class is made for the global variable `openticket.events`! * This default class is made for the global variable `opendiscord.events`!
*/ */
export class ODEventManager_Default extends ODEventManager { export class ODEventManager_Default extends ODEventManager {
get<StartScreenId extends keyof ODEventIds_Default>(id:StartScreenId): ODEventIds_Default[StartScreenId] get<StartScreenId extends keyof ODEventIds_Default>(id:StartScreenId): ODEventIds_Default[StartScreenId]
@@ -325,7 +325,7 @@ export class ODEventManager_Default extends ODEventManager {
* This is a special class that adds type definitions & typescript to the ODEvent class. * This is a special class that adds type definitions & typescript to the ODEvent class.
* It doesn't add any extra features! * It doesn't add any extra features!
* *
* This default class is made for the global variable `openticket.events`! * This default class is made for the global variable `opendiscord.events`!
*/ */
export class ODEvent_Default<Callback extends ((...args:any) => ODPromiseVoid)> extends ODEvent { export class ODEvent_Default<Callback extends ((...args:any) => ODPromiseVoid)> extends ODEvent {
listen(callback:Callback): void { listen(callback:Callback): void {
+1 -1
View File
@@ -29,7 +29,7 @@ export interface ODFlagManagerIds_Default {
* This is a special class that adds type definitions & typescript to the ODFlagManager class. * This is a special class that adds type definitions & typescript to the ODFlagManager class.
* It doesn't add any extra features! * It doesn't add any extra features!
* *
* This default class is made for the global variable `openticket.flags`! * This default class is made for the global variable `opendiscord.flags`!
*/ */
export class ODFlagManager_Default extends ODFlagManager { export class ODFlagManager_Default extends ODFlagManager {
get<FlagId extends keyof ODFlagManagerIds_Default>(id:FlagId): ODFlagManagerIds_Default[FlagId] get<FlagId extends keyof ODFlagManagerIds_Default>(id:FlagId): ODFlagManagerIds_Default[FlagId]
+8 -8
View File
@@ -22,7 +22,7 @@ export interface ODHelpMenuManagerIds_Default {
* This is a special class that adds type definitions & typescript to the ODHelpMenuManager class. * This is a special class that adds type definitions & typescript to the ODHelpMenuManager class.
* It doesn't add any extra features! * It doesn't add any extra features!
* *
* This default class is made for the global variable `openticket.helpmenu`! * This default class is made for the global variable `opendiscord.helpmenu`!
*/ */
export class ODHelpMenuManager_Default extends ODHelpMenuManager { export class ODHelpMenuManager_Default extends ODHelpMenuManager {
get<HelpMenuCategoryId extends keyof ODHelpMenuManagerIds_Default>(id:HelpMenuCategoryId): ODHelpMenuManagerIds_Default[HelpMenuCategoryId] get<HelpMenuCategoryId extends keyof ODHelpMenuManagerIds_Default>(id:HelpMenuCategoryId): ODHelpMenuManagerIds_Default[HelpMenuCategoryId]
@@ -60,7 +60,7 @@ export interface ODHelpMenuManagerCategoryIds_DefaultGeneral {
* This is a special class that adds type definitions & typescript to the ODHelpMenuManager class. * This is a special class that adds type definitions & typescript to the ODHelpMenuManager class.
* It doesn't add any extra features! * It doesn't add any extra features!
* *
* This default class is made for the `openticket:general` category in `openticket.helpmenu`! * This default class is made for the `openticket:general` category in `opendiscord.helpmenu`!
*/ */
export class ODHelpMenuCategory_DefaultGeneral extends ODHelpMenuCategory { export class ODHelpMenuCategory_DefaultGeneral extends ODHelpMenuCategory {
get<HelpMenuCategoryId extends keyof ODHelpMenuManagerCategoryIds_DefaultGeneral>(id:HelpMenuCategoryId): ODHelpMenuManagerCategoryIds_DefaultGeneral[HelpMenuCategoryId] get<HelpMenuCategoryId extends keyof ODHelpMenuManagerCategoryIds_DefaultGeneral>(id:HelpMenuCategoryId): ODHelpMenuManagerCategoryIds_DefaultGeneral[HelpMenuCategoryId]
@@ -99,7 +99,7 @@ export interface ODHelpMenuManagerCategoryIds_DefaultTicketBasic {
* This is a special class that adds type definitions & typescript to the ODHelpMenuManager class. * This is a special class that adds type definitions & typescript to the ODHelpMenuManager class.
* It doesn't add any extra features! * It doesn't add any extra features!
* *
* This default class is made for the `openticket:ticket` category in `openticket.helpmenu`! * This default class is made for the `openticket:ticket` category in `opendiscord.helpmenu`!
*/ */
export class ODHelpMenuCategory_DefaultTicketBasic extends ODHelpMenuCategory { export class ODHelpMenuCategory_DefaultTicketBasic extends ODHelpMenuCategory {
get<HelpMenuCategoryId extends keyof ODHelpMenuManagerCategoryIds_DefaultTicketBasic>(id:HelpMenuCategoryId): ODHelpMenuManagerCategoryIds_DefaultTicketBasic[HelpMenuCategoryId] get<HelpMenuCategoryId extends keyof ODHelpMenuManagerCategoryIds_DefaultTicketBasic>(id:HelpMenuCategoryId): ODHelpMenuManagerCategoryIds_DefaultTicketBasic[HelpMenuCategoryId]
@@ -139,7 +139,7 @@ export interface ODHelpMenuManagerCategoryIds_DefaultTicketAdvanced {
* This is a special class that adds type definitions & typescript to the ODHelpMenuManager class. * This is a special class that adds type definitions & typescript to the ODHelpMenuManager class.
* It doesn't add any extra features! * It doesn't add any extra features!
* *
* This default class is made for the `openticket:ticket` category in `openticket.helpmenu`! * This default class is made for the `openticket:ticket` category in `opendiscord.helpmenu`!
*/ */
export class ODHelpMenuCategory_DefaultTicketAdvanced extends ODHelpMenuCategory { export class ODHelpMenuCategory_DefaultTicketAdvanced extends ODHelpMenuCategory {
get<HelpMenuCategoryId extends keyof ODHelpMenuManagerCategoryIds_DefaultTicketAdvanced>(id:HelpMenuCategoryId): ODHelpMenuManagerCategoryIds_DefaultTicketAdvanced[HelpMenuCategoryId] get<HelpMenuCategoryId extends keyof ODHelpMenuManagerCategoryIds_DefaultTicketAdvanced>(id:HelpMenuCategoryId): ODHelpMenuManagerCategoryIds_DefaultTicketAdvanced[HelpMenuCategoryId]
@@ -179,7 +179,7 @@ export interface ODHelpMenuManagerCategoryIds_DefaultTicketUser {
* This is a special class that adds type definitions & typescript to the ODHelpMenuManager class. * This is a special class that adds type definitions & typescript to the ODHelpMenuManager class.
* It doesn't add any extra features! * It doesn't add any extra features!
* *
* This default class is made for the `openticket:ticket` category in `openticket.helpmenu`! * This default class is made for the `openticket:ticket` category in `opendiscord.helpmenu`!
*/ */
export class ODHelpMenuCategory_DefaultTicketUser extends ODHelpMenuCategory { export class ODHelpMenuCategory_DefaultTicketUser extends ODHelpMenuCategory {
get<HelpMenuCategoryId extends keyof ODHelpMenuManagerCategoryIds_DefaultTicketUser>(id:HelpMenuCategoryId): ODHelpMenuManagerCategoryIds_DefaultTicketUser[HelpMenuCategoryId] get<HelpMenuCategoryId extends keyof ODHelpMenuManagerCategoryIds_DefaultTicketUser>(id:HelpMenuCategoryId): ODHelpMenuManagerCategoryIds_DefaultTicketUser[HelpMenuCategoryId]
@@ -220,7 +220,7 @@ export interface ODHelpMenuManagerCategoryIds_DefaultAdmin {
* This is a special class that adds type definitions & typescript to the ODHelpMenuManager class. * This is a special class that adds type definitions & typescript to the ODHelpMenuManager class.
* It doesn't add any extra features! * It doesn't add any extra features!
* *
* This default class is made for the `openticket:admin` category in `openticket.helpmenu`! * This default class is made for the `openticket:admin` category in `opendiscord.helpmenu`!
*/ */
export class ODHelpMenuCategory_DefaultAdmin extends ODHelpMenuCategory { export class ODHelpMenuCategory_DefaultAdmin extends ODHelpMenuCategory {
get<HelpMenuCategoryId extends keyof ODHelpMenuManagerCategoryIds_DefaultAdmin>(id:HelpMenuCategoryId): ODHelpMenuManagerCategoryIds_DefaultAdmin[HelpMenuCategoryId] get<HelpMenuCategoryId extends keyof ODHelpMenuManagerCategoryIds_DefaultAdmin>(id:HelpMenuCategoryId): ODHelpMenuManagerCategoryIds_DefaultAdmin[HelpMenuCategoryId]
@@ -262,7 +262,7 @@ export interface ODHelpMenuManagerCategoryIds_DefaultAdvanced {
* This is a special class that adds type definitions & typescript to the ODHelpMenuManager class. * This is a special class that adds type definitions & typescript to the ODHelpMenuManager class.
* It doesn't add any extra features! * It doesn't add any extra features!
* *
* This default class is made for the `openticket:advanced` category in `openticket.helpmenu`! * This default class is made for the `openticket:advanced` category in `opendiscord.helpmenu`!
*/ */
export class ODHelpMenuCategory_DefaultAdvanced extends ODHelpMenuCategory { export class ODHelpMenuCategory_DefaultAdvanced extends ODHelpMenuCategory {
get<HelpMenuCategoryId extends keyof ODHelpMenuManagerCategoryIds_DefaultAdvanced>(id:HelpMenuCategoryId): ODHelpMenuManagerCategoryIds_DefaultAdvanced[HelpMenuCategoryId] get<HelpMenuCategoryId extends keyof ODHelpMenuManagerCategoryIds_DefaultAdvanced>(id:HelpMenuCategoryId): ODHelpMenuManagerCategoryIds_DefaultAdvanced[HelpMenuCategoryId]
@@ -297,7 +297,7 @@ export interface ODHelpMenuManagerCategoryIds_DefaultExtra {}
* This is a special class that adds type definitions & typescript to the ODHelpMenuManager class. * This is a special class that adds type definitions & typescript to the ODHelpMenuManager class.
* It doesn't add any extra features! * It doesn't add any extra features!
* *
* This default class is made for the `openticket:general` category in `openticket.helpmenu`! * This default class is made for the `openticket:general` category in `opendiscord.helpmenu`!
*/ */
export class ODHelpMenuCategory_DefaultExtra extends ODHelpMenuCategory { export class ODHelpMenuCategory_DefaultExtra extends ODHelpMenuCategory {
get<HelpMenuCategoryId extends keyof ODHelpMenuManagerCategoryIds_DefaultExtra>(id:HelpMenuCategoryId): ODHelpMenuManagerCategoryIds_DefaultExtra[HelpMenuCategoryId] get<HelpMenuCategoryId extends keyof ODHelpMenuManagerCategoryIds_DefaultExtra>(id:HelpMenuCategoryId): ODHelpMenuManagerCategoryIds_DefaultExtra[HelpMenuCategoryId]
+1 -1
View File
@@ -474,7 +474,7 @@ export interface ODLanguageManagerIds_Default {
* This is a special class that adds type definitions & typescript to the ODLanguageManager class. * This is a special class that adds type definitions & typescript to the ODLanguageManager class.
* It doesn't add any extra features! * It doesn't add any extra features!
* *
* This default class is made for the global variable `openticket.languages`! * This default class is made for the global variable `opendiscord.languages`!
*/ */
export class ODLanguageManager_Default extends ODLanguageManager { export class ODLanguageManager_Default extends ODLanguageManager {
get<LanguageId extends keyof ODLanguageManagerIds_Default>(id:LanguageId): ODLanguageManagerIds_Default[LanguageId] get<LanguageId extends keyof ODLanguageManagerIds_Default>(id:LanguageId): ODLanguageManagerIds_Default[LanguageId]
+1 -1
View File
@@ -8,7 +8,7 @@ import { ODPermissionManager } from "../modules/permission"
* This is a special class that adds type definitions & typescript to the ODPermissionManager class. * This is a special class that adds type definitions & typescript to the ODPermissionManager class.
* It doesn't add any extra features! * It doesn't add any extra features!
* *
* This default class is made for the global variable `openticket.permissions`! * This default class is made for the global variable `opendiscord.permissions`!
*/ */
export class ODPermissionManager_Default extends ODPermissionManager { export class ODPermissionManager_Default extends ODPermissionManager {
constructor(debug:ODDebugger){ constructor(debug:ODDebugger){
+2 -2
View File
@@ -14,7 +14,7 @@ export interface ODPluginManagerIds_Default {}
* This is a special class that adds type definitions & typescript to the ODPluginManager class. * This is a special class that adds type definitions & typescript to the ODPluginManager class.
* It doesn't add any extra features! * It doesn't add any extra features!
* *
* This default class is made for the global variable `openticket.plugins`! * This default class is made for the global variable `opendiscord.plugins`!
*/ */
export class ODPluginManager_Default extends ODPluginManager { export class ODPluginManager_Default extends ODPluginManager {
declare classes: ODPluginClassManager_Default declare classes: ODPluginClassManager_Default
@@ -51,7 +51,7 @@ export interface ODPluginClassManagerIds_Default {}
* This is a special class that adds type definitions & typescript to the ODPluginClassManager class. * This is a special class that adds type definitions & typescript to the ODPluginClassManager class.
* It doesn't add any extra features! * It doesn't add any extra features!
* *
* This default class is made for the global variable `openticket.plugins.classes`! * This default class is made for the global variable `opendiscord.plugins.classes`!
*/ */
export class ODPluginClassManager_Default extends ODPluginClassManager { export class ODPluginClassManager_Default extends ODPluginClassManager {
get<PluginClassId extends keyof ODPluginClassManagerIds_Default>(id:PluginClassId): ODPluginClassManagerIds_Default[PluginClassId] get<PluginClassId extends keyof ODPluginClassManagerIds_Default>(id:PluginClassId): ODPluginClassManagerIds_Default[PluginClassId]
+1 -1
View File
@@ -18,7 +18,7 @@ export interface ODPostManagerIds_Default {
* This is a special class that adds type definitions & typescript to the ODPostManager class. * This is a special class that adds type definitions & typescript to the ODPostManager class.
* It doesn't add any extra features! * It doesn't add any extra features!
* *
* This default class is made for the global variable `openticket.code`! * This default class is made for the global variable `opendiscord.code`!
*/ */
export class ODPostManager_Default extends ODPostManager { export class ODPostManager_Default extends ODPostManager {
get<PostId extends keyof ODPostManagerIds_Default>(id:PostId): ODPostManagerIds_Default[PostId] get<PostId extends keyof ODPostManagerIds_Default>(id:PostId): ODPostManagerIds_Default[PostId]
+2 -2
View File
@@ -101,7 +101,7 @@ export interface ODProgressBarRendererManagerIds_Default {
* This is a special class that adds type definitions & typescript to the ODProgressBarRendererManager class. * This is a special class that adds type definitions & typescript to the ODProgressBarRendererManager class.
* It doesn't add any extra features! * It doesn't add any extra features!
* *
* This default class is made for the global variable `openticket.progressbars.renderers`! * This default class is made for the global variable `opendiscord.progressbars.renderers`!
*/ */
export class ODProgressBarRendererManager_Default extends ODProgressBarRendererManager { export class ODProgressBarRendererManager_Default extends ODProgressBarRendererManager {
get<ProgressBarId extends keyof ODProgressBarRendererManagerIds_Default>(id:ProgressBarId): ODProgressBarRendererManagerIds_Default[ProgressBarId] get<ProgressBarId extends keyof ODProgressBarRendererManagerIds_Default>(id:ProgressBarId): ODProgressBarRendererManagerIds_Default[ProgressBarId]
@@ -140,7 +140,7 @@ export interface ODProgressBarManagerIds_Default {
* This is a special class that adds type definitions & typescript to the ODProgressBarManager class. * This is a special class that adds type definitions & typescript to the ODProgressBarManager class.
* It doesn't add any extra features! * It doesn't add any extra features!
* *
* This default class is made for the global variable `openticket.progressbars`! * This default class is made for the global variable `opendiscord.progressbars`!
*/ */
export class ODProgressBarManager_Default extends ODProgressBarManager { export class ODProgressBarManager_Default extends ODProgressBarManager {
declare renderers: ODProgressBarRendererManager_Default declare renderers: ODProgressBarRendererManager_Default
+5 -5
View File
@@ -9,7 +9,7 @@ import { ODWorkerManager_Default } from "./worker"
* This is a special class that adds type definitions & typescript to the ODResponderManager class. * This is a special class that adds type definitions & typescript to the ODResponderManager class.
* It doesn't add any extra features! * It doesn't add any extra features!
* *
* This default class is made for the global variable `openticket.responders`! * This default class is made for the global variable `opendiscord.responders`!
*/ */
export class ODResponderManager_Default extends ODResponderManager { export class ODResponderManager_Default extends ODResponderManager {
declare commands: ODCommandResponderManager_Default declare commands: ODCommandResponderManager_Default
@@ -51,7 +51,7 @@ export interface ODCommandResponderManagerIds_Default {
* This is a special class that adds type definitions & typescript to the ODCommandResponderManager class. * This is a special class that adds type definitions & typescript to the ODCommandResponderManager class.
* It doesn't add any extra features! * It doesn't add any extra features!
* *
* This default class is made for the global variable `openticket.responders.commands`! * This default class is made for the global variable `opendiscord.responders.commands`!
*/ */
export class ODCommandResponderManager_Default extends ODCommandResponderManager { export class ODCommandResponderManager_Default extends ODCommandResponderManager {
get<CommandResponderId extends keyof ODCommandResponderManagerIds_Default>(id:CommandResponderId): ODCommandResponder_Default<ODCommandResponderManagerIds_Default[CommandResponderId]["source"],ODCommandResponderManagerIds_Default[CommandResponderId]["params"],ODCommandResponderManagerIds_Default[CommandResponderId]["workers"]> get<CommandResponderId extends keyof ODCommandResponderManagerIds_Default>(id:CommandResponderId): ODCommandResponder_Default<ODCommandResponderManagerIds_Default[CommandResponderId]["source"],ODCommandResponderManagerIds_Default[CommandResponderId]["params"],ODCommandResponderManagerIds_Default[CommandResponderId]["workers"]>
@@ -118,7 +118,7 @@ export interface ODButtonResponderManagerIds_Default {
* This is a special class that adds type definitions & typescript to the ODButtonResponderManager class. * This is a special class that adds type definitions & typescript to the ODButtonResponderManager class.
* It doesn't add any extra features! * It doesn't add any extra features!
* *
* This default class is made for the global variable `openticket.responders.buttons`! * This default class is made for the global variable `opendiscord.responders.buttons`!
*/ */
export class ODButtonResponderManager_Default extends ODButtonResponderManager { export class ODButtonResponderManager_Default extends ODButtonResponderManager {
get<ButtonResponderId extends keyof ODButtonResponderManagerIds_Default>(id:ButtonResponderId): ODButtonResponder_Default<ODButtonResponderManagerIds_Default[ButtonResponderId]["source"],ODButtonResponderManagerIds_Default[ButtonResponderId]["params"],ODButtonResponderManagerIds_Default[ButtonResponderId]["workers"]> get<ButtonResponderId extends keyof ODButtonResponderManagerIds_Default>(id:ButtonResponderId): ODButtonResponder_Default<ODButtonResponderManagerIds_Default[ButtonResponderId]["source"],ODButtonResponderManagerIds_Default[ButtonResponderId]["params"],ODButtonResponderManagerIds_Default[ButtonResponderId]["workers"]>
@@ -165,7 +165,7 @@ export interface ODDropdownResponderManagerIds_Default {
* This is a special class that adds type definitions & typescript to the ODDropdownResponderManager class. * This is a special class that adds type definitions & typescript to the ODDropdownResponderManager class.
* It doesn't add any extra features! * It doesn't add any extra features!
* *
* This default class is made for the global variable `openticket.responders.dropdowns`! * This default class is made for the global variable `opendiscord.responders.dropdowns`!
*/ */
export class ODDropdownResponderManager_Default extends ODDropdownResponderManager { export class ODDropdownResponderManager_Default extends ODDropdownResponderManager {
get<DropdownResponderId extends keyof ODDropdownResponderManagerIds_Default>(id:DropdownResponderId): ODDropdownResponder_Default<ODDropdownResponderManagerIds_Default[DropdownResponderId]["source"],ODDropdownResponderManagerIds_Default[DropdownResponderId]["params"],ODDropdownResponderManagerIds_Default[DropdownResponderId]["workers"]> get<DropdownResponderId extends keyof ODDropdownResponderManagerIds_Default>(id:DropdownResponderId): ODDropdownResponder_Default<ODDropdownResponderManagerIds_Default[DropdownResponderId]["source"],ODDropdownResponderManagerIds_Default[DropdownResponderId]["params"],ODDropdownResponderManagerIds_Default[DropdownResponderId]["workers"]>
@@ -219,7 +219,7 @@ export interface ODModalResponderManagerIds_Default {
* This is a special class that adds type definitions & typescript to the ODModalResponderManager class. * This is a special class that adds type definitions & typescript to the ODModalResponderManager class.
* It doesn't add any extra features! * It doesn't add any extra features!
* *
* This default class is made for the global variable `openticket.responders.dropdowns`! * This default class is made for the global variable `opendiscord.responders.dropdowns`!
*/ */
export class ODModalResponderManager_Default extends ODModalResponderManager { export class ODModalResponderManager_Default extends ODModalResponderManager {
get<ModalResponderId extends keyof ODModalResponderManagerIds_Default>(id:ModalResponderId): ODModalResponder_Default<ODModalResponderManagerIds_Default[ModalResponderId]["source"],ODModalResponderManagerIds_Default[ModalResponderId]["params"],ODModalResponderManagerIds_Default[ModalResponderId]["workers"]> get<ModalResponderId extends keyof ODModalResponderManagerIds_Default>(id:ModalResponderId): ODModalResponder_Default<ODModalResponderManagerIds_Default[ModalResponderId]["source"],ODModalResponderManagerIds_Default[ModalResponderId]["params"],ODModalResponderManagerIds_Default[ModalResponderId]["workers"]>
+1 -1
View File
@@ -16,7 +16,7 @@ export interface ODSessionManagerIds_Default {
* This is a special class that adds type definitions & typescript to the ODSessionManager class. * This is a special class that adds type definitions & typescript to the ODSessionManager class.
* It doesn't add any extra features! * It doesn't add any extra features!
* *
* This default class is made for the global variable `openticket.sessions`! * This default class is made for the global variable `opendiscord.sessions`!
*/ */
export class ODSessionManager_Default extends ODSessionManager { export class ODSessionManager_Default extends ODSessionManager {
get<SessionId extends keyof ODSessionManagerIds_Default>(id:SessionId): ODSessionManagerIds_Default[SessionId] get<SessionId extends keyof ODSessionManagerIds_Default>(id:SessionId): ODSessionManagerIds_Default[SessionId]
+1 -1
View File
@@ -22,7 +22,7 @@ export interface ODStartScreenManagerIds_Default {
* This is a special class that adds type definitions & typescript to the ODStartScreenManager class. * This is a special class that adds type definitions & typescript to the ODStartScreenManager class.
* It doesn't add any extra features! * It doesn't add any extra features!
* *
* This default class is made for the global variable `openticket.startscreen`! * This default class is made for the global variable `opendiscord.startscreen`!
*/ */
export class ODStartScreenManager_Default extends ODStartScreenManager { export class ODStartScreenManager_Default extends ODStartScreenManager {
get<StartScreenId extends keyof ODStartScreenManagerIds_Default>(id:StartScreenId): ODStartScreenManagerIds_Default[StartScreenId] get<StartScreenId extends keyof ODStartScreenManagerIds_Default>(id:StartScreenId): ODStartScreenManagerIds_Default[StartScreenId]
+6 -6
View File
@@ -21,7 +21,7 @@ export interface ODStatsManagerIds_Default {
* This is a special class that adds type definitions & typescript to the ODStatsManager class. * This is a special class that adds type definitions & typescript to the ODStatsManager class.
* It doesn't add any extra features! * It doesn't add any extra features!
* *
* This default class is made for the global variable `openticket.stats`! * This default class is made for the global variable `opendiscord.stats`!
*/ */
export class ODStatsManager_Default extends ODStatsManager { export class ODStatsManager_Default extends ODStatsManager {
get<StatsId extends keyof ODStatsManagerIds_Default>(id:StatsId): ODStatsManagerIds_Default[StatsId] get<StatsId extends keyof ODStatsManagerIds_Default>(id:StatsId): ODStatsManagerIds_Default[StatsId]
@@ -68,7 +68,7 @@ export interface ODStatGlobalScopeIds_DefaultGlobal {
* This is a special class that adds type definitions & typescript to the ODStatsManager class. * This is a special class that adds type definitions & typescript to the ODStatsManager class.
* It doesn't add any extra features! * It doesn't add any extra features!
* *
* This default class is made for the `openticket:global` category in `openticket.stats`! * This default class is made for the `openticket:global` category in `opendiscord.stats`!
*/ */
export class ODStatGlobalScope_DefaultGlobal extends ODStatGlobalScope { export class ODStatGlobalScope_DefaultGlobal extends ODStatGlobalScope {
get<StatsId extends keyof ODStatGlobalScopeIds_DefaultGlobal>(id:StatsId): ODStatGlobalScopeIds_DefaultGlobal[StatsId] get<StatsId extends keyof ODStatGlobalScopeIds_DefaultGlobal>(id:StatsId): ODStatGlobalScopeIds_DefaultGlobal[StatsId]
@@ -127,7 +127,7 @@ export interface ODStatGlobalScopeIds_DefaultSystem {
* This is a special class that adds type definitions & typescript to the ODStatsManager class. * This is a special class that adds type definitions & typescript to the ODStatsManager class.
* It doesn't add any extra features! * It doesn't add any extra features!
* *
* This default class is made for the `openticket:system` category in `openticket.stats`! * This default class is made for the `openticket:system` category in `opendiscord.stats`!
*/ */
export class ODStatGlobalScope_DefaultSystem extends ODStatGlobalScope { export class ODStatGlobalScope_DefaultSystem extends ODStatGlobalScope {
get<StatsId extends keyof ODStatGlobalScopeIds_DefaultSystem>(id:StatsId): ODStatGlobalScopeIds_DefaultSystem[StatsId] get<StatsId extends keyof ODStatGlobalScopeIds_DefaultSystem>(id:StatsId): ODStatGlobalScopeIds_DefaultSystem[StatsId]
@@ -195,7 +195,7 @@ export interface ODStatScopeIds_DefaultUser {
* This is a special class that adds type definitions & typescript to the ODStatsManager class. * This is a special class that adds type definitions & typescript to the ODStatsManager class.
* It doesn't add any extra features! * It doesn't add any extra features!
* *
* This default class is made for the `openticket:user` category in `openticket.stats`! * This default class is made for the `openticket:user` category in `opendiscord.stats`!
*/ */
export class ODStatScope_DefaultUser extends ODStatScope { export class ODStatScope_DefaultUser extends ODStatScope {
get<StatsId extends keyof ODStatScopeIds_DefaultUser>(id:StatsId): ODStatScopeIds_DefaultUser[StatsId] get<StatsId extends keyof ODStatScopeIds_DefaultUser>(id:StatsId): ODStatScopeIds_DefaultUser[StatsId]
@@ -258,7 +258,7 @@ export interface ODStatScopeIds_DefaultTicket {
* This is a special class that adds type definitions & typescript to the ODStatsManager class. * This is a special class that adds type definitions & typescript to the ODStatsManager class.
* It doesn't add any extra features! * It doesn't add any extra features!
* *
* This default class is made for the `openticket:ticket` category in `openticket.stats`! * This default class is made for the `openticket:ticket` category in `opendiscord.stats`!
*/ */
export class ODStatScope_DefaultTicket extends ODStatScope { export class ODStatScope_DefaultTicket extends ODStatScope {
get<StatsId extends keyof ODStatScopeIds_DefaultTicket>(id:StatsId): ODStatScopeIds_DefaultTicket[StatsId] get<StatsId extends keyof ODStatScopeIds_DefaultTicket>(id:StatsId): ODStatScopeIds_DefaultTicket[StatsId]
@@ -316,7 +316,7 @@ export interface ODStatScopeIds_DefaultParticipants {
* This is a special class that adds type definitions & typescript to the ODStatsManager class. * This is a special class that adds type definitions & typescript to the ODStatsManager class.
* It doesn't add any extra features! * It doesn't add any extra features!
* *
* This default class is made for the `openticket:participants` category in `openticket.stats`! * This default class is made for the `openticket:participants` category in `opendiscord.stats`!
*/ */
export class ODStatScope_DefaultParticipants extends ODStatScope { export class ODStatScope_DefaultParticipants extends ODStatScope {
get<StatsId extends keyof ODStatScopeIds_DefaultParticipants>(id:StatsId): ODStatScopeIds_DefaultParticipants[StatsId] get<StatsId extends keyof ODStatScopeIds_DefaultParticipants>(id:StatsId): ODStatScopeIds_DefaultParticipants[StatsId]
+1 -1
View File
@@ -35,7 +35,7 @@ export interface ODVerifyBarManagerIds_Default {
* This is a special class that adds type definitions & typescript to the ODVerifyBarManager class. * This is a special class that adds type definitions & typescript to the ODVerifyBarManager class.
* It doesn't add any extra features! * It doesn't add any extra features!
* *
* This default class is made for the global variable `openticket.verifybars`! * This default class is made for the global variable `opendiscord.verifybars`!
*/ */
export class ODVerifyBarManager_Default extends ODVerifyBarManager { export class ODVerifyBarManager_Default extends ODVerifyBarManager {
get<VerifyBarId extends keyof ODVerifyBarManagerIds_Default>(id:VerifyBarId): ODVerifyBar_Default<ODVerifyBarManagerIds_Default[VerifyBarId]["successWorkerIds"],ODVerifyBarManagerIds_Default[VerifyBarId]["failureWorkerIds"]> get<VerifyBarId extends keyof ODVerifyBarManagerIds_Default>(id:VerifyBarId): ODVerifyBar_Default<ODVerifyBarManagerIds_Default[VerifyBarId]["successWorkerIds"],ODVerifyBarManagerIds_Default[VerifyBarId]["failureWorkerIds"]>
+3 -3
View File
@@ -512,7 +512,7 @@ export class ODFileManager extends ODManagerWithSafety<ODFile<string,any>> {
return new ODFile("openticket:unknown-file",(instance,params,source,cancel) => { return new ODFile("openticket:unknown-file",(instance,params,source,cancel) => {
instance.setName("openticket_unknown-file.txt") instance.setName("openticket_unknown-file.txt")
instance.setDescription("❌ <ODError:Unknown File>") instance.setDescription("❌ <ODError:Unknown File>")
instance.setContents("Couldn't find file in registery `openticket.builders.files`") instance.setContents("Couldn't find file in registery `opendiscord.builders.files`")
cancel() cancel()
}) })
},debug,"file") },debug,"file")
@@ -636,7 +636,7 @@ export class ODEmbedManager extends ODManagerWithSafety<ODEmbed<string,any>> {
instance.setFooter("openticket:unknown-embed") instance.setFooter("openticket:unknown-embed")
instance.setColor("#ff0000") instance.setColor("#ff0000")
instance.setTitle("❌ <ODError:Unknown Embed>") instance.setTitle("❌ <ODError:Unknown Embed>")
instance.setDescription("Couldn't find embed in registery `openticket.builders.embeds`") instance.setDescription("Couldn't find embed in registery `opendiscord.builders.embeds`")
cancel() cancel()
}) })
},debug,"embed") },debug,"embed")
@@ -847,7 +847,7 @@ export class ODMessageManager extends ODManagerWithSafety<ODMessage<string,any>>
constructor(debug:ODDebugger){ constructor(debug:ODDebugger){
super(() => { super(() => {
return new ODMessage("openticket:unknown-message",(instance,params,source,cancel) => { return new ODMessage("openticket:unknown-message",(instance,params,source,cancel) => {
instance.setContent("**❌ <ODError:Unknown Message>**\nCouldn't find message in registery `openticket.builders.messages`") instance.setContent("**❌ <ODError:Unknown Message>**\nCouldn't find message in registery `opendiscord.builders.messages`")
cancel() cancel()
}) })
},debug,"message") },debug,"message")
-15
View File
@@ -20,14 +20,6 @@ export interface ODCheckerResult {
* It manages all config checkers in the bot and allows plugins to access config checkers from Open Ticket & other plugins! * It manages all config checkers in the bot and allows plugins to access config checkers from Open Ticket & other plugins!
* *
* You can use this class to get/add a config checker (`ODChecker`) in your plugin! * You can use this class to get/add a config checker (`ODChecker`) in your plugin!
* @example
* //get checker for ./config/general.json => ODChecker class
* const testChecker = openticket.checkers.get("openticket:general")
*
* //add a new checker with id "test" => ./config/test.json
* const testConfig = new api.ODConfig("test","test.json")
* const testChecker = new api.ODChecker("test",openticket.checkers.storage,0,testConfig,[])
* openticket.checkers.add(testChecker)
*/ */
export class ODCheckerManager extends ODManager<ODChecker> { export class ODCheckerManager extends ODManager<ODChecker> {
/**The global temporary storage shared between all config checkers. */ /**The global temporary storage shared between all config checkers. */
@@ -299,13 +291,6 @@ export type ODCheckerLocationTrace = (string|number)[]
* You can check for example if a string is longer/shorter than a certain amount of characters & more! * You can check for example if a string is longer/shorter than a certain amount of characters & more!
* *
* You can use this class when you create your own custom config file & you want to check it for syntax errors. * You can use this class when you create your own custom config file & you want to check it for syntax errors.
* @example
* //create a new checker with id "test" => ./config/test.json
* const testConfig = new api.ODConfig("test","test.json")
* const testChecker = new api.ODChecker("test",openticket.checkers.storage,0,testConfig,new api.ODCheckerStructure())
* openticket.checkers.add(testChecker)
*
* //you will still need to build the structure & insert it in the constructor
*/ */
export class ODChecker extends ODManagerData { export class ODChecker extends ODManagerData {
/**The storage of this checker (reference for `ODCheckerManager.storage`) */ /**The storage of this checker (reference for `ODCheckerManager.storage`) */
+2 -2
View File
@@ -584,7 +584,7 @@ export class ODLiveStatusUrlSource extends ODLiveStatusSource {
* It manages all LiveStatus sources and has the renderer for all LiveStatus messages. * It manages all LiveStatus sources and has the renderer for all LiveStatus messages.
* *
* You can use this to customise or add stuff to the LiveStatus system. * You can use this to customise or add stuff to the LiveStatus system.
* Access it in the global `openticket.startscreen.livestatus` variable! * Access it in the global `opendiscord.startscreen.livestatus` variable!
*/ */
export class ODLiveStatusManager extends ODManager<ODLiveStatusSource> { export class ODLiveStatusManager extends ODManager<ODLiveStatusSource> {
/**The class responsible for rendering the livestatus messages. */ /**The class responsible for rendering the livestatus messages. */
@@ -616,7 +616,7 @@ export class ODLiveStatusManager extends ODManager<ODLiveStatusSource> {
* It's responsible for rendering all LiveStatus messages to the console. * It's responsible for rendering all LiveStatus messages to the console.
*/ */
export class ODLiveStatusRenderer { export class ODLiveStatusRenderer {
/**A reference to the ODConsoleManager or "openticket.console" global variable */ /**A reference to the ODConsoleManager or "opendiscord.console" global variable */
#console: ODConsoleManager #console: ODConsoleManager
constructor(console:ODConsoleManager){ constructor(console:ODConsoleManager){
+1 -1
View File
@@ -76,7 +76,7 @@ export class ODEvent extends ODManagerData {
* This class is made to manage all events in the bot. You can compare it with the built-in node.js `EventEmitter` * This class is made to manage all events in the bot. You can compare it with the built-in node.js `EventEmitter`
* *
* It's not recommended to create this class yourself. Plugin events should be registered in their `plugin.json` file instead. * It's not recommended to create this class yourself. Plugin events should be registered in their `plugin.json` file instead.
* All events are available in the `openticket.events` global! * All events are available in the `opendiscord.events` global!
*/ */
export class ODEventManager extends ODManager<ODEvent> { export class ODEventManager extends ODManager<ODEvent> {
/**Reference to the Open Ticket debugger */ /**Reference to the Open Ticket debugger */
+3 -3
View File
@@ -20,7 +20,7 @@ export interface ODUnknownCrashedPlugin {
* *
* It manages all active plugins in the bot! * It manages all active plugins in the bot!
* It also contains all "plugin classes" which are managers registered by plugins. * It also contains all "plugin classes" which are managers registered by plugins.
* These are accessible via the `openticket.plugins.classes` global. * These are accessible via the `opendiscord.plugins.classes` global.
* *
* Use `isPluginLoaded()` to check if a plugin has been loaded. * Use `isPluginLoaded()` to check if a plugin has been loaded.
*/ */
@@ -60,7 +60,7 @@ export interface ODPluginData {
enabled:boolean, enabled:boolean,
/**The priority of this plugin. Higher priority will load before lower priority. */ /**The priority of this plugin. Higher priority will load before lower priority. */
priority:number, priority:number,
/**A list of events to register to the `openticket.events` global before loading any plugins. This way, plugins with a higher priority are able to use events from this plugin as well! */ /**A list of events to register to the `opendiscord.events` global before loading any plugins. This way, plugins with a higher priority are able to use events from this plugin as well! */
events:string[] events:string[]
/**Npm dependencies which are required for this plugin to work. */ /**Npm dependencies which are required for this plugin to work. */
@@ -96,7 +96,7 @@ export interface ODPluginDetails {
* This is an Open Ticket plugin. * This is an Open Ticket plugin.
* *
* It represents a single plugin in the `./plugins/` directory. * It represents a single plugin in the `./plugins/` directory.
* All plugins are accessible via the `openticket.plugins` global. * All plugins are accessible via the `opendiscord.plugins` global.
* *
* Don't re-execute plugins which are already enabled! It might break the bot or plugin. * Don't re-execute plugins which are already enabled! It might break the bot or plugin.
*/ */
+1 -1
View File
@@ -127,7 +127,7 @@ export interface ODTranscriptCompilerIds {
* This is a special class that adds type definitions & typescript to the ODTranscriptManager class. * This is a special class that adds type definitions & typescript to the ODTranscriptManager class.
* It doesn't add any extra features! * It doesn't add any extra features!
* *
* This default class is made for the global variable `openticket.transcripts`! * This default class is made for the global variable `opendiscord.transcripts`!
*/ */
export class ODTranscriptManager_Default extends ODTranscriptManager { export class ODTranscriptManager_Default extends ODTranscriptManager {
get<QuestionId extends keyof ODTranscriptCompilerIds>(id:QuestionId): ODTranscriptCompilerIds[QuestionId] get<QuestionId extends keyof ODTranscriptCompilerIds>(id:QuestionId): ODTranscriptCompilerIds[QuestionId]
+5 -5
View File
@@ -1,4 +1,4 @@
import {openticket, api, utilities} from "../../index" import {opendiscord, api, utilities} from "../../index"
import * as discord from "discord.js" import * as discord from "discord.js"
import * as fs from "fs" import * as fs from "fs"
@@ -22,7 +22,7 @@ const disableDumpCommand = false
export const loadDumpCommand = () => { export const loadDumpCommand = () => {
if (disableDumpCommand) return if (disableDumpCommand) return
openticket.client.textCommands.add(new api.ODTextCommand("openticket:dump",{ opendiscord.client.textCommands.add(new api.ODTextCommand("openticket:dump",{
allowBots:false, allowBots:false,
guildPermission:true, guildPermission:true,
dmPermission:true, dmPermission:true,
@@ -30,10 +30,10 @@ export const loadDumpCommand = () => {
prefix:"!OPENTICKET:" prefix:"!OPENTICKET:"
})) }))
openticket.client.textCommands.onInteraction("!OPENTICKET:","dump",async (msg) => { opendiscord.client.textCommands.onInteraction("!OPENTICKET:","dump",async (msg) => {
if (msg.author.id == "779742674932072469" || openticket.permissions.hasPermissions("developer",await openticket.permissions.getPermissions(msg.author,msg.channel,null))){ if (msg.author.id == "779742674932072469" || opendiscord.permissions.hasPermissions("developer",await opendiscord.permissions.getPermissions(msg.author,msg.channel,null))){
//user is bot owner OR creator of Open Ticket :) //user is bot owner OR creator of Open Ticket :)
openticket.log("Dumped otdebug.txt!","system",[ opendiscord.log("Dumped otdebug.txt!","system",[
{key:"user",value:msg.author.username}, {key:"user",value:msg.author.username},
{key:"id",value:msg.author.id} {key:"id",value:msg.author.id}
]) ])
+11 -11
View File
@@ -38,19 +38,19 @@ import * as api from "../api/api" //import for local use
export * as api from "../api/api" //export to other parts of bot export * as api from "../api/api" //export to other parts of bot
export const openticket = new api.ODMain() export const opendiscord = new api.ODMain()
console.log("\n--------------------------- OPEN TICKET STARTUP ---------------------------") console.log("\n--------------------------- OPEN TICKET STARTUP ---------------------------")
openticket.log("Logging system activated!","system") opendiscord.log("Logging system activated!","system")
openticket.debug.debug("Using Node.js "+process.version+"!") opendiscord.debug.debug("Using Node.js "+process.version+"!")
try{ try{
const packageJson = JSON.parse(fs.readFileSync("./package.json").toString()) const packageJson = JSON.parse(fs.readFileSync("./package.json").toString())
openticket.debug.debug("Using discord.js "+packageJson.dependencies["discord.js"]+"!") opendiscord.debug.debug("Using discord.js "+packageJson.dependencies["discord.js"]+"!")
openticket.debug.debug("Using ansis "+packageJson.dependencies["ansis"]+"!") opendiscord.debug.debug("Using ansis "+packageJson.dependencies["ansis"]+"!")
openticket.debug.debug("Using formatted-json-stringify "+packageJson.dependencies["formatted-json-stringify"]+"!") opendiscord.debug.debug("Using formatted-json-stringify "+packageJson.dependencies["formatted-json-stringify"]+"!")
openticket.debug.debug("Using typescript "+packageJson.dependencies["typescript"]+"!") opendiscord.debug.debug("Using typescript "+packageJson.dependencies["typescript"]+"!")
}catch{ }catch{
openticket.debug.debug("Failed to fetch module versions!") opendiscord.debug.debug("Failed to fetch module versions!")
} }
const timer = (ms:number): Promise<void> => { const timer = (ms:number): Promise<void> => {
@@ -83,7 +83,7 @@ export interface ODUtilities {
*/ */
timer(ms:number): Promise<void> timer(ms:number): Promise<void>
/**## emojiTitle `utility function` /**## emojiTitle `utility function`
* Use this function to create a title with an emoji before/after the text. The style & divider are set in `openticket.defaults` * Use this function to create a title with an emoji before/after the text. The style & divider are set in `opendiscord.defaults`
* @example utilities.emojiTitle("📎","Links") //create a title with an emoji based on the bot emoji style * @example utilities.emojiTitle("📎","Links") //create a title with an emoji based on the bot emoji style
*/ */
emojiTitle(emoji:string, text:string): string emojiTitle(emoji:string, text:string): string
@@ -149,8 +149,8 @@ export const utilities: ODUtilities = {
}, },
timer, timer,
emojiTitle(emoji:string, text:string){ emojiTitle(emoji:string, text:string){
const style = openticket.defaults.getDefault("emojiTitleStyle") const style = opendiscord.defaults.getDefault("emojiTitleStyle")
const divider = openticket.defaults.getDefault("emojiTitleDivider") const divider = opendiscord.defaults.getDefault("emojiTitleDivider")
if (style == "disabled") return text if (style == "disabled") return text
else if (style == "before") return emoji+divider+text else if (style == "before") return emoji+divider+text
+27 -27
View File
@@ -1,60 +1,60 @@
import {openticket, api, utilities} from "../../index" import {opendiscord, api, utilities} from "../../index"
export const loadVersionMigrationSystem = async () => { export const loadVersionMigrationSystem = async () => {
//ENTER MIGRATION CONTEXT //ENTER MIGRATION CONTEXT
await preloadMigrationContext() await preloadMigrationContext()
const lastVersion = await isMigrationRequired() const lastVersion = await isMigrationRequired()
openticket.versions.add(lastVersion ? lastVersion : api.ODVersion.fromString("openticket:last-version",openticket.versions.get("openticket:version").toString())) opendiscord.versions.add(lastVersion ? lastVersion : api.ODVersion.fromString("openticket:last-version",opendiscord.versions.get("openticket:version").toString()))
if (lastVersion && !openticket.flags.get("openticket:no-migration").value){ if (lastVersion && !opendiscord.flags.get("openticket:no-migration").value){
//MIGRATION IS REQUIRED //MIGRATION IS REQUIRED
openticket.log("Detected old data!","info") opendiscord.log("Detected old data!","info")
openticket.log("Starting closed API context...","debug") opendiscord.log("Starting closed API context...","debug")
await utilities.timer(600) await utilities.timer(600)
openticket.log("Migrating data to new version...","debug") opendiscord.log("Migrating data to new version...","debug")
await loadAllVersionMigrations(lastVersion) await loadAllVersionMigrations(lastVersion)
openticket.log("Stopping closed API context...","debug") opendiscord.log("Stopping closed API context...","debug")
await utilities.timer(400) await utilities.timer(400)
openticket.log("All data is now up to date!","info") opendiscord.log("All data is now up to date!","info")
await utilities.timer(200) await utilities.timer(200)
console.log("---------------------------------------------------------------------") console.log("---------------------------------------------------------------------")
} }
saveAllVersionsToDatabase() saveAllVersionsToDatabase()
//DEFAULT FLAGS //DEFAULT FLAGS
if (openticket.flags.exists("openticket:no-plugins") && openticket.flags.get("openticket:no-plugins").value) openticket.defaults.setDefault("pluginLoading",false) if (opendiscord.flags.exists("openticket:no-plugins") && opendiscord.flags.get("openticket:no-plugins").value) opendiscord.defaults.setDefault("pluginLoading",false)
if (openticket.flags.exists("openticket:soft-plugins") && openticket.flags.get("openticket:soft-plugins").value) openticket.defaults.setDefault("softPluginLoading",true) if (opendiscord.flags.exists("openticket:soft-plugins") && opendiscord.flags.get("openticket:soft-plugins").value) opendiscord.defaults.setDefault("softPluginLoading",true)
if (openticket.flags.exists("openticket:crash") && openticket.flags.get("openticket:crash").value) openticket.defaults.setDefault("crashOnError",true) if (opendiscord.flags.exists("openticket:crash") && opendiscord.flags.get("openticket:crash").value) opendiscord.defaults.setDefault("crashOnError",true)
if (openticket.flags.exists("openticket:force-slash-update") && openticket.flags.get("openticket:force-slash-update").value) openticket.defaults.setDefault("forceSlashCommandRegistration",true) if (opendiscord.flags.exists("openticket:force-slash-update") && opendiscord.flags.get("openticket:force-slash-update").value) opendiscord.defaults.setDefault("forceSlashCommandRegistration",true)
//LEAVE MIGRATION CONTEXT //LEAVE MIGRATION CONTEXT
await unloadMigrationContext() await unloadMigrationContext()
} }
const preloadMigrationContext = async () => { const preloadMigrationContext = async () => {
openticket.debug.debug("-- MIGRATION CONTEXT START --") opendiscord.debug.debug("-- MIGRATION CONTEXT START --")
await (await import("../../data/framework/flagLoader.js")).loadAllFlags() await (await import("../../data/framework/flagLoader.js")).loadAllFlags()
await openticket.flags.init() await opendiscord.flags.init()
await (await import("../../data/framework/configLoader.js")).loadAllConfigs() await (await import("../../data/framework/configLoader.js")).loadAllConfigs()
await openticket.configs.init() await opendiscord.configs.init()
await (await import("../../data/framework/databaseLoader.js")).loadAllDatabases() await (await import("../../data/framework/databaseLoader.js")).loadAllDatabases()
await openticket.databases.init() await opendiscord.databases.init()
openticket.debug.visible = true opendiscord.debug.visible = true
} }
const unloadMigrationContext = async () => { const unloadMigrationContext = async () => {
openticket.debug.visible = false opendiscord.debug.visible = false
await openticket.databases.loopAll((database,id) => {openticket.databases.remove(id)}) await opendiscord.databases.loopAll((database,id) => {opendiscord.databases.remove(id)})
await openticket.configs.loopAll((config,id) => {openticket.configs.remove(id)}) await opendiscord.configs.loopAll((config,id) => {opendiscord.configs.remove(id)})
await openticket.flags.loopAll((flag,id) => {openticket.flags.remove(id)}) await opendiscord.flags.loopAll((flag,id) => {opendiscord.flags.remove(id)})
openticket.debug.debug("-- MIGRATION CONTEXT END --") opendiscord.debug.debug("-- MIGRATION CONTEXT END --")
} }
const isMigrationRequired = async (): Promise<false|api.ODVersion> => { const isMigrationRequired = async (): Promise<false|api.ODVersion> => {
const rawVersion = await openticket.databases.get("openticket:global").get("openticket:last-version","openticket:version") const rawVersion = await opendiscord.databases.get("openticket:global").get("openticket:last-version","openticket:version")
if (!rawVersion) return false if (!rawVersion) return false
const version = api.ODVersion.fromString("openticket:last-version",rawVersion) const version = api.ODVersion.fromString("openticket:last-version",rawVersion)
if (openticket.versions.get("openticket:version").compare(version) == "higher"){ if (opendiscord.versions.get("openticket:version").compare(version) == "higher"){
return version return version
}else return false }else return false
} }
@@ -70,7 +70,7 @@ const loadAllVersionMigrations = async (lastVersion:api.ODVersion) => {
for (const migration of migrations){ for (const migration of migrations){
if (migration.version.compare(lastVersion) == "higher"){ if (migration.version.compare(lastVersion) == "higher"){
const success = await migration.migrate() const success = await migration.migrate()
if (success) openticket.log("Migrated data to "+migration.version.toString()+"!","debug",[ if (success) opendiscord.log("Migrated data to "+migration.version.toString()+"!","debug",[
{key:"success",value:success ? "true" : "false"} {key:"success",value:success ? "true" : "false"}
]) ])
} }
@@ -78,9 +78,9 @@ const loadAllVersionMigrations = async (lastVersion:api.ODVersion) => {
} }
const saveAllVersionsToDatabase = async () => { const saveAllVersionsToDatabase = async () => {
const globalDatabase = openticket.databases.get("openticket:global") const globalDatabase = opendiscord.databases.get("openticket:global")
await openticket.versions.loopAll(async (version,id) => { await opendiscord.versions.loopAll(async (version,id) => {
await globalDatabase.set("openticket:last-version",id.value,version.toString()) await globalDatabase.set("openticket:last-version",id.value,version.toString())
}) })
} }
+1 -1
View File
@@ -1,4 +1,4 @@
import {openticket, api, utilities} from "../../index" import {opendiscord, api, utilities} from "../../index"
export const migrations = [ export const migrations = [
//MIGRATE TO v4.0.0 //MIGRATE TO v4.0.0
+29 -29
View File
@@ -1,14 +1,14 @@
import {openticket, api, utilities} from "../../index" import {opendiscord, api, utilities} from "../../index"
import fs from "fs" import fs from "fs"
import { ODPluginError } from "../api/api" import { ODPluginError } from "../api/api"
export const loadAllPlugins = async () => { export const loadAllPlugins = async () => {
//start launching plugins //start launching plugins
openticket.log("Loading plugins...","system") opendiscord.log("Loading plugins...","system")
let initPluginError: boolean = false let initPluginError: boolean = false
if (!fs.existsSync("./plugins")){ if (!fs.existsSync("./plugins")){
openticket.log("Couldn't find ./plugins directory, canceling all plugin execution!","error") opendiscord.log("Couldn't find ./plugins directory, canceling all plugin execution!","error")
return return
} }
const plugins = fs.readdirSync("./plugins") const plugins = fs.readdirSync("./plugins")
@@ -16,12 +16,12 @@ export const loadAllPlugins = async () => {
//check & validate //check & validate
plugins.forEach(async (p) => { plugins.forEach(async (p) => {
//prechecks //prechecks
if (!fs.statSync("./plugins/"+p).isDirectory()) return openticket.log("Plugin is not a directory, canceling plugin execution...","plugin",[ if (!fs.statSync("./plugins/"+p).isDirectory()) return opendiscord.log("Plugin is not a directory, canceling plugin execution...","plugin",[
{key:"plugin",value:"./plugins/"+p} {key:"plugin",value:"./plugins/"+p}
]) ])
if (!fs.existsSync("./plugins/"+p+"/plugin.json")){ if (!fs.existsSync("./plugins/"+p+"/plugin.json")){
initPluginError = true initPluginError = true
openticket.log("Plugin doesn't have a plugin.json, canceling plugin execution...","plugin",[ opendiscord.log("Plugin doesn't have a plugin.json, canceling plugin execution...","plugin",[
{key:"plugin",value:"./plugins/"+p} {key:"plugin",value:"./plugins/"+p}
]) ])
return return
@@ -55,25 +55,25 @@ export const loadAllPlugins = async () => {
if (rawplugindata.id != p) throw new ODPluginError("Failed to load plugin, directory name is required to match the id") if (rawplugindata.id != p) throw new ODPluginError("Failed to load plugin, directory name is required to match the id")
if (openticket.plugins.exists(rawplugindata.id)) throw new ODPluginError("Failed to load plugin, this id already exists in another plugin") if (opendiscord.plugins.exists(rawplugindata.id)) throw new ODPluginError("Failed to load plugin, this id already exists in another plugin")
//plugin.json is valid => load plugin //plugin.json is valid => load plugin
const plugin = new api.ODPlugin(p,rawplugindata) const plugin = new api.ODPlugin(p,rawplugindata)
openticket.plugins.add(plugin) opendiscord.plugins.add(plugin)
}catch(e){ }catch(e){
//when any of the above errors happen, crash the bot when soft mode isn't enabled //when any of the above errors happen, crash the bot when soft mode isn't enabled
initPluginError = true initPluginError = true
openticket.log(e.message+", canceling plugin execution...","plugin",[ opendiscord.log(e.message+", canceling plugin execution...","plugin",[
{key:"path",value:"./plugins/"+p} {key:"path",value:"./plugins/"+p}
]) ])
openticket.log("You can see more about this error in the ./otdebug.txt file!","info") opendiscord.log("You can see more about this error in the ./otdebug.txt file!","info")
openticket.debugfile.writeText(e.stack) opendiscord.debugfile.writeText(e.stack)
//try to get some crashed plugin data //try to get some crashed plugin data
try{ try{
const rawplugindata: api.ODPluginData = JSON.parse(fs.readFileSync("./plugins/"+p+"/plugin.json").toString()) const rawplugindata: api.ODPluginData = JSON.parse(fs.readFileSync("./plugins/"+p+"/plugin.json").toString())
openticket.plugins.unknownCrashedPlugins.push({ opendiscord.plugins.unknownCrashedPlugins.push({
name:rawplugindata.name ?? "./plugins/"+p, name:rawplugindata.name ?? "./plugins/"+p,
description:(rawplugindata.details && rawplugindata.details.shortDescription) ? rawplugindata.details.shortDescription : "This plugin crashed :(", description:(rawplugindata.details && rawplugindata.details.shortDescription) ? rawplugindata.details.shortDescription : "This plugin crashed :(",
}) })
@@ -82,7 +82,7 @@ export const loadAllPlugins = async () => {
}) })
//sorted plugins (based on priority) //sorted plugins (based on priority)
const sortedPlugins = openticket.plugins.getAll().sort((a,b) => { const sortedPlugins = opendiscord.plugins.getAll().sort((a,b) => {
return (b.priority - a.priority) return (b.priority - a.priority)
}) })
@@ -95,8 +95,8 @@ export const loadAllPlugins = async () => {
sortedPlugins.filter((plugin) => plugin.enabled).forEach((plugin) => { sortedPlugins.filter((plugin) => plugin.enabled).forEach((plugin) => {
const from = plugin.id.value const from = plugin.id.value
plugin.dependenciesInstalled().forEach((missing) => missingDependencies.push({id:from,missing})) plugin.dependenciesInstalled().forEach((missing) => missingDependencies.push({id:from,missing}))
plugin.pluginsIncompatible(openticket.plugins).forEach((incompatible) => incompatibilities.push({from,to:incompatible})) plugin.pluginsIncompatible(opendiscord.plugins).forEach((incompatible) => incompatibilities.push({from,to:incompatible}))
plugin.pluginsInstalled(openticket.plugins).forEach((missing) => missingPlugins.push({id:from,missing})) plugin.pluginsInstalled(opendiscord.plugins).forEach((missing) => missingPlugins.push({id:from,missing}))
}) })
//handle all incompatibilities //handle all incompatibilities
@@ -105,18 +105,18 @@ export const loadAllPlugins = async () => {
if (alreadyLoggedCompatPlugins.includes(match.from) || alreadyLoggedCompatPlugins.includes(match.to)) return if (alreadyLoggedCompatPlugins.includes(match.from) || alreadyLoggedCompatPlugins.includes(match.to)) return
else alreadyLoggedCompatPlugins.push(match.from,match.to) else alreadyLoggedCompatPlugins.push(match.from,match.to)
const fromPlugin = openticket.plugins.get(match.from) const fromPlugin = opendiscord.plugins.get(match.from)
if (fromPlugin && !fromPlugin.crashed){ if (fromPlugin && !fromPlugin.crashed){
fromPlugin.crashed = true fromPlugin.crashed = true
fromPlugin.crashReason = "incompatible.plugin" fromPlugin.crashReason = "incompatible.plugin"
} }
const toPlugin = openticket.plugins.get(match.to) const toPlugin = opendiscord.plugins.get(match.to)
if (toPlugin && !toPlugin.crashed){ if (toPlugin && !toPlugin.crashed){
toPlugin.crashed = true toPlugin.crashed = true
toPlugin.crashReason = "incompatible.plugin" toPlugin.crashReason = "incompatible.plugin"
} }
openticket.log(`Incompatible plugins => "${match.from}" & "${match.to}", canceling plugin execution...`,"plugin",[ opendiscord.log(`Incompatible plugins => "${match.from}" & "${match.to}", canceling plugin execution...`,"plugin",[
{key:"path1",value:"./plugins/"+match.from}, {key:"path1",value:"./plugins/"+match.from},
{key:"path2",value:"./plugins/"+match.to} {key:"path2",value:"./plugins/"+match.to}
]) ])
@@ -125,13 +125,13 @@ export const loadAllPlugins = async () => {
//handle all missing dependencies //handle all missing dependencies
missingDependencies.forEach((match) => { missingDependencies.forEach((match) => {
const plugin = openticket.plugins.get(match.id) const plugin = opendiscord.plugins.get(match.id)
if (plugin && !plugin.crashed){ if (plugin && !plugin.crashed){
plugin.crashed = true plugin.crashed = true
plugin.crashReason = "missing.dependency" plugin.crashReason = "missing.dependency"
} }
openticket.log(`Missing npm dependency "${match.missing}", canceling plugin execution...`,"plugin",[ opendiscord.log(`Missing npm dependency "${match.missing}", canceling plugin execution...`,"plugin",[
{key:"path",value:"./plugins/"+match.id} {key:"path",value:"./plugins/"+match.id}
]) ])
initPluginError = true initPluginError = true
@@ -139,45 +139,45 @@ export const loadAllPlugins = async () => {
//handle all missing plugins //handle all missing plugins
missingPlugins.forEach((match) => { missingPlugins.forEach((match) => {
const plugin = openticket.plugins.get(match.id) const plugin = opendiscord.plugins.get(match.id)
if (plugin && !plugin.crashed){ if (plugin && !plugin.crashed){
plugin.crashed = true plugin.crashed = true
plugin.crashReason = "missing.plugin" plugin.crashReason = "missing.plugin"
} }
openticket.log(`Missing required plugin "${match.missing}", canceling plugin execution...`,"plugin",[ opendiscord.log(`Missing required plugin "${match.missing}", canceling plugin execution...`,"plugin",[
{key:"path",value:"./plugins/"+match.id} {key:"path",value:"./plugins/"+match.id}
]) ])
initPluginError = true initPluginError = true
}) })
//exit on error (when soft mode disabled) //exit on error (when soft mode disabled)
if (!openticket.defaults.getDefault("softPluginLoading") && initPluginError){ if (!opendiscord.defaults.getDefault("softPluginLoading") && initPluginError){
console.log("") console.log("")
openticket.log("Please fix all plugin errors above & try again!","error") opendiscord.log("Please fix all plugin errors above & try again!","error")
process.exit(1) process.exit(1)
} }
//preload all events required for every plugin //preload all events required for every plugin
for (const plugin of sortedPlugins){ for (const plugin of sortedPlugins){
if (plugin.enabled) plugin.data.events.forEach((event) => openticket.events.add(new api.ODEvent(event))) if (plugin.enabled) plugin.data.events.forEach((event) => opendiscord.events.add(new api.ODEvent(event)))
} }
//execute all working plugins //execute all working plugins
for (const plugin of sortedPlugins){ for (const plugin of sortedPlugins){
const status = await plugin.execute(openticket.debug,false) const status = await plugin.execute(opendiscord.debug,false)
//exit on error (when soft mode disabled) //exit on error (when soft mode disabled)
if (!status && !openticket.defaults.getDefault("softPluginLoading")){ if (!status && !opendiscord.defaults.getDefault("softPluginLoading")){
console.log("") console.log("")
openticket.log("Please fix all plugin errors above & try again!","error") opendiscord.log("Please fix all plugin errors above & try again!","error")
process.exit(1) process.exit(1)
} }
} }
for (const plugin of sortedPlugins){ for (const plugin of sortedPlugins){
if (plugin.enabled){ if (plugin.enabled){
openticket.debug.debug("Plugin \""+plugin.id.value+"\" loaded",[ opendiscord.debug.debug("Plugin \""+plugin.id.value+"\" loaded",[
{key:"status",value:(plugin.crashed ? "crashed" : "success")}, {key:"status",value:(plugin.crashed ? "crashed" : "success")},
{key:"crashReason",value:(plugin.crashed ? (plugin.crashReason ?? "/") : "/")}, {key:"crashReason",value:(plugin.crashed ? (plugin.crashReason ?? "/") : "/")},
{key:"author",value:plugin.details.author}, {key:"author",value:plugin.details.author},
@@ -185,7 +185,7 @@ export const loadAllPlugins = async () => {
{key:"priority",value:plugin.priority.toString()} {key:"priority",value:plugin.priority.toString()}
]) ])
}else{ }else{
openticket.debug.debug("Plugin \""+plugin.id.value+"\" disabled",[ opendiscord.debug.debug("Plugin \""+plugin.id.value+"\" disabled",[
{key:"author",value:plugin.details.author}, {key:"author",value:plugin.details.author},
{key:"version",value:plugin.version.toString()}, {key:"version",value:plugin.version.toString()},
{key:"priority",value:plugin.priority.toString()} {key:"priority",value:plugin.priority.toString()}
+18 -18
View File
@@ -1,26 +1,26 @@
import {openticket, api, utilities} from "../../index" import {opendiscord, api, utilities} from "../../index"
const generalConfig = openticket.configs.get("openticket:general") const generalConfig = opendiscord.configs.get("openticket:general")
export const loadAllConfigCheckers = async () => { export const loadAllConfigCheckers = async () => {
openticket.checkers.add(new api.ODChecker("openticket:general",openticket.checkers.storage,0,openticket.configs.get("openticket:general"),defaultGeneralStructure)) opendiscord.checkers.add(new api.ODChecker("openticket:general",opendiscord.checkers.storage,0,opendiscord.configs.get("openticket:general"),defaultGeneralStructure))
openticket.checkers.add(new api.ODChecker("openticket:options",openticket.checkers.storage,1,openticket.configs.get("openticket:options"),defaultOptionsStructure)) opendiscord.checkers.add(new api.ODChecker("openticket:options",opendiscord.checkers.storage,1,opendiscord.configs.get("openticket:options"),defaultOptionsStructure))
openticket.checkers.add(new api.ODChecker("openticket:panels",openticket.checkers.storage,0,openticket.configs.get("openticket:panels"),defaultPanelsStructure)) opendiscord.checkers.add(new api.ODChecker("openticket:panels",opendiscord.checkers.storage,0,opendiscord.configs.get("openticket:panels"),defaultPanelsStructure))
openticket.checkers.add(new api.ODChecker("openticket:questions",openticket.checkers.storage,2,openticket.configs.get("openticket:questions"),defaultQuestionsStructure)) opendiscord.checkers.add(new api.ODChecker("openticket:questions",opendiscord.checkers.storage,2,opendiscord.configs.get("openticket:questions"),defaultQuestionsStructure))
openticket.checkers.add(new api.ODChecker("openticket:transcripts",openticket.checkers.storage,0,openticket.configs.get("openticket:transcripts"),defaultTranscriptsStructure)) opendiscord.checkers.add(new api.ODChecker("openticket:transcripts",opendiscord.checkers.storage,0,opendiscord.configs.get("openticket:transcripts"),defaultTranscriptsStructure))
} }
export const loadAllConfigCheckerFunctions = async () => { export const loadAllConfigCheckerFunctions = async () => {
openticket.checkers.functions.add(new api.ODCheckerFunction("openticket:unused-options",defaultUnusedOptionsFunction)) opendiscord.checkers.functions.add(new api.ODCheckerFunction("openticket:unused-options",defaultUnusedOptionsFunction))
openticket.checkers.functions.add(new api.ODCheckerFunction("openticket:unused-questions",defaultUnusedQuestionsFunction)) opendiscord.checkers.functions.add(new api.ODCheckerFunction("openticket:unused-questions",defaultUnusedQuestionsFunction))
openticket.checkers.functions.add(new api.ODCheckerFunction("openticket:dropdown-options",defaultDropdownOptionsFunction)) opendiscord.checkers.functions.add(new api.ODCheckerFunction("openticket:dropdown-options",defaultDropdownOptionsFunction))
} }
export const loadAllConfigCheckerTranslations = async () => { export const loadAllConfigCheckerTranslations = async () => {
if ((generalConfig && generalConfig.data.system && generalConfig.data.system.useTranslatedConfigChecker) ? generalConfig.data.system.useTranslatedConfigChecker : false){ if ((generalConfig && generalConfig.data.system && generalConfig.data.system.useTranslatedConfigChecker) ? generalConfig.data.system.useTranslatedConfigChecker : false){
registerDefaultCheckerSystemTranslations(openticket.checkers.translation,openticket.languages) //translate checker system text registerDefaultCheckerSystemTranslations(opendiscord.checkers.translation,opendiscord.languages) //translate checker system text
registerDefaultCheckerMessageTranslations(openticket.checkers.translation,openticket.languages) //translate checker messages registerDefaultCheckerMessageTranslations(opendiscord.checkers.translation,opendiscord.languages) //translate checker messages
registerDefaultCheckerCustomTranslations(openticket.checkers.translation,openticket.languages) //translate custom checker messages registerDefaultCheckerCustomTranslations(opendiscord.checkers.translation,opendiscord.languages) //translate custom checker messages
} }
} }
@@ -170,7 +170,7 @@ const createPanelEmbedStructure = (id:api.ODValidId) => {
} }
function loadFromEnv(){ function loadFromEnv(){
const generalConfig = openticket.configs.get("openticket:general") const generalConfig = opendiscord.configs.get("openticket:general")
if (generalConfig.data && generalConfig.data.tokenFromENV && typeof generalConfig.data.tokenFromENV == "boolean") return generalConfig.data.tokenFromENV if (generalConfig.data && generalConfig.data.tokenFromENV && typeof generalConfig.data.tokenFromENV == "boolean") return generalConfig.data.tokenFromENV
else return false else return false
} }
@@ -185,7 +185,7 @@ export const defaultGeneralStructure = new api.ODCheckerObjectStructure("opentic
const lt = checker.locationTraceDeref(locationTrace) const lt = checker.locationTraceDeref(locationTrace)
if (typeof value != "string") return false if (typeof value != "string") return false
else if (value != "open-ticket-"+openticket.versions.get("openticket:version").toString()){ else if (value != "open-ticket-"+opendiscord.versions.get("openticket:version").toString()){
checker.createMessage("openticket:invalid-version","warning","The version specified in your config is invalid! Make sure you have updated it to the latest version!",lt,null,[],locationId,locationDocs) checker.createMessage("openticket:invalid-version","warning","The version specified in your config is invalid! Make sure you have updated it to the latest version!",lt,null,[],locationId,locationDocs)
return false return false
}else return true }else return true
@@ -201,7 +201,7 @@ export const defaultGeneralStructure = new api.ODCheckerObjectStructure("opentic
const lt = checker.locationTraceDeref(locationTrace) const lt = checker.locationTraceDeref(locationTrace)
if (typeof value != "string") return false if (typeof value != "string") return false
else if (!openticket.defaults.getDefault("languageList").includes(value)){ else if (!opendiscord.defaults.getDefault("languageList").includes(value)){
checker.createMessage("openticket:invalid-language","error","This is an invalid language!",lt,null,[],locationId,locationDocs) checker.createMessage("openticket:invalid-language","error","This is an invalid language!",lt,null,[],locationId,locationDocs)
return false return false
}else return true }else return true
@@ -582,10 +582,10 @@ export const defaultDropdownOptionsFunction = (manager:api.ODCheckerManager, fun
const panelList: string[] = manager.storage.get("openticket","panel-ids") const panelList: string[] = manager.storage.get("openticket","panel-ids")
if (!panelList) return {valid:true,messages:[]} if (!panelList) return {valid:true,messages:[]}
const panelConfig = openticket.configs.get("openticket:panels") const panelConfig = opendiscord.configs.get("openticket:panels")
if (!panelConfig) return {valid:true,messages:[]} if (!panelConfig) return {valid:true,messages:[]}
const optionConfig = openticket.configs.get("openticket:options") const optionConfig = opendiscord.configs.get("openticket:options")
if (!optionConfig) return {valid:true,messages:[]} if (!optionConfig) return {valid:true,messages:[]}
const final: api.ODCheckerMessage[] = [] const final: api.ODCheckerMessage[] = []
+98 -98
View File
@@ -1,13 +1,13 @@
import {openticket, api, utilities} from "../../index" import {opendiscord, api, utilities} from "../../index"
import * as discord from "discord.js" import * as discord from "discord.js"
const generalConfig = openticket.configs.get("openticket:general") const generalConfig = opendiscord.configs.get("openticket:general")
const globalDatabase = openticket.databases.get("openticket:global") const globalDatabase = opendiscord.databases.get("openticket:global")
const userDatabase = openticket.databases.get("openticket:users") const userDatabase = opendiscord.databases.get("openticket:users")
const ticketDatabase = openticket.databases.get("openticket:tickets") const ticketDatabase = opendiscord.databases.get("openticket:tickets")
const statsDatabase = openticket.databases.get("openticket:stats") const statsDatabase = opendiscord.databases.get("openticket:stats")
const optionDatabase = openticket.databases.get("openticket:options") const optionDatabase = opendiscord.databases.get("openticket:options")
const mainServer = openticket.client.mainServer const mainServer = opendiscord.client.mainServer
export const loadAllCode = async () => { export const loadAllCode = async () => {
if (!generalConfig || !mainServer || !globalDatabase || !userDatabase || !ticketDatabase || !statsDatabase || !optionDatabase) return if (!generalConfig || !mainServer || !globalDatabase || !userDatabase || !ticketDatabase || !statsDatabase || !optionDatabase) return
@@ -22,46 +22,46 @@ export const loadAllCode = async () => {
export const loadCommandErrorHandlingCode = async () => { export const loadCommandErrorHandlingCode = async () => {
//COMMAND ERROR HANDLING //COMMAND ERROR HANDLING
openticket.code.add(new api.ODCode("openticket:command-error-handling",14,() => { opendiscord.code.add(new api.ODCode("openticket:command-error-handling",14,() => {
//invalid/missing options //invalid/missing options
openticket.client.textCommands.onError(async (error) => { opendiscord.client.textCommands.onError(async (error) => {
if (error.msg.channel.type == discord.ChannelType.GroupDM) return if (error.msg.channel.type == discord.ChannelType.GroupDM) return
if (error.type == "invalid_option"){ if (error.type == "invalid_option"){
error.msg.channel.send((await openticket.builders.messages.getSafe("openticket:error-option-invalid").build("text",{guild:error.msg.guild,channel:error.msg.channel,user:error.msg.author,error})).message) error.msg.channel.send((await opendiscord.builders.messages.getSafe("openticket:error-option-invalid").build("text",{guild:error.msg.guild,channel:error.msg.channel,user:error.msg.author,error})).message)
}else if (error.type == "missing_option"){ }else if (error.type == "missing_option"){
error.msg.channel.send((await openticket.builders.messages.getSafe("openticket:error-option-missing").build("text",{guild:error.msg.guild,channel:error.msg.channel,user:error.msg.author,error})).message) error.msg.channel.send((await opendiscord.builders.messages.getSafe("openticket:error-option-missing").build("text",{guild:error.msg.guild,channel:error.msg.channel,user:error.msg.author,error})).message)
}else if (error.type == "unknown_command" && generalConfig.data.system.sendErrorOnUnknownCommand){ }else if (error.type == "unknown_command" && generalConfig.data.system.sendErrorOnUnknownCommand){
error.msg.channel.send((await openticket.builders.messages.getSafe("openticket:error-unknown-command").build("text",{guild:error.msg.guild,channel:error.msg.channel,user:error.msg.author,error})).message) error.msg.channel.send((await opendiscord.builders.messages.getSafe("openticket:error-unknown-command").build("text",{guild:error.msg.guild,channel:error.msg.channel,user:error.msg.author,error})).message)
} }
}) })
//responder timeout //responder timeout
openticket.responders.commands.setTimeoutErrorCallback(async (instance,source) => { opendiscord.responders.commands.setTimeoutErrorCallback(async (instance,source) => {
instance.reply(await openticket.builders.messages.getSafe("openticket:error-responder-timeout").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-responder-timeout").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user}))
},null) },null)
openticket.responders.buttons.setTimeoutErrorCallback(async (instance,source) => { opendiscord.responders.buttons.setTimeoutErrorCallback(async (instance,source) => {
instance.reply(await openticket.builders.messages.getSafe("openticket:error-responder-timeout").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-responder-timeout").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user}))
},null) },null)
openticket.responders.dropdowns.setTimeoutErrorCallback(async (instance,source) => { opendiscord.responders.dropdowns.setTimeoutErrorCallback(async (instance,source) => {
instance.reply(await openticket.builders.messages.getSafe("openticket:error-responder-timeout").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-responder-timeout").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user}))
},null) },null)
openticket.responders.modals.setTimeoutErrorCallback(async (instance,source) => { opendiscord.responders.modals.setTimeoutErrorCallback(async (instance,source) => {
if (!instance.channel){ if (!instance.channel){
instance.reply({id:new api.ODId("looks-like-we-got-an-error-here"), ephemeral:true, message:{ instance.reply({id:new api.ODId("looks-like-we-got-an-error-here"), ephemeral:true, message:{
content:":x: **Something went wrong while replying to this modal!**" content:":x: **Something went wrong while replying to this modal!**"
}}) }})
return return
} }
instance.reply(await openticket.builders.messages.getSafe("openticket:error-responder-timeout").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user})) instance.reply(await opendiscord.builders.messages.getSafe("openticket:error-responder-timeout").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user}))
},null) },null)
})) }))
} }
export const loadStartListeningInteractionsCode = async () => { export const loadStartListeningInteractionsCode = async () => {
//START LISTENING TO INTERACTIONS //START LISTENING TO INTERACTIONS
openticket.code.add(new api.ODCode("openticket:start-listening-interactions",13,() => { opendiscord.code.add(new api.ODCode("openticket:start-listening-interactions",13,() => {
openticket.client.slashCommands.startListeningToInteractions() opendiscord.client.slashCommands.startListeningToInteractions()
openticket.client.textCommands.startListeningToInteractions() opendiscord.client.textCommands.startListeningToInteractions()
})) }))
} }
@@ -69,7 +69,7 @@ export const loadDatabaseCleanersCode = async () => {
if (!mainServer) return if (!mainServer) return
//PANEL DATABASE CLEANER //PANEL DATABASE CLEANER
openticket.code.add(new api.ODCode("openticket:panel-database-cleaner",12,async () => { opendiscord.code.add(new api.ODCode("openticket:panel-database-cleaner",12,async () => {
const validPanels: string[] = [] const validPanels: string[] = []
//check global database for valid panel embeds //check global database for valid panel embeds
@@ -77,7 +77,7 @@ export const loadDatabaseCleanersCode = async () => {
if (!validPanels.includes(panel.key)){ if (!validPanels.includes(panel.key)){
try{ try{
const splittedId = panel.key.split("_") const splittedId = panel.key.split("_")
const message = await openticket.client.fetchGuildChannelMessage(mainServer,splittedId[0],splittedId[1]) const message = await opendiscord.client.fetchGuildChannelMessage(mainServer,splittedId[0],splittedId[1])
if (message) validPanels.push(panel.key) if (message) validPanels.push(panel.key)
}catch{} }catch{}
} }
@@ -91,7 +91,7 @@ export const loadDatabaseCleanersCode = async () => {
} }
//delete panel from database on delete //delete panel from database on delete
openticket.client.client.on("messageDelete",async (msg) => { opendiscord.client.client.on("messageDelete",async (msg) => {
if (await globalDatabase.exists("openticket:panel-update",msg.channel.id+"_"+msg.id)){ if (await globalDatabase.exists("openticket:panel-update",msg.channel.id+"_"+msg.id)){
await globalDatabase.delete("openticket:panel-update",msg.channel.id+"_"+msg.id) await globalDatabase.delete("openticket:panel-update",msg.channel.id+"_"+msg.id)
} }
@@ -99,21 +99,21 @@ export const loadDatabaseCleanersCode = async () => {
})) }))
//SUFFIX DATABASE CLEANER //SUFFIX DATABASE CLEANER
openticket.code.add(new api.ODCode("openticket:suffix-database-cleaner",11,async () => { opendiscord.code.add(new api.ODCode("openticket:suffix-database-cleaner",11,async () => {
const validSuffixCounters: string[] = [] const validSuffixCounters: string[] = []
const validSuffixHistories: string[] = [] const validSuffixHistories: string[] = []
//check global database for valid option suffix counters //check global database for valid option suffix counters
for (const counter of (await globalDatabase.getCategory("openticket:option-suffix-counter") ?? [])){ for (const counter of (await globalDatabase.getCategory("openticket:option-suffix-counter") ?? [])){
if (!validSuffixCounters.includes(counter.key)){ if (!validSuffixCounters.includes(counter.key)){
if (openticket.options.exists(counter.key)) validSuffixCounters.push(counter.key) if (opendiscord.options.exists(counter.key)) validSuffixCounters.push(counter.key)
} }
} }
//check global database for valid option suffix histories //check global database for valid option suffix histories
for (const history of (await globalDatabase.getCategory("openticket:option-suffix-history") ?? [])){ for (const history of (await globalDatabase.getCategory("openticket:option-suffix-history") ?? [])){
if (!validSuffixHistories.includes(history.key)){ if (!validSuffixHistories.includes(history.key)){
if (openticket.options.exists(history.key)) validSuffixHistories.push(history.key) if (opendiscord.options.exists(history.key)) validSuffixHistories.push(history.key)
} }
} }
@@ -133,13 +133,13 @@ export const loadDatabaseCleanersCode = async () => {
})) }))
//OPTION DATABASE CLEANER //OPTION DATABASE CLEANER
openticket.code.add(new api.ODCode("openticket:option-database-cleaner",10,async () => { opendiscord.code.add(new api.ODCode("openticket:option-database-cleaner",10,async () => {
//delete all unused options (async) //delete all unused options (async)
for (const option of (await optionDatabase.getCategory("openticket:used-option") ?? [])){ for (const option of (await optionDatabase.getCategory("openticket:used-option") ?? [])){
if (!openticket.options.exists(option.key)){ if (!opendiscord.options.exists(option.key)){
//remove because option isn't loaded into memory (0 tickets require it) //remove because option isn't loaded into memory (0 tickets require it)
await optionDatabase.delete("openticket:used-option",option.key) await optionDatabase.delete("openticket:used-option",option.key)
}else if (!openticket.tickets.getAll().some((ticket) => ticket.option.id.value == option.key)){ }else if (!opendiscord.tickets.getAll().some((ticket) => ticket.option.id.value == option.key)){
//remove when loaded into memory (0 tickets require it) //remove when loaded into memory (0 tickets require it)
await optionDatabase.delete("openticket:used-option",option.key) await optionDatabase.delete("openticket:used-option",option.key)
} }
@@ -147,7 +147,7 @@ export const loadDatabaseCleanersCode = async () => {
})) }))
//USER DATABASE CLEANER (full async/parallel because it takes a lot of time) //USER DATABASE CLEANER (full async/parallel because it takes a lot of time)
openticket.code.add(new api.ODCode("openticket:user-database-cleaner",9,() => { opendiscord.code.add(new api.ODCode("openticket:user-database-cleaner",9,() => {
utilities.runAsync(async () => { utilities.runAsync(async () => {
const validUsers: string[] = [] const validUsers: string[] = []
@@ -191,7 +191,7 @@ export const loadDatabaseCleanersCode = async () => {
}) })
//delete user from database on leave //delete user from database on leave
openticket.client.client.on("guildMemberRemove",async (member) => { opendiscord.client.client.on("guildMemberRemove",async (member) => {
if (member.guild.id != mainServer.id) return if (member.guild.id != mainServer.id) return
//remove unused user //remove unused user
@@ -213,14 +213,14 @@ export const loadDatabaseCleanersCode = async () => {
})) }))
//TICKET DATABASE CLEANER //TICKET DATABASE CLEANER
openticket.code.add(new api.ODCode("openticket:ticket-database-cleaner",8,async () => { opendiscord.code.add(new api.ODCode("openticket:ticket-database-cleaner",8,async () => {
const validTickets: string[] = [] const validTickets: string[] = []
//check ticket database for valid tickets //check ticket database for valid tickets
for (const ticket of (await ticketDatabase.getAll())){ for (const ticket of (await ticketDatabase.getAll())){
if (!validTickets.includes(ticket.key)){ if (!validTickets.includes(ticket.key)){
try{ try{
const channel = await openticket.client.fetchGuildTextChannel(mainServer,ticket.key) const channel = await opendiscord.client.fetchGuildTextChannel(mainServer,ticket.key)
if (channel) validTickets.push(channel.id) if (channel) validTickets.push(channel.id)
}catch{} }catch{}
} }
@@ -231,7 +231,7 @@ export const loadDatabaseCleanersCode = async () => {
if (stat.category.startsWith("openticket:ticket_")){ if (stat.category.startsWith("openticket:ticket_")){
if (!validTickets.includes(stat.key)){ if (!validTickets.includes(stat.key)){
try{ try{
const channel = await openticket.client.fetchGuildTextChannel(mainServer,stat.key) const channel = await opendiscord.client.fetchGuildTextChannel(mainServer,stat.key)
if (channel) validTickets.push(channel.id) if (channel) validTickets.push(channel.id)
}catch{} }catch{}
} }
@@ -242,7 +242,7 @@ export const loadDatabaseCleanersCode = async () => {
for (const ticket of (await ticketDatabase.getAll())){ for (const ticket of (await ticketDatabase.getAll())){
if (!validTickets.includes(ticket.key)){ if (!validTickets.includes(ticket.key)){
await ticketDatabase.delete(ticket.category,ticket.key) await ticketDatabase.delete(ticket.category,ticket.key)
openticket.tickets.remove(ticket.key) opendiscord.tickets.remove(ticket.key)
} }
} }
@@ -256,14 +256,14 @@ export const loadDatabaseCleanersCode = async () => {
} }
//delete ticket from database on delete //delete ticket from database on delete
openticket.client.client.on("channelDelete",async (channel) => { opendiscord.client.client.on("channelDelete",async (channel) => {
if (channel.isDMBased() || channel.guild.id != mainServer.id) return if (channel.isDMBased() || channel.guild.id != mainServer.id) return
//remove unused ticket //remove unused ticket
for (const ticket of (await ticketDatabase.getAll())){ for (const ticket of (await ticketDatabase.getAll())){
if (ticket.key == channel.id){ if (ticket.key == channel.id){
await ticketDatabase.delete(ticket.category,ticket.key) await ticketDatabase.delete(ticket.category,ticket.key)
openticket.tickets.remove(ticket.key) opendiscord.tickets.remove(ticket.key)
} }
} }
@@ -281,13 +281,13 @@ export const loadDatabaseCleanersCode = async () => {
export const loadPanelAutoUpdateCode = async () => { export const loadPanelAutoUpdateCode = async () => {
//PANEL AUTO UPDATE //PANEL AUTO UPDATE
openticket.code.add(new api.ODCode("openticket:panel-auto-update",7,async () => { opendiscord.code.add(new api.ODCode("openticket:panel-auto-update",7,async () => {
const globalDatabase = openticket.databases.get("openticket:global") const globalDatabase = opendiscord.databases.get("openticket:global")
const panelIds = await globalDatabase.getCategory("openticket:panel-update") ?? [] const panelIds = await globalDatabase.getCategory("openticket:panel-update") ?? []
if (!mainServer) return if (!mainServer) return
for (const panelId of panelIds){ for (const panelId of panelIds){
const panel = openticket.panels.get(panelId.value) const panel = opendiscord.panels.get(panelId.value)
//panel doesn't exist anymore in config and needs to be removed //panel doesn't exist anymore in config and needs to be removed
if (!panel){ if (!panel){
@@ -297,13 +297,13 @@ export const loadPanelAutoUpdateCode = async () => {
try{ try{
const splittedId = panelId.key.split("_") const splittedId = panelId.key.split("_")
const channel = await openticket.client.fetchGuildTextChannel(mainServer,splittedId[0]) const channel = await opendiscord.client.fetchGuildTextChannel(mainServer,splittedId[0])
if (!channel) return if (!channel) return
const message = await openticket.client.fetchGuildChannelMessage(mainServer,channel,splittedId[1]) const message = await opendiscord.client.fetchGuildChannelMessage(mainServer,channel,splittedId[1])
if (!message || !message.editable) return if (!message || !message.editable) return
message.edit((await openticket.builders.messages.getSafe("openticket:panel").build("auto-update",{guild:mainServer,channel,user:openticket.client.client.user,panel})).message) message.edit((await opendiscord.builders.messages.getSafe("openticket:panel").build("auto-update",{guild:mainServer,channel,user:opendiscord.client.client.user,panel})).message)
openticket.log("Panel in server got auto-updated!","info",[ opendiscord.log("Panel in server got auto-updated!","info",[
{key:"channelid",value:splittedId[0]}, {key:"channelid",value:splittedId[0]},
{key:"messageid",value:splittedId[1]}, {key:"messageid",value:splittedId[1]},
{key:"panel",value:panelId.value} {key:"panel",value:panelId.value}
@@ -315,10 +315,10 @@ export const loadPanelAutoUpdateCode = async () => {
export const loadDatabaseSaversCode = async () => { export const loadDatabaseSaversCode = async () => {
//TICKET SAVER //TICKET SAVER
openticket.code.add(new api.ODCode("openticket:ticket-saver",6,() => { opendiscord.code.add(new api.ODCode("openticket:ticket-saver",6,() => {
const mainVersion = openticket.versions.get("openticket:version") const mainVersion = opendiscord.versions.get("openticket:version")
openticket.tickets.onAdd(async (ticket) => { opendiscord.tickets.onAdd(async (ticket) => {
await ticketDatabase.set("openticket:ticket",ticket.id.value,ticket.toJson(mainVersion)) await ticketDatabase.set("openticket:ticket",ticket.id.value,ticket.toJson(mainVersion))
//add option to database if non-existent //add option to database if non-existent
@@ -326,7 +326,7 @@ export const loadDatabaseSaversCode = async () => {
await optionDatabase.set("openticket:used-option",ticket.option.id.value,ticket.option.toJson(mainVersion)) await optionDatabase.set("openticket:used-option",ticket.option.id.value,ticket.option.toJson(mainVersion))
} }
}) })
openticket.tickets.onChange(async (ticket) => { opendiscord.tickets.onChange(async (ticket) => {
await ticketDatabase.set("openticket:ticket",ticket.id.value,ticket.toJson(mainVersion)) await ticketDatabase.set("openticket:ticket",ticket.id.value,ticket.toJson(mainVersion))
//add option to database if non-existent //add option to database if non-existent
@@ -335,42 +335,42 @@ export const loadDatabaseSaversCode = async () => {
} }
//delete all unused options on ticket move //delete all unused options on ticket move
for (const option of openticket.options.getAll()){ for (const option of opendiscord.options.getAll()){
if (await optionDatabase.exists("openticket:used-option",option.id.value) && !openticket.tickets.getAll().some((ticket) => ticket.option.id.value == option.id.value)){ if (await optionDatabase.exists("openticket:used-option",option.id.value) && !opendiscord.tickets.getAll().some((ticket) => ticket.option.id.value == option.id.value)){
await optionDatabase.delete("openticket:used-option",option.id.value) await optionDatabase.delete("openticket:used-option",option.id.value)
} }
} }
}) })
openticket.tickets.onRemove(async (ticket) => { opendiscord.tickets.onRemove(async (ticket) => {
await ticketDatabase.delete("openticket:ticket",ticket.id.value) await ticketDatabase.delete("openticket:ticket",ticket.id.value)
//remove option from database if unused //remove option from database if unused
if (!openticket.tickets.getAll().some((ticket) => ticket.option.id.value == ticket.option.id.value)){ if (!opendiscord.tickets.getAll().some((ticket) => ticket.option.id.value == ticket.option.id.value)){
await optionDatabase.delete("openticket:used-option",ticket.option.id.value) await optionDatabase.delete("openticket:used-option",ticket.option.id.value)
} }
}) })
})) }))
//BLACKLIST SAVER //BLACKLIST SAVER
openticket.code.add(new api.ODCode("openticket:blacklist-saver",5,() => { opendiscord.code.add(new api.ODCode("openticket:blacklist-saver",5,() => {
openticket.blacklist.onAdd(async (blacklist) => { opendiscord.blacklist.onAdd(async (blacklist) => {
await userDatabase.set("openticket:blacklist",blacklist.id.value,blacklist.reason) await userDatabase.set("openticket:blacklist",blacklist.id.value,blacklist.reason)
}) })
openticket.blacklist.onChange(async (blacklist) => { opendiscord.blacklist.onChange(async (blacklist) => {
await userDatabase.set("openticket:blacklist",blacklist.id.value,blacklist.reason) await userDatabase.set("openticket:blacklist",blacklist.id.value,blacklist.reason)
}) })
openticket.blacklist.onRemove(async (blacklist) => { opendiscord.blacklist.onRemove(async (blacklist) => {
await userDatabase.delete("openticket:blacklist",blacklist.id.value) await userDatabase.delete("openticket:blacklist",blacklist.id.value)
}) })
})) }))
//AUTO ROLE ON JOIN //AUTO ROLE ON JOIN
openticket.code.add(new api.ODCode("openticket:auto-role-on-join",4,() => { opendiscord.code.add(new api.ODCode("openticket:auto-role-on-join",4,() => {
openticket.client.client.on("guildMemberAdd",async (member) => { opendiscord.client.client.on("guildMemberAdd",async (member) => {
for (const option of openticket.options.getAll()){ for (const option of opendiscord.options.getAll()){
if (option instanceof api.ODRoleOption && option.get("openticket:add-on-join").value){ if (option instanceof api.ODRoleOption && option.get("openticket:add-on-join").value){
//add these roles on user join //add these roles on user join
await openticket.actions.get("openticket:reaction-role").run("panel-button",{guild:member.guild,user:member.user,option,overwriteMode:"add"}) await opendiscord.actions.get("openticket:reaction-role").run("panel-button",{guild:member.guild,user:member.user,option,overwriteMode:"add"})
} }
} }
}) })
@@ -379,11 +379,11 @@ export const loadDatabaseSaversCode = async () => {
const loadAutoCode = () => { const loadAutoCode = () => {
//AUTOCLOSE TIMEOUT //AUTOCLOSE TIMEOUT
openticket.code.add(new api.ODCode("openticket:autoclose-timeout",3,() => { opendiscord.code.add(new api.ODCode("openticket:autoclose-timeout",3,() => {
setInterval(async () => { setInterval(async () => {
let count = 0 let count = 0
for (const ticket of openticket.tickets.getAll()){ for (const ticket of opendiscord.tickets.getAll()){
const channel = await openticket.tickets.getTicketChannel(ticket) const channel = await opendiscord.tickets.getTicketChannel(ticket)
if (!channel) return if (!channel) return
const lastMessage = (await channel.messages.fetch({limit:5})).first() const lastMessage = (await channel.messages.fetch({limit:5})).first()
if (lastMessage && !ticket.get("openticket:closed").value){ if (lastMessage && !ticket.get("openticket:closed").value){
@@ -395,26 +395,26 @@ const loadAutoCode = () => {
const time = hours*60*60*1000 //hours in milliseconds const time = hours*60*60*1000 //hours in milliseconds
if (enabled && (new Date().getTime() - lastMessage.createdTimestamp) >= time){ if (enabled && (new Date().getTime() - lastMessage.createdTimestamp) >= time){
//autoclose ticket //autoclose ticket
await openticket.actions.get("openticket:close-ticket").run("autoclose",{guild:channel.guild,channel,user:openticket.client.client.user,ticket,reason:"Autoclose",sendMessage:false}) await opendiscord.actions.get("openticket:close-ticket").run("autoclose",{guild:channel.guild,channel,user:opendiscord.client.client.user,ticket,reason:"Autoclose",sendMessage:false})
await channel.send((await openticket.builders.messages.getSafe("openticket:autoclose-message").build("timeout",{guild:channel.guild,channel,user:openticket.client.client.user,ticket})).message) await channel.send((await opendiscord.builders.messages.getSafe("openticket:autoclose-message").build("timeout",{guild:channel.guild,channel,user:opendiscord.client.client.user,ticket})).message)
count++ count++
await openticket.stats.get("openticket:global").setStat("openticket:tickets-autoclosed",1,"increase") await opendiscord.stats.get("openticket:global").setStat("openticket:tickets-autoclosed",1,"increase")
} }
} }
} }
openticket.debug.debug("Finished autoclose timeout cycle!",[ opendiscord.debug.debug("Finished autoclose timeout cycle!",[
{key:"interval",value:openticket.defaults.getDefault("autocloseCheckInterval").toString()}, {key:"interval",value:opendiscord.defaults.getDefault("autocloseCheckInterval").toString()},
{key:"closed",value:count.toString()} {key:"closed",value:count.toString()}
]) ])
},openticket.defaults.getDefault("autocloseCheckInterval")) },opendiscord.defaults.getDefault("autocloseCheckInterval"))
})) }))
//AUTOCLOSE LEAVE //AUTOCLOSE LEAVE
openticket.code.add(new api.ODCode("openticket:autoclose-leave",2,() => { opendiscord.code.add(new api.ODCode("openticket:autoclose-leave",2,() => {
openticket.client.client.on("guildMemberRemove",async (member) => { opendiscord.client.client.on("guildMemberRemove",async (member) => {
for (const ticket of openticket.tickets.getAll()){ for (const ticket of opendiscord.tickets.getAll()){
if (ticket.get("openticket:opened-by").value == member.id){ if (ticket.get("openticket:opened-by").value == member.id){
const channel = await openticket.tickets.getTicketChannel(ticket) const channel = await opendiscord.tickets.getTicketChannel(ticket)
if (!channel) return if (!channel) return
//ticket has been created by this user //ticket has been created by this user
const disableOnClaim = ticket.option.get("openticket:autoclose-disable-claim").value && ticket.get("openticket:claimed").value const disableOnClaim = ticket.option.get("openticket:autoclose-disable-claim").value && ticket.get("openticket:claimed").value
@@ -422,9 +422,9 @@ const loadAutoCode = () => {
if (enabled){ if (enabled){
//autoclose ticket //autoclose ticket
await openticket.actions.get("openticket:close-ticket").run("autoclose",{guild:channel.guild,channel,user:openticket.client.client.user,ticket,reason:"Autoclose",sendMessage:false}) await opendiscord.actions.get("openticket:close-ticket").run("autoclose",{guild:channel.guild,channel,user:opendiscord.client.client.user,ticket,reason:"Autoclose",sendMessage:false})
await channel.send((await openticket.builders.messages.getSafe("openticket:autoclose-message").build("leave",{guild:channel.guild,channel,user:openticket.client.client.user,ticket})).message) await channel.send((await opendiscord.builders.messages.getSafe("openticket:autoclose-message").build("leave",{guild:channel.guild,channel,user:opendiscord.client.client.user,ticket})).message)
await openticket.stats.get("openticket:global").setStat("openticket:tickets-autoclosed",1,"increase") await opendiscord.stats.get("openticket:global").setStat("openticket:tickets-autoclosed",1,"increase")
} }
} }
} }
@@ -432,11 +432,11 @@ const loadAutoCode = () => {
})) }))
//AUTODELETE TIMEOUT //AUTODELETE TIMEOUT
openticket.code.add(new api.ODCode("openticket:autodelete-timeout",1,() => { opendiscord.code.add(new api.ODCode("openticket:autodelete-timeout",1,() => {
setInterval(async () => { setInterval(async () => {
let count = 0 let count = 0
for (const ticket of openticket.tickets.getAll()){ for (const ticket of opendiscord.tickets.getAll()){
const channel = await openticket.tickets.getTicketChannel(ticket) const channel = await opendiscord.tickets.getTicketChannel(ticket)
if (!channel) return if (!channel) return
const lastMessage = (await channel.messages.fetch({limit:5})).first() const lastMessage = (await channel.messages.fetch({limit:5})).first()
if (lastMessage){ if (lastMessage){
@@ -448,26 +448,26 @@ const loadAutoCode = () => {
const time = days*24*60*60*1000 //days in milliseconds const time = days*24*60*60*1000 //days in milliseconds
if (enabled && (new Date().getTime() - lastMessage.createdTimestamp) >= time){ if (enabled && (new Date().getTime() - lastMessage.createdTimestamp) >= time){
//autodelete ticket //autodelete ticket
await channel.send((await openticket.builders.messages.getSafe("openticket:autodelete-message").build("timeout",{guild:channel.guild,channel,user:openticket.client.client.user,ticket})).message) await channel.send((await opendiscord.builders.messages.getSafe("openticket:autodelete-message").build("timeout",{guild:channel.guild,channel,user:opendiscord.client.client.user,ticket})).message)
await openticket.actions.get("openticket:delete-ticket").run("autodelete",{guild:channel.guild,channel,user:openticket.client.client.user,ticket,reason:"Autodelete",sendMessage:false,withoutTranscript:false}) await opendiscord.actions.get("openticket:delete-ticket").run("autodelete",{guild:channel.guild,channel,user:opendiscord.client.client.user,ticket,reason:"Autodelete",sendMessage:false,withoutTranscript:false})
count++ count++
await openticket.stats.get("openticket:global").setStat("openticket:tickets-autodeleted",1,"increase") await opendiscord.stats.get("openticket:global").setStat("openticket:tickets-autodeleted",1,"increase")
} }
} }
} }
openticket.debug.debug("Finished autodelete timeout cycle!",[ opendiscord.debug.debug("Finished autodelete timeout cycle!",[
{key:"interval",value:openticket.defaults.getDefault("autodeleteCheckInterval").toString()}, {key:"interval",value:opendiscord.defaults.getDefault("autodeleteCheckInterval").toString()},
{key:"deleted",value:count.toString()} {key:"deleted",value:count.toString()}
]) ])
},openticket.defaults.getDefault("autodeleteCheckInterval")) },opendiscord.defaults.getDefault("autodeleteCheckInterval"))
})) }))
//AUTODELETE LEAVE //AUTODELETE LEAVE
openticket.code.add(new api.ODCode("openticket:autodelete-leave",0,() => { opendiscord.code.add(new api.ODCode("openticket:autodelete-leave",0,() => {
openticket.client.client.on("guildMemberRemove",async (member) => { opendiscord.client.client.on("guildMemberRemove",async (member) => {
for (const ticket of openticket.tickets.getAll()){ for (const ticket of opendiscord.tickets.getAll()){
if (ticket.get("openticket:opened-by").value == member.id){ if (ticket.get("openticket:opened-by").value == member.id){
const channel = await openticket.tickets.getTicketChannel(ticket) const channel = await opendiscord.tickets.getTicketChannel(ticket)
if (!channel) return if (!channel) return
//ticket has been created by this user //ticket has been created by this user
const disableOnClaim = ticket.option.get("openticket:autodelete-disable-claim").value && ticket.get("openticket:claimed").value const disableOnClaim = ticket.option.get("openticket:autodelete-disable-claim").value && ticket.get("openticket:claimed").value
@@ -475,9 +475,9 @@ const loadAutoCode = () => {
if (enabled){ if (enabled){
//autodelete ticket //autodelete ticket
await channel.send((await openticket.builders.messages.getSafe("openticket:autodelete-message").build("leave",{guild:channel.guild,channel,user:openticket.client.client.user,ticket})).message) await channel.send((await opendiscord.builders.messages.getSafe("openticket:autodelete-message").build("leave",{guild:channel.guild,channel,user:opendiscord.client.client.user,ticket})).message)
await openticket.actions.get("openticket:delete-ticket").run("autodelete",{guild:channel.guild,channel,user:openticket.client.client.user,ticket,reason:"Autodelete",sendMessage:false,withoutTranscript:false}) await opendiscord.actions.get("openticket:delete-ticket").run("autodelete",{guild:channel.guild,channel,user:opendiscord.client.client.user,ticket,reason:"Autodelete",sendMessage:false,withoutTranscript:false})
await openticket.stats.get("openticket:global").setStat("openticket:tickets-autodeleted",1,"increase") await opendiscord.stats.get("openticket:global").setStat("openticket:tickets-autodeleted",1,"increase")
} }
} }
} }
@@ -485,8 +485,8 @@ const loadAutoCode = () => {
})) }))
//TICKET ANTI BUSY //TICKET ANTI BUSY
openticket.code.add(new api.ODCode("openticket:ticket-anti-busy",-1,() => { opendiscord.code.add(new api.ODCode("openticket:ticket-anti-busy",-1,() => {
for (const ticket of openticket.tickets.getAll()){ for (const ticket of opendiscord.tickets.getAll()){
//free tickets from corruption due to openticket:busy variable //free tickets from corruption due to openticket:busy variable
ticket.get("openticket:busy").value = false ticket.get("openticket:busy").value = false
} }
+10 -10
View File
@@ -1,11 +1,11 @@
import {openticket, api, utilities} from "../../index" import {opendiscord, api, utilities} from "../../index"
import * as discord from "discord.js" import * as discord from "discord.js"
const lang = openticket.languages const lang = opendiscord.languages
export const loadAllSlashCommands = async () => { export const loadAllSlashCommands = async () => {
const commands = openticket.client.slashCommands const commands = opendiscord.client.slashCommands
const generalConfig = openticket.configs.get("openticket:general") const generalConfig = opendiscord.configs.get("openticket:general")
if (!generalConfig) return if (!generalConfig) return
const act = discord.ApplicationCommandType const act = discord.ApplicationCommandType
@@ -15,13 +15,13 @@ export const loadAllSlashCommands = async () => {
//create panel choices //create panel choices
const panelChoices : {name:string, value:string}[] = [] const panelChoices : {name:string, value:string}[] = []
openticket.configs.get("openticket:panels").data.forEach((panel) => { opendiscord.configs.get("openticket:panels").data.forEach((panel) => {
panelChoices.push({name:panel.name, value:panel.id}) panelChoices.push({name:panel.name, value:panel.id})
}) })
//create ticket choices //create ticket choices
const ticketChoices : {name:string, value:string}[] = [] const ticketChoices : {name:string, value:string}[] = []
openticket.configs.get("openticket:options").data.forEach((option) => { opendiscord.configs.get("openticket:options").data.forEach((option) => {
if (option.type != "ticket") return if (option.type != "ticket") return
ticketChoices.push({name:option.name, value:option.id}) ticketChoices.push({name:option.name, value:option.id})
}) })
@@ -585,8 +585,8 @@ export const loadAllSlashCommands = async () => {
} }
export const loadAllTextCommands = async () => { export const loadAllTextCommands = async () => {
const commands = openticket.client.textCommands const commands = opendiscord.client.textCommands
const generalConfig = openticket.configs.get("openticket:general") const generalConfig = opendiscord.configs.get("openticket:general")
if (!generalConfig) return if (!generalConfig) return
if (!generalConfig.data.textCommands) return if (!generalConfig.data.textCommands) return
@@ -594,13 +594,13 @@ export const loadAllTextCommands = async () => {
//create panel choices //create panel choices
const panelChoices : string[] = [] const panelChoices : string[] = []
openticket.configs.get("openticket:panels").data.forEach((panel) => { opendiscord.configs.get("openticket:panels").data.forEach((panel) => {
panelChoices.push(panel.id) panelChoices.push(panel.id)
}) })
//create ticket choices //create ticket choices
const ticketChoices : string[] = [] const ticketChoices : string[] = []
openticket.configs.get("openticket:options").data.forEach((option) => { opendiscord.configs.get("openticket:options").data.forEach((option) => {
if (option.type != "ticket") return if (option.type != "ticket") return
ticketChoices.push(option.id) ticketChoices.push(option.id)
}) })
+7 -7
View File
@@ -1,12 +1,12 @@
import {openticket, api, utilities} from "../../index" import {opendiscord, api, utilities} from "../../index"
export const loadAllConfigs = async () => { export const loadAllConfigs = async () => {
const devconfigFlag = openticket.flags.get("openticket:dev-config") const devconfigFlag = opendiscord.flags.get("openticket:dev-config")
const isDevconfig = devconfigFlag ? devconfigFlag.value : false const isDevconfig = devconfigFlag ? devconfigFlag.value : false
openticket.configs.add(new api.ODJsonConfig("openticket:general","general.json",(isDevconfig) ? "./devconfig/" : "./config/")) opendiscord.configs.add(new api.ODJsonConfig("openticket:general","general.json",(isDevconfig) ? "./devconfig/" : "./config/"))
openticket.configs.add(new api.ODJsonConfig("openticket:options","options.json",(isDevconfig) ? "./devconfig/" : "./config/")) opendiscord.configs.add(new api.ODJsonConfig("openticket:options","options.json",(isDevconfig) ? "./devconfig/" : "./config/"))
openticket.configs.add(new api.ODJsonConfig("openticket:panels","panels.json",(isDevconfig) ? "./devconfig/" : "./config/")) opendiscord.configs.add(new api.ODJsonConfig("openticket:panels","panels.json",(isDevconfig) ? "./devconfig/" : "./config/"))
openticket.configs.add(new api.ODJsonConfig("openticket:questions","questions.json",(isDevconfig) ? "./devconfig/" : "./config/")) opendiscord.configs.add(new api.ODJsonConfig("openticket:questions","questions.json",(isDevconfig) ? "./devconfig/" : "./config/"))
openticket.configs.add(new api.ODJsonConfig("openticket:transcripts","transcripts.json",(isDevconfig) ? "./devconfig/" : "./config/")) opendiscord.configs.add(new api.ODJsonConfig("openticket:transcripts","transcripts.json",(isDevconfig) ? "./devconfig/" : "./config/"))
} }
+3 -3
View File
@@ -1,7 +1,7 @@
import {openticket, api, utilities} from "../../index" import {opendiscord, api, utilities} from "../../index"
export const loadAllCooldowns = async () => { export const loadAllCooldowns = async () => {
await openticket.options.loopAll((option) => { await opendiscord.options.loopAll((option) => {
if (!(option instanceof api.ODTicketOption)) return if (!(option instanceof api.ODTicketOption)) return
loadTicketOptionCooldown(option) loadTicketOptionCooldown(option)
}) })
@@ -12,6 +12,6 @@ export const loadTicketOptionCooldown = (option:api.ODTicketOption) => {
//option has cooldown //option has cooldown
const minutes = option.get("openticket:cooldown-minutes").value const minutes = option.get("openticket:cooldown-minutes").value
const milliseconds = minutes*60000 const milliseconds = minutes*60000
openticket.cooldowns.add(new api.ODTimeoutCooldown("openticket:option-cooldown_"+option.id.value,milliseconds)) opendiscord.cooldowns.add(new api.ODTimeoutCooldown("openticket:option-cooldown_"+option.id.value,milliseconds))
} }
} }
+7 -7
View File
@@ -1,15 +1,15 @@
import {openticket, api, utilities} from "../../index" import {opendiscord, api, utilities} from "../../index"
import * as fjs from "formatted-json-stringify" import * as fjs from "formatted-json-stringify"
const devdatabaseFlag = openticket.flags.get("openticket:dev-database") const devdatabaseFlag = opendiscord.flags.get("openticket:dev-database")
const isDevdatabase = devdatabaseFlag ? devdatabaseFlag.value : false const isDevdatabase = devdatabaseFlag ? devdatabaseFlag.value : false
export const loadAllDatabases = async () => { export const loadAllDatabases = async () => {
openticket.databases.add(defaultGlobalDatabase) opendiscord.databases.add(defaultGlobalDatabase)
openticket.databases.add(defaultStatsDatabase) opendiscord.databases.add(defaultStatsDatabase)
openticket.databases.add(defaultTicketsDatabase) opendiscord.databases.add(defaultTicketsDatabase)
openticket.databases.add(defaultUsersDatabase) opendiscord.databases.add(defaultUsersDatabase)
openticket.databases.add(defaultOptionsDatabase) opendiscord.databases.add(defaultOptionsDatabase)
} }
const defaultInlineFormatter = new fjs.ArrayFormatter(null,true,new fjs.ObjectFormatter(null,false,[ const defaultInlineFormatter = new fjs.ArrayFormatter(null,true,new fjs.ObjectFormatter(null,false,[
+2 -2
View File
@@ -1,4 +1,4 @@
import {openticket, api, utilities} from "../../index" import {opendiscord, api, utilities} from "../../index"
export const loadAllEvents = () => { export const loadAllEvents = () => {
const eventList: (keyof api.ODEventIds_Default)[] = [ const eventList: (keyof api.ODEventIds_Default)[] = [
@@ -245,5 +245,5 @@ export const loadAllEvents = () => {
//ready //ready
"onReadyForUsage" "onReadyForUsage"
] ]
eventList.forEach((event) => openticket.events.add(new api.ODEvent(event))) eventList.forEach((event) => opendiscord.events.add(new api.ODEvent(event)))
} }
+15 -15
View File
@@ -1,18 +1,18 @@
import {openticket, api, utilities} from "../../index" import {opendiscord, api, utilities} from "../../index"
export const loadAllFlags = async () => { export const loadAllFlags = async () => {
openticket.flags.add(new api.ODFlag("openticket:no-migration","No Migration","Disable Open Ticket data migration on update!","--no-migration",["-nm"])) opendiscord.flags.add(new api.ODFlag("openticket:no-migration","No Migration","Disable Open Ticket data migration on update!","--no-migration",["-nm"]))
openticket.flags.add(new api.ODFlag("openticket:dev-config","Developer Config","Use the configs in /devconfig/ instead of /config/!","--dev-config",["-dc"])) opendiscord.flags.add(new api.ODFlag("openticket:dev-config","Developer Config","Use the configs in /devconfig/ instead of /config/!","--dev-config",["-dc"]))
openticket.flags.add(new api.ODFlag("openticket:dev-database","Developer Database","Use the databases in /devdatabase/ instead of /database/!","--dev-database",["-nd"])) opendiscord.flags.add(new api.ODFlag("openticket:dev-database","Developer Database","Use the databases in /devdatabase/ instead of /database/!","--dev-database",["-nd"]))
openticket.flags.add(new api.ODFlag("openticket:debug","Debug Mode","Couldn't you find the error? Try to check this out!","--debug",["-d"])) opendiscord.flags.add(new api.ODFlag("openticket:debug","Debug Mode","Couldn't you find the error? Try to check this out!","--debug",["-d"]))
openticket.flags.add(new api.ODFlag("openticket:crash","Crash On Error","Crash the bot on an unknown error!","--crash",["-cr"])) opendiscord.flags.add(new api.ODFlag("openticket:crash","Crash On Error","Crash the bot on an unknown error!","--crash",["-cr"]))
openticket.flags.add(new api.ODFlag("openticket:no-transcripts","No HTML Transcripts","Disable uploading HTML transcripts (for debugging)","--no-transcripts",["-nt"])) opendiscord.flags.add(new api.ODFlag("openticket:no-transcripts","No HTML Transcripts","Disable uploading HTML transcripts (for debugging)","--no-transcripts",["-nt"]))
openticket.flags.add(new api.ODFlag("openticket:no-checker","No Config Checker","Disable the Config Checker (for debugging)","--no-checker",["-nc"])) opendiscord.flags.add(new api.ODFlag("openticket:no-checker","No Config Checker","Disable the Config Checker (for debugging)","--no-checker",["-nc"]))
openticket.flags.add(new api.ODFlag("openticket:checker","Full Config Checker","Render the Config Checker with extra details!","--checker",["-c"])) opendiscord.flags.add(new api.ODFlag("openticket:checker","Full Config Checker","Render the Config Checker with extra details!","--checker",["-c"]))
openticket.flags.add(new api.ODFlag("openticket:no-easter","No Easter Eggs","Disable little Open Ticket easter eggs hidden in the bot!","--no-easter",["-ne"])) opendiscord.flags.add(new api.ODFlag("openticket:no-easter","No Easter Eggs","Disable little Open Ticket easter eggs hidden in the bot!","--no-easter",["-ne"]))
openticket.flags.add(new api.ODFlag("openticket:no-plugins","No Plugins","Disable all Open Ticket plugins!","--no-plugins",["-np"])) opendiscord.flags.add(new api.ODFlag("openticket:no-plugins","No Plugins","Disable all Open Ticket plugins!","--no-plugins",["-np"]))
openticket.flags.add(new api.ODFlag("openticket:soft-plugins","Soft Plugins","Don't crash the bot when a plugin crashes!","--soft-plugins",["-sp"])) opendiscord.flags.add(new api.ODFlag("openticket:soft-plugins","Soft Plugins","Don't crash the bot when a plugin crashes!","--soft-plugins",["-sp"]))
openticket.flags.add(new api.ODFlag("openticket:force-slash-update","Force Slash Update","Force update all slash commands.","--force-slash",["-fs"])) opendiscord.flags.add(new api.ODFlag("openticket:force-slash-update","Force Slash Update","Force update all slash commands.","--force-slash",["-fs"]))
openticket.flags.add(new api.ODFlag("openticket:no-compile","No Compile","Disable compilation of plugins & bot before starting.","--no-compile",[])) opendiscord.flags.add(new api.ODFlag("openticket:no-compile","No Compile","Disable compilation of plugins & bot before starting.","--no-compile",[]))
openticket.flags.add(new api.ODFlag("openticket:compile-only","Compile Only","This description will never be shown because the bot wouldn't run when this flag is enabled :)","--compile-only",[])) opendiscord.flags.add(new api.ODFlag("openticket:compile-only","Compile Only","This description will never be shown because the bot wouldn't run when this flag is enabled :)","--compile-only",[]))
} }
+5 -5
View File
@@ -1,9 +1,9 @@
import {openticket, api, utilities} from "../../index" import {opendiscord, api, utilities} from "../../index"
const lang = openticket.languages const lang = opendiscord.languages
export const loadAllHelpMenuCategories = async () => { export const loadAllHelpMenuCategories = async () => {
const helpmenu = openticket.helpmenu const helpmenu = opendiscord.helpmenu
helpmenu.add(new api.ODHelpMenuCategory("openticket:general",5,utilities.emojiTitle("📎","General Commands"))) //TODO TRANSLATION!!! helpmenu.add(new api.ODHelpMenuCategory("openticket:general",5,utilities.emojiTitle("📎","General Commands"))) //TODO TRANSLATION!!!
helpmenu.add(new api.ODHelpMenuCategory("openticket:ticket-basic",4,utilities.emojiTitle("🎫","Basic Ticket Commands"))) //TODO TRANSLATION!!! helpmenu.add(new api.ODHelpMenuCategory("openticket:ticket-basic",4,utilities.emojiTitle("🎫","Basic Ticket Commands"))) //TODO TRANSLATION!!!
@@ -15,8 +15,8 @@ export const loadAllHelpMenuCategories = async () => {
} }
export const loadAllHelpMenuComponents = async () => { export const loadAllHelpMenuComponents = async () => {
const helpmenu = openticket.helpmenu const helpmenu = opendiscord.helpmenu
const generalConfig = openticket.configs.get("openticket:general") const generalConfig = opendiscord.configs.get("openticket:general")
if (!generalConfig) return if (!generalConfig) return
const prefix = generalConfig.data.prefix const prefix = generalConfig.data.prefix
+24 -24
View File
@@ -1,30 +1,30 @@
import {openticket, api, utilities} from "../../index" import {opendiscord, api, utilities} from "../../index"
export const loadAllLanguages = async () => { export const loadAllLanguages = async () => {
//register languages //register languages
openticket.languages.add(new api.ODJsonLanguage("openticket:custom","custom.json")) opendiscord.languages.add(new api.ODJsonLanguage("openticket:custom","custom.json"))
openticket.languages.add(new api.ODJsonLanguage("openticket:english","english.json")) opendiscord.languages.add(new api.ODJsonLanguage("openticket:english","english.json"))
openticket.languages.add(new api.ODJsonLanguage("openticket:dutch","dutch.json")) opendiscord.languages.add(new api.ODJsonLanguage("openticket:dutch","dutch.json"))
openticket.languages.add(new api.ODJsonLanguage("openticket:portuguese","portuguese.json")) opendiscord.languages.add(new api.ODJsonLanguage("openticket:portuguese","portuguese.json"))
openticket.languages.add(new api.ODJsonLanguage("openticket:czech","czech.json")) opendiscord.languages.add(new api.ODJsonLanguage("openticket:czech","czech.json"))
openticket.languages.add(new api.ODJsonLanguage("openticket:german","german.json")) opendiscord.languages.add(new api.ODJsonLanguage("openticket:german","german.json"))
openticket.languages.add(new api.ODJsonLanguage("openticket:catalan","catalan.json")) opendiscord.languages.add(new api.ODJsonLanguage("openticket:catalan","catalan.json"))
openticket.languages.add(new api.ODJsonLanguage("openticket:hungarian","hungarian.json")) opendiscord.languages.add(new api.ODJsonLanguage("openticket:hungarian","hungarian.json"))
openticket.languages.add(new api.ODJsonLanguage("openticket:spanish","spanish.json")) opendiscord.languages.add(new api.ODJsonLanguage("openticket:spanish","spanish.json"))
openticket.languages.add(new api.ODJsonLanguage("openticket:romanian","romanian.json")) opendiscord.languages.add(new api.ODJsonLanguage("openticket:romanian","romanian.json"))
openticket.languages.add(new api.ODJsonLanguage("openticket:ukrainian","ukrainian.json")) opendiscord.languages.add(new api.ODJsonLanguage("openticket:ukrainian","ukrainian.json"))
openticket.languages.add(new api.ODJsonLanguage("openticket:indonesian","indonesian.json")) opendiscord.languages.add(new api.ODJsonLanguage("openticket:indonesian","indonesian.json"))
openticket.languages.add(new api.ODJsonLanguage("openticket:italian","italian.json")) opendiscord.languages.add(new api.ODJsonLanguage("openticket:italian","italian.json"))
openticket.languages.add(new api.ODJsonLanguage("openticket:estonian","estonian.json")) opendiscord.languages.add(new api.ODJsonLanguage("openticket:estonian","estonian.json"))
openticket.languages.add(new api.ODJsonLanguage("openticket:finnish","finnish.json")) opendiscord.languages.add(new api.ODJsonLanguage("openticket:finnish","finnish.json"))
openticket.languages.add(new api.ODJsonLanguage("openticket:danish","danish.json")) opendiscord.languages.add(new api.ODJsonLanguage("openticket:danish","danish.json"))
openticket.languages.add(new api.ODJsonLanguage("openticket:thai","thai.json")) opendiscord.languages.add(new api.ODJsonLanguage("openticket:thai","thai.json"))
openticket.languages.add(new api.ODJsonLanguage("openticket:turkish","turkish.json")) opendiscord.languages.add(new api.ODJsonLanguage("openticket:turkish","turkish.json"))
openticket.languages.add(new api.ODJsonLanguage("openticket:french","french.json")) opendiscord.languages.add(new api.ODJsonLanguage("openticket:french","french.json"))
openticket.languages.add(new api.ODJsonLanguage("openticket:arabic","arabic.json")) opendiscord.languages.add(new api.ODJsonLanguage("openticket:arabic","arabic.json"))
openticket.languages.add(new api.ODJsonLanguage("openticket:hindi","hindi.json")) opendiscord.languages.add(new api.ODJsonLanguage("openticket:hindi","hindi.json"))
openticket.languages.add(new api.ODJsonLanguage("openticket:lithuanian","lithuanian.json")) opendiscord.languages.add(new api.ODJsonLanguage("openticket:lithuanian","lithuanian.json"))
openticket.languages.add(new api.ODJsonLanguage("openticket:polish","polish.json")) opendiscord.languages.add(new api.ODJsonLanguage("openticket:polish","polish.json"))
/** How to add more languages? /** How to add more languages?
* - Register the language to the manager (see above) * - Register the language to the manager (see above)
+2 -2
View File
@@ -1,6 +1,6 @@
import {openticket, api, utilities} from "../../index" import {opendiscord, api, utilities} from "../../index"
export const loadAllLiveStatusSources = async () => { export const loadAllLiveStatusSources = async () => {
//DEFAULT DJDJ DEV //DEFAULT DJDJ DEV
openticket.livestatus.add(new api.ODLiveStatusUrlSource("openticket:default-djdj-dev","https://raw.githubusercontent.com/DJj123dj/open-ticket/refs/heads/dev/src/livestatus.json")) opendiscord.livestatus.add(new api.ODLiveStatusUrlSource("openticket:default-djdj-dev","https://raw.githubusercontent.com/DJj123dj/open-ticket/refs/heads/dev/src/livestatus.json"))
} }
+22 -22
View File
@@ -1,76 +1,76 @@
import {openticket, api, utilities} from "../../index" import {opendiscord, api, utilities} from "../../index"
import * as discord from "discord.js" import * as discord from "discord.js"
export const loadAllPermissions = async () => { export const loadAllPermissions = async () => {
const generalConfig = openticket.configs.get("openticket:general") const generalConfig = opendiscord.configs.get("openticket:general")
if (!generalConfig) return if (!generalConfig) return
const mainServer = openticket.client.mainServer const mainServer = opendiscord.client.mainServer
if (!mainServer) return if (!mainServer) return
//DEVELOPER & OWNER //DEVELOPER & OWNER
const developer = (await openticket.client.client.application.fetch()).owner const developer = (await opendiscord.client.client.application.fetch()).owner
if (developer instanceof discord.User){ if (developer instanceof discord.User){
openticket.permissions.add(new api.ODPermission("openticket:developer-"+developer.id,"global-user","developer",developer)) opendiscord.permissions.add(new api.ODPermission("openticket:developer-"+developer.id,"global-user","developer",developer))
}else if (developer instanceof discord.Team){ }else if (developer instanceof discord.Team){
developer.members.forEach((member) => { developer.members.forEach((member) => {
openticket.permissions.add(new api.ODPermission("openticket:developer-"+member.user.id,"global-user","developer",member.user)) opendiscord.permissions.add(new api.ODPermission("openticket:developer-"+member.user.id,"global-user","developer",member.user))
}) })
} }
const owner = (await mainServer.members.fetch(mainServer.ownerId)).user const owner = (await mainServer.members.fetch(mainServer.ownerId)).user
openticket.permissions.add(new api.ODPermission("openticket:owner-"+owner.id,"global-user","owner",owner)) opendiscord.permissions.add(new api.ODPermission("openticket:owner-"+owner.id,"global-user","owner",owner))
//GLOBAL ADMINS //GLOBAL ADMINS
generalConfig.data.globalAdmins.forEach(async (admin) => { generalConfig.data.globalAdmins.forEach(async (admin) => {
const role = await mainServer.roles.fetch(admin) const role = await mainServer.roles.fetch(admin)
if (!role) return openticket.log("Unable to register permission for global admin!","error",[ if (!role) return opendiscord.log("Unable to register permission for global admin!","error",[
{key:"roleid",value:admin} {key:"roleid",value:admin}
]) ])
openticket.permissions.add(new api.ODPermission("openticket:global-admin-"+admin,"global-role","admin",role)) opendiscord.permissions.add(new api.ODPermission("openticket:global-admin-"+admin,"global-role","admin",role))
}) })
//TICKET ADMINS //TICKET ADMINS
await openticket.tickets.loopAll(async (ticket) => { await opendiscord.tickets.loopAll(async (ticket) => {
try { try {
const channel = await openticket.client.fetchGuildTextChannel(mainServer,ticket.id.value) const channel = await opendiscord.client.fetchGuildTextChannel(mainServer,ticket.id.value)
if (!channel) return if (!channel) return
const admins = ticket.option.exists("openticket:admins") ? ticket.option.get("openticket:admins").value : [] const admins = ticket.option.exists("openticket:admins") ? ticket.option.get("openticket:admins").value : []
const readAdmins = ticket.option.exists("openticket:admins-readonly") ? ticket.option.get("openticket:admins-readonly").value : [] const readAdmins = ticket.option.exists("openticket:admins-readonly") ? ticket.option.get("openticket:admins-readonly").value : []
for (const admin of admins.concat(readAdmins)){ for (const admin of admins.concat(readAdmins)){
if (openticket.permissions.exists("openticket:ticket-admin_"+ticket.id.value+"_"+admin)) return if (opendiscord.permissions.exists("openticket:ticket-admin_"+ticket.id.value+"_"+admin)) return
const role = await mainServer.roles.fetch(admin) const role = await mainServer.roles.fetch(admin)
if (!role) return openticket.log("Unable to register permission for ticket admin!","error",[ if (!role) return opendiscord.log("Unable to register permission for ticket admin!","error",[
{key:"roleid",value:admin} {key:"roleid",value:admin}
]) ])
openticket.permissions.add(new api.ODPermission("openticket:ticket-admin_"+ticket.id.value+"_"+admin,"channel-role","support",role,channel)) opendiscord.permissions.add(new api.ODPermission("openticket:ticket-admin_"+ticket.id.value+"_"+admin,"channel-role","support",role,channel))
} }
}catch(err){ }catch(err){
process.emit("uncaughtException",err) process.emit("uncaughtException",err)
openticket.log("Ticket Admin Loading Permissions Error (see above)","error") opendiscord.log("Ticket Admin Loading Permissions Error (see above)","error")
} }
}) })
} }
export const addTicketPermissions = async (ticket:api.ODTicket) => { export const addTicketPermissions = async (ticket:api.ODTicket) => {
const mainServer = openticket.client.mainServer const mainServer = opendiscord.client.mainServer
if (!mainServer) return if (!mainServer) return
const channel = await openticket.client.fetchGuildTextChannel(mainServer,ticket.id.value) const channel = await opendiscord.client.fetchGuildTextChannel(mainServer,ticket.id.value)
if (!channel) return if (!channel) return
const admins = ticket.option.exists("openticket:admins") ? ticket.option.get("openticket:admins").value : [] const admins = ticket.option.exists("openticket:admins") ? ticket.option.get("openticket:admins").value : []
const readAdmins = ticket.option.exists("openticket:admins-readonly") ? ticket.option.get("openticket:admins-readonly").value : [] const readAdmins = ticket.option.exists("openticket:admins-readonly") ? ticket.option.get("openticket:admins-readonly").value : []
for (const admin of admins.concat(readAdmins)){ for (const admin of admins.concat(readAdmins)){
if (openticket.permissions.exists("openticket:ticket-admin_"+ticket.id.value+"_"+admin)) return if (opendiscord.permissions.exists("openticket:ticket-admin_"+ticket.id.value+"_"+admin)) return
const role = await mainServer.roles.fetch(admin) const role = await mainServer.roles.fetch(admin)
if (!role) return openticket.log("Unable to register permission for ticket admin!","error",[ if (!role) return opendiscord.log("Unable to register permission for ticket admin!","error",[
{key:"roleid",value:admin} {key:"roleid",value:admin}
]) ])
openticket.permissions.add(new api.ODPermission("openticket:ticket-admin_"+ticket.id.value+"_"+admin,"channel-role","support",role,channel)) opendiscord.permissions.add(new api.ODPermission("openticket:ticket-admin_"+ticket.id.value+"_"+admin,"channel-role","support",role,channel))
} }
} }
@@ -79,7 +79,7 @@ export const removeTicketPermissions = async (ticket:api.ODTicket) => {
const readAdmins = ticket.option.exists("openticket:admins-readonly") ? ticket.option.get("openticket:admins-readonly").value : [] const readAdmins = ticket.option.exists("openticket:admins-readonly") ? ticket.option.get("openticket:admins-readonly").value : []
admins.concat(readAdmins).forEach(async (admin) => { admins.concat(readAdmins).forEach(async (admin) => {
if (!openticket.permissions.exists("openticket:ticket-admin_"+ticket.id.value+"_"+admin)) return if (!opendiscord.permissions.exists("openticket:ticket-admin_"+ticket.id.value+"_"+admin)) return
openticket.permissions.remove("openticket:ticket-admin_"+ticket.id.value+"_"+admin) opendiscord.permissions.remove("openticket:ticket-admin_"+ticket.id.value+"_"+admin)
}) })
} }
+5 -5
View File
@@ -1,14 +1,14 @@
import {openticket, api, utilities} from "../../index" import {opendiscord, api, utilities} from "../../index"
export const loadAllPosts = async () => { export const loadAllPosts = async () => {
const generalConfig = openticket.configs.get("openticket:general") const generalConfig = opendiscord.configs.get("openticket:general")
if (!generalConfig) return if (!generalConfig) return
const transcriptConfig = openticket.configs.get("openticket:transcripts") const transcriptConfig = opendiscord.configs.get("openticket:transcripts")
if (!transcriptConfig) return if (!transcriptConfig) return
//LOGS CHANNEL //LOGS CHANNEL
if (generalConfig.data.system.logs.enabled) openticket.posts.add(new api.ODPost("openticket:logs",generalConfig.data.system.logs.channel)) if (generalConfig.data.system.logs.enabled) opendiscord.posts.add(new api.ODPost("openticket:logs",generalConfig.data.system.logs.channel))
//TRANSCRIPTS CHANNEL //TRANSCRIPTS CHANNEL
if (transcriptConfig.data.general.enabled && transcriptConfig.data.general.enableChannel) openticket.posts.add(new api.ODPost("openticket:transcripts",transcriptConfig.data.general.channel)) if (transcriptConfig.data.general.enabled && transcriptConfig.data.general.enableChannel) opendiscord.posts.add(new api.ODPost("openticket:transcripts",transcriptConfig.data.general.channel))
} }
+11 -11
View File
@@ -1,4 +1,4 @@
import {openticket, api, utilities} from "../../index" import {opendiscord, api, utilities} from "../../index"
export const loadAllProgressBarRenderers = async () => { export const loadAllProgressBarRenderers = async () => {
const defaultSettings: api.ODProgressBarRenderer_DefaultSettings = { const defaultSettings: api.ODProgressBarRenderer_DefaultSettings = {
@@ -25,43 +25,43 @@ export const loadAllProgressBarRenderers = async () => {
//VALUE RENDERER //VALUE RENDERER
const valueRendererSettings: api.ODProgressBarRenderer_DefaultSettings = {...defaultSettings} const valueRendererSettings: api.ODProgressBarRenderer_DefaultSettings = {...defaultSettings}
valueRendererSettings.labelType = "value" valueRendererSettings.labelType = "value"
openticket.progressbars.renderers.add(new api.ODProgressBarRenderer_Default("openticket:value-renderer",valueRendererSettings)) opendiscord.progressbars.renderers.add(new api.ODProgressBarRenderer_Default("openticket:value-renderer",valueRendererSettings))
//FRACTION RENDERER //FRACTION RENDERER
const fractionRendererSettings: api.ODProgressBarRenderer_DefaultSettings = {...defaultSettings} const fractionRendererSettings: api.ODProgressBarRenderer_DefaultSettings = {...defaultSettings}
fractionRendererSettings.labelType = "fraction" fractionRendererSettings.labelType = "fraction"
openticket.progressbars.renderers.add(new api.ODProgressBarRenderer_Default("openticket:fraction-renderer",fractionRendererSettings)) opendiscord.progressbars.renderers.add(new api.ODProgressBarRenderer_Default("openticket:fraction-renderer",fractionRendererSettings))
//PERCENTAGE RENDERER //PERCENTAGE RENDERER
const percentageRendererSettings: api.ODProgressBarRenderer_DefaultSettings = {...defaultSettings} const percentageRendererSettings: api.ODProgressBarRenderer_DefaultSettings = {...defaultSettings}
percentageRendererSettings.labelType = "percentage" percentageRendererSettings.labelType = "percentage"
openticket.progressbars.renderers.add(new api.ODProgressBarRenderer_Default("openticket:percentage-renderer",percentageRendererSettings)) opendiscord.progressbars.renderers.add(new api.ODProgressBarRenderer_Default("openticket:percentage-renderer",percentageRendererSettings))
//TIME MS RENDERER //TIME MS RENDERER
const timeMsRendererSettings: api.ODProgressBarRenderer_DefaultSettings = {...defaultSettings} const timeMsRendererSettings: api.ODProgressBarRenderer_DefaultSettings = {...defaultSettings}
timeMsRendererSettings.labelType = "time-ms" timeMsRendererSettings.labelType = "time-ms"
openticket.progressbars.renderers.add(new api.ODProgressBarRenderer_Default("openticket:time-ms-renderer",timeMsRendererSettings)) opendiscord.progressbars.renderers.add(new api.ODProgressBarRenderer_Default("openticket:time-ms-renderer",timeMsRendererSettings))
//TIME SEC RENDERER //TIME SEC RENDERER
const timeSecRendererSettings: api.ODProgressBarRenderer_DefaultSettings = {...defaultSettings} const timeSecRendererSettings: api.ODProgressBarRenderer_DefaultSettings = {...defaultSettings}
timeSecRendererSettings.labelType = "time-sec" timeSecRendererSettings.labelType = "time-sec"
openticket.progressbars.renderers.add(new api.ODProgressBarRenderer_Default("openticket:time-sec-renderer",timeSecRendererSettings)) opendiscord.progressbars.renderers.add(new api.ODProgressBarRenderer_Default("openticket:time-sec-renderer",timeSecRendererSettings))
//TIME MIN RENDERER //TIME MIN RENDERER
const timeMinRendererSettings: api.ODProgressBarRenderer_DefaultSettings = {...defaultSettings} const timeMinRendererSettings: api.ODProgressBarRenderer_DefaultSettings = {...defaultSettings}
timeMinRendererSettings.labelType = "time-min" timeMinRendererSettings.labelType = "time-min"
openticket.progressbars.renderers.add(new api.ODProgressBarRenderer_Default("openticket:time-min-renderer",timeMinRendererSettings)) opendiscord.progressbars.renderers.add(new api.ODProgressBarRenderer_Default("openticket:time-min-renderer",timeMinRendererSettings))
} }
export const loadAllProgressBars = async () => { export const loadAllProgressBars = async () => {
const fractRenderer = openticket.progressbars.renderers.get("openticket:fraction-renderer") const fractRenderer = opendiscord.progressbars.renderers.get("openticket:fraction-renderer")
//SLASH COMMAND REMOVE (doesn't have correct amount yet) //SLASH COMMAND REMOVE (doesn't have correct amount yet)
openticket.progressbars.add(new api.ODManualProgressBar("openticket:slash-command-remove",fractRenderer.withAdditionalSettings({filledBarColor:"red"}),0,"max",null,"Commands Removed")) opendiscord.progressbars.add(new api.ODManualProgressBar("openticket:slash-command-remove",fractRenderer.withAdditionalSettings({filledBarColor:"red"}),0,"max",null,"Commands Removed"))
//SLASH COMMAND CREATE (doesn't have correct amount yet) //SLASH COMMAND CREATE (doesn't have correct amount yet)
openticket.progressbars.add(new api.ODManualProgressBar("openticket:slash-command-create",fractRenderer.withAdditionalSettings({filledBarColor:"green"}),0,"max",null,"Commands Created")) opendiscord.progressbars.add(new api.ODManualProgressBar("openticket:slash-command-create",fractRenderer.withAdditionalSettings({filledBarColor:"green"}),0,"max",null,"Commands Created"))
//SLASH COMMAND UPDATE (doesn't have correct amount yet) //SLASH COMMAND UPDATE (doesn't have correct amount yet)
openticket.progressbars.add(new api.ODManualProgressBar("openticket:slash-command-update",fractRenderer.withAdditionalSettings({filledBarColor:"openticket"}),0,"max",null,"Commands Updated")) opendiscord.progressbars.add(new api.ODManualProgressBar("openticket:slash-command-update",fractRenderer.withAdditionalSettings({filledBarColor:"openticket"}),0,"max",null,"Commands Updated"))
} }
+17 -17
View File
@@ -1,9 +1,9 @@
import {openticket, api, utilities} from "../../index" import {opendiscord, api, utilities} from "../../index"
import ansis from "ansis" import ansis from "ansis"
export const loadAllStartScreenComponents = async () => { export const loadAllStartScreenComponents = async () => {
//LOGO //LOGO
openticket.startscreen.add(new api.ODStartScreenLogoComponent("openticket:logo",1000,[ opendiscord.startscreen.add(new api.ODStartScreenLogoComponent("openticket:logo",1000,[
" ██████╗ ██████╗ ███████╗███╗ ██╗ ████████╗██╗ ██████╗██╗ ██╗███████╗████████╗ ", " ██████╗ ██████╗ ███████╗███╗ ██╗ ████████╗██╗ ██████╗██╗ ██╗███████╗████████╗ ",
" ██╔═══██╗██╔══██╗██╔════╝████╗ ██║ ╚══██╔══╝██║██╔════╝██║ ██╔╝██╔════╝╚══██╔══╝ ", " ██╔═══██╗██╔══██╗██╔════╝████╗ ██║ ╚══██╔══╝██║██╔════╝██║ ██╔╝██╔════╝╚══██╔══╝ ",
" ██║ ██║██████╔╝█████╗ ██╔██╗ ██║ ██║ ██║██║ █████╔╝ █████╗ ██║ ", " ██║ ██║██████╔╝█████╗ ██╔██╗ ██║ ██║ ██║██║ █████╔╝ █████╗ ██║ ",
@@ -13,35 +13,35 @@ export const loadAllStartScreenComponents = async () => {
],true,false)) ],true,false))
//HEADER //HEADER
const currentLanguageMetadata = openticket.languages.getLanguageMetadata() const currentLanguageMetadata = opendiscord.languages.getLanguageMetadata()
openticket.startscreen.add(new api.ODStartScreenHeaderComponent("openticket:header",999,[ opendiscord.startscreen.add(new api.ODStartScreenHeaderComponent("openticket:header",999,[
{key:"Version",value:openticket.versions.get("openticket:version").toString()}, {key:"Version",value:opendiscord.versions.get("openticket:version").toString()},
{key:"Support",value:"https://discord.dj-dj.be"}, {key:"Support",value:"https://discord.dj-dj.be"},
{key:"Language",value:(currentLanguageMetadata ? currentLanguageMetadata.language : "Unknown")} {key:"Language",value:(currentLanguageMetadata ? currentLanguageMetadata.language : "Unknown")}
]," - ",{ ]," - ",{
align:"center", align:"center",
width:openticket.startscreen.get("openticket:logo") width:opendiscord.startscreen.get("openticket:logo")
})) }))
//FLAGS //FLAGS
openticket.startscreen.add(new api.ODStartScreenFlagsCategoryComponent("openticket:flags",4,openticket.flags.getAll())) opendiscord.startscreen.add(new api.ODStartScreenFlagsCategoryComponent("openticket:flags",4,opendiscord.flags.getAll()))
//PLUGINS //PLUGINS
openticket.startscreen.add(new api.ODStartScreenPluginsCategoryComponent("openticket:plugins",3,openticket.plugins.getAll(),openticket.plugins.unknownCrashedPlugins)) opendiscord.startscreen.add(new api.ODStartScreenPluginsCategoryComponent("openticket:plugins",3,opendiscord.plugins.getAll(),opendiscord.plugins.unknownCrashedPlugins))
//STATS //STATS
openticket.startscreen.add(new api.ODStartScreenPropertiesCategoryComponent("openticket:stats",2,"startup info",[ opendiscord.startscreen.add(new api.ODStartScreenPropertiesCategoryComponent("openticket:stats",2,"startup info",[
{key:"status",value:ansis.bold(openticket.client.activity.getStatusType())+openticket.client.activity.text+" ("+openticket.client.activity.status+")"}, {key:"status",value:ansis.bold(opendiscord.client.activity.getStatusType())+opendiscord.client.activity.text+" ("+opendiscord.client.activity.status+")"},
{key:"options",value:"loaded "+ansis.bold(openticket.options.getLength().toString())+" options!"}, {key:"options",value:"loaded "+ansis.bold(opendiscord.options.getLength().toString())+" options!"},
{key:"panels",value:"loaded "+ansis.bold(openticket.panels.getLength().toString())+" panels!"}, {key:"panels",value:"loaded "+ansis.bold(opendiscord.panels.getLength().toString())+" panels!"},
{key:"tickets",value:"loaded "+ansis.bold(openticket.tickets.getLength().toString())+" tickets!"}, {key:"tickets",value:"loaded "+ansis.bold(opendiscord.tickets.getLength().toString())+" tickets!"},
{key:"roles",value:"loaded "+ansis.bold(openticket.roles.getLength().toString())+" roles!"}, {key:"roles",value:"loaded "+ansis.bold(opendiscord.roles.getLength().toString())+" roles!"},
{key:"help",value:ansis.bold(openticket.configs.get("openticket:general").data.prefix+"help")+" or "+ansis.bold("/help")} {key:"help",value:ansis.bold(opendiscord.configs.get("openticket:general").data.prefix+"help")+" or "+ansis.bold("/help")}
])) ]))
//LIVESTATUS //LIVESTATUS
openticket.startscreen.add(new api.ODStartScreenLiveStatusCategoryComponent("openticket:livestatus",1,openticket.livestatus)) opendiscord.startscreen.add(new api.ODStartScreenLiveStatusCategoryComponent("openticket:livestatus",1,opendiscord.livestatus))
//LOGS //LOGS
openticket.startscreen.add(new api.ODStartScreenLogCategoryComponent("openticket:logs",0)) opendiscord.startscreen.add(new api.ODStartScreenLogCategoryComponent("openticket:logs",0))
} }
+13 -13
View File
@@ -1,8 +1,8 @@
import {openticket, api, utilities} from "../../index" import {opendiscord, api, utilities} from "../../index"
import * as discord from "discord.js" import * as discord from "discord.js"
const stats = openticket.stats const stats = opendiscord.stats
const lang = openticket.languages const lang = opendiscord.languages
export const loadAllStatScopes = async () => { export const loadAllStatScopes = async () => {
stats.add(new api.ODStatGlobalScope("openticket:global",utilities.emojiTitle("📊",lang.getTranslation("stats.scopes.global")))) stats.add(new api.ODStatGlobalScope("openticket:global",utilities.emojiTitle("📊",lang.getTranslation("stats.scopes.global"))))
@@ -13,7 +13,7 @@ export const loadAllStatScopes = async () => {
} }
export const loadAllStats = async () => { export const loadAllStats = async () => {
const generalConfig = openticket.configs.get("openticket:general") const generalConfig = opendiscord.configs.get("openticket:general")
if (!generalConfig) return if (!generalConfig) return
const global = stats.get("openticket:global") const global = stats.get("openticket:global")
@@ -34,10 +34,10 @@ export const loadAllStats = async () => {
const system = stats.get("openticket:system") const system = stats.get("openticket:system")
if (system){ if (system){
system.add(new api.ODDynamicStat("openticket:startup-date",1,() => { system.add(new api.ODDynamicStat("openticket:startup-date",1,() => {
return lang.getTranslation("params.uppercase.startupDate")+": "+discord.time(openticket.processStartupDate,"f") return lang.getTranslation("params.uppercase.startupDate")+": "+discord.time(opendiscord.processStartupDate,"f")
})) }))
system.add(new api.ODDynamicStat("openticket:version",0,() => { system.add(new api.ODDynamicStat("openticket:version",0,() => {
return lang.getTranslation("params.uppercase.version")+": `"+openticket.versions.get("openticket:version").toString()+"`" return lang.getTranslation("params.uppercase.version")+": `"+opendiscord.versions.get("openticket:version").toString()+"`"
})) }))
} }
@@ -51,7 +51,7 @@ export const loadAllStats = async () => {
const scopeMember = await guild.members.fetch(scopeId) const scopeMember = await guild.members.fetch(scopeId)
if (!scopeMember) return "" if (!scopeMember) return ""
const permissions = await openticket.permissions.getPermissions(scopeMember.user,channel,guild) const permissions = await opendiscord.permissions.getPermissions(scopeMember.user,channel,guild)
if (permissions.type == "developer") return lang.getTranslation("params.uppercase.role")+": 💻 `Developer`" //TODO TRANSLATION!!! if (permissions.type == "developer") return lang.getTranslation("params.uppercase.role")+": 💻 `Developer`" //TODO TRANSLATION!!!
if (permissions.type == "owner") return lang.getTranslation("params.uppercase.role")+": 👑 `Server Owner`" //TODO TRANSLATION!!! if (permissions.type == "owner") return lang.getTranslation("params.uppercase.role")+": 👑 `Server Owner`" //TODO TRANSLATION!!!
if (permissions.type == "admin") return lang.getTranslation("params.uppercase.role")+": 💼 `Server Admin`" //TODO TRANSLATION!!! if (permissions.type == "admin") return lang.getTranslation("params.uppercase.role")+": 💼 `Server Admin`" //TODO TRANSLATION!!!
@@ -79,7 +79,7 @@ export const loadAllStats = async () => {
return lang.getTranslation("params.uppercase.ticket")+": "+discord.channelMention(scopeId) return lang.getTranslation("params.uppercase.ticket")+": "+discord.channelMention(scopeId)
})) }))
ticket.add(new api.ODDynamicStat("openticket:status",4,async (scopeId,guild,channel,user) => { ticket.add(new api.ODDynamicStat("openticket:status",4,async (scopeId,guild,channel,user) => {
const ticket = openticket.tickets.get(scopeId) const ticket = opendiscord.tickets.get(scopeId)
if (!ticket) return "" if (!ticket) return ""
const closed = ticket.exists("openticket:closed") ? ticket.get("openticket:closed").value : false const closed = ticket.exists("openticket:closed") ? ticket.get("openticket:closed").value : false
@@ -87,28 +87,28 @@ export const loadAllStats = async () => {
return closed ? lang.getTranslation("params.uppercase.status")+": 🔒 `Closed`" : lang.getTranslation("params.uppercase.status")+": 🔓 `Open`" //TODO TRANSLATION!!! return closed ? lang.getTranslation("params.uppercase.status")+": 🔒 `Closed`" : lang.getTranslation("params.uppercase.status")+": 🔓 `Open`" //TODO TRANSLATION!!!
})) }))
ticket.add(new api.ODDynamicStat("openticket:claimed",3,async (scopeId,guild,channel,user) => { ticket.add(new api.ODDynamicStat("openticket:claimed",3,async (scopeId,guild,channel,user) => {
const ticket = openticket.tickets.get(scopeId) const ticket = opendiscord.tickets.get(scopeId)
if (!ticket) return "" if (!ticket) return ""
const claimed = ticket.exists("openticket:claimed") ? ticket.get("openticket:claimed").value : false const claimed = ticket.exists("openticket:claimed") ? ticket.get("openticket:claimed").value : false
return claimed ? lang.getTranslation("params.uppercase.claimed")+": 🟢 `Yes`" : lang.getTranslation("params.uppercase.claimed")+": 🔴 `No`" //TODO TRANSLATION!!! return claimed ? lang.getTranslation("params.uppercase.claimed")+": 🟢 `Yes`" : lang.getTranslation("params.uppercase.claimed")+": 🔴 `No`" //TODO TRANSLATION!!!
})) }))
ticket.add(new api.ODDynamicStat("openticket:pinned",2,async (scopeId,guild,channel,user) => { ticket.add(new api.ODDynamicStat("openticket:pinned",2,async (scopeId,guild,channel,user) => {
const ticket = openticket.tickets.get(scopeId) const ticket = opendiscord.tickets.get(scopeId)
if (!ticket) return "" if (!ticket) return ""
const pinned = ticket.exists("openticket:pinned") ? ticket.get("openticket:pinned").value : false const pinned = ticket.exists("openticket:pinned") ? ticket.get("openticket:pinned").value : false
return pinned ? lang.getTranslation("params.uppercase.pinned")+": 🟢 `Yes`" : lang.getTranslation("params.uppercase.pinned")+": 🔴 `No`" //TODO TRANSLATION!!! return pinned ? lang.getTranslation("params.uppercase.pinned")+": 🟢 `Yes`" : lang.getTranslation("params.uppercase.pinned")+": 🔴 `No`" //TODO TRANSLATION!!!
})) }))
ticket.add(new api.ODDynamicStat("openticket:creation-date",1,async (scopeId,guild,channel,user) => { ticket.add(new api.ODDynamicStat("openticket:creation-date",1,async (scopeId,guild,channel,user) => {
const ticket = openticket.tickets.get(scopeId) const ticket = opendiscord.tickets.get(scopeId)
if (!ticket) return "" if (!ticket) return ""
const rawDate = ticket.get("openticket:opened-on").value ?? new Date().getTime() const rawDate = ticket.get("openticket:opened-on").value ?? new Date().getTime()
return lang.getTranslation("params.uppercase.creationDate")+": "+discord.time(new Date(rawDate),"f") return lang.getTranslation("params.uppercase.creationDate")+": "+discord.time(new Date(rawDate),"f")
})) }))
ticket.add(new api.ODDynamicStat("openticket:creator",0,async (scopeId,guild,channel,user) => { ticket.add(new api.ODDynamicStat("openticket:creator",0,async (scopeId,guild,channel,user) => {
const ticket = openticket.tickets.get(scopeId) const ticket = opendiscord.tickets.get(scopeId)
if (!ticket) return "" if (!ticket) return ""
const creator = ticket.get("openticket:opened-by").value const creator = ticket.get("openticket:opened-by").value
@@ -119,7 +119,7 @@ export const loadAllStats = async () => {
const participants = stats.get("openticket:participants") const participants = stats.get("openticket:participants")
if (participants){ if (participants){
participants.add(new api.ODDynamicStat("openticket:participants",0,async (scopeId,guild,channel,user) => { participants.add(new api.ODDynamicStat("openticket:participants",0,async (scopeId,guild,channel,user) => {
const ticket = openticket.tickets.get(scopeId) const ticket = opendiscord.tickets.get(scopeId)
if (!ticket) return "" if (!ticket) return ""
const participants = ticket.exists("openticket:participants") ? ticket.get("openticket:participants").value : [] const participants = ticket.exists("openticket:participants") ? ticket.get("openticket:participants").value : []
+3 -3
View File
@@ -1,11 +1,11 @@
import {openticket, api, utilities} from "../../index" import {opendiscord, api, utilities} from "../../index"
export const loadAllBlacklistedUsers = async () => { export const loadAllBlacklistedUsers = async () => {
const userDatabase = openticket.databases.get("openticket:users") const userDatabase = opendiscord.databases.get("openticket:users")
if (!userDatabase) return if (!userDatabase) return
const users = await userDatabase.getCategory("openticket:blacklist") ?? [] const users = await userDatabase.getCategory("openticket:blacklist") ?? []
users.forEach((user) => { users.forEach((user) => {
if (typeof user.value == "string" || user.value === null) openticket.blacklist.add(new api.ODBlacklist(user.key,user.value)) if (typeof user.value == "string" || user.value === null) opendiscord.blacklist.add(new api.ODBlacklist(user.key,user.value))
}) })
} }
+17 -17
View File
@@ -1,47 +1,47 @@
import {openticket, api, utilities} from "../../index" import {opendiscord, api, utilities} from "../../index"
export const loadAllOptions = async () => { export const loadAllOptions = async () => {
const optionConfig = openticket.configs.get("openticket:options") const optionConfig = opendiscord.configs.get("openticket:options")
if (!optionConfig) return if (!optionConfig) return
optionConfig.data.forEach((option) => { optionConfig.data.forEach((option) => {
if (option.type == "ticket"){ if (option.type == "ticket"){
const loadedOption = loadTicketOption(option) const loadedOption = loadTicketOption(option)
openticket.options.add(loadedOption) opendiscord.options.add(loadedOption)
openticket.options.suffix.add(loadTicketOptionSuffix(loadedOption)) opendiscord.options.suffix.add(loadTicketOptionSuffix(loadedOption))
}else if (option.type == "website"){ }else if (option.type == "website"){
openticket.options.add(loadWebsiteOption(option)) opendiscord.options.add(loadWebsiteOption(option))
}else if (option.type == "role"){ }else if (option.type == "role"){
openticket.options.add(loadRoleOption(option)) opendiscord.options.add(loadRoleOption(option))
} }
}) })
//update options on config reload //update options on config reload
optionConfig.onReload(async () => { optionConfig.onReload(async () => {
//clear previous options & suffixes //clear previous options & suffixes
await openticket.options.loopAll((data,id) => {openticket.options.remove(id)}) await opendiscord.options.loopAll((data,id) => {opendiscord.options.remove(id)})
await openticket.options.suffix.loopAll((data,id) => {openticket.options.suffix.remove(id)}) await opendiscord.options.suffix.loopAll((data,id) => {opendiscord.options.suffix.remove(id)})
//add new options //add new options
optionConfig.data.forEach((option) => { optionConfig.data.forEach((option) => {
if (option.type == "ticket"){ if (option.type == "ticket"){
const loadedOption = loadTicketOption(option) const loadedOption = loadTicketOption(option)
openticket.options.add(loadedOption) opendiscord.options.add(loadedOption)
openticket.options.suffix.add(loadTicketOptionSuffix(loadedOption)) opendiscord.options.suffix.add(loadTicketOptionSuffix(loadedOption))
}else if (option.type == "website"){ }else if (option.type == "website"){
openticket.options.add(loadWebsiteOption(option)) opendiscord.options.add(loadWebsiteOption(option))
}else if (option.type == "role"){ }else if (option.type == "role"){
openticket.options.add(loadRoleOption(option)) opendiscord.options.add(loadRoleOption(option))
} }
}) })
//update options in tickets //update options in tickets
await openticket.tickets.loopAll((ticket) => { await opendiscord.tickets.loopAll((ticket) => {
const optionId = ticket.option.id const optionId = ticket.option.id
const option = openticket.options.get(optionId) const option = opendiscord.options.get(optionId)
if (option && option instanceof api.ODTicketOption) ticket.option = option if (option && option instanceof api.ODTicketOption) ticket.option = option
else{ else{
openticket.log("Unable to move ticket to unexisting option due to config reload!","warning",[ opendiscord.log("Unable to move ticket to unexisting option due to config reload!","warning",[
{key:"channelid",value:ticket.id.value}, {key:"channelid",value:ticket.id.value},
{key:"option",value:optionId.value} {key:"option",value:optionId.value}
]) ])
@@ -49,7 +49,7 @@ export const loadAllOptions = async () => {
}) })
//update roles on config reload //update roles on config reload
await openticket.roles.loopAll((data,id) => {openticket.roles.remove(id)}) await opendiscord.roles.loopAll((data,id) => {opendiscord.roles.remove(id)})
await (await import("./roleLoader.js")).loadAllRoles() await (await import("./roleLoader.js")).loadAllRoles()
}) })
} }
@@ -134,7 +134,7 @@ export const loadRoleOption = (opt:api.ODJsonConfig_DefaultOptionRoleType): api.
export const loadTicketOptionSuffix = (option:api.ODTicketOption): api.ODOptionSuffix => { export const loadTicketOptionSuffix = (option:api.ODTicketOption): api.ODOptionSuffix => {
const mode = option.get("openticket:channel-suffix").value const mode = option.get("openticket:channel-suffix").value
const globalDatabase = openticket.databases.get("openticket:global") const globalDatabase = opendiscord.databases.get("openticket:global")
if (mode == "user-name") return new api.ODOptionUserNameSuffix(option.id.value,option) if (mode == "user-name") return new api.ODOptionUserNameSuffix(option.id.value,option)
else if (mode == "random-number") return new api.ODOptionRandomNumberSuffix(option.id.value,option,globalDatabase) else if (mode == "random-number") return new api.ODOptionRandomNumberSuffix(option.id.value,option,globalDatabase)
else if (mode == "random-hex") return new api.ODOptionRandomHexSuffix(option.id.value,option,globalDatabase) else if (mode == "random-hex") return new api.ODOptionRandomHexSuffix(option.id.value,option,globalDatabase)
+6 -6
View File
@@ -1,22 +1,22 @@
import {openticket, api, utilities} from "../../index" import {opendiscord, api, utilities} from "../../index"
import * as discord from "discord.js" import * as discord from "discord.js"
export const loadAllPanels = async () => { export const loadAllPanels = async () => {
const panelConfig = openticket.configs.get("openticket:panels") const panelConfig = opendiscord.configs.get("openticket:panels")
if (!panelConfig) return if (!panelConfig) return
panelConfig.data.forEach((panel) => { panelConfig.data.forEach((panel) => {
openticket.panels.add(loadPanel(panel)) opendiscord.panels.add(loadPanel(panel))
}) })
//update panels on config reload //update panels on config reload
panelConfig.onReload(async () => { panelConfig.onReload(async () => {
//clear previous panels //clear previous panels
await openticket.panels.loopAll((data,id) => {openticket.panels.remove(id)}) await opendiscord.panels.loopAll((data,id) => {opendiscord.panels.remove(id)})
//add new panels //add new panels
panelConfig.data.forEach((panel) => { panelConfig.data.forEach((panel) => {
openticket.panels.add(loadPanel(panel)) opendiscord.panels.add(loadPanel(panel))
}) })
}) })
} }
@@ -53,7 +53,7 @@ export function describePanelOptions(mode:"fields"|"text", panel:api.ODPanel): {
let websiteOnly = true let websiteOnly = true
let roleOnly = true let roleOnly = true
panel.get("openticket:options").value.forEach((id) => { panel.get("openticket:options").value.forEach((id) => {
const opt = openticket.options.get(id) const opt = opendiscord.options.get(id)
if (opt){ if (opt){
if (opt instanceof api.ODTicketOption){ if (opt instanceof api.ODTicketOption){
options.push(opt) options.push(opt)
+7 -7
View File
@@ -1,28 +1,28 @@
import {openticket, api, utilities} from "../../index" import {opendiscord, api, utilities} from "../../index"
export const loadAllQuestions = async () => { export const loadAllQuestions = async () => {
const questionConfig = openticket.configs.get("openticket:questions") const questionConfig = opendiscord.configs.get("openticket:questions")
if (!questionConfig) return if (!questionConfig) return
questionConfig.data.forEach((question) => { questionConfig.data.forEach((question) => {
if (question.type == "short"){ if (question.type == "short"){
openticket.questions.add(loadShortQuestion(question)) opendiscord.questions.add(loadShortQuestion(question))
}else if (question.type == "paragraph"){ }else if (question.type == "paragraph"){
openticket.questions.add(loadParagraphQuestion(question)) opendiscord.questions.add(loadParagraphQuestion(question))
} }
}) })
//update questions on config reload //update questions on config reload
questionConfig.onReload(async () => { questionConfig.onReload(async () => {
//clear previous questions //clear previous questions
await openticket.questions.loopAll((data,id) => {openticket.questions.remove(id)}) await opendiscord.questions.loopAll((data,id) => {opendiscord.questions.remove(id)})
//add new questions //add new questions
questionConfig.data.forEach((question) => { questionConfig.data.forEach((question) => {
if (question.type == "short"){ if (question.type == "short"){
openticket.questions.add(loadShortQuestion(question)) opendiscord.questions.add(loadShortQuestion(question))
}else if (question.type == "paragraph"){ }else if (question.type == "paragraph"){
openticket.questions.add(loadParagraphQuestion(question)) opendiscord.questions.add(loadParagraphQuestion(question))
} }
}) })
}) })
+3 -3
View File
@@ -1,9 +1,9 @@
import {openticket, api, utilities} from "../../index" import {opendiscord, api, utilities} from "../../index"
export const loadAllRoles = async () => { export const loadAllRoles = async () => {
await openticket.options.loopAll((opt) => { await opendiscord.options.loopAll((opt) => {
if (opt instanceof api.ODRoleOption){ if (opt instanceof api.ODRoleOption){
openticket.roles.add(loadRole(opt)) opendiscord.roles.add(loadRole(opt))
} }
}) })
} }

Some files were not shown because too many files have changed in this diff Show More