Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
447fddea56 | ||
|
|
bf7a003799 | ||
|
|
6115ab1cc8 | ||
|
|
c2307fd1ed | ||
|
|
2a3850c3cc | ||
|
|
688c40ce7b | ||
|
|
dee2a21be9 | ||
|
|
d7ae040d60 | ||
|
|
7b6202985a | ||
|
|
a2f2c601a5 | ||
|
|
b27016df2e | ||
|
|
6341f2f71b | ||
|
|
56a5b9c7d0 | ||
|
|
f608cb71ce | ||
|
|
7c7c325307 | ||
|
|
832021d72a | ||
|
|
030554a7f5 | ||
|
|
ada5ea0c5d | ||
|
|
fb6b891835 | ||
|
|
739ad81f3f | ||
|
|
a6f67a9452 | ||
|
|
56a6540663 | ||
|
|
5f8812d261 | ||
|
|
7a3dcf4c42 | ||
|
|
7cebd4dd6a | ||
|
|
27912a0c37 | ||
|
|
67871d885a | ||
|
|
1bd0d013ed | ||
|
|
a074a17519 | ||
|
|
67af96ef5c | ||
|
|
a041f28cf7 | ||
|
|
a8c9c2ea8d | ||
|
|
8748301b04 | ||
|
|
2d7a7b5728 | ||
|
|
0807ca884c | ||
|
|
0ead037fa8 | ||
|
|
4287c11bf1 | ||
|
|
69fdc7ccf0 | ||
|
|
6c213306b6 | ||
|
|
4096e8196d | ||
|
|
94ee890848 | ||
|
|
4dced819a3 | ||
|
|
1159af9fa9 | ||
|
|
67d429c52b | ||
|
|
f67af805c1 | ||
|
|
944032f690 | ||
|
|
ee248e86bc | ||
|
|
b171bce62b | ||
|
|
df0bce0189 | ||
|
|
2630aa899f | ||
|
|
dba370d66e | ||
|
|
d0bcf26b93 | ||
|
|
65f82171d3 | ||
|
|
6e730f058d | ||
|
|
4702c633ec | ||
|
|
dc14a39c4e | ||
|
|
05c97909d4 | ||
|
|
b3c4c2f6e8 | ||
|
|
e0e678bee0 | ||
|
|
1b01b1703f | ||
|
|
26539360c6 | ||
|
|
627c461f64 | ||
|
|
2e40dc0468 | ||
|
|
fa57b9a93f | ||
|
|
930452155b | ||
|
|
e70f22162d | ||
|
|
d5b0a0f3c6 | ||
|
|
c43081e05d | ||
|
|
8c4bf735f1 |
@@ -0,0 +1,42 @@
|
|||||||
|
# Contributing
|
||||||
|
## Translation
|
||||||
|
### Step 1: checking
|
||||||
|
1. [Check if the language isn't already in open ticket!](/language/)
|
||||||
|
2. Check if the current translation is up-to-date!
|
||||||
|
3. Can you edit/write JSON?
|
||||||
|
|
||||||
|
If there is translation missing & you can write json, then go to the next step!
|
||||||
|
|
||||||
|
### Step 2: translating
|
||||||
|
**RULES:**
|
||||||
|
- Always upload to the [__`dev` branch!__](https://github.com/DJj123dj/open-ticket/tree/dev)
|
||||||
|
- Don't change anything else, except the translation you are adding!
|
||||||
|
- Translations are checked before uploading, so don't write things that aren't specified in the json file
|
||||||
|
- Always start translating from `english.json` or `custom.json`! Never from another language.
|
||||||
|
|
||||||
|
If you translate, you need to change 2 files! The first one is required, the other one is optional & will be added by us if you don't do it!
|
||||||
|
1. add `yourlanguage.json` to the `/language/` directory
|
||||||
|
2. (OPTIONAL) add your discord name & tag in the translator table in `README.md`
|
||||||
|
|
||||||
|
### Step 3: waiting
|
||||||
|
Translations will always be added in the **next version** of Open Ticket! They will never be added to the `main` branch directly without anything else! This means that it can take some time before your translation is in the official version!
|
||||||
|
|
||||||
|
## Writing plugins
|
||||||
|
We are going to create an official repository for plugins soon!
|
||||||
|
But don't worry! You can already write some plugins!
|
||||||
|
|
||||||
|
**RULES:**
|
||||||
|
- Always specify the versions that the plugin is compatible with!
|
||||||
|
- If extra npm dependencies are needed, then they also need to be specified!
|
||||||
|
- If there are errors while you write a plugin/edit the code in some way. Then we can't help you with fixing the bug. We only fix bugs that are part of an unedited version of Open Ticket!
|
||||||
|
|
||||||
|
## Other versions of contributing
|
||||||
|
If you want to contribute in another way, feel free to join [our discord server](https://discord.dj-dj.be) & talk about how you are going to do it. We will always help you!
|
||||||
|
|
||||||
|
<br>
|
||||||
|
CONTRIBUTING GUIDELINES - Last updated: 23/3/2023<br>
|
||||||
|
© DJdj Development<br><br>
|
||||||
|
Website: https://www.dj-dj.be <br>
|
||||||
|
Discord: https://discord.dj-dj.be <br>
|
||||||
|
Email: support@dj-dj.be <br>
|
||||||
|
Open Ticket website: https://openticket.dj-dj.be
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
---
|
---
|
||||||
name: Bug report
|
name: Bug report
|
||||||
about: Create a report to help us improve Open Ticket
|
about: Report bugs to help us improve open ticket!
|
||||||
title: "[BUG] your bug"
|
title: "[BUG] your bug"
|
||||||
labels: bug
|
labels: bug
|
||||||
assignees: ''
|
assignees: DJj123dj
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
---
|
---
|
||||||
name: Plugin
|
name: Plugin
|
||||||
about: Show your open ticket plugins here!
|
about: Show your plugin to the developers from open ticket!
|
||||||
title: "[PLUGIN] your plugin"
|
title: "[PLUGIN] your plugin"
|
||||||
labels: plugin
|
labels: plugin
|
||||||
assignees: ''
|
assignees: DJj123dj
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,41 @@
|
|||||||
|
# Security Policy
|
||||||
|
|
||||||
|
## Supported Versions
|
||||||
|
|
||||||
|
Support for Open Ticket is only available for the versions specified below!
|
||||||
|
|
||||||
|
✅ Supported
|
||||||
|
🟧 Partially Supported
|
||||||
|
❌ Not Supported
|
||||||
|
|
||||||
|
| Version | Supported |
|
||||||
|
|-----------|-------------------|
|
||||||
|
| 3.4.1 | ✅ |
|
||||||
|
| 3.4.0 | ✅ |
|
||||||
|
| 3.3.3 | 🟧 |
|
||||||
|
| < 3.3.3 | ❌ |
|
||||||
|
|
||||||
|
## Reporting a Vulnerability
|
||||||
|
|
||||||
|
You can report Vulnerabilities, errors & bugs in the following ways:
|
||||||
|
|
||||||
|
- Creating an issue on github
|
||||||
|
- Creating a ticket in our discord server
|
||||||
|
- Reporting the bug in DM on discord (DJj123dj#1706)
|
||||||
|
- Emailing support@dj-dj.be
|
||||||
|
|
||||||
|
If your report an error, be clear about what is going on.
|
||||||
|
Specify the version & language of the bot together with when the error happend. (for example: when I click the close button)
|
||||||
|
Send screenshots from the error if possible, and send openticketdebug.txt (or a screenshot of it) to us.
|
||||||
|
Don't just report the error and never reply again! It can be possible that we need you for more information!
|
||||||
|
|
||||||
|
## Contributing
|
||||||
|
Visit [Contributing.md](/.github/CONTRIBUTING.md) for rules about translating & adding features!
|
||||||
|
|
||||||
|
<br>
|
||||||
|
SECURITY POLICY - Last updated: 23/3/2023<br>
|
||||||
|
© DJdj Development<br><br>
|
||||||
|
Website: https://www.dj-dj.be <br>
|
||||||
|
Discord: https://discord.dj-dj.be <br>
|
||||||
|
Email: support@dj-dj.be <br>
|
||||||
|
Open Ticket website: https://openticket.dj-dj.be
|
||||||
+8
-6
@@ -1,11 +1,11 @@
|
|||||||
node_modules/
|
node_modules/
|
||||||
package-lock.json
|
package-lock.json
|
||||||
devConfig.json
|
devconfig.json
|
||||||
devConfig1.json
|
devconfig1.json
|
||||||
devConfig2.json
|
devconfig2.json
|
||||||
devConfig3.json
|
devconfig3.json
|
||||||
devConfig4.json
|
devconfig4.json
|
||||||
devConfig5.json
|
devconfig5.json
|
||||||
.DS_Store
|
.DS_Store
|
||||||
openticketdebug.txt
|
openticketdebug.txt
|
||||||
developerChangelog.md
|
developerChangelog.md
|
||||||
@@ -18,3 +18,5 @@ storage/.DS_Store
|
|||||||
livestatus.json
|
livestatus.json
|
||||||
test.js
|
test.js
|
||||||
devtsconfig.json
|
devtsconfig.json
|
||||||
|
plugins/*
|
||||||
|
!plugins/example.plugin.js
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
# comming soon
|
|
||||||
For now on, you can create a ticket in our server:
|
|
||||||
https://discord.dj-dj.be
|
|
||||||
@@ -1,19 +1,17 @@
|
|||||||
<img src="https://www.dj-dj.be/wp-content/uploads/2023/02/open-ticket-cropped.png" alt="Open Ticket" width="600px">
|
<img src="https://www.dj-dj.be/wp-content/uploads/2023/02/open-ticket-cropped.png" alt="Open Ticket" width="600px">
|
||||||
|
|
||||||
[](https://discord.com/invite/26vT9wt3n3) [](https://github.com/DJj123dj/open-ticket/releases/tag/v3.2.1) []() [](https://github.com/DJj123dj/open-ticket/blob/main/LICENSE) [](https://docs.openticket.dj-dj.be)
|
[](https://discord.com/invite/26vT9wt3n3) [](https://github.com/DJj123dj/open-ticket/releases/tag/v3.4.1) []() [](https://github.com/DJj123dj/open-ticket/blob/main/LICENSE) [](https://docs.openticket.dj-dj.be)
|
||||||
|
|
||||||
### Open Ticket
|
### Open Ticket
|
||||||
Open Ticket is of the most customisable discord ticket bots of all time!
|
Open Ticket is the most customisable discord ticket bot that you will ever find! There are more than 150 options to customise in the config! This includes html transcripts, unlimited amount of tickets, custom embeds & more! Did you know that even the html transcripts are highly customisable? Don't wait and check it out! If you're having trouble setting the bot up, feel free to join our support server and we will help you further!
|
||||||
You have more than +100 options to customise in the config! This includes html transcripts, unlimited tickets, custom embeds & more!
|
|
||||||
We also have a great support service, we can solve every question you have about open ticket! We even provide free 24/7 hosting if you want!
|
|
||||||
|
|
||||||
Take a look at all the features and discover the possibilities!
|
Take a look at all the features and discover the possibilities!
|
||||||
### [Documentation](https://docs.openticket.dj-dj.be/quick-start)
|
### [Documentation](https://docs.openticket.dj-dj.be/quick-start)
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
- **🎉 NEW! html transcripts!**
|
- **🎉 NEW! html transcripts V2!**
|
||||||
- 🔒 close, ❌ delete & ✅ re-open tickets
|
- 🔒 close, ❌ delete & ✅ re-open tickets
|
||||||
- 🇬🇧 translation in 11 different languages
|
- 🇬🇧 translation in 19 different languages
|
||||||
- 📄 very advanced customisation
|
- 📄 very advanced customisation
|
||||||
- 🆗 buttons or 🔽 dropdowns!
|
- 🆗 buttons or 🔽 dropdowns!
|
||||||
- 🆒 plugins
|
- 🆒 plugins
|
||||||
@@ -33,31 +31,40 @@ Take a look at all the features and discover the possibilities!
|
|||||||
</details>
|
</details>
|
||||||
|
|
||||||
## preview
|
## preview
|
||||||
Images coming soon
|
Images coming soon<br>
|
||||||
|
You can already see some images at our [documentation!](https://docs.openticket.dj-dj.be)
|
||||||
|
|
||||||
|
|
||||||
## credits
|
## credits
|
||||||
DJdj Development Team
|
DJdj Development Team
|
||||||
|Main Developer|Developer|Support Team|Designer|
|
|Main Developer|Developer |Support Team|Designer|
|
||||||
|--------------|---------|-----------|---------|
|
|--------------|------------|-----------|---------|
|
||||||
|DJj123dj |Sanke |DJ-Lite |vuur_draak|
|
|djj123dj |sankedev |DJ-Lite |vuur_draak|
|
||||||
|
|
||||||
Translators
|
Translators
|
||||||
|Language |Translator |
|
|Language |Translator |
|
||||||
|--------------|-------------------------|
|
|--------------|-------------------------|
|
||||||
|Dutch |DJj123dj#1706 |
|
|Dutch |djj123dj |
|
||||||
|Romanian |Sanke#6086 |
|
|Romanian |sankedev |
|
||||||
|French |Sanke#6086 |
|
|French |sankedev |
|
||||||
|Spanish |Redactado#1673 & josuens14#5267|
|
|Spanish |redactado & josuens |
|
||||||
|German |david.#8276 |
|
|German |david.3 |
|
||||||
|Italian |Maurizio#0268 |
|
|Italian |maurizio26 |
|
||||||
|Czech |t0miiis#3022 |
|
|Czech |t0miiis#3022 |
|
||||||
|Arabic |ChilledBroke#9986 & M4#5882|
|
|Arabic |Sarcastic#9318 |
|
||||||
|Danish |the_gamer#5095 |
|
|Danish |.the_gamer |
|
||||||
|Portuguese |*unknown* |
|
|Portuguese |quiradon |
|
||||||
|
|Russian |apexo |
|
||||||
|
|Turkish |Hydra#0009 |
|
||||||
|
|Polish |mkevas |
|
||||||
|
|Slovenian |n1kkec |
|
||||||
|
|Thai |modshd |
|
||||||
|
|Norwegian |noonenook |
|
||||||
|
|Greek |stefanos#5739 |
|
||||||
|
|Ukrainian |anderskiy |
|
||||||
|
|
||||||
## links
|
## links
|
||||||
current version: _v3.2.1_
|
current version: _v3.4.1_
|
||||||
</br>changelog: [click here](https://docs.openticket.dj-dj.be/other/changelog)
|
</br>changelog: [click here](https://docs.openticket.dj-dj.be/other/changelog)
|
||||||
</br>documentation: [click here](https://docs.openticket.dj-dj.be/quick-start)
|
</br>documentation: [click here](https://docs.openticket.dj-dj.be/quick-start)
|
||||||
|
|
||||||
|
|||||||
+24
-31
@@ -23,28 +23,24 @@ module.exports = () => {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
msg.channel.messages.fetchPinned().then(msglist => {
|
const hiddendata = bot.hiddenData.readHiddenData(msg.channel.id)
|
||||||
var firstmsg = msglist.last()
|
if (hiddendata.length < 1) return msg.channel.send({embeds:[bot.errorLog.notInATicket]})
|
||||||
if (firstmsg == undefined || firstmsg.author.id != client.user.id) return msg.channel.send({embeds:[bot.errorLog.notInATicket]})
|
const ticketId = hiddendata.find(d => d.key == "type").value
|
||||||
const hiddendata = bot.hiddenData.readHiddenData(firstmsg.embeds[0].description)
|
|
||||||
const ticketId = hiddendata.data.find(d => d.key == "type").value
|
|
||||||
|
|
||||||
msg.channel.permissionOverwrites.create(user.id, { ViewChannel:true, AddReactions:true,AttachFiles:true, EmbedLinks:true, SendMessages:true})
|
msg.channel.permissionOverwrites.create(user.id, { ViewChannel:true, AddReactions:true,AttachFiles:true, EmbedLinks:true, SendMessages:true})
|
||||||
msg.channel.send({embeds:[bot.embeds.commands.addEmbed(user,msg.author)]})
|
msg.channel.send({embeds:[bot.embeds.commands.addEmbed(user,msg.author)]})
|
||||||
|
|
||||||
var loguser = msg.mentions.users.first()
|
var loguser = msg.mentions.users.first()
|
||||||
log("command","someone used the 'add' command",[{key:"user",value:msg.author.tag}])
|
log("command","someone used the 'add' command",[{key:"user",value:msg.author.username}])
|
||||||
log("system","user added to ticket",[{key:"user",value:msg.author.tag},{key:"ticket",value:msg.channel.name},{key:"added_user",value:loguser.tag}])
|
log("system","user added to ticket",[{key:"user",value:msg.author.username},{key:"ticket",value:msg.channel.name},{key:"added_user",value:loguser.username}])
|
||||||
|
|
||||||
const ticketData = require("../core/utils/configParser").getTicketById(ticketId,true)
|
const ticketData = require("../core/utils/configParser").getTicketById(ticketId,true)
|
||||||
APIEvents.onTicketAdd(msg.author,loguser,msg.channel,msg.guild,new Date(),{status:"open",name:msg.channel.name,ticketOptions:ticketData})
|
APIEvents.onTicketAdd(msg.author,loguser,msg.channel,msg.guild,new Date(),{status:"open",name:msg.channel.name,ticketOptions:ticketData})
|
||||||
|
|
||||||
APIEvents.onCommand("add",permsChecker.command(msg.author.id,msg.guild.id),msg.author,msg.channel,msg.guild,new Date())
|
|
||||||
})
|
|
||||||
|
|
||||||
|
APIEvents.onCommand("add",permsChecker.command(msg.author.id,msg.guild.id),msg.author,msg.channel,msg.guild,new Date())
|
||||||
})
|
})
|
||||||
|
|
||||||
if (!DISABLE.commands.slash.add) client.on("interactionCreate",(interaction) => {
|
if (!DISABLE.commands.slash.add) client.on("interactionCreate",async (interaction) => {
|
||||||
if (!interaction.isChatInputCommand()) return
|
if (!interaction.isChatInputCommand()) return
|
||||||
if (interaction.commandName != "add") return
|
if (interaction.commandName != "add") return
|
||||||
const user = interaction.options.getUser("user")
|
const user = interaction.options.getUser("user")
|
||||||
@@ -55,25 +51,22 @@ module.exports = () => {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
interaction.channel.messages.fetchPinned().then(msglist => {
|
await interaction.deferReply()
|
||||||
var firstmsg = msglist.last()
|
|
||||||
if (firstmsg == undefined || firstmsg.author.id != client.user.id) return interaction.reply({embeds:[bot.errorLog.notInATicket]})
|
|
||||||
const hiddendata = bot.hiddenData.readHiddenData(firstmsg.embeds[0].description)
|
|
||||||
const ticketId = hiddendata.data.find(d => d.key == "type").value
|
|
||||||
|
|
||||||
interaction.channel.permissionOverwrites.create(user.id, { ViewChannel:true, AddReactions:true,AttachFiles:true, EmbedLinks:true, SendMessages:true})
|
const hiddendata = bot.hiddenData.readHiddenData(interaction.channel.id)
|
||||||
interaction.reply({embeds:[bot.embeds.commands.addEmbed(user,interaction.user)]})
|
if (hiddendata.length < 1) return interaction.editReply({embeds:[bot.errorLog.notInATicket]})
|
||||||
|
const ticketId = hiddendata.find(d => d.key == "type").value
|
||||||
|
|
||||||
var loguser = user
|
interaction.channel.permissionOverwrites.create(user.id, { ViewChannel:true, AddReactions:true,AttachFiles:true, EmbedLinks:true, SendMessages:true})
|
||||||
log("command","someone used the 'add' command",[{key:"user",value:interaction.user.tag}])
|
interaction.editReply({embeds:[bot.embeds.commands.addEmbed(user,interaction.user)]})
|
||||||
log("system","user added to ticket",[{key:"user",value:interaction.user.tag},{key:"ticket",value:interaction.channel.name},{key:"added_user",value:loguser.tag}])
|
|
||||||
|
|
||||||
const ticketData = require("../core/utils/configParser").getTicketById(ticketId,true)
|
var loguser = user
|
||||||
APIEvents.onTicketAdd(interaction.user,loguser,interaction.channel,interaction.guild,new Date(),{status:"open",name:interaction.channel.name,ticketOptions:ticketData})
|
log("command","someone used the 'add' command",[{key:"user",value:interaction.user.username}])
|
||||||
APIEvents.onCommand("add",permsChecker.command(interaction.user.id,interaction.guild.id),interaction.user,interaction.channel,interaction.guild,new Date())
|
log("system","user added to ticket",[{key:"user",value:interaction.user.username},{key:"ticket",value:interaction.channel.name},{key:"added_user",value:loguser.username}])
|
||||||
|
|
||||||
})
|
|
||||||
|
|
||||||
|
const ticketData = require("../core/utils/configParser").getTicketById(ticketId,true)
|
||||||
|
APIEvents.onTicketAdd(interaction.user,loguser,interaction.channel,interaction.guild,new Date(),{status:"open",name:interaction.channel.name,ticketOptions:ticketData})
|
||||||
|
APIEvents.onCommand("add",permsChecker.command(interaction.user.id,interaction.guild.id),interaction.user,interaction.channel,interaction.guild,new Date())
|
||||||
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
+70
-55
@@ -12,7 +12,7 @@ const DISABLE = require("../core/api/api.json").disable
|
|||||||
module.exports = () => {
|
module.exports = () => {
|
||||||
bot.errorLog.log("debug","COMMANDS: loaded change.js")
|
bot.errorLog.log("debug","COMMANDS: loaded change.js")
|
||||||
|
|
||||||
if (!DISABLE.commands.text.change) client.on("messageCreate",msg => {
|
if (!DISABLE.commands.text.change) client.on("messageCreate", async msg => {
|
||||||
if (!msg.content.startsWith(config.prefix+"change")) return
|
if (!msg.content.startsWith(config.prefix+"change")) return
|
||||||
|
|
||||||
if (!msg.guild) return
|
if (!msg.guild) return
|
||||||
@@ -21,42 +21,39 @@ module.exports = () => {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
msg.channel.messages.fetchPinned().then(msglist => {
|
const hiddendata = bot.hiddenData.readHiddenData(msg.channel.id)
|
||||||
var firstmsg = msglist.last()
|
if (hiddendata.length < 1) return msg.channel.send({embeds:[bot.errorLog.notInATicket]})
|
||||||
if (firstmsg == undefined || firstmsg.author.id != client.user.id) return msg.channel.send({embeds:[bot.errorLog.notInATicket]})
|
const ticketId = hiddendata.find(d => d.key == "type").value
|
||||||
const hiddendata = bot.hiddenData.readHiddenData(firstmsg.embeds[0].description)
|
|
||||||
const ticketId = hiddendata.data.find(d => d.key == "type").value
|
|
||||||
|
|
||||||
var newtype = msg.content.split(config.prefix+"change")[1].substring(1)
|
const list = []
|
||||||
if (!newtype) return msg.channel.send({embeds:[bot.errorLog.invalidArgsMessage(l.errors.missingArgsDescription+" `<type>`:\n`"+config.prefix+"change <type>`")]})
|
config.options.forEach((o) => list.push(o.id))
|
||||||
|
|
||||||
const newTicket = require("../core/utils/configParser").getTicketById(newtype)
|
var newtype = msg.content.split(config.prefix+"change")[1].substring(1)
|
||||||
const list = []
|
if (!newtype) return msg.channel.send({embeds:[bot.errorLog.invalidIdChooseFromList(list,l.errors.missingArgsDescription+" `<type>`:\n`"+config.prefix+"change <type>`")]})
|
||||||
config.options.forEach((o) => list.push(o.id))
|
|
||||||
if (!newTicket) return bot.errorLog.invalidIdChooseFromList(list)
|
|
||||||
|
|
||||||
/**@type {String} */
|
const newTicket = require("../core/utils/configParser").getTicketById(newtype)
|
||||||
var chName = msg.channel.name
|
if (!newTicket) return msg.channel.send({embeds:[bot.errorLog.invalidIdChooseFromList(list,l.errors.missingArgsDescription+" `<type>`:\n`"+config.prefix+"change <type>`")]})
|
||||||
const splitted = chName.split("-")
|
|
||||||
const prefix = splitted.shift()
|
|
||||||
const name = (splitted.length > 0) ? splitted.join("-") : prefix
|
|
||||||
|
|
||||||
if (newTicket.category){
|
/**@type {String} */
|
||||||
const parent = msg.guild.channels.cache.forEach((ch) => (ch.type == discord.ChannelType.GuildCategory) && ch.id == newTicket.category)
|
var chName = msg.channel.name
|
||||||
if (parent) msg.channel.setParent(parent)
|
const splitted = chName.split("-")
|
||||||
}
|
const prefix = splitted.shift()
|
||||||
msg.channel.setName(newTicket.channelprefix+name)
|
const name = (splitted.length > 0) ? splitted.join("-") : prefix
|
||||||
msg.channel.send({embeds:[bot.embeds.commands.changeEmbed(msg.author,newtype)]})
|
|
||||||
|
|
||||||
log("command","someone used the 'change' command",[{key:"user",value:msg.author.tag}])
|
if (newTicket.category){
|
||||||
log("system","ticket type changed",[{key:"user",value:msg.author.tag},{key:"ticket",value:name},{key:"newtype",value:newtype}])
|
const parent = await msg.guild.channels.fetch(newTicket.category,{cache:true})
|
||||||
APIEvents.onCommand("change",permsChecker.command(msg.author.id,msg.guild.id),msg.author,msg.channel,msg.guild,new Date())
|
if (parent && parent.type == discord.ChannelType.GuildCategory) msg.channel.setParent(parent)
|
||||||
})
|
}
|
||||||
|
|
||||||
|
msg.channel.setName(newTicket.channelprefix+name)
|
||||||
|
msg.channel.send({embeds:[bot.embeds.commands.changeEmbed(msg.author,newtype)]})
|
||||||
|
|
||||||
|
log("command","someone used the 'change' command",[{key:"user",value:msg.author.username}])
|
||||||
|
log("system","ticket type changed",[{key:"user",value:msg.author.username},{key:"ticket",value:name},{key:"newtype",value:newtype}])
|
||||||
|
APIEvents.onCommand("change",permsChecker.command(msg.author.id,msg.guild.id),msg.author,msg.channel,msg.guild,new Date())
|
||||||
})
|
})
|
||||||
|
|
||||||
if (!DISABLE.commands.slash.change) client.on("interactionCreate",(interaction) => {
|
if (!DISABLE.commands.slash.change) client.on("interactionCreate",async (interaction) => {
|
||||||
if (!interaction.isChatInputCommand()) return
|
if (!interaction.isChatInputCommand()) return
|
||||||
if (interaction.commandName != "change") return
|
if (interaction.commandName != "change") return
|
||||||
|
|
||||||
@@ -66,38 +63,56 @@ module.exports = () => {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
//interaction.deferReply()
|
await interaction.deferReply()
|
||||||
interaction.channel.messages.fetchPinned().then(msglist => {
|
const hiddendata = bot.hiddenData.readHiddenData(interaction.channel.id)
|
||||||
var firstmsg = msglist.last()
|
if (hiddendata.length < 1) return interaction.editReply({embeds:[bot.errorLog.notInATicket]})
|
||||||
if (firstmsg == undefined || firstmsg.author.id != client.user.id) return interaction.reply({embeds:[bot.errorLog.notInATicket]})
|
const ticketId = hiddendata.find(d => d.key == "type").value
|
||||||
const hiddendata = bot.hiddenData.readHiddenData(firstmsg.embeds[0].description)
|
|
||||||
const ticketId = hiddendata.data.find(d => d.key == "type").value
|
|
||||||
|
|
||||||
var newtype = interaction.options.getString("type",true)
|
const list = []
|
||||||
if (!newtype) return interaction.reply({embeds:[bot.errorLog.invalidArgsMessage(l.errors.missingArgsDescription+" `<type>`:\n`"+config.prefix+"change <type>`")]})
|
config.options.forEach((o) => list.push(o.id))
|
||||||
|
|
||||||
const newTicket = require("../core/utils/configParser").getTicketById(newtype,true)
|
var newtype = interaction.options.getString("type",true)
|
||||||
const list = []
|
const newTicket = require("../core/utils/configParser").getTicketById(newtype,true)
|
||||||
config.options.forEach((o) => list.push(o.id))
|
|
||||||
if (!newTicket) return bot.errorLog.invalidIdChooseFromList(list)
|
|
||||||
|
|
||||||
/**@type {String} */
|
if (!newTicket) return interaction.editReply({embeds:[bot.errorLog.invalidIdChooseFromList(list,l.errors.missingArgsDescription+" `<type>`:\n`"+config.prefix+"change <type>`")]})
|
||||||
var chName = interaction.channel.name
|
|
||||||
const splitted = chName.split("-")
|
|
||||||
const prefix = splitted.shift()
|
|
||||||
const name = (splitted.length > 0) ? splitted.join("-") : prefix
|
|
||||||
|
|
||||||
if (newTicket.category){
|
/**@type {discord.PermissionOverwriteManager} */
|
||||||
const parent = interaction.guild.channels.cache.forEach((ch) => (ch.type == discord.ChannelType.GuildCategory) && ch.id == newTicket.category)
|
const prePermsManager = interaction.channel.permissionOverwrites
|
||||||
if (parent) interaction.channel.setParent(parent)
|
const prePerms = prePermsManager.cache
|
||||||
|
|
||||||
|
/**@type {String} */
|
||||||
|
var chName = interaction.channel.name
|
||||||
|
const splitted = chName.split("-")
|
||||||
|
const prefix = splitted.shift()
|
||||||
|
const name = (splitted.length > 0) ? splitted.join("-") : prefix
|
||||||
|
|
||||||
|
if (newTicket.category){
|
||||||
|
const parent = await interaction.guild.channels.fetch(newTicket.category,{cache:true})
|
||||||
|
if (parent && parent.type == discord.ChannelType.GuildCategory) interaction.channel.setParent(parent)
|
||||||
|
}
|
||||||
|
|
||||||
|
await prePermsManager.set(prePerms)
|
||||||
|
interaction.channel.setName(newTicket.channelprefix+name)
|
||||||
|
|
||||||
|
var newHiddendata = hiddendata.data
|
||||||
|
newHiddendata.find((value,index) => {
|
||||||
|
if (value.key == "type"){
|
||||||
|
newHiddendata[index] = {key:"type",value:newtype}
|
||||||
}
|
}
|
||||||
|
|
||||||
interaction.channel.setName(newTicket.channelprefix+name)
|
|
||||||
interaction.reply({embeds:[bot.embeds.commands.changeEmbed(interaction.user,newtype)]})
|
|
||||||
|
|
||||||
log("command","someone used the 'change' command",[{key:"user",value:interaction.user.tag}])
|
|
||||||
log("system","ticket type changed",[{key:"user",value:interaction.user.tag},{key:"ticket",value:name},{key:"newtype",value:newtype}])
|
|
||||||
APIEvents.onCommand("change",permsChecker.command(interaction.user.id,interaction.guild.id),interaction.user,interaction.channel,interaction.guild,new Date())
|
|
||||||
})
|
})
|
||||||
|
|
||||||
|
const prevDescription = bot.hiddenData.removeHiddenData(firstmsg.embeds[0].description).description
|
||||||
|
const newData = bot.hiddenData.writeHiddenData("ticketdata",newHiddendata)
|
||||||
|
const newDescription = prevDescription+newData
|
||||||
|
const newEmbed = new discord.EmbedBuilder(firstmsg.embeds[0].data)
|
||||||
|
.setDescription(newDescription)
|
||||||
|
|
||||||
|
firstmsg.edit({embeds:[newEmbed]})
|
||||||
|
|
||||||
|
interaction.editReply({embeds:[bot.embeds.commands.changeEmbed(interaction.user,newtype)]})
|
||||||
|
|
||||||
|
log("command","someone used the 'change' command",[{key:"user",value:interaction.user.username}])
|
||||||
|
log("system","ticket type changed",[{key:"user",value:interaction.user.username},{key:"ticket",value:name},{key:"newtype",value:newtype}])
|
||||||
|
APIEvents.onCommand("change",permsChecker.command(interaction.user.id,interaction.guild.id),interaction.user,interaction.channel,interaction.guild,new Date())
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
+49
-29
@@ -5,6 +5,8 @@ const config = bot.config
|
|||||||
const log = bot.errorLog.log
|
const log = bot.errorLog.log
|
||||||
const l = bot.language
|
const l = bot.language
|
||||||
const permsChecker = require("../core/utils/permisssionChecker")
|
const permsChecker = require("../core/utils/permisssionChecker")
|
||||||
|
const embed = discord.EmbedBuilder
|
||||||
|
const storage = bot.storage
|
||||||
|
|
||||||
const APIEvents = require("../core/api/modules/events")
|
const APIEvents = require("../core/api/modules/events")
|
||||||
const DISABLE = require("../core/api/api.json").disable
|
const DISABLE = require("../core/api/api.json").disable
|
||||||
@@ -24,28 +26,34 @@ module.exports = () => {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
msg.channel.messages.fetchPinned().then(msglist => {
|
const hiddendata = bot.hiddenData.readHiddenData(msg.channel.id)
|
||||||
var firstmsg = msglist.last()
|
if (hiddendata.length < 1) return msg.channel.send({embeds:[bot.errorLog.notInATicket]})
|
||||||
if (firstmsg == undefined || firstmsg.author.id != client.user.id) return msg.channel.send({embeds:[bot.errorLog.notInATicket]})
|
const ticketId = hiddendata.find(d => d.key == "type").value
|
||||||
const hiddendata = bot.hiddenData.readHiddenData(firstmsg.embeds[0].description)
|
|
||||||
const ticketId = hiddendata.data.find(d => d.key == "type").value
|
|
||||||
|
|
||||||
|
hiddendata.push({key:"claimedby",value:claimingUser.id})
|
||||||
|
bot.hiddenData.writeHiddenData(msg.channel.id,hiddendata)
|
||||||
|
storage.set("claimData",msg.channel.id,claimingUser.id)
|
||||||
|
|
||||||
//msg.channel.send({embeds:[bot.embeds.commands.claimEmbed(claimingUser,msg.author)]})
|
const newEmbed = new embed(firstmsg.embeds[0].data)
|
||||||
msg.channel.send({embeds:[bot.errorLog.warning("Coming soon!","This feature isn't ready yet!\nIt will become active in the next update!")]})
|
.setFooter({text:"claimed by: "+msg.author.username,iconURL:msg.author.displayAvatarURL()})
|
||||||
|
|
||||||
var loguser = claimingUser
|
if (firstmsg.components[0].components[1] && firstmsg.components[0].components[1].disabled){
|
||||||
log("command","someone used the 'claim' command",[{key:"user",value:msg.author.tag}])
|
firstmsg.edit({components:[bot.buttons.firstmsg.firstmsgRowDisabledNoClaim],embeds:[newEmbed]})
|
||||||
log("system","user claimed to ticket",[{key:"user",value:msg.author.tag},{key:"ticket",value:msg.channel.name},{key:"claimed_user",value:claimingUser.tag}])
|
}else{
|
||||||
|
firstmsg.edit({components:[bot.buttons.firstmsg.firstmsgRowNormalNoClaim],embeds:[newEmbed]})
|
||||||
|
}
|
||||||
|
|
||||||
const ticketData = require("../core/utils/configParser").getTicketById(ticketId,true)
|
msg.channel.send({embeds:[bot.embeds.commands.claimEmbed(claimingUser,msg.author)]})
|
||||||
//APIEvents.onTicketAdd(msg.author,loguser,msg.channel,msg.guild,new Date(),{status:"open",name:msg.channel.name,ticketOptions:ticketData})
|
|
||||||
//APIEvents.onCommand("add",permsChecker.command(msg.author.id,msg.guild.id),msg.author,msg.channel,msg.guild,new Date())
|
|
||||||
})
|
|
||||||
|
|
||||||
|
log("command","someone used the 'claim' command",[{key:"user",value:msg.author.username}])
|
||||||
|
log("system","user claimed to ticket",[{key:"user",value:msg.author.username},{key:"ticket",value:msg.channel.name},{key:"claimed_user",value:claimingUser.username}])
|
||||||
|
|
||||||
|
const ticketData = require("../core/utils/configParser").getTicketById(ticketId,true)
|
||||||
|
APIEvents.onTicketClaim(msg.author,loguser,msg.channel,msg.guild,new Date(),{status:"open",name:msg.channel.name,ticketOptions:ticketData})
|
||||||
|
APIEvents.onCommand("claim",permsChecker.command(msg.author.id,msg.guild.id),msg.author,msg.channel,msg.guild,new Date())
|
||||||
})
|
})
|
||||||
|
|
||||||
if (!DISABLE.commands.slash.claim) client.on("interactionCreate",(interaction) => {
|
if (!DISABLE.commands.slash.claim) client.on("interactionCreate",async (interaction) => {
|
||||||
if (!interaction.isChatInputCommand()) return
|
if (!interaction.isChatInputCommand()) return
|
||||||
if (interaction.commandName != "claim") return
|
if (interaction.commandName != "claim") return
|
||||||
const user = interaction.options.getUser("user",false) ? interaction.options.getUser("user",true) : interaction.user
|
const user = interaction.options.getUser("user",false) ? interaction.options.getUser("user",true) : interaction.user
|
||||||
@@ -53,28 +61,40 @@ module.exports = () => {
|
|||||||
if (!interaction.guild) return
|
if (!interaction.guild) return
|
||||||
if (!permsChecker.command(interaction.user.id,interaction.guild.id)){
|
if (!permsChecker.command(interaction.user.id,interaction.guild.id)){
|
||||||
permsChecker.sendUserNoPerms(interaction.user)
|
permsChecker.sendUserNoPerms(interaction.user)
|
||||||
return
|
return interaction.reply({content:":x: "+l.errors.noPermsTitle,ephemeral:true})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
await interaction.deferReply()
|
||||||
|
|
||||||
|
const hiddendata = bot.hiddenData.readHiddenData(interaction.channel.id)
|
||||||
|
if (hiddendata.length < 1) return interaction.editReply({embeds:[bot.errorLog.notInATicket]})
|
||||||
|
const ticketId = hiddendata.find(d => d.key == "type").value
|
||||||
|
|
||||||
|
hiddendata.push({key:"claimedby",value:user.id})
|
||||||
|
bot.hiddenData.writeHiddenData(interaction.channel.id,hiddendata)
|
||||||
|
storage.set("claimData",interaction.channel.id,user.id)
|
||||||
|
|
||||||
interaction.channel.messages.fetchPinned().then(msglist => {
|
interaction.channel.messages.fetchPinned().then(msglist => {
|
||||||
var firstmsg = msglist.last()
|
var firstmsg = msglist.last()
|
||||||
if (firstmsg == undefined || firstmsg.author.id != client.user.id) return interaction.reply({embeds:[bot.errorLog.notInATicket]})
|
if (firstmsg == undefined || firstmsg.author.id != client.user.id) return msg.channel.send({embeds:[bot.errorLog.notInATicket]})
|
||||||
const hiddendata = bot.hiddenData.readHiddenData(firstmsg.embeds[0].description)
|
|
||||||
const ticketId = hiddendata.data.find(d => d.key == "type").value
|
|
||||||
|
|
||||||
//interaction.reply({embeds:[bot.embeds.commands.claimEmbed(user,interaction.user)]})
|
const newEmbed = new embed(firstmsg.embeds[0].data)
|
||||||
interaction.reply({embeds:[bot.errorLog.warning("Coming soon!","This feature isn't ready yet!\nIt will become active in the next update!")]})
|
.setFooter({text:"claimed by: "+user.username,iconURL:user.displayAvatarURL()})
|
||||||
|
|
||||||
var loguser = user
|
|
||||||
log("command","someone used the 'claim' command",[{key:"user",value:interaction.user.tag}])
|
|
||||||
log("system","user claimed to ticket",[{key:"user",value:interaction.user.tag},{key:"ticket",value:interaction.channel.name},{key:"claimed_user",value:loguser.tag}])
|
|
||||||
|
|
||||||
const ticketData = require("../core/utils/configParser").getTicketById(ticketId,true)
|
|
||||||
//APIEvents.onTicketAdd(interaction.user,loguser,interaction.channel,interaction.guild,new Date(),{status:"open",name:interaction.channel.name,ticketOptions:ticketData})
|
|
||||||
//APIEvents.onCommand("add",permsChecker.command(interaction.user.id,interaction.guild.id),interaction.user,interaction.channel,interaction.guild,new Date())
|
|
||||||
|
|
||||||
|
if (firstmsg.components[0].components[1] && firstmsg.components[0].components[1].disabled){
|
||||||
|
firstmsg.edit({components:[bot.buttons.firstmsg.firstmsgRowDisabledNoClaim],embeds:[newEmbed]})
|
||||||
|
}else{
|
||||||
|
firstmsg.edit({components:[bot.buttons.firstmsg.firstmsgRowNormalNoClaim],embeds:[newEmbed]})
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
interaction.editReply({embeds:[bot.embeds.commands.claimEmbed(user,interaction.user)]})
|
||||||
|
|
||||||
|
log("command","someone used the 'claim' command",[{key:"user",value:interaction.user.username}])
|
||||||
|
log("system","user claimed to ticket",[{key:"user",value:interaction.user.username},{key:"ticket",value:interaction.channel.name},{key:"claimed_user",value:user.username}])
|
||||||
|
|
||||||
|
const ticketData = require("../core/utils/configParser").getTicketById(ticketId,true)
|
||||||
|
APIEvents.onTicketClaim(interaction.user,user,interaction.channel,interaction.guild,new Date(),{status:"open",name:interaction.channel.name,ticketOptions:ticketData})
|
||||||
|
APIEvents.onCommand("claim",permsChecker.command(interaction.user.id,interaction.guild.id),interaction.user,interaction.channel,interaction.guild,new Date())
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
+37
-44
@@ -24,37 +24,32 @@ module.exports = () => {
|
|||||||
}
|
}
|
||||||
const reason = tempreason
|
const reason = tempreason
|
||||||
|
|
||||||
msg.channel.messages.fetchPinned().then(msglist => {
|
const hiddendata = bot.hiddenData.readHiddenData(msg.channel.id)
|
||||||
var firstmsg = msglist.last()
|
if (hiddendata.length < 1) return msg.channel.send({embeds:[bot.errorLog.notInATicket]})
|
||||||
if (firstmsg == undefined || firstmsg.author.id != client.user.id) return msg.channel.send({embeds:[bot.errorLog.notInATicket]})
|
const ticketId = hiddendata.find(d => d.key == "type").value
|
||||||
const hiddendata = bot.hiddenData.readHiddenData(firstmsg.embeds[0].description)
|
|
||||||
const ticketId = hiddendata.data.find(d => d.key == "type").value
|
|
||||||
|
|
||||||
if (hiddendata.data.find(h => h.key == "pendingdelete")) return msg.channel.send({embeds:[bot.errorLog.warning("Warning!","You can't close a ticket while it's being deleted!")]})
|
if (hiddendata.find(h => h.key == "pendingdelete")) return msg.channel.send({embeds:[bot.errorLog.warning("Warning!","You can't close a ticket while it's being deleted!")]})
|
||||||
|
|
||||||
const descriptionReason = reason ? "**"+l.messages.reason+":** "+reason : false
|
const descriptionReason = reason ? "**"+l.messages.reason+":** "+reason : false
|
||||||
msg.channel.send({embeds:[bot.embeds.commands.closeEmbed(msg.author,descriptionReason)],components:[bot.buttons.close.closeCommandRow]})
|
msg.channel.send({embeds:[bot.embeds.commands.closeEmbed(msg.author,descriptionReason)],components:[bot.buttons.close.closeCommandRow]})
|
||||||
|
|
||||||
var name = msg.channel.name
|
|
||||||
var prefix = ""
|
|
||||||
const tickets = config.options
|
|
||||||
tickets.forEach((ticket) => {
|
|
||||||
if (name.startsWith(ticket.channelprefix)){
|
|
||||||
prefix = ticket.channelprefix
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
require("../core/ticketActions/ticketCloser").NEWcloseTicket(msg.member,msg.channel,prefix,"close",reason,true)
|
|
||||||
|
|
||||||
log("command","someone used the 'close' command",[{key:"user",value:msg.author.tag}])
|
|
||||||
APIEvents.onCommand("close",true,msg.author,msg.channel,msg.guild,new Date())
|
|
||||||
|
|
||||||
|
var name = msg.channel.name
|
||||||
|
var prefix = ""
|
||||||
|
const tickets = config.options
|
||||||
|
tickets.forEach((ticket) => {
|
||||||
|
if (name.startsWith(ticket.channelprefix)){
|
||||||
|
prefix = ticket.channelprefix
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
require("../core/ticketActions/ticketCloser").closeManager(msg.member,msg.channel,prefix,"close",reason,true)
|
||||||
|
|
||||||
|
log("command","someone used the 'close' command",[{key:"user",value:msg.author.username}])
|
||||||
|
APIEvents.onCommand("close",true,msg.author,msg.channel,msg.guild,new Date())
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
if (!DISABLE.commands.slash.close) client.on("interactionCreate",(interaction) => {
|
if (!DISABLE.commands.slash.close) client.on("interactionCreate",async(interaction) => {
|
||||||
if (!interaction.isChatInputCommand()) return
|
if (!interaction.isChatInputCommand()) return
|
||||||
if (interaction.commandName != "close") return
|
if (interaction.commandName != "close") return
|
||||||
|
|
||||||
@@ -62,31 +57,29 @@ module.exports = () => {
|
|||||||
|
|
||||||
const reason = interaction.options.getString("reason") ? interaction.options.getString("reason") : false
|
const reason = interaction.options.getString("reason") ? interaction.options.getString("reason") : false
|
||||||
|
|
||||||
interaction.channel.messages.fetchPinned().then(msglist => {
|
await interaction.deferReply()
|
||||||
var firstmsg = msglist.last()
|
|
||||||
if (firstmsg == undefined || firstmsg.author.id != client.user.id) return interaction.reply({embeds:[bot.errorLog.notInATicket]})
|
|
||||||
const hiddendata = bot.hiddenData.readHiddenData(firstmsg.embeds[0].description)
|
|
||||||
const ticketId = hiddendata.data.find(d => d.key == "type").value
|
|
||||||
|
|
||||||
if (hiddendata.data.find(h => h.key == "pendingdelete")) return interaction.reply({embeds:[bot.errorLog.warning("Warning!","You can't close a ticket while it's being deleted!")]})
|
const hiddendata = bot.hiddenData.readHiddenData(interaction.channel.id)
|
||||||
|
if (hiddendata.length < 1) return interaction.editReply({embeds:[bot.errorLog.notInATicket]})
|
||||||
|
const ticketId = hiddendata.find(d => d.key == "type").value
|
||||||
|
|
||||||
const descriptionReason = reason ? "**"+l.messages.reason+":** "+reason : false
|
if (hiddendata.find(h => h.key == "pendingdelete")) return interaction.editReply({embeds:[bot.errorLog.warning("Warning!","You can't close a ticket while it's being deleted!")]})
|
||||||
interaction.reply({embeds:[bot.embeds.commands.closeEmbed(interaction.user,descriptionReason)],components:[bot.buttons.close.closeCommandRow]})
|
|
||||||
|
|
||||||
var name = interaction.channel.name
|
const descriptionReason = reason ? "**"+l.messages.reason+":** "+reason : false
|
||||||
var prefix = ""
|
interaction.editReply({embeds:[bot.embeds.commands.closeEmbed(interaction.user,descriptionReason)],components:[bot.buttons.close.closeCommandRow]})
|
||||||
const tickets = config.options
|
|
||||||
tickets.forEach((ticket) => {
|
|
||||||
if (name.startsWith(ticket.channelprefix)){
|
|
||||||
prefix = ticket.channelprefix
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
require("../core/ticketActions/ticketCloser").NEWcloseTicket(interaction.member,interaction.channel,prefix,"close",false,true)
|
|
||||||
|
|
||||||
log("command","someone used the 'close' command",[{key:"user",value:interaction.user.tag}])
|
|
||||||
APIEvents.onCommand("close",true,interaction.user,interaction.channel,interaction.guild,new Date())
|
|
||||||
|
|
||||||
|
var name = interaction.channel.name
|
||||||
|
var prefix = ""
|
||||||
|
const tickets = config.options
|
||||||
|
tickets.forEach((ticket) => {
|
||||||
|
if (name.startsWith(ticket.channelprefix)){
|
||||||
|
prefix = ticket.channelprefix
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
require("../core/ticketActions/ticketCloser").closeManager(interaction.member,interaction.channel,prefix,"close",false,true)
|
||||||
|
|
||||||
|
log("command","someone used the 'close' command",[{key:"user",value:interaction.user.username}])
|
||||||
|
APIEvents.onCommand("close",true,interaction.user,interaction.channel,interaction.guild,new Date())
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
+33
-41
@@ -21,66 +21,58 @@ module.exports = () => {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
msg.channel.messages.fetchPinned().then(msglist => {
|
const hiddendata = bot.hiddenData.readHiddenData(msg.channel.id)
|
||||||
var firstmsg = msglist.last()
|
if (hiddendata.length < 1) return msg.channel.send({embeds:[bot.errorLog.notInATicket]})
|
||||||
if (firstmsg == undefined || firstmsg.author.id != client.user.id) return msg.channel.send({embeds:[bot.errorLog.notInATicket]})
|
const ticketId = hiddendata.find(d => d.key == "type").value
|
||||||
const hiddendata = bot.hiddenData.readHiddenData(firstmsg.embeds[0].description)
|
|
||||||
const ticketId = hiddendata.data.find(d => d.key == "type").value
|
|
||||||
|
|
||||||
msg.channel.send({embeds:[bot.embeds.commands.deleteEmbed(msg.author)]})
|
msg.channel.send({embeds:[bot.embeds.commands.deleteEmbed(msg.author)]})
|
||||||
|
|
||||||
var name = msg.channel.name
|
var name = msg.channel.name
|
||||||
var prefix = ""
|
var prefix = ""
|
||||||
const tickets = config.options
|
const tickets = config.options
|
||||||
tickets.forEach((ticket) => {
|
tickets.forEach((ticket) => {
|
||||||
if (name.startsWith(ticket.channelprefix)){
|
if (name.startsWith(ticket.channelprefix)){
|
||||||
prefix = ticket.channelprefix
|
prefix = ticket.channelprefix
|
||||||
}
|
}
|
||||||
})
|
|
||||||
|
|
||||||
require("../core/ticketActions/ticketCloser").NEWcloseTicket(msg.member,msg.channel,prefix,"delete",false,true)
|
|
||||||
|
|
||||||
log("command","someone used the 'delete' command",[{key:"user",value:msg.author.tag}])
|
|
||||||
APIEvents.onCommand("delete",permsChecker.command(msg.author.id,msg.guild.id),msg.author,msg.channel,msg.guild,new Date())
|
|
||||||
})
|
})
|
||||||
|
|
||||||
|
require("../core/ticketActions/ticketCloser").closeManager(msg.member,msg.channel,prefix,"delete",false,true)
|
||||||
|
|
||||||
|
log("command","someone used the 'delete' command",[{key:"user",value:msg.author.username}])
|
||||||
|
APIEvents.onCommand("delete",permsChecker.command(msg.author.id,msg.guild.id),msg.author,msg.channel,msg.guild,new Date())
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
if (!DISABLE.commands.slash.delete) client.on("interactionCreate",(interaction) => {
|
if (!DISABLE.commands.slash.delete) client.on("interactionCreate",async (interaction) => {
|
||||||
if (!interaction.isChatInputCommand()) return
|
if (!interaction.isChatInputCommand()) return
|
||||||
if (interaction.commandName != "delete") return
|
if (interaction.commandName != "delete") return
|
||||||
|
|
||||||
//interaction.deferReply()
|
|
||||||
|
|
||||||
if (!interaction.guild) return
|
if (!interaction.guild) return
|
||||||
if (!permsChecker.command(interaction.user.id,interaction.guild.id)){
|
if (!permsChecker.command(interaction.user.id,interaction.guild.id)){
|
||||||
permsChecker.sendUserNoPerms(interaction.user)
|
permsChecker.sendUserNoPerms(interaction.user)
|
||||||
return interaction.reply({embeds:[bot.errorLog.noPermsDelete(interaction.user)]})
|
return interaction.reply({embeds:[bot.errorLog.noPermsDelete(interaction.user)]})
|
||||||
}
|
}
|
||||||
|
|
||||||
interaction.channel.messages.fetchPinned().then(msglist => {
|
await interaction.deferReply()
|
||||||
var firstmsg = msglist.last()
|
|
||||||
if (firstmsg == undefined || firstmsg.author.id != client.user.id) return interaction.reply({embeds:[bot.errorLog.notInATicket]})
|
|
||||||
const hiddendata = bot.hiddenData.readHiddenData(firstmsg.embeds[0].description)
|
|
||||||
const ticketId = hiddendata.data.find(d => d.key == "type").value
|
|
||||||
|
|
||||||
interaction.reply({embeds:[bot.embeds.commands.deleteEmbed(interaction.user)]})
|
const hiddendata = bot.hiddenData.readHiddenData(interaction.channel.id)
|
||||||
|
if (hiddendata.length < 1) return interaction.editReply({embeds:[bot.errorLog.notInATicket]})
|
||||||
|
const ticketId = hiddendata.find(d => d.key == "type").value
|
||||||
|
|
||||||
var name = interaction.channel.name
|
interaction.editReply({embeds:[bot.embeds.commands.deleteEmbed(interaction.user)]})
|
||||||
var prefix = ""
|
|
||||||
const tickets = config.options
|
|
||||||
tickets.forEach((ticket) => {
|
|
||||||
if (name.startsWith(ticket.channelprefix)){
|
|
||||||
prefix = ticket.channelprefix
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
require("../core/ticketActions/ticketCloser").NEWcloseTicket(interaction.member,interaction.channel,prefix,"delete",false,true)
|
|
||||||
|
|
||||||
log("command","someone used the 'delete' command",[{key:"user",value:interaction.user.tag}])
|
|
||||||
APIEvents.onCommand("delete",permsChecker.command(interaction.user.id,interaction.guild.id),interaction.user,interaction.channel,interaction.guild,new Date())
|
|
||||||
|
|
||||||
|
var name = interaction.channel.name
|
||||||
|
var prefix = ""
|
||||||
|
const tickets = config.options
|
||||||
|
tickets.forEach((ticket) => {
|
||||||
|
if (name.startsWith(ticket.channelprefix)){
|
||||||
|
prefix = ticket.channelprefix
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
require("../core/ticketActions/ticketCloser").closeManager(interaction.member,interaction.channel,prefix,"delete",false,true)
|
||||||
|
|
||||||
|
log("command","someone used the 'delete' command",[{key:"user",value:interaction.user.username}])
|
||||||
|
APIEvents.onCommand("delete",permsChecker.command(interaction.user.id,interaction.guild.id),interaction.user,interaction.channel,interaction.guild,new Date())
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
+9
-6
@@ -15,11 +15,14 @@ module.exports = () => {
|
|||||||
const prefix = config.system.showSlashcmdsInHelp ? "/" : config.prefix
|
const prefix = config.system.showSlashcmdsInHelp ? "/" : config.prefix
|
||||||
|
|
||||||
const helpEmbed = new discord.EmbedBuilder()
|
const helpEmbed = new discord.EmbedBuilder()
|
||||||
.setColor(config.main_color)
|
.setColor(config.color)
|
||||||
.setTitle("❔ "+l.helpMenu.title)
|
.setTitle("❔ "+l.helpMenu.title)
|
||||||
|
|
||||||
const header = config.system.ticket_channel ? l.helpMenu.header1.replace("{0}","<#"+config.system.ticket_channel+">") : l.helpMenu.header2
|
const header = l.helpMenu.header2
|
||||||
helpEmbed.setDescription(header+"`"+prefix+msgName+" <id>` ➜ _"+l.helpMenu.msgCmd+"_\n\n`"+prefix+"rename <name>` ➜ _"+l.helpMenu.renameCmd+"_\n`"+prefix+"close` ➜ _"+l.helpMenu.closeCmd+"_\n`"+prefix+"delete` ➜ _"+l.helpMenu.deleteCmd+"_\n`"+prefix+"reopen` ➜ _"+l.helpMenu.reopenCmd+"_\n\n`"+prefix+"add <user>` ➜ _"+l.helpMenu.addCmd+"_\n`"+prefix+"remove <user>` ➜ _"+l.helpMenu.removeCmd+"_\n\n`"+prefix+"change <newtype>` ➜ _Change ticket type._")
|
helpEmbed.setDescription(header+"`"+prefix+msgName+" <id>` ➜ _"+l.helpMenu.msgCmd+"_\n\n`"+prefix+"rename <name>` ➜ _"+l.helpMenu.renameCmd+"_\n`"+prefix+"close [reason]` ➜ _"+l.helpMenu.closeCmd+"_\n`"+prefix+"delete` ➜ _"+l.helpMenu.deleteCmd+"_\n`"+prefix+"reopen` ➜ _"+l.helpMenu.reopenCmd+"_\n\n`"+prefix+"add <user>` ➜ _"+l.helpMenu.addCmd+"_\n`"+prefix+"remove <user>` ➜ _"+l.helpMenu.removeCmd+"_\n\n`"+prefix+"change <newtype>` ➜ _"+l.helpMenu.changeCmd+"_\n`"+prefix+"claim [user]` ➜ _"+l.helpMenu.claimCmd+"_\n`"+prefix+"unclaim` ➜ _"+l.helpMenu.unclaimCmd+"_")
|
||||||
|
helpEmbed.addFields([
|
||||||
|
{name:"Autoclose",value:l.helpMenu.autocloseCmd+"\n`"+prefix+"autoclose enable <inactive time>`\n`"+prefix+"autoclose disable`"}
|
||||||
|
])
|
||||||
|
|
||||||
var otherprefix = prefix.endsWith(" ") ? prefix.substring(0,prefix.length-1) : prefix
|
var otherprefix = prefix.endsWith(" ") ? prefix.substring(0,prefix.length-1) : prefix
|
||||||
|
|
||||||
@@ -29,7 +32,7 @@ module.exports = () => {
|
|||||||
|
|
||||||
if (msg.content == config.prefix || msg.content == config.prefix+" " || msg.content == otherprefix){
|
if (msg.content == config.prefix || msg.content == config.prefix+" " || msg.content == otherprefix){
|
||||||
msg.channel.send({embeds:[helpEmbed]})
|
msg.channel.send({embeds:[helpEmbed]})
|
||||||
log("command","someone used the 'help' command",[{key:"user",value:msg.author.tag}])
|
log("command","someone used the 'help' command",[{key:"user",value:msg.author.username}])
|
||||||
APIEvents.onCommand("help",true,msg.author,msg.channel,msg.guild,new Date())
|
APIEvents.onCommand("help",true,msg.author,msg.channel,msg.guild,new Date())
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -37,7 +40,7 @@ module.exports = () => {
|
|||||||
if (args[1]){
|
if (args[1]){
|
||||||
if (!args[1].startsWith("close") && !args[1].startsWith("delete") && !args[1].startsWith("remove") && !args[1].startsWith("add") && !args[1].startsWith("msg") && !args[1].startsWith("remove") && !args[1].startsWith("rename") && !args[1].startsWith("reopen")){
|
if (!args[1].startsWith("close") && !args[1].startsWith("delete") && !args[1].startsWith("remove") && !args[1].startsWith("add") && !args[1].startsWith("msg") && !args[1].startsWith("remove") && !args[1].startsWith("rename") && !args[1].startsWith("reopen")){
|
||||||
msg.channel.send({embeds:[helpEmbed]})
|
msg.channel.send({embeds:[helpEmbed]})
|
||||||
log("command","someone used the 'help' command",[{key:"user",value:msg.author.tag}])
|
log("command","someone used the 'help' command",[{key:"user",value:msg.author.username}])
|
||||||
APIEvents.onCommand("help",true,msg.author,msg.channel,msg.guild,new Date())
|
APIEvents.onCommand("help",true,msg.author,msg.channel,msg.guild,new Date())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -48,7 +51,7 @@ module.exports = () => {
|
|||||||
if (interaction.commandName != "help") return
|
if (interaction.commandName != "help") return
|
||||||
|
|
||||||
interaction.reply({embeds:[helpEmbed]})
|
interaction.reply({embeds:[helpEmbed]})
|
||||||
log("command","someone used the 'help' command",[{key:"user",value:interaction.user.tag}])
|
log("command","someone used the 'help' command",[{key:"user",value:interaction.user.username}])
|
||||||
APIEvents.onCommand("help",true,interaction.user,interaction.channel,interaction.guild,new Date())
|
APIEvents.onCommand("help",true,interaction.user,interaction.channel,interaction.guild,new Date())
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
+24
-29
@@ -23,25 +23,21 @@ module.exports = () => {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
msg.channel.messages.fetchPinned().then(msglist => {
|
const hiddendata = bot.hiddenData.readHiddenData(msg.channel.id)
|
||||||
var firstmsg = msglist.last()
|
if (hiddendata.length < 1) return msg.channel.send({embeds:[bot.errorLog.notInATicket]})
|
||||||
if (firstmsg == undefined || firstmsg.author.id != client.user.id) return msg.channel.send({embeds:[bot.errorLog.notInATicket]})
|
const ticketId = hiddendata.find(d => d.key == "type").value
|
||||||
const hiddendata = bot.hiddenData.readHiddenData(firstmsg.embeds[0].description)
|
|
||||||
const ticketId = hiddendata.data.find(d => d.key == "type").value
|
|
||||||
|
|
||||||
msg.channel.permissionOverwrites.delete(user.id)
|
msg.channel.permissionOverwrites.delete(user.id)
|
||||||
msg.channel.send({embeds:[bot.embeds.commands.removeEmbed(user,msg.author)]})
|
msg.channel.send({embeds:[bot.embeds.commands.removeEmbed(user,msg.author)]})
|
||||||
|
|
||||||
var loguser = msg.mentions.users.first()
|
var loguser = msg.mentions.users.first()
|
||||||
|
|
||||||
log("command","someone used the 'remove' command",[{key:"user",value:msg.author.tag}])
|
log("command","someone used the 'remove' command",[{key:"user",value:msg.author.username}])
|
||||||
log("system","user removed from ticket",[{key:"user",value:msg.author.tag},{key:"ticket",value:msg.channel.name},{key:"removed_user",value:loguser.tag}])
|
log("system","user removed from ticket",[{key:"user",value:msg.author.username},{key:"ticket",value:msg.channel.name},{key:"removed_user",value:loguser.username}])
|
||||||
|
|
||||||
const ticketData = require("../core/utils/configParser").getTicketById(ticketId,true)
|
|
||||||
APIEvents.onTicketRemove(msg.author,loguser,msg.channel,msg.guild,new Date(),{status:"open",name:msg.channel.name,ticketOptions:ticketData})
|
|
||||||
APIEvents.onCommand("remove",permsChecker.command(msg.author.id,msg.guild.id),msg.author,msg.channel,msg.guild,new Date())
|
|
||||||
})
|
|
||||||
|
|
||||||
|
const ticketData = require("../core/utils/configParser").getTicketById(ticketId,true)
|
||||||
|
APIEvents.onTicketRemove(msg.author,loguser,msg.channel,msg.guild,new Date(),{status:"open",name:msg.channel.name,ticketOptions:ticketData})
|
||||||
|
APIEvents.onCommand("remove",permsChecker.command(msg.author.id,msg.guild.id),msg.author,msg.channel,msg.guild,new Date())
|
||||||
})
|
})
|
||||||
|
|
||||||
if (!DISABLE.commands.slash.remove) client.on("interactionCreate",async (interaction) => {
|
if (!DISABLE.commands.slash.remove) client.on("interactionCreate",async (interaction) => {
|
||||||
@@ -55,23 +51,22 @@ module.exports = () => {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
await interaction.channel.messages.fetchPinned().then(msglist => {
|
await interaction.deferReply()
|
||||||
var firstmsg = msglist.last()
|
|
||||||
if (firstmsg == undefined || firstmsg.author.id != client.user.id) return interaction.reply({embeds:[bot.errorLog.notInATicket]})
|
|
||||||
const hiddendata = bot.hiddenData.readHiddenData(firstmsg.embeds[0].description)
|
|
||||||
const ticketId = hiddendata.data.find(d => d.key == "type").value
|
|
||||||
|
|
||||||
interaction.channel.permissionOverwrites.delete(user.id)
|
const hiddendata = bot.hiddenData.readHiddenData(interaction.channel.id)
|
||||||
interaction.reply({embeds:[bot.embeds.commands.removeEmbed(user,interaction.user)]})
|
if (hiddendata.length < 1) return interaction.editReply({embeds:[bot.errorLog.notInATicket]})
|
||||||
|
const ticketId = hiddendata.find(d => d.key == "type").value
|
||||||
|
|
||||||
var loguser = user
|
interaction.channel.permissionOverwrites.delete(user.id)
|
||||||
|
interaction.editReply({embeds:[bot.embeds.commands.removeEmbed(user,interaction.user)]})
|
||||||
|
|
||||||
log("command","someone used the 'remove' command",[{key:"user",value:interaction.user.tag}])
|
var loguser = user
|
||||||
log("system","user removed from ticket",[{key:"user",value:interaction.user.tag},{key:"ticket",value:interaction.channel.name},{key:"removed_user",value:loguser.tag}])
|
|
||||||
|
|
||||||
const ticketData = require("../core/utils/configParser").getTicketById(ticketId,true)
|
log("command","someone used the 'remove' command",[{key:"user",value:interaction.user.username}])
|
||||||
APIEvents.onTicketRemove(interaction.user,loguser,interaction.channel,interaction.guild,new Date(),{status:"open",name:interaction.channel.name,ticketOptions:ticketData})
|
log("system","user removed from ticket",[{key:"user",value:interaction.user.username},{key:"ticket",value:interaction.channel.name},{key:"removed_user",value:loguser.username}])
|
||||||
APIEvents.onCommand("remove",permsChecker.command(interaction.user.id,interaction.guild.id),interaction.user,interaction.channel,interaction.guild,new Date())
|
|
||||||
})
|
const ticketData = require("../core/utils/configParser").getTicketById(ticketId,true)
|
||||||
|
APIEvents.onTicketRemove(interaction.user,loguser,interaction.channel,interaction.guild,new Date(),{status:"open",name:interaction.channel.name,ticketOptions:ticketData})
|
||||||
|
APIEvents.onCommand("remove",permsChecker.command(interaction.user.id,interaction.guild.id),interaction.user,interaction.channel,interaction.guild,new Date())
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
+41
-50
@@ -21,39 +21,33 @@ module.exports = () => {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
msg.channel.messages.fetchPinned().then(msglist => {
|
const hiddendata = bot.hiddenData.readHiddenData(msg.channel.id)
|
||||||
var firstmsg = msglist.last()
|
if (hiddendata.length < 1) return msg.channel.send({embeds:[bot.errorLog.notInATicket]})
|
||||||
if (firstmsg == undefined || firstmsg.author.id != client.user.id) return msg.channel.send({embeds:[bot.errorLog.notInATicket]})
|
const ticketId = hiddendata.find(d => d.key == "type").value
|
||||||
const hiddendata = bot.hiddenData.readHiddenData(firstmsg.embeds[0].description)
|
|
||||||
const ticketId = hiddendata.data.find(d => d.key == "type").value
|
|
||||||
|
|
||||||
var newname = msg.content.split(config.prefix+"rename")[1].substring(1)
|
var newname = msg.content.split(config.prefix+"rename")[1].substring(1)
|
||||||
|
|
||||||
if (!newname) return msg.channel.send({embeds:[bot.errorLog.invalidArgsMessage(l.errors.missingArgsDescription+" `<name>`:\n`"+config.prefix+"rename <name>`")]})
|
if (!newname) return msg.channel.send({embeds:[bot.errorLog.invalidArgsMessage(l.errors.missingArgsDescription+" `<name>`:\n`"+config.prefix+"rename <name>`")]})
|
||||||
|
|
||||||
var name = msg.channel.name
|
var name = msg.channel.name
|
||||||
var prefix = ""
|
var prefix = ""
|
||||||
const tickets = config.options
|
const tickets = config.options
|
||||||
tickets.forEach((ticket) => {
|
tickets.forEach((ticket) => {
|
||||||
if (name.startsWith(ticket.channelprefix)){
|
if (name.startsWith(ticket.channelprefix)){
|
||||||
prefix = ticket.channelprefix
|
prefix = ticket.channelprefix
|
||||||
}
|
}
|
||||||
})
|
|
||||||
|
|
||||||
if (!prefix) prefix = "noprefix-"
|
|
||||||
|
|
||||||
msg.channel.setName(prefix+newname)
|
|
||||||
msg.channel.send({embeds:[bot.embeds.commands.renameEmbed(msg.author,prefix+newname)]})
|
|
||||||
|
|
||||||
log("command","someone used the 'rename' command",[{key:"user",value:msg.author.tag}])
|
|
||||||
log("system","ticket renamed",[{key:"user",value:msg.author.tag},{key:"ticket",value:name},{key:"newname",value:newname}])
|
|
||||||
APIEvents.onCommand("rename",permsChecker.command(msg.author.id,msg.guild.id),msg.author,msg.channel,msg.guild,new Date())
|
|
||||||
})
|
})
|
||||||
|
|
||||||
|
if (!prefix) prefix = "noprefix-"
|
||||||
|
msg.channel.setName(prefix+newname)
|
||||||
|
msg.channel.send({embeds:[bot.embeds.commands.renameEmbed(msg.author,prefix+newname)]})
|
||||||
|
|
||||||
|
log("command","someone used the 'rename' command",[{key:"user",value:msg.author.username}])
|
||||||
|
log("system","ticket renamed",[{key:"user",value:msg.author.username},{key:"ticket",value:name},{key:"newname",value:newname}])
|
||||||
|
APIEvents.onCommand("rename",permsChecker.command(msg.author.id,msg.guild.id),msg.author,msg.channel,msg.guild,new Date())
|
||||||
})
|
})
|
||||||
|
|
||||||
if (!DISABLE.commands.slash.rename) client.on("interactionCreate",(interaction) => {
|
if (!DISABLE.commands.slash.rename) client.on("interactionCreate",async (interaction) => {
|
||||||
if (!interaction.isChatInputCommand()) return
|
if (!interaction.isChatInputCommand()) return
|
||||||
if (interaction.commandName != "rename") return
|
if (interaction.commandName != "rename") return
|
||||||
|
|
||||||
@@ -63,33 +57,30 @@ module.exports = () => {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
//interaction.deferReply()
|
await interaction.deferReply()
|
||||||
|
|
||||||
interaction.channel.messages.fetchPinned().then(msglist => {
|
const hiddendata = bot.hiddenData.readHiddenData(interaction.channel.id)
|
||||||
var firstmsg = msglist.last()
|
if (hiddendata.length < 1) return interaction.editReply({embeds:[bot.errorLog.notInATicket]})
|
||||||
if (firstmsg == undefined || firstmsg.author.id != client.user.id) return interaction.reply({embeds:[bot.errorLog.notInATicket]})
|
const ticketId = hiddendata.find(d => d.key == "type").value
|
||||||
const hiddendata = bot.hiddenData.readHiddenData(firstmsg.embeds[0].description)
|
|
||||||
const ticketId = hiddendata.data.find(d => d.key == "type").value
|
|
||||||
|
|
||||||
var newname = interaction.options.getString("name")
|
var newname = interaction.options.getString("name")
|
||||||
var name = interaction.channel.name
|
var name = interaction.channel.name
|
||||||
var prefix = ""
|
var prefix = ""
|
||||||
const tickets = config.options
|
const tickets = config.options
|
||||||
tickets.forEach((ticket) => {
|
tickets.forEach((ticket) => {
|
||||||
if (name.startsWith(ticket.channelprefix)){
|
if (name.startsWith(ticket.channelprefix)){
|
||||||
prefix = ticket.channelprefix
|
prefix = ticket.channelprefix
|
||||||
}
|
}
|
||||||
})
|
|
||||||
|
|
||||||
if (!prefix) prefix = "noprefix-"
|
|
||||||
|
|
||||||
interaction.channel.setName(prefix+newname)
|
|
||||||
interaction.reply({embeds:[bot.embeds.commands.renameEmbed(interaction.user,prefix+newname)]})
|
|
||||||
|
|
||||||
log("command","someone used the 'rename' command",[{key:"user",value:interaction.user.tag}])
|
|
||||||
log("system","ticket renamed",[{key:"user",value:interaction.user.tag},{key:"ticket",value:name},{key:"newname",value:newname}])
|
|
||||||
|
|
||||||
APIEvents.onCommand("rename",permsChecker.command(interaction.user.id,interaction.guild.id),interaction.user,interaction.channel,interaction.guild,new Date())
|
|
||||||
})
|
})
|
||||||
|
|
||||||
|
if (!prefix) prefix = "noprefix-"
|
||||||
|
|
||||||
|
interaction.channel.setName(prefix+newname)
|
||||||
|
interaction.editReply({embeds:[bot.embeds.commands.renameEmbed(interaction.user,prefix+newname)]})
|
||||||
|
|
||||||
|
log("command","someone used the 'rename' command",[{key:"user",value:interaction.user.username}])
|
||||||
|
log("system","ticket renamed",[{key:"user",value:interaction.user.username},{key:"ticket",value:name},{key:"newname",value:newname}])
|
||||||
|
|
||||||
|
APIEvents.onCommand("rename",permsChecker.command(interaction.user.id,interaction.guild.id),interaction.user,interaction.channel,interaction.guild,new Date())
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
+17
-26
@@ -15,46 +15,37 @@ module.exports = () => {
|
|||||||
if (!DISABLE.commands.text.reopen) client.on("messageCreate",msg => {
|
if (!DISABLE.commands.text.reopen) client.on("messageCreate",msg => {
|
||||||
if (!msg.content.startsWith(config.prefix+"reopen")) return
|
if (!msg.content.startsWith(config.prefix+"reopen")) return
|
||||||
|
|
||||||
msg.channel.messages.fetchPinned().then(msglist => {
|
const hiddendata = bot.hiddenData.readHiddenData(msg.channel.id)
|
||||||
var firstmsg = msglist.last()
|
if (hiddendata.length < 1) return msg.channel.send({embeds:[bot.errorLog.notInATicket]})
|
||||||
if (firstmsg == undefined || firstmsg.author.id != client.user.id) return msg.channel.send({embeds:[bot.errorLog.notInATicket]})
|
const ticketId = hiddendata.find(d => d.key == "type").value
|
||||||
const hiddendata = bot.hiddenData.readHiddenData(firstmsg.embeds[0].description)
|
|
||||||
const ticketId = hiddendata.data.find(d => d.key == "type").value
|
|
||||||
|
|
||||||
if (hiddendata.data.find(h => h.key == "pendingdelete")) return msg.channel.send({embeds:[bot.errorLog.warning("Warning!","You can't re-open a ticket while it's being deleted!")]})
|
if (hiddendata.find(h => h.key == "pendingdelete")) return msg.channel.send({embeds:[bot.errorLog.warning("Warning!","You can't re-open a ticket while it's being deleted!")]})
|
||||||
|
|
||||||
msg.channel.send({embeds:[bot.embeds.commands.reopenEmbed(msg.author)],components:[bot.buttons.close.openRowNormal]})
|
msg.channel.send({embeds:[bot.embeds.commands.reopenEmbed(msg.author)],components:[bot.buttons.close.openRowNormal]})
|
||||||
|
|
||||||
require("../core/ticketActions/ticketReopener").reopenTicket(msg.guild,msg.channel,msg.author)
|
require("../core/ticketActions/ticketReopener").reopenTicket(msg.guild,msg.channel,msg.author)
|
||||||
|
|
||||||
log("command","someone used the 'reopen' command",[{key:"user",value:msg.author.tag}])
|
|
||||||
APIEvents.onCommand("reopen",true,msg.author,msg.channel,msg.guild,new Date())
|
|
||||||
})
|
|
||||||
|
|
||||||
|
log("command","someone used the 'reopen' command",[{key:"user",value:msg.author.username}])
|
||||||
|
APIEvents.onCommand("reopen",true,msg.author,msg.channel,msg.guild,new Date())
|
||||||
})
|
})
|
||||||
|
|
||||||
if (!DISABLE.commands.slash.reopen) client.on("interactionCreate",async (interaction) => {
|
if (!DISABLE.commands.slash.reopen) client.on("interactionCreate",async (interaction) => {
|
||||||
if (!interaction.isChatInputCommand()) return
|
if (!interaction.isChatInputCommand()) return
|
||||||
if (interaction.commandName != "reopen") return
|
if (interaction.commandName != "reopen") return
|
||||||
|
|
||||||
//interaction.deferReply()
|
await interaction.deferReply()
|
||||||
|
|
||||||
interaction.channel.messages.fetchPinned().then(async msglist => {
|
const hiddendata = bot.hiddenData.readHiddenData(interaction.channel.id)
|
||||||
var firstmsg = msglist.last()
|
if (hiddendata.length < 1) return interaction.editReply({embeds:[bot.errorLog.notInATicket]})
|
||||||
if (firstmsg == undefined || firstmsg.author.id != client.user.id) return interaction.reply({embeds:[bot.errorLog.notInATicket]})
|
const ticketId = hiddendata.find(d => d.key == "type").value
|
||||||
const hiddendata = bot.hiddenData.readHiddenData(firstmsg.embeds[0].description)
|
|
||||||
const ticketId = hiddendata.data.find(d => d.key == "type").value
|
|
||||||
|
|
||||||
if (hiddendata.data.find(h => h.key == "pendingdelete")) return interaction.reply({embeds:[bot.errorLog.warning("Warning!","You can't re-open a ticket while it's being deleted!")]})
|
if (hiddendata.find(h => h.key == "pendingdelete")) return interaction.editReply({embeds:[bot.errorLog.warning("Warning!","You can't re-open a ticket while it's being deleted!")]})
|
||||||
|
|
||||||
await interaction.reply({embeds:[bot.embeds.commands.reopenEmbed(interaction.user)],components:[bot.buttons.close.openRowNormal]})
|
await interaction.editReply({embeds:[bot.embeds.commands.reopenEmbed(interaction.user)],components:[bot.buttons.close.openRowNormal]})
|
||||||
|
|
||||||
require("../core/ticketActions/ticketReopener").reopenTicket(interaction.guild,interaction.channel,interaction.user)
|
|
||||||
|
|
||||||
log("command","someone used the 'reopen' command",[{key:"user",value:interaction.user.tag}])
|
|
||||||
APIEvents.onCommand("reopen",true,interaction.user,interaction.channel,interaction.guild,new Date())
|
|
||||||
})
|
|
||||||
|
|
||||||
|
require("../core/ticketActions/ticketReopener").reopenTicket(interaction.guild,interaction.channel,interaction.user)
|
||||||
|
|
||||||
|
log("command","someone used the 'reopen' command",[{key:"user",value:interaction.user.username}])
|
||||||
|
APIEvents.onCommand("reopen",true,interaction.user,interaction.channel,interaction.guild,new Date())
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
+4
-4
@@ -30,15 +30,15 @@ module.exports = () => {
|
|||||||
|
|
||||||
const id = msg.content.split(config.prefix+"msg")[1].substring(1) ? msg.content.split(config.prefix+"msg")[1].substring(1) : false
|
const id = msg.content.split(config.prefix+"msg")[1].substring(1) ? msg.content.split(config.prefix+"msg")[1].substring(1) : false
|
||||||
|
|
||||||
if (!id) return msg.channel.send({embeds:[bot.errorLog.invalidArgsMessage(l.errors.missingArgsDescription+" `<id>`:\n`"+config.prefix+"msg <id>`")]})
|
if (!id) return msg.channel.send({embeds:[bot.errorLog.invalidIdChooseFromList(msgIds,l.errors.missingArgsDescription+" `<id>`:\n`"+config.prefix+"msg <id>`")]})
|
||||||
if (!msgIds.includes(id)) return msg.channel.send({embeds:[bot.errorLog.invalidIdChooseFromList(msgIds)]})
|
if (!msgIds.includes(id)) return msg.channel.send({embeds:[bot.errorLog.invalidIdChooseFromList(msgIds,l.errors.missingArgsDescription+" `<id>`:\n`"+config.prefix+"msg <id>`")]})
|
||||||
|
|
||||||
|
|
||||||
const {embed,componentRows} = require("../core/utils/getEmbed").createEmbed(id)
|
const {embed,componentRows} = require("../core/utils/getEmbed").createEmbed(id)
|
||||||
|
|
||||||
msg.channel.send({embeds:[embed],components:componentRows})
|
msg.channel.send({embeds:[embed],components:componentRows})
|
||||||
|
|
||||||
log("command","someone used the 'message' command",[{key:"user",value:msg.author.tag},{key:"id",value:id}])
|
log("command","someone used the 'message' command",[{key:"user",value:msg.author.username},{key:"id",value:id}])
|
||||||
APIEvents.onCommand("message",permsChecker.command(msg.author.id,msg.guild.id),msg.author,msg.channel,msg.guild,new Date())
|
APIEvents.onCommand("message",permsChecker.command(msg.author.id,msg.guild.id),msg.author,msg.channel,msg.guild,new Date())
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@@ -62,7 +62,7 @@ module.exports = () => {
|
|||||||
interaction.reply({content:l.commands.ticketWarning})
|
interaction.reply({content:l.commands.ticketWarning})
|
||||||
interaction.channel.send({embeds:[embed],components:componentRows})
|
interaction.channel.send({embeds:[embed],components:componentRows})
|
||||||
|
|
||||||
log("command","someone used the 'message' command",[{key:"user",value:interaction.user.tag},{key:"id",value:id}])
|
log("command","someone used the 'message' command",[{key:"user",value:interaction.user.username},{key:"id",value:id}])
|
||||||
|
|
||||||
APIEvents.onCommand("message",permsChecker.command(interaction.user.id,interaction.guild.id),interaction.user,interaction.channel,interaction.guild,new Date())
|
APIEvents.onCommand("message",permsChecker.command(interaction.user.id,interaction.guild.id),interaction.user,interaction.channel,interaction.guild,new Date())
|
||||||
|
|
||||||
|
|||||||
+73
-27
@@ -5,6 +5,8 @@ const config = bot.config
|
|||||||
const log = bot.errorLog.log
|
const log = bot.errorLog.log
|
||||||
const l = bot.language
|
const l = bot.language
|
||||||
const permsChecker = require("../core/utils/permisssionChecker")
|
const permsChecker = require("../core/utils/permisssionChecker")
|
||||||
|
const embed = discord.EmbedBuilder
|
||||||
|
const storage = bot.storage
|
||||||
|
|
||||||
const APIEvents = require("../core/api/modules/events")
|
const APIEvents = require("../core/api/modules/events")
|
||||||
const DISABLE = require("../core/api/api.json").disable
|
const DISABLE = require("../core/api/api.json").disable
|
||||||
@@ -21,57 +23,101 @@ module.exports = () => {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const unclaimuser = storage.get("claimData",msg.channel.id)
|
||||||
|
if (!unclaimuser || unclaimuser == "false") return msg.channel.send({embeds:[bot.errorLog.serverError("This ticket isn't claimed yet!")]})
|
||||||
|
|
||||||
|
const hiddendata = bot.hiddenData.readHiddenData(msg.channel.id)
|
||||||
|
if (hiddendata.length < 1) return msg.channel.send({embeds:[bot.errorLog.notInATicket]})
|
||||||
|
const ticketId = hiddendata.find(d => d.key == "type").value
|
||||||
|
|
||||||
|
hiddendata.push({key:"claimedby",value:"false"})
|
||||||
|
bot.hiddenData.writeHiddenData(msg.channel.id,hiddendata)
|
||||||
|
storage.set("claimData",msg.channel.id,"false")
|
||||||
|
|
||||||
msg.channel.messages.fetchPinned().then(msglist => {
|
msg.channel.messages.fetchPinned().then(msglist => {
|
||||||
|
/**@type {discord.Message} */
|
||||||
var firstmsg = msglist.last()
|
var firstmsg = msglist.last()
|
||||||
if (firstmsg == undefined || firstmsg.author.id != client.user.id) return msg.channel.send({embeds:[bot.errorLog.notInATicket]})
|
if (firstmsg == undefined || firstmsg.author.id != client.user.id) return msg.channel.send({embeds:[bot.errorLog.notInATicket]})
|
||||||
const hiddendata = bot.hiddenData.readHiddenData(firstmsg.embeds[0].description)
|
|
||||||
const ticketId = hiddendata.data.find(d => d.key == "type").value
|
|
||||||
|
|
||||||
|
const newEmbed = new embed(firstmsg.embeds[0].data)
|
||||||
//msg.channel.send({embeds:[bot.embeds.commands.unclaimEmbed(msg.author)]})
|
|
||||||
msg.channel.send({embeds:[bot.errorLog.warning("Coming soon!","This feature isn't ready yet!\nIt will become active in the next update!")]})
|
|
||||||
|
|
||||||
var loguser = msg.author
|
|
||||||
log("command","someone used the 'unclaim' command",[{key:"user",value:msg.author.tag}])
|
|
||||||
log("system","user unclaimed from ticket",[{key:"user",value:msg.author.tag},{key:"ticket",value:msg.channel.name},{key:"unclaimed_user",value:msg.author.tag}])
|
|
||||||
|
|
||||||
const ticketData = require("../core/utils/configParser").getTicketById(ticketId,true)
|
const ticketData = require("../core/utils/configParser").getTicketById(ticketId,true)
|
||||||
//APIEvents.onTicketAdd(msg.author,loguser,msg.channel,msg.guild,new Date(),{status:"open",name:msg.channel.name,ticketOptions:ticketData})
|
if (ticketData && ticketData.autoclose.enable){
|
||||||
//APIEvents.onCommand("add",permsChecker.command(msg.author.id,msg.guild.id),msg.author,msg.channel,msg.guild,new Date())
|
const footerText = l.commands.autocloseTitle.replace("{0}",ticketData.autoclose.inactiveHours+"h")
|
||||||
})
|
newEmbed.setFooter({text:footerText})
|
||||||
|
}else{
|
||||||
|
newEmbed.setFooter(null)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (firstmsg.components[0].components[1] && firstmsg.components[0].components[1].disabled){
|
||||||
|
firstmsg.edit({components:[bot.buttons.firstmsg.firstmsgRowDisabled],embeds:[newEmbed]})
|
||||||
|
}else{
|
||||||
|
firstmsg.edit({components:[bot.buttons.firstmsg.firstmsgRowNormal],embeds:[newEmbed]})
|
||||||
|
}
|
||||||
|
|
||||||
|
msg.channel.send({embeds:[bot.embeds.commands.unclaimEmbed(msg.author)]})
|
||||||
|
|
||||||
|
log("command","someone used the 'unclaim' command",[{key:"user",value:msg.author.username}])
|
||||||
|
log("system","user unclaimed from ticket",[{key:"user",value:msg.author.username},{key:"ticket",value:msg.channel.name},{key:"unclaimed_user",value:unclaimuser}])
|
||||||
|
|
||||||
|
|
||||||
|
APIEvents.onTicketUnclaim(msg.author,msg.channel,msg.guild,new Date(),{status:"open",name:msg.channel.name,ticketOptions:ticketData})
|
||||||
|
APIEvents.onCommand("unclaim",permsChecker.command(msg.author.id,msg.guild.id),msg.author,msg.channel,msg.guild,new Date())
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
if (!DISABLE.commands.slash.unclaim) client.on("interactionCreate",(interaction) => {
|
if (!DISABLE.commands.slash.unclaim) client.on("interactionCreate",async (interaction) => {
|
||||||
if (!interaction.isChatInputCommand()) return
|
if (!interaction.isChatInputCommand()) return
|
||||||
if (interaction.commandName != "unclaim") return
|
if (interaction.commandName != "unclaim") return
|
||||||
const user = interaction.user
|
|
||||||
|
|
||||||
if (!interaction.guild) return
|
if (!interaction.guild) return
|
||||||
if (!permsChecker.command(interaction.user.id,interaction.guild.id)){
|
if (!permsChecker.command(interaction.user.id,interaction.guild.id)){
|
||||||
permsChecker.sendUserNoPerms(interaction.user)
|
permsChecker.sendUserNoPerms(interaction.user)
|
||||||
|
interaction.reply({content:":x: "+l.errors.noPermsTitle,ephemeral:true})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
await interaction.deferReply()
|
||||||
|
|
||||||
|
const unclaimuser = storage.get("claimData",interaction.channel.id)
|
||||||
|
if (!unclaimuser || unclaimuser == "false") return interaction.editReply({embeds:[bot.errorLog.serverError("This ticket isn't claimed yet!")]})
|
||||||
|
|
||||||
|
const hiddendata = bot.hiddenData.readHiddenData(interaction.channel.id)
|
||||||
|
if (hiddendata.length < 1) return interaction.editReply({embeds:[bot.errorLog.notInATicket]})
|
||||||
|
const ticketId = hiddendata.find(d => d.key == "type").value
|
||||||
|
|
||||||
|
hiddendata.push({key:"claimedby",value:"false"})
|
||||||
|
bot.hiddenData.writeHiddenData(interaction.channel.id,hiddendata)
|
||||||
|
storage.set("claimData",interaction.channel.id,"false")
|
||||||
|
|
||||||
interaction.channel.messages.fetchPinned().then(msglist => {
|
interaction.channel.messages.fetchPinned().then(msglist => {
|
||||||
|
/**@type {discord.Message} */
|
||||||
var firstmsg = msglist.last()
|
var firstmsg = msglist.last()
|
||||||
if (firstmsg == undefined || firstmsg.author.id != client.user.id) return interaction.reply({embeds:[bot.errorLog.notInATicket]})
|
if (firstmsg == undefined || firstmsg.author.id != client.user.id) return interaction.editReply({embeds:[bot.errorLog.notInATicket]})
|
||||||
const hiddendata = bot.hiddenData.readHiddenData(firstmsg.embeds[0].description)
|
|
||||||
const ticketId = hiddendata.data.find(d => d.key == "type").value
|
|
||||||
|
|
||||||
//interaction.reply({embeds:[bot.embeds.commands.unclaimEmbed(interaction.user)]})
|
const newEmbed = new embed(firstmsg.embeds[0].data)
|
||||||
interaction.reply({embeds:[bot.errorLog.warning("Coming soon!","This feature isn't ready yet!\nIt will become active in the next update!")]})
|
|
||||||
|
|
||||||
var loguser = user
|
|
||||||
log("command","someone used the 'unclaim' command",[{key:"user",value:interaction.user.tag}])
|
|
||||||
log("system","user unclaimed from ticket",[{key:"user",value:interaction.user.tag},{key:"ticket",value:interaction.channel.name},{key:"unclaimed_user",value:loguser.tag}])
|
|
||||||
|
|
||||||
const ticketData = require("../core/utils/configParser").getTicketById(ticketId,true)
|
const ticketData = require("../core/utils/configParser").getTicketById(ticketId,true)
|
||||||
//APIEvents.onTicketAdd(interaction.user,loguser,interaction.channel,interaction.guild,new Date(),{status:"open",name:interaction.channel.name,ticketOptions:ticketData})
|
if (ticketData && ticketData.autoclose.enable){
|
||||||
//APIEvents.onCommand("add",permsChecker.command(interaction.user.id,interaction.guild.id),interaction.user,interaction.channel,interaction.guild,new Date())
|
const footerText = l.commands.autocloseTitle.replace("{0}",ticketData.autoclose.inactiveHours+"h")
|
||||||
|
newEmbed.setFooter({text:footerText})
|
||||||
|
}else{
|
||||||
|
newEmbed.setFooter(null)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (firstmsg.components[0].components[1] && firstmsg.components[0].components[1].disabled){
|
||||||
|
firstmsg.edit({components:[bot.buttons.firstmsg.firstmsgRowDisabled],embeds:[newEmbed]})
|
||||||
|
}else{
|
||||||
|
firstmsg.edit({components:[bot.buttons.firstmsg.firstmsgRowNormal],embeds:[newEmbed]})
|
||||||
|
}
|
||||||
|
|
||||||
|
interaction.editReply({embeds:[bot.embeds.commands.unclaimEmbed(interaction.user)]})
|
||||||
|
|
||||||
|
log("command","someone used the 'unclaim' command",[{key:"user",value:interaction.user.username}])
|
||||||
|
log("system","user unclaimed from ticket",[{key:"user",value:interaction.user.username},{key:"ticket",value:interaction.channel.name},{key:"unclaimed_user",value:unclaimuser}])
|
||||||
|
|
||||||
|
APIEvents.onTicketUnclaim(interaction.user,interaction.channel,interaction.guild,new Date(),{status:"open",name:interaction.channel.name,ticketOptions:ticketData})
|
||||||
|
APIEvents.onCommand("unclaim",permsChecker.command(interaction.user.id,interaction.guild.id),interaction.user,interaction.channel,interaction.guild,new Date())
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
+42
-14
@@ -1,10 +1,13 @@
|
|||||||
{
|
{
|
||||||
"main_color":"#ffffff",
|
"color":"#ffffff",
|
||||||
"server_id":"server id (for slash cmds)",
|
"serverId":"server id (for slash cmds)",
|
||||||
"auth_token":"auth token",
|
"token":{
|
||||||
"main_adminroles":["discord role id"],
|
"value":"insert your bot token here",
|
||||||
|
"fromENV":false
|
||||||
|
},
|
||||||
|
"adminRoles":["discord role id"],
|
||||||
"prefix":"!ticket ",
|
"prefix":"!ticket ",
|
||||||
"languagefile":"english",
|
"languageFile":"english",
|
||||||
|
|
||||||
"status":{
|
"status":{
|
||||||
"enabled":true,
|
"enabled":true,
|
||||||
@@ -13,19 +16,19 @@
|
|||||||
},
|
},
|
||||||
|
|
||||||
"system":{
|
"system":{
|
||||||
"ticket_channel":"channel id",
|
"maxAmountOfTickets":3,
|
||||||
"max_allowed_tickets":3,
|
"dmMessages":false,
|
||||||
"enable_DM_Messages":true,
|
|
||||||
|
|
||||||
"has@everyoneaccess":false,
|
"memberRole":"member role (leave empty if you have no member role)",
|
||||||
"member_role":"member role (doesn't have access to tickets)",
|
"closeMode":"adminonly OR normal (select one!)",
|
||||||
"closeMode":"adminonly|normal",
|
|
||||||
|
|
||||||
"transcripts":"!!!! ALL SETTINGS FOR TRANSCRIPTS ARE LOCATED IN: transcriptconfig.json !!!!",
|
"transcripts":"!!!! ALL SETTINGS FOR TRANSCRIPTS ARE LOCATED IN: transcriptconfig.json !!!!",
|
||||||
|
|
||||||
"showSlashcmdsInHelp":false
|
"showSlashcmdsInHelp":false,
|
||||||
|
"answerInEphemeralOnOpen":true
|
||||||
},
|
},
|
||||||
|
|
||||||
|
"SUPPORT":"Take look at our wiki: https://docs.openticket.dj-dj.be or join our discord server: https://discord.dj-dj.be if you need support!",
|
||||||
"options":[
|
"options":[
|
||||||
{
|
{
|
||||||
"id":"general",
|
"id":"general",
|
||||||
@@ -37,8 +40,9 @@
|
|||||||
|
|
||||||
"color":"gray",
|
"color":"gray",
|
||||||
"adminroles":["role id"],
|
"adminroles":["role id"],
|
||||||
|
"readonlyAdminroles":["role id"],
|
||||||
"channelprefix":"question-",
|
"channelprefix":"question-",
|
||||||
"category":"category id",
|
"category":"category id (or leave empty)",
|
||||||
"message":"You created a ticket!",
|
"message":"You created a ticket!",
|
||||||
"enableDmOnOpen":true,
|
"enableDmOnOpen":true,
|
||||||
"ticketmessage":"The staff will help you soon!\n\n*Click on the button below to close the ticket!*",
|
"ticketmessage":"The staff will help you soon!\n\n*Click on the button below to close the ticket!*",
|
||||||
@@ -47,10 +51,28 @@
|
|||||||
"enable":false,
|
"enable":false,
|
||||||
"url":"https://www.example.com/catmemes/cat.png"
|
"url":"https://www.example.com/catmemes/cat.png"
|
||||||
},
|
},
|
||||||
|
"image":{
|
||||||
|
"enable":false,
|
||||||
|
"url":"https://www.dj-dj.be/wp-content/uploads/2022/09/pfp-cropped.png"
|
||||||
|
},
|
||||||
|
|
||||||
"closedCategory":{
|
"closedCategory":{
|
||||||
"enable":false,
|
"enable":false,
|
||||||
"id":"category id"
|
"id":"category id"
|
||||||
|
},
|
||||||
|
|
||||||
|
"autoclose":{
|
||||||
|
"enable":false,
|
||||||
|
"inactiveHours":24
|
||||||
|
},
|
||||||
|
|
||||||
|
"ping":{
|
||||||
|
"@here":true,
|
||||||
|
"@everyone":false,
|
||||||
|
"custom":{
|
||||||
|
"enable":false,
|
||||||
|
"roleId":"012345678910"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
},
|
},
|
||||||
@@ -89,11 +111,17 @@
|
|||||||
"dropdown":false,
|
"dropdown":false,
|
||||||
|
|
||||||
"enableFooter":false,
|
"enableFooter":false,
|
||||||
"footer":"Open Ticket v3.2.1 - I'm a footer!",
|
"footer":"Open Ticket v3.4.1 - I'm a footer!",
|
||||||
|
|
||||||
|
"enableFooterImage":false,
|
||||||
|
"footerImage":"https://www.example.com/catmemes/cat.png",
|
||||||
|
|
||||||
"enableThumbnail":false,
|
"enableThumbnail":false,
|
||||||
"thumbnail":"https://www.example.com/catmemes/cat.png",
|
"thumbnail":"https://www.example.com/catmemes/cat.png",
|
||||||
|
|
||||||
|
"enableImage":false,
|
||||||
|
"image":"https://www.example.com/catmemes/cat.png",
|
||||||
|
|
||||||
"enableCustomColor":false,
|
"enableCustomColor":false,
|
||||||
"color":"#ffffff",
|
"color":"#ffffff",
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +0,0 @@
|
|||||||
/** FOR DEVELOPERS ONLY!!
|
|
||||||
* Don't change anything in this file before reading the documentation!
|
|
||||||
* visit the api documentation at https://docs.openticket.dj-dj.be
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
exports.embeddedMode = false
|
|
||||||
exports.clientLocation = require("../../../index").client
|
|
||||||
@@ -33,5 +33,5 @@ module.exports = () => {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
log("info","loaded plugins",[{key:"success",value:successcount},{key:"error",value:failcount},{key:"total",value:totalcount}])
|
require("../startscreen").headerDataPlugins({total:totalcount,success:successcount,error:failcount})
|
||||||
}
|
}
|
||||||
+60
-46
@@ -5,7 +5,7 @@ exports.checker = async () => {
|
|||||||
if (process.argv.some((v) => v == "--devconfig")){
|
if (process.argv.some((v) => v == "--devconfig")){
|
||||||
//console.log(chalk.blue("=> used dev config instead of normal config"))
|
//console.log(chalk.blue("=> used dev config instead of normal config"))
|
||||||
try{
|
try{
|
||||||
var tempconfig = require("../devConfig.json")
|
var tempconfig = require("../devconfig.json")
|
||||||
}catch(err){console.log(err);var tempconfig = require("../config.json")}
|
}catch(err){console.log(err);var tempconfig = require("../config.json")}
|
||||||
}else{
|
}else{
|
||||||
var tempconfig = require("../config.json")
|
var tempconfig = require("../config.json")
|
||||||
@@ -53,9 +53,9 @@ exports.checker = async () => {
|
|||||||
/**@param {String} value */
|
/**@param {String} value */
|
||||||
const checkToken = (value) => {
|
const checkToken = (value) => {
|
||||||
if (value.length < 40){
|
if (value.length < 40){
|
||||||
createError("'auth_token' | your token is invalid")
|
createError("'token/value' | your token is invalid")
|
||||||
}
|
}
|
||||||
if (value.includes(" ")) createError("'auth_token' | your token includes spaces!")
|
if (value.includes(" ")) createError("'token/value' | your token includes spaces!")
|
||||||
}
|
}
|
||||||
|
|
||||||
/**@param {String} value @param {String} path */
|
/**@param {String} value @param {String} path */
|
||||||
@@ -119,24 +119,29 @@ exports.checker = async () => {
|
|||||||
if (type == "boolean"){
|
if (type == "boolean"){
|
||||||
if (typeof value != "boolean"){
|
if (typeof value != "boolean"){
|
||||||
createError("'"+path+"' | invalid type, this must be a boolean!")
|
createError("'"+path+"' | invalid type, this must be a boolean!")
|
||||||
}
|
return true
|
||||||
|
}else return false
|
||||||
}else if (type == "number"){
|
}else if (type == "number"){
|
||||||
if (typeof value != "number"){
|
if (typeof value != "number"){
|
||||||
createError("'"+path+"' | invalid type, this must be a number!")
|
createError("'"+path+"' | invalid type, this must be a number!")
|
||||||
}
|
return true
|
||||||
|
}else return false
|
||||||
}else if (type == "string"){
|
}else if (type == "string"){
|
||||||
if (typeof value != "string"){
|
if (typeof value != "string"){
|
||||||
createError("'"+path+"' | invalid type, this must be a string!")
|
createError("'"+path+"' | invalid type, this must be a string!")
|
||||||
}
|
return true
|
||||||
|
}else return false
|
||||||
}else if (type == "array"){
|
}else if (type == "array"){
|
||||||
if (!Array.isArray(value)){
|
if (!Array.isArray(value)){
|
||||||
createError("'"+path+"' | invalid type, this must be an array!")
|
createError("'"+path+"' | invalid type, this must be an array!")
|
||||||
}
|
return true
|
||||||
|
}else return false
|
||||||
}else if (type == "object"){
|
}else if (type == "object"){
|
||||||
if (typeof value != "object"){
|
if (typeof value != "object"){
|
||||||
createError("'"+path+"' | invalid type, this must be an object!")
|
createError("'"+path+"' | invalid type, this must be an object!")
|
||||||
}
|
return true
|
||||||
}
|
}else return false
|
||||||
|
}else return false
|
||||||
}
|
}
|
||||||
|
|
||||||
const checkButtonColor = (value,path) => {
|
const checkButtonColor = (value,path) => {
|
||||||
@@ -174,7 +179,7 @@ exports.checker = async () => {
|
|||||||
checkType(option.description,"string",path+"/description")
|
checkType(option.description,"string",path+"/description")
|
||||||
|
|
||||||
//icon
|
//icon
|
||||||
const emojiRegex = /(\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff])/gi;
|
const emojiRegex = /(?:\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff])|(?:<a?:[^:]*:[0-9]+>)/gi
|
||||||
if (option.icon.length > 0){
|
if (option.icon.length > 0){
|
||||||
|
|
||||||
const isEmoji = emojiRegex.test(option.icon)
|
const isEmoji = emojiRegex.test(option.icon)
|
||||||
@@ -237,6 +242,14 @@ exports.checker = async () => {
|
|||||||
createError("'"+path+"/thumbnail' | there is no thumbnail object!")
|
createError("'"+path+"/thumbnail' | there is no thumbnail object!")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//image
|
||||||
|
if (option.image){
|
||||||
|
checkType(option.image.enable,"boolean",path+"/image/enable")
|
||||||
|
checkType(option.image.url,"string",path+"/image/url")
|
||||||
|
}else{
|
||||||
|
createError("'"+path+"/image' | there is no image object!")
|
||||||
|
}
|
||||||
|
|
||||||
//closedCategory
|
//closedCategory
|
||||||
if (option.closedCategory){
|
if (option.closedCategory){
|
||||||
checkType(option.closedCategory.enable,"boolean",path/"/closedCategory/enable")
|
checkType(option.closedCategory.enable,"boolean",path/"/closedCategory/enable")
|
||||||
@@ -248,6 +261,14 @@ exports.checker = async () => {
|
|||||||
createError("'"+path+"/closedCategory' | there is no closedCategory object!")
|
createError("'"+path+"/closedCategory' | there is no closedCategory object!")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//autoclose
|
||||||
|
if (option.autoclose){
|
||||||
|
checkType(option.autoclose.enable,"boolean",path/"/autoclose/enable")
|
||||||
|
checkType(option.autoclose.inactiveHours,"number",path/"/autoclose/id")
|
||||||
|
}else{
|
||||||
|
createError("'"+path+"/autoclose' | there is no autoclose object!")
|
||||||
|
}
|
||||||
|
|
||||||
}else if (type == "website"){
|
}else if (type == "website"){
|
||||||
//url
|
//url
|
||||||
checkType(option.url,"string",path+"/url")
|
checkType(option.url,"string",path+"/url")
|
||||||
@@ -329,17 +350,19 @@ exports.checker = async () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//OPTIONS!!!
|
//OPTIONS!!!
|
||||||
var counter = 0
|
if (checkType(input.options,"array",path+"/options")){
|
||||||
input.options.forEach((option) => {if (!configParser.optionExists(option)){counter++}})
|
var counter = 0
|
||||||
|
input.options.forEach((option) => {if (!configParser.optionExists(option)){counter++}})
|
||||||
|
|
||||||
if (counter == input.options.length){
|
if (counter == input.options.length){
|
||||||
createWarn("'"+path+"/options' | insert the option ids here!")
|
createWarn("'"+path+"/options' | insert the option ids here!")
|
||||||
}else{
|
}else{
|
||||||
input.options.forEach((option,index) => {
|
input.options.forEach((option,index) => {
|
||||||
if (!configParser.optionExists(option)){
|
if (!configParser.optionExists(option)){
|
||||||
createWarn("'"+path+"/options:"+index+"' | this option doesnt exist!")
|
createWarn("'"+path+"/options:"+index+"' | this option doesnt exist!")
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//other
|
//other
|
||||||
@@ -385,26 +408,26 @@ exports.checker = async () => {
|
|||||||
//--------------------------|
|
//--------------------------|
|
||||||
//--------------------------|
|
//--------------------------|
|
||||||
|
|
||||||
var configArray = ["main_color","server_id","auth_token","main_adminroles","prefix","languagefile","status","system","options","messages"]
|
var configArray = ["color","serverId","token","adminRoles","prefix","languageFile","status","system","options","messages"]
|
||||||
configArray.forEach((item) => {
|
configArray.forEach((item) => {
|
||||||
if (config[item] == undefined){
|
if (config[item] == undefined){
|
||||||
throw new Error("\n\nMAIN ERROR: the item '"+item+"' doesn't exist in config.json")
|
throw new Error("\n\nMAIN ERROR: the item '"+item+"' doesn't exist in config.json")
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
checkHexColor(config.main_color,"main_color")
|
checkHexColor(config.color,"main_color")
|
||||||
checkDiscord("serverid",config.server_id,"server_id")
|
checkDiscord("serverid",config.serverId,"server_id")
|
||||||
|
|
||||||
if (!require("./api/api.json").disable.checkerjs.token) checkToken(config.auth_token)
|
if (!require("./api/api.json").disable.checkerjs.token && !config.token.fromENV) checkToken(config.token.value)
|
||||||
|
|
||||||
checkType(config.main_adminroles,"array","/main_adminroles")
|
checkType(config.adminRoles,"array","/main_adminroles")
|
||||||
checkDiscordArray("roleid",config.main_adminroles,"main_adminroles")
|
checkDiscordArray("roleid",config.adminRoles,"main_adminroles")
|
||||||
checkString(config.prefix,1,15,"prefix","prefix")
|
checkString(config.prefix,1,15,"prefix","prefix")
|
||||||
//languagefile
|
//languagefile
|
||||||
checkType(config.languagefile,"string","languagefile")
|
checkType(config.languageFile,"string","languagefile")
|
||||||
const lf = config.languagefile
|
const lf = config.languageFile
|
||||||
|
|
||||||
if (!lf.startsWith("custom") && !lf.startsWith("english") && !lf.startsWith("dutch") && !lf.startsWith("romanian") && !lf.startsWith("german") && !lf.startsWith("arabic") && !lf.startsWith("spanish") && !lf.startsWith("portuguese") && !lf.startsWith("french") && !lf.startsWith("italian")){
|
if (!lf.startsWith("custom") && !lf.startsWith("english") && !lf.startsWith("dutch") && !lf.startsWith("romanian") && !lf.startsWith("german") && !lf.startsWith("arabic") && !lf.startsWith("spanish") && !lf.startsWith("portuguese") && !lf.startsWith("french") && !lf.startsWith("italian") && !lf.startsWith("czech") && !lf.startsWith("danish") && !lf.startsWith("russian") && !lf.startsWith("turkish") && !lf.startsWith("polish") && !lf.startsWith("slovenian") && !lf.startsWith("thai") && !lf.startsWith("norwegian") && !lf.startsWith("greek") && !lf.startsWith("ukrainian")){
|
||||||
createError("'languagefile' | invalid language, more info in the wiki")
|
createError("'languagefile' | invalid language, more info in the wiki")
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -422,28 +445,18 @@ exports.checker = async () => {
|
|||||||
|
|
||||||
|
|
||||||
//system:
|
//system:
|
||||||
//ticket channel
|
|
||||||
if (config.system.ticket_channel){
|
|
||||||
if (config.system.ticket_channel.length < 16 || config.system.ticket_channel.length > 20 || !/^\d+$/.test(config.system.ticket_channel)){
|
|
||||||
createError("'system/ticket_channel' | this channel id is invalid")
|
|
||||||
}
|
|
||||||
}else createWarn("'"+path+"' | you have no ticket channel selected!")
|
|
||||||
|
|
||||||
//max tickets
|
//max tickets
|
||||||
checkType(config.system.max_allowed_tickets,"number","system/max_allowed_tickets")
|
checkType(config.system.maxAmountOfTickets,"number","system/maxAmountOfTickets")
|
||||||
|
|
||||||
//enableDMmessages
|
//enableDMmessages
|
||||||
checkType(config.system.enable_DM_Messages,"boolean","system/enable_DM_Messages")
|
checkType(config.system.dmMessages,"boolean","system/dmMessages")
|
||||||
|
|
||||||
//has@everyoneaccess
|
//memberRole
|
||||||
checkType(config.system["has@everyoneaccess"],"boolean","system/has@everyoneaccess")
|
checkType(config.system.memberRole,"string","system/memberRole")
|
||||||
|
if (config.system.memberRole && ![" ","0","false","null","undefined"].includes(config.system.memberRole)){
|
||||||
//member_role
|
checkDiscord("roleid",config.system.memberRole,"system/memberRole")
|
||||||
checkType(config.system.member_role,"string","system/member_role")
|
|
||||||
if (config.system.member_role != "" && config.system.member_role != " " && config.system.member_role != "false" && config.system.member_role != "null" && config.system.member_role != "0"){
|
|
||||||
checkDiscord("roleid",config.system.member_role,"system/member_role")
|
|
||||||
}else{
|
}else{
|
||||||
createWarn("'system/member_role' | You don't have a member role, but it's recommended!")
|
createWarn("'system/memberRole' | You don't have a member role, but it's recommended!")
|
||||||
}
|
}
|
||||||
|
|
||||||
//closemode
|
//closemode
|
||||||
@@ -453,6 +466,7 @@ exports.checker = async () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
checkType(config.system.showSlashcmdsInHelp,"boolean","system/showSlashcmdsInHelp")
|
checkType(config.system.showSlashcmdsInHelp,"boolean","system/showSlashcmdsInHelp")
|
||||||
|
checkType(config.system.answerInEphemeralOnOpen,"boolean","system/answerInEphemeralOnOpen")
|
||||||
|
|
||||||
//options
|
//options
|
||||||
|
|
||||||
|
|||||||
@@ -47,6 +47,17 @@ exports.get = (category,key) => {
|
|||||||
const result = tempresult ? tempresult.value : false
|
const result = tempresult ? tempresult.value : false
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {String} category
|
||||||
|
* @returns {[{key:String,value:String}]|false}
|
||||||
|
*/
|
||||||
|
exports.getCategory = (category) => {
|
||||||
|
const currentData = getData()
|
||||||
|
const result = currentData.filter((v) => v.category == category)
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {String} category
|
* @param {String} category
|
||||||
* @param {String} key
|
* @param {String} key
|
||||||
|
|||||||
@@ -1,3 +1,13 @@
|
|||||||
|
/**
|
||||||
|
==================================================================
|
||||||
|
ALL DATABASE FILES NEED TO EXPORT THE FOLLOWING FUNCTIONS:
|
||||||
|
- get(category:String,key:String) => String (value)
|
||||||
|
- set(category:String,key:String,value:String) => Boolean (success)
|
||||||
|
- delete(category:String,key:String) => Boolean (success)
|
||||||
|
- getCategory(category:String) => Array[{key:String,value:String}] (key,value)
|
||||||
|
==================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
try {
|
try {
|
||||||
var db = require("./dynamicfiles/database")
|
var db = require("./dynamicfiles/database")
|
||||||
}catch(err){
|
}catch(err){
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ exports.noPermsMessage = (user) => {
|
|||||||
.setColor(c.Red)
|
.setColor(c.Red)
|
||||||
.setTitle(":x: "+l.errors.noPermsTitle)
|
.setTitle(":x: "+l.errors.noPermsTitle)
|
||||||
.setDescription(l.errors.noPermsDescription)
|
.setDescription(l.errors.noPermsDescription)
|
||||||
.setFooter({iconURL:user.displayAvatarURL(),text:user.tag})
|
.setFooter({iconURL:user.displayAvatarURL(),text:user.username})
|
||||||
}
|
}
|
||||||
|
|
||||||
/**@param {discord.User} user*/
|
/**@param {discord.User} user*/
|
||||||
@@ -25,7 +25,7 @@ exports.noPermsDelete = (user) => {
|
|||||||
.setColor(c.Red)
|
.setColor(c.Red)
|
||||||
.setTitle(":x: "+l.errors.noPermsTitle)
|
.setTitle(":x: "+l.errors.noPermsTitle)
|
||||||
.setDescription(l.errors.noPermsDelete)
|
.setDescription(l.errors.noPermsDelete)
|
||||||
.setFooter({iconURL:user.displayAvatarURL(),text:user.tag})
|
.setFooter({iconURL:user.displayAvatarURL(),text:user.username})
|
||||||
}
|
}
|
||||||
|
|
||||||
/**@param {String} message */
|
/**@param {String} message */
|
||||||
@@ -48,12 +48,13 @@ exports.serverError = (message) => {
|
|||||||
return x
|
return x
|
||||||
}
|
}
|
||||||
|
|
||||||
/**@param {String[]} list */
|
/**@param {String[]} list @param {String|undefined} message */
|
||||||
exports.invalidIdChooseFromList = (list) => {
|
exports.invalidIdChooseFromList = (list,message) => {
|
||||||
|
const beforemsg = message ? message+"\n\n" : ""
|
||||||
var x = new embed()
|
var x = new embed()
|
||||||
.setColor(c.Red)
|
.setColor(c.Red)
|
||||||
.setTitle(":x: "+l.errors.chooseFromListTitle)
|
.setTitle(":x: "+l.errors.chooseFromListTitle)
|
||||||
.setDescription(l.errors.chooseFromListDescription+"\n`"+list.join("`\n`")+"`")
|
.setDescription(beforemsg+l.errors.chooseFromListDescription+"\n`"+list.join("`\n`")+"`")
|
||||||
return x
|
return x
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -66,7 +67,7 @@ exports.notInATicket = new embed()
|
|||||||
/**@param {String} message @param {String} title */
|
/**@param {String} message @param {String} title */
|
||||||
exports.success = (title,message) => {
|
exports.success = (title,message) => {
|
||||||
var x = new embed()
|
var x = new embed()
|
||||||
.setColor(config.main_color)
|
.setColor(config.color)
|
||||||
.setTitle(":white_check_mark: "+title)
|
.setTitle(":white_check_mark: "+title)
|
||||||
.setDescription(message)
|
.setDescription(message)
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ const log = bot.errorLog.log
|
|||||||
|
|
||||||
const hiddendata = bot.hiddenData
|
const hiddendata = bot.hiddenData
|
||||||
const embed = discord.EmbedBuilder
|
const embed = discord.EmbedBuilder
|
||||||
const mc = config.main_color
|
const mc = config.color
|
||||||
|
|
||||||
const button = discord.ButtonBuilder
|
const button = discord.ButtonBuilder
|
||||||
const arb = discord.ActionRowBuilder
|
const arb = discord.ActionRowBuilder
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ const log = bot.errorLog.log
|
|||||||
|
|
||||||
const hiddendata = bot.hiddenData
|
const hiddendata = bot.hiddenData
|
||||||
const embed = discord.EmbedBuilder
|
const embed = discord.EmbedBuilder
|
||||||
const mc = config.main_color
|
const mc = config.color
|
||||||
|
|
||||||
const button = discord.ButtonBuilder
|
const button = discord.ButtonBuilder
|
||||||
const arb = discord.ActionRowBuilder
|
const arb = discord.ActionRowBuilder
|
||||||
@@ -15,6 +15,13 @@ const bs = discord.ButtonStyle
|
|||||||
|
|
||||||
|
|
||||||
exports.firstmsgRowNormal = new arb()
|
exports.firstmsgRowNormal = new arb()
|
||||||
|
.addComponents(
|
||||||
|
new button()
|
||||||
|
.setCustomId("OTclaimTicket")
|
||||||
|
.setDisabled(false)
|
||||||
|
.setStyle(bs.Success)
|
||||||
|
.setLabel("Claim Ticket")
|
||||||
|
)
|
||||||
.addComponents(
|
.addComponents(
|
||||||
new button()
|
new button()
|
||||||
.setCustomId("OTcloseTicket")
|
.setCustomId("OTcloseTicket")
|
||||||
@@ -33,6 +40,63 @@ exports.firstmsgRowNormal = new arb()
|
|||||||
)
|
)
|
||||||
|
|
||||||
exports.firstmsgRowDisabled = new arb()
|
exports.firstmsgRowDisabled = new arb()
|
||||||
|
.addComponents(
|
||||||
|
new button()
|
||||||
|
.setCustomId("OTclaimTicket")
|
||||||
|
.setDisabled(false)
|
||||||
|
.setStyle(bs.Success)
|
||||||
|
.setLabel("Claim Ticket")
|
||||||
|
)
|
||||||
|
.addComponents(
|
||||||
|
new button()
|
||||||
|
.setCustomId("OTcloseTicket")
|
||||||
|
.setDisabled(true)
|
||||||
|
.setStyle(bs.Secondary)
|
||||||
|
.setLabel(l.buttons.close)
|
||||||
|
.setEmoji("🔒")
|
||||||
|
)
|
||||||
|
.addComponents(
|
||||||
|
new button()
|
||||||
|
.setCustomId("OTdeleteTicket")
|
||||||
|
.setDisabled(true)
|
||||||
|
.setStyle(bs.Danger)
|
||||||
|
.setLabel(l.buttons.delete)
|
||||||
|
.setEmoji("✖️")
|
||||||
|
)
|
||||||
|
|
||||||
|
exports.firstmsgRowNormalNoClaim = new arb()
|
||||||
|
.addComponents(
|
||||||
|
new button()
|
||||||
|
.setCustomId("OTclaimTicket")
|
||||||
|
.setDisabled(true)
|
||||||
|
.setStyle(bs.Secondary)
|
||||||
|
.setLabel("Claim Ticket")
|
||||||
|
)
|
||||||
|
.addComponents(
|
||||||
|
new button()
|
||||||
|
.setCustomId("OTcloseTicket")
|
||||||
|
.setDisabled(false)
|
||||||
|
.setStyle(bs.Secondary)
|
||||||
|
.setLabel(l.buttons.close)
|
||||||
|
.setEmoji("🔒")
|
||||||
|
)
|
||||||
|
.addComponents(
|
||||||
|
new button()
|
||||||
|
.setCustomId("OTdeleteTicket")
|
||||||
|
.setDisabled(false)
|
||||||
|
.setStyle(bs.Danger)
|
||||||
|
.setLabel(l.buttons.delete)
|
||||||
|
.setEmoji("✖️")
|
||||||
|
)
|
||||||
|
|
||||||
|
exports.firstmsgRowDisabledNoClaim = new arb()
|
||||||
|
.addComponents(
|
||||||
|
new button()
|
||||||
|
.setCustomId("OTclaimTicket")
|
||||||
|
.setDisabled(true)
|
||||||
|
.setStyle(bs.Secondary)
|
||||||
|
.setLabel("Claim Ticket")
|
||||||
|
)
|
||||||
.addComponents(
|
.addComponents(
|
||||||
new button()
|
new button()
|
||||||
.setCustomId("OTcloseTicket")
|
.setCustomId("OTcloseTicket")
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ const log = bot.errorLog.log
|
|||||||
|
|
||||||
const hiddendata = bot.hiddenData
|
const hiddendata = bot.hiddenData
|
||||||
const embed = discord.EmbedBuilder
|
const embed = discord.EmbedBuilder
|
||||||
const mc = config.main_color
|
const mc = config.color
|
||||||
|
|
||||||
const button = discord.ButtonBuilder
|
const button = discord.ButtonBuilder
|
||||||
const arb = discord.ActionRowBuilder
|
const arb = discord.ActionRowBuilder
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ const log = bot.errorLog.log
|
|||||||
|
|
||||||
const hiddendata = bot.hiddenData
|
const hiddendata = bot.hiddenData
|
||||||
const embed = discord.EmbedBuilder
|
const embed = discord.EmbedBuilder
|
||||||
const mc = config.main_color
|
const mc = config.color
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
@@ -19,7 +19,7 @@ exports.addEmbed = (addedUser,adder) => {
|
|||||||
return new embed()
|
return new embed()
|
||||||
.setTitle("⬆️ "+l.commands.userAddedTitle.replace("{0}",addedUser.username))
|
.setTitle("⬆️ "+l.commands.userAddedTitle.replace("{0}",addedUser.username))
|
||||||
.setColor(mc)
|
.setColor(mc)
|
||||||
.setFooter({text:adder.tag,iconURL:adder.displayAvatarURL()})
|
.setFooter({text:adder.username,iconURL:adder.displayAvatarURL()})
|
||||||
.setThumbnail(addedUser.displayAvatarURL({extension:"png"}))
|
.setThumbnail(addedUser.displayAvatarURL({extension:"png"}))
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -33,7 +33,7 @@ exports.removeEmbed = (removedUser,remover) => {
|
|||||||
return new embed()
|
return new embed()
|
||||||
.setTitle("⬇️ "+l.commands.userRemovedTitle.replace("{0}",removedUser.username))
|
.setTitle("⬇️ "+l.commands.userRemovedTitle.replace("{0}",removedUser.username))
|
||||||
.setColor(mc)
|
.setColor(mc)
|
||||||
.setFooter({text:remover.tag,iconURL:remover.displayAvatarURL()})
|
.setFooter({text:remover.username,iconURL:remover.displayAvatarURL()})
|
||||||
.setThumbnail(removedUser.displayAvatarURL({extension:"png"}))
|
.setThumbnail(removedUser.displayAvatarURL({extension:"png"}))
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -47,12 +47,27 @@ exports.closeEmbed = (closer,description) => {
|
|||||||
const embd = new embed()
|
const embd = new embed()
|
||||||
.setTitle("🔒 "+l.commands.closeTitle)
|
.setTitle("🔒 "+l.commands.closeTitle)
|
||||||
.setColor(mc)
|
.setColor(mc)
|
||||||
.setFooter({text:closer.tag,iconURL:closer.displayAvatarURL()})
|
.setFooter({text:closer.username,iconURL:closer.displayAvatarURL()})
|
||||||
|
|
||||||
if (description) embd.setDescription(description)
|
if (description) embd.setDescription(description)
|
||||||
return embd
|
return embd
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param {discord.User} closer
|
||||||
|
* @param {Number} time
|
||||||
|
* @returns {discord.EmbedBuilder}
|
||||||
|
*/
|
||||||
|
exports.autocloseSignalEmbed = (closer,time) => {
|
||||||
|
const embd = new embed()
|
||||||
|
.setTitle("⏰ This ticket got closed by Autoclose!")
|
||||||
|
.setColor(mc)
|
||||||
|
.setFooter({text:closer.username,iconURL:closer.displayAvatarURL()})
|
||||||
|
.setDescription("This ticket has been inactive for `"+time+"h`!")
|
||||||
|
return embd
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @param {discord.User} deleter
|
* @param {discord.User} deleter
|
||||||
@@ -62,7 +77,7 @@ exports.deleteEmbed = (deleter) => {
|
|||||||
return new embed()
|
return new embed()
|
||||||
.setTitle("❌ "+l.commands.deleteTitle)
|
.setTitle("❌ "+l.commands.deleteTitle)
|
||||||
.setColor(mc)
|
.setColor(mc)
|
||||||
.setFooter({text:deleter.tag,iconURL:deleter.displayAvatarURL()})
|
.setFooter({text:deleter.username,iconURL:deleter.displayAvatarURL()})
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -75,7 +90,7 @@ exports.renameEmbed = (renamer,newname) => {
|
|||||||
return new embed()
|
return new embed()
|
||||||
.setTitle("🔄 "+l.commands.renameTitle.replace("{0}",newname))
|
.setTitle("🔄 "+l.commands.renameTitle.replace("{0}",newname))
|
||||||
.setColor(mc)
|
.setColor(mc)
|
||||||
.setFooter({text:renamer.tag,iconURL:renamer.displayAvatarURL()})
|
.setFooter({text:renamer.username,iconURL:renamer.displayAvatarURL()})
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -87,7 +102,7 @@ exports.renameEmbed = (renamer,newname) => {
|
|||||||
return new embed()
|
return new embed()
|
||||||
.setTitle("🔓 "+l.commands.reopenTitle)
|
.setTitle("🔓 "+l.commands.reopenTitle)
|
||||||
.setColor(mc)
|
.setColor(mc)
|
||||||
.setFooter({text:reopener.tag,iconURL:reopener.displayAvatarURL()})
|
.setFooter({text:reopener.username,iconURL:reopener.displayAvatarURL()})
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -100,7 +115,7 @@ exports.renameEmbed = (renamer,newname) => {
|
|||||||
return new embed()
|
return new embed()
|
||||||
.setTitle("📌 "+l.commands.claimTitle.replace("{0}",claimer.username))
|
.setTitle("📌 "+l.commands.claimTitle.replace("{0}",claimer.username))
|
||||||
.setColor(mc)
|
.setColor(mc)
|
||||||
.setFooter({text:user.tag,iconURL:user.displayAvatarURL()})
|
.setFooter({text:user.username,iconURL:user.displayAvatarURL()})
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -112,7 +127,7 @@ exports.renameEmbed = (renamer,newname) => {
|
|||||||
return new embed()
|
return new embed()
|
||||||
.setTitle("🆓 "+l.commands.unclaimTitle)
|
.setTitle("🆓 "+l.commands.unclaimTitle)
|
||||||
.setColor(mc)
|
.setColor(mc)
|
||||||
.setFooter({text:unclaimer.tag,iconURL:unclaimer.displayAvatarURL()})
|
.setFooter({text:unclaimer.username,iconURL:unclaimer.displayAvatarURL()})
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -125,5 +140,5 @@ exports.changeEmbed = (changer,newtype) => {
|
|||||||
return new embed()
|
return new embed()
|
||||||
.setTitle("🔄 "+l.commands.changeTitle.replace("{0}",newtype))
|
.setTitle("🔄 "+l.commands.changeTitle.replace("{0}",newtype))
|
||||||
.setColor(mc)
|
.setColor(mc)
|
||||||
.setFooter({text:changer.tag,iconURL:changer.displayAvatarURL()})
|
.setFooter({text:changer.username,iconURL:changer.displayAvatarURL()})
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,59 @@
|
|||||||
|
const discord = require('discord.js')
|
||||||
|
const bot = require('../../../../index')
|
||||||
|
const client = bot.client
|
||||||
|
const config = bot.config
|
||||||
|
const l = bot.language
|
||||||
|
const log = bot.errorLog.log
|
||||||
|
|
||||||
|
const permissionChecker = require("../../../utils/permisssionChecker")
|
||||||
|
const storage = bot.storage
|
||||||
|
const embed = discord.EmbedBuilder
|
||||||
|
const mc = config.color
|
||||||
|
const permsChecker = require("../../../utils/permisssionChecker")
|
||||||
|
|
||||||
|
const button = discord.ButtonBuilder
|
||||||
|
const arb = discord.ActionRowBuilder
|
||||||
|
const bs = discord.ButtonStyle
|
||||||
|
|
||||||
|
module.exports = () => {
|
||||||
|
//CLAIM
|
||||||
|
client.on("interactionCreate",async interaction => {
|
||||||
|
if (!interaction.isButton()) return
|
||||||
|
if (interaction.customId != "OTclaimTicket") return
|
||||||
|
|
||||||
|
try {
|
||||||
|
await interaction.deferUpdate()
|
||||||
|
}catch{}
|
||||||
|
|
||||||
|
if (!interaction.guild) return
|
||||||
|
if (!permsChecker.command(interaction.user.id,interaction.guild.id)){
|
||||||
|
permsChecker.sendUserNoPerms(interaction.user)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
const hiddendata = bot.hiddenData.readHiddenData(interaction.channel.id)
|
||||||
|
if (hiddendata.length < 1) return interaction.editReply({embeds:[bot.errorLog.notInATicket]})
|
||||||
|
const ticketId = hiddendata.find(d => d.key == "type").value
|
||||||
|
|
||||||
|
hiddendata.push({key:"claimedby",value:interaction.user.id})
|
||||||
|
bot.hiddenData.writeHiddenData(interaction.channel.id,hiddendata)
|
||||||
|
storage.set("claimData",interaction.channel.id,interaction.user.id)
|
||||||
|
|
||||||
|
interaction.channel.messages.fetchPinned().then(msglist => {
|
||||||
|
/**@type {discord.Message} */
|
||||||
|
var firstmsg = msglist.last()
|
||||||
|
if (firstmsg == undefined || firstmsg.author.id != client.user.id) return interaction.editReply({embeds:[bot.errorLog.notInATicket]})
|
||||||
|
|
||||||
|
const newEmbed = new embed(firstmsg.embeds[0].data)
|
||||||
|
.setFooter({text:"claimed by: "+interaction.user.username,iconURL:interaction.user.displayAvatarURL()})
|
||||||
|
|
||||||
|
if (firstmsg.components[0].components[1] && firstmsg.components[0].components[1].disabled){
|
||||||
|
firstmsg.edit({components:[bot.buttons.firstmsg.firstmsgRowDisabledNoClaim],embeds:[newEmbed]})
|
||||||
|
}else{
|
||||||
|
firstmsg.edit({components:[bot.buttons.firstmsg.firstmsgRowNormalNoClaim],embeds:[newEmbed]})
|
||||||
|
}
|
||||||
|
|
||||||
|
interaction.channel.send({embeds:[bot.embeds.commands.claimEmbed(interaction.user,interaction.user)]})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
@@ -9,7 +9,7 @@ const permissionChecker = require("../../../utils/permisssionChecker")
|
|||||||
const storage = bot.storage
|
const storage = bot.storage
|
||||||
const hiddendata = bot.hiddenData
|
const hiddendata = bot.hiddenData
|
||||||
const embed = discord.EmbedBuilder
|
const embed = discord.EmbedBuilder
|
||||||
const mc = config.main_color
|
const mc = config.color
|
||||||
|
|
||||||
const button = discord.ButtonBuilder
|
const button = discord.ButtonBuilder
|
||||||
const arb = discord.ActionRowBuilder
|
const arb = discord.ActionRowBuilder
|
||||||
@@ -23,7 +23,7 @@ module.exports = () => {
|
|||||||
if (interaction.customId != "OTcloseTicketTrue") return
|
if (interaction.customId != "OTcloseTicketTrue") return
|
||||||
|
|
||||||
try {
|
try {
|
||||||
interaction.deferUpdate()
|
await interaction.deferUpdate()
|
||||||
} catch{}
|
} catch{}
|
||||||
|
|
||||||
if (closeTicketButtonChecker == true) return
|
if (closeTicketButtonChecker == true) return
|
||||||
@@ -41,8 +41,17 @@ module.exports = () => {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (interaction.message.pinned && interaction.message.author.id == client.user.id){
|
||||||
|
const claimdata = storage.get("claimData",interaction.channel.id)
|
||||||
|
if (claimdata && claimdata != "false"){
|
||||||
|
interaction.message.edit({components:[bot.buttons.firstmsg.firstmsgRowDisabledNoClaim]})
|
||||||
|
}else{
|
||||||
|
interaction.message.edit({components:[bot.buttons.firstmsg.firstmsgRowDisabled]})
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
interaction.message.edit({components:[bot.buttons.close.openRowDisabled]})
|
||||||
|
}
|
||||||
|
|
||||||
interaction.message.edit({components:[bot.buttons.close.openRowDisabled]})
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @type {String}
|
* @type {String}
|
||||||
@@ -57,7 +66,7 @@ module.exports = () => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
interaction.channel.send({embeds:[bot.embeds.commands.closeEmbed(interaction.user)],components:[bot.buttons.close.closeCommandRow]})
|
interaction.channel.send({embeds:[bot.embeds.commands.closeEmbed(interaction.user)],components:[bot.buttons.close.closeCommandRow]})
|
||||||
await require("../../../ticketActions/ticketCloser").NEWcloseTicket(interaction.member,interaction.channel,prefix,"close",false,true)
|
await require("../../../ticketActions/ticketCloser").closeManager(interaction.member,interaction.channel,prefix,"close",false,true)
|
||||||
closeTicketButtonChecker = false
|
closeTicketButtonChecker = false
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -9,7 +9,7 @@ const permissionChecker = require("../../../utils/permisssionChecker")
|
|||||||
const storage = bot.storage
|
const storage = bot.storage
|
||||||
const hiddendata = bot.hiddenData
|
const hiddendata = bot.hiddenData
|
||||||
const embed = discord.EmbedBuilder
|
const embed = discord.EmbedBuilder
|
||||||
const mc = config.main_color
|
const mc = config.color
|
||||||
|
|
||||||
const button = discord.ButtonBuilder
|
const button = discord.ButtonBuilder
|
||||||
const arb = discord.ActionRowBuilder
|
const arb = discord.ActionRowBuilder
|
||||||
@@ -93,7 +93,7 @@ module.exports = () => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
//interaction.channel.send({embeds:[bot.embeds.commands.closeEmbed(interaction.user)],components:[bot.buttons.close.closeCommandRow]})
|
//interaction.channel.send({embeds:[bot.embeds.commands.closeEmbed(interaction.user)],components:[bot.buttons.close.closeCommandRow]})
|
||||||
await require("../../../ticketActions/ticketCloser").NEWcloseTicket(interaction.member,interaction.channel,prefix,"close",reason,true)
|
await require("../../../ticketActions/ticketCloser").closeManager(interaction.member,interaction.channel,prefix,"close",reason,true)
|
||||||
closeTicketButtonChecker = false
|
closeTicketButtonChecker = false
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -9,7 +9,7 @@ const permissionChecker = require("../../../utils/permisssionChecker")
|
|||||||
const storage = bot.storage
|
const storage = bot.storage
|
||||||
const hiddendata = bot.hiddenData
|
const hiddendata = bot.hiddenData
|
||||||
const embed = discord.EmbedBuilder
|
const embed = discord.EmbedBuilder
|
||||||
const mc = config.main_color
|
const mc = config.color
|
||||||
|
|
||||||
const button = discord.ButtonBuilder
|
const button = discord.ButtonBuilder
|
||||||
const arb = discord.ActionRowBuilder
|
const arb = discord.ActionRowBuilder
|
||||||
@@ -22,7 +22,7 @@ module.exports = () => {
|
|||||||
if (!interaction.isButton()) return
|
if (!interaction.isButton()) return
|
||||||
if (interaction.customId != "OTdeleteTicketTrue") return
|
if (interaction.customId != "OTdeleteTicketTrue") return
|
||||||
|
|
||||||
interaction.deferUpdate()
|
await interaction.deferUpdate()
|
||||||
|
|
||||||
if (deleteTicketButtonChecker == true) return
|
if (deleteTicketButtonChecker == true) return
|
||||||
deleteTicketButtonChecker = true
|
deleteTicketButtonChecker = true
|
||||||
@@ -52,7 +52,7 @@ module.exports = () => {
|
|||||||
|
|
||||||
await interaction.message.edit({components:[bot.buttons.close.openRowDisabled]})
|
await interaction.message.edit({components:[bot.buttons.close.openRowDisabled]})
|
||||||
await interaction.channel.send({embeds:[bot.embeds.commands.deleteEmbed(interaction.user)]})
|
await interaction.channel.send({embeds:[bot.embeds.commands.deleteEmbed(interaction.user)]})
|
||||||
await require("../../../ticketActions/ticketCloser").NEWcloseTicket(interaction.member,interaction.channel,prefix,"delete",false,true)
|
await require("../../../ticketActions/ticketCloser").closeManager(interaction.member,interaction.channel,prefix,"delete",false,true)
|
||||||
deleteTicketButtonChecker = false
|
deleteTicketButtonChecker = false
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -62,7 +62,7 @@ module.exports = () => {
|
|||||||
if (!interaction.isButton()) return
|
if (!interaction.isButton()) return
|
||||||
if (interaction.customId != "OTdeleteTicketTrue1") return
|
if (interaction.customId != "OTdeleteTicketTrue1") return
|
||||||
|
|
||||||
interaction.deferUpdate()
|
await interaction.deferUpdate()
|
||||||
|
|
||||||
if (deleteTicketButtonChecker1 == true) return
|
if (deleteTicketButtonChecker1 == true) return
|
||||||
deleteTicketButtonChecker1 = true
|
deleteTicketButtonChecker1 = true
|
||||||
@@ -92,7 +92,7 @@ module.exports = () => {
|
|||||||
|
|
||||||
await interaction.message.edit({components:[bot.buttons.close.closeCommandRowDisabled]})
|
await interaction.message.edit({components:[bot.buttons.close.closeCommandRowDisabled]})
|
||||||
await interaction.channel.send({embeds:[bot.embeds.commands.deleteEmbed(interaction.user)]})
|
await interaction.channel.send({embeds:[bot.embeds.commands.deleteEmbed(interaction.user)]})
|
||||||
await require("../../../ticketActions/ticketCloser").NEWcloseTicket(interaction.member,interaction.channel,prefix,"delete",false,true)
|
await require("../../../ticketActions/ticketCloser").closeManager(interaction.member,interaction.channel,prefix,"delete",false,true)
|
||||||
deleteTicketButtonChecker1 = false
|
deleteTicketButtonChecker1 = false
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ const permissionChecker = require("../../../utils/permisssionChecker")
|
|||||||
const storage = bot.storage
|
const storage = bot.storage
|
||||||
const hiddendata = bot.hiddenData
|
const hiddendata = bot.hiddenData
|
||||||
const embed = discord.EmbedBuilder
|
const embed = discord.EmbedBuilder
|
||||||
const mc = config.main_color
|
const mc = config.color
|
||||||
|
|
||||||
const button = discord.ButtonBuilder
|
const button = discord.ButtonBuilder
|
||||||
const arb = discord.ActionRowBuilder
|
const arb = discord.ActionRowBuilder
|
||||||
@@ -17,11 +17,11 @@ const bs = discord.ButtonStyle
|
|||||||
|
|
||||||
module.exports = () => {
|
module.exports = () => {
|
||||||
//REOPEN
|
//REOPEN
|
||||||
client.on("interactionCreate",(interaction) => {
|
client.on("interactionCreate",async (interaction) => {
|
||||||
if (!interaction.isButton()) return
|
if (!interaction.isButton()) return
|
||||||
if (interaction.customId != "OTreopenTicket") return
|
if (interaction.customId != "OTreopenTicket") return
|
||||||
|
|
||||||
interaction.deferUpdate()
|
await interaction.deferUpdate()
|
||||||
interaction.message.edit({embeds:[bot.embeds.commands.reopenEmbed(interaction.user)],components:[bot.buttons.close.openRowNormal]})
|
interaction.message.edit({embeds:[bot.embeds.commands.reopenEmbed(interaction.user)],components:[bot.buttons.close.openRowNormal]})
|
||||||
require("../../../ticketActions/ticketReopener").reopenTicket(interaction.guild,interaction.channel,interaction.user)
|
require("../../../ticketActions/ticketReopener").reopenTicket(interaction.guild,interaction.channel,interaction.user)
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ const log = bot.errorLog.log
|
|||||||
const storage = bot.storage
|
const storage = bot.storage
|
||||||
const hiddendata = bot.hiddenData
|
const hiddendata = bot.hiddenData
|
||||||
const embed = discord.EmbedBuilder
|
const embed = discord.EmbedBuilder
|
||||||
const mc = config.main_color
|
const mc = config.color
|
||||||
|
|
||||||
const button = discord.ButtonBuilder
|
const button = discord.ButtonBuilder
|
||||||
const arb = discord.ActionRowBuilder
|
const arb = discord.ActionRowBuilder
|
||||||
|
|||||||
@@ -7,4 +7,5 @@ module.exports = () => {
|
|||||||
require("./accepted/reopening")()
|
require("./accepted/reopening")()
|
||||||
require("./accepted/deleting")()
|
require("./accepted/deleting")()
|
||||||
require("./accepted/closingReason")()
|
require("./accepted/closingReason")()
|
||||||
|
require("./accepted/claiming")()
|
||||||
}
|
}
|
||||||
@@ -8,7 +8,7 @@ const log = bot.errorLog.log
|
|||||||
const storage = bot.storage
|
const storage = bot.storage
|
||||||
const hiddendata = bot.hiddenData
|
const hiddendata = bot.hiddenData
|
||||||
const embed = discord.EmbedBuilder
|
const embed = discord.EmbedBuilder
|
||||||
const mc = config.main_color
|
const mc = config.color
|
||||||
|
|
||||||
const button = discord.ButtonBuilder
|
const button = discord.ButtonBuilder
|
||||||
const arb = discord.ActionRowBuilder
|
const arb = discord.ActionRowBuilder
|
||||||
@@ -16,64 +16,84 @@ const bs = discord.ButtonStyle
|
|||||||
|
|
||||||
module.exports = () => {
|
module.exports = () => {
|
||||||
//CLOSE
|
//CLOSE
|
||||||
client.on("interactionCreate",interaction => {
|
client.on("interactionCreate",async interaction => {
|
||||||
if (!interaction.isButton()) return
|
if (!interaction.isButton()) return
|
||||||
if (interaction.customId != "OTcloseTicket") return
|
if (interaction.customId != "OTcloseTicket") return
|
||||||
|
|
||||||
try {
|
try {
|
||||||
interaction.deferUpdate()
|
await interaction.deferUpdate()
|
||||||
} catch{}
|
} catch{}
|
||||||
interaction.message.edit({components:[bot.buttons.verifybars.closeVerifyBar]})
|
interaction.message.edit({components:[bot.buttons.verifybars.closeVerifyBar]})
|
||||||
|
|
||||||
})
|
})
|
||||||
client.on("interactionCreate",interaction => {
|
client.on("interactionCreate",async interaction => {
|
||||||
if (!interaction.isButton()) return
|
if (!interaction.isButton()) return
|
||||||
if (interaction.customId != "OTcloseTicketFalse") return
|
if (interaction.customId != "OTcloseTicketFalse") return
|
||||||
|
|
||||||
try {
|
try {
|
||||||
interaction.deferUpdate()
|
await interaction.deferUpdate()
|
||||||
} catch{}
|
} catch{}
|
||||||
interaction.message.edit({components:[bot.buttons.close.openRowNormal]})
|
|
||||||
|
if (interaction.message.pinned && interaction.message.author.id == client.user.id){
|
||||||
|
const claimdata = storage.get("claimData",interaction.channel.id)
|
||||||
|
if (claimdata && claimdata != "false"){
|
||||||
|
interaction.message.edit({components:[bot.buttons.firstmsg.firstmsgRowNormalNoClaim]})
|
||||||
|
}else{
|
||||||
|
interaction.message.edit({components:[bot.buttons.firstmsg.firstmsgRowNormal]})
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
interaction.message.edit({components:[bot.buttons.close.openRowNormal]})
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
//DELETE
|
//DELETE
|
||||||
client.on("interactionCreate",interaction => {
|
client.on("interactionCreate",async interaction => {
|
||||||
if (!interaction.isButton()) return
|
if (!interaction.isButton()) return
|
||||||
if (interaction.customId != "OTdeleteTicket") return
|
if (interaction.customId != "OTdeleteTicket") return
|
||||||
|
|
||||||
try {
|
try {
|
||||||
interaction.deferUpdate()
|
await interaction.deferUpdate()
|
||||||
} catch{}
|
} catch{}
|
||||||
interaction.message.edit({components:[bot.buttons.verifybars.deleteVerifyBar]})
|
interaction.message.edit({components:[bot.buttons.verifybars.deleteVerifyBar]})
|
||||||
|
|
||||||
})
|
})
|
||||||
client.on("interactionCreate",interaction => {
|
client.on("interactionCreate",async interaction => {
|
||||||
if (!interaction.isButton()) return
|
if (!interaction.isButton()) return
|
||||||
if (interaction.customId != "OTdeleteTicketFalse") return
|
if (interaction.customId != "OTdeleteTicketFalse") return
|
||||||
|
|
||||||
try {
|
try {
|
||||||
interaction.deferUpdate()
|
await interaction.deferUpdate()
|
||||||
} catch{}
|
} catch{}
|
||||||
interaction.message.edit({components:[bot.buttons.close.openRowNormal]})
|
|
||||||
|
if (interaction.message.pinned && interaction.message.author.id == client.user.id){
|
||||||
|
const claimdata = storage.get("claimData",interaction.channel.id)
|
||||||
|
if (claimdata && claimdata != "false"){
|
||||||
|
interaction.message.edit({components:[bot.buttons.firstmsg.firstmsgRowNormalNoClaim]})
|
||||||
|
}else{
|
||||||
|
interaction.message.edit({components:[bot.buttons.firstmsg.firstmsgRowNormal]})
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
interaction.message.edit({components:[bot.buttons.close.openRowNormal]})
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
//DELETE NO TRANSCRIPT
|
//DELETE NO TRANSCRIPT
|
||||||
client.on("interactionCreate",interaction => {
|
client.on("interactionCreate",async interaction => {
|
||||||
if (!interaction.isButton()) return
|
if (!interaction.isButton()) return
|
||||||
if (interaction.customId != "OTdeleteTicket1") return
|
if (interaction.customId != "OTdeleteTicket1") return
|
||||||
|
|
||||||
try {
|
try {
|
||||||
interaction.deferUpdate()
|
await interaction.deferUpdate()
|
||||||
} catch{}
|
} catch{}
|
||||||
interaction.message.edit({components:[bot.buttons.verifybars.delete1VerifyBar]})
|
interaction.message.edit({components:[bot.buttons.verifybars.delete1VerifyBar]})
|
||||||
|
|
||||||
})
|
})
|
||||||
client.on("interactionCreate",interaction => {
|
client.on("interactionCreate",async interaction => {
|
||||||
if (!interaction.isButton()) return
|
if (!interaction.isButton()) return
|
||||||
if (interaction.customId != "OTdeleteTicketFalse1") return
|
if (interaction.customId != "OTdeleteTicketFalse1") return
|
||||||
|
|
||||||
try {
|
try {
|
||||||
interaction.deferUpdate()
|
await interaction.deferUpdate()
|
||||||
} catch{}
|
} catch{}
|
||||||
interaction.message.edit({components:[bot.buttons.close.closeCommandRow]})
|
interaction.message.edit({components:[bot.buttons.close.closeCommandRow]})
|
||||||
})
|
})
|
||||||
|
|||||||
+13
-17
@@ -1,34 +1,30 @@
|
|||||||
const index = require("../index")
|
const index = require("../index")
|
||||||
|
|
||||||
if (index.developerConfig){
|
if (index.developerConfig){
|
||||||
var config = require("../devConfig.json")
|
var config = require("../devconfig.json")
|
||||||
}else{var config = require("../config.json")}
|
}else{var config = require("../config.json")}
|
||||||
|
|
||||||
|
|
||||||
var localLanguage = require("../language/english.json")
|
var localLanguage = require("../language/english.json")
|
||||||
if (config.languagefile.startsWith("custom")) localLanguage = require("../language/custom.json")
|
const fs = require("fs")
|
||||||
else if (config.languagefile.startsWith("dutch")) localLanguage = require("../language/dutch.json")
|
const lfexists = fs.existsSync("./language/"+config.languageFile+".json")
|
||||||
else if (config.languagefile.startsWith("english")) localLanguage = require("../language/english.json")
|
if (lfexists) localLanguage = require("../language/"+config.languageFile+".json")
|
||||||
else if (config.languagefile.startsWith("german")) localLanguage = require("../language/german.json")
|
|
||||||
else if (config.languagefile.startsWith("french")) localLanguage = require("../language/french.json")
|
|
||||||
else if (config.languagefile.startsWith("romanian")) localLanguage = require("../language/romanian.json")
|
|
||||||
else if (config.languagefile.startsWith("arabic")) localLanguage = require("../language/arabic.json")
|
|
||||||
else if (config.languagefile.startsWith("spanish")) localLanguage = require("../language/spanish.json")
|
|
||||||
else if (config.languagefile.startsWith("portuguese")) localLanguage = require("../language/portuguese.json")
|
|
||||||
else if (config.languagefile.startsWith("italian")) localLanguage = require("../language/italian.json")
|
|
||||||
else if (config.languagefile.startsWith("danish")) localLanguage = require("../language/danish.json")
|
|
||||||
|
|
||||||
|
|
||||||
const errorLog = async () => {
|
const errorLog = async () => {
|
||||||
const chalk = await (await import("chalk")).default
|
const chalk = await (await import("chalk")).default
|
||||||
|
|
||||||
console.log(chalk.red("Something went wrong when loading the language!")+"\nCheck the config file or create a ticket in our server!")
|
require("./startscreen").headerDataLanguage("Something went wrong when loading the language!",true)
|
||||||
}
|
}
|
||||||
|
|
||||||
const successLog = async (language) => {
|
const successLog = async (language) => {
|
||||||
const chalk = await (await import("chalk")).default
|
const chalk = await (await import("chalk")).default
|
||||||
|
|
||||||
console.log(chalk.green("loaded language "+language+"..."))
|
require("./startscreen").headerDataLanguage("sucessfully loaded language "+language,false)
|
||||||
|
index.actionRecorder.push({
|
||||||
|
category:"ot.managers.language",
|
||||||
|
file:"./core/languageManager.js",
|
||||||
|
time:new Date().getTime(),
|
||||||
|
type:"language.success"
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!localLanguage){
|
if (!localLanguage){
|
||||||
@@ -39,5 +35,5 @@ if (!localLanguage){
|
|||||||
runError()
|
runError()
|
||||||
}else{
|
}else{
|
||||||
exports.language = localLanguage
|
exports.language = localLanguage
|
||||||
successLog(config.languagefile)
|
successLog(config.languageFile)
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
|
||||||
|
██████╗ ██████╗ ███████╗███╗ ██╗ ████████╗██╗ ██████╗██╗ ██╗███████╗████████╗
|
||||||
|
██╔═══██╗██╔══██╗██╔════╝████╗ ██║ ╚══██╔══╝██║██╔════╝██║ ██╔╝██╔════╝╚══██╔══╝
|
||||||
|
██║ ██║██████╔╝█████╗ ██╔██╗ ██║ ██║ ██║██║ █████╔╝ █████╗ ██║
|
||||||
|
██║ ██║██╔═══╝ ██╔══╝ ██║╚██╗██║ ██║ ██║██║ ██╔═██╗ ██╔══╝ ██║
|
||||||
|
╚██████╔╝██║ ███████╗██║ ╚████║ ██║ ██║╚██████╗██║ ██╗███████╗ ██║
|
||||||
|
╚═════╝ ╚═╝ ╚══════╝╚═╝ ╚═══╝ ╚═╝ ╚═╝ ╚═════╝╚═╝ ╚═╝╚══════╝ ╚═╝
|
||||||
+30
-8
@@ -11,13 +11,17 @@ const APIEvents = require("./api/modules/events")
|
|||||||
module.exports = async () => {
|
module.exports = async () => {
|
||||||
const chalk = await (await import("chalk")).default
|
const chalk = await (await import("chalk")).default
|
||||||
|
|
||||||
client.on("interactionCreate",(interaction) => {
|
client.on("interactionCreate",async (interaction) => {
|
||||||
if (!interaction.isButton() && !interaction.isStringSelectMenu()) return
|
if (!interaction.isButton() && !interaction.isStringSelectMenu()) return
|
||||||
if (interaction.isButton() && !interaction.customId.startsWith("newR")) return
|
if (interaction.isButton() && !interaction.customId.startsWith("newR")) return
|
||||||
if (interaction.isStringSelectMenu() && !(interaction.customId == "OTdropdownMenu")) return
|
if (interaction.isStringSelectMenu() && !(interaction.customId == "OTdropdownMenu")) return
|
||||||
|
|
||||||
|
bot.actionRecorder.push({
|
||||||
|
category:"ot.managers.reactionroles",
|
||||||
|
file:"./core/reactionRoles.js",
|
||||||
|
time:new Date().getTime(),
|
||||||
|
type:"reactionRoles.interactionCreated"
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
const optionidRaw = interaction.isStringSelectMenu() ? interaction.values[0] : interaction.customId
|
const optionidRaw = interaction.isStringSelectMenu() ? interaction.values[0] : interaction.customId
|
||||||
@@ -28,7 +32,7 @@ module.exports = async () => {
|
|||||||
return
|
return
|
||||||
}else{
|
}else{
|
||||||
try {
|
try {
|
||||||
interaction.deferUpdate()
|
await interaction.deferUpdate()
|
||||||
} catch{}
|
} catch{}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -40,35 +44,53 @@ module.exports = async () => {
|
|||||||
const user = interaction.member
|
const user = interaction.member
|
||||||
|
|
||||||
if (mode == "add"){
|
if (mode == "add"){
|
||||||
|
bot.actionRecorder.push({
|
||||||
|
category:"ot.managers.reactionroles",
|
||||||
|
file:"./core/reactionRoles.js",
|
||||||
|
time:new Date().getTime(),
|
||||||
|
type:"reactionRoles.type.add"
|
||||||
|
})
|
||||||
option.roles.forEach((role) => {
|
option.roles.forEach((role) => {
|
||||||
interaction.guild.members.cache.find(u => u.id == user.id).roles.add(role)
|
interaction.guild.members.cache.find(u => u.id == user.id).roles.add(role)
|
||||||
|
|
||||||
log("system","added role (reaction roles)",[{key:"user",value:interaction.user.tag},{key:"role",value:role}])
|
log("system","added role (reaction roles)",[{key:"user",value:interaction.user.username},{key:"role",value:role}])
|
||||||
const apirole = interaction.guild.roles.cache.find(r => r.id == role)
|
const apirole = interaction.guild.roles.cache.find(r => r.id == role)
|
||||||
APIEvents.onReactionRole("add","add",apirole,interaction.user,interaction.channel,interaction.guild,new Date())
|
APIEvents.onReactionRole("add","add",apirole,interaction.user,interaction.channel,interaction.guild,new Date())
|
||||||
})
|
})
|
||||||
|
|
||||||
}else if (mode == "remove"){
|
}else if (mode == "remove"){
|
||||||
|
bot.actionRecorder.push({
|
||||||
|
category:"ot.managers.reactionroles",
|
||||||
|
file:"./core/reactionRoles.js",
|
||||||
|
time:new Date().getTime(),
|
||||||
|
type:"reactionRoles.type.remove"
|
||||||
|
})
|
||||||
option.roles.forEach((role) => {
|
option.roles.forEach((role) => {
|
||||||
interaction.guild.members.cache.find(u => u.id == user.id).roles.remove(role)
|
interaction.guild.members.cache.find(u => u.id == user.id).roles.remove(role)
|
||||||
|
|
||||||
log("system","removed role (reaction roles)",[{key:"user",value:interaction.user.tag},{key:"role",value:role}])
|
log("system","removed role (reaction roles)",[{key:"user",value:interaction.user.username},{key:"role",value:role}])
|
||||||
const apirole = interaction.guild.roles.cache.find(r => r.id == role)
|
const apirole = interaction.guild.roles.cache.find(r => r.id == role)
|
||||||
APIEvents.onReactionRole("remove","remove",apirole,interaction.user,interaction.channel,interaction.guild,new Date())
|
APIEvents.onReactionRole("remove","remove",apirole,interaction.user,interaction.channel,interaction.guild,new Date())
|
||||||
})
|
})
|
||||||
|
|
||||||
}else if (mode == "add&remove"){
|
}else if (mode == "add&remove"){
|
||||||
|
bot.actionRecorder.push({
|
||||||
|
category:"ot.managers.reactionroles",
|
||||||
|
file:"./core/reactionRoles.js",
|
||||||
|
time:new Date().getTime(),
|
||||||
|
type:"reactionRoles.type.add&remove"
|
||||||
|
})
|
||||||
option.roles.forEach((role) => {
|
option.roles.forEach((role) => {
|
||||||
if (!interaction.guild.members.cache.find(u => u.id == user.id).roles.cache.has(role)){
|
if (!interaction.guild.members.cache.find(u => u.id == user.id).roles.cache.has(role)){
|
||||||
interaction.guild.members.cache.find(u => u.id == user.id).roles.add(role)
|
interaction.guild.members.cache.find(u => u.id == user.id).roles.add(role)
|
||||||
|
|
||||||
log("system","added role (reaction roles)",[{key:"user",value:interaction.user.tag},{key:"role",value:role}])
|
log("system","added role (reaction roles)",[{key:"user",value:interaction.user.username},{key:"role",value:role}])
|
||||||
const apirole = interaction.guild.roles.cache.find(r => r.id == role)
|
const apirole = interaction.guild.roles.cache.find(r => r.id == role)
|
||||||
APIEvents.onReactionRole("add","add&remove",apirole,interaction.user,interaction.channel,interaction.guild,new Date())
|
APIEvents.onReactionRole("add","add&remove",apirole,interaction.user,interaction.channel,interaction.guild,new Date())
|
||||||
}else {
|
}else {
|
||||||
interaction.guild.members.cache.find(u => u.id == user.id).roles.remove(role)
|
interaction.guild.members.cache.find(u => u.id == user.id).roles.remove(role)
|
||||||
|
|
||||||
log("system","removed role (reaction roles)",[{key:"user",value:interaction.user.tag},{key:"role",value:role}])
|
log("system","removed role (reaction roles)",[{key:"user",value:interaction.user.username},{key:"role",value:role}])
|
||||||
const apirole = interaction.guild.roles.cache.find(r => r.id == role)
|
const apirole = interaction.guild.roles.cache.find(r => r.id == role)
|
||||||
APIEvents.onReactionRole("remove","add&remove",apirole,interaction.user,interaction.channel,interaction.guild,new Date())
|
APIEvents.onReactionRole("remove","add&remove",apirole,interaction.user,interaction.channel,interaction.guild,new Date())
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,8 +8,7 @@ const act = discord.ApplicationCommandType
|
|||||||
const acot = discord.ApplicationCommandOptionType
|
const acot = discord.ApplicationCommandOptionType
|
||||||
|
|
||||||
module.exports = async () => {
|
module.exports = async () => {
|
||||||
bot.errorLog.log("info","auto-updating slash commands...")
|
const sid = config.serverId
|
||||||
const sid = config.server_id
|
|
||||||
|
|
||||||
const ids = configParser.getTicketValuesArray("id")
|
const ids = configParser.getTicketValuesArray("id")
|
||||||
/**@type {[{name:String,value:String}]} */
|
/**@type {[{name:String,value:String}]} */
|
||||||
|
|||||||
@@ -7,9 +7,10 @@ const configParser = require("../utils/configParser")
|
|||||||
const act = discord.ApplicationCommandType
|
const act = discord.ApplicationCommandType
|
||||||
const acot = discord.ApplicationCommandOptionType
|
const acot = discord.ApplicationCommandOptionType
|
||||||
|
|
||||||
module.exports = async () => {
|
/**@param {Boolean|undefined} invisible*/
|
||||||
|
module.exports = async (invisible) => {
|
||||||
const chalk = (await import("chalk")).default
|
const chalk = (await import("chalk")).default
|
||||||
const sid = config.server_id
|
const sid = config.serverId
|
||||||
|
|
||||||
const ids = configParser.getTicketValuesArray("id")
|
const ids = configParser.getTicketValuesArray("id")
|
||||||
/**@type {[{name:String,value:String}]} */
|
/**@type {[{name:String,value:String}]} */
|
||||||
@@ -30,17 +31,20 @@ module.exports = async () => {
|
|||||||
var readystats = 0
|
var readystats = 0
|
||||||
|
|
||||||
//process.stdout.write("[status] there are "+chalk.blue("0 out of 10")+" commands ready! (this can take up to 40 seconds)")
|
//process.stdout.write("[status] there are "+chalk.blue("0 out of 10")+" commands ready! (this can take up to 40 seconds)")
|
||||||
setInterval(() => {
|
if (!invisible){
|
||||||
process.stdout.cursorTo(0)
|
setInterval(() => {
|
||||||
process.stdout.write("[status] there are "+chalk.blue(readystats+" out of 13")+" commands ready! (this can take up to 40 seconds)")
|
if (process.stdout && process.stdout.cursorTo) process.stdout.cursorTo(0)
|
||||||
if (readystats >= 13){
|
process.stdout.write("[status] there are "+chalk.blue(readystats+" out of 13")+" commands ready! (this can take up to 40 seconds)")
|
||||||
const fs = require("fs")
|
if (readystats >= 13){
|
||||||
fs.writeFileSync("./storage/slashcmdEnabled.txt","true")
|
console.log(chalk.green("\nready!"))
|
||||||
console.log(chalk.green("\nready!"))
|
console.log(chalk.blue("you can now start the bot with "+chalk.bgBlue("'npm start'")+"!"))
|
||||||
console.log(chalk.blue("you can now start the bot with "+chalk.bgBlue("'npm start'")+"!"))
|
process.exit(1)
|
||||||
process.exit(1)
|
}
|
||||||
}
|
},100)
|
||||||
},100)
|
}
|
||||||
|
|
||||||
|
const fs = require("fs")
|
||||||
|
fs.writeFileSync("./storage/slashcmdEnabled.txt",require("../../package.json").version)
|
||||||
|
|
||||||
//slashtranslation
|
//slashtranslation
|
||||||
const ST = require("../../language/slashcmds/slash.json").data
|
const ST = require("../../language/slashcmds/slash.json").data
|
||||||
|
|||||||
@@ -0,0 +1,79 @@
|
|||||||
|
const discord = require('discord.js')
|
||||||
|
const bot = require('../index')
|
||||||
|
const client = bot.client
|
||||||
|
const config = bot.config
|
||||||
|
const l = bot.language
|
||||||
|
const log = bot.errorLog.log
|
||||||
|
|
||||||
|
const logo = require("fs").readFileSync("./core/logo.txt").toString()
|
||||||
|
|
||||||
|
/**@param {import('chalk').ChalkInstance} chalk */
|
||||||
|
const showFlags = async (chalk) => {
|
||||||
|
var isFlag = false
|
||||||
|
if (process.argv.some((v) => v == "--devconfig")) console.log(chalk.blue("[FLAGS] => used dev config instead of normal config")); isFlag = true
|
||||||
|
if (process.argv.some((v) => v == "--nochecker")) console.log(chalk.blue("[FLAGS] => disabled checker.js")); isFlag = true
|
||||||
|
if (process.argv.some((v) => v == "--tsoffline")) console.log(chalk.blue("[FLAGS] => offline check for html transcripts disabled!")); isFlag = true
|
||||||
|
if (process.argv.some((v) => v == "--debug")) console.log(chalk.blue("[FLAGS] => enabled DEBUG mode")); isFlag = true
|
||||||
|
if (process.argv.some((v) => v == "--noslash")) console.log(chalk.blue("[FLAGS] => slash commands disabled")); isFlag = true
|
||||||
|
if (process.argv.some((v) => v == "--localstatus")) console.log(chalk.blue("[FLAGS] => using local livestatus.json")); isFlag = true
|
||||||
|
if (process.argv.some((v) => v == "--noerrorupload")) console.log(chalk.blue("[FLAGS] => not uploading errors to liveStatus")); isFlag = true
|
||||||
|
|
||||||
|
if (!isFlag) console.log(chalk.blue("no flags!"))
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.run = async () => {
|
||||||
|
const chalk = await (await import("chalk")).default
|
||||||
|
console.log(chalk.hex("f8ba00")(logo))
|
||||||
|
const version = require("../package.json").version
|
||||||
|
var headertext = "v"+version+" - Support: https://discord.dj-dj.be - Language: "+config.languageFile
|
||||||
|
const spaceamount = (84-headertext.length)/2
|
||||||
|
var i = 0
|
||||||
|
while (i < spaceamount){
|
||||||
|
headertext = " "+headertext
|
||||||
|
i++
|
||||||
|
}
|
||||||
|
console.log(chalk.bold(headertext+"\n"))
|
||||||
|
console.log(chalk.bold(chalk.underline("FLAGS:")))
|
||||||
|
showFlags(chalk)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {import('chalk').ChalkInstance} chalk
|
||||||
|
* @param {{type:String,text:String,enabled:Boolean}} status
|
||||||
|
* @param {Boolean} updatingslash
|
||||||
|
* @param {Boolean} slashmode
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
exports.headerDataReady = (chalk,status,updatingslash,slashmode) => {
|
||||||
|
console.log("\n"+chalk.bold(chalk.underline("STARTUP INFO:")))
|
||||||
|
if (status.enabled) console.log(chalk.hex("f8ba00")("status: ")+chalk.bold(status.type.toLowerCase())+" "+status.text)
|
||||||
|
if (slashmode){
|
||||||
|
console.log("\n\n"+chalk.red(chalk.underline("STARTING IN SLASH CMD CONFIGURATION MODE!")))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
console.log(chalk.hex("f8ba00")("updating slash cmds: ")+chalk.bold(updatingslash))
|
||||||
|
}
|
||||||
|
|
||||||
|
var languageMSG = ""
|
||||||
|
var languageErr = false
|
||||||
|
/**
|
||||||
|
* @param {String} message
|
||||||
|
* @param {Boolean} err
|
||||||
|
*/
|
||||||
|
exports.headerDataLanguage = async (message,err) => {
|
||||||
|
languageMSG = message
|
||||||
|
languageErr = err
|
||||||
|
}
|
||||||
|
|
||||||
|
/**@param {{total:Number,error:Number,success:Number}} plugins*/
|
||||||
|
exports.headerDataPlugins = async (plugins) => {
|
||||||
|
const chalk = await (await import("chalk")).default
|
||||||
|
const lmsg = languageErr ? chalk.red(languageMSG) : languageMSG
|
||||||
|
console.log(chalk.hex("f8ba00")("language: ")+lmsg)
|
||||||
|
console.log(chalk.hex("f8ba00")("plugins loaded: ")+chalk.bold(plugins.total+" total ")+"("+plugins.success+"✅ "+plugins.error+"❌)")
|
||||||
|
|
||||||
|
console.log("\n"+chalk.bold(chalk.underline("LIVESTATUS:")))
|
||||||
|
await require("./utils/liveStatus").run(plugins)
|
||||||
|
|
||||||
|
console.log("\n"+chalk.bold(chalk.underline("LOGS:")))
|
||||||
|
}
|
||||||
@@ -0,0 +1,56 @@
|
|||||||
|
const discord = require('discord.js')
|
||||||
|
const bot = require('../../index')
|
||||||
|
const client = bot.client
|
||||||
|
const config = bot.config
|
||||||
|
const log = bot.errorLog.log
|
||||||
|
const l = bot.language
|
||||||
|
const storage = bot.storage
|
||||||
|
|
||||||
|
module.exports = () => {
|
||||||
|
setInterval(async () => {
|
||||||
|
try{
|
||||||
|
const tickets = storage.getCategory("autocloseTickets")
|
||||||
|
if (!tickets) return
|
||||||
|
tickets.forEach(async (t) => {
|
||||||
|
if (t.value == "false" || t.value == 0 || typeof t.value != "number") return
|
||||||
|
try{
|
||||||
|
|
||||||
|
const channel = await client.channels.fetch(t.key,{cache:true})
|
||||||
|
if (!channel || !channel.isTextBased()) return
|
||||||
|
|
||||||
|
const message = (await channel.messages.fetch({limit:10})).first()
|
||||||
|
if (!message) return
|
||||||
|
|
||||||
|
const secondsSLM = Math.round((new Date().getTime() - message.createdTimestamp)/1000)
|
||||||
|
const hoursSLM = secondsSLM/3600
|
||||||
|
|
||||||
|
if (hoursSLM > t.value){
|
||||||
|
/**@type {discord.Guild|false} */
|
||||||
|
const guild = client.guilds.cache.find((g) => g.id == channel.guild.id)
|
||||||
|
if (!guild) return
|
||||||
|
const clientMember = guild.members.cache.find((m) => m.id == client.user.id)
|
||||||
|
if (!clientMember) return
|
||||||
|
|
||||||
|
var name = channel.name
|
||||||
|
var prefix = ""
|
||||||
|
const tickets = config.options
|
||||||
|
tickets.forEach((ticket) => {
|
||||||
|
if (name.startsWith(ticket.channelprefix)){
|
||||||
|
prefix = ticket.channelprefix
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
require("./ticketCloser").closeManager(clientMember,channel,prefix,"close","OTautoclose",true)
|
||||||
|
storage.delete("autocloseTickets",channel.id)
|
||||||
|
|
||||||
|
channel.send({embeds:[bot.embeds.commands.autocloseSignalEmbed(client.user,t.value)],components:[bot.buttons.close.closeCommandRow]})
|
||||||
|
}
|
||||||
|
|
||||||
|
}catch{
|
||||||
|
log("system","can't find autoclose channel with ID: "+t.key)
|
||||||
|
storage.delete("autocloseTickets",t.key)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}catch{}
|
||||||
|
},120000)
|
||||||
|
}
|
||||||
@@ -18,7 +18,7 @@ const pendingDelete = []
|
|||||||
* @param {Boolean} nomessage
|
* @param {Boolean} nomessage
|
||||||
* @param {String} reason only when closing, not when deleting!
|
* @param {String} reason only when closing, not when deleting!
|
||||||
*/
|
*/
|
||||||
exports.NEWcloseTicket = async (member,channel,prefix,mode,reason,nomessage) => {
|
exports.closeManager = async (member,channel,prefix,mode,reason,nomessage) => {
|
||||||
const guild = channel.guild
|
const guild = channel.guild
|
||||||
const user = member.user
|
const user = member.user
|
||||||
const chalk = await (await import("chalk")).default
|
const chalk = await (await import("chalk")).default
|
||||||
@@ -35,7 +35,7 @@ exports.NEWcloseTicket = async (member,channel,prefix,mode,reason,nomessage) =>
|
|||||||
const ticketOpenerChannelName = channelname.split(prefix)[1]
|
const ticketOpenerChannelName = channelname.split(prefix)[1]
|
||||||
|
|
||||||
//get user that opened the ticket
|
//get user that opened the ticket
|
||||||
var getuserID = storage.get("userTicketStorage",channel.id)
|
var getuserID = storage.get("userFromChannel",channel.id)
|
||||||
try {
|
try {
|
||||||
var ticketOpener = client.users.cache.find(u => u.id === getuserID)
|
var ticketOpener = client.users.cache.find(u => u.id === getuserID)
|
||||||
var isDatabaseError = false
|
var isDatabaseError = false
|
||||||
@@ -63,32 +63,26 @@ exports.NEWcloseTicket = async (member,channel,prefix,mode,reason,nomessage) =>
|
|||||||
if (!nomessage){
|
if (!nomessage){
|
||||||
await channel.send({content:"**"+l.messages.gettingdeleted+"**"})
|
await channel.send({content:"**"+l.messages.gettingdeleted+"**"})
|
||||||
}
|
}
|
||||||
log("system","deleted a ticket",[{key:"user",value:user.tag},{key:"ticket",value:channel.name}])
|
log("system","deleted a ticket",[{key:"user",value:user.username},{key:"ticket",value:channel.name}])
|
||||||
pendingDelete.push(channel.id)
|
pendingDelete.push(channel.id)
|
||||||
|
|
||||||
if (!isDatabaseError) storage.set("ticketStorage",getuserID,Number(storage.get("ticketStorage",getuserID)) - 1)
|
if (!isDatabaseError) storage.set("amountOfUserTickets",getuserID,Number(storage.get("amountOfUserTickets",getuserID)) - 1)
|
||||||
|
storage.delete("userFromChannel",channel.id)
|
||||||
|
storage.delete("claimData",channel.id)
|
||||||
|
storage.delete("autocloseTickets",channel.id)
|
||||||
|
if (Number(storage.get("amountOfUserTickets",getuserID)) < 0) storage.set("amountOfUserTickets",getuserID,0)
|
||||||
|
|
||||||
//getID & send DM & send api event
|
//getID & send DM & send api event
|
||||||
await channel.messages.fetchPinned().then(async msglist => {
|
|
||||||
var firstmsg = msglist.last()
|
|
||||||
if (firstmsg == undefined || firstmsg.author.id != client.user.id) return false
|
|
||||||
const hiddendata = bot.hiddenData.readHiddenData(firstmsg.embeds[0].description)
|
|
||||||
const ticketId = hiddendata.data.find(d => d.key == "type").value.value
|
|
||||||
const ticketData = require("../utils/configParser").getTicketById(ticketId,true)
|
|
||||||
|
|
||||||
require("../api/modules/events").onTicketDelete(user,channel,guild,new Date(),{name:channel.name,status:"deleted",ticketOptions:ticketData})
|
const hiddendata = bot.hiddenData.readHiddenData(channel.id)
|
||||||
|
if (hiddendata.length < 1) return channel.send({embeds:[bot.errorLog.notInATicket]})
|
||||||
|
const ticketId = hiddendata.find(d => d.key == "type").value
|
||||||
|
const ticketData = require("../utils/configParser").getTicketById(ticketId,true)
|
||||||
|
|
||||||
const id = hiddendata.data.find(d => d.key == "openerid").value
|
require("../api/modules/events").onTicketDelete(user,channel,guild,new Date(),{name:channel.name,status:"deleted",ticketOptions:ticketData})
|
||||||
|
|
||||||
const sphd = bot.hiddenData.removeHiddenData(firstmsg.embeds[0].description)
|
hiddendata.push({key:"pendingdelete",value:"true"})
|
||||||
sphd.hiddenData.data.push({key:"pendingdelete",value:"true"})
|
bot.hiddenData.writeHiddenData(channel.id,hiddendata)
|
||||||
const newEmbed = new discord.EmbedBuilder(firstmsg.embeds[0].data)
|
|
||||||
newEmbed.setDescription(sphd.description + bot.hiddenData.writeHiddenData(sphd.hiddenData.type,sphd.hiddenData.data))
|
|
||||||
await firstmsg.edit({embeds:[newEmbed]})
|
|
||||||
|
|
||||||
if (!id) return false
|
|
||||||
|
|
||||||
})
|
|
||||||
|
|
||||||
}else if (mode == "close"){
|
}else if (mode == "close"){
|
||||||
//close
|
//close
|
||||||
@@ -119,7 +113,7 @@ exports.NEWcloseTicket = async (member,channel,prefix,mode,reason,nomessage) =>
|
|||||||
})
|
})
|
||||||
|
|
||||||
//add main adminroles
|
//add main adminroles
|
||||||
config.main_adminroles.forEach((role,index) => {
|
config.adminRoles.forEach((role,index) => {
|
||||||
try {
|
try {
|
||||||
const adminrole = guild.roles.cache.find(r => r.id == role)
|
const adminrole = guild.roles.cache.find(r => r.id == role)
|
||||||
if (!adminrole) return
|
if (!adminrole) return
|
||||||
@@ -127,7 +121,8 @@ exports.NEWcloseTicket = async (member,channel,prefix,mode,reason,nomessage) =>
|
|||||||
permissionArray.push({
|
permissionArray.push({
|
||||||
id:adminrole,
|
id:adminrole,
|
||||||
type:"role",
|
type:"role",
|
||||||
allow:[pfb.AddReactions,pfb.AttachFiles,pfb.EmbedLinks,pfb.SendMessages,pfb.ViewChannel]
|
allow:[pfb.AddReactions,pfb.AttachFiles,pfb.EmbedLinks,pfb.SendMessages,pfb.ViewChannel],
|
||||||
|
deny:[]
|
||||||
})
|
})
|
||||||
}catch{
|
}catch{
|
||||||
log("system","invalid role! At 'config.json => main_adminroles:"+index)
|
log("system","invalid role! At 'config.json => main_adminroles:"+index)
|
||||||
@@ -138,105 +133,82 @@ exports.NEWcloseTicket = async (member,channel,prefix,mode,reason,nomessage) =>
|
|||||||
const ticketInfoError = bot.errorLog.serverError("Unable to detect ticket information.\n*(First message that this bot sends)*\n\n__**Possible reasons:**__\n- you unpinned the first message\n- the first message is deleted\n- it has been unpinned & repinned after another message has been pinned.\n\n__**Possible solutions:**__\n- unpin all messages in this channel & repin the first message that this bot sent.\nIf this doesn't work, just delete the ticket manually!")
|
const ticketInfoError = bot.errorLog.serverError("Unable to detect ticket information.\n*(First message that this bot sends)*\n\n__**Possible reasons:**__\n- you unpinned the first message\n- the first message is deleted\n- it has been unpinned & repinned after another message has been pinned.\n\n__**Possible solutions:**__\n- unpin all messages in this channel & repin the first message that this bot sent.\nIf this doesn't work, just delete the ticket manually!")
|
||||||
|
|
||||||
//add ticket adminroles
|
//add ticket adminroles
|
||||||
await channel.messages.fetchPinned().then(msglist => {
|
|
||||||
var firstmsg = msglist.last()
|
const hiddendata = bot.hiddenData.readHiddenData(channel.id)
|
||||||
if (firstmsg == undefined || firstmsg.author.id != client.user.id){
|
if (hiddendata.length < 1) return channel.send({embeds:[bot.errorLog.notInATicket]})
|
||||||
var firstmsg = msglist.find((m => m.author.id == client.user.id))
|
const ticketId = hiddendata.find(d => d.key == "type").value
|
||||||
if (firstmsg == undefined || firstmsg.author.id != client.user.id){
|
const ticketData = require("../utils/configParser").getTicketById(ticketId,true)
|
||||||
return channel.send({embeds:[ticketInfoError]})
|
|
||||||
}
|
if (!ticketData) return
|
||||||
|
if (ticketData.closedCategory.enable){
|
||||||
|
/**@type {discord.CategoryChannel} */
|
||||||
|
const category = guild.channels.cache.find(c => c.id == ticketData.closedCategory.id && c.type == discord.ChannelType.GuildCategory)
|
||||||
|
try {
|
||||||
|
channel.setParent(category)
|
||||||
|
}catch{
|
||||||
|
bot.errorLog.log("system","failed to move channel to new category!")
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (firstmsg.embeds.length < 1 || !firstmsg.embeds[0].description.includes("OTDATA")) return channel.send({embeds:[ticketInfoError]})
|
ticketData.adminroles.forEach((role,index) => {
|
||||||
|
if (!config.adminRoles.includes(role)){
|
||||||
const hiddendata = bot.hiddenData.readHiddenData(firstmsg.embeds[0].description)
|
|
||||||
const ticketId = hiddendata.data.find(d => d.key == "type").value
|
|
||||||
const ticketData = require("../utils/configParser").getTicketById(ticketId,true)
|
|
||||||
|
|
||||||
if (!ticketData) return
|
|
||||||
|
|
||||||
if (ticketData.closedCategory.enable){
|
|
||||||
/**@type {discord.CategoryChannel} */
|
|
||||||
const category = guild.channels.cache.find(c => c.id == ticketData.closedCategory.id && c.type == discord.ChannelType.GuildCategory)
|
|
||||||
try {
|
try {
|
||||||
channel.setParent(category)
|
const adminrole = guild.roles.cache.find(r => r.id == role)
|
||||||
|
if (!adminrole) return
|
||||||
|
|
||||||
|
permissionArray.push({
|
||||||
|
id:adminrole,
|
||||||
|
type:"role",
|
||||||
|
allow:[pfb.AddReactions,pfb.ViewChannel,pfb.AttachFiles,pfb.EmbedLinks,pfb.SendMessages],
|
||||||
|
deny:[]
|
||||||
|
})
|
||||||
}catch{
|
}catch{
|
||||||
bot.errorLog.log("system","failed to move channel to new category!")
|
log("system","invalid role! At 'config.json => options/ticket/...:"+index)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @type {String[]}
|
|
||||||
*/
|
|
||||||
const ticketadmin = ticketData.adminroles
|
|
||||||
ticketadmin.forEach((role,index) => {
|
|
||||||
if (!config.main_adminroles.includes(role)){
|
|
||||||
try {
|
|
||||||
const adminrole = guild.roles.cache.find(r => r.id == role)
|
|
||||||
if (!adminrole) return
|
|
||||||
|
|
||||||
permissionArray.push({
|
|
||||||
id:adminrole,
|
|
||||||
type:"role",
|
|
||||||
allow:[pfb.AddReactions,pfb.ViewChannel],
|
|
||||||
deny:[pfb.AttachFiles,pfb.EmbedLinks,pfb.SendMessages]
|
|
||||||
})
|
|
||||||
}catch{
|
|
||||||
log("system","invalid role! At 'config.json => options/ticket/...:"+index)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
})
|
})
|
||||||
|
|
||||||
channel.permissionOverwrites.set(permissionArray)
|
channel.permissionOverwrites.set(permissionArray)
|
||||||
|
|
||||||
if (!nomessage){
|
if (!nomessage){
|
||||||
//message
|
//message
|
||||||
var closeButtonRow = new discord.ActionRowBuilder()
|
|
||||||
.addComponents(
|
|
||||||
new discord.ButtonBuilder()
|
|
||||||
.setCustomId("OTdeleteTicket1")
|
|
||||||
.setDisabled(false)
|
|
||||||
.setStyle(discord.ButtonStyle.Danger)
|
|
||||||
.setLabel(l.buttons.delete)
|
|
||||||
.setEmoji("✖️")
|
|
||||||
)
|
|
||||||
.addComponents(
|
|
||||||
new discord.ButtonBuilder()
|
|
||||||
.setCustomId("OTreopenTicket")
|
|
||||||
.setDisabled(false)
|
|
||||||
.setStyle(discord.ButtonStyle.Success)
|
|
||||||
.setLabel(l.buttons.reopen)
|
|
||||||
.setEmoji("✔")
|
|
||||||
)
|
|
||||||
|
|
||||||
const embed = new discord.EmbedBuilder()
|
const embed = new discord.EmbedBuilder()
|
||||||
.setColor(config.main_color)
|
.setColor(config.color)
|
||||||
.setTitle(":lock: "+l.messages.closedTitle+" :lock:")
|
.setTitle(":lock: "+l.commands.closeTitle+" :lock:")
|
||||||
.setDescription(l.messages.closedDescription)
|
.setDescription(l.messages.closedDescription)
|
||||||
channel.send({embeds:[embed],components:[closeButtonRow]})
|
channel.send({embeds:[embed],components:[bot.buttons.close.closeCommandRow]})
|
||||||
}
|
}
|
||||||
|
|
||||||
log("system","closed a ticket",[{key:"user",value:user.tag},{key:"ticket",value:channel.name}])
|
log("system","closed a ticket",[{key:"user",value:user.username},{key:"ticket",value:channel.name}])
|
||||||
|
|
||||||
|
|
||||||
//getID & send DM & send api event
|
//send api event
|
||||||
await channel.messages.fetchPinned().then(msglist => {
|
require("../api/modules/events").onTicketClose(user,channel,guild,new Date(),{name:channel.name,status:"closed",ticketOptions:ticketData},newReason)
|
||||||
var firstmsg = msglist.last()
|
}
|
||||||
if (firstmsg == undefined || firstmsg.author.id != client.user.id) return false
|
|
||||||
const hiddendata = bot.hiddenData.readHiddenData(firstmsg.embeds[0].description)
|
|
||||||
const ticketId = hiddendata.data.find(d => d.key == "type").value
|
|
||||||
const ticketData = require("../utils/configParser").getTicketById(ticketId,true)
|
|
||||||
|
|
||||||
require("../api/modules/events").onTicketClose(user,channel,guild,new Date(),{name:channel.name,status:"closed",ticketOptions:ticketData},newReason)
|
/**
|
||||||
|
*
|
||||||
|
* @param {discord.TextChannel} channel
|
||||||
|
* @param {Number} limit
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
const getmessages = async (channel,limit) => {
|
||||||
|
const final = []
|
||||||
|
var lastId = ""
|
||||||
|
|
||||||
const id = hiddendata.data.find(d => d.key == "openerid").value
|
while (true) {
|
||||||
|
const options = {limit:100}
|
||||||
if (!id) return false
|
if (lastId) options.before = lastId
|
||||||
|
|
||||||
})
|
|
||||||
|
|
||||||
|
const messages = await channel.messages.fetch(options)
|
||||||
|
messages.forEach(msg => {final.push(msg)})
|
||||||
|
lastId = messages.last().id
|
||||||
|
|
||||||
|
if (messages.size != 100 || final >= limit) {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return final
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -244,13 +216,16 @@ exports.NEWcloseTicket = async (member,channel,prefix,mode,reason,nomessage) =>
|
|||||||
if (!bot.tsconfig.sendTranscripts.enableChannel && !bot.tsconfig.sendTranscripts.enableDM) return false
|
if (!bot.tsconfig.sendTranscripts.enableChannel && !bot.tsconfig.sendTranscripts.enableDM) return false
|
||||||
|
|
||||||
const APIEvents = require("../api/modules/events")
|
const APIEvents = require("../api/modules/events")
|
||||||
const messages = await channel.messages.fetch({cache:true})
|
const messages = await getmessages(channel,5000)
|
||||||
await require("../transcriptSystem/manager")(messages,guild,channel,user,reason)
|
await require("../transcriptSystem/manager")(messages,guild,channel,user,reason)
|
||||||
APIEvents.onTranscriptCreation(messages,channel,guild,new Date())
|
APIEvents.onTranscriptCreation(messages,channel,guild,new Date())
|
||||||
}
|
}
|
||||||
const deleteHandler = async () => {
|
const deleteHandler = async () => {
|
||||||
if (deleteRequired){
|
if (deleteRequired){
|
||||||
pendingDelete.shift()
|
pendingDelete.shift()
|
||||||
|
//delete HIDDENDATA
|
||||||
|
storage.delete("HIDDENDATA",channel.id)
|
||||||
|
|
||||||
await channel.delete()
|
await channel.delete()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,13 +10,12 @@ const storage = bot.storage
|
|||||||
|
|
||||||
module.exports = () => {
|
module.exports = () => {
|
||||||
//dropdown placeholder
|
//dropdown placeholder
|
||||||
client.on("interactionCreate",(interaction) => {
|
client.on("interactionCreate",async (interaction) => {
|
||||||
if (!interaction.isStringSelectMenu()) return
|
if (!interaction.isStringSelectMenu()) return
|
||||||
if (interaction.customId != "OTdropdownMenu") return
|
if (interaction.customId != "OTdropdownMenu") return
|
||||||
if (interaction.values.includes("OTChooseTicket")){
|
if (interaction.values.includes("OTChooseTicket")){
|
||||||
interaction.deferUpdate()
|
await interaction.deferUpdate()
|
||||||
}
|
}
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
@@ -37,7 +36,7 @@ module.exports = () => {
|
|||||||
if (interaction.customId.startsWith("OTnewT")){
|
if (interaction.customId.startsWith("OTnewT")){
|
||||||
const optionid = interaction.customId.split("OTnewT")[1]
|
const optionid = interaction.customId.split("OTnewT")[1]
|
||||||
if (!optionid){
|
if (!optionid){
|
||||||
interaction.reply({embeds:[bot.errorLog.serverError(l.errors.ticketDoesntExist)]})
|
await interaction.reply({embeds:[bot.errorLog.serverError(l.errors.ticketDoesntExist)]})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -48,33 +47,26 @@ module.exports = () => {
|
|||||||
|
|
||||||
//ticketoptions from config
|
//ticketoptions from config
|
||||||
const currentTicketOptions = configParser.getTicketById(customId)
|
const currentTicketOptions = configParser.getTicketById(customId)
|
||||||
|
|
||||||
if (currentTicketOptions == false) return interaction.reply({embeds:[bot.errorLog.serverError(l.errors.anotherOption)]})
|
if (currentTicketOptions == false) return interaction.reply({embeds:[bot.errorLog.serverError(l.errors.anotherOption)]})
|
||||||
|
|
||||||
if (interaction.isButton()){
|
if (interaction.isButton()){
|
||||||
try {
|
try {
|
||||||
interaction.deferUpdate()
|
await interaction.deferReply({ephemeral:config.system.answerInEphemeralOnOpen})
|
||||||
} catch{}
|
} catch{}
|
||||||
}else if (interaction.isChatInputCommand()){
|
}else if (interaction.isChatInputCommand()){
|
||||||
interaction.reply({embeds:[bot.errorLog.success(l.messages.createdTitle,l.messages.createdDescription)]})
|
try {
|
||||||
|
await interaction.deferReply({ephemeral:config.system.answerInEphemeralOnOpen})
|
||||||
|
} catch{}
|
||||||
}else if (interaction.isStringSelectMenu()){
|
}else if (interaction.isStringSelectMenu()){
|
||||||
try {
|
try {
|
||||||
interaction.deferUpdate()
|
await interaction.deferUpdate()
|
||||||
} catch{}
|
} catch{}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (storage.get("ticketStorage",interaction.member.id) == null || storage.get("ticketStorage",interaction.member.id) == "false"|| Number(storage.get("ticketStorage",interaction.member.id)) < config.system.max_allowed_tickets){
|
if (storage.get("amountOfUserTickets",interaction.member.id) == null || storage.get("amountOfUserTickets",interaction.member.id) == "false"|| Number(storage.get("amountOfUserTickets",interaction.member.id)) < config.system.maxAmountOfTickets){
|
||||||
|
|
||||||
try{
|
|
||||||
if (currentTicketOptions.enableDmOnOpen){
|
|
||||||
interaction.member.send({embeds:[bot.errorLog.custom(l.messages.newTicketDmTitle,currentTicketOptions.message,":ticket:",config.main_color)]})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch{log("system","can't send DM to member, member doesn't allow dm's")}
|
|
||||||
|
|
||||||
|
|
||||||
//update storage
|
//update storage
|
||||||
storage.set("ticketStorage",interaction.member.id,Number(storage.get("ticketStorage",interaction.member.id))+1)
|
storage.set("amountOfUserTickets",interaction.member.id,Number(storage.get("amountOfUserTickets",interaction.member.id))+1)
|
||||||
var ticketNumber = interaction.member.user.username
|
var ticketNumber = interaction.member.user.username
|
||||||
|
|
||||||
//set ticketName
|
//set ticketName
|
||||||
@@ -92,19 +84,12 @@ module.exports = () => {
|
|||||||
const pfb = discord.PermissionFlagsBits
|
const pfb = discord.PermissionFlagsBits
|
||||||
const guild = client.guilds.cache.find(g => g.id == interaction.guild.id)
|
const guild = client.guilds.cache.find(g => g.id == interaction.guild.id)
|
||||||
|
|
||||||
//set everyone allowed
|
//set @everyone no ticket access
|
||||||
if (config.system['has@everyoneaccess']){
|
|
||||||
var everyoneAllowPerms = [pfb.AddReactions,pfb.AttachFiles,pfb.EmbedLinks,pfb.SendMessages,pfb.ViewChannel]
|
|
||||||
var everyoneDenyPerms = []
|
|
||||||
}else{
|
|
||||||
var everyoneAllowPerms = []
|
|
||||||
var everyoneDenyPerms = [pfb.ViewChannel]
|
|
||||||
}
|
|
||||||
permissionsArray.push({
|
permissionsArray.push({
|
||||||
id:interaction.guild.roles.everyone,
|
id:interaction.guild.roles.everyone,
|
||||||
type:"role",
|
type:"role",
|
||||||
allow:everyoneAllowPerms,
|
allow:[],
|
||||||
deny:everyoneDenyPerms
|
deny:[pfb.ViewChannel]
|
||||||
})
|
})
|
||||||
|
|
||||||
//add the user that created the ticket
|
//add the user that created the ticket
|
||||||
@@ -115,7 +100,7 @@ module.exports = () => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
//add main adminroles
|
//add main adminroles
|
||||||
config.main_adminroles.forEach((role,index) => {
|
config.adminRoles.forEach((role,index) => {
|
||||||
try {
|
try {
|
||||||
const adminrole = guild.roles.cache.find(r => r.id == role)
|
const adminrole = guild.roles.cache.find(r => r.id == role)
|
||||||
if (!adminrole) return
|
if (!adminrole) return
|
||||||
@@ -125,9 +110,7 @@ module.exports = () => {
|
|||||||
type:"role",
|
type:"role",
|
||||||
allow:[pfb.AddReactions,pfb.AttachFiles,pfb.EmbedLinks,pfb.SendMessages,pfb.ViewChannel]
|
allow:[pfb.AddReactions,pfb.AttachFiles,pfb.EmbedLinks,pfb.SendMessages,pfb.ViewChannel]
|
||||||
})
|
})
|
||||||
}catch{
|
}catch{}
|
||||||
log("system","invalid role! At 'config.json => main_adminroles:"+index)
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
|
|
||||||
//add ticket adminroles
|
//add ticket adminroles
|
||||||
@@ -136,7 +119,7 @@ module.exports = () => {
|
|||||||
*/
|
*/
|
||||||
const ticketadmin = currentTicketOptions.adminroles
|
const ticketadmin = currentTicketOptions.adminroles
|
||||||
ticketadmin.forEach((role,index) => {
|
ticketadmin.forEach((role,index) => {
|
||||||
if (!config.main_adminroles.includes(role)){
|
if (!config.adminRoles.includes(role)){
|
||||||
try {
|
try {
|
||||||
const adminrole = guild.roles.cache.find(r => r.id == role)
|
const adminrole = guild.roles.cache.find(r => r.id == role)
|
||||||
if (!adminrole) return
|
if (!adminrole) return
|
||||||
@@ -146,16 +129,33 @@ module.exports = () => {
|
|||||||
type:"role",
|
type:"role",
|
||||||
allow:[pfb.AddReactions,pfb.AttachFiles,pfb.EmbedLinks,pfb.SendMessages,pfb.ViewChannel]
|
allow:[pfb.AddReactions,pfb.AttachFiles,pfb.EmbedLinks,pfb.SendMessages,pfb.ViewChannel]
|
||||||
})
|
})
|
||||||
}catch{
|
}catch{}
|
||||||
log("system","invalid role! At 'config.json => options/ticket/...:"+index)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
//add ticket adminroles
|
||||||
|
if (currentTicketOptions.readonlyAdminroles){
|
||||||
|
currentTicketOptions.readonlyAdminroles.forEach((role,index) => {
|
||||||
|
if (!config.adminRoles.includes(role) && !currentTicketOptions.adminroles.includes(role)){
|
||||||
|
try {
|
||||||
|
const adminrole = guild.roles.cache.find(r => r.id == role)
|
||||||
|
if (!adminrole) return
|
||||||
|
|
||||||
|
permissionsArray.push({
|
||||||
|
id:adminrole,
|
||||||
|
type:"role",
|
||||||
|
allow:[pfb.AddReactions,pfb.ViewChannel],
|
||||||
|
deny:[pfb.SendMessages,pfb.AttachFiles,pfb.EmbedLinks]
|
||||||
|
})
|
||||||
|
}catch{}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
//add member role
|
//add member role
|
||||||
if (config.system.member_role != "" && config.system.member_role != " " && config.system.member_role != "false" && config.system.member_role != "null" && config.system.member_role != "0"){
|
if (config.system.memberRole && ![" ","0","false","null","undefined"].includes(config.system.memberRole)){
|
||||||
try {
|
try {
|
||||||
const userrole = guild.roles.cache.find(r => r.id == config.system.member_role)
|
const userrole = guild.roles.cache.find(r => r.id == config.system.memberRole)
|
||||||
if (userrole){
|
if (userrole){
|
||||||
permissionsArray.push({
|
permissionsArray.push({
|
||||||
id:userrole,
|
id:userrole,
|
||||||
@@ -163,9 +163,7 @@ module.exports = () => {
|
|||||||
deny:[pfb.ViewChannel]
|
deny:[pfb.ViewChannel]
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}catch{
|
}catch{}
|
||||||
log("system","invalid role! At 'config.json => system/member_role")
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//create the channel
|
//create the channel
|
||||||
@@ -177,25 +175,35 @@ module.exports = () => {
|
|||||||
permissionOverwrites:permissionsArray
|
permissionOverwrites:permissionsArray
|
||||||
|
|
||||||
}).then((ticketChannel) => {
|
}).then((ticketChannel) => {
|
||||||
storage.set("userTicketStorage",ticketChannel.id,interaction.member.id)
|
storage.set("userFromChannel",ticketChannel.id,interaction.member.id)
|
||||||
|
if (currentTicketOptions.autoclose.enable) storage.set("autocloseTickets",ticketChannel.id,currentTicketOptions.autoclose.inactiveHours)
|
||||||
|
|
||||||
const hiddendata = bot.hiddenData.writeHiddenData("ticketdata",[{key:"type",value:currentTicketOptions.id},{key:"openerid",value:interaction.user.id},{key:"createdms",value:new Date().getTime()}])
|
bot.hiddenData.writeHiddenData(ticketChannel.id,[{key:"type",value:currentTicketOptions.id},{key:"openerid",value:interaction.user.id},{key:"createdms",value:new Date().getTime()}])
|
||||||
|
|
||||||
var ticketEmbed = new discord.EmbedBuilder()
|
var ticketEmbed = new discord.EmbedBuilder()
|
||||||
//.setAuthor({name:interaction.user.id})
|
//.setAuthor({name:interaction.user.id})
|
||||||
.setColor(config.main_color)
|
.setColor(config.color)
|
||||||
.setTitle(currentTicketOptions.name)
|
.setTitle(currentTicketOptions.name)
|
||||||
//.setFooter({text:"Ticket Type: "+currentTicketOptions.id})
|
//.setFooter({text:"Ticket Type: "+currentTicketOptions.id})
|
||||||
|
if (currentTicketOptions.autoclose.enable){
|
||||||
|
const footerText = l.commands.autocloseTitle.replace("{0}",currentTicketOptions.autoclose.inactiveHours+"h")
|
||||||
|
ticketEmbed.setFooter({text:footerText})
|
||||||
|
}
|
||||||
|
|
||||||
if (currentTicketOptions.ticketmessage.length > 0){
|
if (currentTicketOptions.ticketmessage.length > 0){
|
||||||
ticketEmbed.setDescription(currentTicketOptions.ticketmessage+hiddendata)
|
ticketEmbed.setDescription(currentTicketOptions.ticketmessage)
|
||||||
}else{
|
|
||||||
ticketEmbed.setDescription(hiddendata)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (currentTicketOptions.thumbnail.enable) ticketEmbed.setThumbnail(currentTicketOptions.thumbnail.url)
|
if (currentTicketOptions.thumbnail.enable) ticketEmbed.setThumbnail(currentTicketOptions.thumbnail.url)
|
||||||
|
if (currentTicketOptions.image.enable) ticketEmbed.setImage(currentTicketOptions.image.url)
|
||||||
|
|
||||||
|
const herePing = currentTicketOptions.ping['@here'] ? " @here" : ""
|
||||||
|
const everyonePing = currentTicketOptions.ping['@everyone'] ? " @everyone" : ""
|
||||||
|
const customPing = currentTicketOptions.ping.custom.enable ? " <@&"+currentTicketOptions.ping.custom.roleId+">" : ""
|
||||||
|
|
||||||
|
|
||||||
ticketChannel.send({
|
ticketChannel.send({
|
||||||
content:"<@"+interaction.member.id+"> @here",
|
content:"<@"+interaction.member.id+">"+herePing+everyonePing+customPing,
|
||||||
embeds:[ticketEmbed],
|
embeds:[ticketEmbed],
|
||||||
components:[closeButton]
|
components:[closeButton]
|
||||||
|
|
||||||
@@ -203,12 +211,36 @@ module.exports = () => {
|
|||||||
firstmsg.pin()
|
firstmsg.pin()
|
||||||
})
|
})
|
||||||
|
|
||||||
log("system","created new ticket",[{key:"ticket",value:ticketName},{key:"user",value:interaction.user.tag}])
|
log("system","created new ticket",[{key:"ticket",value:ticketName},{key:"user",value:interaction.user.username}])
|
||||||
require("../api/modules/events").onTicketOpen(interaction.user,ticketChannel,interaction.guild,new Date(),{name:ticketName,status:"open",ticketOptions:currentTicketOptions})
|
require("../api/modules/events").onTicketOpen(interaction.user,ticketChannel,interaction.guild,new Date(),{name:ticketName,status:"open",ticketOptions:currentTicketOptions})
|
||||||
|
|
||||||
|
const channelbutton = new discord.ActionRowBuilder()
|
||||||
|
.addComponents([
|
||||||
|
new discord.ButtonBuilder()
|
||||||
|
.setStyle(discord.ButtonStyle.Link)
|
||||||
|
.setDisabled(false)
|
||||||
|
.setEmoji("🎫")
|
||||||
|
.setLabel(l.commands.goToTicket)
|
||||||
|
.setURL(ticketChannel.url)
|
||||||
|
])
|
||||||
|
|
||||||
|
try{
|
||||||
|
if (currentTicketOptions.enableDmOnOpen) interaction.member.send({embeds:[bot.errorLog.custom(l.messages.newTicketDmTitle,currentTicketOptions.message,":ticket:",config.color)],components:[channelbutton]})
|
||||||
|
}
|
||||||
|
catch{log("system","failed to send DM")}
|
||||||
|
|
||||||
|
if ((interaction.isButton() && config.system.answerInEphemeralOnOpen) || interaction.isChatInputCommand()){
|
||||||
|
if (interaction.deferred){
|
||||||
|
interaction.editReply({embeds:[bot.errorLog.success(l.messages.createdTitle,l.messages.createdDescription)],components:[channelbutton]})
|
||||||
|
}else{
|
||||||
|
interaction.reply({embeds:[bot.errorLog.success(l.messages.createdTitle,l.messages.createdDescription)],components:[channelbutton]})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
})
|
})
|
||||||
}else{
|
}else{
|
||||||
try {
|
try {
|
||||||
if (config.system.enable_DM_Messages){
|
if (config.system.dmMessages){
|
||||||
interaction.member.send({embeds:[bot.errorLog.warning(l.errors.maxAmountTitle,l.errors.maxAmountDescription)]})
|
interaction.member.send({embeds:[bot.errorLog.warning(l.errors.maxAmountTitle,l.errors.maxAmountDescription)]})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,23 +15,16 @@ const pfb = discord.PermissionFlagsBits
|
|||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
const reopenTicket = (guild,channel,user) => {
|
const reopenTicket = (guild,channel,user) => {
|
||||||
log("system","re-opened a ticket",[{key:"ticket",value:channel.name},{key:"user",value:user.tag}])
|
log("system","re-opened a ticket",[{key:"ticket",value:channel.name},{key:"user",value:user.username}])
|
||||||
|
|
||||||
var permissionsArray = []
|
var permissionsArray = []
|
||||||
|
|
||||||
//set everyone allowed
|
//set @everyone no ticket access
|
||||||
if (config.system['has@everyoneaccess']){
|
|
||||||
var everyoneAllowPerms = [pfb.AddReactions,pfb.AttachFiles,pfb.EmbedLinks,pfb.SendMessages,pfb.ViewChannel]
|
|
||||||
var everyoneDenyPerms = []
|
|
||||||
}else{
|
|
||||||
var everyoneAllowPerms = []
|
|
||||||
var everyoneDenyPerms = [pfb.ViewChannel]
|
|
||||||
}
|
|
||||||
permissionsArray.push({
|
permissionsArray.push({
|
||||||
id:guild.roles.everyone,
|
id:guild.roles.everyone,
|
||||||
type:"role",
|
type:"role",
|
||||||
allow:everyoneAllowPerms,
|
allow:[],
|
||||||
deny:everyoneDenyPerms
|
deny:[pfb.ViewChannel]
|
||||||
})
|
})
|
||||||
|
|
||||||
channel.permissionOverwrites.cache.forEach((p) => {
|
channel.permissionOverwrites.cache.forEach((p) => {
|
||||||
@@ -42,6 +35,15 @@ const reopenTicket = (guild,channel,user) => {
|
|||||||
allow:[pfb.AddReactions,pfb.AttachFiles,pfb.EmbedLinks,pfb.SendMessages,pfb.ViewChannel],
|
allow:[pfb.AddReactions,pfb.AttachFiles,pfb.EmbedLinks,pfb.SendMessages,pfb.ViewChannel],
|
||||||
deny:[]
|
deny:[]
|
||||||
})
|
})
|
||||||
|
}else{
|
||||||
|
if (p.id != guild.roles.everyone){
|
||||||
|
permissionsArray.push({
|
||||||
|
id:p.id,
|
||||||
|
type:"role",
|
||||||
|
allow:[pfb.AddReactions,pfb.AttachFiles,pfb.EmbedLinks,pfb.SendMessages,pfb.ViewChannel],
|
||||||
|
deny:[]
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
+13
-9
@@ -11,6 +11,14 @@ const version = require("../info.json").version
|
|||||||
/**@typedef {{style:{enableCustomBackground:Boolean, backgroundModus:"color"|"image", backgroundData:String, titleColor:String}, bot:{name:String, id:Number, pfp:String}, ticket:{creatorname:String, creatorid:Number, closedtime:Number, openedtime:Number}}} OThtsDataOption */
|
/**@typedef {{style:{enableCustomBackground:Boolean, backgroundModus:"color"|"image", backgroundData:String, titleColor:String}, bot:{name:String, id:Number, pfp:String}, ticket:{creatorname:String, creatorid:Number, closedtime:Number, openedtime:Number}}} OThtsDataOption */
|
||||||
|
|
||||||
|
|
||||||
|
/**==========================================================
|
||||||
|
=============================================================
|
||||||
|
================THIS FILE ISN'T USED ANYMORE!!===============
|
||||||
|
This file is for html transcripts V1!
|
||||||
|
Visit compileJsonV2.js for the current version!
|
||||||
|
=============================================================
|
||||||
|
===========================================================*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @param {discord.Guild} guild
|
* @param {discord.Guild} guild
|
||||||
@@ -46,13 +54,9 @@ exports.compile = (guild,channel,user,messagesInv,data) => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
msg.embeds.forEach((embed) => {
|
msg.embeds.forEach((embed) => {
|
||||||
if (embed.description){
|
|
||||||
var desc = bot.hiddenData.removeHiddenData(embed.description).description
|
|
||||||
}else{var desc = false}
|
|
||||||
|
|
||||||
embedArray.push({
|
embedArray.push({
|
||||||
title:embed.title || false,
|
title:embed.title || false,
|
||||||
description:desc,
|
description:embed.description ? embed.description : false,
|
||||||
authorimg:((embed.author && embed.author.iconURL) ? embed.author.iconURL : false),
|
authorimg:((embed.author && embed.author.iconURL) ? embed.author.iconURL : false),
|
||||||
authortext:(embed.author ? embed.author.name : false),
|
authortext:(embed.author ? embed.author.name : false),
|
||||||
footerimg:((embed.footer && embed.footer.iconURL) ? embed.footer.iconURL : false),
|
footerimg:((embed.footer && embed.footer.iconURL) ? embed.footer.iconURL : false),
|
||||||
@@ -64,12 +68,12 @@ exports.compile = (guild,channel,user,messagesInv,data) => {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
const memberColor = msg.member ? msg.member.displayHexColor : "#ffffff"
|
||||||
messagesArray.push({
|
messagesArray.push({
|
||||||
author:{
|
author:{
|
||||||
name:msg.author.tag,
|
name:msg.author.username,
|
||||||
id:Number(msg.author.id),
|
id:Number(msg.author.id),
|
||||||
color:msg.member.displayHexColor || "#ffffff",
|
color:memberColor,
|
||||||
pfp:msg.author.displayAvatarURL()
|
pfp:msg.author.displayAvatarURL()
|
||||||
},
|
},
|
||||||
content:msg.content || "",
|
content:msg.content || "",
|
||||||
@@ -102,7 +106,7 @@ exports.compile = (guild,channel,user,messagesInv,data) => {
|
|||||||
|
|
||||||
creatorname:data.ticket.creatorname,
|
creatorname:data.ticket.creatorname,
|
||||||
creatorid:Number(data.ticket.creatorid),
|
creatorid:Number(data.ticket.creatorid),
|
||||||
closedbyname:user.tag,
|
closedbyname:user.username,
|
||||||
closedbyid:Number(user.id),
|
closedbyid:Number(user.id),
|
||||||
|
|
||||||
closedtime:data.ticket.closedtime,
|
closedtime:data.ticket.closedtime,
|
||||||
@@ -0,0 +1,394 @@
|
|||||||
|
const discord = require('discord.js')
|
||||||
|
|
||||||
|
const bot = require("../../../index")
|
||||||
|
const tsconfig = bot.tsconfig
|
||||||
|
const tsembeds = require("../embeds")
|
||||||
|
const tsdb = require("../tsdb")
|
||||||
|
|
||||||
|
const otversion = require("../../../package.json").version
|
||||||
|
const version = require("../info.json").version
|
||||||
|
|
||||||
|
const mentions = require("./mentions").replacementions
|
||||||
|
|
||||||
|
/**@typedef {{background:{enableCustomBackground:Boolean, backgroundModus:"color"|"image", backgroundData:String}, header:{enableCustomHeader:Boolean, decoColor:String, backgroundColor:String, textColor:String}, stats:{enableCustomStats:Boolean, backgroundColor:String, keyTextColor:String, valueTextColor:String, hideBackgroundColor:String, hideTextColor:String}} OTTranscriptStyle} */
|
||||||
|
/**@typedef {{name:String, id:String, pfp:String}} OTTranscriptBot */
|
||||||
|
/**@typedef {{name:String, id:String, guildname:String, guildid:String, guildinvite:String|false, creatorname:String, creatorid:String, closedbyname:String, closedbyid:String, claimedname:String, claimedid:String, creatorpfp:String, closedbypfp:String, claimedpfp:String, closedtime:Number, openedtime:Number, components:{messages:1, files:1, embeds:1, reactions:1, interactions:{dropdowns:1, buttons:1, total:1}, attachments:{invites:1, images:1, gifs:1, stickers:1}}, roleColors:[{id:String,color:String}] }} OTTranscriptTicket */
|
||||||
|
/**@typedef {{author:{name:String, id:String, color:String, pfp:String, bot:Boolean, verifiedBot:Boolean, system:Boolean}, content:String|false, timestamp:Number, type:"normal", important:Boolean, edited:Boolean, embeds:[{title:String|false, description:String|false, authorimg:String|false, authortext:String|false, footerimg:String|false, footertext:String|false, color:String, image:String|false, thumbnail:String|false, url:String|false, fields:[{name:String,value:String,inline:Boolean}]}], attachments:[{type:"FILE", name:String, fileType:String, size:String, url:String}, {type:"FILE:image", name:String, fileType:String, size:String, url:String}, {type:"URL:invite", guildId:String, guildName:String, guildSize:Number, guildOnline:Number, image:String, url:String}, {type:"URL:gif", url:String}, {type:"BUILDIN:sticker", name:String, url:String}], components:[{type:"buttons", buttons:[{type:"interaction"|"url", label:String|false, icon:String|false, color:"gray"|"green"|"red"|"blue", id:String|false, url:String|false, disabled:Boolean}]}, {type:"dropdown", placeholder:String|false, options:[{label:String|false, icon:String|false, description:String|false, id:String|false}]}, {type:"reactions", reactions:[{amount:1, emoji:String, type:"svg"|"image"|"gif"}]}], reply:{type:"reply"|"command"|false, user:{name:String, id:String, color:String, pfp:String, bot:Boolean, verifiedBot:Boolean, system:Boolean}, replyOptions:{content:String, messageId:String, channelId:String, guildId:String}, commandOptions:{interactionName:String, interactionId:String}}}} OTTranscriptMessage */
|
||||||
|
/**@typedef {{enabled:Boolean,premiumToken:String, customCredits:{enable:Boolean, replaceText:String, replaceURL:String, enableReportBug:Boolean},customHeaderUrl:{enabled:Boolean, url:String, text:String}, customTranscriptUrl:{enabled:Boolean, name:String}, customFavicon:{enabled:Boolean, image:String},additionalFlags:String[]}} OTTranscriptPremium */
|
||||||
|
|
||||||
|
/**@typedef {{version:"2", otversion:String, language:String, style:OTTranscriptStyle, bot:OTTranscriptBot, ticket:OTTranscriptTicket, messages:OTTranscriptMessage[], premium:OTTranscriptPremium}} OTTranscriptCompileInput */
|
||||||
|
|
||||||
|
/**@typedef {{style:OTTranscriptStyle,bot:OTTranscriptBot,ticket:OTTranscriptTicket,premium:OTTranscriptPremium}} OTHTMLDataOption */
|
||||||
|
|
||||||
|
|
||||||
|
/**@param {discord.ButtonStyle} buttonstyle */
|
||||||
|
const buttonStyleToColor = (buttonstyle) => {
|
||||||
|
if (buttonstyle == discord.ButtonStyle.Primary){
|
||||||
|
return "blue"
|
||||||
|
}else if (buttonstyle == discord.ButtonStyle.Secondary){
|
||||||
|
return "gray"
|
||||||
|
}else if (buttonstyle == discord.ButtonStyle.Danger){
|
||||||
|
return "red"
|
||||||
|
}else if (buttonstyle == discord.ButtonStyle.Success){
|
||||||
|
return "green"
|
||||||
|
}else{
|
||||||
|
return "gray"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param {discord.Guild} guild
|
||||||
|
* @param {discord.Channel} channel
|
||||||
|
* @param {discord.User} user
|
||||||
|
* @param {discord.Message[]} messagesInv
|
||||||
|
* @param {OTHTMLDataOption} data
|
||||||
|
*/
|
||||||
|
exports.compile = (guild,channel,user,messagesInv,data) => {
|
||||||
|
const messages = messagesInv.reverse()
|
||||||
|
var invisibleMessages = 0
|
||||||
|
|
||||||
|
//MESSAGE STATS COUNTS
|
||||||
|
var messageAmount = messages.length
|
||||||
|
var fileAmount = 0
|
||||||
|
var embedAmount = 0
|
||||||
|
var reactionsAmount = 0
|
||||||
|
var interactionAmount = 0
|
||||||
|
messages.forEach((msg) => {
|
||||||
|
fileAmount = fileAmount + Array.from(msg.attachments).length
|
||||||
|
embedAmount = embedAmount + msg.embeds.length
|
||||||
|
|
||||||
|
msg.reactions.cache.forEach(reaction => {
|
||||||
|
reactionsAmount = reactionsAmount + reaction.count
|
||||||
|
})
|
||||||
|
if (msg.components && msg.components.length > 0){
|
||||||
|
msg.components.forEach((component) => {
|
||||||
|
if (component.components.length > 0){
|
||||||
|
interactionAmount = interactionAmount + component.components.length
|
||||||
|
}else{
|
||||||
|
interactionAmount = interactionAmount+1
|
||||||
|
}
|
||||||
|
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
/**@type {OTTranscriptMessage[]} */
|
||||||
|
const messagesArray = []
|
||||||
|
messages.forEach((msg) => {
|
||||||
|
if (msg.content || msg.embeds.length > 0 || msg.attachments.toJSON().length > 0 || msg.components.length > 0 || msg.reactions.cache.size > 0){
|
||||||
|
|
||||||
|
const embedArray = []
|
||||||
|
const attachmentArray = []
|
||||||
|
const componentsArray = []
|
||||||
|
|
||||||
|
msg.attachments.forEach((file) => {
|
||||||
|
attachmentArray.push({
|
||||||
|
type:"FILE",
|
||||||
|
name:file.name,
|
||||||
|
fileType:file.contentType,
|
||||||
|
size:Math.round(file.size/1000)+" kb",
|
||||||
|
url:file.url
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
msg.embeds.forEach((embed) => {
|
||||||
|
embedArray.push({
|
||||||
|
title:embed.title || false,
|
||||||
|
description:embed.description ? mentions(embed.description,guild) : false,
|
||||||
|
authorimg:((embed.author && embed.author.iconURL) ? embed.author.iconURL : false),
|
||||||
|
authortext:(embed.author ? embed.author.name : false),
|
||||||
|
footerimg:((embed.footer && embed.footer.iconURL) ? embed.footer.iconURL : false),
|
||||||
|
footertext:(embed.footer ? embed.footer.text : false),
|
||||||
|
color:embed.hexColor,
|
||||||
|
image:((embed.image && embed.image.url) ? embed.image.url : false),
|
||||||
|
thumbnail:((embed.thumbnail && embed.thumbnail.url) ? embed.thumbnail.url : false),
|
||||||
|
url:(embed.url ? embed.url : false),
|
||||||
|
fields:embed.fields
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
const tempreactions = []
|
||||||
|
msg.reactions.cache.forEach((reaction) => {
|
||||||
|
const count = reaction.count
|
||||||
|
const emoji = reaction.emoji
|
||||||
|
|
||||||
|
if (emoji instanceof discord.GuildEmoji){
|
||||||
|
//custom emoji
|
||||||
|
tempreactions.push({
|
||||||
|
amount:count,
|
||||||
|
emoji:(emoji.url) ? emoji.url : "",
|
||||||
|
type:(emoji.animated) ? "gif" : "image"
|
||||||
|
})
|
||||||
|
}else if (emoji instanceof discord.ReactionEmoji){
|
||||||
|
//build-in emoji
|
||||||
|
tempreactions.push({
|
||||||
|
amount:count,
|
||||||
|
emoji:emoji.name,
|
||||||
|
type:"svg"
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
componentsArray.push({
|
||||||
|
type: "reactions",
|
||||||
|
reactions:tempreactions
|
||||||
|
})
|
||||||
|
|
||||||
|
msg.components.forEach((actionrow) => {
|
||||||
|
var isdropdown = false
|
||||||
|
var actioncomponents = []
|
||||||
|
actionrow.components.forEach((comp) => {
|
||||||
|
if (comp.type == discord.ComponentType.ActionRow || comp.type == discord.ComponentType.TextInput) return
|
||||||
|
|
||||||
|
/**
|
||||||
|
* type: "buttons";
|
||||||
|
buttons: [{
|
||||||
|
type: "interaction" | "url";
|
||||||
|
label: string | false;
|
||||||
|
icon: string | false;
|
||||||
|
color: "gray" | "green" | "red" | "blue";
|
||||||
|
id: string | false;
|
||||||
|
url: string | false;
|
||||||
|
disabled: boolean;
|
||||||
|
}];
|
||||||
|
}, {
|
||||||
|
type: "dropdown";
|
||||||
|
placeholder: string | false;
|
||||||
|
options: [{
|
||||||
|
label: string | false;
|
||||||
|
icon: string | false;
|
||||||
|
description: string | false;
|
||||||
|
id: string | false;
|
||||||
|
}];
|
||||||
|
},
|
||||||
|
*/
|
||||||
|
if (comp.type == discord.ComponentType.Button){
|
||||||
|
actioncomponents.push({
|
||||||
|
type: (comp.style == discord.ButtonStyle.Link) ? "url" : "interaction",
|
||||||
|
label: (comp.label) ? comp.label : false,
|
||||||
|
icon: (comp.emoji) ? comp.emoji.name : false,
|
||||||
|
color: buttonStyleToColor(comp.style),
|
||||||
|
id: comp.customId ? comp.customId : false,
|
||||||
|
url: (comp.url) ? comp.url : false,
|
||||||
|
disabled: false
|
||||||
|
})
|
||||||
|
}else{
|
||||||
|
isdropdown = true
|
||||||
|
var drpdwnoptions = []
|
||||||
|
/**@type {discord.APISelectMenuOption[]} */
|
||||||
|
const dropdownoptions = comp.options
|
||||||
|
dropdownoptions.forEach((opt) => {
|
||||||
|
drpdwnoptions.push({
|
||||||
|
label: opt.label,
|
||||||
|
icon: (opt.emoji) ? opt.emoji : false,
|
||||||
|
description: (opt.description) ? opt.description : false,
|
||||||
|
id: "hello world :)"
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
componentsArray.push({
|
||||||
|
type:"dropdown",
|
||||||
|
placeholder:false,
|
||||||
|
options:drpdwnoptions
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
if (!isdropdown){
|
||||||
|
componentsArray.push({
|
||||||
|
type:"buttons",
|
||||||
|
buttons:actioncomponents
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
const important = msg.guild ? (msg.content.includes("<@"+msg.guild.id+">") || msg.content.includes("<@everyone") || msg.content.includes("@here")): false
|
||||||
|
|
||||||
|
const replytype = (msg.interaction) ? "command" : ((msg.reference) ? "reply" : false)
|
||||||
|
if (replytype == "command"){
|
||||||
|
const replycolorRAW = msg.guild.members.cache.find((m) => m.id == msg.interaction.user.id)
|
||||||
|
const replycolor = (replycolorRAW) ? replycolorRAW.displayHexColor.replace("#000000","#ffffff") : "#ffffff"
|
||||||
|
var reply = {
|
||||||
|
type:replytype,
|
||||||
|
commandOptions:{
|
||||||
|
interactionId:msg.interaction.id,
|
||||||
|
interactionName:msg.interaction.commandName
|
||||||
|
},
|
||||||
|
user:{
|
||||||
|
name:msg.interaction.user.username,
|
||||||
|
id:msg.interaction.user.id,
|
||||||
|
color:replycolor,
|
||||||
|
pfp:msg.interaction.user.displayAvatarURL(),
|
||||||
|
bot:msg.interaction.user.bot,
|
||||||
|
system:msg.interaction.user.system,
|
||||||
|
verifiedBot:msg.interaction.user.flags.has(discord.UserFlags.VerifiedBot)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}else if (replytype == "reply"){
|
||||||
|
|
||||||
|
var replycontentRAW = messages.find((msg2) => msg2.id == msg.reference.messageId)
|
||||||
|
var replycontent = (replycontentRAW && replycontentRAW.content) ? replycontentRAW.content.slice(0,(60-replycontentRAW.author.username.length)) : "deleted this message"
|
||||||
|
const replycolorRAW = (replycontentRAW) ? msg.guild.members.cache.find((m) => m.id == replycontentRAW.author.id) : false
|
||||||
|
const replycolor = (replycolorRAW) ? replycolorRAW.displayHexColor.replace("#000000","#ffffff") : "#ffffff"
|
||||||
|
|
||||||
|
var user = (replycontentRAW && replycontentRAW.content) ? {
|
||||||
|
name:(replycontentRAW) ? replycontentRAW.author.username : "undefined",
|
||||||
|
id:(replycontentRAW) ? replycontentRAW.author.id : "undefined",
|
||||||
|
color:replycolor,
|
||||||
|
pfp:(replycontentRAW) ? replycontentRAW.author.username : "",
|
||||||
|
bot:(replycontentRAW) ? replycontentRAW.author.bot : false,
|
||||||
|
system:(replycontentRAW) ? replycontentRAW.author.system : false,
|
||||||
|
verifiedBot:(replycontentRAW) ? replycontentRAW.author.flags.has(discord.UserFlags.VerifiedBot) : false,
|
||||||
|
} : {
|
||||||
|
name:"someone",
|
||||||
|
id:"undefined",
|
||||||
|
color:"#ffffff",
|
||||||
|
pfp:"https://raw.githubusercontent.com/twitter/twemoji/master/assets/72x72/1f5d1.png",
|
||||||
|
bot:false,
|
||||||
|
system:false,
|
||||||
|
verifiedBot:false,
|
||||||
|
}
|
||||||
|
|
||||||
|
var reply = {
|
||||||
|
type:replytype,
|
||||||
|
replyOptions:{
|
||||||
|
content:replycontent,
|
||||||
|
messageId: msg.reference.messageId,
|
||||||
|
channelId: msg.reference.channelId,
|
||||||
|
guildId: msg.reference.guildId
|
||||||
|
},
|
||||||
|
user:user
|
||||||
|
}
|
||||||
|
}else{var reply = {type:replytype}}
|
||||||
|
|
||||||
|
const authorColor = msg.member ? msg.member.displayHexColor.replace("#000000","#ffffff") : "#ffffff"
|
||||||
|
messagesArray.push({
|
||||||
|
author:{
|
||||||
|
name:msg.author.username,
|
||||||
|
id:msg.author.id,
|
||||||
|
color:authorColor,
|
||||||
|
pfp:msg.author.displayAvatarURL(),
|
||||||
|
bot:msg.author.bot,
|
||||||
|
system:msg.author.system,
|
||||||
|
verifiedBot:msg.author.flags.has(discord.UserFlags.VerifiedBot)
|
||||||
|
},
|
||||||
|
content:mentions(msg.content,guild) || "",
|
||||||
|
timestamp:msg.createdTimestamp,
|
||||||
|
embeds:embedArray,
|
||||||
|
attachments:attachmentArray,
|
||||||
|
edited: (typeof msg.editedTimestamp == "number"),
|
||||||
|
type:"normal",
|
||||||
|
important:important,
|
||||||
|
reply:reply,
|
||||||
|
components:componentsArray
|
||||||
|
})
|
||||||
|
}else {invisibleMessages++}
|
||||||
|
})
|
||||||
|
|
||||||
|
const dsb = data.style.background
|
||||||
|
const dsh = data.style.header
|
||||||
|
const dss = data.style.stats
|
||||||
|
|
||||||
|
/**@type {OTTranscriptCompileInput} */
|
||||||
|
const result = {
|
||||||
|
version,otversion,
|
||||||
|
language:bot.config.languageFile,
|
||||||
|
style:{
|
||||||
|
background:{
|
||||||
|
backgroundData:dsb.backgroundData || "",
|
||||||
|
backgroundModus:dsb.backgroundModus || "",
|
||||||
|
enableCustomBackground:dsb.enableCustomBackground || false,
|
||||||
|
},
|
||||||
|
header:{
|
||||||
|
backgroundColor:dsh.backgroundColor || "#202225",
|
||||||
|
decoColor:dsh.decoColor || "#F8BA00",
|
||||||
|
textColor:dsh.textColor || "#ffffff",
|
||||||
|
enableCustomHeader:dsh.enableCustomHeader || false
|
||||||
|
},
|
||||||
|
stats:{
|
||||||
|
backgroundColor:dss.backgroundColor || "#202225",
|
||||||
|
keyTextColor:dss.keyTextColor || "#737373",
|
||||||
|
valueTextColor:dss.valueTextColor || "#ffffff",
|
||||||
|
hideBackgroundColor:dss.hideBackgroundColor || "#40444a",
|
||||||
|
hideTextColor:dss.hideTextColor || "#ffffff",
|
||||||
|
enableCustomStats:dss.enableCustomStats || false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
bot:{
|
||||||
|
name:data.bot.name || "Open Ticket",
|
||||||
|
id:data.bot.id || 0,
|
||||||
|
pfp:data.bot.pfp || "dj-dj.be/wp-content/uploads/2022/07/profielfoto-blauw-wit.png?size=128"
|
||||||
|
},
|
||||||
|
ticket:{
|
||||||
|
name:channel.name,
|
||||||
|
id:channel.id,
|
||||||
|
|
||||||
|
guildname:guild.name,
|
||||||
|
guildid:guild.id,
|
||||||
|
guildinvite:"",
|
||||||
|
|
||||||
|
creatorname:data.ticket.creatorname,
|
||||||
|
creatorid:data.ticket.creatorid,
|
||||||
|
creatorpfp:data.ticket.creatorpfp,
|
||||||
|
|
||||||
|
closedbyname:user.username,
|
||||||
|
closedbyid:user.id,
|
||||||
|
closedbypfp:user.displayAvatarURL(),
|
||||||
|
|
||||||
|
claimedid:"",
|
||||||
|
claimedname:"",
|
||||||
|
claimedpfp:"",
|
||||||
|
|
||||||
|
closedtime:data.ticket.closedtime,
|
||||||
|
openedtime:data.ticket.openedtime,
|
||||||
|
|
||||||
|
roleColors:[],
|
||||||
|
components:{
|
||||||
|
messages:messageAmount,
|
||||||
|
embeds:embedAmount,
|
||||||
|
files:fileAmount,
|
||||||
|
interactions:{
|
||||||
|
buttons:0,
|
||||||
|
dropdowns:0,
|
||||||
|
total:interactionAmount
|
||||||
|
},
|
||||||
|
reactions:reactionsAmount,
|
||||||
|
attachments:{
|
||||||
|
gifs:0,
|
||||||
|
images:0,
|
||||||
|
stickers:0,
|
||||||
|
invites:0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
messages:messagesArray,
|
||||||
|
premium:{
|
||||||
|
enabled:false,
|
||||||
|
premiumToken:"",
|
||||||
|
|
||||||
|
customCredits:{
|
||||||
|
enable:false,
|
||||||
|
replaceText:"Powered By Open Ticket!",
|
||||||
|
replaceURL:"https://openticket.dj-dj.be",
|
||||||
|
enableReportBug:true
|
||||||
|
},
|
||||||
|
customHeaderUrl:{
|
||||||
|
enabled:false,
|
||||||
|
url:"https://openticket.dj-dj.be",
|
||||||
|
text:"Hello!"
|
||||||
|
},
|
||||||
|
customTranscriptUrl:{
|
||||||
|
enabled:false,
|
||||||
|
name:"test-server"
|
||||||
|
},
|
||||||
|
customFavicon:{
|
||||||
|
enabled:false,
|
||||||
|
image:"https://openticket.dj-dj.be"
|
||||||
|
},
|
||||||
|
additionalFlags:[]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return result
|
||||||
|
}
|
||||||
@@ -6,7 +6,7 @@ const tsconfig = bot.tsconfig
|
|||||||
const tsembeds = require("../embeds")
|
const tsembeds = require("../embeds")
|
||||||
const tsdb = require("../tsdb")
|
const tsdb = require("../tsdb")
|
||||||
|
|
||||||
/**@typedef {{status:"success"|"error", id:String, time:Number, estimated:{lastdump: Number, processtime:Number}, transcriptstatus:{value:2, data:{fetchedmsgs:true, uploaded:true, inqueue:true, processed:false, waiting:false, available:false}}}} OTuploadResponse */
|
/**@typedef {{status:"success"|"error", id:String, time:Number, estimated:{lastdump: Number, processtime:Number,waittime:Number}, transcriptstatus:{value:2, data:{fetchedmsgs:true, uploaded:true, inqueue:true, processed:false, waiting:false, available:false}}}} OTuploadResponse */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {Object} json
|
* @param {Object} json
|
||||||
@@ -17,12 +17,12 @@ exports.upload = async (json) => {
|
|||||||
const data = encodeURIComponent(JSON.stringify(json))
|
const data = encodeURIComponent(JSON.stringify(json))
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const res = await axios.get("https://api.transcripts.dj-dj.be/upload?auth=openticketTRANSCRIPT1234&version=1.0.0&data="+data)
|
const res = await axios.post("https://transcripts.dj-dj.be/api/upload?auth=openticketTRANSCRIPT1234&version=2",JSON.stringify(json))
|
||||||
if (res.status != 200) resolve(false)
|
if (res.status != 200) resolve(false)
|
||||||
|
|
||||||
resolve(res.data)
|
resolve(res.data)
|
||||||
}catch{
|
}catch(err){
|
||||||
console.log("failed transcript upload!")
|
console.log("failed transcript upload!",err.response)
|
||||||
resolve(false)
|
resolve(false)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -0,0 +1,57 @@
|
|||||||
|
const discord = require('discord.js')
|
||||||
|
|
||||||
|
const bot = require("../../../index")
|
||||||
|
const tsconfig = bot.tsconfig
|
||||||
|
const tsembeds = require("../embeds")
|
||||||
|
const tsdb = require("../tsdb")
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param {String} text
|
||||||
|
* @param {discord.Guild} guild
|
||||||
|
*/
|
||||||
|
exports.replacementions = (text,guild) => {
|
||||||
|
const userregex = /<@([0-9]+)>(\s)?/g
|
||||||
|
const usertext = text.replace(userregex,(x) => {
|
||||||
|
var res = userregex.exec(x)
|
||||||
|
userregex.lastIndex = 0
|
||||||
|
|
||||||
|
var member = guild.members.cache.find((m) => m.id == res[1])
|
||||||
|
var text = member ? member.user.username.replace(/\s/g," ") : res[1]
|
||||||
|
return "<@"+text+"> "
|
||||||
|
})
|
||||||
|
|
||||||
|
const channelregex = /<#([0-9]+)>(\s)?/g
|
||||||
|
const channeltext = usertext.replace(channelregex,(x) => {
|
||||||
|
var res = channelregex.exec(x)
|
||||||
|
channelregex.lastIndex = 0
|
||||||
|
|
||||||
|
var channel = guild.channels.cache.find((c) => c.id == res[1])
|
||||||
|
var text = channel ? channel.name.replace(/\s/g," ") : res[1]
|
||||||
|
return "<#"+text+"> "
|
||||||
|
})
|
||||||
|
|
||||||
|
const roleregex = /<@&([0-9]+)>(\s)?/g
|
||||||
|
const roletext = channeltext.replace(roleregex,(x) => {
|
||||||
|
var res = roleregex.exec(x)
|
||||||
|
roleregex.lastIndex = 0
|
||||||
|
|
||||||
|
var role = guild.roles.cache.find((r) => r.id == res[1])
|
||||||
|
var text = role ? role.name.replace(/\s/g," ") : res[1]
|
||||||
|
|
||||||
|
var color = role ? ((role.hexColor == "#000000") ? "regular" : role.hexColor) : "regular"
|
||||||
|
|
||||||
|
return "<@&"+text+"::"+color+"> "
|
||||||
|
})
|
||||||
|
|
||||||
|
const defaultroleregex = /@(everyone|here)(\s)?/g
|
||||||
|
const defaultroletext = roletext.replace(defaultroleregex,(x) => {
|
||||||
|
var res = defaultroleregex.exec(x)
|
||||||
|
defaultroleregex.lastIndex = 0
|
||||||
|
|
||||||
|
var text = res[1]
|
||||||
|
return "<@&"+text+"::regular> "
|
||||||
|
})
|
||||||
|
|
||||||
|
return defaultroletext
|
||||||
|
}
|
||||||
@@ -1,67 +0,0 @@
|
|||||||
{
|
|
||||||
"version":"1.0.0",
|
|
||||||
"otversion":"3.2.1",
|
|
||||||
"style":{
|
|
||||||
"enableCustomBackground":false,
|
|
||||||
"backgroundModus":"color OR image",
|
|
||||||
"backgroundData":"#ffffff OR https://www.example.com/image.png",
|
|
||||||
"titleColor":"#ffffff"
|
|
||||||
},
|
|
||||||
"bot":{
|
|
||||||
"name":"DJdj Support Bot",
|
|
||||||
"id":12345678910,
|
|
||||||
"pfp":"https://www.example.com/image.png"
|
|
||||||
},
|
|
||||||
"ticket":{
|
|
||||||
"name":"support-DJj123dj",
|
|
||||||
"id":12345678910,
|
|
||||||
|
|
||||||
"guildname":"DJdj Development",
|
|
||||||
"guildid":12345678910,
|
|
||||||
|
|
||||||
"creatorname":"DJj123dj#1706",
|
|
||||||
"creatorid":12345678910,
|
|
||||||
"closedbyname":"DJj123dj#1706",
|
|
||||||
"closedbyid":12345678910,
|
|
||||||
|
|
||||||
"closedtime":12345678910,
|
|
||||||
"openedtime":12345678910,
|
|
||||||
|
|
||||||
"messages":1,
|
|
||||||
"files":1
|
|
||||||
},
|
|
||||||
"messages":[
|
|
||||||
{
|
|
||||||
"author":{
|
|
||||||
"name":"DJj123dj#1706",
|
|
||||||
"id":12345678910,
|
|
||||||
"color":"#ffffff",
|
|
||||||
"pfp":"https://www.example.com/image.png"
|
|
||||||
},
|
|
||||||
"content":"string or FALSE",
|
|
||||||
"timestamp":12345678910,
|
|
||||||
"embeds":[
|
|
||||||
{
|
|
||||||
"title":"string or FALSE",
|
|
||||||
"description":"string or FALSE",
|
|
||||||
"authorimg":"https://www.example.com/image.png or FALSE",
|
|
||||||
"authortext":"string or FALSE",
|
|
||||||
"footerimg":"https://www.example.com/image.png or FALSE",
|
|
||||||
"footertext":"string or FALSE",
|
|
||||||
"color":"#ffffff",
|
|
||||||
"image":"https://www.example.com/image.png or FALSE",
|
|
||||||
"thumbnail":"https://www.example.com/image.png or FALSE",
|
|
||||||
"url":"https://www.example.com/image.png or FALSE"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"files":[
|
|
||||||
{
|
|
||||||
"name":"image.png",
|
|
||||||
"type":"PNG",
|
|
||||||
"size":"1MB",
|
|
||||||
"url":"https://www.example.com/image.png"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -22,8 +22,8 @@ exports.beingprocessed = (name,id,rawprocesstime,user) => {
|
|||||||
|
|
||||||
const embed = new discord.EmbedBuilder()
|
const embed = new discord.EmbedBuilder()
|
||||||
.setTitle("🧾 "+l.transcripts.title)
|
.setTitle("🧾 "+l.transcripts.title)
|
||||||
.setColor(config.main_color)
|
.setColor(config.color)
|
||||||
.setAuthor({name:user.tag,iconURL:user.displayAvatarURL()})
|
.setAuthor({name:user.username,iconURL:user.displayAvatarURL()})
|
||||||
.setFooter({text:name})
|
.setFooter({text:name})
|
||||||
|
|
||||||
.setDescription("`"+l.transcripts.processed+"...`\n"+l.transcripts.wait+"\n\n"+l.transcripts.estimated+": "+processtime)
|
.setDescription("`"+l.transcripts.processed+"...`\n"+l.transcripts.wait+"\n\n"+l.transcripts.estimated+": "+processtime)
|
||||||
@@ -42,8 +42,8 @@ exports.beingprocessed = (name,id,rawprocesstime,user) => {
|
|||||||
exports.tsready = (name,id,url,user) => {
|
exports.tsready = (name,id,url,user) => {
|
||||||
const embed = new discord.EmbedBuilder()
|
const embed = new discord.EmbedBuilder()
|
||||||
.setTitle("🧾 "+l.transcripts.title)
|
.setTitle("🧾 "+l.transcripts.title)
|
||||||
.setColor(config.main_color)
|
.setColor(config.color)
|
||||||
.setAuthor({name:user.tag,iconURL:user.displayAvatarURL()})
|
.setAuthor({name:user.username,iconURL:user.displayAvatarURL()})
|
||||||
.setFooter({text:name})
|
.setFooter({text:name})
|
||||||
|
|
||||||
if (url){
|
if (url){
|
||||||
@@ -67,7 +67,7 @@ exports.tserror = (name,id,user,err) => {
|
|||||||
const embed = new discord.EmbedBuilder()
|
const embed = new discord.EmbedBuilder()
|
||||||
.setTitle("❌ "+l.transcripts.title)
|
.setTitle("❌ "+l.transcripts.title)
|
||||||
.setColor(discord.Colors.Red)
|
.setColor(discord.Colors.Red)
|
||||||
.setAuthor({name:user.tag,iconURL:user.displayAvatarURL()})
|
.setAuthor({name:user.username,iconURL:user.displayAvatarURL()})
|
||||||
.setFooter({text:name})
|
.setFooter({text:name})
|
||||||
|
|
||||||
const errDesc = (typeof err == "string") ? "\n"+err : ""
|
const errDesc = (typeof err == "string") ? "\n"+err : ""
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
{
|
{
|
||||||
"version":"1.0.0"
|
"version":"2"
|
||||||
}
|
}
|
||||||
@@ -14,11 +14,15 @@ const tsdb = require("./tsdb")
|
|||||||
const checkAvailability = async () => {
|
const checkAvailability = async () => {
|
||||||
if (process.argv.some((v) => v == "--tsoffline")) return true
|
if (process.argv.some((v) => v == "--tsoffline")) return true
|
||||||
const axios = require("axios").default
|
const axios = require("axios").default
|
||||||
const res = await axios.get("https://transcripts.dj-dj.be/status.txt")
|
try{
|
||||||
if (!res || !(res.status == 200) || !res.data) return false
|
const res = await axios.get("https://transcripts.dj-dj.be/api/status.json")
|
||||||
|
if (!res || !(res.status == 200) || !res.data) return false
|
||||||
|
|
||||||
if ((res.data == "online") || (res.data == "1") || (res.data == "true")) return true
|
if (res.data && res.data["v2"] == "online") return true
|
||||||
else return false
|
else return false
|
||||||
|
}catch{
|
||||||
|
return false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -36,35 +40,54 @@ module.exports = async (messages,guild,channel,user,reason) => {
|
|||||||
const chName = channel.name
|
const chName = channel.name
|
||||||
const chId = channel.id
|
const chId = channel.id
|
||||||
|
|
||||||
/**@param {discord.Collection<string, discord.Message<true>>} msglist*/
|
const asyncmanager = async () => {
|
||||||
const asyncmanager = async (msglist) => {
|
const hiddendata = bot.hiddenData.readHiddenData(channel.id)
|
||||||
var firstmsg = msglist.last()
|
if (hiddendata.length < 1) return
|
||||||
|
const ticketId = hiddendata.find(d => d.key == "type").value
|
||||||
|
const ticketData = require("../utils/configParser").getTicketById(ticketId,true)
|
||||||
|
|
||||||
if (firstmsg == undefined || firstmsg.author.id != client.user.id) return false
|
const id = hiddendata.find(d => d.key == "openerid").value
|
||||||
const hiddendata = bot.hiddenData.readHiddenData(firstmsg.embeds[0].description)
|
const opentime = new Date(Number(hiddendata.find(d => d.key == "createdms").value))
|
||||||
const ticketId = hiddendata.data.find(d => d.key == "type")
|
|
||||||
|
|
||||||
const id = hiddendata.data.find(d => d.key == "openerid").value
|
|
||||||
const opentime = new Date(Number(hiddendata.data.find(d => d.key == "createdms").value))
|
|
||||||
|
|
||||||
const ticketopener = client.users.cache.find(u => u.id == id)
|
const ticketopener = client.users.cache.find(u => u.id == id)
|
||||||
|
|
||||||
if (tsconfig.sendTranscripts.useHTMLtranscripts){
|
if (tsconfig.sendTranscripts.useHTMLtranscripts){
|
||||||
const JSONDATA = require("./communication/compileJson").compile(guild,channel,user,messages,{
|
const tsb = tsconfig.style.background
|
||||||
|
const tsh = tsconfig.style.header
|
||||||
|
const tss = tsconfig.style.stats
|
||||||
|
const JSONDATA = require("./communication/compileJsonV2").compile(guild,channel,user,messages,{
|
||||||
style:{
|
style:{
|
||||||
titleColor:tsconfig.style.titleColor,
|
background:{
|
||||||
enableCustomBackground:tsconfig.style.background.enableCustomBackground,
|
enableCustomBackground:tsb.enableCustomBackground,
|
||||||
backgroundModus:tsconfig.style.background.backgroundModus,
|
backgroundModus:tsb.backgroundModus,
|
||||||
backgroundData:tsconfig.style.background.backgroundData
|
backgroundData:tsb.backgroundData
|
||||||
|
},
|
||||||
|
header:{
|
||||||
|
enableCustomHeader:tsh.enableCustomHeader,
|
||||||
|
backgroundColor:tsh.backgroundColor,
|
||||||
|
decoColor:tsh.decoColor,
|
||||||
|
textColor:tsh.textColor
|
||||||
|
},
|
||||||
|
stats:{
|
||||||
|
enableCustomStats:tss.enableCustomStats,
|
||||||
|
backgroundColor:tss.backgroundColor,
|
||||||
|
keyTextColor:tss.keyTextColor,
|
||||||
|
valueTextColor:tss.valueTextColor,
|
||||||
|
hideBackgroundColor:tss.hideBackgroundColor,
|
||||||
|
hideTextColor:tss.hideTextColor
|
||||||
|
}
|
||||||
|
|
||||||
},
|
},
|
||||||
bot:{
|
bot:{
|
||||||
name:client.user.username,
|
name:client.user.username,
|
||||||
id:client.user.id,
|
id:client.user.id,
|
||||||
pfp:client.user.displayAvatarURL()
|
pfp:client.user.displayAvatarURL(),
|
||||||
},
|
},
|
||||||
ticket:{
|
ticket:{
|
||||||
creatorid:ticketopener.id,
|
creatorid:ticketopener.id,
|
||||||
creatorname:ticketopener.tag,
|
creatorname:ticketopener.username,
|
||||||
|
creatorpfp:ticketopener.displayAvatarURL(),
|
||||||
|
|
||||||
openedtime:opentime.getTime(),
|
openedtime:opentime.getTime(),
|
||||||
closedtime:new Date().getTime()
|
closedtime:new Date().getTime()
|
||||||
}
|
}
|
||||||
@@ -88,16 +111,17 @@ module.exports = async (messages,guild,channel,user,reason) => {
|
|||||||
if (!TSdata) return false
|
if (!TSdata) return false
|
||||||
|
|
||||||
if (TSdata.status == "success"){
|
if (TSdata.status == "success"){
|
||||||
const url = "https://transcripts.dj-dj.be/t/"+TSdata.time+"_"+TSdata.id+".html"
|
//MAKE THIS COMPATIBLE WITH PREMIUM "customTranscriptUrl" IN FUTURE VERSIONS!!
|
||||||
|
const url = "https://transcripts.dj-dj.be/v2/"+TSdata.time+"_"+TSdata.id+".html"
|
||||||
|
|
||||||
//calculate estimated time
|
//calculate estimated time
|
||||||
const lastDumpTime = (new Date(TSdata.estimated.lastdump).getTime())
|
//const lastDumpTime = (new Date(TSdata.estimated.lastdump).getTime())
|
||||||
const dumpLoopTime = 15000
|
//const dumpLoopTime = 15000
|
||||||
const nextDump = new Date(lastDumpTime+dumpLoopTime)
|
//const nextDump = new Date(lastDumpTime+dumpLoopTime)
|
||||||
const processtime = TSdata.estimated.processtime+6000 //6sec extra time for overflow
|
//const processtime = TSdata.estimated.processtime+6000 //6sec extra time for overflow
|
||||||
|
|
||||||
const finaltime = new Date(nextDump.getTime()+processtime)
|
const duration = TSdata.estimated.waittime
|
||||||
const duration = finaltime.getTime()-new Date().getTime()
|
const finaltime = new Date(new Date().getTime()+duration)
|
||||||
|
|
||||||
//waiting
|
//waiting
|
||||||
if (tsconfig.sendTranscripts.enableChannel){
|
if (tsconfig.sendTranscripts.enableChannel){
|
||||||
@@ -119,7 +143,7 @@ module.exports = async (messages,guild,channel,user,reason) => {
|
|||||||
if (!user) return
|
if (!user) return
|
||||||
const embed = tsembeds.tsready(chName,chId,url,user)
|
const embed = tsembeds.tsready(chName,chId,url,user)
|
||||||
try {
|
try {
|
||||||
user.send({embeds:[embed]})
|
ticketopener.send({embeds:[embed]})
|
||||||
}catch{}
|
}catch{}
|
||||||
}
|
}
|
||||||
},duration)
|
},duration)
|
||||||
@@ -148,5 +172,5 @@ module.exports = async (messages,guild,channel,user,reason) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
asyncmanager(msglist)
|
asyncmanager()
|
||||||
}
|
}
|
||||||
@@ -26,7 +26,20 @@ exports.createTranscript = async (messagecollection,channel,backup) => {
|
|||||||
messagecollection.forEach((msg) => {
|
messagecollection.forEach((msg) => {
|
||||||
const timestamp = new Date(msg.createdTimestamp)
|
const timestamp = new Date(msg.createdTimestamp)
|
||||||
|
|
||||||
if (msg.content){var content = msg.content}else{var content = "*empty message*"}
|
//empty message handling
|
||||||
|
if (msg.content){
|
||||||
|
var content = msg.content
|
||||||
|
}else if (msg.embeds.length > 0 && msg.attachments.length > 0){
|
||||||
|
var content = "*this message only has embeds & files*"
|
||||||
|
}else if (msg.embeds.length > 0){
|
||||||
|
var content = "*this message only has embeds*"
|
||||||
|
}else if (msg.attachments.length > 0){
|
||||||
|
var content = "*this message only has files*"
|
||||||
|
}else{
|
||||||
|
var content = "*empty message*"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
const fileurls = []
|
const fileurls = []
|
||||||
const rawfiles = Array.from(msg.attachments)
|
const rawfiles = Array.from(msg.attachments)
|
||||||
rawfiles.forEach((file) => {
|
rawfiles.forEach((file) => {
|
||||||
@@ -34,7 +47,7 @@ exports.createTranscript = async (messagecollection,channel,backup) => {
|
|||||||
})
|
})
|
||||||
const filestring = fileurls.length > 0 ? fileurls.join("\n")+"\n" : ""
|
const filestring = fileurls.length > 0 ? fileurls.join("\n")+"\n" : ""
|
||||||
const msgstats = "files: "+msg.attachments.size+", embeds: "+msg.embeds.length
|
const msgstats = "files: "+msg.attachments.size+", embeds: "+msg.embeds.length
|
||||||
filearray.push("["+timestamp.getDate()+"/"+timestamp.getMonth()+"/"+timestamp.getFullYear()+", "+timestamp.getHours()+":"+timestamp.getMinutes()+":"+timestamp.getSeconds()+"|"+msg.author.tag+"] ["+msgstats+"]\n"+content+"\n"+filestring)
|
filearray.push("["+timestamp.getDate()+"/"+timestamp.getMonth()+"/"+timestamp.getFullYear()+", "+timestamp.getHours()+":"+timestamp.getMinutes()+":"+timestamp.getSeconds()+"|"+msg.author.username+"] ["+msgstats+"]\n"+content+"\n"+filestring)
|
||||||
})
|
})
|
||||||
|
|
||||||
if (filearray.length < 2) filearray.push("transcript is empty")
|
if (filearray.length < 2) filearray.push("transcript is empty")
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ const l = bot.language
|
|||||||
//==================
|
//==================
|
||||||
|
|
||||||
//OTTicketOptions
|
//OTTicketOptions
|
||||||
/**@typedef {{id: String,name: String,description: String,icon: String,label: String,type: "ticket"|"role"|"website",color: "red"|"green"|"blue"|"gray",adminroles: String[],channelprefix: String,category: String,message: String,enableDmOnOpen: Boolean,ticketmessage: String, thumbnail:{enable:Boolean,url:String}, closedCategory:{enable:Boolean,id:String}}} OTTicketOptions */
|
/**@typedef {{id: String,name: String,description: String,icon: String,label: String,type: "ticket"|"role"|"website",color: "red"|"green"|"blue"|"gray",adminroles: String[], readonlyAdminroles: String[], channelprefix: String,category: String,message: String,enableDmOnOpen: Boolean,ticketmessage: String, thumbnail:{enable:Boolean,url:String}, image:{enable:Boolean,url:String}, closedCategory:{enable:Boolean,id:String}, autoclose:{enable:Boolean,inactiveHours:Number}, ping:{"@here":Boolean, "@everyone":Boolean, custom:{enable:Boolean, roleId:String}} }} OTTicketOptions */
|
||||||
|
|
||||||
//OTRoleOptions
|
//OTRoleOptions
|
||||||
/**@typedef {{id: String,name: String,description: String,icon: String,label: String,type: "ticket"|"role"|"website",color:"red"|"green"|"blue"|"gray"|"none",roles:String[],mode:"add&remove"|"remove"|"add",enableDmOnOpen:Boolean}} OTRoleOptions */
|
/**@typedef {{id: String,name: String,description: String,icon: String,label: String,type: "ticket"|"role"|"website",color:"red"|"green"|"blue"|"gray"|"none",roles:String[],mode:"add&remove"|"remove"|"add",enableDmOnOpen:Boolean}} OTRoleOptions */
|
||||||
@@ -16,10 +16,13 @@ const l = bot.language
|
|||||||
|
|
||||||
|
|
||||||
//OTConfigMessage
|
//OTConfigMessage
|
||||||
/**@typedef {{id: string, name: string, description: string, dropdown: boolean, enableFooter: boolean, footer: string, enableThumbnail: boolean, thumbnail: string, enableCustomColor: boolean, color: string, options: string[], other:{enableTicketExplaination: boolean, enableMaxTicketsWarning: boolean, customDropdownPlaceholder:{enable:Boolean,text:String}, customCategoryText:{enable:Boolean,text:String}, embedTitleURL:{enable:Boolean,url:String} } }} OTConfigMessage*/
|
/**@typedef {{id: string, name: string, description: string, dropdown: boolean, enableFooter: boolean, footer: string, enableFooterImage: boolean, footerImage: string, enableThumbnail: boolean, thumbnail: string, enableImage: boolean, image: string, enableCustomColor: boolean, color: string, options: string[], other:{enableTicketExplaination: boolean, enableMaxTicketsWarning: boolean, customDropdownPlaceholder:{enable:Boolean,text:String}, customCategoryText:{enable:Boolean,text:String}, embedTitleURL:{enable:Boolean,url:String} } }} OTConfigMessage*/
|
||||||
|
|
||||||
|
//OTAllOptions
|
||||||
|
/**@typedef {{id: String,name: String,description: String,icon: String,label: String,type: "ticket"|"role"|"website",color:"red"|"green"|"blue"|"gray"|"none",roles:String[],mode:"add&remove"|"remove"|"add",adminroles: String[],channelprefix: String,category: String,message: String,enableDmOnOpen: Boolean,ticketmessage: String, thumbnail:{enable:Boolean,url:String}, image:{enable:Boolean,url:String}, url:String, closedCategory:{enable:Boolean,id:String}, autoclose:{enable:Boolean,inactiveHours:Number}, readonlyAdminroles: String[]}} OTAllOptions */
|
||||||
|
|
||||||
//StringOptions
|
//StringOptions
|
||||||
/**@typedef {"id"|"name"|"description"|"icon"|"label"|"type"|"color"|"adminroles"|"channelprefix"|"category"|"message"|"enableDmOnOpen"|"ticketmessage"|"thumbnail"|"closedCategory"} OTTicketStringOptions */
|
/**@typedef {"id"|"name"|"description"|"icon"|"label"|"type"|"color"|"adminroles"|"channelprefix"|"category"|"message"|"enableDmOnOpen"|"ticketmessage"|"thumbnail"|"image"|"closedCategory"|"adminroles"|"autoclose"|"ping"} OTTicketStringOptions */
|
||||||
/**@typedef {"id"|"name"|"description"|"icon"|"label"|"type"|"color"|"roles"|"mode"|"enableDmOnOpen"} OTRoleStringOptions */
|
/**@typedef {"id"|"name"|"description"|"icon"|"label"|"type"|"color"|"roles"|"mode"|"enableDmOnOpen"} OTRoleStringOptions */
|
||||||
/**@typedef {"id"|"name"|"description"|"icon"|"label"|"type"|"url"} OTWebsiteStringOptions */
|
/**@typedef {"id"|"name"|"description"|"icon"|"label"|"type"|"url"} OTWebsiteStringOptions */
|
||||||
|
|
||||||
@@ -168,8 +171,6 @@ this.websiteType = {}
|
|||||||
this.messageType = {}
|
this.messageType = {}
|
||||||
|
|
||||||
|
|
||||||
//OTAllOptions
|
|
||||||
/**@typedef {{id: String,name: String,description: String,icon: String,label: String,type: "ticket"|"role"|"website",color:"red"|"green"|"blue"|"gray"|"none",roles:String[],mode:"add&remove"|"remove"|"add",adminroles: String[],channelprefix: String,category: String,message: String,enableDmOnOpen: Boolean,ticketmessage: String, thumbnail:{enable:Boolean,url:String}, url:String, closedCategory:{enable:Boolean,id:String}}} OTAllOptions */
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
|
|||||||
+6
-24
@@ -32,6 +32,12 @@ exports.getOption = getOption
|
|||||||
* @returns {discord.ButtonBuilder|false}
|
* @returns {discord.ButtonBuilder|false}
|
||||||
*/
|
*/
|
||||||
exports.getButton = (id) => {
|
exports.getButton = (id) => {
|
||||||
|
bot.actionRecorder.push({
|
||||||
|
category:"ot.managers.utils",
|
||||||
|
file:"./core/utils/getButton.js",
|
||||||
|
time:new Date().getTime(),
|
||||||
|
type:"getbutton"
|
||||||
|
})
|
||||||
const option = getOption(id)
|
const option = getOption(id)
|
||||||
if (!option) return false
|
if (!option) return false
|
||||||
if (option.type == "ticket"){
|
if (option.type == "ticket"){
|
||||||
@@ -68,27 +74,3 @@ exports.getButton = (id) => {
|
|||||||
|
|
||||||
return button
|
return button
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
exports.rawButtonData = class {
|
|
||||||
constructor() {
|
|
||||||
this.id = ""
|
|
||||||
this.name = ""
|
|
||||||
this.description = ""
|
|
||||||
this.icon = ""
|
|
||||||
this.label = ""
|
|
||||||
this.type = ""
|
|
||||||
|
|
||||||
this.color = ""
|
|
||||||
this.enableDmOnOpen = true
|
|
||||||
this.url = ""
|
|
||||||
this.roles = ["",""]
|
|
||||||
this.mode = ""
|
|
||||||
this.adminroles = ["",""]
|
|
||||||
this.channelprefix = ""
|
|
||||||
this.category = ""
|
|
||||||
this.message = ""
|
|
||||||
this.ticketmessage = ""
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -11,6 +11,12 @@ const configParser = require("./configParser")
|
|||||||
* @returns {discord.StringSelectMenuBuilder|false}
|
* @returns {discord.StringSelectMenuBuilder|false}
|
||||||
*/
|
*/
|
||||||
exports.getDropdown = (ids,placeholder) => {
|
exports.getDropdown = (ids,placeholder) => {
|
||||||
|
bot.actionRecorder.push({
|
||||||
|
category:"ot.managers.utils",
|
||||||
|
file:"./core/utils/getDropdown.js",
|
||||||
|
time:new Date().getTime(),
|
||||||
|
type:"getdropdown"
|
||||||
|
})
|
||||||
const dropdown = new discord.StringSelectMenuBuilder()
|
const dropdown = new discord.StringSelectMenuBuilder()
|
||||||
.setCustomId("OTdropdownMenu")
|
.setCustomId("OTdropdownMenu")
|
||||||
.setDisabled(false)
|
.setDisabled(false)
|
||||||
@@ -18,7 +24,7 @@ exports.getDropdown = (ids,placeholder) => {
|
|||||||
.setMinValues(1)
|
.setMinValues(1)
|
||||||
.setPlaceholder(placeholder || l.messages.chooseATicket)
|
.setPlaceholder(placeholder || l.messages.chooseATicket)
|
||||||
.addOptions(
|
.addOptions(
|
||||||
new discord.SelectMenuOptionBuilder()
|
new discord.StringSelectMenuOptionBuilder()
|
||||||
.setDefault(true)
|
.setDefault(true)
|
||||||
.setLabel(placeholder || l.messages.chooseATicket)
|
.setLabel(placeholder || l.messages.chooseATicket)
|
||||||
.setValue("OTChooseTicket")
|
.setValue("OTChooseTicket")
|
||||||
@@ -28,7 +34,7 @@ exports.getDropdown = (ids,placeholder) => {
|
|||||||
const option = configParser.getTicketById(id,true)
|
const option = configParser.getTicketById(id,true)
|
||||||
const roleoption = configParser.getRoleById(id,true)
|
const roleoption = configParser.getRoleById(id,true)
|
||||||
if (option){
|
if (option){
|
||||||
const selectComponent = new discord.SelectMenuOptionBuilder()
|
const selectComponent = new discord.StringSelectMenuOptionBuilder()
|
||||||
.setDefault(false)
|
.setDefault(false)
|
||||||
.setValue("OTnewT"+option.id)
|
.setValue("OTnewT"+option.id)
|
||||||
|
|
||||||
@@ -37,12 +43,13 @@ exports.getDropdown = (ids,placeholder) => {
|
|||||||
}else{
|
}else{
|
||||||
if (option.label) selectComponent.setLabel(option.label)
|
if (option.label) selectComponent.setLabel(option.label)
|
||||||
if (option.icon) selectComponent.setEmoji(option.icon)
|
if (option.icon) selectComponent.setEmoji(option.icon)
|
||||||
|
if (option.description) selectComponent.setDescription(option.description)
|
||||||
}
|
}
|
||||||
|
|
||||||
dropdown.addOptions(selectComponent)
|
dropdown.addOptions(selectComponent)
|
||||||
|
|
||||||
}else if (roleoption){
|
}else if (roleoption){
|
||||||
const selectComponent = new discord.SelectMenuOptionBuilder()
|
const selectComponent = new discord.StringSelectMenuOptionBuilder()
|
||||||
.setDefault(false)
|
.setDefault(false)
|
||||||
.setValue("OTnewR"+roleoption.id)
|
.setValue("OTnewR"+roleoption.id)
|
||||||
|
|
||||||
|
|||||||
+26
-6
@@ -14,12 +14,18 @@ const l = bot.language
|
|||||||
|
|
||||||
|
|
||||||
exports.createEmbed = (id) => {
|
exports.createEmbed = (id) => {
|
||||||
|
bot.actionRecorder.push({
|
||||||
|
category:"ot.managers.utils",
|
||||||
|
file:"./core/utils/getEmbed.js",
|
||||||
|
time:new Date().getTime(),
|
||||||
|
type:"getembed"
|
||||||
|
})
|
||||||
//-----------------------------------
|
//-----------------------------------
|
||||||
//general importing
|
//general importing
|
||||||
const data = require("./configParser").getConfigMessage(id)
|
const data = require("./configParser").getConfigMessage(id)
|
||||||
/**@type {discord.ButtonBuilder[]}*/
|
/**@type {discord.ButtonBuilder[]}*/
|
||||||
var buttons = []
|
var buttons = []
|
||||||
/**@type {getButton.rawButtonData[]} */
|
/**@type {import('./configParser').OTAllOptions[]} */
|
||||||
var buttonData = []
|
var buttonData = []
|
||||||
|
|
||||||
data.options.forEach((option) => {
|
data.options.forEach((option) => {
|
||||||
@@ -34,23 +40,37 @@ exports.createEmbed = (id) => {
|
|||||||
//create the embed
|
//create the embed
|
||||||
const embed = new discord.EmbedBuilder()
|
const embed = new discord.EmbedBuilder()
|
||||||
.setTitle(data.name)
|
.setTitle(data.name)
|
||||||
if (data.enableFooter) embed.setFooter({text:data.footer})
|
|
||||||
|
try {
|
||||||
|
const footerimg = (data.enableFooter && data.enableFooterImage) ? data.footerImage : undefined
|
||||||
|
if (data.enableFooter) embed.setFooter({text:data.footer,iconURL:footerimg})
|
||||||
|
}catch{
|
||||||
|
bot.errorLog.log("info","FOOTER FAILED TO LOAD, probably invalid url!")
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (data.enableThumbnail) embed.setThumbnail(data.thumbnail)
|
if (data.enableThumbnail) embed.setThumbnail(data.thumbnail)
|
||||||
}catch{bot.errorLog.log("info","THUMBNAIL FAILED TO LOAD, probably invalid url!")}
|
}catch{
|
||||||
|
bot.errorLog.log("info","THUMBNAIL FAILED TO LOAD, probably invalid url!")
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
if (data.enableImage) embed.setImage(data.image)
|
||||||
|
}catch{
|
||||||
|
bot.errorLog.log("info","IMAGE FAILED TO LOAD, probably invalid url!")
|
||||||
|
}
|
||||||
|
|
||||||
if (data.enableCustomColor){
|
if (data.enableCustomColor){
|
||||||
embed.setColor(data.color)
|
embed.setColor(data.color)
|
||||||
}else{
|
}else{
|
||||||
embed.setColor(config.main_color)
|
embed.setColor(config.color)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data.other.embedTitleURL.enable) embed.setURL(data.other.embedTitleURL.url)
|
if (data.other.embedTitleURL.enable) embed.setURL(data.other.embedTitleURL.url)
|
||||||
|
|
||||||
var description = data.description
|
var description = data.description
|
||||||
if (data.other.enableTicketExplaination){
|
if (data.other.enableTicketExplaination){
|
||||||
const chooseCategoryMSG = data.other.customCategoryText.enable ? data.other.customCategoryText.text : l.messages.chooseCategory
|
const chooseCategoryMSG = data.other.customCategoryText.enable ? data.other.customCategoryText.text : l.messages.chooseATicket
|
||||||
description = description+"\n\n__"+chooseCategoryMSG+"__\n"
|
description = description+"\n\n__"+chooseCategoryMSG+"__\n"
|
||||||
|
|
||||||
var ticketExplainations = []
|
var ticketExplainations = []
|
||||||
@@ -63,7 +83,7 @@ exports.createEmbed = (id) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (data.other.enableMaxTicketsWarning){
|
if (data.other.enableMaxTicketsWarning){
|
||||||
description = description+"\n\n"+l.commands.maxTicketWarning.replace("{0}",config.system.max_allowed_tickets)
|
description = description+"\n\n"+l.commands.maxTicketWarning.replace("{0}",config.system.maxAmountOfTickets)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (description) embed.setDescription(description)
|
if (description) embed.setDescription(description)
|
||||||
|
|||||||
+29
-46
@@ -1,66 +1,49 @@
|
|||||||
|
const storage = require("../../index").storage
|
||||||
|
|
||||||
/**@typedef {{type:String,data:[{key:String,value:String}]}} hiddenData */
|
/**@typedef {[{key:String,value:String}]} hiddenData */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @param {String} messageContent
|
* @param {String} channelid
|
||||||
* @returns {hiddenData}
|
* @returns {hiddenData}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
exports.readHiddenData = (messageContent) => {
|
exports.readHiddenData = (channelid) => {
|
||||||
//ticketdata//type:123|userid:456)
|
const content = storage.get("HIDDENDATA",channelid)
|
||||||
const rawhidden = messageContent.split("[ ](OTDATA|")[1]
|
if (!content) return {type:"",data:[],status:false}
|
||||||
const rawhidden2 = rawhidden.split("//")
|
|
||||||
|
|
||||||
const datatype = rawhidden2[0]
|
try {
|
||||||
var rawhiddendata = rawhidden2[1]
|
return JSON.parse(content)
|
||||||
var rawhiddendataArray = rawhiddendata.split("")
|
} catch {
|
||||||
rawhiddendataArray.pop()
|
return []
|
||||||
|
}
|
||||||
rawhiddendata = rawhiddendataArray.join("")
|
|
||||||
|
|
||||||
const splittedData = rawhiddendata.split("|")
|
|
||||||
|
|
||||||
const resultData = []
|
|
||||||
splittedData.forEach((data) => {
|
|
||||||
// type:123
|
|
||||||
const dataresult = data.split(":")
|
|
||||||
|
|
||||||
resultData.push({key:dataresult[0],value:dataresult[1]})
|
|
||||||
})
|
|
||||||
|
|
||||||
return {type:datatype,data:resultData}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @param {String} type
|
* @param {String} channelid
|
||||||
* @param {[{key:String,value:String}]} data
|
* @param {[{key:String,value:String}]} data
|
||||||
* @returns {String}
|
* @returns {Boolean}
|
||||||
*/
|
*/
|
||||||
exports.writeHiddenData = (type,data) => {
|
exports.writeHiddenData = (channelid,data) => {
|
||||||
const dataValues = []
|
try {
|
||||||
data.forEach((d) => {
|
storage.set("HIDDENDATA",channelid,JSON.stringify(data))
|
||||||
dataValues.push(d.key+":"+d.value)
|
return true
|
||||||
})
|
} catch {
|
||||||
|
return false
|
||||||
const datastring = dataValues.join("|")
|
}
|
||||||
|
|
||||||
const result = "[ ](OTDATA|"+type+"//"+datastring+")"
|
|
||||||
|
|
||||||
return result
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @param {String} description
|
* @param {String} channelid
|
||||||
* @returns {{description:String,hiddenData:hiddenData}}
|
* @returns {Boolean}
|
||||||
*/
|
*/
|
||||||
exports.removeHiddenData = (description) => {
|
exports.deleteHiddenData = (channelid) => {
|
||||||
const hiddenData = this.readHiddenData(description)
|
try {
|
||||||
|
storage.delete("HIDDENDATA",channelid)
|
||||||
const splitted = description.split("[ ](OTDATA")
|
return true
|
||||||
const original = splitted[0]
|
} catch {
|
||||||
|
return false
|
||||||
return {description:original,hiddenData:hiddenData}
|
}
|
||||||
}
|
}
|
||||||
+201
-3
@@ -3,13 +3,211 @@ const bot = require('../../index')
|
|||||||
const client = bot.client
|
const client = bot.client
|
||||||
const config = bot.config
|
const config = bot.config
|
||||||
const log = bot.errorLog.log
|
const log = bot.errorLog.log
|
||||||
|
const axios = require("axios").default
|
||||||
|
const fs = require("fs")
|
||||||
|
|
||||||
const loadChalk = async () => {
|
const loadChalk = async () => {
|
||||||
return await (await import("chalk")).default
|
return await (await import("chalk")).default
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = async () => {
|
//OTLiveStatus
|
||||||
const chalk = await loadChalk()
|
/**@typedef {[{style:[{title:String,titleColor:"normal"|"red"|"green"|"blue"|"yellow"|"white"|"gray"|"magenta"|"cyan",description:String,descriptionColor:"normal"|"red"|"green"|"blue"|"yellow"|"white"|"gray"|"magenta"|"cyan"}],active:{versions:String[],languages:String[],usingPlugins:["yes"|"no"|"both"],usingSlashCommands:["yes"|"no"|"both"],transcripts:["html"|"text"|"both"]}}]} OTLiveStatus */
|
||||||
|
|
||||||
//LIVESTATUS SOON
|
//OTLiveStatusError
|
||||||
|
/**@typedef {{bot:{id:String,pfp:String,name:String}, openticket:{version:String,language:String, slashcmds:Boolean,transcripts:false|"text"|"html",config:{system:{},options:{},messages:{},transcripts:{}},plugins:String[],pluginload:{success:Number,error:Number,total:Number}}, details:{actions:[{type:String,category:String,file:String,time:Number}],errortime:Number}, error:String}} OTLiveStatusError */
|
||||||
|
|
||||||
|
/**@type {[{type:String, category:String, file:String, time:Number}]} */
|
||||||
|
exports.actionRecorder = []
|
||||||
|
|
||||||
|
//================================================================
|
||||||
|
//=========================FUNCTIONS==============================
|
||||||
|
//================================================================
|
||||||
|
|
||||||
|
const getSlashEnabled = () => {
|
||||||
|
if (!fs.existsSync("./storage/slashcmdEnabled.txt")) return false
|
||||||
|
if (fs.readFileSync("./storage/slashcmdEnabled.txt").toString() == require("../../package.json").version){
|
||||||
|
return true
|
||||||
|
}else return false
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {Boolean} [local=false]
|
||||||
|
* @returns {Promise<OTLiveStatus|false>}
|
||||||
|
*/
|
||||||
|
const getLivestatus = (local) => {
|
||||||
|
return new Promise((resolve,reject) => {
|
||||||
|
if (local){
|
||||||
|
try {
|
||||||
|
const livestatus = require("../../livestatus.json")
|
||||||
|
if (!livestatus) return resolve(false)
|
||||||
|
resolve(livestatus)
|
||||||
|
}catch{
|
||||||
|
return resolve(false)
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
try {
|
||||||
|
axios.get("https://livestatus.dj-dj.be/openticket.json").then((res) => {
|
||||||
|
const livestatus = res.data
|
||||||
|
if (!Array.isArray(livestatus)) return resolve(false)
|
||||||
|
if (!livestatus) return resolve(false)
|
||||||
|
resolve(livestatus)
|
||||||
|
})
|
||||||
|
}catch{
|
||||||
|
return resolve(false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
var globalPluginData = {total:0,error:0,success:0}
|
||||||
|
|
||||||
|
//announcer
|
||||||
|
/**@param {{total:Number,error:Number,success:Number}} pluginData*/
|
||||||
|
exports.run = async (pluginData) => {
|
||||||
|
const chalk = await loadChalk()
|
||||||
|
globalPluginData = pluginData
|
||||||
|
const res = await getLivestatus(process.argv.some((v) => v == "--localstatus"))
|
||||||
|
if (!res) return false
|
||||||
|
if (res.length == 0) return
|
||||||
|
|
||||||
|
/**@type {[{title:String,titleColor:"normal"|"red"|"green"|"blue"|"yellow"|"white"|"gray"|"magenta"|"cyan",description:String,descriptionColor:"normal"|"red"|"green"|"blue"|"yellow"|"white"|"gray"|"magenta"|"cyan"}]} */
|
||||||
|
const activeStyles = []
|
||||||
|
res.forEach((announcement) => {
|
||||||
|
const a = announcement.active
|
||||||
|
|
||||||
|
const isLanguage = a.languages.includes(config.languageFile) || a.languages.includes("all")
|
||||||
|
const isVersion = a.versions.includes(require("../../package.json").version)
|
||||||
|
|
||||||
|
var tsenabled = (bot.tsconfig.sendTranscripts.enableChannel || bot.tsconfig.sendTranscripts.enableDM)
|
||||||
|
var tsmode = bot.tsconfig.sendTranscripts.useHTMLtranscripts ? "html" : "text"
|
||||||
|
const isTranscript = (a.transcripts.includes("html") && tsmode == "html" && tsenabled) || (a.transcripts.includes("text") && tsmode == "text" && tsenabled) || (a.transcripts.includes("both") && tsenabled)
|
||||||
|
const isPlugins = (a.usingPlugins.includes("yes") && pluginData.total > 0) || (a.usingPlugins.includes("no") && pluginData.total == 0) || (a.usingPlugins.includes("both"))
|
||||||
|
const isSlashCMD = (a.usingSlashCommands.includes("yes") && getSlashEnabled()) || (a.usingSlashCommands.includes("no") && !getSlashEnabled()) || (a.usingSlashCommands.includes("both"))
|
||||||
|
|
||||||
|
if (!isLanguage || !isVersion || !isTranscript || !isPlugins || !isSlashCMD) return
|
||||||
|
announcement.style.forEach((s) => activeStyles.push(s))
|
||||||
|
})
|
||||||
|
const final = []
|
||||||
|
activeStyles.forEach((style) => {
|
||||||
|
const dc = style.descriptionColor
|
||||||
|
const tempd = style.description.split("\n")
|
||||||
|
const tc = style.titleColor
|
||||||
|
const t = "["+style.title+"]"
|
||||||
|
const tempd2 = []
|
||||||
|
tempd.forEach((tmpd,i) => {
|
||||||
|
if (i > 0){
|
||||||
|
var newtext = tmpd
|
||||||
|
var i2 = 0
|
||||||
|
while(i2 < t.length+1){
|
||||||
|
newtext = " "+newtext
|
||||||
|
i2++
|
||||||
|
}
|
||||||
|
tempd2.push(newtext)
|
||||||
|
}else{
|
||||||
|
tempd2.push(tmpd)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
const d = tempd2.join("\n")
|
||||||
|
|
||||||
|
|
||||||
|
var fd = d
|
||||||
|
if (dc == "normal" || dc == "white") fd = chalk.white(d)
|
||||||
|
if (dc == "red") fd = chalk.red(d)
|
||||||
|
if (dc == "yellow") fd = chalk.yellow(d)
|
||||||
|
if (dc == "green") fd = chalk.green(d)
|
||||||
|
if (dc == "blue") fd = chalk.blue(d)
|
||||||
|
if (dc == "gray") fd = chalk.gray(d)
|
||||||
|
if (dc == "magenta") fd = chalk.magenta(d)
|
||||||
|
if (dc == "cyan") fd = chalk.cyan(d)
|
||||||
|
|
||||||
|
var ft = t
|
||||||
|
if (tc == "normal" || tc == "white") ft = chalk.white(t)
|
||||||
|
if (tc == "red") ft = chalk.red(t)
|
||||||
|
if (tc == "yellow") ft = chalk.yellow(t)
|
||||||
|
if (tc == "green") ft = chalk.green(t)
|
||||||
|
if (tc == "blue") ft = chalk.blue(t)
|
||||||
|
if (tc == "gray") ft = chalk.gray(t)
|
||||||
|
if (tc == "magenta") ft = chalk.magenta(t)
|
||||||
|
if (tc == "cyan") ft = chalk.cyan(t)
|
||||||
|
|
||||||
|
final.push(ft+" "+fd)
|
||||||
|
})
|
||||||
|
|
||||||
|
console.log(final.join("\n\n"))
|
||||||
|
}
|
||||||
|
|
||||||
|
var waitTime = new Date().getTime()
|
||||||
|
var waitTimeEnabled = false
|
||||||
|
|
||||||
|
/**@param {OTLiveStatusError} options @returns {Promise<Boolean>} */
|
||||||
|
const uploadLiveStatus = (options) => {
|
||||||
|
return new Promise((resolve,reject) => {
|
||||||
|
if (process.argv.some((v) => v == "--noerrorupload")) return resolve(true)
|
||||||
|
try {
|
||||||
|
var data = encodeURIComponent(JSON.stringify(options))
|
||||||
|
axios.get("https://livestatus.dj-dj.be/openticket?auth=openticketLIVESTATUS1234&data="+data).then((res) => {
|
||||||
|
if (res.status == 200) resolve(true)
|
||||||
|
else resolve(false)
|
||||||
|
})
|
||||||
|
}catch{
|
||||||
|
resolve(false)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/**@param {String} err @returns {Promise<Boolean>}*/
|
||||||
|
exports.liveStatusUploadManager = async (err) => {
|
||||||
|
return new Promise(async (resolve) => {
|
||||||
|
|
||||||
|
if (process.argv.some((v) => v == "--noerrorupload")) return resolve(true)
|
||||||
|
else{
|
||||||
|
var tsenabled = (bot.tsconfig.sendTranscripts.enableChannel || bot.tsconfig.sendTranscripts.enableDM)
|
||||||
|
var tsmode = bot.tsconfig.sendTranscripts.useHTMLtranscripts ? "html" : "text"
|
||||||
|
const transcriptMode = tsenabled ? tsmode : false
|
||||||
|
const slashMode = getSlashEnabled()
|
||||||
|
|
||||||
|
try {
|
||||||
|
if (waitTimeEnabled){
|
||||||
|
if (new Date().getTime() < waitTime){
|
||||||
|
waitTimeEnabled = false
|
||||||
|
return resolve(false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const result = await uploadLiveStatus({
|
||||||
|
bot:{
|
||||||
|
id:client.user.id,
|
||||||
|
name:client.user.username,
|
||||||
|
pfp:client.user.displayAvatarURL()
|
||||||
|
},
|
||||||
|
error:err,
|
||||||
|
openticket:{
|
||||||
|
config:{
|
||||||
|
//TEMPORARY SOLUTION => AXIOS 414 ERROR!
|
||||||
|
//messages:config.messages,
|
||||||
|
//options:config.options,
|
||||||
|
//transcripts:bot.tsconfig,
|
||||||
|
//system:config.system
|
||||||
|
},
|
||||||
|
language:config.languageFile,
|
||||||
|
version:"3.4.1",
|
||||||
|
slashcmds:slashMode,
|
||||||
|
transcripts:transcriptMode,
|
||||||
|
plugins:fs.readdirSync("./plugins"),
|
||||||
|
pluginload:globalPluginData
|
||||||
|
},
|
||||||
|
details:{
|
||||||
|
errortime:new Date().getTime()
|
||||||
|
//TEMPORARY SOLUTION => AXIOS 414 ERROR!
|
||||||
|
//actions:this.actionRecorder,
|
||||||
|
//database:fs.readFileSync("./storage/database.json").toString()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
if (!result){
|
||||||
|
waitTime = new Date().getTime()+30000
|
||||||
|
waitTimeEnabled = true
|
||||||
|
}
|
||||||
|
resolve(result)
|
||||||
|
}catch{resolve(false)}
|
||||||
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
@@ -13,8 +13,14 @@ const storage = bot.storage
|
|||||||
* @returns {Boolean} has permissions?
|
* @returns {Boolean} has permissions?
|
||||||
*/
|
*/
|
||||||
exports.command = (memberid,guildid) => {
|
exports.command = (memberid,guildid) => {
|
||||||
|
bot.actionRecorder.push({
|
||||||
|
category:"ot.managers.permissionChecker",
|
||||||
|
file:"./core/permissionChecker.js",
|
||||||
|
time:new Date().getTime(),
|
||||||
|
type:"command"
|
||||||
|
})
|
||||||
const permsmember = client.guilds.cache.find(g => g.id == guildid).members.cache.find(m => m.id == memberid)
|
const permsmember = client.guilds.cache.find(g => g.id == guildid).members.cache.find(m => m.id == memberid)
|
||||||
if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("Administrator") && !permsmember.permissions.has("ManageGuild")){
|
if (config.adminRoles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("Administrator") && !permsmember.permissions.has("ManageGuild")){
|
||||||
return false
|
return false
|
||||||
}else {return true}
|
}else {return true}
|
||||||
}
|
}
|
||||||
@@ -25,6 +31,12 @@ exports.command = (memberid,guildid) => {
|
|||||||
* @returns {Boolean}
|
* @returns {Boolean}
|
||||||
*/
|
*/
|
||||||
exports.sendUserNoPerms = (user) => {
|
exports.sendUserNoPerms = (user) => {
|
||||||
|
bot.actionRecorder.push({
|
||||||
|
category:"ot.managers.permissionChecker",
|
||||||
|
file:"./core/permissionChecker.js",
|
||||||
|
time:new Date().getTime(),
|
||||||
|
type:"sendusernoperms"
|
||||||
|
})
|
||||||
try {
|
try {
|
||||||
user.send({embeds:[bot.errorLog.noPermsMessage(user)]})
|
user.send({embeds:[bot.errorLog.noPermsMessage(user)]})
|
||||||
return true
|
return true
|
||||||
@@ -39,6 +51,12 @@ exports.sendUserNoPerms = (user) => {
|
|||||||
* @returns {Boolean}
|
* @returns {Boolean}
|
||||||
*/
|
*/
|
||||||
exports.sendUserNoTicket = (user) => {
|
exports.sendUserNoTicket = (user) => {
|
||||||
|
bot.actionRecorder.push({
|
||||||
|
category:"ot.managers.permissionChecker",
|
||||||
|
file:"./core/permissionChecker.js",
|
||||||
|
time:new Date().getTime(),
|
||||||
|
type:"sendusernoticket"
|
||||||
|
})
|
||||||
try {
|
try {
|
||||||
user.send({embeds:[bot.errorLog.notInATicket]})
|
user.send({embeds:[bot.errorLog.notInATicket]})
|
||||||
return true
|
return true
|
||||||
@@ -53,6 +71,12 @@ exports.sendUserNoPerms = (user) => {
|
|||||||
* @returns {Boolean}
|
* @returns {Boolean}
|
||||||
*/
|
*/
|
||||||
exports.sendUserNoDelete = (user) => {
|
exports.sendUserNoDelete = (user) => {
|
||||||
|
bot.actionRecorder.push({
|
||||||
|
category:"ot.managers.permissionChecker",
|
||||||
|
file:"./core/permissionChecker.js",
|
||||||
|
time:new Date().getTime(),
|
||||||
|
type:"sendusernodelete"
|
||||||
|
})
|
||||||
try {
|
try {
|
||||||
user.send({embeds:[bot.errorLog.noPermsDelete(user)]})
|
user.send({embeds:[bot.errorLog.noPermsDelete(user)]})
|
||||||
return true
|
return true
|
||||||
@@ -68,6 +92,12 @@ exports.sendUserNoPerms = (user) => {
|
|||||||
* @returns {Boolean}
|
* @returns {Boolean}
|
||||||
*/
|
*/
|
||||||
exports.sendChannelNoPerms = (channel,user) => {
|
exports.sendChannelNoPerms = (channel,user) => {
|
||||||
|
bot.actionRecorder.push({
|
||||||
|
category:"ot.managers.permissionChecker",
|
||||||
|
file:"./core/permissionChecker.js",
|
||||||
|
time:new Date().getTime(),
|
||||||
|
type:"sendchannelnoperms"
|
||||||
|
})
|
||||||
try {
|
try {
|
||||||
channel.send({embeds:[bot.errorLog.noPermsMessage(user)]})
|
channel.send({embeds:[bot.errorLog.noPermsMessage(user)]})
|
||||||
return true
|
return true
|
||||||
@@ -83,6 +113,12 @@ exports.sendUserNoPerms = (user) => {
|
|||||||
* @returns {Boolean}
|
* @returns {Boolean}
|
||||||
*/
|
*/
|
||||||
exports.sendChannelNoTicket = (channel,user) => {
|
exports.sendChannelNoTicket = (channel,user) => {
|
||||||
|
bot.actionRecorder.push({
|
||||||
|
category:"ot.managers.permissionChecker",
|
||||||
|
file:"./core/permissionChecker.js",
|
||||||
|
time:new Date().getTime(),
|
||||||
|
type:"sendchannelnoticket"
|
||||||
|
})
|
||||||
try {
|
try {
|
||||||
channel.send({embeds:[bot.errorLog.notInATicket]})
|
channel.send({embeds:[bot.errorLog.notInATicket]})
|
||||||
return true
|
return true
|
||||||
@@ -98,6 +134,12 @@ exports.sendUserNoPerms = (user) => {
|
|||||||
* @returns {Boolean}
|
* @returns {Boolean}
|
||||||
*/
|
*/
|
||||||
exports.sendChannelNoDelete = (channel,user) => {
|
exports.sendChannelNoDelete = (channel,user) => {
|
||||||
|
bot.actionRecorder.push({
|
||||||
|
category:"ot.managers.permissionChecker",
|
||||||
|
file:"./core/permissionChecker.js",
|
||||||
|
time:new Date().getTime(),
|
||||||
|
type:"sendchannelnodelete"
|
||||||
|
})
|
||||||
try {
|
try {
|
||||||
channel.send({embeds:[bot.errorLog.noPermsDelete(user)]})
|
channel.send({embeds:[bot.errorLog.noPermsDelete(user)]})
|
||||||
return true
|
return true
|
||||||
|
|||||||
@@ -1,35 +1,61 @@
|
|||||||
// __________ __________ ___________ ____ ____
|
/**
|
||||||
// / ____ \ / ______ \ / | | \ | |
|
____ _____ ______ _ _ _______ _____ _____ _ ________ _______
|
||||||
// | / \ | | | | | | |_______| | \ | |
|
/ __ \| __ \| ____| \ | | |__ __|_ _/ ____| |/ / ____|__ __|
|
||||||
// | | | | | |____| | | | | |\ \ | |
|
| | | | |__) | |__ | \| | | | | || | | ' /| |__ | |
|
||||||
// | | | | | ________/ | |______ | | \ \ | |
|
| | | | ___/| __| | . ` | | | | || | | < | __| | |
|
||||||
// | | | | | | | _____| | | \ \ | |
|
| |__| | | | |____| |\ | | | _| || |____| . \| |____ | |
|
||||||
// | | | | | | | | | | \ \ | |
|
\____/|_| |______|_| \_| |_| |_____\_____|_|\_\______| |_|
|
||||||
// | | | | | | | |________ | | \ \| |
|
|
||||||
// | \____/ | | | | | | | \ |
|
Hey! we are looking for you!
|
||||||
// \__________/ |__| \__________| |__| \___|
|
Do you speak a language that isn't yet in our /languages directory
|
||||||
|
or do you speak one that isn't up-to-date? Open Ticket needs
|
||||||
|
translators for lots of different languages!
|
||||||
|
Feel free to join our translator team and help us improve Open Ticket!
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
SUGGESTING NEW FEATURES:
|
||||||
|
=====================
|
||||||
|
Open Ticket is a community project. This means that
|
||||||
|
almost all feature ideas come from our community.
|
||||||
|
Are you missing something you want in open ticket?
|
||||||
|
Then join our Discord server and we will add it (if possible)
|
||||||
|
|
||||||
|
Did you know that 80% of all features in OT were ideas from our community?
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
INFORMATION:
|
||||||
|
============
|
||||||
|
Open Ticket v3.4.1 - © DJdj Development
|
||||||
|
|
||||||
|
discord: https://discord.dj-dj.be
|
||||||
|
website: https://www.dj-dj.be
|
||||||
|
github: https://openticket.dj-dj.be
|
||||||
|
support e-mail: support@dj-dj.be
|
||||||
|
|
||||||
|
Config files:
|
||||||
|
./config.json
|
||||||
|
./transcriptconfig.json
|
||||||
|
|
||||||
|
Send ./openticketdebug.txt when there are errors!
|
||||||
|
*/
|
||||||
|
|
||||||
const discord = require("discord.js")
|
const discord = require("discord.js")
|
||||||
const fs = require('fs')
|
const fs = require('fs')
|
||||||
const {GatewayIntentBits,Partials} = discord
|
const {GatewayIntentBits,Partials} = discord
|
||||||
const APIBase = require("./core/api/modules/base")
|
const client = new discord.Client({
|
||||||
if (APIBase.embeddedMode){
|
intents:[
|
||||||
var tempClient = APIBase.clientLocation
|
GatewayIntentBits.DirectMessages,
|
||||||
}else{
|
GatewayIntentBits.GuildInvites,
|
||||||
var tempClient = new discord.Client({
|
GatewayIntentBits.GuildMembers,
|
||||||
intents:[
|
GatewayIntentBits.GuildMessages,
|
||||||
GatewayIntentBits.DirectMessages,
|
GatewayIntentBits.Guilds,
|
||||||
GatewayIntentBits.GuildInvites,
|
GatewayIntentBits.MessageContent
|
||||||
GatewayIntentBits.GuildMembers,
|
],
|
||||||
GatewayIntentBits.GuildMessages,
|
partials:[Partials.Channel,Partials.Message]
|
||||||
GatewayIntentBits.Guilds,
|
})
|
||||||
GatewayIntentBits.MessageContent
|
|
||||||
],
|
|
||||||
partials:[Partials.Channel,Partials.Message]
|
|
||||||
})
|
|
||||||
}
|
|
||||||
/**@type {discord.Client} */
|
|
||||||
const client = tempClient
|
|
||||||
exports.client = client
|
exports.client = client
|
||||||
client.setMaxListeners(50)
|
client.setMaxListeners(50)
|
||||||
if (process.argv.some((v) => v == "--debug")) console.log("[TEMP_DEBUG]","created client")
|
if (process.argv.some((v) => v == "--debug")) console.log("[TEMP_DEBUG]","created client")
|
||||||
@@ -39,42 +65,16 @@ var tempconfig = require("./config.json")
|
|||||||
var isDevConfig = false
|
var isDevConfig = false
|
||||||
|
|
||||||
if (process.argv.some((v) => v == "--devconfig")){
|
if (process.argv.some((v) => v == "--devconfig")){
|
||||||
async function logFLAGS(){
|
|
||||||
const chalk = await (await import("chalk")).default
|
|
||||||
console.log(chalk.blue("[FLAGS] => used dev config instead of normal config"))
|
|
||||||
}; logFLAGS()
|
|
||||||
isDevConfig = true
|
isDevConfig = true
|
||||||
try{
|
try{
|
||||||
tempconfig = require("./devConfig.json")
|
tempconfig = require("./devconfig.json")
|
||||||
}catch{tempconfig = require("./config.json")}
|
}catch{tempconfig = require("./config.json")}
|
||||||
}else{
|
}else{
|
||||||
tempconfig = require("./config.json")
|
tempconfig = require("./config.json")
|
||||||
}
|
}
|
||||||
if (process.argv.some((v) => v == "--nochecker")){
|
|
||||||
async function logFLAGS(){
|
|
||||||
const chalk = await (await import("chalk")).default
|
|
||||||
console.log(chalk.blue("[FLAGS] => disabled checker.js"))
|
|
||||||
}; logFLAGS()
|
|
||||||
}
|
|
||||||
if (process.argv.some((v) => v == "--tsoffline")){
|
|
||||||
async function logFLAGS(){
|
|
||||||
const chalk = await (await import("chalk")).default
|
|
||||||
console.log(chalk.blue("[FLAGS] => offline check for html transcripts disabled!"))
|
|
||||||
}; logFLAGS()
|
|
||||||
}
|
|
||||||
if (process.argv.some((v) => v == "--debug")){
|
|
||||||
async function logFLAGS(){
|
|
||||||
const chalk = await (await import("chalk")).default
|
|
||||||
console.log(chalk.blue("[FLAGS] => enabled DEBUG mode"))
|
|
||||||
}; logFLAGS()
|
|
||||||
}
|
|
||||||
if (process.argv.some((v) => v == "--debug")) console.log("[TEMP_DEBUG]","loaded flags")
|
if (process.argv.some((v) => v == "--debug")) console.log("[TEMP_DEBUG]","loaded flags")
|
||||||
|
|
||||||
exports.developerConfig = isDevConfig
|
exports.developerConfig = isDevConfig
|
||||||
const language = require("./core/languageManager").language
|
|
||||||
exports.language = language
|
|
||||||
if (process.argv.some((v) => v == "--debug")) console.log("[TEMP_DEBUG]","loaded language")
|
|
||||||
|
|
||||||
|
|
||||||
const config = tempconfig
|
const config = tempconfig
|
||||||
exports.config = config
|
exports.config = config
|
||||||
@@ -82,16 +82,21 @@ exports.config = config
|
|||||||
const tsconfig = isDevConfig ? require("./devtsconfig.json") : require("./transcriptconfig.json")
|
const tsconfig = isDevConfig ? require("./devtsconfig.json") : require("./transcriptconfig.json")
|
||||||
exports.tsconfig = tsconfig
|
exports.tsconfig = tsconfig
|
||||||
|
|
||||||
|
const language = require("./core/languageManager").language
|
||||||
|
exports.language = language
|
||||||
|
if (process.argv.some((v) => v == "--debug")) console.log("[TEMP_DEBUG]","loaded language")
|
||||||
|
|
||||||
if (process.argv.some((v) => v == "--debug")) console.log("[TEMP_DEBUG]","loaded config")
|
if (process.argv.some((v) => v == "--debug")) console.log("[TEMP_DEBUG]","loaded config")
|
||||||
exports.storage = require('./core/dynamicdatabase/storage')
|
exports.storage = require('./core/dynamicdatabase/storage')
|
||||||
if (process.argv.some((v) => v == "--debug")) console.log("[TEMP_DEBUG]","loaded storage")
|
if (process.argv.some((v) => v == "--debug")) console.log("[TEMP_DEBUG]","loaded storage")
|
||||||
|
|
||||||
exports.errorLog = require("./core/errorLogSystem")
|
exports.errorLog = require("./core/errorLogSystem")
|
||||||
const log = this.errorLog.log
|
|
||||||
if (process.argv.some((v) => v == "--debug")) console.log("[TEMP_DEBUG]","LOADED LOGGING SYSTEM")
|
if (process.argv.some((v) => v == "--debug")) console.log("[TEMP_DEBUG]","LOADED LOGGING SYSTEM")
|
||||||
if (process.argv.some((v) => v == "--debug")) console.log("[TEMP_DEBUG]","switching to new logs")
|
if (process.argv.some((v) => v == "--debug")) console.log("[TEMP_DEBUG]","switching to new logs")
|
||||||
this.errorLog.log("debug","loaded new logs")
|
this.errorLog.log("debug","loaded new logs")
|
||||||
|
|
||||||
|
exports.actionRecorder = require("./core/utils/liveStatus").actionRecorder
|
||||||
|
|
||||||
exports.hiddenData = require("./core/utils/hiddendata")
|
exports.hiddenData = require("./core/utils/hiddendata")
|
||||||
this.errorLog.log("debug","loaded hiddendataTM")
|
this.errorLog.log("debug","loaded hiddendataTM")
|
||||||
|
|
||||||
@@ -107,6 +112,12 @@ this.errorLog.log("debug","loaded buttons & embeds")
|
|||||||
|
|
||||||
client.on('ready',async () => {
|
client.on('ready',async () => {
|
||||||
this.errorLog.log("debug","client logged in")
|
this.errorLog.log("debug","client logged in")
|
||||||
|
this.actionRecorder.push({
|
||||||
|
category:"ot.managers.djs",
|
||||||
|
file:"index.js",
|
||||||
|
time:new Date().getTime(),
|
||||||
|
type:"client.loggedin.success"
|
||||||
|
})
|
||||||
var statusSet = false
|
var statusSet = false
|
||||||
const setStatus = (type,text) => {
|
const setStatus = (type,text) => {
|
||||||
if (statusSet == true) return
|
if (statusSet == true) return
|
||||||
@@ -118,98 +129,147 @@ client.on('ready',async () => {
|
|||||||
}
|
}
|
||||||
client.user.setActivity(text,{type:getTypeEnum(type)})
|
client.user.setActivity(text,{type:getTypeEnum(type)})
|
||||||
statusSet = true
|
statusSet = true
|
||||||
log("system","loaded status",[{key:"type",value:type},{key:"text",value:text}])
|
|
||||||
}
|
}
|
||||||
this.errorLog.log("debug","bot status loaded")
|
this.errorLog.log("debug","bot status loaded")
|
||||||
|
this.actionRecorder.push({
|
||||||
|
category:"ot.managers.djs",
|
||||||
|
file:"index.js",
|
||||||
|
time:new Date().getTime(),
|
||||||
|
type:"client.setstatus.success"
|
||||||
|
})
|
||||||
|
|
||||||
const chalk = await (await import("chalk")).default
|
const chalk = await (await import("chalk")).default
|
||||||
|
|
||||||
if (!process.argv[2]){
|
require("./core/startscreen").run()
|
||||||
console.log(chalk.red("WELCOME TO OPEN TICKET!"))
|
this.actionRecorder.push({
|
||||||
this.errorLog.log("debug","loaded console interface")
|
category:"ot.managers.main",
|
||||||
log("info","open ticket ready",[{key:"version",value:require("./package.json").version},{key:"language",value:config.languagefile}])
|
file:"index.js",
|
||||||
require("./core/utils/liveStatus")()
|
time:new Date().getTime(),
|
||||||
|
type:"startscreen.success"
|
||||||
|
})
|
||||||
|
|
||||||
|
if (!process.argv[2] || (process.argv[2] && !process.argv[2].startsWith("slash"))){
|
||||||
|
//normal start
|
||||||
|
this.errorLog.log("debug","loaded console interface")
|
||||||
|
|
||||||
console.log(chalk.blue("\n\nlogs:")+"\n============")
|
|
||||||
if (config.status.enabled){
|
if (config.status.enabled){
|
||||||
setStatus(config.status.type,config.status.text)
|
setStatus(config.status.type,config.status.text)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fs.existsSync("./storage/slashcmdEnabled.txt")){
|
this.actionRecorder.push({
|
||||||
/**@type {"true"|"false"} */
|
category:"ot.managers.main",
|
||||||
const data = fs.readFileSync("./storage/slashcmdEnabled.txt").toString()
|
file:"index.js",
|
||||||
if (data === "true"){require("./core/slashSystem/autoSlashUpdate")()}
|
time:new Date().getTime(),
|
||||||
}else{fs.writeFileSync("./storage/slashcmdEnabled.txt","false")}
|
type:"startmode.normal"
|
||||||
|
})
|
||||||
|
|
||||||
log("system","bot logged in!")
|
var updatingSlash = false
|
||||||
|
if (fs.existsSync("./storage/slashcmdEnabled.txt")){
|
||||||
|
/**@type {"true"|"false"|String} */
|
||||||
|
const data = fs.readFileSync("./storage/slashcmdEnabled.txt").toString()
|
||||||
|
if (data === require("./package.json").version){
|
||||||
|
require("./core/slashSystem/autoSlashUpdate")()
|
||||||
|
updatingSlash = true
|
||||||
|
|
||||||
|
}else if ((data != require("./package.json").version) && (data != "false")){
|
||||||
|
require("./core/slashSystem/slashEnable")(true)
|
||||||
|
updatingSlash = true
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
if (process.argv.some((v) => v == "--noslash")){
|
||||||
|
fs.writeFileSync("./storage/slashcmdEnabled.txt","false")
|
||||||
|
}else{
|
||||||
|
fs.writeFileSync("./storage/slashcmdEnabled.txt",require("./package.json").version)
|
||||||
|
require("./core/slashSystem/slashEnable")(true)
|
||||||
|
updatingSlash = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.actionRecorder.push({
|
||||||
|
category:"ot.managers.main",
|
||||||
|
file:"index.js",
|
||||||
|
time:new Date().getTime(),
|
||||||
|
type:"slashcmd.autoupdate.success"
|
||||||
|
})
|
||||||
|
|
||||||
try {
|
try {
|
||||||
await client.guilds.cache.find((g) => g.id == config.server_id).members.fetch()
|
await client.guilds.cache.find((g) => g.id == config.serverId).members.fetch()
|
||||||
}catch{
|
}catch{
|
||||||
this.errorLog.log("info","tried to cache user information, failed!")
|
this.errorLog.log("info","tried to cache user information, failed!")
|
||||||
}
|
}
|
||||||
return
|
require("./core/startscreen").headerDataReady(chalk,config.status,updatingSlash,false)
|
||||||
}
|
|
||||||
|
|
||||||
if (process.argv[2] == "d"){
|
|
||||||
if (config.status.enabled){
|
|
||||||
setStatus(config.status.type,config.status.text)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!process.argv[2].startsWith("slash")){
|
|
||||||
console.log(chalk.red("WELCOME TO OPEN TICKET!"))
|
|
||||||
this.errorLog.log("debug","loaded console interface")
|
|
||||||
log("info","open ticket ready",[{key:"version",value:require("./package.json").version},{key:"language",value:config.languagefile}])
|
|
||||||
require("./core/utils/liveStatus")()
|
|
||||||
|
|
||||||
console.log(chalk.blue("\n\nlogs:")+"\n============")
|
|
||||||
if (config.status.enabled){
|
|
||||||
setStatus(config.status.type,config.status.text)
|
|
||||||
}
|
|
||||||
if (fs.existsSync("./storage/slashcmdEnabled.txt")){
|
|
||||||
/**@type {"true"|"false"} */
|
|
||||||
const data = fs.readFileSync("./storage/slashcmdEnabled.txt").toString()
|
|
||||||
if (data === "true"){require("./core/slashSystem/autoSlashUpdate")()}
|
|
||||||
}else{fs.writeFileSync("./storage/slashcmdEnabled.txt","false")}
|
|
||||||
|
|
||||||
log("system","bot logged in!")
|
|
||||||
|
|
||||||
try {
|
|
||||||
await client.guilds.cache.find((g) => g.id == config.server_id).members.fetch()
|
|
||||||
}catch{
|
|
||||||
this.errorLog.log("info","tried to cache user information, failed!")
|
|
||||||
}
|
|
||||||
}else{
|
}else{
|
||||||
console.log(chalk.red("STARTING IN ")+chalk.blue("SLASH MODE")+chalk.red("..."))
|
//slash command activation using node index.js slash (enable|disable)
|
||||||
|
require("./core/startscreen").headerDataReady(chalk,config.status,updatingSlash,true)
|
||||||
this.errorLog.log("debug","slashmode activated")
|
this.errorLog.log("debug","slashmode activated")
|
||||||
console.log("logs:\n================")
|
|
||||||
console.log("client logged in...")
|
|
||||||
console.log("loading files...")
|
|
||||||
if (process.argv[3] == "enable"){
|
if (process.argv[3] == "enable"){
|
||||||
console.log(chalk.green("switching to slashEnable.js"))
|
console.log(chalk.green("switching to slashEnable.js"))
|
||||||
|
this.actionRecorder.push({
|
||||||
|
category:"ot.managers.main",
|
||||||
|
file:"index.js",
|
||||||
|
time:new Date().getTime(),
|
||||||
|
type:"startmode.slash.enable"
|
||||||
|
})
|
||||||
require("./core/slashSystem/slashEnable")()
|
require("./core/slashSystem/slashEnable")()
|
||||||
}else if (process.argv[3] == "disable"){
|
}else if (process.argv[3] == "disable"){
|
||||||
console.log(chalk.green("switching to slashDisable.js"))
|
console.log(chalk.green("switching to slashDisable.js"))
|
||||||
|
this.actionRecorder.push({
|
||||||
|
category:"ot.managers.main",
|
||||||
|
file:"index.js",
|
||||||
|
time:new Date().getTime(),
|
||||||
|
type:"startmode.slash.disable"
|
||||||
|
})
|
||||||
require("./core/slashSystem/slashDisable")()
|
require("./core/slashSystem/slashDisable")()
|
||||||
}else{
|
}else{
|
||||||
console.log(chalk.red("[SLASH CMD MANAGER]: unknown slash mode!"))
|
console.log(chalk.bgRed("[SLASH CMD MANAGER]: unknown slash command action!"))
|
||||||
process.exit(1)
|
process.exit(1)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//load plugins
|
//load plugins
|
||||||
|
this.actionRecorder.push({
|
||||||
|
category:"ot.managers.plugins",
|
||||||
|
file:"./core/api/pluginlauncher.js",
|
||||||
|
time:new Date().getTime(),
|
||||||
|
type:"plugins.loading"
|
||||||
|
})
|
||||||
require("./core/api/pluginlauncher")()
|
require("./core/api/pluginlauncher")()
|
||||||
|
this.actionRecorder.push({
|
||||||
|
category:"ot.managers.plugins",
|
||||||
|
file:"./core/api/pluginlauncher.js",
|
||||||
|
time:new Date().getTime(),
|
||||||
|
type:"plugins.success"
|
||||||
|
})
|
||||||
this.errorLog.log("debug","loading plugins")
|
this.errorLog.log("debug","loading plugins")
|
||||||
})
|
})
|
||||||
if (!require("./core/api/api.json").disable.checkerjs.all) require("./core/checker").checker()
|
if (!require("./core/api/api.json").disable.checkerjs.all){
|
||||||
|
this.actionRecorder.push({
|
||||||
|
category:"ot.managers.main",
|
||||||
|
file:"./core/checker.js",
|
||||||
|
time:new Date().getTime(),
|
||||||
|
type:"checker.loading"
|
||||||
|
})
|
||||||
|
require("./core/checker").checker()
|
||||||
this.errorLog.log("debug","loading checker.js")
|
this.errorLog.log("debug","loading checker.js")
|
||||||
this.errorLog.log("debug","checking config...")
|
this.errorLog.log("debug","checking config...")
|
||||||
|
this.actionRecorder.push({
|
||||||
|
category:"ot.managers.main",
|
||||||
|
file:"./core/checker.js",
|
||||||
|
time:new Date().getTime(),
|
||||||
|
type:"checker.success"
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
if (process.argv[2] && process.argv[2].startsWith("slash")){
|
if (process.argv[2] && process.argv[2].startsWith("slash")){
|
||||||
//do nothing
|
//do nothing
|
||||||
}else{
|
}else{
|
||||||
|
|
||||||
|
this.actionRecorder.push({
|
||||||
|
category:"ot.managers.loader",
|
||||||
|
file:"./index.js",
|
||||||
|
time:new Date().getTime(),
|
||||||
|
type:"commands.loading"
|
||||||
|
})
|
||||||
this.errorLog.log("debug","LOADING COMMANDS")
|
this.errorLog.log("debug","LOADING COMMANDS")
|
||||||
//commands
|
//commands
|
||||||
require('./commands/ticket')()
|
require('./commands/ticket')()
|
||||||
@@ -223,23 +283,61 @@ if (process.argv[2] && process.argv[2].startsWith("slash")){
|
|||||||
require("./commands/claim")()
|
require("./commands/claim")()
|
||||||
require("./commands/unclaim")()
|
require("./commands/unclaim")()
|
||||||
require("./commands/change")()
|
require("./commands/change")()
|
||||||
|
this.actionRecorder.push({
|
||||||
|
category:"ot.managers.loader",
|
||||||
|
file:"./index.js",
|
||||||
|
time:new Date().getTime(),
|
||||||
|
type:"commands.success"
|
||||||
|
})
|
||||||
|
|
||||||
|
this.actionRecorder.push({
|
||||||
|
category:"ot.managers.loader",
|
||||||
|
file:"./index.js",
|
||||||
|
time:new Date().getTime(),
|
||||||
|
type:"core.loading"
|
||||||
|
})
|
||||||
this.errorLog.log("debug","LOADING CORE")
|
this.errorLog.log("debug","LOADING CORE")
|
||||||
//core
|
//core
|
||||||
require('./core/ticketActions/ticketOpener')()
|
require('./core/ticketActions/ticketOpener')()
|
||||||
require("./core/reactionRoles")()
|
require("./core/reactionRoles")()
|
||||||
|
require("./core/ticketActions/ticketAutoclose")()
|
||||||
|
|
||||||
this.errorLog.log("debug","LOADING INTERACTION HANDLERS")
|
this.errorLog.log("debug","LOADING INTERACTION HANDLERS")
|
||||||
//InteractionHandlers
|
//InteractionHandlers
|
||||||
require("./core/interactionHandlers/handlers/handlers")()
|
require("./core/interactionHandlers/handlers/handlers")()
|
||||||
|
|
||||||
//require("./test")()
|
this.actionRecorder.push({
|
||||||
|
category:"ot.managers.loader",
|
||||||
|
file:"./index.js",
|
||||||
|
time:new Date().getTime(),
|
||||||
|
type:"core.success"
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.actionRecorder.push({
|
||||||
|
category:"ot.managers.loader",
|
||||||
|
file:"./index.js",
|
||||||
|
time:new Date().getTime(),
|
||||||
|
type:"api.loading"
|
||||||
|
})
|
||||||
this.errorLog.log("debug","loading api")
|
this.errorLog.log("debug","loading api")
|
||||||
const APIEvents = require("./core/api/modules/events")
|
const APIEvents = require("./core/api/modules/events")
|
||||||
const APIConfig = require("./core/api/api.json")
|
const APIConfig = require("./core/api/api.json")
|
||||||
|
|
||||||
|
this.actionRecorder.push({
|
||||||
|
category:"ot.managers.loader",
|
||||||
|
file:"./index.js",
|
||||||
|
time:new Date().getTime(),
|
||||||
|
type:"api.success"
|
||||||
|
})
|
||||||
|
|
||||||
|
this.actionRecorder.push({
|
||||||
|
category:"ot.managers.loader",
|
||||||
|
file:"./index.js",
|
||||||
|
time:new Date().getTime(),
|
||||||
|
type:"debugsystem.loading"
|
||||||
|
})
|
||||||
|
|
||||||
const debugLog = (debugString) => {
|
const debugLog = (debugString) => {
|
||||||
if (!APIConfig.disable.debug.all && !APIConfig.disable.debug.debuglogs){
|
if (!APIConfig.disable.debug.all && !APIConfig.disable.debug.debuglogs){
|
||||||
const content = fs.existsSync("./openticketdebug.txt") ? fs.readFileSync("./openticketdebug.txt").toString() : "==========================\n<OPEN TICKET DEBUG FILE:>\n=========================="
|
const content = fs.existsSync("./openticketdebug.txt") ? fs.readFileSync("./openticketdebug.txt").toString() : "==========================\n<OPEN TICKET DEBUG FILE:>\n=========================="
|
||||||
@@ -270,7 +368,20 @@ process.on("uncaughtException",async (error,origin) => {
|
|||||||
errorLog(error.name+": "+error.message+" | origin: "+origin,error.stack)
|
errorLog(error.name+": "+error.message+" | origin: "+origin,error.stack)
|
||||||
|
|
||||||
APIEvents.onError(error.name+": "+error.message,new Date())
|
APIEvents.onError(error.name+": "+error.message,new Date())
|
||||||
|
|
||||||
|
//TEMPORARY INTEGRATION FOR LIVESTATUS ERROR UPLOADER:
|
||||||
|
try {
|
||||||
|
await require("./core/utils/liveStatus").liveStatusUploadManager(error.name+": "+error.message+" | origin: "+origin+"\n"+error.stack)
|
||||||
|
} catch {this.errorLog.log("info","FAILED TO AUTO-REPORT ERROR! (you can ignore this error)")}
|
||||||
})
|
})
|
||||||
|
|
||||||
if (!APIBase.embeddedMode) client.login(config.auth_token)
|
this.actionRecorder.push({
|
||||||
|
category:"ot.managers.loader",
|
||||||
|
file:"./index.js",
|
||||||
|
time:new Date().getTime(),
|
||||||
|
type:"debugsystem.success"
|
||||||
|
})
|
||||||
|
|
||||||
|
const token = config.token.fromENV ? process.env.TOKEN : config.token.value
|
||||||
|
client.login(token)
|
||||||
this.errorLog.log("debug","login with token")
|
this.errorLog.log("debug","login with token")
|
||||||
+82
-68
@@ -1,79 +1,93 @@
|
|||||||
{
|
{
|
||||||
"errors": {
|
"_CREDITS":"ChilledBroke#9986 & M4#5882",
|
||||||
"missingArgsTitle": "قيمة غير صالحة!",
|
"_INFO":"This file is a translation for open ticket 3.4.1",
|
||||||
"missingArgsDescription": "قيمة مفقودة",
|
|
||||||
"noPermsTitle": "ليس لديك برمشنات !",
|
|
||||||
"noPermsDescription": "أنت بحاجة الى برمشن `ADMINISTRATOR` او أن تكون في قائمة المسموح بهم!",
|
|
||||||
"noPermsDelete": "فقط الإداريين يمكنهم حذف التكت!",
|
|
||||||
"chooseFromListTitle": "Invalid ID",
|
|
||||||
"chooseFromListDescription": "قم بأختيار أحد من الأيديات من الأسفل:",
|
|
||||||
"boterror": "خلل في البوت !",
|
|
||||||
"notInTicketTitle": "انت لست في تكت!",
|
|
||||||
"notInTicketDescription": "هذا الأمر لا يعمل خارج التكت!",
|
|
||||||
"ticketDoesntExist": "هذا التكت لم يعد فعال!",
|
|
||||||
"roleDoesntExist": "خطاً ,لم تعد الرتبة موجوده!",
|
|
||||||
"anotherOption": "هذا الخيار ليس التكت و لكنه شيء أخر!",
|
|
||||||
"maxAmountTitle": "خطأ , تم الوصول الى الحد الأقصى!",
|
|
||||||
"maxAmountDescription": "لقد وصلت الى الحد الأقصى لعدد التكتات المسموحة بها!\nSo لا يمكنك فتح واحدة أخرى!",
|
|
||||||
"somethingWentWrong": "**هناك خطاً!**\nأعد المحاولة لاحقاً!"
|
|
||||||
},
|
|
||||||
"commands": {
|
|
||||||
"userAddedTitle": "تم أضافة {0} من المستخدمين في التكت!",
|
|
||||||
"userRemovedTitle": "تم أزالة {0} من المستخدمين من التكت!",
|
|
||||||
"renameTitle": "تم تغيير أسم التكت الى {0}!",
|
|
||||||
"closeTitle": "تم أغلاق التكت!",
|
|
||||||
"deleteTitle": " جاري حذف التكت...",
|
|
||||||
"reopenTitle": "إعادة فتح التكت!",
|
|
||||||
"claimTitle":"This ticket is now claimed to {0}",
|
|
||||||
"unclaimTitle":"This ticket isn't claimed anymore!",
|
|
||||||
"changeTitle":"Changed ticket type to {0}!",
|
|
||||||
|
|
||||||
"ticketWarning": "هذا الأمبد موجود بالفعل في الرسالة بالأسفل!",
|
"errors": {
|
||||||
"maxTicketWarning": "**تحذير:** _يمكنك فقط فتح {0} تكت في الوقت!_"
|
"missingArgsTitle": "قيمة غير صالحة!",
|
||||||
},
|
"missingArgsDescription": "قيمة مفقودة",
|
||||||
"helpMenu": {
|
"noPermsTitle": "ليس لديك برمشنات !",
|
||||||
"title": "الأوامر المتاحة:",
|
"noPermsDescription": "أنت بحاجة الى برمشن `ADMINISTRATOR` او أن تكون في قائمة المسموح بهم!",
|
||||||
"header1": "**أذهب الى {0} لإنشاء تذكرة!**\n\n",
|
"noPermsDelete": "فقط الإداريين يمكنهم حذف التكت!",
|
||||||
"header2": "**قم بكتابة أمر `/new` او `/ticket` لفتح تكت!**\n\n",
|
"chooseFromListTitle": "Invalid ID",
|
||||||
|
"chooseFromListDescription": "قم بأختيار أحد من الأيديات من الأسفل:",
|
||||||
|
"boterror": "خلل في البوت !",
|
||||||
|
"notInTicketTitle": "انت لست في تكت!",
|
||||||
|
"notInTicketDescription": "هذا الأمر لا يعمل خارج التكت!",
|
||||||
|
"ticketDoesntExist": "هذا التكت لم يعد فعال!",
|
||||||
|
"roleDoesntExist": "خطاً ,لم تعد الرتبة موجوده!",
|
||||||
|
"anotherOption": "هذا الخيار ليس التكت و لكنه شيء أخر!",
|
||||||
|
"maxAmountTitle": "خطأ , تم الوصول الى الحد الأقصى!",
|
||||||
|
"maxAmountDescription": "لقد وصلت الى الحد الأقصى لعدد التكتات المسموحة بها!\nSo لا يمكنك فتح واحدة أخرى!",
|
||||||
|
"somethingWentWrong": "**هناك خطاً!**\nأعد المحاولة لاحقاً!"
|
||||||
|
},
|
||||||
|
"commands": {
|
||||||
|
"userAddedTitle": "تم أضافة {0} من المستخدمين في التكت!",
|
||||||
|
"userRemovedTitle": "تم أزالة {0} من المستخدمين من التكت!",
|
||||||
|
"renameTitle": "تم تغيير أسم التكت الى {0}!",
|
||||||
|
"closeTitle": "تم أغلاق التكت!",
|
||||||
|
"deleteTitle": " جاري حذف التكت...",
|
||||||
|
"reopenTitle": "إعادة فتح التكت!",
|
||||||
|
|
||||||
"msgCmd": "أنشاء أيمبد مع الأزرار. (الأداريين فقط)",
|
"claimTitle":"This ticket is now claimed to {0}",
|
||||||
"renameCmd": "إعادة تسمية التكت. (بدون مسافات)",
|
"unclaimTitle":"This ticket isn't claimed anymore!",
|
||||||
"closeCmd": "أغلاق التكت.",
|
"changeTitle":"Changed ticket type to {0}!",
|
||||||
"deleteCmd": "حذف التكت.",
|
|
||||||
"addCmd": "إضافة مستخدم الى التكت.",
|
|
||||||
"removeCmd": "إزالة مستخدم من التكت.",
|
|
||||||
"reopenCmd": "إعادة فتح تكت بعد إغلاقة."
|
|
||||||
},
|
|
||||||
"buttons": {
|
|
||||||
"close": "إغلاق التكت",
|
|
||||||
"delete": "حذف التكت",
|
|
||||||
"reopen": "إعادة فتح التكت",
|
|
||||||
"closeWithReason":"close with reason"
|
|
||||||
},
|
|
||||||
"messages": {
|
|
||||||
"reopenTitle": "تم إعادة فتح التكت بنجاح!",
|
|
||||||
"reopenDescription": "لا تتردد في فتح التكت مرة أخرى , حظاً موفقاً!",
|
|
||||||
"closedTitle": "تم إغلاق التكت!",
|
|
||||||
"closedDescription": "فقط الأداريين يمكنهم التحدث في هذا التكت الأن!\n\n*أضغط على الزر بالأسفل لحذف التكت او إعادة فتحة مجدداً!*",
|
|
||||||
"createdTitle": "تم إنشاء تكت!",
|
|
||||||
"createdDescription": "تم أنشاء تكت , قم بأنتظار الدعم في الطريق!",
|
|
||||||
|
|
||||||
"newTicketDmTitle": "تكت جديد!",
|
"statsTitle":"Here are the stats for {0}!",
|
||||||
"closedTicketDmTitle": "تم إغلاق التكت!",
|
"autocloseTitle":"This ticket will be closed automatically after {0}!",
|
||||||
"deletedTicketDmTitle": "تم حذف التكت!",
|
"autocloseRejectTitle":"This ticket will no longer be closed automatically!",
|
||||||
"closedTicketDmDescription": "تم أغلاق تذكرتك من قبل إداري",
|
"autocloseWarn":"This only affects inactive tickets!",
|
||||||
"deletedTicketDmDescription": "تم حذف تذكرتك من قبل إداري!",
|
|
||||||
"reopenTicketDmTitle": "تم إعادة فتح تذكرتك!",
|
|
||||||
"reopenTicketDmDescription": "تم إعادة فتح التكت!",
|
|
||||||
|
|
||||||
"chooseCategory": "أختر الكتقاجوري:",
|
"goToTicket":"go to ticket",
|
||||||
"gettingdeleted": "يتم حذف التكت...",
|
"ticketWarning": "هذا الأمبد موجود بالفعل في الرسالة بالأسفل!",
|
||||||
|
"maxTicketWarning": "**تحذير:** _يمكنك فقط فتح {0} تكت في الوقت!_"
|
||||||
|
},
|
||||||
|
"helpMenu": {
|
||||||
|
"title": "الأوامر المتاحة:",
|
||||||
|
"header1": "**أذهب الى {0} لإنشاء تذكرة!**\n\n",
|
||||||
|
"header2": "**قم بكتابة أمر `/new` او `/ticket` لفتح تكت!**\n\n",
|
||||||
|
|
||||||
"none": "لا يوجد",
|
"msgCmd": "أنشاء أيمبد مع الأزرار. (الأداريين فقط)",
|
||||||
"reason": "سبب",
|
"renameCmd": "إعادة تسمية التكت. (بدون مسافات)",
|
||||||
|
"closeCmd": "أغلاق التكت.",
|
||||||
|
"deleteCmd": "حذف التكت.",
|
||||||
|
"addCmd": "إضافة مستخدم الى التكت.",
|
||||||
|
"removeCmd": "إزالة مستخدم من التكت.",
|
||||||
|
"reopenCmd": "إعادة فتح تكت بعد إغلاقة.",
|
||||||
|
"changeCmd":"Change ticket type.",
|
||||||
|
"claimCmd":"Claim a ticket.",
|
||||||
|
"unclaimCmd":"Unclaim a ticket.",
|
||||||
|
"statsCmd":"View ticket stats.",
|
||||||
|
"autocloseCmd":"Set timer to automatically close ticket"
|
||||||
|
},
|
||||||
|
"buttons": {
|
||||||
|
"close": "إغلاق التكت",
|
||||||
|
"delete": "حذف التكت",
|
||||||
|
"reopen": "إعادة فتح التكت",
|
||||||
|
"closeWithReason":"close with reason"
|
||||||
|
},
|
||||||
|
"messages": {
|
||||||
|
"closedDescription": "فقط الأداريين يمكنهم التحدث في هذا التكت الأن!\n\n*أضغط على الزر بالأسفل لحذف التكت او إعادة فتحة مجدداً!*",
|
||||||
|
"createdTitle": "تم إنشاء تكت!",
|
||||||
|
"createdDescription": "تم أنشاء تكت , قم بأنتظار الدعم في الطريق!",
|
||||||
|
|
||||||
"deletedby":"deleted by",
|
"newTicketDmTitle": "تكت جديد!",
|
||||||
|
"closedTicketDmTitle": "تم إغلاق التكت!",
|
||||||
|
"deletedTicketDmTitle": "تم حذف التكت!",
|
||||||
|
"closedTicketDmDescription": "تم أغلاق تذكرتك من قبل إداري",
|
||||||
|
"deletedTicketDmDescription": "تم حذف تذكرتك من قبل إداري!",
|
||||||
|
"reopenTicketDmTitle": "تم إعادة فتح تذكرتك!",
|
||||||
|
"reopenTicketDmDescription": "تم إعادة فتح التكت!",
|
||||||
|
|
||||||
|
"chooseCategory": "أختر الكتقاجوري:",
|
||||||
|
"gettingdeleted": "يتم حذف التكت...",
|
||||||
|
|
||||||
|
"none": "لا يوجد",
|
||||||
|
"reason": "سبب",
|
||||||
|
"createdat":"created at",
|
||||||
|
"openedby":"opened by",
|
||||||
|
"deletedby":"deleted by",
|
||||||
"closedby":"closed by",
|
"closedby":"closed by",
|
||||||
|
|
||||||
"modalreason":"What is the reason for closing this ticket?",
|
"modalreason":"What is the reason for closing this ticket?",
|
||||||
"chooseATicket": "Choose a ticket"
|
"chooseATicket": "Choose a ticket"
|
||||||
},
|
},
|
||||||
|
|||||||
+20
-6
@@ -1,4 +1,7 @@
|
|||||||
{
|
{
|
||||||
|
"_CREDITS":"DJdj Development",
|
||||||
|
"_INFO":"This file is a translation for open ticket 3.4.1",
|
||||||
|
|
||||||
"errors":{
|
"errors":{
|
||||||
"missingArgsTitle":"Invalid Arguments!",
|
"missingArgsTitle":"Invalid Arguments!",
|
||||||
"missingArgsDescription":"Missing Argument",
|
"missingArgsDescription":"Missing Argument",
|
||||||
@@ -24,10 +27,17 @@
|
|||||||
"closeTitle":"Closed this ticket!",
|
"closeTitle":"Closed this ticket!",
|
||||||
"deleteTitle":"Deleting this ticket...",
|
"deleteTitle":"Deleting this ticket...",
|
||||||
"reopenTitle":"Re-Opened this ticket!",
|
"reopenTitle":"Re-Opened this ticket!",
|
||||||
"claimTitle":"This ticket is now claimed to {0}",
|
|
||||||
|
"claimTitle":"This ticket is claimed to {0}",
|
||||||
"unclaimTitle":"This ticket isn't claimed anymore!",
|
"unclaimTitle":"This ticket isn't claimed anymore!",
|
||||||
"changeTitle":"Changed ticket type to {0}!",
|
"changeTitle":"Changed ticket type to {0}!",
|
||||||
|
|
||||||
|
"statsTitle":"Here are the stats for {0}!",
|
||||||
|
"autocloseTitle":"This ticket will be closed automatically after {0}!",
|
||||||
|
"autocloseRejectTitle":"This ticket will no longer be closed automatically!",
|
||||||
|
"autocloseWarn":"This only affects inactive tickets!",
|
||||||
|
|
||||||
|
"goToTicket":"go to ticket",
|
||||||
"ticketWarning":"The embed is in the message below!",
|
"ticketWarning":"The embed is in the message below!",
|
||||||
"maxTicketWarning":"**Warning:** _You can only create {0} ticket(s) at a time!_"
|
"maxTicketWarning":"**Warning:** _You can only create {0} ticket(s) at a time!_"
|
||||||
},
|
},
|
||||||
@@ -42,7 +52,12 @@
|
|||||||
"deleteCmd":"Delete a ticket.",
|
"deleteCmd":"Delete a ticket.",
|
||||||
"addCmd":"Add a user to the ticket.",
|
"addCmd":"Add a user to the ticket.",
|
||||||
"removeCmd":"Remove a user from the ticket.",
|
"removeCmd":"Remove a user from the ticket.",
|
||||||
"reopenCmd":"Re-Open a ticket after it was closed."
|
"reopenCmd":"Re-Open a ticket after it was closed.",
|
||||||
|
"changeCmd":"Change ticket type.",
|
||||||
|
"claimCmd":"Claim a ticket.",
|
||||||
|
"unclaimCmd":"Unclaim a ticket.",
|
||||||
|
"statsCmd":"View ticket stats.",
|
||||||
|
"autocloseCmd":"Set timer to automatically close ticket"
|
||||||
},
|
},
|
||||||
"buttons":{
|
"buttons":{
|
||||||
"close":"Close Ticket",
|
"close":"Close Ticket",
|
||||||
@@ -51,9 +66,6 @@
|
|||||||
"closeWithReason":"close with reason"
|
"closeWithReason":"close with reason"
|
||||||
},
|
},
|
||||||
"messages":{
|
"messages":{
|
||||||
"reopenTitle":"Re-Opened this ticket!",
|
|
||||||
"reopenDescription":"Feel free to talk again!",
|
|
||||||
"closedTitle":"Closed this ticket!",
|
|
||||||
"closedDescription":"Only admins can talk in this ticket now!\n\n*Click on the button below to delete or to re-open this ticket!*",
|
"closedDescription":"Only admins can talk in this ticket now!\n\n*Click on the button below to delete or to re-open this ticket!*",
|
||||||
"createdTitle":"Ticket Created!",
|
"createdTitle":"Ticket Created!",
|
||||||
"createdDescription":"Your ticket is created, you can detect it by a ping!",
|
"createdDescription":"Your ticket is created, you can detect it by a ping!",
|
||||||
@@ -71,9 +83,11 @@
|
|||||||
|
|
||||||
"none":"none",
|
"none":"none",
|
||||||
"reason":"reason",
|
"reason":"reason",
|
||||||
|
"createdat":"created at",
|
||||||
|
"openedby":"opened by",
|
||||||
"deletedby":"deleted by",
|
"deletedby":"deleted by",
|
||||||
"closedby":"closed by",
|
"closedby":"closed by",
|
||||||
|
|
||||||
"modalreason":"What is the reason for closing this ticket?",
|
"modalreason":"What is the reason for closing this ticket?",
|
||||||
"chooseATicket": "Choose a ticket"
|
"chooseATicket": "Choose a ticket"
|
||||||
},
|
},
|
||||||
|
|||||||
+22
-8
@@ -1,4 +1,7 @@
|
|||||||
{
|
{
|
||||||
|
"_CREDITS":"t0miiis#3022",
|
||||||
|
"_INFO":"This file is a translation for open ticket 3.4.1",
|
||||||
|
|
||||||
"errors":{
|
"errors":{
|
||||||
"missingArgsTitle":"Neplatny Argument!",
|
"missingArgsTitle":"Neplatny Argument!",
|
||||||
"missingArgsDescription":"Chybí Argument",
|
"missingArgsDescription":"Chybí Argument",
|
||||||
@@ -24,10 +27,17 @@
|
|||||||
"closeTitle":"Zavři tenhle ticket!",
|
"closeTitle":"Zavři tenhle ticket!",
|
||||||
"deleteTitle":"Mažu ticket...",
|
"deleteTitle":"Mažu ticket...",
|
||||||
"reopenTitle":"Znovu otevíram ticket",
|
"reopenTitle":"Znovu otevíram ticket",
|
||||||
"claimTitle":"Nyní jsi převzal ticket {0}",
|
|
||||||
"unclaimTitle":"Tento ticketu už je převzatý!",
|
|
||||||
"changeTitle":"Změnil jsi typ ticketu na {0}!",
|
|
||||||
|
|
||||||
|
"claimTitle":"Ticket nyní převzal {0}",
|
||||||
|
"unclaimTitle":"Ticket už není převzaný",
|
||||||
|
"changeTitle":"Změněn typ ticketu {0}!",
|
||||||
|
|
||||||
|
"statsTitle":"Tady je info o ticketu {0}!",
|
||||||
|
"autocloseTitle":"Tento ticketu bude automaticky uzavřen za {0}!",
|
||||||
|
"autocloseRejectTitle":"Tento ticketu už nebude automaticky uzavřen!",
|
||||||
|
"autocloseWarn":"Toto zavře pouze neaktivní tickety!",
|
||||||
|
|
||||||
|
"goToTicket":"běž do ticketu",
|
||||||
"ticketWarning":"The embed is in the message below!",
|
"ticketWarning":"The embed is in the message below!",
|
||||||
"maxTicketWarning":"**Warning:** _Můžeš vytvořit pouze {0} v tuhle chvíli!_"
|
"maxTicketWarning":"**Warning:** _Můžeš vytvořit pouze {0} v tuhle chvíli!_"
|
||||||
},
|
},
|
||||||
@@ -42,7 +52,12 @@
|
|||||||
"deleteCmd":"Odstranit ticket.",
|
"deleteCmd":"Odstranit ticket.",
|
||||||
"addCmd":"Pridat uživatele do ticketu.",
|
"addCmd":"Pridat uživatele do ticketu.",
|
||||||
"removeCmd":"Odebrat uživatele z ticketu.",
|
"removeCmd":"Odebrat uživatele z ticketu.",
|
||||||
"reopenCmd":"Re-Open a ticket after it was closed."
|
"reopenCmd":"Re-Open a ticket after it was closed.",
|
||||||
|
"changeCmd":"Změnit typ ticketu.",
|
||||||
|
"claimCmd":"Převzi ticket.",
|
||||||
|
"unclaimCmd":"Uvolnit ticket.",
|
||||||
|
"statsCmd":"Zobrazit info o ticketu.",
|
||||||
|
"autocloseCmd":"Nastavit automatické uzavření ticketu"
|
||||||
},
|
},
|
||||||
"buttons":{
|
"buttons":{
|
||||||
"close":"Zavřit ticket",
|
"close":"Zavřit ticket",
|
||||||
@@ -51,9 +66,6 @@
|
|||||||
"closeWithReason":"zavřít s důvodem"
|
"closeWithReason":"zavřít s důvodem"
|
||||||
},
|
},
|
||||||
"messages":{
|
"messages":{
|
||||||
"reopenTitle":"Znovu otevřit ticket!",
|
|
||||||
"reopenDescription":"Klidně napiš znova!",
|
|
||||||
"closedTitle":"Zavřít tenhle ticket!",
|
|
||||||
"closedDescription":"Pouze admini muzou zde psát ted!\n\n*Klikni na tlačítko níže pro smazání nebo pro znovu otevření tohohle ticketu!*",
|
"closedDescription":"Pouze admini muzou zde psát ted!\n\n*Klikni na tlačítko níže pro smazání nebo pro znovu otevření tohohle ticketu!*",
|
||||||
"createdTitle":"Ticket otevřen!",
|
"createdTitle":"Ticket otevřen!",
|
||||||
"createdDescription":"Tvůj ticket je vytvořem, můžeš si ho všimnout pomocí pingu!",
|
"createdDescription":"Tvůj ticket je vytvořem, můžeš si ho všimnout pomocí pingu!",
|
||||||
@@ -71,9 +83,11 @@
|
|||||||
|
|
||||||
"none":"žádný",
|
"none":"žádný",
|
||||||
"reason":"důvod",
|
"reason":"důvod",
|
||||||
|
"createdat":"otevřeno v",
|
||||||
|
"openedby":"otevřel",
|
||||||
"deletedby":"smazano uzivatelem",
|
"deletedby":"smazano uzivatelem",
|
||||||
"closedby":"zavreno uzivatelem",
|
"closedby":"zavreno uzivatelem",
|
||||||
|
|
||||||
"modalreason":"Jakž byl důvod k zavření toho ticketu?",
|
"modalreason":"Jakž byl důvod k zavření toho ticketu?",
|
||||||
"chooseATicket": "Vyber ticket"
|
"chooseATicket": "Vyber ticket"
|
||||||
},
|
},
|
||||||
|
|||||||
+23
-9
@@ -1,5 +1,8 @@
|
|||||||
{
|
{
|
||||||
"errors": {
|
"_CREDITS":"the_gamer#5095",
|
||||||
|
"_INFO":"This file is a translation for open ticket 3.4.1",
|
||||||
|
|
||||||
|
"errors": {
|
||||||
"missingArgsTitle": "Ugyldigt Argument!",
|
"missingArgsTitle": "Ugyldigt Argument!",
|
||||||
"missingArgsDescription": "Manglende Argument",
|
"missingArgsDescription": "Manglende Argument",
|
||||||
"noPermsTitle": "Ikke tilladelse!",
|
"noPermsTitle": "Ikke tilladelse!",
|
||||||
@@ -24,10 +27,17 @@
|
|||||||
"closeTitle": "Lukket denne ticket!",
|
"closeTitle": "Lukket denne ticket!",
|
||||||
"deleteTitle": "Sletter denne ticket...",
|
"deleteTitle": "Sletter denne ticket...",
|
||||||
"reopenTitle": "Genåbnede denne ticket!",
|
"reopenTitle": "Genåbnede denne ticket!",
|
||||||
"claimTitle": "Denne ticket er nu krævet til {0}",
|
|
||||||
"unclaimTitle": "Der gøres ikke krav på denne ticket længere!",
|
|
||||||
"changeTitle": "Ændrede ticket type til {0}!",
|
|
||||||
|
|
||||||
|
"claimTitle": "Denne ticket bliver nu håndteret af {0}",
|
||||||
|
"unclaimTitle": "Denne ticket bliver ikke håndteret længere!",
|
||||||
|
"changeTitle": "Ændrede ticket-type til {0}!",
|
||||||
|
|
||||||
|
"statsTitle": "Her er statestikerne til {0}!",
|
||||||
|
"autocloseTitle": "Denne ticket lukker automatisk om {0}!",
|
||||||
|
"autocloseRejectTitle": "Denne ticket lukker ikke længere automatisk!",
|
||||||
|
"autocloseWarn": "Dette har kun effekt på inaktive tickets!",
|
||||||
|
|
||||||
|
"goToTicket": "gå til ticket",
|
||||||
"ticketWarning": "Embedet er i meddelelsen nedenfor!",
|
"ticketWarning": "Embedet er i meddelelsen nedenfor!",
|
||||||
"maxTicketWarning": "**Warning:** _Du kan kun oprette {0} ticket(s) ad gangen!_"
|
"maxTicketWarning": "**Warning:** _Du kan kun oprette {0} ticket(s) ad gangen!_"
|
||||||
},
|
},
|
||||||
@@ -42,7 +52,12 @@
|
|||||||
"deleteCmd": "Slet en ticket.",
|
"deleteCmd": "Slet en ticket.",
|
||||||
"addCmd": "Tilføj en bruger til ticketen.",
|
"addCmd": "Tilføj en bruger til ticketen.",
|
||||||
"removeCmd": "Fjern en bruger fra ticketen.",
|
"removeCmd": "Fjern en bruger fra ticketen.",
|
||||||
"reopenCmd": "Genåbn en ticket, efter at den var lukket."
|
"reopenCmd": "Genåbn en ticket, efter at den var lukket.",
|
||||||
|
"changeCmd": "Skift ticket type.",
|
||||||
|
"claimCmd": "Håndter en ticket.",
|
||||||
|
"unclaimCmd": "Afhåndter en ticket.",
|
||||||
|
"statsCmd": "Se ticket statestiker.",
|
||||||
|
"autocloseCmd": "Angiv tiden til automatisk at lukke en ticket"
|
||||||
},
|
},
|
||||||
"buttons": {
|
"buttons": {
|
||||||
"close": "Luk Ticket",
|
"close": "Luk Ticket",
|
||||||
@@ -51,9 +66,6 @@
|
|||||||
"closeWithReason": "Luk med grundlag"
|
"closeWithReason": "Luk med grundlag"
|
||||||
},
|
},
|
||||||
"messages": {
|
"messages": {
|
||||||
"reopenTitle": "Genåbnede denne ticket!",
|
|
||||||
"reopenDescription": "Snak gerne igen!",
|
|
||||||
"closedTitle": "Lukket denne ticket!",
|
|
||||||
"closedDescription": "Kun administratorer kan tale i denne billet nu!\n\n*Klik på knappen nedenfor for at slette eller genåbne denne billet!",
|
"closedDescription": "Kun administratorer kan tale i denne billet nu!\n\n*Klik på knappen nedenfor for at slette eller genåbne denne billet!",
|
||||||
"createdTitle": "Ticket Oprettet!",
|
"createdTitle": "Ticket Oprettet!",
|
||||||
"createdDescription": "Din ticket er oprettet, du kan registrere den ved et ping!",
|
"createdDescription": "Din ticket er oprettet, du kan registrere den ved et ping!",
|
||||||
@@ -71,9 +83,11 @@
|
|||||||
|
|
||||||
"none": "intet",
|
"none": "intet",
|
||||||
"reason": "grundlag",
|
"reason": "grundlag",
|
||||||
|
"createdat": "lavet af",
|
||||||
|
"openedby": "åbnet af",
|
||||||
"deletedby": "slettet af",
|
"deletedby": "slettet af",
|
||||||
"closedby": "lukket af",
|
"closedby": "lukket af",
|
||||||
|
|
||||||
"modalreason": "Hvad er grunden til at lukke denne ticket?",
|
"modalreason": "Hvad er grunden til at lukke denne ticket?",
|
||||||
"chooseATicket": "Vælg en ticket"
|
"chooseATicket": "Vælg en ticket"
|
||||||
},
|
},
|
||||||
|
|||||||
+19
-5
@@ -1,4 +1,7 @@
|
|||||||
{
|
{
|
||||||
|
"_CREDITS":"DJj123dj#1706",
|
||||||
|
"_INFO":"This file is a translation for open ticket 3.4.1",
|
||||||
|
|
||||||
"errors":{
|
"errors":{
|
||||||
"missingArgsTitle":"Onjuiste parameters!",
|
"missingArgsTitle":"Onjuiste parameters!",
|
||||||
"missingArgsDescription":"Er missen parameters",
|
"missingArgsDescription":"Er missen parameters",
|
||||||
@@ -24,10 +27,17 @@
|
|||||||
"closeTitle":"Ticket gesloten!",
|
"closeTitle":"Ticket gesloten!",
|
||||||
"deleteTitle":"Ticket aan het verwijderen...",
|
"deleteTitle":"Ticket aan het verwijderen...",
|
||||||
"reopenTitle":"Ticket heropend!",
|
"reopenTitle":"Ticket heropend!",
|
||||||
|
|
||||||
"claimTitle":"Dit ticket is geclaimed door {0}",
|
"claimTitle":"Dit ticket is geclaimed door {0}",
|
||||||
"unclaimTitle":"Dit ticket is niet meer geclaimed!",
|
"unclaimTitle":"Dit ticket is niet meer geclaimed!",
|
||||||
"changeTitle":"Ticket type veranderd naar {0}!",
|
"changeTitle":"Ticket type veranderd naar {0}!",
|
||||||
|
|
||||||
|
"statsTitle":"Hier zijn de stats voor {0}!",
|
||||||
|
"autocloseTitle":"Dit ticket wordt automatisch gesloten na {0}!",
|
||||||
|
"autocloseRejectTitle":"Dit ticket wordt niet langer automatisch gesloten!",
|
||||||
|
"autocloseWarn":"Dit geldt alleen voor inactieve tickets!",
|
||||||
|
|
||||||
|
"goToTicket":"ga naar ticket",
|
||||||
"ticketWarning":"De embed is in het bericht hier onder!",
|
"ticketWarning":"De embed is in het bericht hier onder!",
|
||||||
"maxTicketWarning":"**Waarschuwing:** _Je kan maar {0} ticket(s) tegelijkertijd maken!_"
|
"maxTicketWarning":"**Waarschuwing:** _Je kan maar {0} ticket(s) tegelijkertijd maken!_"
|
||||||
},
|
},
|
||||||
@@ -42,7 +52,12 @@
|
|||||||
"deleteCmd":"Verijder een ticket.",
|
"deleteCmd":"Verijder een ticket.",
|
||||||
"addCmd":"Voeg een user aan een ticket.",
|
"addCmd":"Voeg een user aan een ticket.",
|
||||||
"removeCmd":"Verwijder een user van een ticket.",
|
"removeCmd":"Verwijder een user van een ticket.",
|
||||||
"reopenCmd":"Heropen een ticket nadat het gesloten is."
|
"reopenCmd":"Heropen een ticket nadat het gesloten is.",
|
||||||
|
"changeCmd":"Verander ticket type.",
|
||||||
|
"claimCmd":"Claim een ticket.",
|
||||||
|
"unclaimCmd":"Unclaim een ticket.",
|
||||||
|
"statsCmd":"Bekijk ticket stats.",
|
||||||
|
"autocloseCmd":"Zet een timer om het ticket automatisch te sluiten"
|
||||||
},
|
},
|
||||||
"buttons":{
|
"buttons":{
|
||||||
"close":"Sluit Ticket",
|
"close":"Sluit Ticket",
|
||||||
@@ -51,9 +66,6 @@
|
|||||||
"closeWithReason":"sluit met reden"
|
"closeWithReason":"sluit met reden"
|
||||||
},
|
},
|
||||||
"messages":{
|
"messages":{
|
||||||
"reopenTitle":"Ticket heropend!",
|
|
||||||
"reopenDescription":"Voel vrij om weer te praten!",
|
|
||||||
"closedTitle":"Ticket gesloten!",
|
|
||||||
"closedDescription":"Alleen admins kunnen nog praten.\n\n*Klik op de knoppen hieronder voor meer acties!*",
|
"closedDescription":"Alleen admins kunnen nog praten.\n\n*Klik op de knoppen hieronder voor meer acties!*",
|
||||||
"createdTitle":"Ticket Aangemaakt!",
|
"createdTitle":"Ticket Aangemaakt!",
|
||||||
"createdDescription":"U ticket is gemaakt, je kan het detecteren bij een ping!",
|
"createdDescription":"U ticket is gemaakt, je kan het detecteren bij een ping!",
|
||||||
@@ -71,9 +83,11 @@
|
|||||||
|
|
||||||
"none":"geen",
|
"none":"geen",
|
||||||
"reason":"reden",
|
"reason":"reden",
|
||||||
|
"createdat":"gecreëerd op",
|
||||||
|
"openedby":"geopend door",
|
||||||
"deletedby":"verwijderd door",
|
"deletedby":"verwijderd door",
|
||||||
"closedby":"gesloten door",
|
"closedby":"gesloten door",
|
||||||
|
|
||||||
"modalreason":"Wat is de reden om dit ticket te sluiten?",
|
"modalreason":"Wat is de reden om dit ticket te sluiten?",
|
||||||
"chooseATicket": "Kies een ticket"
|
"chooseATicket": "Kies een ticket"
|
||||||
},
|
},
|
||||||
|
|||||||
+20
-6
@@ -1,4 +1,7 @@
|
|||||||
{
|
{
|
||||||
|
"_CREDITS":"DJdj Development",
|
||||||
|
"_INFO":"This file is a translation for open ticket 3.4.1",
|
||||||
|
|
||||||
"errors":{
|
"errors":{
|
||||||
"missingArgsTitle":"Invalid Arguments!",
|
"missingArgsTitle":"Invalid Arguments!",
|
||||||
"missingArgsDescription":"Missing Argument",
|
"missingArgsDescription":"Missing Argument",
|
||||||
@@ -24,10 +27,17 @@
|
|||||||
"closeTitle":"Closed this ticket!",
|
"closeTitle":"Closed this ticket!",
|
||||||
"deleteTitle":"Deleting this ticket...",
|
"deleteTitle":"Deleting this ticket...",
|
||||||
"reopenTitle":"Re-Opened this ticket!",
|
"reopenTitle":"Re-Opened this ticket!",
|
||||||
"claimTitle":"This ticket is now claimed to {0}",
|
|
||||||
|
"claimTitle":"This ticket is claimed to {0}",
|
||||||
"unclaimTitle":"This ticket isn't claimed anymore!",
|
"unclaimTitle":"This ticket isn't claimed anymore!",
|
||||||
"changeTitle":"Changed ticket type to {0}!",
|
"changeTitle":"Changed ticket type to {0}!",
|
||||||
|
|
||||||
|
"statsTitle":"Here are the stats for {0}!",
|
||||||
|
"autocloseTitle":"This ticket will be closed automatically after {0}!",
|
||||||
|
"autocloseRejectTitle":"This ticket will no longer be closed automatically!",
|
||||||
|
"autocloseWarn":"This only affects inactive tickets!",
|
||||||
|
|
||||||
|
"goToTicket":"go to ticket",
|
||||||
"ticketWarning":"The embed is in the message below!",
|
"ticketWarning":"The embed is in the message below!",
|
||||||
"maxTicketWarning":"**Warning:** _You can only create {0} ticket(s) at a time!_"
|
"maxTicketWarning":"**Warning:** _You can only create {0} ticket(s) at a time!_"
|
||||||
},
|
},
|
||||||
@@ -42,7 +52,12 @@
|
|||||||
"deleteCmd":"Delete a ticket.",
|
"deleteCmd":"Delete a ticket.",
|
||||||
"addCmd":"Add a user to the ticket.",
|
"addCmd":"Add a user to the ticket.",
|
||||||
"removeCmd":"Remove a user from the ticket.",
|
"removeCmd":"Remove a user from the ticket.",
|
||||||
"reopenCmd":"Re-Open a ticket after it was closed."
|
"reopenCmd":"Re-Open a ticket after it was closed.",
|
||||||
|
"changeCmd":"Change ticket type.",
|
||||||
|
"claimCmd":"Claim a ticket.",
|
||||||
|
"unclaimCmd":"Unclaim a ticket.",
|
||||||
|
"statsCmd":"View ticket stats.",
|
||||||
|
"autocloseCmd":"Set timer to automatically close ticket"
|
||||||
},
|
},
|
||||||
"buttons":{
|
"buttons":{
|
||||||
"close":"Close Ticket",
|
"close":"Close Ticket",
|
||||||
@@ -51,9 +66,6 @@
|
|||||||
"closeWithReason":"close with reason"
|
"closeWithReason":"close with reason"
|
||||||
},
|
},
|
||||||
"messages":{
|
"messages":{
|
||||||
"reopenTitle":"Re-Opened this ticket!",
|
|
||||||
"reopenDescription":"Feel free to talk again!",
|
|
||||||
"closedTitle":"Closed this ticket!",
|
|
||||||
"closedDescription":"Only admins can talk in this ticket now!\n\n*Click on the button below to delete or to re-open this ticket!*",
|
"closedDescription":"Only admins can talk in this ticket now!\n\n*Click on the button below to delete or to re-open this ticket!*",
|
||||||
"createdTitle":"Ticket Created!",
|
"createdTitle":"Ticket Created!",
|
||||||
"createdDescription":"Your ticket is created, you can detect it by a ping!",
|
"createdDescription":"Your ticket is created, you can detect it by a ping!",
|
||||||
@@ -71,9 +83,11 @@
|
|||||||
|
|
||||||
"none":"none",
|
"none":"none",
|
||||||
"reason":"reason",
|
"reason":"reason",
|
||||||
|
"createdat":"created at",
|
||||||
|
"openedby":"opened by",
|
||||||
"deletedby":"deleted by",
|
"deletedby":"deleted by",
|
||||||
"closedby":"closed by",
|
"closedby":"closed by",
|
||||||
|
|
||||||
"modalreason":"What is the reason for closing this ticket?",
|
"modalreason":"What is the reason for closing this ticket?",
|
||||||
"chooseATicket": "Choose a ticket"
|
"chooseATicket": "Choose a ticket"
|
||||||
},
|
},
|
||||||
|
|||||||
+22
-8
@@ -1,4 +1,7 @@
|
|||||||
{
|
{
|
||||||
|
"_CREDITS":"Sanke#6086",
|
||||||
|
"_INFO":"This file is a translation for open ticket 3.4.1",
|
||||||
|
|
||||||
"errors":{
|
"errors":{
|
||||||
"missingArgsTitle":"Arguments invalides!",
|
"missingArgsTitle":"Arguments invalides!",
|
||||||
"missingArgsDescription":"Argument manquant",
|
"missingArgsDescription":"Argument manquant",
|
||||||
@@ -24,10 +27,17 @@
|
|||||||
"closeTitle":"Fermé ce ticket!",
|
"closeTitle":"Fermé ce ticket!",
|
||||||
"deleteTitle":"Suppression de ce ticket...",
|
"deleteTitle":"Suppression de ce ticket...",
|
||||||
"reopenTitle":"A rouvert ce ticket!",
|
"reopenTitle":"A rouvert ce ticket!",
|
||||||
"claimTitle":"This ticket is now claimed to {0}",
|
|
||||||
"unclaimTitle":"This ticket isn't claimed anymore!",
|
|
||||||
"changeTitle":"Changed ticket type to {0}!",
|
|
||||||
|
|
||||||
|
"claimTitle":"Ce ticket est maintenant réclamé à {0}",
|
||||||
|
"unclaimTitle":"Ce ticket n'est pas réclamé!",
|
||||||
|
"changeTitle":"Modification du type de ticket en {0}!",
|
||||||
|
|
||||||
|
"statsTitle":"Voici les statistiques pour {0}!",
|
||||||
|
"autocloseTitle":"Ce ticket sera automatiquement clôturé après {0}!",
|
||||||
|
"autocloseRejectTitle":"Ce ticket ne sera plus clôturé automatiquement!",
|
||||||
|
"autocloseWarn":"Cela n'affecte que les tickets inactifs!",
|
||||||
|
|
||||||
|
"goToTicket":"Aller au ticket",
|
||||||
"ticketWarning":"L'intégration est dans le message ci-dessous!",
|
"ticketWarning":"L'intégration est dans le message ci-dessous!",
|
||||||
"maxTicketWarning":"**Attention :** _Vous ne pouvez créer que {0} ticket(s) à la fois !_"
|
"maxTicketWarning":"**Attention :** _Vous ne pouvez créer que {0} ticket(s) à la fois !_"
|
||||||
},
|
},
|
||||||
@@ -42,7 +52,12 @@
|
|||||||
"deleteCmd":"Supprimer un billet.",
|
"deleteCmd":"Supprimer un billet.",
|
||||||
"addCmd":"Ajouter un utilisateur au ticket.",
|
"addCmd":"Ajouter un utilisateur au ticket.",
|
||||||
"removeCmd":"Supprimer un utilisateur du ticket.",
|
"removeCmd":"Supprimer un utilisateur du ticket.",
|
||||||
"reopenCmd":"Rouvrir un ticket après sa clôture."
|
"reopenCmd":"Rouvrir un ticket après sa clôture.",
|
||||||
|
"changeCmd":"Changer le type de ticket.",
|
||||||
|
"claimCmd":"Réclamer un billet",
|
||||||
|
"unclaimCmd":"Annuler la réclamation d'un ticket.",
|
||||||
|
"statsCmd":"Afficher les statistiques des tickets.",
|
||||||
|
"autocloseCmd":"Définir une minuterie pour fermer automatiquement le ticket"
|
||||||
},
|
},
|
||||||
"buttons":{
|
"buttons":{
|
||||||
"close":"Fermer le ticket",
|
"close":"Fermer le ticket",
|
||||||
@@ -51,9 +66,6 @@
|
|||||||
"closeWithReason":"fermer avec une raison"
|
"closeWithReason":"fermer avec une raison"
|
||||||
},
|
},
|
||||||
"messages":{
|
"messages":{
|
||||||
"reopenTitle":"A rouvert ce ticket!",
|
|
||||||
"reopenDescription":"N'hésitez pas à reparler!",
|
|
||||||
"closedTitle":"Fermé ce ticket!",
|
|
||||||
"closedDescription":"Seuls les administrateurs peuvent parler dans ce ticket maintenant !\n\n*Cliquez sur le bouton ci-dessous pour supprimer ou rouvrir ce ticket !*",
|
"closedDescription":"Seuls les administrateurs peuvent parler dans ce ticket maintenant !\n\n*Cliquez sur le bouton ci-dessous pour supprimer ou rouvrir ce ticket !*",
|
||||||
"createdTitle":"Ticket créé !",
|
"createdTitle":"Ticket créé !",
|
||||||
"createdDescription":"Votre ticket est créé, vous pouvez le détecter par un ping !",
|
"createdDescription":"Votre ticket est créé, vous pouvez le détecter par un ping !",
|
||||||
@@ -71,9 +83,11 @@
|
|||||||
|
|
||||||
"none":"rien",
|
"none":"rien",
|
||||||
"reason":"raison",
|
"reason":"raison",
|
||||||
|
"createdat":"Créé à",
|
||||||
|
"openedby":"Ouvert par",
|
||||||
"deletedby":"supprimé par",
|
"deletedby":"supprimé par",
|
||||||
"closedby":"fermé par",
|
"closedby":"fermé par",
|
||||||
|
|
||||||
"modalreason":"Qu’elle est la raison pour fermer ce ticket?",
|
"modalreason":"Qu’elle est la raison pour fermer ce ticket?",
|
||||||
"chooseATicket": "Choisir un ticket"
|
"chooseATicket": "Choisir un ticket"
|
||||||
},
|
},
|
||||||
|
|||||||
+23
-9
@@ -1,4 +1,7 @@
|
|||||||
{
|
{
|
||||||
|
"_CREDITS":"david.#8276 ",
|
||||||
|
"_INFO":"This file is a translation for open ticket 3.4.1",
|
||||||
|
|
||||||
"errors":{
|
"errors":{
|
||||||
"missingArgsTitle":"Ungültiges Argument!",
|
"missingArgsTitle":"Ungültiges Argument!",
|
||||||
"missingArgsDescription":"Fehlendes Argument!",
|
"missingArgsDescription":"Fehlendes Argument!",
|
||||||
@@ -24,12 +27,19 @@
|
|||||||
"closeTitle":"Dieses Ticket schließen!",
|
"closeTitle":"Dieses Ticket schließen!",
|
||||||
"deleteTitle":"Löschen Sie dieses Ticket!",
|
"deleteTitle":"Löschen Sie dieses Ticket!",
|
||||||
"reopenTitle":"Öffne dieses Ticket erneut!",
|
"reopenTitle":"Öffne dieses Ticket erneut!",
|
||||||
"claimTitle":"Das Ticket wurde beansprucht von {0}",
|
|
||||||
"unclaimTitle":"Das Ticket wrid nicht mehr beansprucht",
|
|
||||||
"changeTitle":"Ticket Typ wurde geändert auf {0}!",
|
|
||||||
|
|
||||||
|
"claimTitle":"Dieses Ticket wurde beansprucht von {0}",
|
||||||
|
"unclaimTitle":"Dieses Ticket wird nichtmehr beansprucht.",
|
||||||
|
"changeTitle":"Ticket Typ wurde geändert zu {0}!",
|
||||||
|
|
||||||
|
"statsTitle":"Hier sind die Stats für {0}!",
|
||||||
|
"autocloseTitle":"Dieses Ticket wird automatisch geschlossen in {0}!",
|
||||||
|
"autocloseRejectTitle":"Dieses Ticket wird nichtmehr automatisch geschlossen",
|
||||||
|
"autocloseWarn":"Dies betrifft nur inaktive Tickets!",
|
||||||
|
|
||||||
|
"goToTicket":"Geh zu deinem Ticket",
|
||||||
"ticketWarning":"Die Einbettung befindet sich in der Nachricht unten!",
|
"ticketWarning":"Die Einbettung befindet sich in der Nachricht unten!",
|
||||||
"maxTicketWarning":"**Warnung:** _Sie können nur {0} ticket(s) erstellen zu einer Zeit!_"
|
"maxTicketWarning":"**Warnung:** _Es können maximal {0} Tickets zur gleichen Zeit geöffnet sein!_"
|
||||||
},
|
},
|
||||||
"helpMenu":{
|
"helpMenu":{
|
||||||
"title":"Hilfe Menu:",
|
"title":"Hilfe Menu:",
|
||||||
@@ -42,7 +52,12 @@
|
|||||||
"deleteCmd":"Ein Ticket löschen.",
|
"deleteCmd":"Ein Ticket löschen.",
|
||||||
"addCmd":"Fügen Sie dem Ticket einen Benutzer hinzu.",
|
"addCmd":"Fügen Sie dem Ticket einen Benutzer hinzu.",
|
||||||
"removeCmd":"Entfernen eines Benutzers aus dem Ticket.",
|
"removeCmd":"Entfernen eines Benutzers aus dem Ticket.",
|
||||||
"reopenCmd":"Öffnen Sie ein Ticket erneut, nachdem es geschlossen wurde."
|
"reopenCmd":"Öffnen Sie ein Ticket erneut, nachdem es geschlossen wurde.",
|
||||||
|
"changeCmd":"Ticket Typ ändern",
|
||||||
|
"claimCmd":"Ticket beanspruchen",
|
||||||
|
"unclaimCmd":"Ticket nicht mehr beanspruchen.",
|
||||||
|
"statsCmd":"Ticket Stats",
|
||||||
|
"autocloseCmd":"Timer wurde gesetzt auf automatisches schließen des Tickets"
|
||||||
},
|
},
|
||||||
"buttons":{
|
"buttons":{
|
||||||
"close":"Ticket schließen",
|
"close":"Ticket schließen",
|
||||||
@@ -51,9 +66,6 @@
|
|||||||
"closeWithReason":"Geschlossen mit dem Grund"
|
"closeWithReason":"Geschlossen mit dem Grund"
|
||||||
},
|
},
|
||||||
"messages":{
|
"messages":{
|
||||||
"reopenTitle":"Dieses Ticket wiedereröffnet!",
|
|
||||||
"reopenDescription":"Sie können gerne weiterreden!",
|
|
||||||
"closedTitle":"Dieses Ticket geschlossen!",
|
|
||||||
"closedDescription":"Nur Admins können jetzt in diesem Ticket sprechen!\n\n*Klicken Sie auf die Schaltfläche unten, um dieses Ticket zu löschen oder erneut zu öffnen!*",
|
"closedDescription":"Nur Admins können jetzt in diesem Ticket sprechen!\n\n*Klicken Sie auf die Schaltfläche unten, um dieses Ticket zu löschen oder erneut zu öffnen!*",
|
||||||
"createdTitle":"Ticket erstellt!",
|
"createdTitle":"Ticket erstellt!",
|
||||||
"createdDescription":"Ihr Ticket ist erstellt, Sie können es durch einen Ping erkennen!",
|
"createdDescription":"Ihr Ticket ist erstellt, Sie können es durch einen Ping erkennen!",
|
||||||
@@ -71,9 +83,11 @@
|
|||||||
|
|
||||||
"none":"none",
|
"none":"none",
|
||||||
"reason":"Grund",
|
"reason":"Grund",
|
||||||
|
"createdat":"Erstellt um",
|
||||||
|
"openedby":"Geöffnet um",
|
||||||
"deletedby":"Gelöscht von",
|
"deletedby":"Gelöscht von",
|
||||||
"closedby":"Geschlossen von",
|
"closedby":"Geschlossen von",
|
||||||
|
|
||||||
"modalreason":"Was ist der Grund?",
|
"modalreason":"Was ist der Grund?",
|
||||||
"chooseATicket": "Wähle ein passendes Thema!"
|
"chooseATicket": "Wähle ein passendes Thema!"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -0,0 +1,101 @@
|
|||||||
|
{
|
||||||
|
"_CREDITS":"ꙅoᴎɒᎸɘƚꙅ#3744",
|
||||||
|
"_INFO":"This file is a translation for open ticket 3.4.1",
|
||||||
|
|
||||||
|
"errors":{
|
||||||
|
"missingArgsTitle":"Invalid Arguments!",
|
||||||
|
"missingArgsDescription":"Missing Argument",
|
||||||
|
"noPermsTitle":"Δεν έχεις άδεια για να τρέξεις αυτή την εντολή!",
|
||||||
|
"noPermsDescription":"Χρειάζεσε άδεια διαχειριστή για να τρέξεις αυτή την εντολή.",
|
||||||
|
"noPermsDelete":"Μόνο οι διαχειριστές μπορούν να διαγράψουν τα εισιτήρια!",
|
||||||
|
"chooseFromListTitle":"Μη έγκυρο id.",
|
||||||
|
"chooseFromListDescription":"Διάλεξε ενα απο τα παρακάτω id:",
|
||||||
|
"boterror":"Υπάρχει κάποιο πρόβλημα!",
|
||||||
|
"notInTicketTitle":"Δεν είσε στο κανάλι του εισιτηρίου!",
|
||||||
|
"notInTicketDescription":"Δεν μπορείς να τρέξεις αυτή την εντολή εκτός του εισιτηρίου",
|
||||||
|
"ticketDoesntExist":"Αυτο το εισιτήριο δεν υπάρχει!",
|
||||||
|
"roleDoesntExist":"Αυτός ο ρόλος δεν υπάρχει!",
|
||||||
|
"anotherOption":"Διάλεξε άλλο λόγο για εισιτήριο!",
|
||||||
|
"maxAmountTitle":"Έχεις ανοίξει πολλά εισιτήρια για την ώρα.",
|
||||||
|
"maxAmountDescription":"Έχεις υπερβεί το όριο των εισιτηρίον!\nΔεν μπορείς να ανοίξεις καινούργιο.!",
|
||||||
|
"somethingWentWrong":"**Κάτι πήγε λάθος!**\nΔοκίμασε ξανά αργότερα!"
|
||||||
|
},
|
||||||
|
"commands":{
|
||||||
|
"userAddedTitle":"Ο {0} προσθέθηκε στο εισιτήριο",
|
||||||
|
"userRemovedTitle":"Ο {0} αφαιρέθηκε απο το εισιτήριο!",
|
||||||
|
"renameTitle":"Το όνομα άλλαξε σε {0}!",
|
||||||
|
"closeTitle":"Το εισιτήριο έκλεισε!",
|
||||||
|
"deleteTitle":"Διαγράφω το εισιτήριο...",
|
||||||
|
"reopenTitle":"Το εισιτήριο ξανά άνοιξε!",
|
||||||
|
|
||||||
|
"claimTitle":"Το εισιτήριο διεκδικήθεικε απο τον {0}",
|
||||||
|
"unclaimTitle":"Το εισιτήριο δεν είναι πλέον διεκδικημένο!",
|
||||||
|
"changeTitle":"Ο τύπος του εισιτηρίου άλλαξε σε {0}!",
|
||||||
|
|
||||||
|
"statsTitle":"Εδώ είναι τα στατιστικά για το {0}!",
|
||||||
|
"autocloseTitle":"Αυτό το εισιτήριο θα κλείσε σε {0}!",
|
||||||
|
"autocloseRejectTitle":"Αυτό το εισιτήριο δεν θα κλέισε αυτόματα!",
|
||||||
|
"autocloseWarn":"Αυτό ισχύει μονο για μή ενεργά εισιτήρια!",
|
||||||
|
|
||||||
|
"goToTicket":"Μεταφορά στο εισιτήριο.",
|
||||||
|
"ticketWarning":"Το εισιτήριο είναι στο παρακάτω μήνυμα!",
|
||||||
|
"maxTicketWarning":"**Προειδοποίηση:** _Μπορείς να φτιάξεις μόνο {0} εισιτήριο/εισιτήρια για την ώρα!_"
|
||||||
|
},
|
||||||
|
"helpMenu":{
|
||||||
|
"title":"Διαθέσιμες εντολές:",
|
||||||
|
"header1":"**Πηγαινε στο {0} για να φτιάξεις ενα νέο εισιτήριο!**\n\n",
|
||||||
|
"header2":"**Τρέχα την εντολή `/new` ή `/ticket` για να φτιάξεις ένα εισιτήριο!**\n\n",
|
||||||
|
|
||||||
|
"msgCmd":"Εμφάνισε ένα embed με κουμπιά. (admins only)",
|
||||||
|
"renameCmd":"Μετονόμασε το εισιτήριο. (όχι κενά)",
|
||||||
|
"closeCmd":"Κλέισε το εισιτήριο.",
|
||||||
|
"deleteCmd":"Διέγραψε το εισιτήριο.",
|
||||||
|
"addCmd":"Πρόσθεσε κάποιον στο εισιτήριο.",
|
||||||
|
"removeCmd":"Αφαίρεσε κάποιον απο το εισιτήριο.",
|
||||||
|
"reopenCmd":"Ξανά άνοιξε το εισιτήριο.",
|
||||||
|
"changeCmd":"Άλλαξε τον τύπο του εισιτηρίου.",
|
||||||
|
"claimCmd":"Διεκδίκησε το εισιτήριο.",
|
||||||
|
"unclaimCmd":"Unclaim a ticket.",
|
||||||
|
"statsCmd":"Δές τα στατιστικά του εισιτηρίου.",
|
||||||
|
"autocloseCmd":"Βάλε χρονόμετρο για να κλείσει το εισιτήριο"
|
||||||
|
},
|
||||||
|
"buttons":{
|
||||||
|
"close":"κλείσε το εισιτήριο",
|
||||||
|
"delete":"Διέγραψε το εισιτήριο",
|
||||||
|
"reopen":"Ξανά άνοιξε το εισιτήριο",
|
||||||
|
"closeWithReason":"Κλείσε με αιτιολόγιση"
|
||||||
|
},
|
||||||
|
"messages":{
|
||||||
|
"closedDescription":"Μονο οι διαχειριστές μπορουν να διαγράψουν τα εισιτήρια!\n\n*Πάτα το παρακάτω κουμπί για να ξανά ανοίξεις το εισιτήριο!*",
|
||||||
|
"createdTitle":"Το εισιτήριο δημιουργήθηκε!",
|
||||||
|
"createdDescription":"Το εισιτήριο σου δημιουργήθηκε μπορείς να το βρείς με την αναφορά που έγινε στο κανάλι του εισιτηρίου!",
|
||||||
|
|
||||||
|
"newTicketDmTitle":"Νέο εισιτήριο!",
|
||||||
|
"closedTicketDmTitle":"Το εισιτήριο έκλεισε!",
|
||||||
|
"deletedTicketDmTitle":"Tο εισιτήριο διεγράφη!",
|
||||||
|
"closedTicketDmDescription":"Το εισιτήριο σου είναι κλειστό!",
|
||||||
|
"deletedTicketDmDescription":"Το εισιτήριο σου διεγράφη!",
|
||||||
|
"reopenTicketDmTitle":"Tο εισιτήριο ξανά άνοιξε!",
|
||||||
|
"reopenTicketDmDescription":"Το εισιτήριο σου ξανά άνοιξε!",
|
||||||
|
|
||||||
|
"chooseCategory":"Διάλεξε μία κατηγορία:",
|
||||||
|
"gettingdeleted":"Το εισιτήριο διαγράφεται...",
|
||||||
|
|
||||||
|
"none":"Κανένας",
|
||||||
|
"reason":"Λόγος",
|
||||||
|
"createdat":"Δημιουργήθηκε",
|
||||||
|
"openedby":"Ανοίχτηκε από",
|
||||||
|
"deletedby":"Διεγράφη απο",
|
||||||
|
"closedby":"Έκλεισε από",
|
||||||
|
|
||||||
|
"modalreason":"Γιατι να κλείσει το εισιτήριο?",
|
||||||
|
"chooseATicket": "Δίαλεξε ενα εισιτήριο"
|
||||||
|
},
|
||||||
|
"transcripts":{
|
||||||
|
"title":"Αντίγραφο",
|
||||||
|
"processed":"Το αντίγραφο ετοιμάζεται!",
|
||||||
|
"wait":"Παρακαλώ περιμένετε!",
|
||||||
|
"estimated":"Ώρα αναμονής",
|
||||||
|
"available":"Το αντίγραφο είναι ανοιχτώ εδώ!"
|
||||||
|
}
|
||||||
|
}
|
||||||
+22
-8
@@ -1,4 +1,7 @@
|
|||||||
{
|
{
|
||||||
|
"_CREDITS":"Maurizio#0268",
|
||||||
|
"_INFO":"This file is a translation for open ticket 3.4.1",
|
||||||
|
|
||||||
"errors":{
|
"errors":{
|
||||||
"missingArgsTitle":"Argomenti non validi!",
|
"missingArgsTitle":"Argomenti non validi!",
|
||||||
"missingArgsDescription":"Argomenti mancanti",
|
"missingArgsDescription":"Argomenti mancanti",
|
||||||
@@ -24,10 +27,17 @@
|
|||||||
"closeTitle":"Ticket chiuso!",
|
"closeTitle":"Ticket chiuso!",
|
||||||
"deleteTitle":"Eliminando questo ticket...",
|
"deleteTitle":"Eliminando questo ticket...",
|
||||||
"reopenTitle":"Ri-aperto questo ticket!",
|
"reopenTitle":"Ri-aperto questo ticket!",
|
||||||
"claimTitle":"Questo ticket è ora gestito da {0}",
|
|
||||||
"unclaimTitle":"Questo ticket non è più gestito!",
|
|
||||||
"changeTitle":"Cambiato il tipo di ticket in {0}!",
|
|
||||||
|
|
||||||
|
"claimTitle":"Questo ticket adesso è gestito da {0}",
|
||||||
|
"unclaimTitle":"Questo ticket non è più gestito!",
|
||||||
|
"changeTitle":"Ticket cambiato in {0}!",
|
||||||
|
|
||||||
|
"statsTitle":"Queste sono le stats per {0}!",
|
||||||
|
"autocloseTitle":"Questo ticket sarà eliminato direttamente dopo {0}!",
|
||||||
|
"autocloseRejectTitle":"Questo ticket non sarà più chiuso automaticamente!",
|
||||||
|
"autocloseWarn":"Questo vale solo per i ticket inattivi!",
|
||||||
|
|
||||||
|
"goToTicket":"vai al ticket",
|
||||||
"ticketWarning":"L'embed è nel messaggio sotto!",
|
"ticketWarning":"L'embed è nel messaggio sotto!",
|
||||||
"maxTicketWarning":"*Attenzione:* Tu puoi creare solo {0} ticket alla volta!"
|
"maxTicketWarning":"*Attenzione:* Tu puoi creare solo {0} ticket alla volta!"
|
||||||
},
|
},
|
||||||
@@ -42,7 +52,12 @@
|
|||||||
"deleteCmd":"Elimina un ticket.",
|
"deleteCmd":"Elimina un ticket.",
|
||||||
"addCmd":"Aggiungi un utente al ticket.",
|
"addCmd":"Aggiungi un utente al ticket.",
|
||||||
"removeCmd":"Rimuovi un utente da un ticket.",
|
"removeCmd":"Rimuovi un utente da un ticket.",
|
||||||
"reopenCmd":"Ri-apri un ticket dopo averlo chiuso."
|
"reopenCmd":"Ri-apri un ticket dopo averlo chiuso.",
|
||||||
|
"changeCmd":"Cambia tipo di ticket.",
|
||||||
|
"claimCmd":"Gestisci un ticket.",
|
||||||
|
"unclaimCmd":"Lascia la gestione del ticket.",
|
||||||
|
"statsCmd":"Vedi le statistiche dei ticket.",
|
||||||
|
"autocloseCmd":"Imposta il timer dell'autochiusura dei ticket"
|
||||||
},
|
},
|
||||||
"buttons":{
|
"buttons":{
|
||||||
"close":"Chiudi",
|
"close":"Chiudi",
|
||||||
@@ -51,9 +66,6 @@
|
|||||||
"closeWithReason":"chiudi con motivo"
|
"closeWithReason":"chiudi con motivo"
|
||||||
},
|
},
|
||||||
"messages":{
|
"messages":{
|
||||||
"reopenTitle":"Ticket ri-aperto!",
|
|
||||||
"reopenDescription":"Sentiti libero di parlare nuovamente!",
|
|
||||||
"closedTitle":"Ticket chiuso!",
|
|
||||||
"closedDescription":"Solo gli amministratori possono parlare in questo ticket ora!\n\n*Clicca sul pulsante sotto per eliminare o ri-aprire questo ticket!*",
|
"closedDescription":"Solo gli amministratori possono parlare in questo ticket ora!\n\n*Clicca sul pulsante sotto per eliminare o ri-aprire questo ticket!*",
|
||||||
"createdTitle":"Ticket creato!",
|
"createdTitle":"Ticket creato!",
|
||||||
"createdDescription":"Il tuo ticket è stato creato, puoi capirlo dal ping!",
|
"createdDescription":"Il tuo ticket è stato creato, puoi capirlo dal ping!",
|
||||||
@@ -71,9 +83,11 @@
|
|||||||
|
|
||||||
"none":"nessuno",
|
"none":"nessuno",
|
||||||
"reason":"motivo",
|
"reason":"motivo",
|
||||||
|
"createdat":"creato il",
|
||||||
|
"openedby":"aperto da",
|
||||||
"deletedby":"eliminato da",
|
"deletedby":"eliminato da",
|
||||||
"closedby":"chiuso da",
|
"closedby":"chiuso da",
|
||||||
|
|
||||||
"modalreason":"Quale è il motivo per chiudere questo ticket?",
|
"modalreason":"Quale è il motivo per chiudere questo ticket?",
|
||||||
"chooseATicket": "Scegli un ticket"
|
"chooseATicket": "Scegli un ticket"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -0,0 +1,101 @@
|
|||||||
|
{
|
||||||
|
"_CREDITS":"NoOneNook#0266",
|
||||||
|
"_INFO":"This file is a translation for open ticket 3.4.1",
|
||||||
|
|
||||||
|
"errors":{
|
||||||
|
"missingArgsTitle":"Ugyldige argumenter!",
|
||||||
|
"missingArgsDescription":"Manglende argument",
|
||||||
|
"noPermsTitle":"Ingen rettigheter",
|
||||||
|
"noPermsDescription":"Du trenger administrator eller moderator rettigheter",
|
||||||
|
"noPermsDelete":"Bare staff kan slette en ticket!",
|
||||||
|
"chooseFromListTitle":"Ugyldig ID",
|
||||||
|
"chooseFromListDescription":"Velg en av ID-ene nedenfor:",
|
||||||
|
"boterror":"Bot Error!",
|
||||||
|
"notInTicketTitle":"Du er ikke i en ticket!",
|
||||||
|
"notInTicketDescription":"Du kan ikke bruke denne command utenfor en ticket.",
|
||||||
|
"ticketDoesntExist":"Ticket finnes ikke lenger!",
|
||||||
|
"roleDoesntExist":"Rollen eksisterer ikke lenger!",
|
||||||
|
"anotherOption":"Dette alternativet er ikke en ticket!",
|
||||||
|
"maxAmountTitle":"Maks antall er nådd!",
|
||||||
|
"maxAmountDescription":"Du har nådd maksimalt antall tillatte ticket's\nSå du kan ikke lage en ny før de andre er lukket!",
|
||||||
|
"somethingWentWrong":"**Noe gikk galt!**\nVennligst prøv igjen senere!"
|
||||||
|
},
|
||||||
|
"commands":{
|
||||||
|
"userAddedTitle":"{0} har blitt lagt til i ticket!",
|
||||||
|
"userRemovedTitle":"Fjernet {0} fra ticket!",
|
||||||
|
"renameTitle":"Endret navn til {0}!",
|
||||||
|
"closeTitle":"Ticket er blitt lukket!",
|
||||||
|
"deleteTitle":"Sletter ticket...",
|
||||||
|
"reopenTitle":"Ticket er gjenåpnet",
|
||||||
|
|
||||||
|
"claimTitle":"{0} har tatt over denne saken!",
|
||||||
|
"unclaimTitle":"Denne ticket er blitt ledig igjen!",
|
||||||
|
"changeTitle":"Endret ticket-type til {0}!",
|
||||||
|
|
||||||
|
"statsTitle":"Her er statistikken for {0}!",
|
||||||
|
"autocloseTitle":"Denne ticket stenges automatisk etter kl {0}!",
|
||||||
|
"autocloseRejectTitle":"Denne ticket vil ikke lenger stenges automatisk!",
|
||||||
|
"autocloseWarn":"Dette påvirker kun inaktive tickets!",
|
||||||
|
|
||||||
|
"goToTicket":"DIN TICKET",
|
||||||
|
"ticketWarning":"Embed er i meldingen nedenfor!",
|
||||||
|
"maxTicketWarning":"**Advarsel:** _Du kan bare opprette {0}ticket(s) om gangen!_"
|
||||||
|
},
|
||||||
|
"helpMenu":{
|
||||||
|
"title":"Tilgjengelige Commands:",
|
||||||
|
"header1":"**Gå til {0} for å opprette en ticket!**\n\n",
|
||||||
|
"header2":"**Skriv kommandoen `/new` eller `/ticket` for å lage en ticket!**\n\n",
|
||||||
|
|
||||||
|
"msgCmd":"Lag en embed med knapper. (admins only)",
|
||||||
|
"renameCmd":"Gi nytt navn til en ticket. (ingen mellomrom)",
|
||||||
|
"closeCmd":"Lukk en ticket.",
|
||||||
|
"deleteCmd":"Slett en ticket.",
|
||||||
|
"addCmd":"Legg til en bruker i ticket.",
|
||||||
|
"removeCmd":"Fjern en bruker fra ticket.",
|
||||||
|
"reopenCmd":"Åpne en ticket på nytt etter at den ble avsluttet.",
|
||||||
|
"changeCmd":"Endre ticket kategori",
|
||||||
|
"claimCmd":"Ta over ticket.",
|
||||||
|
"unclaimCmd":"Frigjør den fra ticket.",
|
||||||
|
"statsCmd":"Se ticket stats.",
|
||||||
|
"autocloseCmd":"Still inn når ticket lukkes automatisk etter den ble åpnet"
|
||||||
|
},
|
||||||
|
"buttons":{
|
||||||
|
"close":"Lukk Ticket",
|
||||||
|
"delete":"Slett Ticket",
|
||||||
|
"reopen":"Gjenåpne Ticket",
|
||||||
|
"closeWithReason":"Legg til årsak"
|
||||||
|
},
|
||||||
|
"messages":{
|
||||||
|
"closedDescription":"Bare staff medlemmer kan snakke i denne ticket nå!\n\n*Klikk på knappen nedenfor for å slette eller åpne ticket på nytt!*",
|
||||||
|
"createdTitle":"Ticket er laget!",
|
||||||
|
"createdDescription":"__Du finner den ved å trykke på knappen under__",
|
||||||
|
|
||||||
|
"newTicketDmTitle":"New Ticket!",
|
||||||
|
"closedTicketDmTitle":"Ticket Åpnet!",
|
||||||
|
"deletedTicketDmTitle":"Ticket Slettet!",
|
||||||
|
"closedTicketDmDescription":"Din ticket er lukket!",
|
||||||
|
"deletedTicketDmDescription":"Din ticket er slettet!",
|
||||||
|
"reopenTicketDmTitle":"Ticket gjenåpnet!",
|
||||||
|
"reopenTicketDmDescription":"Din icket er gjenåpnet!",
|
||||||
|
|
||||||
|
"chooseCategory":"Velg en kategori:",
|
||||||
|
"gettingdeleted":"Ticket slettes....",
|
||||||
|
|
||||||
|
"none":"Ingen",
|
||||||
|
"reason":"Grunnlag",
|
||||||
|
"createdat":"Laget",
|
||||||
|
"openedby":"Laget av",
|
||||||
|
"deletedby":"Slettet av",
|
||||||
|
"closedby":"Lukket av",
|
||||||
|
|
||||||
|
"modalreason":"Grunnlag for lukking!",
|
||||||
|
"chooseATicket": "Velg en ticket"
|
||||||
|
},
|
||||||
|
"transcripts":{
|
||||||
|
"title":"Ticket logg",
|
||||||
|
"processed":"Logg fil lages, snart klar!",
|
||||||
|
"wait":"Vennligst vent!",
|
||||||
|
"estimated":"Beregnet tid",
|
||||||
|
"available":"Loggfil er tilgjengelig over denne meldingen!"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,101 @@
|
|||||||
|
{
|
||||||
|
"_CREDITS":"MKevas#8311",
|
||||||
|
"_INFO":"This file is a translation for open ticket 3.4.1",
|
||||||
|
|
||||||
|
"errors":{
|
||||||
|
"missingArgsTitle":"Nieprawidłowe argumenty!",
|
||||||
|
"missingArgsDescription":"Brakujący argument",
|
||||||
|
"noPermsTitle":"Brak permisji!",
|
||||||
|
"noPermsDescription":"Musisz mieć uprawnienia `ADMINISTRATOR` lub być na liście dozwolonych ról!",
|
||||||
|
"noPermsDelete":"Tylko administratorzy mogą usunąć zgłoszenie!",
|
||||||
|
"chooseFromListTitle":"Błędne ID",
|
||||||
|
"chooseFromListDescription":"Wybierz jeden z poniższych identyfikatorów:",
|
||||||
|
"boterror":"Błąd bota!",
|
||||||
|
"notInTicketTitle":"Nie jesteś w tickecie!",
|
||||||
|
"notInTicketDescription":"To polecenie nie działa poza ticketami!",
|
||||||
|
"ticketDoesntExist":"Ten ticket już nie istnieje!",
|
||||||
|
"roleDoesntExist":"Ta rola już nie istnieje!",
|
||||||
|
"anotherOption":"Ta opcja nie jest ticketem, ale innym typem!",
|
||||||
|
"maxAmountTitle":"Maksymalna liczba osiągnięta!",
|
||||||
|
"maxAmountDescription":"Osiągnąłeś maksymalną dozwoloną liczbę ticketów!\nWięc nie możesz stworzyć nowego!",
|
||||||
|
"somethingWentWrong":"**Coś poszło nie tak!**\nSpróbuj ponownie innym razem!"
|
||||||
|
},
|
||||||
|
"commands":{
|
||||||
|
"userAddedTitle":"Dodano {0} do tego ticketa!",
|
||||||
|
"userRemovedTitle":"Usunięto {0} z tego ticketa!",
|
||||||
|
"renameTitle":"Zmieniono nazwę na {0}!",
|
||||||
|
"closeTitle":"Zamknięto ten ticket!",
|
||||||
|
"deleteTitle":"Usuwanie tego zgłoszenia..",
|
||||||
|
"reopenTitle":"Ponownie otwarto ten ticket!",
|
||||||
|
|
||||||
|
"claimTitle":"Ten ticket został odebrany przez {0}",
|
||||||
|
"unclaimTitle":"Nie można już odebrać tego biletu!",
|
||||||
|
"changeTitle":"Changed ticket type to {0}!",
|
||||||
|
|
||||||
|
"statsTitle":"Oto statystyki dotyczące {0}!",
|
||||||
|
"autocloseTitle":"Ten ticket zostanie automatycznie zamknięty po {0}!",
|
||||||
|
"autocloseRejectTitle":"Ten ticket nie będzie już automatycznie zamykany!",
|
||||||
|
"autocloseWarn":"Dotyczy to tylko nieaktywnych biletów!",
|
||||||
|
|
||||||
|
"goToTicket":"Przejdź do ticketa",
|
||||||
|
"ticketWarning":"Osadzenie znajduje się w wiadomości poniżej!",
|
||||||
|
"maxTicketWarning":"**Ostrzeżenie:** _Możesz utworzyć tylko {0} bilet(ów) na raz!_"
|
||||||
|
},
|
||||||
|
"helpMenu":{
|
||||||
|
"title":"Dostępne polecenia:",
|
||||||
|
"header1":"**Przejdź do {0}, aby utworzyć zgłoszenie!**\n\n",
|
||||||
|
"header2":"**Uruchom polecenie `/new` lub `/ticket`, aby utworzyć zgłoszenie!**\n\n",
|
||||||
|
|
||||||
|
"msgCmd":"Odradzaj osadzanie za pomocą przycisków. (tylko administratorzy)",
|
||||||
|
"renameCmd":"Zmień nazwę zgłoszenia. (bez spacji)",
|
||||||
|
"closeCmd":"Zamknij ticket.",
|
||||||
|
"deleteCmd":"Skasuj ticket.",
|
||||||
|
"addCmd":"Dodaj użytkownika do zgłoszenia.",
|
||||||
|
"removeCmd":"Usuń użytkownika ze zgłoszenia.",
|
||||||
|
"reopenCmd":"Otwórz ponownie ticket po jego zamknięciu.",
|
||||||
|
"changeCmd":"Zmień typ ticketa.",
|
||||||
|
"claimCmd":"Odbierz ticket.",
|
||||||
|
"unclaimCmd":"Zrezygnuj z ticketa.",
|
||||||
|
"statsCmd":"Pokaż statystyki zgłoszenia.",
|
||||||
|
"autocloseCmd":"Ustaw timer, aby automatycznie zamykał ticket."
|
||||||
|
},
|
||||||
|
"buttons":{
|
||||||
|
"close":"Zamknij",
|
||||||
|
"delete":"Skasuj",
|
||||||
|
"reopen":"Otworz ponownie",
|
||||||
|
"closeWithReason":"Zamknij z powodem"
|
||||||
|
},
|
||||||
|
"messages":{
|
||||||
|
"closedDescription":"Tylko admini mogą teraz rozmawiać w tym zgłoszeniu!\n\n*Kliknij przycisk poniżej, aby usunąć lub ponownie otworzyć ten ticket!*",
|
||||||
|
"createdTitle":"Ticket Created!",
|
||||||
|
"createdDescription":"Twój ticket został utworzony, możesz go wykryć za pomocą pingu!",
|
||||||
|
|
||||||
|
"newTicketDmTitle":"Nowy Ticket!",
|
||||||
|
"closedTicketDmTitle":"Ticket Zamknięty!",
|
||||||
|
"deletedTicketDmTitle":"Ticket Skasowany!",
|
||||||
|
"closedTicketDmDescription":"Twój ticket jest zamknięty!",
|
||||||
|
"deletedTicketDmDescription":"Twój ticket został skasowany!",
|
||||||
|
"reopenTicketDmTitle":"Ticket otwarty!",
|
||||||
|
"reopenTicketDmDescription":"Twój ticket został ponownie otwarty!",
|
||||||
|
|
||||||
|
"chooseCategory":"Wybierz kategorię:",
|
||||||
|
"gettingdeleted":"Ticket jest usuwany..",
|
||||||
|
|
||||||
|
"none":"brak",
|
||||||
|
"reason":"powód",
|
||||||
|
"createdat":"utworzony",
|
||||||
|
"openedby":"otwarte przez",
|
||||||
|
"deletedby":"skasowane przez",
|
||||||
|
"closedby":"zamknięte przez",
|
||||||
|
|
||||||
|
"modalreason":"Jaki jest powód zamknięcia tego zgłoszenia?",
|
||||||
|
"chooseATicket": "Wybierz zgłoszenie"
|
||||||
|
},
|
||||||
|
"transcripts":{
|
||||||
|
"title":"Transkrypcja",
|
||||||
|
"processed":"Ta transkrypcja jest przetwarzana",
|
||||||
|
"wait":"Proszę czekać!",
|
||||||
|
"estimated":"Szacowany czas",
|
||||||
|
"available":"Transkrypcja jest dostępna tutaj"
|
||||||
|
}
|
||||||
|
}
|
||||||
+33
-19
@@ -1,4 +1,7 @@
|
|||||||
{
|
{
|
||||||
|
"_CREDITS":"QuirAddon#9778",
|
||||||
|
"_INFO":"This file is a translation for open ticket 3.4.1",
|
||||||
|
|
||||||
"errors":{
|
"errors":{
|
||||||
"missingArgsTitle":"Argumentos inválidos!",
|
"missingArgsTitle":"Argumentos inválidos!",
|
||||||
"missingArgsDescription":"Argumento ausente",
|
"missingArgsDescription":"Argumento ausente",
|
||||||
@@ -24,10 +27,17 @@
|
|||||||
"closeTitle":"Fechado este ticket!",
|
"closeTitle":"Fechado este ticket!",
|
||||||
"deleteTitle":"Excluindo este ticket...",
|
"deleteTitle":"Excluindo este ticket...",
|
||||||
"reopenTitle":"Reabriu este ticket!",
|
"reopenTitle":"Reabriu este ticket!",
|
||||||
"claimTitle":"This ticket is now claimed to {0}",
|
|
||||||
"unclaimTitle":"This ticket isn't claimed anymore!",
|
|
||||||
"changeTitle":"Changed ticket type to {0}!",
|
|
||||||
|
|
||||||
|
"claimTitle":"Esse ticket foi reinvidicado {0}",
|
||||||
|
"unclaimTitle":"Esse ticket não foi reinvidicado!",
|
||||||
|
"changeTitle":"Tipo de ticket alterado para {0}!",
|
||||||
|
|
||||||
|
"statsTitle":"Aqui estão as estatísticas para {0}!",
|
||||||
|
"autocloseTitle":"Este ticket vai fechar altomaticamente após {0}!",
|
||||||
|
"autocloseRejectTitle":"Este ticket não será mais fechado automaticamente!",
|
||||||
|
"autocloseWarn":"Isso apenas afeta tickets inativos!",
|
||||||
|
|
||||||
|
"goToTicket":"ir para ticket",
|
||||||
"ticketWarning":"A incorporação está na mensagem abaixo!",
|
"ticketWarning":"A incorporação está na mensagem abaixo!",
|
||||||
"maxTicketWarning":"**Cuidado:** _Você só pode criar {0} ticket(s) de cada vez!!_"
|
"maxTicketWarning":"**Cuidado:** _Você só pode criar {0} ticket(s) de cada vez!!_"
|
||||||
},
|
},
|
||||||
@@ -42,18 +52,20 @@
|
|||||||
"deleteCmd":"Excluir um ticket.",
|
"deleteCmd":"Excluir um ticket.",
|
||||||
"addCmd":"Adicionar um usuário ao ticket.",
|
"addCmd":"Adicionar um usuário ao ticket.",
|
||||||
"removeCmd":"Remover um usuário do ticket.",
|
"removeCmd":"Remover um usuário do ticket.",
|
||||||
"reopenCmd":"Reabra um ticket depois que ele foi fechado."
|
"reopenCmd":"Reabra um ticket depois que ele foi fechado.",
|
||||||
|
"changeCmd":"Mudar tipo de ticket",
|
||||||
|
"claimCmd":"Resgatar Ticket",
|
||||||
|
"unclaimCmd":"Desresgatar Ticket",
|
||||||
|
"statsCmd":"Olhar status do ticket",
|
||||||
|
"autocloseCmd":"Definir tempo para fechar ticket automaticamente."
|
||||||
},
|
},
|
||||||
"buttons":{
|
"buttons":{
|
||||||
"close":"Fechar Ticket",
|
"close":"Fechar Ticket",
|
||||||
"delete":"Excluir Ticket",
|
"delete":"Excluir Ticket",
|
||||||
"reopen":"Reabrir Ticket",
|
"reopen":"Reabrir Ticket",
|
||||||
"closeWithReason":"close with reason"
|
"closeWithReason":"fechado com motivo"
|
||||||
},
|
},
|
||||||
"messages":{
|
"messages":{
|
||||||
"reopenTitle":"Reabriu este ticket!",
|
|
||||||
"reopenDescription":"Sinta-se à vontade para falar novamente!",
|
|
||||||
"closedTitle":"Fechado este ticket!",
|
|
||||||
"closedDescription":"Somente administradores podem falar neste ticket agora!\n\n*Clique no botão abaixo para excluir ou reabrir este ticket!*",
|
"closedDescription":"Somente administradores podem falar neste ticket agora!\n\n*Clique no botão abaixo para excluir ou reabrir este ticket!*",
|
||||||
"createdTitle":"Ticket criado!",
|
"createdTitle":"Ticket criado!",
|
||||||
"createdDescription":"Seu ticket foi criado, você pode detectá-lo com um ping!",
|
"createdDescription":"Seu ticket foi criado, você pode detectá-lo com um ping!",
|
||||||
@@ -69,19 +81,21 @@
|
|||||||
"chooseCategory":"Escolha a categoria:",
|
"chooseCategory":"Escolha a categoria:",
|
||||||
"gettingdeleted":"Ticket está sendo deletado...",
|
"gettingdeleted":"Ticket está sendo deletado...",
|
||||||
|
|
||||||
"none":"none",
|
"none":"vazio",
|
||||||
"reason":"reason",
|
"reason":"motivo",
|
||||||
|
"createdat":"Criado por:",
|
||||||
|
"openedby":"Aberto por:",
|
||||||
|
"deletedby":"deletado por",
|
||||||
|
"closedby":"fechado por",
|
||||||
|
|
||||||
"deletedby":"deleted by",
|
"modalreason":"Qual o motivo de fechar o ticket?",
|
||||||
"closedby":"closed by",
|
"chooseATicket": "Fechar Ticket"
|
||||||
"modalreason":"What is the reason for closing this ticket?",
|
|
||||||
"chooseATicket": "Choose a ticket"
|
|
||||||
},
|
},
|
||||||
"transcripts":{
|
"transcripts":{
|
||||||
"title":"Transcript",
|
"title":"Transcrever",
|
||||||
"processed":"This transcript is being processed",
|
"processed":"A Transcrição está em andamento",
|
||||||
"wait":"Please wait!",
|
"wait":"Por favor espere!",
|
||||||
"estimated":"Estimated time",
|
"estimated":"Tempo estimado",
|
||||||
"available":"The transcript is available here"
|
"available":"A Transcrição está disponível aqui"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+22
-8
@@ -1,4 +1,7 @@
|
|||||||
{
|
{
|
||||||
|
"_CREDITS":"Sanke#6086",
|
||||||
|
"_INFO":"This file is a translation for open ticket 3.4.1",
|
||||||
|
|
||||||
"errors":{
|
"errors":{
|
||||||
"missingArgsTitle":"Argumente Invalide",
|
"missingArgsTitle":"Argumente Invalide",
|
||||||
"missingArgsDescription":"Argument Lipsa",
|
"missingArgsDescription":"Argument Lipsa",
|
||||||
@@ -24,10 +27,17 @@
|
|||||||
"closeTitle":"Ticket inchis!",
|
"closeTitle":"Ticket inchis!",
|
||||||
"deleteTitle":"Se sterge ticket-ul...",
|
"deleteTitle":"Se sterge ticket-ul...",
|
||||||
"reopenTitle":"Ticket Re-deschis!",
|
"reopenTitle":"Ticket Re-deschis!",
|
||||||
"claimTitle":"This ticket is now claimed to {0}",
|
|
||||||
"unclaimTitle":"This ticket isn't claimed anymore!",
|
|
||||||
"changeTitle":"Changed ticket type to {0}!",
|
|
||||||
|
|
||||||
|
"claimTitle":"Acest ticket a primit claim de la {0}",
|
||||||
|
"unclaimTitle":"Acest ticket nu mai este detinut!",
|
||||||
|
"changeTitle":"A fost schimbat tipul ticket-ului la {0}!",
|
||||||
|
|
||||||
|
"statsTitle":"Acestea sunt informatiile pentru {0}!",
|
||||||
|
"autocloseTitle":"Acest ticket va fi inchis automat dupa {0}!",
|
||||||
|
"autocloseRejectTitle":"Acest ticket nu va mai fi inchis automat!",
|
||||||
|
"autocloseWarn":"Aceasta optiune afecteaza numai ticketele inactive!",
|
||||||
|
|
||||||
|
"goToTicket":"Mergi la ticket",
|
||||||
"ticketWarning":"Embed-ul se afla in mesajul de mai jos!",
|
"ticketWarning":"Embed-ul se afla in mesajul de mai jos!",
|
||||||
"maxTicketWarning":"**Avertizare:** _Poti creea doar {0} tickete active!_"
|
"maxTicketWarning":"**Avertizare:** _Poti creea doar {0} tickete active!_"
|
||||||
},
|
},
|
||||||
@@ -42,7 +52,12 @@
|
|||||||
"deleteCmd":"Sterge un ticket.",
|
"deleteCmd":"Sterge un ticket.",
|
||||||
"addCmd":"Adauga un utilizator in ticket.",
|
"addCmd":"Adauga un utilizator in ticket.",
|
||||||
"removeCmd":"Sterge un utilizator din ticket.",
|
"removeCmd":"Sterge un utilizator din ticket.",
|
||||||
"reopenCmd":"Re-deschide un ticket dupa ce a fost deschis."
|
"reopenCmd":"Re-deschide un ticket dupa ce a fost deschis.",
|
||||||
|
"changeCmd":"Schimba categoria ticket-ului.",
|
||||||
|
"claimCmd":"Revendica un ticket",
|
||||||
|
"unclaimCmd":"Anuleaza revendicarea unui ticket.",
|
||||||
|
"statsCmd":"Afiseasa informatiile ticket-ului.",
|
||||||
|
"autocloseCmd":"Seteaza un cronometru pentru inchiderea ticket-ului."
|
||||||
},
|
},
|
||||||
"buttons":{
|
"buttons":{
|
||||||
"close":"Inchide ticket-ul",
|
"close":"Inchide ticket-ul",
|
||||||
@@ -51,9 +66,6 @@
|
|||||||
"closeWithReason":"Inchide cu motiv"
|
"closeWithReason":"Inchide cu motiv"
|
||||||
},
|
},
|
||||||
"messages":{
|
"messages":{
|
||||||
"reopenTitle":"Ticket Re-deschis!",
|
|
||||||
"reopenDescription":"Poti vorbi din nou!",
|
|
||||||
"closedTitle":"Ticket inchis!",
|
|
||||||
"closedDescription":"Doar adminii pot vorbi in acest ticket acum!\n\n*Apasa pe butonul de mai jos pentru a re-deschide ori sterge ticket-ul!*",
|
"closedDescription":"Doar adminii pot vorbi in acest ticket acum!\n\n*Apasa pe butonul de mai jos pentru a re-deschide ori sterge ticket-ul!*",
|
||||||
"createdTitle":"Ticket Creat!",
|
"createdTitle":"Ticket Creat!",
|
||||||
"createdDescription":"Ticket-ul tau a fost creat, poti sa il vezi in canalul pe care ai fost mentionat!",
|
"createdDescription":"Ticket-ul tau a fost creat, poti sa il vezi in canalul pe care ai fost mentionat!",
|
||||||
@@ -71,9 +83,11 @@
|
|||||||
|
|
||||||
"none":"niciunul",
|
"none":"niciunul",
|
||||||
"reason":"Motiv",
|
"reason":"Motiv",
|
||||||
|
"createdat":"Creat la",
|
||||||
|
"openedby":"Deschis de",
|
||||||
"deletedby":"Sters de",
|
"deletedby":"Sters de",
|
||||||
"closedby":"Inchis de",
|
"closedby":"Inchis de",
|
||||||
|
|
||||||
"modalreason":"Care este motivul pentru inchiderea acestui ticket?",
|
"modalreason":"Care este motivul pentru inchiderea acestui ticket?",
|
||||||
"chooseATicket": "Alege un ticket"
|
"chooseATicket": "Alege un ticket"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -0,0 +1,101 @@
|
|||||||
|
{
|
||||||
|
"_CREDITS":"Apexo#0723",
|
||||||
|
"_INFO":"This file is a translation for open ticket 3.4.1",
|
||||||
|
|
||||||
|
"errors":{
|
||||||
|
"missingArgsTitle":"Неверные аргументы!",
|
||||||
|
"missingArgsDescription":"Отсутствует аргумент",
|
||||||
|
"noPermsTitle":"Недостаточно прав!",
|
||||||
|
"noPermsDescription":"Вы должны иметь права `ADMINISTRATOR` или быть в списке разрешённых ролей!",
|
||||||
|
"noPermsDelete":"Только админы могут удалить тикет!",
|
||||||
|
"chooseFromListTitle":"Неверный ID",
|
||||||
|
"chooseFromListDescription":"Выберите один из id ниже:",
|
||||||
|
"boterror":"Ошибка бота!",
|
||||||
|
"notInTicketTitle":"Вы не в тикете!",
|
||||||
|
"notInTicketDescription":"Эта команда не работает вне тикетов!",
|
||||||
|
"ticketDoesntExist":"Этого тикета больше не существует!",
|
||||||
|
"roleDoesntExist":"Этой роли больше не существует!",
|
||||||
|
"anotherOption":"Эта опция не является тикетом, а представляет собой другой тип!",
|
||||||
|
"maxAmountTitle":"Максимальное количество достигнуто!",
|
||||||
|
"maxAmountDescription":"Вы достигли максимальное количество разрешённых тикетов!\nТеперь вы не можете создать ещё один!",
|
||||||
|
"somethingWentWrong":"**Что-то пошло не так!**\nПожайлуста, попробуйте в другой раз!"
|
||||||
|
},
|
||||||
|
"commands":{
|
||||||
|
"userAddedTitle":"Добавлено {0} в этот тикет!",
|
||||||
|
"userRemovedTitle":"Удалено {0} из этого тикета!",
|
||||||
|
"renameTitle":"Изменено имя на {0}!",
|
||||||
|
"closeTitle":"Закрыл этот тикет!",
|
||||||
|
"deleteTitle":"Удаляем этот тикет...",
|
||||||
|
"reopenTitle":"Открываем заново этот тикет!",
|
||||||
|
|
||||||
|
"claimTitle":"Этот тикет теперь взят {0}",
|
||||||
|
"unclaimTitle":"Этот тикет никем не взят!",
|
||||||
|
"changeTitle":"Изменён тип тикета на {0}!",
|
||||||
|
|
||||||
|
"statsTitle":"Здесь статистика для {0}!",
|
||||||
|
"autocloseTitle":"Этот тикет будет закрыт автоматически после {0}!",
|
||||||
|
"autocloseRejectTitle":"Этот тикет больше не будет закрыт автоматически!",
|
||||||
|
"autocloseWarn":"Это касается только неактивных тикетов!",
|
||||||
|
|
||||||
|
"goToTicket":"перейти в тикет",
|
||||||
|
"ticketWarning":"embed ниже сообщения!",
|
||||||
|
"maxTicketWarning":"**Предупреждение:** _Вы можете создать только {0} тикет(а/ов) в этот раз!_"
|
||||||
|
},
|
||||||
|
"helpMenu":{
|
||||||
|
"title":"Доступные команды:",
|
||||||
|
"header1":"**Перейдите в {0}, чтобы создать тикет!**\n\n",
|
||||||
|
"header2":"**Выполните команду `/new` или `/ticket` для создания тикета!**\n\n",
|
||||||
|
|
||||||
|
"msgCmd":"Создать embed с кнопками. (только админам)",
|
||||||
|
"renameCmd":"Переименовать тикет. (без пробелов)",
|
||||||
|
"closeCmd":"Закрыть тикет.",
|
||||||
|
"deleteCmd":"Удалить тикет.",
|
||||||
|
"addCmd":"Добавить пользователя в тикет.",
|
||||||
|
"removeCmd":"Удалить пользователя из тикета.",
|
||||||
|
"reopenCmd":"Открыть заново тикет после того, как он был закрыт.",
|
||||||
|
"changeCmd":"Поменять тип тикета.",
|
||||||
|
"claimCmd":"Взять тикет.",
|
||||||
|
"unclaimCmd":"Снять тикет.",
|
||||||
|
"statsCmd":"Посмотреть статистику тикета.",
|
||||||
|
"autocloseCmd":"Установить таймер, чтобы автоматически закрыть тикет"
|
||||||
|
},
|
||||||
|
"buttons":{
|
||||||
|
"close":"Закрыть тикет",
|
||||||
|
"delete":"Удалить тикет",
|
||||||
|
"reopen":"Открыть заново тикет",
|
||||||
|
"closeWithReason":"закрыть с причиной"
|
||||||
|
},
|
||||||
|
"messages":{
|
||||||
|
"closedDescription":"Только админы теперь могут писать в этом тикете!\n\n*Нажмите на кнопку ниже, чтобы удалить или заново окрыть тикет!*",
|
||||||
|
"createdTitle":"Тикет создан!",
|
||||||
|
"createdDescription":"Ваш тикет создан, вы можете обнаружить его по пингу!",
|
||||||
|
|
||||||
|
"newTicketDmTitle":"Новый тикет!",
|
||||||
|
"closedTicketDmTitle":"Тикет закрыт!",
|
||||||
|
"deletedTicketDmTitle":"Тикет удалён!",
|
||||||
|
"closedTicketDmDescription":"Ваш тикет закрыт!",
|
||||||
|
"deletedTicketDmDescription":"Ваш тикет удалён!",
|
||||||
|
"reopenTicketDmTitle":"Тикет открыт заново!",
|
||||||
|
"reopenTicketDmDescription":"Ваш тикет открыт заново!",
|
||||||
|
|
||||||
|
"chooseCategory":"выберите категорию:",
|
||||||
|
"gettingdeleted":"Тикет будет удалён...",
|
||||||
|
|
||||||
|
"none":"отсутствует",
|
||||||
|
"reason":"причина",
|
||||||
|
"createdat":"создан",
|
||||||
|
"openedby":"открыт",
|
||||||
|
"deletedby":"удалён",
|
||||||
|
"closedby":"закрыт",
|
||||||
|
|
||||||
|
"modalreason":"Какая причина закрытия этого тикета?",
|
||||||
|
"chooseATicket": "Выберите тикет"
|
||||||
|
},
|
||||||
|
"transcripts":{
|
||||||
|
"title":"Транскрипт",
|
||||||
|
"processed":"Этот транскрипт находится в процессе обработки",
|
||||||
|
"wait":"Пожайлуста подождите!",
|
||||||
|
"estimated":"Оценочное время",
|
||||||
|
"available":"Транскрипт здесь доступен"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -2,6 +2,7 @@
|
|||||||
"examples":{
|
"examples":{
|
||||||
"en-GB":"english",
|
"en-GB":"english",
|
||||||
"en-US":"english",
|
"en-US":"english",
|
||||||
|
"no": "Norwegian",
|
||||||
"nl":"dutch",
|
"nl":"dutch",
|
||||||
"ro":"romanian",
|
"ro":"romanian",
|
||||||
"de":"german",
|
"de":"german",
|
||||||
@@ -9,6 +10,8 @@
|
|||||||
"fr":"french",
|
"fr":"french",
|
||||||
"es-ES":"spanish",
|
"es-ES":"spanish",
|
||||||
"it":"italian",
|
"it":"italian",
|
||||||
|
"ru":"russian",
|
||||||
|
"tr": "Türkçe",
|
||||||
|
|
||||||
"MISSING":"arabic,portuguese",
|
"MISSING":"arabic,portuguese",
|
||||||
"NOTAVAILABLE":"arabic,portuguese,czech"
|
"NOTAVAILABLE":"arabic,portuguese,czech"
|
||||||
@@ -17,134 +20,170 @@
|
|||||||
"help":{
|
"help":{
|
||||||
"en-GB":"A list of the available commands.",
|
"en-GB":"A list of the available commands.",
|
||||||
"en-US":"A list of the available commands.",
|
"en-US":"A list of the available commands.",
|
||||||
|
"no":"En liste over commands.",
|
||||||
"nl":"Een lijst met de beschikbare commands.",
|
"nl":"Een lijst met de beschikbare commands.",
|
||||||
"ro":"O lista a comenzilor disponibile.",
|
"ro":"O lista a comenzilor disponibile.",
|
||||||
"de":"Eine Liste der verfügbaren Befehle.",
|
"de":"Eine Liste der verfügbaren Befehle.",
|
||||||
"cs":"A list of the available commands",
|
"cs":"A list of the available commands",
|
||||||
"fr":"Une liste des commandes.",
|
"fr":"Une liste des commandes.",
|
||||||
"es-ES":"Una lista de los comandos disponibles.",
|
"es-ES":"Una lista de los comandos disponibles.",
|
||||||
"it":"Una lista di tutti i comandi disponibili."
|
"it":"Una lista di tutti i comandi disponibili.",
|
||||||
|
"ru":"Список доступных команд",
|
||||||
|
"tr": "Kullanılabilir komutların listesi."
|
||||||
},
|
},
|
||||||
"message":{
|
"message":{
|
||||||
"en-GB":"Spawn an embed with buttons.",
|
"en-GB":"Spawn an embed with buttons.",
|
||||||
"en-US":"Spawn an embed with buttons.",
|
"en-US":"Spawn an embed with buttons.",
|
||||||
|
"no":"Legg inn en melding i denne kanalen",
|
||||||
"nl":"Spawn een embed met knoppen.",
|
"nl":"Spawn een embed met knoppen.",
|
||||||
"ro":"Deschide un embed cu butoane.",
|
"ro":"Deschide un embed cu butoane.",
|
||||||
"de":"Sendet ein Embed mit Knöpfen.",
|
"de":"Sendet ein Embed mit Knöpfen.",
|
||||||
"cs":"Spawn an embed with buttons.",
|
"cs":"Spawn an embed with buttons.",
|
||||||
"fr":"Créer un embed avec des boutons.",
|
"fr":"Créer un embed avec des boutons.",
|
||||||
"es-ES":"Genera un embed con botones.",
|
"es-ES":"Genera un embed con botones.",
|
||||||
"it":"Genera un embed con un pulsante."
|
"it":"Genera un embed con un pulsante.",
|
||||||
|
"ru":"Создать embed с кнопками",
|
||||||
|
"tr": "Butonlar ile bir yerleştirme oluşturun."
|
||||||
},
|
},
|
||||||
"close":{
|
"close":{
|
||||||
"en-GB":"Close a ticket.",
|
"en-GB":"Close a ticket.",
|
||||||
"en-US":"Close a ticket.",
|
"en-US":"Close a ticket.",
|
||||||
|
"no":"Lukk ticket.",
|
||||||
"nl":"Sluit een ticket",
|
"nl":"Sluit een ticket",
|
||||||
"ro":"Inchide un ticket.",
|
"ro":"Inchide un ticket.",
|
||||||
"de":"Schließe ein Ticket.",
|
"de":"Schließe ein Ticket.",
|
||||||
"cs":"Close a ticket.",
|
"cs":"Close a ticket.",
|
||||||
"fr":"Fermer un ticket.",
|
"fr":"Fermer un ticket.",
|
||||||
"es-ES":"Cierra un ticket.",
|
"es-ES":"Cierra un ticket.",
|
||||||
"it":"Chiudi un ticket."
|
"it":"Chiudi un ticket.",
|
||||||
|
"ru":"Закрыть тикет",
|
||||||
|
"tr": "Bileti kapat."
|
||||||
},
|
},
|
||||||
"delete":{
|
"delete":{
|
||||||
"en-GB":"Delete a ticket.",
|
"en-GB":"Delete a ticket.",
|
||||||
"en-US":"Delete a ticket.",
|
"en-US":"Delete a ticket.",
|
||||||
|
"no":"Slett ticket.",
|
||||||
"nl":"Verwijder een ticket",
|
"nl":"Verwijder een ticket",
|
||||||
"ro":"Sterge un ticket.",
|
"ro":"Sterge un ticket.",
|
||||||
"de":"Lösche ein Ticket.",
|
"de":"Lösche ein Ticket.",
|
||||||
"cs":"Delete a ticket.",
|
"cs":"Delete a ticket.",
|
||||||
"fr":"Supprimer un ticket.",
|
"fr":"Supprimer un ticket.",
|
||||||
"es-ES":"Elimina un ticket.",
|
"es-ES":"Elimina un ticket.",
|
||||||
"it":"Elimina un ticket."
|
"it":"Elimina un ticket.",
|
||||||
|
"ru":"Удалить тикет",
|
||||||
|
"tr": "Bileti sil."
|
||||||
},
|
},
|
||||||
"reopen":{
|
"reopen":{
|
||||||
"en-GB":"Re-Open a ticket.",
|
"en-GB":"Re-Open a ticket.",
|
||||||
"en-US":"Re-Open a ticket.",
|
"en-US":"Re-Open a ticket.",
|
||||||
|
"no":"Gjenåpne ticket.",
|
||||||
"nl":"Heropen een ticket.",
|
"nl":"Heropen een ticket.",
|
||||||
"ro":"Re-deschide un ticket.",
|
"ro":"Re-deschide un ticket.",
|
||||||
"de":"Wiedereröffnung eines Tickets.",
|
"de":"Wiedereröffnung eines Tickets.",
|
||||||
"cs":"Re-Open a ticket.",
|
"cs":"Re-Open a ticket.",
|
||||||
"fr":"Re-ouvrir un ticket.",
|
"fr":"Re-ouvrir un ticket.",
|
||||||
"es-ES":"Re-abre un ticket.",
|
"es-ES":"Re-abre un ticket.",
|
||||||
"it":"Ri-Apri un ticket."
|
"it":"Ri-Apri un ticket.",
|
||||||
|
"ru":"Открыть заново тикет",
|
||||||
|
"tr": "Bileti yeniden aç."
|
||||||
},
|
},
|
||||||
"add":{
|
"add":{
|
||||||
"en-GB":"Add another user to a ticket.",
|
"en-GB":"Add another user to a ticket.",
|
||||||
"en-US":"Add another user to a ticket.",
|
"en-US":"Add another user to a ticket.",
|
||||||
|
"no":"Legg til en annen bruker til ticket.",
|
||||||
"nl":"Voeg een andere user toe aan een ticket.",
|
"nl":"Voeg een andere user toe aan een ticket.",
|
||||||
"ro":"Adauga un utilizator la acest ticket.",
|
"ro":"Adauga un utilizator la acest ticket.",
|
||||||
"de":"Füge einen anderen Nutzer zum Ticket hinzu.",
|
"de":"Füge einen anderen Nutzer zum Ticket hinzu.",
|
||||||
"cs":"Add another user to a ticket.",
|
"cs":"Add another user to a ticket.",
|
||||||
"fr":"Ajouter un utilisateur au ticket.",
|
"fr":"Ajouter un utilisateur au ticket.",
|
||||||
"es-ES":"Agrega otro usuario al ticket.",
|
"es-ES":"Agrega otro usuario al ticket.",
|
||||||
"it":"Aggiungi un membro al ticket"
|
"it":"Aggiungi un membro al ticket",
|
||||||
|
"ru":"Добавить другого пользователя в тикет",
|
||||||
|
"tr": "Bilete başka bir kullanıcı ekle."
|
||||||
},
|
},
|
||||||
"remove":{
|
"remove":{
|
||||||
"en-GB":"Remove a user from a ticket.",
|
"en-GB":"Remove a user from a ticket.",
|
||||||
"en-US":"Remove a user from a ticket.",
|
"en-US":"Remove a user from a ticket.",
|
||||||
|
"no":"Fjern en bruker fra ticket.",
|
||||||
"nl":"Verwijder een user van een ticket.",
|
"nl":"Verwijder een user van een ticket.",
|
||||||
"ro":"Sterge un utilizator dintr-un ticket.",
|
"ro":"Sterge un utilizator dintr-un ticket.",
|
||||||
"de":"Entferne einen Nutzer von dem Ticket.",
|
"de":"Entferne einen Nutzer von dem Ticket.",
|
||||||
"cs":"Remove a user from a ticket.",
|
"cs":"Remove a user from a ticket.",
|
||||||
"fr":"Enlever quelqu’un du ticket.",
|
"fr":"Enlever quelqu’un du ticket.",
|
||||||
"es-ES":"Elimina otro usuario del ticket.",
|
"es-ES":"Elimina otro usuario del ticket.",
|
||||||
"it":"Rimuovi un membro dal ticket"
|
"it":"Rimuovi un membro dal ticket",
|
||||||
|
"ru":"Удалить пользователя из тикета",
|
||||||
|
"tr": "Kullanıcıyı bir biletten kaldır."
|
||||||
},
|
},
|
||||||
"newticket":{
|
"newticket":{
|
||||||
"en-GB":"Create a ticket",
|
"en-GB":"Create a ticket",
|
||||||
"en-US":"Create a ticket",
|
"en-US":"Create a ticket",
|
||||||
|
"no":"Lag en ny ticket",
|
||||||
"nl":"Maak een ticket aan",
|
"nl":"Maak een ticket aan",
|
||||||
"ro":"Creeaza un ticket.",
|
"ro":"Creeaza un ticket.",
|
||||||
"de":"Erstelle ein Ticket.",
|
"de":"Erstelle ein Ticket.",
|
||||||
"cs":"Create a ticket",
|
"cs":"Create a ticket",
|
||||||
"fr":"Créer un ticket",
|
"fr":"Créer un ticket",
|
||||||
"es-ES":"Crear un ticket.",
|
"es-ES":"Crear un ticket.",
|
||||||
"it":"Crea un ticket"
|
"it":"Crea un ticket",
|
||||||
|
"ru":"Создать тикет",
|
||||||
|
"tr": "Bilet oluştur"
|
||||||
},
|
},
|
||||||
"rename":{
|
"rename":{
|
||||||
"en-GB":"Rename a ticket channel.",
|
"en-GB":"Rename a ticket channel.",
|
||||||
"en-US":"Rename a ticket channel.",
|
"en-US":"Rename a ticket channel.",
|
||||||
|
"no":"Gi nytt navn til ticket kanalen.",
|
||||||
"nl":"Hernoem een ticket channel.",
|
"nl":"Hernoem een ticket channel.",
|
||||||
"ro":"Redenumeste un ticket.",
|
"ro":"Redenumeste un ticket.",
|
||||||
"de":"Benenne einen Ticket Channel.",
|
"de":"Benenne einen Ticket Channel.",
|
||||||
"cs":"Rename a ticket channel",
|
"cs":"Rename a ticket channel",
|
||||||
"fr":"Renommer un ticket.",
|
"fr":"Renommer un ticket.",
|
||||||
"es-ES":"Renombrar un canal de ticket.",
|
"es-ES":"Renombrar un canal de ticket.",
|
||||||
"it":"Rinomina il canale di un ticket."
|
"it":"Rinomina il canale di un ticket.",
|
||||||
|
"ru":"Переименовать канал тикета",
|
||||||
|
"tr": "Bilet kanalını yeniden adlandır."
|
||||||
},
|
},
|
||||||
"claim":{
|
"claim":{
|
||||||
"en-GB":"Claim a ticket.",
|
"en-GB":"Claim a ticket.",
|
||||||
"en-US":"Claim a ticket.",
|
"en-US":"Claim a ticket.",
|
||||||
|
"no":"Overta ticket.",
|
||||||
"nl":"Claim een ticket.",
|
"nl":"Claim een ticket.",
|
||||||
"ro":" ",
|
"ro":" ",
|
||||||
"de":" ",
|
"de":" ",
|
||||||
"cs":" ",
|
"cs":" ",
|
||||||
"fr":" ",
|
"fr":" ",
|
||||||
"es-ES":" ",
|
"es-ES":" ",
|
||||||
"it":" "
|
"it":" ",
|
||||||
|
"ru":"Взять тикет",
|
||||||
|
"tr":"Bilet talep et."
|
||||||
},
|
},
|
||||||
"unclaim":{
|
"unclaim":{
|
||||||
"en-GB":"Un-claim a ticket.",
|
"en-GB":"Un-claim a ticket.",
|
||||||
"en-US":"Un-claim a ticket.",
|
"en-US":"Un-claim a ticket.",
|
||||||
|
"no":"Frigjør ticket.",
|
||||||
"nl":"Ontclaim een ticket.",
|
"nl":"Ontclaim een ticket.",
|
||||||
"ro":" ",
|
"ro":" ",
|
||||||
"de":" ",
|
"de":" ",
|
||||||
"cs":" ",
|
"cs":" ",
|
||||||
"fr":" ",
|
"fr":" ",
|
||||||
"es-ES":" ",
|
"es-ES":" ",
|
||||||
"it":" "
|
"it":" ",
|
||||||
|
"ru":"Снять тикет",
|
||||||
|
"tr":"Bileti iptal et."
|
||||||
},
|
},
|
||||||
"category":{
|
"category":{
|
||||||
"en-GB":"Change ticket type.",
|
"en-GB":"Change ticket type.",
|
||||||
"en-US":"Change ticket type.",
|
"en-US":"Change ticket type.",
|
||||||
|
"no":"Endre ticket type.",
|
||||||
"nl":"Verander ticket type.",
|
"nl":"Verander ticket type.",
|
||||||
"ro":" ",
|
"ro":" ",
|
||||||
"de":" ",
|
"de":" ",
|
||||||
"cs":" ",
|
"cs":" ",
|
||||||
"fr":" ",
|
"fr":" ",
|
||||||
"es-ES":" ",
|
"es-ES":" ",
|
||||||
"it":" "
|
"it":" ",
|
||||||
|
"ru":"Изменить тип тикета",
|
||||||
|
"tr":"Bilet türünü değiştir."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,101 @@
|
|||||||
|
{
|
||||||
|
"_CREDITS":"n1kkec#5341",
|
||||||
|
"_INFO":"This file is a translation for open ticket 3.4.1",
|
||||||
|
|
||||||
|
"errors":{
|
||||||
|
"missingArgsTitle":"Napačen argument!",
|
||||||
|
"missingArgsDescription":"Argument manka",
|
||||||
|
"noPermsTitle":"Nimas dovoljenja!",
|
||||||
|
"noPermsDescription":"Potrebuješ dovoljenje `ADMINISTRATOR` ali pa biti v listi dovoljenih role!",
|
||||||
|
"noPermsDelete":"Samo admini lahko izbrišejo ticket!",
|
||||||
|
"chooseFromListTitle":"Napačen ID",
|
||||||
|
"chooseFromListDescription":"Izberi eden izmed ID-jev:",
|
||||||
|
"boterror":"NAPAKA Bota!",
|
||||||
|
"notInTicketTitle":"Nisi v ticketu!",
|
||||||
|
"notInTicketDescription": "Ta ukaz ne deluje zunaj ticket-ov!",
|
||||||
|
"ticketDoesntExist": "Ta ticket ne obstaja več!",
|
||||||
|
"roleDoesntExist": "Ta vloga ne obstaja več!",
|
||||||
|
"anotherOption": "Ta možnost ni ticket, ampak druga vrsta!",
|
||||||
|
"maxAmountTitle": "Najvišji doseženi znesek!",
|
||||||
|
"maxAmountDescription": "Dosegli ste največje dovoljeno število ticket-ov!\nTako da ne morete ustvariti nove!",
|
||||||
|
"somethingWentWrong": "**Nekaj je šlo narobe!**\nProsimo, poskusite znova drugič!"
|
||||||
|
},
|
||||||
|
"commands":{
|
||||||
|
"userAddedTitle": "Dodan {0} v ta ticket!",
|
||||||
|
"userRemovedTitle": "Odstranjeo {0} iz tega ticket-!",
|
||||||
|
"renameTitle": "Spremenjeno ime na {0}!",
|
||||||
|
"closeTitle": "Zaprl ta ticket!",
|
||||||
|
"deleteTitle": "Brisanje ticketa...",
|
||||||
|
"reopenTitle": "Ponovno odprl ta ticket!",
|
||||||
|
|
||||||
|
"claimTitle":"Ticket je claimal {0}",
|
||||||
|
"unclaimTitle":"Ticket ni več claiman!",
|
||||||
|
"changeTitle":"Changed ticket type to {0}!",
|
||||||
|
|
||||||
|
"statsTitle":"Statistike za {0}!",
|
||||||
|
"autocloseTitle":"Ticket so avtomatsko zapru po {0}!",
|
||||||
|
"autocloseRejectTitle":"Ticket se nebo avtomatsko zapru!",
|
||||||
|
"autocloseWarn":"To ima efekt samo na inactive ticketih!",
|
||||||
|
|
||||||
|
"goToTicket":"pojdi v ticket",
|
||||||
|
"ticketWarning": "Opozorilo je v spodnjem sporočilu!",
|
||||||
|
"maxTicketWarning": "**Opozorilo:** _Naenkrat lahko ustvarite le {0} ticketov!_"
|
||||||
|
},
|
||||||
|
"helpMenu":{
|
||||||
|
"title": "Razpoložljivi ukazi:",
|
||||||
|
"header1": "**Izberite {0} in ustvarite ticket!**\n\n",
|
||||||
|
"header2": "**Zaženi ukaz `/new` ali `/ticket` za ustvarjanje ticket-a!**\n\n",
|
||||||
|
|
||||||
|
"msgCmd": "Ustvari vstavek z gumbi. (samo za administratorje)",
|
||||||
|
"renameCmd": "Preimenujte ticket. (brez presledkov)",
|
||||||
|
"closeCmd": "Zapri ticket.",
|
||||||
|
"deleteCmd": "Izbriši ticket.",
|
||||||
|
"addCmd": "Dodaj uporabnika v ticket.",
|
||||||
|
"removeCmd": "Odstrani uporabnika z ticket-a.",
|
||||||
|
"reopenCmd": "Ponovno odprite ticket, ko je bila zaprta.",
|
||||||
|
"changeCmd":"Spremeni tip ticketa.",
|
||||||
|
"claimCmd":"Claimaj ticket.",
|
||||||
|
"unclaimCmd":"Unclaimaj ticket.",
|
||||||
|
"statCmds":"Statistike ticketa.",
|
||||||
|
"autocloseCmd":"Nastavi timer da avtomatsko zapre ticket"
|
||||||
|
},
|
||||||
|
"buttons":{
|
||||||
|
"close":"Zapri Ticket",
|
||||||
|
"delete":"Izbrisi Ticket",
|
||||||
|
"reopen":"Odpri Ticket",
|
||||||
|
"closeWithReason":"Zapri z razlogom"
|
||||||
|
},
|
||||||
|
"messages":{
|
||||||
|
"closedDescription": "V tem ticket-u lahko zdaj govorijo samo administratorji!\n\n*Kliknite na spodnji gumb za brisanje ali ponovno odprtje te ticket!*",
|
||||||
|
"createdTitle": "Ticket ustvarjen!",
|
||||||
|
"createdDescription": "Vaš ticket je ustvarjen, lahko jo odkrijete s pingom!",
|
||||||
|
|
||||||
|
"newTicketDmTitle": "Nov ticket!",
|
||||||
|
"closedTicketDmTitle": "Ticket zaprt!",
|
||||||
|
"deletedTicketDmTitle": "Izbrisan ticket!",
|
||||||
|
"closedTicketDmDescription": "Vaš ticket je zaprta!",
|
||||||
|
"deletedTicketDmDescription": "Vaš ticket je izbrisan!",
|
||||||
|
"reopenTicketDmTitle": "Ticket je ponovno odprt!",
|
||||||
|
"reopenTicketDmDescription": "Vaš ticket je ponovno odprt!",
|
||||||
|
|
||||||
|
"chooseCategory": "izberite kategorijo:",
|
||||||
|
"gettingdeleted": "Ticket se briše...",
|
||||||
|
|
||||||
|
"none": "ni",
|
||||||
|
"reason": "razlog",
|
||||||
|
"createdat":"ustvarjeno ob",
|
||||||
|
"openedby":"odprto od",
|
||||||
|
"deletedby": "izbrisano s",
|
||||||
|
"closedby": "zaprl",
|
||||||
|
|
||||||
|
"modalreason": "Kakšen je razlog za zaprtje tega ticket?",
|
||||||
|
"chooseATicket": "Izberi ticket"
|
||||||
|
},
|
||||||
|
"transcripts":{
|
||||||
|
"naslov": "Transkript",
|
||||||
|
"obdelano": "Ta prepis se obdeluje",
|
||||||
|
"wait": "Počakajte!",
|
||||||
|
"estimated": "Predvideni čas",
|
||||||
|
"available": "Prepis je na voljo tukaj"
|
||||||
|
}
|
||||||
|
}
|
||||||
+22
-8
@@ -1,4 +1,7 @@
|
|||||||
{
|
{
|
||||||
|
"_CREDITS":"Redactado#1673 & josuens14#5267",
|
||||||
|
"_INFO":"This file is a translation for open ticket 3.4.1",
|
||||||
|
|
||||||
"errors":{
|
"errors":{
|
||||||
"missingArgsTitle":"¡Argumentos inválidos!",
|
"missingArgsTitle":"¡Argumentos inválidos!",
|
||||||
"missingArgsDescription":"Argumento faltante.",
|
"missingArgsDescription":"Argumento faltante.",
|
||||||
@@ -24,10 +27,17 @@
|
|||||||
"closeTitle":"Cerró este ticket!",
|
"closeTitle":"Cerró este ticket!",
|
||||||
"deleteTitle":"Eliminando este ticket...",
|
"deleteTitle":"Eliminando este ticket...",
|
||||||
"reopenTitle":"Re-abrió este boleto!",
|
"reopenTitle":"Re-abrió este boleto!",
|
||||||
"claimTitle":"Este ticket será atendido por {0}",
|
|
||||||
"unclaimTitle":"¡Este ticket ya no está reservado!",
|
|
||||||
"changeTitle":"¡Cambiando el tipo de ticket a {0}!",
|
|
||||||
|
|
||||||
|
"claimTitle":"Este ticket fué reclamado por {0}",
|
||||||
|
"unclaimTitle":"¡Este ticket se encuentra desatendido!",
|
||||||
|
"changeTitle":"¡Cambiado el tipo de ticket a {0}!",
|
||||||
|
|
||||||
|
"statsTitle":"¡Aquí están las estadísticas para {0}!",
|
||||||
|
"autocloseTitle":"¡Este ticket será cerrado después de {0}!",
|
||||||
|
"autocloseRejectTitle":"¡Cierre automático del ticket desactivado!",
|
||||||
|
"autocloseWarn":"¡Esto solo afecta tickets inactivos!",
|
||||||
|
|
||||||
|
"goToTicket":"ir al ticket",
|
||||||
"ticketWarning":"La inserción está en el mensaje a continuación!",
|
"ticketWarning":"La inserción está en el mensaje a continuación!",
|
||||||
"maxTicketWarning":"**Advertencia:** _Solo puedes crear {0} ticket(s) a la vez!_"
|
"maxTicketWarning":"**Advertencia:** _Solo puedes crear {0} ticket(s) a la vez!_"
|
||||||
},
|
},
|
||||||
@@ -42,7 +52,12 @@
|
|||||||
"deleteCmd":"Eliminar un ticket.",
|
"deleteCmd":"Eliminar un ticket.",
|
||||||
"addCmd":"Agregar un usuario al ticket.",
|
"addCmd":"Agregar un usuario al ticket.",
|
||||||
"removeCmd":"Eliminar un usuario del ticket.",
|
"removeCmd":"Eliminar un usuario del ticket.",
|
||||||
"reopenCmd":"Re-Abre un ticket después de que este se vea cerrado."
|
"reopenCmd":"Re-Abre un ticket después de que este se vea cerrado.",
|
||||||
|
"changeCmd":"Cambia el tipo de ticket.",
|
||||||
|
"claimCmd":"Reclama un ticket.",
|
||||||
|
"unclaimCmd":"Desatiende un ticket.",
|
||||||
|
"statsCmd":"Mira las estadísticas de los tickets.",
|
||||||
|
"autocloseCmd":"Establece un temporizador para cerrar el ticket."
|
||||||
},
|
},
|
||||||
"buttons":{
|
"buttons":{
|
||||||
"close":"Cerrar ticket.",
|
"close":"Cerrar ticket.",
|
||||||
@@ -51,9 +66,6 @@
|
|||||||
"closeWithReason":"cerrar con razón"
|
"closeWithReason":"cerrar con razón"
|
||||||
},
|
},
|
||||||
"messages":{
|
"messages":{
|
||||||
"reopenTitle":"¡Ticket Re-Abierto!",
|
|
||||||
"reopenDescription":"¡Siéntete libre de hablar de nuevo!",
|
|
||||||
"closedTitle":"¡Ticket cerrado!",
|
|
||||||
"closedDescription":"¡Solo admins pueden hablar ahora en este ticket!\n\n*¡Presiona en el botón de abajo para eliminar o re-abrir el ticket!*",
|
"closedDescription":"¡Solo admins pueden hablar ahora en este ticket!\n\n*¡Presiona en el botón de abajo para eliminar o re-abrir el ticket!*",
|
||||||
"createdTitle":"¡Ticket creado!",
|
"createdTitle":"¡Ticket creado!",
|
||||||
"createdDescription":"¡Ticket creado, también te he mencionado en él!",
|
"createdDescription":"¡Ticket creado, también te he mencionado en él!",
|
||||||
@@ -71,9 +83,11 @@
|
|||||||
|
|
||||||
"none":"Ninguna.",
|
"none":"Ninguna.",
|
||||||
"reason":"Razón",
|
"reason":"Razón",
|
||||||
|
"createdat":"creado el",
|
||||||
|
"openedby":"abierto por",
|
||||||
"deletedby":"eliminado por",
|
"deletedby":"eliminado por",
|
||||||
"closedby":"cerrado por",
|
"closedby":"cerrado por",
|
||||||
|
|
||||||
"modalreason":"Cúal es la razón para cerrar este ticket?",
|
"modalreason":"Cúal es la razón para cerrar este ticket?",
|
||||||
"chooseATicket": "Elije un ticket"
|
"chooseATicket": "Elije un ticket"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -0,0 +1,101 @@
|
|||||||
|
{
|
||||||
|
"_CREDITS":"Mods HD#0661",
|
||||||
|
"_INFO":"This file is a translation for open ticket 3.4.1",
|
||||||
|
|
||||||
|
"errors":{
|
||||||
|
"missingArgsTitle":"อาร์กิวเมนต์ไม่ถูกต้อง!",
|
||||||
|
"missingArgsDescription":"ขาดอาร์กิวเมนต์",
|
||||||
|
"noPermsTitle":"ไม่มีสิทธิ์!",
|
||||||
|
"noPermsDescription":"คุณต้องมีสิทธิ์ `ADMINISTRATOR` หรืออยู่ในรายการบทบาทที่ได้รับอนุญาต!",
|
||||||
|
"noPermsDelete":"เฉพาะผู้ดูแลระบบเท่านั้นที่สามารถลบตั๋วได้!",
|
||||||
|
"chooseFromListTitle":"ID ไม่ถูกต้อง",
|
||||||
|
"chooseFromListDescription":"เลือกหนึ่งใน ID ด้านล่าง:",
|
||||||
|
"boterror":"ข้อผิดพลาดของบอท!",
|
||||||
|
"notInTicketTitle":"คุณไม่ได้อยู่ในตั๋ว!",
|
||||||
|
"notInTicketDescription":"คำสั่งนี้ไม่ทำงานนอกตั๋ว!",
|
||||||
|
"ticketDoesntExist":"ตั๋วนี้ไม่มีอีกแล้ว!",
|
||||||
|
"roleDoesntExist":"บทบาทนี้ไม่มีอีกแล้ว!",
|
||||||
|
"anotherOption":"ตัวเลือกนี้ไม่ใช่ตั๋ว แต่เป็นประเภทอื่น!",
|
||||||
|
"maxAmountTitle":"ถึงจำนวนสูงสุดแล้ว!",
|
||||||
|
"maxAmountDescription":"คุณได้ถึงจำนวนสูงสุดของตั๋วที่อนุญาต!\nดังนั้นคุณไม่สามารถสร้างใหม่ได้!",
|
||||||
|
"somethingWentWrong":"**มีบางอย่างผิดพลาด!**\nกรุณาลองอีกครั้งในภายหลัง!"
|
||||||
|
},
|
||||||
|
"commands":{
|
||||||
|
"userAddedTitle":"เพิ่ม {0} ในตั๋วนี้!",
|
||||||
|
"userRemovedTitle":"ลบ {0} ออกจากตั๋วนี้!",
|
||||||
|
"renameTitle":"เปลี่ยนชื่อเป็น {0}!",
|
||||||
|
"closeTitle":"ปิดตั๋วนี้!",
|
||||||
|
"deleteTitle":"กำลังลบตั๋วนี้...",
|
||||||
|
"reopenTitle":"เปิดตั๋วนี้อีกครั้ง!",
|
||||||
|
|
||||||
|
"claimTitle":"ตั๋วนี้ถูกเรียกขึ้นโดย {0}",
|
||||||
|
"unclaimTitle":"ตั๋วนี้ไม่ได้ถูกเรียกขึ้นแล้ว!",
|
||||||
|
"changeTitle":"เปลี่ยนประเภทตั๋วเป็น {0}!",
|
||||||
|
|
||||||
|
"statsTitle":"นี่คือสถิติสำหรับ {0}!",
|
||||||
|
"autocloseTitle":"ตั๋วนี้จะถูกปิดอัตโนมัติหลังจาก {0}!",
|
||||||
|
"autocloseRejectTitle":"ตั๋วนี้จะไม่ถูกปิดอัตโนมัติอีกต่อไป!",
|
||||||
|
"autocloseWarn":"ส่วนนี้มีผลกับตั๋วที่ไม่ได้ใช้งาน!",
|
||||||
|
|
||||||
|
"goToTicket":"ไปที่ตั๋ว",
|
||||||
|
"ticketWarning":"Embed อยู่ในข้อความด้านล่าง!",
|
||||||
|
"maxTicketWarning":"**คำเตือน:** _คุณสามารถสร้างได้ {0} ตั๋วในครั้งเดียว!_"
|
||||||
|
},
|
||||||
|
"helpMenu":{
|
||||||
|
"title":"คำสั่งที่ใช้ได้:",
|
||||||
|
"header1":"**ไปที่ {0} เพื่อสร้างตั๋ว!**\n\n",
|
||||||
|
"header2":"**ใช้คำสั่ง `/new` หรือ `/ticket` เพื่อสร้างตั๋ว!**\n\n",
|
||||||
|
|
||||||
|
"msgCmd":"สร้าง embed พร้อมปุ่ม (เฉพาะผู้ดูแลระบบ)",
|
||||||
|
"renameCmd":"เปลี่ยนชื่อตั๋ว (ไม่มีช่องว่าง)",
|
||||||
|
"closeCmd":"ปิดตั๋ว",
|
||||||
|
"deleteCmd":"ลบตั๋ว",
|
||||||
|
"addCmd":"เพิ่มผู้ใช้ในตั๋ว",
|
||||||
|
"removeCmd":"ลบผู้ใช้ออกจากตั๋ว",
|
||||||
|
"reopenCmd":"เปิดตั๋วอีกครั้งหลังจากถูกปิด",
|
||||||
|
"changeCmd":"เปลี่ยนประเภทตั๋ว",
|
||||||
|
"claimCmd":"เรียกขึ้นตั๋ว",
|
||||||
|
"unclaimCmd":"ยกเลิกการเรียกขึ้นตั๋ว",
|
||||||
|
"statsCmd":"ดูสถิติตั๋ว",
|
||||||
|
"autocloseCmd":"ตั้งค่าการปิดตั๋วอัตโนมัติ"
|
||||||
|
},
|
||||||
|
"buttons":{
|
||||||
|
"close":"ปิดตั๋ว",
|
||||||
|
"delete":"ลบตั๋ว",
|
||||||
|
"reopen":"เปิดตั๋วอีกครั้ง",
|
||||||
|
"closeWithReason":"ปิดด้วยเหตุผล"
|
||||||
|
},
|
||||||
|
"messages":{
|
||||||
|
"closedDescription":"เฉพาะผู้ดูแลระบบเท่านั้นที่สามารถพูดคุยในตั๋วนี้ได้!\n\n*คลิกที่ปุ่มด้านล่างเพื่อลบหรือเปิดตั๋วนี้อีกครั้ง!*",
|
||||||
|
"createdTitle":"สร้างตั๋วแล้ว!",
|
||||||
|
"createdDescription":"ตั๋วของคุณถูกสร้างแล้ว คุณสามารถตรวจสอบได้จากการแจ้งเตือน!",
|
||||||
|
|
||||||
|
"newTicketDmTitle":"ตั๋วใหม่!",
|
||||||
|
"closedTicketDmTitle":"ปิดตั๋ว!",
|
||||||
|
"deletedTicketDmTitle":"ลบตั๋ว!",
|
||||||
|
"closedTicketDmDescription":"ตั๋วของคุณถูกปิด!",
|
||||||
|
"deletedTicketDmDescription":"ตั๋วของคุณถูกลบ!",
|
||||||
|
"reopenTicketDmTitle":"เปิดตั๋วอีกครั้ง!",
|
||||||
|
"reopenTicketDmDescription":"ตั๋วของคุณถูกเปิดอีกครั้ง!",
|
||||||
|
|
||||||
|
"chooseCategory":"เลือกหมวดหมู่:",
|
||||||
|
"gettingdeleted":"กำลังลบตั๋ว...",
|
||||||
|
|
||||||
|
"none":"ไม่มี",
|
||||||
|
"reason":"เหตุผล",
|
||||||
|
"createdat":"สร้างเมื่อ",
|
||||||
|
"openedby":"เปิดโดย",
|
||||||
|
"deletedby":"ถูกลบโดย",
|
||||||
|
"closedby":"ถูกปิดโดย",
|
||||||
|
|
||||||
|
"modalreason":"เหตุผลในการปิดตั๋วนี้คืออะไร?",
|
||||||
|
"chooseATicket": "เลือกตั๋ว"
|
||||||
|
},
|
||||||
|
"transcripts":{
|
||||||
|
"title":"บันทึกการสนทนา",
|
||||||
|
"processed":"บันทึกการสนทนากำลังดำเนินการ",
|
||||||
|
"wait":"กรุณารอ!",
|
||||||
|
"estimated":"เวลาโดยประมาณ",
|
||||||
|
"available":"บันทึกการสนทนาสามารถใช้งานได้ที่นี่"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,101 @@
|
|||||||
|
{
|
||||||
|
"_CREDITS":"Hydrâelčhâvø#1575",
|
||||||
|
"_INFO":"This file is a translation for open ticket 3.4.1",
|
||||||
|
|
||||||
|
"errors":{
|
||||||
|
"missingArgsTitle":"Geçersiz argümanlar!",
|
||||||
|
"missingArgsDescription":"Eksik argüman!",
|
||||||
|
"noPermsTitle":"Bunun için yetkin yok!",
|
||||||
|
"noPermsDescription":"Bunu yapmak için 'ADMİNİSTRAR'rolüne ihtiyacınız var, veya izin verilen roller listesinde olun!",
|
||||||
|
"noPermsDelete":"Sadece adminler bileti silebilir!",
|
||||||
|
"chooseFromListTitle":"Geçersiz Kimlik",
|
||||||
|
"chooseFromListDescription":"Aşağıdaki kimliklerden birini seçin:",
|
||||||
|
"boterror":"Bot Hatası!",
|
||||||
|
"notInTicketTitle":"Bir biletin yok!",
|
||||||
|
"notInTicketDescription":"Bu komut bilet dışında kullanılamaz!",
|
||||||
|
"ticketDoesntExist":"Bu bilet artık yok!",
|
||||||
|
"roleDoesntExist":"Bu rol artık yok!",
|
||||||
|
"anotherOption":"Bu seçenek bir bilet değil, başka bir türdür!",
|
||||||
|
"maxAmountTitle":"Ulaşabileceğin maksimum tutara ulaştın!",
|
||||||
|
"maxAmountDescription":"İzin verilen maksimum bilet sayısına ulaştınız!\nHhayır yeni bir tane oluşturamazsın!",
|
||||||
|
"somethingWentWrong":"**Bir şeyler ters gitti!**\n lütfen başka bir zaman tekrar deneyin!"
|
||||||
|
},
|
||||||
|
"commands":{
|
||||||
|
"userAddedTitle":"Bilete {0} adlı kullanıcı eklendi!",
|
||||||
|
"userRemovedTitle":"Biletten {0} adlı kullanıcı çıkarıldı !",
|
||||||
|
"renameTitle":"Bilet ismi {0} olarak değştirildi!",
|
||||||
|
"closeTitle":"Bilet Kapatıldı!",
|
||||||
|
"deleteTitle":"Bilet siliniyor...",
|
||||||
|
"reopenTitle":"Bilet Yeniden Açıldı!",
|
||||||
|
|
||||||
|
"claimTitle":"Bu bilet artık talep edildi. {0}",
|
||||||
|
"unclaimTitle":"Tu bilet artık talep edilmiyor!",
|
||||||
|
"changeTitle":"Bu bilet türü {0} olarak değiştirildi!",
|
||||||
|
|
||||||
|
"statsTitle":"Here are the stats for {0}!",
|
||||||
|
"autocloseTitle":"This ticket will be closed automatically after {0}!",
|
||||||
|
"autocloseRejectTitle":"This ticket will no longer be closed automatically!",
|
||||||
|
"autocloseWarn":"This only affects inactive tickets!",
|
||||||
|
|
||||||
|
"goToTicket":"go to ticket",
|
||||||
|
"ticketWarning":"Gömme aşağıdaki mesajda yer almaktadır!",
|
||||||
|
"maxTicketWarning":"**Uyarı:** _You can only create {0} ticket(s) at a time!_"
|
||||||
|
},
|
||||||
|
"helpMenu":{
|
||||||
|
"title":"Kullanılabilir Komutlar:",
|
||||||
|
"header1":"**Bilet oluşturmak için {0} kanalını kullan!**\n\n",
|
||||||
|
"header2":"**Bilet oluşturmak için `/new` veya `/ticket' komutunu çalıştırın!**\n\n",
|
||||||
|
|
||||||
|
"msgCmd":"Gömülü bilet mesajı gönderir. (sadece yöneticiler)",
|
||||||
|
"renameCmd":"Bilet adını değiştirir. (boşluk olmadan)",
|
||||||
|
"closeCmd":"Bileti kapatır.",
|
||||||
|
"deleteCmd":"Bileti siler.",
|
||||||
|
"addCmd":"Bilete kullanıcı ekler.",
|
||||||
|
"removeCmd":"Biletten kullanıcı çıkarır.",
|
||||||
|
"reopenCmd":"Bilet kapandıktan sonra tekrar açar.",
|
||||||
|
"changeCmd":"Change ticket type.",
|
||||||
|
"claimCmd":"Claim a ticket.",
|
||||||
|
"unclaimCmd":"Unclaim a ticket.",
|
||||||
|
"statsCmd":"View ticket stats.",
|
||||||
|
"autocloseCmd":"Set timer to automatically close ticket"
|
||||||
|
},
|
||||||
|
"buttons":{
|
||||||
|
"close":"Bileti Kapat",
|
||||||
|
"delete":"Bileti Sil",
|
||||||
|
"reopen":"Bileti Yeniden Aç",
|
||||||
|
"closeWithReason":"Bu bileti neden kapatıyorsun ?"
|
||||||
|
},
|
||||||
|
"messages":{
|
||||||
|
"closedDescription":"Bu bilette artık sadece yöneticiler konuşabilir!\n\n* Bu bileti silmek veya yeniden açmak için aşağıdaki butona tıklayın!*",
|
||||||
|
"createdTitle":"Talep Oluşturuldu!",
|
||||||
|
"createdDescription":"Your ticket is created, you can detect it by a ping!",
|
||||||
|
|
||||||
|
"newTicketDmTitle":"Yeni Bilet!",
|
||||||
|
"closedTicketDmTitle":"Bilet Kapatıldı!",
|
||||||
|
"deletedTicketDmTitle":"Bilet Silindi!",
|
||||||
|
"closedTicketDmDescription":"Senin biletin kapatıldı!",
|
||||||
|
"deletedTicketDmDescription":"Senin biletin silindi!",
|
||||||
|
"reopenTicketDmTitle":"Bilet yeniden açıldı!",
|
||||||
|
"reopenTicketDmDescription":"Senin biletin yeniden açıldı!",
|
||||||
|
|
||||||
|
"chooseCategory":"Bir kategori seç:",
|
||||||
|
"gettingdeleted":"Bu bilet siliniyor...",
|
||||||
|
|
||||||
|
"none":"yok",
|
||||||
|
"reason":"sebep",
|
||||||
|
"createdat":"created at",
|
||||||
|
"openedby":"opened by",
|
||||||
|
"deletedby":"Silen kişi",
|
||||||
|
"closedby":"Kapatan kişi",
|
||||||
|
|
||||||
|
"modalreason":"Bu biletin kapanmasının sebebi nedir?",
|
||||||
|
"chooseATicket": "Bir bilet seçin"
|
||||||
|
},
|
||||||
|
"transcripts":{
|
||||||
|
"title":"Transkript",
|
||||||
|
"processed":"Bu transkript işleniyor",
|
||||||
|
"wait":"Lütfen Bekleyiniz!",
|
||||||
|
"estimated":"Tahmini Süre",
|
||||||
|
"available":"Transkript burada mevcuttur"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,101 @@
|
|||||||
|
{
|
||||||
|
"_CREDITS":"Anderskiy#4093",
|
||||||
|
"_INFO":"Цей файл є перекладом для open ticket 3.4.1",
|
||||||
|
|
||||||
|
"errors":{
|
||||||
|
"missingArgsTitle":"Невірні аргументи!",
|
||||||
|
"missingArgsDescription":"Відсутні аргументи!",
|
||||||
|
"noPermsTitle":"Відсутні права!",
|
||||||
|
"noPermsDescription":"Вам потрібно право `ADMINISTRATOR` або бути в списку дозволених ролей!",
|
||||||
|
"noPermsDelete":"Тільки адміни можуть видаляти тікети!",
|
||||||
|
"chooseFromListTitle":"Недійсний ID",
|
||||||
|
"chooseFromListDescription":"Виберіть один із наведених нижче id:",
|
||||||
|
"boterror":"Помилка боту!",
|
||||||
|
"notInTicketTitle":"Вас немає в тікеті!",
|
||||||
|
"notInTicketDescription":"Ця команда не працює поза тікетами!",
|
||||||
|
"ticketDoesntExist":"Цей тікет більше не існує!",
|
||||||
|
"roleDoesntExist":"Ця роль більше не існує!",
|
||||||
|
"anotherOption":"Це не є тікетом, а є іншим типом!",
|
||||||
|
"maxAmountTitle":"Досягнуто максимальної кількості!",
|
||||||
|
"maxAmountDescription":"Ви досягли максимально дозволеної кількості тікетів!\nТож ви не можете створити новий!",
|
||||||
|
"somethingWentWrong":"**Щось пішло не так!**\nБудь ласка, спробуйте ще раз!"
|
||||||
|
},
|
||||||
|
"commands":{
|
||||||
|
"userAddedTitle":"Додано {0} до цього тікету!",
|
||||||
|
"userRemovedTitle":"Видалено {0} з цього тікету!",
|
||||||
|
"renameTitle":"Змінено ім'я на {0}!",
|
||||||
|
"closeTitle":"Тікет закритий!",
|
||||||
|
"deleteTitle":"Видаляємо тікет",
|
||||||
|
"reopenTitle":"Знову відкриваємо тікет!",
|
||||||
|
|
||||||
|
"claimTitle":"Цей тікет узяв {0}",
|
||||||
|
"unclaimTitle":"Цей тікет ніким не зайнятий!",
|
||||||
|
"changeTitle":"Тип тікету змінено на {0}!",
|
||||||
|
|
||||||
|
"statsTitle":"Ось статистика для {0}!",
|
||||||
|
"autocloseTitle":"Цей тікет буде автоматично закрито після {0}!",
|
||||||
|
"autocloseRejectTitle":"Цей тікет більше не закриватиметься автоматично!",
|
||||||
|
"autocloseWarn":"Це стосується лише неактивних тікетів!",
|
||||||
|
|
||||||
|
"goToTicket":"перейти до тікету",
|
||||||
|
"ticketWarning":"Ембед знаходиться в повідомленні нижче!",
|
||||||
|
"maxTicketWarning":"**Попередження:** _Ви можете створити лише стільки квитків за раз: {0}!_"
|
||||||
|
},
|
||||||
|
"helpMenu":{
|
||||||
|
"title":"Доступні команди:",
|
||||||
|
"header1":"**Перейдіть до {0}, щоб створити тікет!**\n\n",
|
||||||
|
"header2":"**Виконайте команду `/new` або `/ticket`, щоб створити тікет!**\n\n",
|
||||||
|
|
||||||
|
"msgCmd":"Створити ембед з кнопками. (тільки адміністратори)",
|
||||||
|
"renameCmd":"Перейменувати тікет. (без пробілів)",
|
||||||
|
"closeCmd":"Закрити тікет.",
|
||||||
|
"deleteCmd":"Видалити тікет.",
|
||||||
|
"addCmd":"Додати користувача до тікету.",
|
||||||
|
"removeCmd":"Видалити користувача з тікету.",
|
||||||
|
"reopenCmd":"Повторне відкриття тікету після його закриття.",
|
||||||
|
"changeCmd":"Змінити тіп тикету.",
|
||||||
|
"claimCmd":"Узяти тікет.",
|
||||||
|
"unclaimCmd":"Відмовитися від тікету.",
|
||||||
|
"statsCmd":"Переглянути статистику тікету.",
|
||||||
|
"autocloseCmd":"Встановіть таймер для автоматичного закриття квитка"
|
||||||
|
},
|
||||||
|
"buttons":{
|
||||||
|
"close":"Закрити тікет",
|
||||||
|
"delete":"Видалити тікет",
|
||||||
|
"reopen":"Відкрити тікет",
|
||||||
|
"closeWithReason":"Закрити з причиною"
|
||||||
|
},
|
||||||
|
"messages":{
|
||||||
|
"closedDescription":"Зараз лише адміністратори можуть говорити в цьому тікеті!\n\n*Натисніть кнопку нижче, щоб видалити або повторно відкрити цей тікет!*",
|
||||||
|
"createdTitle":"Тікет створено!",
|
||||||
|
"createdDescription":"Ваш тікет створено, ви можете визначити його за допомогою пінгу!",
|
||||||
|
|
||||||
|
"newTicketDmTitle":"Новий тікет!",
|
||||||
|
"closedTicketDmTitle":"Тікет закрито!",
|
||||||
|
"deletedTicketDmTitle":"Тікет видалено!",
|
||||||
|
"closedTicketDmDescription":"Твій тікет закрито!",
|
||||||
|
"deletedTicketDmDescription":"Твій тікет видалено!",
|
||||||
|
"reopenTicketDmTitle":"Тікет відкритий!",
|
||||||
|
"reopenTicketDmDescription":"Твій тікет відкритий!",
|
||||||
|
|
||||||
|
"chooseCategory":"виберіть категорію:",
|
||||||
|
"gettingdeleted":"Тікет видаляється...",
|
||||||
|
|
||||||
|
"none":"пусто",
|
||||||
|
"reason":"причина",
|
||||||
|
"createdat":"створений",
|
||||||
|
"openedby":"відкритий",
|
||||||
|
"deletedby":"видалений",
|
||||||
|
"closedby":"закритий",
|
||||||
|
|
||||||
|
"modalreason":"Яка причина закриття цього тікету?",
|
||||||
|
"chooseATicket": "Виберіть тікет"
|
||||||
|
},
|
||||||
|
"transcripts":{
|
||||||
|
"title":"Транскрипція",
|
||||||
|
"processed":"Ця транскрипція обробляється",
|
||||||
|
"wait":"Будь-ласка почекайте!",
|
||||||
|
"estimated":"Розрахунковий час",
|
||||||
|
"available":"Транскрипція доступна тут"
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
Binary file not shown.
|
Before Width: | Height: | Size: 65 KiB |
+3
-4
@@ -1,11 +1,11 @@
|
|||||||
{
|
{
|
||||||
"name": "open-ticket",
|
"name": "open-ticket",
|
||||||
"version": "3.2.1",
|
"version": "3.4.1",
|
||||||
"description": "This is an open-source discord ticket bot, you can configure it and it comes with cool features like a transcript.",
|
"description": "This is an open-source discord ticket bot, you can configure it and it comes with cool features like a transcript.",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "node index.js",
|
"start": "node index.js",
|
||||||
"test": "node index.js d",
|
"test": "node index.js --devconfig",
|
||||||
"slashEnable": "node index.js slash enable",
|
"slashEnable": "node index.js slash enable",
|
||||||
"slashDisable": "node index.js slash disable",
|
"slashDisable": "node index.js slash disable",
|
||||||
"cleardata": "node ./core/dynamicdatabase/cleardata.js"
|
"cleardata": "node ./core/dynamicdatabase/cleardata.js"
|
||||||
@@ -15,8 +15,7 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"axios": "^0.27.2",
|
"axios": "^0.27.2",
|
||||||
"chalk": "^5.0.1",
|
"chalk": "^5.0.1",
|
||||||
"discord.js": "^14.7.1",
|
"discord.js": "^14.11.0"
|
||||||
"node": "^16.10.0"
|
|
||||||
},
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
|
|||||||
+20
-6
@@ -1,18 +1,32 @@
|
|||||||
{
|
{
|
||||||
"sendTranscripts":{
|
"sendTranscripts":{
|
||||||
"enableChannel":false,
|
"enableChannel":false,
|
||||||
"channel":"transcript channel id",
|
"enableDM":false,
|
||||||
"useHTMLtranscripts":true,
|
|
||||||
|
|
||||||
"enableDM":false
|
"channel":"transcript channel id",
|
||||||
|
"useHTMLtranscripts":true
|
||||||
},
|
},
|
||||||
"style":{
|
"style":{
|
||||||
"titleColor":"#F8BA00",
|
|
||||||
"background":{
|
"background":{
|
||||||
"enableCustomBackground":false,
|
"enableCustomBackground":false,
|
||||||
"backgroundModus":"color OR image",
|
"backgroundModus":"image OR color",
|
||||||
"backgroundData":"#abc123 OR https://www.example.com/image.png"
|
"backgroundData":"image url OR hex color (#ffffff)"
|
||||||
|
|
||||||
|
},
|
||||||
|
"header":{
|
||||||
|
"enableCustomHeader":false,
|
||||||
|
"backgroundColor":"#202225",
|
||||||
|
"decoColor":"#F8BA00",
|
||||||
|
"textColor":"#ffffff"
|
||||||
|
|
||||||
|
},
|
||||||
|
"stats":{
|
||||||
|
"enableCustomStats":false,
|
||||||
|
"backgroundColor":"#202225",
|
||||||
|
"keyTextColor":"#737373",
|
||||||
|
"valueTextColor":"#ffffff",
|
||||||
|
"hideBackgroundColor":"#40444a",
|
||||||
|
"hideTextColor":"#ffffff"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user