Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5bdb7941b6 | ||
|
|
01c1f3150e | ||
|
|
e524cccd19 | ||
|
|
ede102bddf | ||
|
|
ab5d5c06be | ||
|
|
355f078ee5 | ||
|
|
c207560743 | ||
|
|
b29dfaeaae | ||
|
|
1710111fcb | ||
|
|
805c6b8e55 | ||
|
|
d0ab311da4 | ||
|
|
92a3671768 | ||
|
|
71074e1afe | ||
|
|
e80ce1a64a | ||
|
|
5dfbce1856 | ||
|
|
407e56a806 | ||
|
|
e0f42834e5 | ||
|
|
d03abd9eeb | ||
|
|
466a4aea81 | ||
|
|
9d96d11cd3 | ||
|
|
e3b99e656e | ||
|
|
07e2a68d06 | ||
|
|
795ca4f981 | ||
|
|
5231129278 | ||
|
|
f62bc7adf9 | ||
|
|
5de6b1e906 | ||
|
|
62413505d6 | ||
|
|
20b617f6eb | ||
|
|
94510bbfb0 | ||
|
|
d51511fdb5 | ||
|
|
3447a37603 | ||
|
|
4b17aa640f | ||
|
|
3b7674f1a5 | ||
|
|
7de9339da3 | ||
|
|
e2e1e19bc8 | ||
|
|
5f19adf561 | ||
|
|
1bb70745ea | ||
|
|
589bbe5cd5 | ||
|
|
447fddea56 | ||
|
|
bf7a003799 | ||
|
|
6115ab1cc8 | ||
|
|
c2307fd1ed | ||
|
|
2a3850c3cc | ||
|
|
688c40ce7b | ||
|
|
dee2a21be9 |
@@ -9,14 +9,15 @@ If there is translation missing & you can write json, then go to the next step!
|
|||||||
|
|
||||||
### Step 2: translating
|
### Step 2: translating
|
||||||
**RULES:**
|
**RULES:**
|
||||||
- Always upload to the [__`dev` branch!__](https://github.com/DJj123dj/open-ticket/tree/dev)
|
- Always upload or create a pull request to the [__`dev` branch!__](https://github.com/DJj123dj/open-ticket/tree/dev)
|
||||||
- Don't change anything else, except the translation you are adding!
|
- 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
|
- 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.
|
- 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!
|
If you translate, you need to change 2 files! The first one is required, the other 2 are optional & will be added by us if you don't do it!
|
||||||
1. add `yourlanguage.json` to the `/language/` directory
|
1. add `yourlanguage.json` to the `/language/` directory
|
||||||
2. (OPTIONAL) add your discord name & tag in the translator table in `README.md`
|
2. add your username to the `_CREDITS` part of `yourlanguage.json`!
|
||||||
|
3. add your discord username in the translator table in `README.md`
|
||||||
|
|
||||||
### Step 3: waiting
|
### 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!
|
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!
|
||||||
@@ -28,10 +29,10 @@ But don't worry! You can already write some plugins!
|
|||||||
**RULES:**
|
**RULES:**
|
||||||
- Always specify the versions that the plugin is compatible with!
|
- Always specify the versions that the plugin is compatible with!
|
||||||
- If extra npm dependencies are needed, then they also need to be specified!
|
- 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!
|
- 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 the original unedited version of Open Ticket!
|
||||||
|
|
||||||
## Other versions of contributing
|
## 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!
|
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 further!
|
||||||
|
|
||||||
<br>
|
<br>
|
||||||
CONTRIBUTING GUIDELINES - Last updated: 23/3/2023<br>
|
CONTRIBUTING GUIDELINES - Last updated: 23/3/2023<br>
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
github: DJj123dj
|
||||||
+21
-22
@@ -1,39 +1,38 @@
|
|||||||
# Security Policy
|
# Security Policy
|
||||||
|
|
||||||
## Supported Versions
|
## Supported Versions
|
||||||
|
Below, you can find a list with the status of every open ticket version. This list will change every update!
|
||||||
|
|
||||||
Support for Open Ticket is only available for the versions specified below!
|
- ✅ Supported **(bugs, errors, discord support, documentation, html transcripts)**
|
||||||
|
- 🟧 Deprecated / Partially Supported **(discord support, documentation, html transcripts)**
|
||||||
|
- ❌ Fully Deprecated / Not Supported **(sometimes documentation)**
|
||||||
|
|
||||||
✅ Supported
|
| Version | Supported | Until |
|
||||||
🟧 Partially Supported
|
|-----------|-----------|-----------------------------|
|
||||||
❌ Not Supported
|
| 3.5.5 | ✅ | |
|
||||||
|
| 3.5.4 | ✅ | June 2024 |
|
||||||
| Version | Supported |
|
| 3.5.3 | 🟧 | Next Update |
|
||||||
| ------- | ------------------ |
|
| < 3.5.2 | ❌ | |
|
||||||
| 3.4.0 | :white_check_mark: |
|
|
||||||
| 3.3.0 | 🟧 |
|
|
||||||
| 3.2.2 | 🟧 |
|
|
||||||
| < 3.2.2 | :x: |
|
|
||||||
|
|
||||||
## Reporting a Vulnerability
|
## Reporting a Vulnerability
|
||||||
|
|
||||||
You can report Vulnerabilities, errors & bugs in the following ways:
|
You can report Vulnerabilities, Errors & Bugs using one of the methods below:
|
||||||
|
- Create an issue on github
|
||||||
|
- Create a ticket in our [discord server](https://discord.dj-dj.be)
|
||||||
|
- Report the bug in DM on discord (djj123dj)
|
||||||
|
- Email [support@dj-dj.be](mailto:support@dj-dj.be)
|
||||||
|
|
||||||
- Creating an issue on github
|
While reporting your problem, please be clear about what the problem is.
|
||||||
- Creating a ticket in our discord server
|
We would like to know the issue in as much detail as possible.
|
||||||
- Reporting the bug in DM on discord (DJj123dj#1706)
|
If possible, try to provide screenshots!
|
||||||
- Emailing support@dj-dj.be
|
The `openticketdebug.txt` file would also be handy to upload!<br>
|
||||||
|
**Always specify the version of open ticket that you are working with and if you have modified it or not!**
|
||||||
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
|
## Contributing
|
||||||
Visit [Contributing.md](/.github/CONTRIBUTING.md) for rules about translating & adding features!
|
Visit [Contributing.md](/.github/CONTRIBUTING.md) for rules about translating & adding features!
|
||||||
|
|
||||||
<br>
|
<br>
|
||||||
SECURITY POLICY - Last updated: 23/3/2023<br>
|
SECURITY POLICY - Last updated: 4/5/2024<br>
|
||||||
© DJdj Development<br><br>
|
© DJdj Development<br><br>
|
||||||
Website: https://www.dj-dj.be <br>
|
Website: https://www.dj-dj.be <br>
|
||||||
Discord: https://discord.dj-dj.be <br>
|
Discord: https://discord.dj-dj.be <br>
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ storage/dynamicDB/
|
|||||||
storage/slashcmdEnabled.txt
|
storage/slashcmdEnabled.txt
|
||||||
storage/database.json
|
storage/database.json
|
||||||
storage/tsdatabase.json
|
storage/tsdatabase.json
|
||||||
|
storage/stats.json
|
||||||
storage/.DS_Store
|
storage/.DS_Store
|
||||||
.vscode/
|
.vscode/
|
||||||
livestatus.json
|
livestatus.json
|
||||||
|
|||||||
@@ -1,72 +1,85 @@
|
|||||||
<img src="https://www.dj-dj.be/wp-content/uploads/2023/02/open-ticket-cropped.png" alt="Open Ticket" width="600px">
|
# Coming Soon: OPEN TICKET v4.0 🎉
|
||||||
|
Open Ticket v4 will be the first fully rewritten version of Open Ticket!
|
||||||
|
There will be massive improvements for more stability & features! But the best part of all is that the API will be 50x more advanced than the current API! This way, you can write every plugin you ever imagined!
|
||||||
|
<hr>
|
||||||
|
|
||||||
[](https://discord.com/invite/26vT9wt3n3) [](https://github.com/DJj123dj/open-ticket/releases/tag/v3.4.0) []() [](https://github.com/DJj123dj/open-ticket/blob/main/LICENSE) [](https://docs.openticket.dj-dj.be)
|
<img src="https://apis.dj-dj.be/cdn/openticket/logo.png" alt="Open Ticket" width="600px">
|
||||||
|
|
||||||
|
[](https://discord.com/invite/26vT9wt3n3) [](https://github.com/DJj123dj/open-ticket/releases/tag/v3.5.5) []() [](https://github.com/DJj123dj/open-ticket/blob/main/LICENSE) [](https://otdocs.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 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)
|
### [Visit the Documentation!](https://otdocs.dj-dj.be/)
|
||||||
|
|
||||||
## Features
|
## 📌 Features
|
||||||
- **🎉 NEW! html transcripts V2!**
|
- **🎉 advanced html transcripts!**
|
||||||
- 🔒 close, ❌ delete & ✅ re-open tickets
|
- 🔒 close, ❌ delete & ✅ re-open tickets
|
||||||
- 🇬🇧 translation in 18 different languages
|
- 🇬🇧 translation in 24 different languages
|
||||||
- 📄 very advanced customisation
|
- 📄 very advanced customisation
|
||||||
- 🆗 buttons or 🔽 dropdowns!
|
- 🆗 buttons or 🔽 dropdowns!
|
||||||
- 🆒 plugins
|
- 🆒 custom plugins
|
||||||
- ∞ unlimited tickets & unlimited messages
|
- ∞ unlimited tickets & embeds
|
||||||
- ➕➖ add/remove users from a ticket
|
- ➕➖ add/remove users from a ticket
|
||||||
|
- 📊 ticket, user & global staticstics
|
||||||
- /slash & text commands
|
- /slash & text commands
|
||||||
|
- 📥 reaction roles & url buttons
|
||||||
|
- 🖥️ discord.js v14 & axios
|
||||||
|
- 🎛️ latest discord integration
|
||||||
|
|
||||||
<details>
|
## 📸 Preview
|
||||||
<summary><b>Click here for even more features!</b></summary>
|
<img src="https://apis.dj-dj.be/cdn/openticket/message_buttons.png" alt="Message with buttons" width="350px">
|
||||||
|
<img src="https://apis.dj-dj.be/cdn/openticket/message_dropdown.png" alt="Message with dropdown" width="350px">
|
||||||
|
<br>
|
||||||
|
<img src="https://apis.dj-dj.be/cdn/openticket/firstmsg.png" alt="Ticket start message" width="350px">
|
||||||
|
<img src="https://apis.dj-dj.be/cdn/openticket/command_close.png" alt="Ticket start message" width="350px">
|
||||||
|
|
||||||
|
## 🩷 Sponsors
|
||||||
|
A big thanks to all our sponsors!
|
||||||
|
- <img src="https://github.com/SpyEye2.png" alt="Profile Picture" width="25px"></img> **[SpyeEye](https://github.com/SpyEye2)**
|
||||||
|
- <img src="https://github.com/DOSEV5.png" alt="Profile Picture" width="25px"></img> **[DOSEV5](https://github.com/DOSEV5)**
|
||||||
|
- <img src="https://github.com/mods-hd.png" alt="Profile Picture" width="25px"></img> **[Mods HD](https://github.com/mods-hd)**
|
||||||
|
|
||||||
- very customisable
|
## 🛠️ Contributors
|
||||||
- close tickets with reason
|
### Official Team
|
||||||
- also includes reaction roles!
|
|Role |User (discord name)|
|
||||||
- discord interaction buttons
|
|-----------------|-------------------|
|
||||||
- discord.js 14
|
|Lead Developer |djj123dj |
|
||||||
</details>
|
|Support Team |sankedev |
|
||||||
|
|Support Team |vuur_draak |
|
||||||
|
|
||||||
## preview
|
### Translators
|
||||||
Images coming soon<br>
|
|Language |Maintainer (discord name) |Status |
|
||||||
You can already see some images at our [documentation!](https://docs.openticket.dj-dj.be)
|
|-------------------|--------------------------|---------------|
|
||||||
|
|English |djj123dj |🟢 Up To Date |
|
||||||
|
|Dutch |djj123dj |🟢 Up To Date |
|
||||||
|
|French |sankedev & tostam |🟢 Up To Date |
|
||||||
|
|Romanian |sankedev |🟢 Up To Date |
|
||||||
|
|Spanish |redactado & josuens |🟢 Up To Date |
|
||||||
|
|German |david.3 |🟢 Up To Date |
|
||||||
|
|Italian |maurizio26 |🟢 Up To Date |
|
||||||
|
|Czech |spyeye_ |🟢 Up To Date |
|
||||||
|
|Arabic |deqressing |🟢 Up To Date |
|
||||||
|
|Danish |.the_gamer |🟢 Up To Date |
|
||||||
|
|Portuguese |quiradon |🔴 Outdated |
|
||||||
|
|Russian |apexo & ander |🟢 Up To Date |
|
||||||
|
|Ukrainian |ander |🟢 Up To Date |
|
||||||
|
|Turkish |Hydra#0009 |🔴 Outdated |
|
||||||
|
|Polish |mkevas |🟢 Up To Date |
|
||||||
|
|Slovenian |n1kkec |🔴 Outdated |
|
||||||
|
|Thai |modshd |🟢 Up To Date |
|
||||||
|
|Norwegian |noonenook |🟢 Up To Date |
|
||||||
|
|Greek |stefanos__. |🔴 Outdated |
|
||||||
|
|Indonesian |erxg |🟢 Up To Date |
|
||||||
|
|Kurdish |raze.hama |🟢 Up To Date |
|
||||||
|
|Hungarian |Snowy |🔴 Outdated |
|
||||||
|
|Persian |sasanwm |🟢 Up To Date |
|
||||||
|
|Latvian |ronalds1398 |🟢 Up To Date |
|
||||||
|
|
||||||
|
## Links
|
||||||
|
current version: _v3.5.5_
|
||||||
|
</br>changelog: [click here](https://otgithub.dj-dj.be/releases)
|
||||||
|
</br>documentation: [click here](https://otdocs.dj-dj.be/)
|
||||||
|
|
||||||
## credits
|
© 2024 - DJdj Development | [website](https://www.dj-dj.be) | [discord](https://discord.dj-dj.be) | [terms of service](https://www.dj-dj.be/terms)
|
||||||
DJdj Development Team
|
|
||||||
|Main Developer|Developer|Support Team|Designer|
|
|
||||||
|--------------|---------|-----------|---------|
|
|
||||||
|DJj123dj |Sanke |DJ-Lite |vuur_draak|
|
|
||||||
|
|
||||||
Translators
|
|
||||||
|Language |Translator |
|
|
||||||
|--------------|-------------------------|
|
|
||||||
|Dutch |DJj123dj#1706 |
|
|
||||||
|Romanian |Sanke#6086 |
|
|
||||||
|French |Sanke#6086 |
|
|
||||||
|Spanish |Redactado#1673 & josuens14#5267|
|
|
||||||
|German |david.#8276 |
|
|
||||||
|Italian |Maurizio#0268 |
|
|
||||||
|Czech |t0miiis#3022 |
|
|
||||||
|Arabic |ChilledBroke#9986 & M4#5882|
|
|
||||||
|Danish |the_gamer#5095 |
|
|
||||||
|Portuguese |QuirAddon#9778 |
|
|
||||||
|Russian |Apexo#0723 |
|
|
||||||
|Turkish |Hydrâelčhâvø#1575 |
|
|
||||||
|Polish |MKevas#8311 |
|
|
||||||
|Slovenian |n1kkec#5341 |
|
|
||||||
|Thai |Mods HD#0661 |
|
|
||||||
|Norwegian |NoOneNook#0266 |
|
|
||||||
|Greek |ꙅoᴎɒᎸɘƚꙅ#3744 |
|
|
||||||
|
|
||||||
## links
|
|
||||||
current version: _v3.4.0_
|
|
||||||
</br>changelog: [click here](https://docs.openticket.dj-dj.be/other/changelog)
|
|
||||||
</br>documentation: [click here](https://docs.openticket.dj-dj.be/quick-start)
|
|
||||||
|
|
||||||
© 2023 - DJdj Development | [website](https://www.dj-dj.be) | [discord](https://discord.dj-dj.be) | [terms of service](https://www.dj-dj.be/terms)
|
|
||||||
|
|||||||
+37
-17
@@ -18,26 +18,36 @@ module.exports = () => {
|
|||||||
if (!user) return msg.channel.send({embeds:[bot.errorLog.invalidArgsMessage(l.errors.missingArgsDescription+" `<user>`:\n`"+config.prefix+"add <user>`")]})
|
if (!user) return msg.channel.send({embeds:[bot.errorLog.invalidArgsMessage(l.errors.missingArgsDescription+" `<user>`:\n`"+config.prefix+"add <user>`")]})
|
||||||
|
|
||||||
if (!msg.guild) return
|
if (!msg.guild) return
|
||||||
if (!permsChecker.command(msg.author.id,msg.guild.id)){
|
|
||||||
permsChecker.sendUserNoPerms(msg.author)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
const hiddendata = bot.hiddenData.readHiddenData(msg.channel.id)
|
const hiddendata = bot.hiddenData.readHiddenData(msg.channel.id)
|
||||||
if (hiddendata.length < 1) return msg.channel.send({embeds:[bot.errorLog.notInATicket]})
|
if (hiddendata.length < 1) return msg.channel.send({embeds:[bot.errorLog.notInATicket]})
|
||||||
const ticketId = hiddendata.find(d => d.key == "type").value
|
const ticketId = hiddendata.find(d => d.key == "type").value
|
||||||
|
|
||||||
msg.channel.permissionOverwrites.create(user.id, { ViewChannel:true, AddReactions:true,AttachFiles:true, EmbedLinks:true, SendMessages:true})
|
if (!permsChecker.ticket(msg.author.id,msg.guild.id,ticketId)){
|
||||||
|
permsChecker.sendUserNoPerms(msg.author)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
/**@type {discord.PermissionOverwriteManager} */
|
||||||
|
const overwrites = msg.channel.permissionOverwrites
|
||||||
|
overwrites.create(user.id,{
|
||||||
|
ViewChannel:true,
|
||||||
|
AddReactions:true,
|
||||||
|
AttachFiles:true,
|
||||||
|
EmbedLinks:true,
|
||||||
|
SendMessages:true,
|
||||||
|
ReadMessageHistory:true
|
||||||
|
},{reason:"Added user to ticket."})
|
||||||
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.ticket(msg.author.id,msg.guild.id,ticketId),msg.author,msg.channel,msg.guild,new Date())
|
||||||
})
|
})
|
||||||
|
|
||||||
if (!DISABLE.commands.slash.add) client.on("interactionCreate",async (interaction) => {
|
if (!DISABLE.commands.slash.add) client.on("interactionCreate",async (interaction) => {
|
||||||
@@ -46,27 +56,37 @@ module.exports = () => {
|
|||||||
const user = interaction.options.getUser("user")
|
const user = interaction.options.getUser("user")
|
||||||
|
|
||||||
if (!interaction.guild) return
|
if (!interaction.guild) return
|
||||||
if (!permsChecker.command(interaction.user.id,interaction.guild.id)){
|
|
||||||
|
const hiddendata = bot.hiddenData.readHiddenData(interaction.channel.id)
|
||||||
|
if (hiddendata.length < 1) return interaction.reply({embeds:[bot.errorLog.notInATicket]})
|
||||||
|
const ticketId = hiddendata.find(d => d.key == "type").value
|
||||||
|
|
||||||
|
if (!permsChecker.ticket(interaction.user.id,interaction.guild.id,ticketId)){
|
||||||
permsChecker.sendUserNoPerms(interaction.user)
|
permsChecker.sendUserNoPerms(interaction.user)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
await interaction.deferReply()
|
await interaction.deferReply()
|
||||||
|
|
||||||
const hiddendata = bot.hiddenData.readHiddenData(interaction.channel.id)
|
/**@type {discord.PermissionOverwriteManager} */
|
||||||
if (hiddendata.length < 1) return interaction.editReply({embeds:[bot.errorLog.notInATicket]})
|
const overwrites = interaction.channel.permissionOverwrites
|
||||||
const ticketId = hiddendata.find(d => d.key == "type").value
|
overwrites.create(user.id,{
|
||||||
|
ViewChannel:true,
|
||||||
interaction.channel.permissionOverwrites.create(user.id, { ViewChannel:true, AddReactions:true,AttachFiles:true, EmbedLinks:true, SendMessages:true})
|
AddReactions:true,
|
||||||
|
AttachFiles:true,
|
||||||
|
EmbedLinks:true,
|
||||||
|
SendMessages:true,
|
||||||
|
ReadMessageHistory:true
|
||||||
|
},{reason:"Added user to ticket."})
|
||||||
interaction.editReply({embeds:[bot.embeds.commands.addEmbed(user,interaction.user)]})
|
interaction.editReply({embeds:[bot.embeds.commands.addEmbed(user,interaction.user)]})
|
||||||
|
|
||||||
var loguser = user
|
var loguser = user
|
||||||
log("command","someone used the 'add' command",[{key:"user",value:interaction.user.tag}])
|
log("command","someone used the 'add' command",[{key:"user",value:interaction.user.username}])
|
||||||
log("system","user added to ticket",[{key:"user",value:interaction.user.tag},{key:"ticket",value:interaction.channel.name},{key:"added_user",value:loguser.tag}])
|
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)
|
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.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())
|
APIEvents.onCommand("add",permsChecker.ticket(interaction.user.id,interaction.guild.id,ticketId),interaction.user,interaction.channel,interaction.guild,new Date())
|
||||||
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
+47
-31
@@ -14,26 +14,34 @@ module.exports = () => {
|
|||||||
|
|
||||||
if (!DISABLE.commands.text.change) client.on("messageCreate", async 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.channel.isTextBased()) return
|
||||||
|
|
||||||
if (!msg.guild) return
|
if (!msg.guild) return
|
||||||
if (!permsChecker.command(msg.author.id,msg.guild.id)){
|
|
||||||
permsChecker.sendUserNoPerms(msg.author)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
const hiddendata = bot.hiddenData.readHiddenData(msg.channel.id)
|
const hiddendata = bot.hiddenData.readHiddenData(msg.channel.id)
|
||||||
if (hiddendata.length < 1) return msg.channel.send({embeds:[bot.errorLog.notInATicket]})
|
if (hiddendata.length < 1) return msg.channel.send({embeds:[bot.errorLog.notInATicket]})
|
||||||
const ticketId = hiddendata.find(d => d.key == "type").value
|
const ticketId = hiddendata.find(d => d.key == "type").value
|
||||||
|
|
||||||
|
if (!permsChecker.ticket(msg.author.id,msg.guild.id,ticketId)){
|
||||||
|
permsChecker.sendUserNoPerms(msg.author)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
const list = []
|
const list = []
|
||||||
config.options.forEach((o) => list.push(o.id))
|
config.options.forEach((o) => {
|
||||||
|
if (o.type == "ticket") list.push(o.id)
|
||||||
|
})
|
||||||
|
|
||||||
var newtype = msg.content.split(config.prefix+"change")[1].substring(1)
|
var newtype = msg.content.split(config.prefix+"change")[1].substring(1)
|
||||||
if (!newtype) return msg.channel.send({embeds:[bot.errorLog.invalidIdChooseFromList(list,l.errors.missingArgsDescription+" `<type>`:\n`"+config.prefix+"change <type>`")]})
|
if (!newtype) return msg.channel.send({embeds:[bot.errorLog.invalidIdChooseFromList(list,l.errors.missingArgsDescription+" `<type>`:\n`"+config.prefix+"change <type>`")]})
|
||||||
|
|
||||||
const newTicket = require("../core/utils/configParser").getTicketById(newtype)
|
const newTicket = require("../core/utils/configParser").getTicketById(newtype,true)
|
||||||
if (!newTicket) return msg.channel.send({embeds:[bot.errorLog.invalidIdChooseFromList(list,l.errors.missingArgsDescription+" `<type>`:\n`"+config.prefix+"change <type>`")]})
|
if (!newTicket) return msg.channel.send({embeds:[bot.errorLog.invalidIdChooseFromList(list,l.errors.missingArgsDescription+" `<type>`:\n`"+config.prefix+"change <type>`")]})
|
||||||
|
|
||||||
|
/**@type {discord.PermissionOverwriteManager} */
|
||||||
|
const prePermsManager = msg.channel.permissionOverwrites
|
||||||
|
const prePerms = prePermsManager.cache
|
||||||
|
|
||||||
/**@type {String} */
|
/**@type {String} */
|
||||||
var chName = msg.channel.name
|
var chName = msg.channel.name
|
||||||
const splitted = chName.split("-")
|
const splitted = chName.split("-")
|
||||||
@@ -45,31 +53,46 @@ module.exports = () => {
|
|||||||
if (parent && parent.type == discord.ChannelType.GuildCategory) msg.channel.setParent(parent)
|
if (parent && parent.type == discord.ChannelType.GuildCategory) msg.channel.setParent(parent)
|
||||||
}
|
}
|
||||||
|
|
||||||
msg.channel.setName(newTicket.channelprefix+name)
|
prePermsManager.set(prePerms)
|
||||||
|
msg.channel.setName(newTicket.channelprefix+name).catch(() => {
|
||||||
|
msg.channel.send({embeds:[bot.errorLog.failedRenameChannel]})
|
||||||
|
})
|
||||||
|
|
||||||
|
hiddendata.find((value,index) => {
|
||||||
|
if (value.key == "type"){
|
||||||
|
hiddendata[index] = {key:"type",value:newtype}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
msg.channel.send({embeds:[bot.embeds.commands.changeEmbed(msg.author,newtype)]})
|
msg.channel.send({embeds:[bot.embeds.commands.changeEmbed(msg.author,newtype)]})
|
||||||
|
|
||||||
log("command","someone used the 'change' command",[{key:"user",value:msg.author.tag}])
|
log("command","someone used the 'change' command",[{key:"user",value:msg.author.username}])
|
||||||
log("system","ticket type changed",[{key:"user",value:msg.author.tag},{key:"ticket",value:name},{key:"newtype",value:newtype}])
|
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())
|
APIEvents.onCommand("change",permsChecker.ticket(msg.author.id,msg.guild.id,ticketId),msg.author,msg.channel,msg.guild,new Date())
|
||||||
})
|
})
|
||||||
|
|
||||||
if (!DISABLE.commands.slash.change) client.on("interactionCreate",async (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
|
||||||
|
if (!interaction.channel.isTextBased()) return
|
||||||
|
|
||||||
if (!interaction.guild) return
|
if (!interaction.guild) return
|
||||||
if (!permsChecker.command(interaction.user.id,interaction.guild.id)){
|
|
||||||
|
const hiddendata = bot.hiddenData.readHiddenData(interaction.channel.id)
|
||||||
|
if (hiddendata.length < 1) return interaction.reply({embeds:[bot.errorLog.notInATicket]})
|
||||||
|
const ticketId = hiddendata.find(d => d.key == "type").value
|
||||||
|
|
||||||
|
if (!permsChecker.ticket(interaction.user.id,interaction.guild.id,ticketId)){
|
||||||
permsChecker.sendUserNoPerms(interaction.user)
|
permsChecker.sendUserNoPerms(interaction.user)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
await interaction.deferReply()
|
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
|
|
||||||
|
|
||||||
const list = []
|
const list = []
|
||||||
config.options.forEach((o) => list.push(o.id))
|
config.options.forEach((o) => {
|
||||||
|
if (o.type == "ticket") list.push(o.id)
|
||||||
|
})
|
||||||
|
|
||||||
var newtype = interaction.options.getString("type",true)
|
var newtype = interaction.options.getString("type",true)
|
||||||
const newTicket = require("../core/utils/configParser").getTicketById(newtype,true)
|
const newTicket = require("../core/utils/configParser").getTicketById(newtype,true)
|
||||||
@@ -91,28 +114,21 @@ module.exports = () => {
|
|||||||
if (parent && parent.type == discord.ChannelType.GuildCategory) interaction.channel.setParent(parent)
|
if (parent && parent.type == discord.ChannelType.GuildCategory) interaction.channel.setParent(parent)
|
||||||
}
|
}
|
||||||
|
|
||||||
await prePermsManager.set(prePerms)
|
prePermsManager.set(prePerms)
|
||||||
interaction.channel.setName(newTicket.channelprefix+name)
|
interaction.channel.setName(newTicket.channelprefix+name).catch(() => {
|
||||||
|
interaction.channel.send({embeds:[bot.errorLog.failedRenameChannel]})
|
||||||
|
})
|
||||||
|
|
||||||
var newHiddendata = hiddendata.data
|
hiddendata.find((value,index) => {
|
||||||
newHiddendata.find((value,index) => {
|
|
||||||
if (value.key == "type"){
|
if (value.key == "type"){
|
||||||
newHiddendata[index] = {key:"type",value:newtype}
|
hiddendata[index] = {key:"type",value:newtype}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
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)]})
|
interaction.editReply({embeds:[bot.embeds.commands.changeEmbed(interaction.user,newtype)]})
|
||||||
|
|
||||||
log("command","someone used the 'change' command",[{key:"user",value:interaction.user.tag}])
|
log("command","someone used the 'change' command",[{key:"user",value:interaction.user.username}])
|
||||||
log("system","ticket type changed",[{key:"user",value:interaction.user.tag},{key:"ticket",value:name},{key:"newtype",value:newtype}])
|
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())
|
APIEvents.onCommand("change",permsChecker.ticket(interaction.user.id,interaction.guild.id,ticketId),interaction.user,interaction.channel,interaction.guild,new Date())
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
+26
-19
@@ -14,43 +14,49 @@ const DISABLE = require("../core/api/api.json").disable
|
|||||||
module.exports = () => {
|
module.exports = () => {
|
||||||
bot.errorLog.log("debug","COMMANDS: loaded claim.js")
|
bot.errorLog.log("debug","COMMANDS: loaded claim.js")
|
||||||
|
|
||||||
if (!DISABLE.commands.text.claim) client.on("messageCreate",msg => {
|
if (!DISABLE.commands.text.claim) client.on("messageCreate", async msg => {
|
||||||
if (!msg.content.startsWith(config.prefix+"claim")) return
|
if (!msg.content.startsWith(config.prefix+"claim")) return
|
||||||
var user = msg.mentions.users.first()
|
var user = msg.mentions.users.first()
|
||||||
|
|
||||||
const claimingUser = user ? user : msg.author
|
const claimingUser = user ? user : msg.author
|
||||||
|
|
||||||
if (!msg.guild) return
|
if (!msg.guild) return
|
||||||
if (!permsChecker.command(msg.author.id,msg.guild.id)){
|
|
||||||
permsChecker.sendUserNoPerms(msg.author)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
const hiddendata = bot.hiddenData.readHiddenData(msg.channel.id)
|
const hiddendata = bot.hiddenData.readHiddenData(msg.channel.id)
|
||||||
if (hiddendata.length < 1) return msg.channel.send({embeds:[bot.errorLog.notInATicket]})
|
if (hiddendata.length < 1) return msg.channel.send({embeds:[bot.errorLog.notInATicket]})
|
||||||
const ticketId = hiddendata.find(d => d.key == "type").value
|
const ticketId = hiddendata.find(d => d.key == "type").value
|
||||||
|
|
||||||
|
if (!permsChecker.ticket(msg.author.id,msg.guild.id,ticketId)){
|
||||||
|
permsChecker.sendUserNoPerms(msg.author)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
hiddendata.push({key:"claimedby",value:claimingUser.id})
|
hiddendata.push({key:"claimedby",value:claimingUser.id})
|
||||||
bot.hiddenData.writeHiddenData(msg.channel.id,hiddendata)
|
bot.hiddenData.writeHiddenData(msg.channel.id,hiddendata)
|
||||||
storage.set("claimData",msg.channel.id,claimingUser.id)
|
storage.set("claimData",msg.channel.id,claimingUser.id)
|
||||||
|
|
||||||
|
await msg.channel.messages.fetchPinned().then(msglist => {
|
||||||
|
var firstmsg = msglist.last()
|
||||||
|
if (firstmsg == undefined || firstmsg.author.id != client.user.id) return msg.channel.send({embeds:[bot.errorLog.notInATicket]})
|
||||||
|
|
||||||
const newEmbed = new embed(firstmsg.embeds[0].data)
|
const newEmbed = new embed(firstmsg.embeds[0].data)
|
||||||
.setFooter({text:"claimed by: "+msg.author.tag,iconURL:msg.author.displayAvatarURL()})
|
.setFooter({text:"claimed by: "+msg.author.username,iconURL:msg.author.displayAvatarURL()})
|
||||||
|
|
||||||
if (firstmsg.components[0].components[1] && firstmsg.components[0].components[1].disabled){
|
if (firstmsg.components[0].components[1] && firstmsg.components[0].components[1].disabled){
|
||||||
firstmsg.edit({components:[bot.buttons.firstmsg.firstmsgRowDisabledNoClaim],embeds:[newEmbed]})
|
firstmsg.edit({components:[bot.buttons.firstmsg.firstmsgRowDisabledNoClaim],embeds:[newEmbed]})
|
||||||
}else{
|
}else{
|
||||||
firstmsg.edit({components:[bot.buttons.firstmsg.firstmsgRowNormalNoClaim],embeds:[newEmbed]})
|
firstmsg.edit({components:[bot.buttons.firstmsg.firstmsgRowNormalNoClaim],embeds:[newEmbed]})
|
||||||
}
|
}
|
||||||
|
})
|
||||||
|
|
||||||
msg.channel.send({embeds:[bot.embeds.commands.claimEmbed(claimingUser,msg.author)]})
|
msg.channel.send({embeds:[bot.embeds.commands.claimEmbed(claimingUser,msg.author)]})
|
||||||
|
|
||||||
log("command","someone used the 'claim' command",[{key:"user",value:msg.author.tag}])
|
log("command","someone used the 'claim' command",[{key:"user",value:msg.author.username}])
|
||||||
log("system","user claimed to ticket",[{key:"user",value:msg.author.tag},{key:"ticket",value:msg.channel.name},{key:"claimed_user",value:claimingUser.tag}])
|
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)
|
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.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())
|
APIEvents.onCommand("claim",permsChecker.ticket(msg.author.id,msg.guild.id,ticketId),msg.author,msg.channel,msg.guild,new Date())
|
||||||
})
|
})
|
||||||
|
|
||||||
if (!DISABLE.commands.slash.claim) client.on("interactionCreate",async (interaction) => {
|
if (!DISABLE.commands.slash.claim) client.on("interactionCreate",async (interaction) => {
|
||||||
@@ -59,27 +65,28 @@ module.exports = () => {
|
|||||||
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
|
||||||
|
|
||||||
if (!interaction.guild) return
|
if (!interaction.guild) return
|
||||||
if (!permsChecker.command(interaction.user.id,interaction.guild.id)){
|
|
||||||
|
const hiddendata = bot.hiddenData.readHiddenData(interaction.channel.id)
|
||||||
|
if (hiddendata.length < 1) return interaction.reply({embeds:[bot.errorLog.notInATicket]})
|
||||||
|
const ticketId = hiddendata.find(d => d.key == "type").value
|
||||||
|
|
||||||
|
if (!permsChecker.ticket(interaction.user.id,interaction.guild.id,ticketId)){
|
||||||
permsChecker.sendUserNoPerms(interaction.user)
|
permsChecker.sendUserNoPerms(interaction.user)
|
||||||
return interaction.reply({content:":x: "+l.errors.noPermsTitle,ephemeral:true})
|
return interaction.reply({content:":x: "+l.errors.noPermsTitle,ephemeral:true})
|
||||||
}
|
}
|
||||||
|
|
||||||
await interaction.deferReply()
|
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})
|
hiddendata.push({key:"claimedby",value:user.id})
|
||||||
bot.hiddenData.writeHiddenData(interaction.channel.id,hiddendata)
|
bot.hiddenData.writeHiddenData(interaction.channel.id,hiddendata)
|
||||||
storage.set("claimData",interaction.channel.id,user.id)
|
storage.set("claimData",interaction.channel.id,user.id)
|
||||||
|
|
||||||
interaction.channel.messages.fetchPinned().then(msglist => {
|
await interaction.channel.messages.fetchPinned().then(msglist => {
|
||||||
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 newEmbed = new embed(firstmsg.embeds[0].data)
|
const newEmbed = new embed(firstmsg.embeds[0].data)
|
||||||
.setFooter({text:"claimed by: "+user.tag,iconURL:user.displayAvatarURL()})
|
.setFooter({text:"claimed by: "+user.username,iconURL:user.displayAvatarURL()})
|
||||||
|
|
||||||
if (firstmsg.components[0].components[1] && firstmsg.components[0].components[1].disabled){
|
if (firstmsg.components[0].components[1] && firstmsg.components[0].components[1].disabled){
|
||||||
firstmsg.edit({components:[bot.buttons.firstmsg.firstmsgRowDisabledNoClaim],embeds:[newEmbed]})
|
firstmsg.edit({components:[bot.buttons.firstmsg.firstmsgRowDisabledNoClaim],embeds:[newEmbed]})
|
||||||
@@ -90,11 +97,11 @@ module.exports = () => {
|
|||||||
|
|
||||||
interaction.editReply({embeds:[bot.embeds.commands.claimEmbed(user,interaction.user)]})
|
interaction.editReply({embeds:[bot.embeds.commands.claimEmbed(user,interaction.user)]})
|
||||||
|
|
||||||
log("command","someone used the 'claim' command",[{key:"user",value:interaction.user.tag}])
|
log("command","someone used the 'claim' command",[{key:"user",value:interaction.user.username}])
|
||||||
log("system","user claimed to ticket",[{key:"user",value:interaction.user.tag},{key:"ticket",value:interaction.channel.name},{key:"claimed_user",value:user.tag}])
|
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)
|
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.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())
|
APIEvents.onCommand("claim",permsChecker.ticket(interaction.user.id,interaction.guild.id,ticketId),interaction.user,interaction.channel,interaction.guild,new Date())
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
+6
-6
@@ -44,7 +44,7 @@ module.exports = () => {
|
|||||||
|
|
||||||
require("../core/ticketActions/ticketCloser").closeManager(msg.member,msg.channel,prefix,"close",reason,true)
|
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.tag}])
|
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())
|
APIEvents.onCommand("close",true,msg.author,msg.channel,msg.guild,new Date())
|
||||||
|
|
||||||
})
|
})
|
||||||
@@ -57,13 +57,13 @@ module.exports = () => {
|
|||||||
|
|
||||||
const reason = interaction.options.getString("reason") ? interaction.options.getString("reason") : false
|
const reason = interaction.options.getString("reason") ? interaction.options.getString("reason") : false
|
||||||
|
|
||||||
await interaction.deferReply()
|
|
||||||
|
|
||||||
const hiddendata = bot.hiddenData.readHiddenData(interaction.channel.id)
|
const hiddendata = bot.hiddenData.readHiddenData(interaction.channel.id)
|
||||||
if (hiddendata.length < 1) return interaction.editReply({embeds:[bot.errorLog.notInATicket]})
|
if (hiddendata.length < 1) return interaction.reply({embeds:[bot.errorLog.notInATicket]})
|
||||||
const ticketId = hiddendata.find(d => d.key == "type").value
|
const ticketId = hiddendata.find(d => d.key == "type").value
|
||||||
|
|
||||||
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!")]})
|
if (hiddendata.find(h => h.key == "pendingdelete")) return interaction.reply({embeds:[bot.errorLog.warning("Warning!","You can't close a ticket while it's being deleted!")]})
|
||||||
|
|
||||||
|
await interaction.deferReply()
|
||||||
|
|
||||||
const descriptionReason = reason ? "**"+l.messages.reason+":** "+reason : false
|
const descriptionReason = reason ? "**"+l.messages.reason+":** "+reason : false
|
||||||
interaction.editReply({embeds:[bot.embeds.commands.closeEmbed(interaction.user,descriptionReason)],components:[bot.buttons.close.closeCommandRow]})
|
interaction.editReply({embeds:[bot.embeds.commands.closeEmbed(interaction.user,descriptionReason)],components:[bot.buttons.close.closeCommandRow]})
|
||||||
@@ -79,7 +79,7 @@ module.exports = () => {
|
|||||||
|
|
||||||
require("../core/ticketActions/ticketCloser").closeManager(interaction.member,interaction.channel,prefix,"close",false,true)
|
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.tag}])
|
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())
|
APIEvents.onCommand("close",true,interaction.user,interaction.channel,interaction.guild,new Date())
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
+15
-13
@@ -16,15 +16,16 @@ module.exports = () => {
|
|||||||
if (!msg.content.startsWith(config.prefix+"delete")) return
|
if (!msg.content.startsWith(config.prefix+"delete")) return
|
||||||
|
|
||||||
if (!msg.guild) return
|
if (!msg.guild) return
|
||||||
if (!permsChecker.command(msg.author.id,msg.guild.id)){
|
|
||||||
permsChecker.sendUserNoPerms(msg.author)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
const hiddendata = bot.hiddenData.readHiddenData(msg.channel.id)
|
const hiddendata = bot.hiddenData.readHiddenData(msg.channel.id)
|
||||||
if (hiddendata.length < 1) return msg.channel.send({embeds:[bot.errorLog.notInATicket]})
|
if (hiddendata.length < 1) return msg.channel.send({embeds:[bot.errorLog.notInATicket]})
|
||||||
const ticketId = hiddendata.find(d => d.key == "type").value
|
const ticketId = hiddendata.find(d => d.key == "type").value
|
||||||
|
|
||||||
|
if (!permsChecker.ticket(msg.author.id,msg.guild.id,ticketId)){
|
||||||
|
permsChecker.sendUserNoPerms(msg.author)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
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
|
||||||
@@ -38,8 +39,8 @@ module.exports = () => {
|
|||||||
|
|
||||||
require("../core/ticketActions/ticketCloser").closeManager(msg.member,msg.channel,prefix,"delete",false,true)
|
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.tag}])
|
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())
|
APIEvents.onCommand("delete",permsChecker.ticket(msg.author.id,msg.guild.id,ticketId),msg.author,msg.channel,msg.guild,new Date())
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -48,17 +49,18 @@ module.exports = () => {
|
|||||||
if (interaction.commandName != "delete") return
|
if (interaction.commandName != "delete") return
|
||||||
|
|
||||||
if (!interaction.guild) return
|
if (!interaction.guild) return
|
||||||
if (!permsChecker.command(interaction.user.id,interaction.guild.id)){
|
|
||||||
|
const hiddendata = bot.hiddenData.readHiddenData(interaction.channel.id)
|
||||||
|
if (hiddendata.length < 1) return interaction.reply({embeds:[bot.errorLog.notInATicket]})
|
||||||
|
const ticketId = hiddendata.find(d => d.key == "type").value
|
||||||
|
|
||||||
|
if (!permsChecker.ticket(interaction.user.id,interaction.guild.id,ticketId)){
|
||||||
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)]})
|
||||||
}
|
}
|
||||||
|
|
||||||
await interaction.deferReply()
|
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
|
|
||||||
|
|
||||||
interaction.editReply({embeds:[bot.embeds.commands.deleteEmbed(interaction.user)]})
|
interaction.editReply({embeds:[bot.embeds.commands.deleteEmbed(interaction.user)]})
|
||||||
|
|
||||||
var name = interaction.channel.name
|
var name = interaction.channel.name
|
||||||
@@ -72,7 +74,7 @@ module.exports = () => {
|
|||||||
|
|
||||||
require("../core/ticketActions/ticketCloser").closeManager(interaction.member,interaction.channel,prefix,"delete",false,true)
|
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.tag}])
|
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())
|
APIEvents.onCommand("delete",permsChecker.ticket(interaction.user.id,interaction.guild.id,ticketId),interaction.user,interaction.channel,interaction.guild,new Date())
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
+6
-5
@@ -21,7 +21,8 @@ module.exports = () => {
|
|||||||
const header = 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 [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.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([
|
helpEmbed.addFields([
|
||||||
{name:"Autoclose",value:l.helpMenu.autocloseCmd+"\n`"+prefix+"autoclose enable <inactive time>`\n`"+prefix+"autoclose disable`"}
|
{name:"Autoclose",value:l.helpMenu.autocloseCmd+"\n`"+prefix+"autoclose enable <inactive time>`\n`"+prefix+"autoclose disable`"},
|
||||||
|
{name:"Stats",value:"Get statistics from the bot"+"\n`"+prefix+"stats global`\n`"+prefix+"stats ticket`\n`"+prefix+"stats user [user]`"}
|
||||||
])
|
])
|
||||||
|
|
||||||
var otherprefix = prefix.endsWith(" ") ? prefix.substring(0,prefix.length-1) : prefix
|
var otherprefix = prefix.endsWith(" ") ? prefix.substring(0,prefix.length-1) : prefix
|
||||||
@@ -32,15 +33,15 @@ 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
|
||||||
}
|
}
|
||||||
|
|
||||||
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") && !args[1].startsWith("change") && !args[1].startsWith("claim") && !args[1].startsWith("unclaim") && !args[1].startsWith("stats")){
|
||||||
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())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -51,7 +52,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())
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
+23
-17
@@ -18,26 +18,29 @@ module.exports = () => {
|
|||||||
if (!user) return msg.channel.send({embeds:[bot.errorLog.invalidArgsMessage(l.errors.missingArgsDescription+" `<user>`:\n`"+config.prefix+"remove <user>`")]})
|
if (!user) return msg.channel.send({embeds:[bot.errorLog.invalidArgsMessage(l.errors.missingArgsDescription+" `<user>`:\n`"+config.prefix+"remove <user>`")]})
|
||||||
|
|
||||||
if (!msg.guild) return
|
if (!msg.guild) return
|
||||||
if (!permsChecker.command(msg.author.id,msg.guild.id)){
|
|
||||||
permsChecker.sendUserNoPerms(msg.author)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
const hiddendata = bot.hiddenData.readHiddenData(msg.channel.id)
|
const hiddendata = bot.hiddenData.readHiddenData(msg.channel.id)
|
||||||
if (hiddendata.length < 1) return msg.channel.send({embeds:[bot.errorLog.notInATicket]})
|
if (hiddendata.length < 1) return msg.channel.send({embeds:[bot.errorLog.notInATicket]})
|
||||||
const ticketId = hiddendata.find(d => d.key == "type").value
|
const ticketId = hiddendata.find(d => d.key == "type").value
|
||||||
|
|
||||||
msg.channel.permissionOverwrites.delete(user.id)
|
if (!permsChecker.ticket(msg.author.id,msg.guild.id,ticketId)){
|
||||||
|
permsChecker.sendUserNoPerms(msg.author)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
/**@type {discord.PermissionOverwriteManager} */
|
||||||
|
const overwrites = msg.channel.permissionOverwrites
|
||||||
|
overwrites.delete(user.id,"Removed user from ticket.")
|
||||||
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)
|
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.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())
|
APIEvents.onCommand("remove",permsChecker.ticket(msg.author.id,msg.guild.id,ticketId),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) => {
|
||||||
@@ -46,27 +49,30 @@ module.exports = () => {
|
|||||||
const user = interaction.options.getUser("user")
|
const user = interaction.options.getUser("user")
|
||||||
|
|
||||||
if (!interaction.guild) return
|
if (!interaction.guild) return
|
||||||
if (!permsChecker.command(interaction.user.id,interaction.guild.id)){
|
|
||||||
|
const hiddendata = bot.hiddenData.readHiddenData(interaction.channel.id)
|
||||||
|
if (hiddendata.length < 1) return interaction.reply({embeds:[bot.errorLog.notInATicket]})
|
||||||
|
const ticketId = hiddendata.find(d => d.key == "type").value
|
||||||
|
|
||||||
|
if (!permsChecker.ticket(interaction.user.id,interaction.guild.id,ticketId)){
|
||||||
permsChecker.sendUserNoPerms(interaction.user)
|
permsChecker.sendUserNoPerms(interaction.user)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
await interaction.deferReply()
|
await interaction.deferReply()
|
||||||
|
|
||||||
const hiddendata = bot.hiddenData.readHiddenData(interaction.channel.id)
|
/**@type {discord.PermissionOverwriteManager} */
|
||||||
if (hiddendata.length < 1) return interaction.editReply({embeds:[bot.errorLog.notInATicket]})
|
const overwrites = interaction.channel.permissionOverwrites
|
||||||
const ticketId = hiddendata.find(d => d.key == "type").value
|
overwrites.delete(user.id,"Removed user from ticket.")
|
||||||
|
|
||||||
interaction.channel.permissionOverwrites.delete(user.id)
|
|
||||||
interaction.editReply({embeds:[bot.embeds.commands.removeEmbed(user,interaction.user)]})
|
interaction.editReply({embeds:[bot.embeds.commands.removeEmbed(user,interaction.user)]})
|
||||||
|
|
||||||
var loguser = user
|
var loguser = user
|
||||||
|
|
||||||
log("command","someone used the 'remove' command",[{key:"user",value:interaction.user.tag}])
|
log("command","someone used the 'remove' command",[{key:"user",value:interaction.user.username}])
|
||||||
log("system","user removed from ticket",[{key:"user",value:interaction.user.tag},{key:"ticket",value:interaction.channel.name},{key:"removed_user",value:loguser.tag}])
|
log("system","user removed from ticket",[{key:"user",value:interaction.user.username},{key:"ticket",value:interaction.channel.name},{key:"removed_user",value:loguser.username}])
|
||||||
|
|
||||||
const ticketData = require("../core/utils/configParser").getTicketById(ticketId,true)
|
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.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())
|
APIEvents.onCommand("remove",permsChecker.ticket(interaction.user.id,interaction.guild.id,ticketId),interaction.user,interaction.channel,interaction.guild,new Date())
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
+17
-16
@@ -16,15 +16,16 @@ module.exports = () => {
|
|||||||
if (!msg.content.startsWith(config.prefix+"rename")) return
|
if (!msg.content.startsWith(config.prefix+"rename")) return
|
||||||
|
|
||||||
if (!msg.guild) return
|
if (!msg.guild) return
|
||||||
if (!permsChecker.command(msg.author.id,msg.guild.id)){
|
|
||||||
permsChecker.sendUserNoPerms(msg.author)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
const hiddendata = bot.hiddenData.readHiddenData(msg.channel.id)
|
const hiddendata = bot.hiddenData.readHiddenData(msg.channel.id)
|
||||||
if (hiddendata.length < 1) return msg.channel.send({embeds:[bot.errorLog.notInATicket]})
|
if (hiddendata.length < 1) return msg.channel.send({embeds:[bot.errorLog.notInATicket]})
|
||||||
const ticketId = hiddendata.find(d => d.key == "type").value
|
const ticketId = hiddendata.find(d => d.key == "type").value
|
||||||
|
|
||||||
|
if (!permsChecker.ticket(msg.author.id,msg.guild.id,ticketId)){
|
||||||
|
permsChecker.sendUserNoPerms(msg.author)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
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>`")]})
|
||||||
@@ -39,13 +40,12 @@ module.exports = () => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
if (!prefix) prefix = "noprefix-"
|
if (!prefix) prefix = "noprefix-"
|
||||||
|
|
||||||
msg.channel.setName(prefix+newname)
|
msg.channel.setName(prefix+newname)
|
||||||
msg.channel.send({embeds:[bot.embeds.commands.renameEmbed(msg.author,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("command","someone used the 'rename' command",[{key:"user",value:msg.author.username}])
|
||||||
log("system","ticket renamed",[{key:"user",value:msg.author.tag},{key:"ticket",value:name},{key:"newname",value:newname}])
|
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())
|
APIEvents.onCommand("rename",permsChecker.ticket(msg.author.id,msg.guild.id,ticketId),msg.author,msg.channel,msg.guild,new Date())
|
||||||
})
|
})
|
||||||
|
|
||||||
if (!DISABLE.commands.slash.rename) client.on("interactionCreate",async (interaction) => {
|
if (!DISABLE.commands.slash.rename) client.on("interactionCreate",async (interaction) => {
|
||||||
@@ -53,17 +53,18 @@ module.exports = () => {
|
|||||||
if (interaction.commandName != "rename") return
|
if (interaction.commandName != "rename") return
|
||||||
|
|
||||||
if (!interaction.guild) return
|
if (!interaction.guild) return
|
||||||
if (!permsChecker.command(interaction.user.id,interaction.guild.id)){
|
|
||||||
|
const hiddendata = bot.hiddenData.readHiddenData(interaction.channel.id)
|
||||||
|
if (hiddendata.length < 1) return interaction.reply({embeds:[bot.errorLog.notInATicket]})
|
||||||
|
const ticketId = hiddendata.find(d => d.key == "type").value
|
||||||
|
|
||||||
|
if (!permsChecker.ticket(interaction.user.id,interaction.guild.id,ticketId)){
|
||||||
permsChecker.sendUserNoPerms(interaction.user)
|
permsChecker.sendUserNoPerms(interaction.user)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
await interaction.deferReply()
|
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
|
|
||||||
|
|
||||||
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 = ""
|
||||||
@@ -79,9 +80,9 @@ module.exports = () => {
|
|||||||
interaction.channel.setName(prefix+newname)
|
interaction.channel.setName(prefix+newname)
|
||||||
interaction.editReply({embeds:[bot.embeds.commands.renameEmbed(interaction.user,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.tag}])
|
log("command","someone used the 'rename' command",[{key:"user",value:interaction.user.username}])
|
||||||
log("system","ticket renamed",[{key:"user",value:interaction.user.tag},{key:"ticket",value:name},{key:"newname",value:newname}])
|
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())
|
APIEvents.onCommand("rename",permsChecker.ticket(interaction.user.id,interaction.guild.id,ticketId),interaction.user,interaction.channel,interaction.guild,new Date())
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
+8
-8
@@ -23,9 +23,9 @@ module.exports = () => {
|
|||||||
|
|
||||||
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,ticketId)
|
||||||
|
|
||||||
log("command","someone used the 'reopen' command",[{key:"user",value:msg.author.tag}])
|
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())
|
APIEvents.onCommand("reopen",true,msg.author,msg.channel,msg.guild,new Date())
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -33,19 +33,19 @@ module.exports = () => {
|
|||||||
if (!interaction.isChatInputCommand()) return
|
if (!interaction.isChatInputCommand()) return
|
||||||
if (interaction.commandName != "reopen") return
|
if (interaction.commandName != "reopen") return
|
||||||
|
|
||||||
await interaction.deferReply()
|
|
||||||
|
|
||||||
const hiddendata = bot.hiddenData.readHiddenData(interaction.channel.id)
|
const hiddendata = bot.hiddenData.readHiddenData(interaction.channel.id)
|
||||||
if (hiddendata.length < 1) return interaction.editReply({embeds:[bot.errorLog.notInATicket]})
|
if (hiddendata.length < 1) return interaction.reply({embeds:[bot.errorLog.notInATicket]})
|
||||||
const ticketId = hiddendata.find(d => d.key == "type").value
|
const ticketId = hiddendata.find(d => d.key == "type").value
|
||||||
|
|
||||||
if (hiddendata.data.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!")]})
|
if (hiddendata.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!")]})
|
||||||
|
|
||||||
|
await interaction.deferReply()
|
||||||
|
|
||||||
await interaction.editReply({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)
|
require("../core/ticketActions/ticketReopener").reopenTicket(interaction.guild,interaction.channel,interaction.user,ticketId)
|
||||||
|
|
||||||
log("command","someone used the 'reopen' command",[{key:"user",value:interaction.user.tag}])
|
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())
|
APIEvents.onCommand("reopen",true,interaction.user,interaction.channel,interaction.guild,new Date())
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,103 @@
|
|||||||
|
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 permsChecker = require("../core/utils/permisssionChecker")
|
||||||
|
|
||||||
|
const APIEvents = require("../core/api/modules/events")
|
||||||
|
const DISABLE = require("../core/api/api.json").disable
|
||||||
|
|
||||||
|
module.exports = () => {
|
||||||
|
bot.errorLog.log("debug","COMMANDS: loaded stats.js")
|
||||||
|
|
||||||
|
if (!DISABLE.commands.text.stats) client.on("messageCreate",async (msg) => {
|
||||||
|
if (!msg.content.startsWith(config.prefix+"stats global") && !msg.content.startsWith(config.prefix+"stats ticket") && !msg.content.startsWith(config.prefix+"stats user")) return
|
||||||
|
if (!msg.guild) return
|
||||||
|
|
||||||
|
/**@type {"global"|"ticket"|"user"} */
|
||||||
|
const mode = msg.content.split(config.prefix+"stats ")[1]
|
||||||
|
|
||||||
|
if (mode == "global"){
|
||||||
|
//send global stats
|
||||||
|
msg.channel.send({embeds:[await bot.statsManager.createGlobalStatsEmbed()]})
|
||||||
|
|
||||||
|
}else if (mode == "user"){
|
||||||
|
//send user stats
|
||||||
|
const mention = msg.mentions.users.first()
|
||||||
|
if (mention){
|
||||||
|
//get user from mention
|
||||||
|
if (!bot.statsManager.existStats("user","TICKETS_CREATED",mention.id)){
|
||||||
|
msg.channel.send({embeds:[bot.errorLog.serverError(l.stats.errorUserNotFound)]})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
msg.channel.send({embeds:[await bot.statsManager.createUserStatsEmbed(msg.guild,mention,msg.channel.id)]})
|
||||||
|
}else{
|
||||||
|
//use author as user
|
||||||
|
if (!bot.statsManager.existStats("user","TICKETS_CREATED",msg.author.id)){
|
||||||
|
msg.channel.send({embeds:[bot.errorLog.serverError(l.stats.errorUserNotFound)]})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
msg.channel.send({embeds:[await bot.statsManager.createUserStatsEmbed(msg.guild,msg.author,msg.channel.id)]})
|
||||||
|
}
|
||||||
|
|
||||||
|
}else if (mode == "ticket"){
|
||||||
|
//send ticket stats
|
||||||
|
if (!bot.statsManager.existStats("ticket","STATUS",msg.channel.id)){
|
||||||
|
msg.channel.send({embeds:[bot.errorLog.notInATicket]})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
msg.channel.send({embeds:[await bot.statsManager.createTicketStatsEmbed(msg.guild,msg.channel.id)]})
|
||||||
|
}
|
||||||
|
|
||||||
|
log("command","someone used the 'stats' command",[{key:"user",value:msg.author.username},{key:"mode",value:mode}])
|
||||||
|
APIEvents.onCommand("stats",true,msg.author,msg.channel,msg.guild,new Date())
|
||||||
|
})
|
||||||
|
|
||||||
|
if (!DISABLE.commands.slash.stats) client.on("interactionCreate",async (interaction) => {
|
||||||
|
if (!interaction.isChatInputCommand()) return
|
||||||
|
if (interaction.commandName != "stats") return
|
||||||
|
if (!interaction.guild) return
|
||||||
|
|
||||||
|
/**@type {"global"|"ticket"|"user"} */
|
||||||
|
const mode = interaction.options.getSubcommand(true)
|
||||||
|
|
||||||
|
await interaction.deferReply()
|
||||||
|
|
||||||
|
if (mode == "global"){
|
||||||
|
//send global stats
|
||||||
|
interaction.editReply({embeds:[await bot.statsManager.createGlobalStatsEmbed()]})
|
||||||
|
|
||||||
|
}else if (mode == "user"){
|
||||||
|
//send user stats
|
||||||
|
const mention = interaction.options.getUser("user",false)
|
||||||
|
if (mention){
|
||||||
|
//get user from mention
|
||||||
|
if (!bot.statsManager.existStats("user","TICKETS_CREATED",mention.id)){
|
||||||
|
interaction.editReply({embeds:[bot.errorLog.serverError(l.stats.errorUserNotFound)]})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
interaction.editReply({embeds:[await bot.statsManager.createUserStatsEmbed(interaction.guild,mention,interaction.channel.id)]})
|
||||||
|
}else{
|
||||||
|
//use author as user
|
||||||
|
if (!bot.statsManager.existStats("user","TICKETS_CREATED",interaction.user.id)){
|
||||||
|
interaction.editReply({embeds:[bot.errorLog.serverError(l.stats.errorUserNotFound)]})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
interaction.editReply({embeds:[await bot.statsManager.createUserStatsEmbed(interaction.guild,interaction.user,interaction.channel.id)]})
|
||||||
|
}
|
||||||
|
|
||||||
|
}else if (mode == "ticket"){
|
||||||
|
//send ticket stats
|
||||||
|
if (!bot.statsManager.existStats("ticket","STATUS",interaction.channel.id)){
|
||||||
|
interaction.editReply({embeds:[bot.errorLog.notInATicket]})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
interaction.editReply({embeds:[await bot.statsManager.createTicketStatsEmbed(interaction.guild,interaction.channel.id)]})
|
||||||
|
}
|
||||||
|
|
||||||
|
log("command","someone used the 'stats' command",[{key:"user",value:interaction.user.username},{key:"mode",value:mode}])
|
||||||
|
APIEvents.onCommand("stats",true,interaction.user,interaction.channel,interaction.guild,new Date())
|
||||||
|
})
|
||||||
|
}
|
||||||
+6
-6
@@ -23,7 +23,7 @@ module.exports = () => {
|
|||||||
if (msg.content.startsWith(config.prefix+"msg"||config.prefix+"message")){
|
if (msg.content.startsWith(config.prefix+"msg"||config.prefix+"message")){
|
||||||
|
|
||||||
if (!msg.guild) return
|
if (!msg.guild) return
|
||||||
if (!permsChecker.command(msg.author.id,msg.guild.id)){
|
if (!permsChecker.global(msg.author.id,msg.guild.id)){
|
||||||
permsChecker.sendUserNoPerms(msg.author)
|
permsChecker.sendUserNoPerms(msg.author)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -38,8 +38,8 @@ module.exports = () => {
|
|||||||
|
|
||||||
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.global(msg.author.id,msg.guild.id),msg.author,msg.channel,msg.guild,new Date())
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -48,7 +48,7 @@ module.exports = () => {
|
|||||||
if (interaction.commandName != "message") return
|
if (interaction.commandName != "message") return
|
||||||
|
|
||||||
if (!interaction.guild) return
|
if (!interaction.guild) return
|
||||||
if (!permsChecker.command(interaction.user.id,interaction.guild.id)){
|
if (!permsChecker.global(interaction.user.id,interaction.guild.id)){
|
||||||
permsChecker.sendUserNoPerms(interaction.user)
|
permsChecker.sendUserNoPerms(interaction.user)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -62,9 +62,9 @@ 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.global(interaction.user.id,interaction.guild.id),interaction.user,interaction.channel,interaction.guild,new Date())
|
||||||
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
+18
-16
@@ -18,7 +18,12 @@ module.exports = () => {
|
|||||||
if (!msg.content.startsWith(config.prefix+"unclaim")) return
|
if (!msg.content.startsWith(config.prefix+"unclaim")) return
|
||||||
|
|
||||||
if (!msg.guild) return
|
if (!msg.guild) return
|
||||||
if (!permsChecker.command(msg.author.id,msg.guild.id)){
|
|
||||||
|
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
|
||||||
|
|
||||||
|
if (!permsChecker.ticket(msg.author.id,msg.guild.id,ticketId)){
|
||||||
permsChecker.sendUserNoPerms(msg.author)
|
permsChecker.sendUserNoPerms(msg.author)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -26,10 +31,6 @@ module.exports = () => {
|
|||||||
const unclaimuser = storage.get("claimData",msg.channel.id)
|
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!")]})
|
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"})
|
hiddendata.push({key:"claimedby",value:"false"})
|
||||||
bot.hiddenData.writeHiddenData(msg.channel.id,hiddendata)
|
bot.hiddenData.writeHiddenData(msg.channel.id,hiddendata)
|
||||||
storage.set("claimData",msg.channel.id,"false")
|
storage.set("claimData",msg.channel.id,"false")
|
||||||
@@ -57,12 +58,12 @@ module.exports = () => {
|
|||||||
|
|
||||||
msg.channel.send({embeds:[bot.embeds.commands.unclaimEmbed(msg.author)]})
|
msg.channel.send({embeds:[bot.embeds.commands.unclaimEmbed(msg.author)]})
|
||||||
|
|
||||||
log("command","someone used the 'unclaim' command",[{key:"user",value:msg.author.tag}])
|
log("command","someone used the 'unclaim' command",[{key:"user",value:msg.author.username}])
|
||||||
log("system","user unclaimed from ticket",[{key:"user",value:msg.author.tag},{key:"ticket",value:msg.channel.name},{key:"unclaimed_user",value:unclaimuser}])
|
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.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())
|
APIEvents.onCommand("unclaim",permsChecker.ticket(msg.author.id,msg.guild.id,ticketId),msg.author,msg.channel,msg.guild,new Date())
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -71,7 +72,12 @@ module.exports = () => {
|
|||||||
if (interaction.commandName != "unclaim") return
|
if (interaction.commandName != "unclaim") return
|
||||||
|
|
||||||
if (!interaction.guild) return
|
if (!interaction.guild) return
|
||||||
if (!permsChecker.command(interaction.user.id,interaction.guild.id)){
|
|
||||||
|
const hiddendata = bot.hiddenData.readHiddenData(interaction.channel.id)
|
||||||
|
if (hiddendata.length < 1) return interaction.reply({embeds:[bot.errorLog.notInATicket]})
|
||||||
|
const ticketId = hiddendata.find(d => d.key == "type").value
|
||||||
|
|
||||||
|
if (!permsChecker.ticket(interaction.user.id,interaction.guild.id,ticketId)){
|
||||||
permsChecker.sendUserNoPerms(interaction.user)
|
permsChecker.sendUserNoPerms(interaction.user)
|
||||||
interaction.reply({content:":x: "+l.errors.noPermsTitle,ephemeral:true})
|
interaction.reply({content:":x: "+l.errors.noPermsTitle,ephemeral:true})
|
||||||
return
|
return
|
||||||
@@ -82,10 +88,6 @@ module.exports = () => {
|
|||||||
const unclaimuser = storage.get("claimData",interaction.channel.id)
|
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!")]})
|
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"})
|
hiddendata.push({key:"claimedby",value:"false"})
|
||||||
bot.hiddenData.writeHiddenData(interaction.channel.id,hiddendata)
|
bot.hiddenData.writeHiddenData(interaction.channel.id,hiddendata)
|
||||||
storage.set("claimData",interaction.channel.id,"false")
|
storage.set("claimData",interaction.channel.id,"false")
|
||||||
@@ -113,11 +115,11 @@ module.exports = () => {
|
|||||||
|
|
||||||
interaction.editReply({embeds:[bot.embeds.commands.unclaimEmbed(interaction.user)]})
|
interaction.editReply({embeds:[bot.embeds.commands.unclaimEmbed(interaction.user)]})
|
||||||
|
|
||||||
log("command","someone used the 'unclaim' command",[{key:"user",value:interaction.user.tag}])
|
log("command","someone used the 'unclaim' command",[{key:"user",value:interaction.user.username}])
|
||||||
log("system","user unclaimed from ticket",[{key:"user",value:interaction.user.tag},{key:"ticket",value:interaction.channel.name},{key:"unclaimed_user",value:unclaimuser}])
|
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.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())
|
APIEvents.onCommand("unclaim",permsChecker.ticket(interaction.user.id,interaction.guild.id,ticketId),interaction.user,interaction.channel,interaction.guild,new Date())
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
+14
-15
@@ -1,4 +1,7 @@
|
|||||||
{
|
{
|
||||||
|
"_DOCUMENTATION":"https://otdocs.dj-dj.be",
|
||||||
|
"_SUPPORT":"https://discord.dj-dj.be",
|
||||||
|
|
||||||
"color":"#ffffff",
|
"color":"#ffffff",
|
||||||
"serverId":"server id (for slash cmds)",
|
"serverId":"server id (for slash cmds)",
|
||||||
"token":{
|
"token":{
|
||||||
@@ -28,10 +31,9 @@
|
|||||||
"answerInEphemeralOnOpen":true
|
"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":"example-ticket",
|
||||||
"name":"Question",
|
"name":"Question",
|
||||||
"description":"Create this ticket if you have a question.",
|
"description":"Create this ticket if you have a question.",
|
||||||
"icon":"🎫",
|
"icon":"🎫",
|
||||||
@@ -53,7 +55,7 @@
|
|||||||
},
|
},
|
||||||
"image":{
|
"image":{
|
||||||
"enable":false,
|
"enable":false,
|
||||||
"url":"https://www.dj-dj.be/wp-content/uploads/2022/09/pfp-cropped.png"
|
"url":"https://www.example.com/catmemes/cat.png"
|
||||||
},
|
},
|
||||||
|
|
||||||
"closedCategory":{
|
"closedCategory":{
|
||||||
@@ -74,10 +76,9 @@
|
|||||||
"roleId":"012345678910"
|
"roleId":"012345678910"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id":"website",
|
"id":"example-website",
|
||||||
"name":"Website",
|
"name":"Website",
|
||||||
"description":"Go to our website.",
|
"description":"Go to our website.",
|
||||||
"icon":"✅",
|
"icon":"✅",
|
||||||
@@ -85,33 +86,31 @@
|
|||||||
"type":"website",
|
"type":"website",
|
||||||
|
|
||||||
"url":"https://www.dj-dj.be"
|
"url":"https://www.dj-dj.be"
|
||||||
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id":"role",
|
"id":"example-role",
|
||||||
"name":"Verify",
|
"name":"Update Ping",
|
||||||
"description":"Click here to get the verify role.",
|
"description":"Click here to get pinged for updates!",
|
||||||
"icon":"👮🏼",
|
"icon":"📢",
|
||||||
"label":"get a role",
|
"label":"Update Ping",
|
||||||
"type":"role",
|
"type":"role",
|
||||||
|
|
||||||
"color":"red",
|
"color":"red",
|
||||||
"roles":["discord role id"],
|
"roles":["discord role id"],
|
||||||
"mode":"add&remove|remove|add",
|
"mode":"add&remove|remove|add",
|
||||||
"enableDmOnOpen":true
|
"enableDmOnOpen":true
|
||||||
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
||||||
"messages":[
|
"messages":[
|
||||||
{
|
{
|
||||||
"id":"1",
|
"id":"example-embed",
|
||||||
"name":"Choose Your Ticket",
|
"name":"Choose Your Ticket",
|
||||||
"description":"You can click one of the buttons below!",
|
"description":"You can click one of the buttons below!",
|
||||||
"dropdown":false,
|
"dropdown":false,
|
||||||
|
|
||||||
"enableFooter":false,
|
"enableFooter":false,
|
||||||
"footer":"Open Ticket v3.4.0 - I'm a footer!",
|
"footer":"Open Ticket v3.5.5 - I'm a footer!",
|
||||||
|
|
||||||
"enableFooterImage":false,
|
"enableFooterImage":false,
|
||||||
"footerImage":"https://www.example.com/catmemes/cat.png",
|
"footerImage":"https://www.example.com/catmemes/cat.png",
|
||||||
@@ -125,7 +124,7 @@
|
|||||||
"enableCustomColor":false,
|
"enableCustomColor":false,
|
||||||
"color":"#ffffff",
|
"color":"#ffffff",
|
||||||
|
|
||||||
"options":["general","apply"],
|
"options":["example-ticket","example-website","example-role"],
|
||||||
|
|
||||||
"other":{
|
"other":{
|
||||||
"enableTicketExplaination":true,
|
"enableTicketExplaination":true,
|
||||||
|
|||||||
+1
-1
@@ -4,7 +4,7 @@ const bot = require("../../index")
|
|||||||
exports.client = bot.client
|
exports.client = bot.client
|
||||||
exports.config = bot.config
|
exports.config = bot.config
|
||||||
exports.utils = {
|
exports.utils = {
|
||||||
log:bot.errorLog.log(),
|
log:bot.errorLog.log,
|
||||||
storage:bot.storage
|
storage:bot.storage
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+4
-2
@@ -30,7 +30,8 @@
|
|||||||
"rename":false,
|
"rename":false,
|
||||||
"claim":false,
|
"claim":false,
|
||||||
"unclaim":false,
|
"unclaim":false,
|
||||||
"change":false
|
"change":false,
|
||||||
|
"stats":false
|
||||||
},
|
},
|
||||||
"slash":{
|
"slash":{
|
||||||
"help":false,
|
"help":false,
|
||||||
@@ -44,7 +45,8 @@
|
|||||||
"rename":false,
|
"rename":false,
|
||||||
"claim":false,
|
"claim":false,
|
||||||
"unclaim":false,
|
"unclaim":false,
|
||||||
"change":false
|
"change":false,
|
||||||
|
"stats":false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"checkerjs":{
|
"checkerjs":{
|
||||||
|
|||||||
@@ -229,7 +229,7 @@ exports.onTranscriptCreation = (messages,channel,guild,date) => {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**@typedef {"help"|"message"|"close"|"delete"|"reopen"|"rename"|"add"|"remove"|"claim"|"unclaim"|"change"} OTCommandType */
|
/**@typedef {"help"|"message"|"close"|"delete"|"reopen"|"rename"|"add"|"remove"|"claim"|"unclaim"|"change"|"stats"} OTCommandType */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -3,6 +3,9 @@ const bot = require("../../index")
|
|||||||
const log = bot.errorLog.log
|
const log = bot.errorLog.log
|
||||||
|
|
||||||
module.exports = () => {
|
module.exports = () => {
|
||||||
|
const args = process.argv
|
||||||
|
const debugMode = args.includes("--debug")
|
||||||
|
|
||||||
const files = fs.readdirSync("./plugins")
|
const files = fs.readdirSync("./plugins")
|
||||||
const api = require("./api.json")
|
const api = require("./api.json")
|
||||||
var totalcount = 0
|
var totalcount = 0
|
||||||
@@ -11,27 +14,30 @@ module.exports = () => {
|
|||||||
files.forEach((file) => {
|
files.forEach((file) => {
|
||||||
if (file.endsWith(".plugin.js")){
|
if (file.endsWith(".plugin.js")){
|
||||||
try {
|
try {
|
||||||
require("../../plugins/"+file)()
|
require("../../plugins/" + file)()
|
||||||
|
|
||||||
successcount++
|
successcount++
|
||||||
totalcount++
|
totalcount++
|
||||||
}catch(err){
|
}catch(err){
|
||||||
/**@type {Error} */
|
/**@type {Error} */
|
||||||
const theError = err
|
const theError = err
|
||||||
if (api.enableAPIdebug){
|
if (api.enableAPIdebug || debugMode) {
|
||||||
|
console.error(theError)
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const data = fs.readFileSync("./apiDebug.txt")
|
const data = fs.readFileSync("./openticketdebug.txt")
|
||||||
const newData = data ? data.toString() : ""
|
const newData = data ? data.toString() : ""
|
||||||
fs.writeFileSync("./apiDebug.txt",newData+"ERROR: "+theError.name+": "+theError.message+"\n"+theError.stack+"\n\n")
|
fs.writeFileSync("./openticketdebug.txt", newData + "\nPLUGIN "+file+" ERROR: " + theError.name + ": " + theError.message + "\n" + theError.stack + "\n\n")
|
||||||
}catch{
|
} catch {
|
||||||
fs.writeFileSync("./apiDebug.txt","ERROR: "+theError.name+": "+theError.message+"\n"+theError.stack+"\n\n")
|
fs.writeFileSync("./openticketdebug.txt", "\nPLUGIN "+file+" ERROR: " + theError.name + ": " + theError.message + "\n" + theError.stack + "\n\n")
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
failcount++
|
failcount++
|
||||||
totalcount++
|
totalcount++
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
require("../startscreen").headerDataPlugins({total:totalcount,success:successcount,error:failcount})
|
require("../startscreen").headerDataPlugins({ total: totalcount, success: successcount, error: failcount })
|
||||||
}
|
}
|
||||||
+50
-23
@@ -29,23 +29,23 @@ exports.checker = async () => {
|
|||||||
/**@param {"userid"|"roleid"|"channelid"|"serverid"|"categoryid"} mode @param {String} value @param {String} path */
|
/**@param {"userid"|"roleid"|"channelid"|"serverid"|"categoryid"} mode @param {String} value @param {String} path */
|
||||||
const checkDiscord = (mode,value,path) => {
|
const checkDiscord = (mode,value,path) => {
|
||||||
if (mode == "userid"){
|
if (mode == "userid"){
|
||||||
if (value.length < 16 || value.length > 20 || !/^\d+$/.test(value)){
|
if (value.length < 16 || value.length > 40 || !/^\d+$/.test(value)){
|
||||||
createError("'"+path+"' | this user id is invalid")
|
createError("'"+path+"' | this user id is invalid")
|
||||||
}
|
}
|
||||||
}else if (mode == "channelid"){
|
}else if (mode == "channelid"){
|
||||||
if (value.length < 16 || value.length > 20 || !/^\d+$/.test(value)){
|
if (value.length < 16 || value.length > 40 || !/^\d+$/.test(value)){
|
||||||
createError("'"+path+"' | this channel id is invalid")
|
createError("'"+path+"' | this channel id is invalid")
|
||||||
}
|
}
|
||||||
}else if (mode == "roleid"){
|
}else if (mode == "roleid"){
|
||||||
if (value.length < 16 || value.length > 20 || !/^\d+$/.test(value)){
|
if (value.length < 16 || value.length > 40 || !/^\d+$/.test(value)){
|
||||||
createError("'"+path+"' | this role id is invalid")
|
createError("'"+path+"' | this role id is invalid")
|
||||||
}
|
}
|
||||||
}else if (mode == "serverid"){
|
}else if (mode == "serverid"){
|
||||||
if (value.length < 16 || value.length > 20 || !/^\d+$/.test(value)){
|
if (value.length < 16 || value.length > 40 || !/^\d+$/.test(value)){
|
||||||
createError("'"+path+"' | this server id is invalid")
|
createError("'"+path+"' | this server id is invalid")
|
||||||
}
|
}
|
||||||
}else if (mode == "categoryid"){
|
}else if (mode == "categoryid"){
|
||||||
if (value.length < 16 || value.length > 20 || !/^\d+$/.test(value)){
|
if (value.length < 16 || value.length > 40 || !/^\d+$/.test(value)){
|
||||||
createError("'"+path+"' | this category id is invalid")
|
createError("'"+path+"' | this category id is invalid")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -179,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)
|
||||||
@@ -402,11 +402,11 @@ exports.checker = async () => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------|
|
//////////////////////////////////////////
|
||||||
//--------------------------|
|
//////////////////////////////////////////
|
||||||
//checker => START HERE |
|
/////////!!! CHECKER.JS START !!!/////////
|
||||||
//--------------------------|
|
//////////////////////////////////////////
|
||||||
//--------------------------|
|
//////////////////////////////////////////
|
||||||
|
|
||||||
var configArray = ["color","serverId","token","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) => {
|
||||||
@@ -416,25 +416,51 @@ exports.checker = async () => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
checkHexColor(config.color,"main_color")
|
checkHexColor(config.color,"main_color")
|
||||||
checkDiscord("serverid",config.serverId,"server_id")
|
checkDiscord("serverid",config.serverId,"serverId")
|
||||||
|
|
||||||
if (!require("./api/api.json").disable.checkerjs.token && !config.token.fromENV) checkToken(config.token.value)
|
if (!require("./api/api.json").disable.checkerjs.token && !config.token.fromENV) checkToken(config.token.value)
|
||||||
|
|
||||||
checkType(config.adminRoles,"array","/main_adminroles")
|
checkType(config.adminRoles,"array","/adminRoles")
|
||||||
checkDiscordArray("roleid",config.adminRoles,"main_adminroles")
|
checkDiscordArray("roleid",config.adminRoles,"adminRoles")
|
||||||
checkString(config.prefix,1,15,"prefix","prefix")
|
checkString(config.prefix,1,15,"prefix","prefix")
|
||||||
//languagefile
|
|
||||||
checkType(config.languageFile,"string","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") && !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")){
|
//languagefile
|
||||||
createError("'languagefile' | invalid language, more info in the wiki")
|
checkType(config.languageFile,"string","languageFile")
|
||||||
|
const languageList = [
|
||||||
|
"custom",
|
||||||
|
"english",
|
||||||
|
"dutch",
|
||||||
|
"romanian",
|
||||||
|
"german",
|
||||||
|
"arabic",
|
||||||
|
"spanish",
|
||||||
|
"portuguese",
|
||||||
|
"french",
|
||||||
|
"italian",
|
||||||
|
"czech",
|
||||||
|
"danish",
|
||||||
|
"russian",
|
||||||
|
"turkish",
|
||||||
|
"polish",
|
||||||
|
"slovenian",
|
||||||
|
"thai",
|
||||||
|
"norwegian",
|
||||||
|
"greek",
|
||||||
|
"ukrainian",
|
||||||
|
"hungarian",
|
||||||
|
"indonesian",
|
||||||
|
"kurdish",
|
||||||
|
"persian",
|
||||||
|
"latvian"
|
||||||
|
]
|
||||||
|
if (!languageList.some((l) => config.languageFile.startsWith(l))){
|
||||||
|
createError("'languageFile' | invalid language, more info in the wiki")
|
||||||
}
|
}
|
||||||
|
|
||||||
//status:
|
//status:
|
||||||
checkType(config.status.enabled,"boolean","status/enabled")
|
checkType(config.status.enabled,"boolean","status/enabled")
|
||||||
if (config.status.enabled){
|
if (config.status.enabled){
|
||||||
if (config.status.type != "PLAYING" && config.status.type != "LISTENING" && config.status.type != "WATCHING"){
|
if (config.status.type != "PLAYING" && config.status.type != "LISTENING" && config.status.type != "WATCHING" && config.status.type != "CUSTOM"){
|
||||||
createError("'status/type' | not a valid status type! (LISTENING,WATCHING,PLAYING)")
|
createError("'status/type' | not a valid status type! (LISTENING,WATCHING,PLAYING)")
|
||||||
}
|
}
|
||||||
if (config.status.text.length < 1){
|
if (config.status.text.length < 1){
|
||||||
@@ -483,7 +509,6 @@ exports.checker = async () => {
|
|||||||
//the end
|
//the end
|
||||||
if (errorList.length > 0 || warnList.length > 0){
|
if (errorList.length > 0 || warnList.length > 0){
|
||||||
console.log("REPORT:\n===========================")
|
console.log("REPORT:\n===========================")
|
||||||
}
|
|
||||||
warnList.forEach((w) => {
|
warnList.forEach((w) => {
|
||||||
const splitw = w.split("'")
|
const splitw = w.split("'")
|
||||||
if (splitw.length > 1){
|
if (splitw.length > 1){
|
||||||
@@ -507,10 +532,12 @@ exports.checker = async () => {
|
|||||||
if (isWarn){
|
if (isWarn){
|
||||||
console.log("\n=> "+chalk.bgYellow("if you ignore warns, some things may work differently than expected!"))
|
console.log("\n=> "+chalk.bgYellow("if you ignore warns, some things may work differently than expected!"))
|
||||||
}
|
}
|
||||||
|
console.log(chalk.bold.green("\nDOCUMENTATION => https://otdocs.dj-dj.be\nSUPPORT => https://discord.dj-dj.be\n"))
|
||||||
process.exit(0)
|
process.exit(0)
|
||||||
}else if (isWarn == true && isError == false){
|
}else if (isWarn){
|
||||||
console.log("===========================")
|
console.log("===========================")
|
||||||
console.log("=> "+chalk.bgYellow("if you ignore warns, some things may work differently than expected!"))
|
console.log("=> "+chalk.bgYellow("if you ignore warns, some things may work differently than expected!"))
|
||||||
|
console.log(chalk.bold.green("\nDOCUMENTATION => https://otdocs.dj-dj.be\nSUPPORT => https://discord.dj-dj.be\n"))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,53 +0,0 @@
|
|||||||
const fs = require('fs')
|
|
||||||
const readline = require("readline")
|
|
||||||
const rl = readline.createInterface({
|
|
||||||
input:process.stdin,
|
|
||||||
output:process.stdout,
|
|
||||||
terminal:true
|
|
||||||
})
|
|
||||||
|
|
||||||
const ask = async () => {
|
|
||||||
const chalk = await (await import("chalk")).default
|
|
||||||
rl.question(chalk.yellow("WARNING: are you sure that there are",chalk.red("no tickets open"),"at the moment? ")+chalk.green("(yes/no)")+"\n",(answer) => {
|
|
||||||
if (answer != "1" && !answer.toLowerCase().startsWith("yes")){
|
|
||||||
console.log(chalk.red("invalid answer"))
|
|
||||||
ask()
|
|
||||||
return
|
|
||||||
}
|
|
||||||
console.log(chalk.green("clearing data..."))
|
|
||||||
runClear()
|
|
||||||
rl.close()
|
|
||||||
})
|
|
||||||
}
|
|
||||||
ask()
|
|
||||||
|
|
||||||
const runClear = async () => {
|
|
||||||
const chalk = await (await import("chalk")).default
|
|
||||||
//console.log(chalk.blue("You can get a node.js warning below, just ignore that, it's not important!"))
|
|
||||||
const dataPaths = ["./storage/dynamicDB"]
|
|
||||||
|
|
||||||
var index = 0
|
|
||||||
|
|
||||||
dataPaths.forEach((path) => {
|
|
||||||
try {
|
|
||||||
fs.rmSync(path,{recursive:true,force:true})
|
|
||||||
}catch{
|
|
||||||
//console.log(path,"doesn't exist")
|
|
||||||
}
|
|
||||||
setTimeout(() => {
|
|
||||||
try{
|
|
||||||
fs.mkdirSync(path)
|
|
||||||
}catch{
|
|
||||||
//console.log(path,"already exists")
|
|
||||||
}
|
|
||||||
index++
|
|
||||||
},500)
|
|
||||||
})
|
|
||||||
|
|
||||||
setInterval(() => {
|
|
||||||
if (index >= 1){
|
|
||||||
console.log(chalk.bgGreen("All local data is cleared!"))
|
|
||||||
process.exit(1)
|
|
||||||
}
|
|
||||||
},500)
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,87 @@
|
|||||||
|
const fs = require("fs")
|
||||||
|
const location = "./storage/stats.json"
|
||||||
|
|
||||||
|
|
||||||
|
/**@returns {[{category:String, key:String, value:String}]}*/
|
||||||
|
function getData(){
|
||||||
|
if (fs.existsSync(location)){
|
||||||
|
return JSON.parse(fs.readFileSync(location).toString())
|
||||||
|
}else{
|
||||||
|
fs.writeFileSync(location,"[]")
|
||||||
|
return []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/**@param {[{category:String, key:String, value:String}]} data*/
|
||||||
|
function setData(data){
|
||||||
|
fs.writeFileSync(location,JSON.stringify(data,null,"\t"))
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {String} category
|
||||||
|
* @param {String} key
|
||||||
|
* @param {String|Boolean|Number} value
|
||||||
|
* @returns {Boolean} exists?
|
||||||
|
*/
|
||||||
|
exports.set = (category,key,value) => {
|
||||||
|
const currentData = getData()
|
||||||
|
const exists = currentData.find((d) => (d.category == category) && (d.key == key)) ? true : false
|
||||||
|
var newData = []
|
||||||
|
if (exists){
|
||||||
|
currentData.forEach((d,i) => {
|
||||||
|
if (d.category == category && d.key == key){
|
||||||
|
newData.push({category,key,value})
|
||||||
|
}else{
|
||||||
|
newData.push(d)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}else{
|
||||||
|
currentData.push({category,key,value})
|
||||||
|
newData = currentData
|
||||||
|
}
|
||||||
|
|
||||||
|
setData(newData)
|
||||||
|
return exists
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @param {String} category
|
||||||
|
* @param {String} key
|
||||||
|
* @returns {String|Boolean|Number|undefined}
|
||||||
|
*/
|
||||||
|
exports.get = (category,key) => {
|
||||||
|
const currentData = getData()
|
||||||
|
const result = currentData.find((d) => (d.category == category) && (d.key == key))
|
||||||
|
return (result) ? result.value : undefined
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {String} category
|
||||||
|
* @returns {[{key:String,value:String|Boolean|Number}]|false}
|
||||||
|
*/
|
||||||
|
exports.getCategory = (category) => {
|
||||||
|
const currentData = getData()
|
||||||
|
const result = currentData.filter((v) => v.category == category)
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {String} category
|
||||||
|
* @param {String} key
|
||||||
|
* @returns {Boolean} exists?
|
||||||
|
*/
|
||||||
|
exports.delete = (category,key) => {
|
||||||
|
const currentData = getData()
|
||||||
|
const exists = currentData.find((d) => (d.category == category) && (d.key == key)) ? true : false
|
||||||
|
var newData = []
|
||||||
|
if (exists){
|
||||||
|
currentData.forEach((d,i) => {
|
||||||
|
if (!(d.category == category && d.key == key)){
|
||||||
|
newData.push(d)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}else{
|
||||||
|
newData = currentData
|
||||||
|
}
|
||||||
|
|
||||||
|
setData(newData)
|
||||||
|
return exists
|
||||||
|
}
|
||||||
@@ -1,43 +0,0 @@
|
|||||||
const localstorage = require("node-localstorage")
|
|
||||||
|
|
||||||
const ls = new localstorage.LocalStorage("./storage/dynamicDB")
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @param {String} category
|
|
||||||
* @param {String} id
|
|
||||||
* @param {String} value
|
|
||||||
* @returns {Boolean}
|
|
||||||
*/
|
|
||||||
exports.set = (category,id,value) => {
|
|
||||||
ls.setItem(category+"--"+id,value.toString())
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @param {String} category
|
|
||||||
* @param {String} id
|
|
||||||
* @returns {String|false}
|
|
||||||
*/
|
|
||||||
exports.get = (category,id) => {
|
|
||||||
const result = ls.getItem(category+"--"+id)
|
|
||||||
if (!result) return false
|
|
||||||
|
|
||||||
return result
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @param {String} category
|
|
||||||
* @param {String} id
|
|
||||||
* @returns {Boolean}
|
|
||||||
*/
|
|
||||||
exports.delete = (category,id) => {
|
|
||||||
ls.removeItem(category+"--"+id)
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
this.set("category","key","value")
|
|
||||||
this.get("category","key",)
|
|
||||||
this.delete("category","key")
|
|
||||||
@@ -9,11 +9,15 @@ ALL DATABASE FILES NEED TO EXPORT THE FOLLOWING FUNCTIONS:
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
try {
|
try {
|
||||||
var db = require("./dynamicfiles/database")
|
var main = require("./databases/main")
|
||||||
|
var stats = require("./databases/stats")
|
||||||
}catch(err){
|
}catch(err){
|
||||||
console.log(err)
|
console.log(err)
|
||||||
console.log("I couldn't find the database file! (location: ./core/dynamicdatabase/storage.js:2)")
|
console.log("Unable to find the database handlers!")
|
||||||
process.exit(1)
|
process.exit(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = db
|
module.exports = {
|
||||||
|
main,
|
||||||
|
stats
|
||||||
|
}
|
||||||
+15
-10
@@ -14,25 +14,25 @@ const c = discord.Colors
|
|||||||
exports.noPermsMessage = (user) => {
|
exports.noPermsMessage = (user) => {
|
||||||
return new embed()
|
return new embed()
|
||||||
.setColor(c.Red)
|
.setColor(c.Red)
|
||||||
.setTitle(":x: "+l.errors.noPermsTitle)
|
.setTitle("❌ "+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*/
|
||||||
exports.noPermsDelete = (user) => {
|
exports.noPermsDelete = (user) => {
|
||||||
return new embed()
|
return new embed()
|
||||||
.setColor(c.Red)
|
.setColor(c.Red)
|
||||||
.setTitle(":x: "+l.errors.noPermsTitle)
|
.setTitle("❌ "+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 */
|
||||||
exports.invalidArgsMessage = (message) => {
|
exports.invalidArgsMessage = (message) => {
|
||||||
var x = new embed()
|
var x = new embed()
|
||||||
.setColor(c.Red)
|
.setColor(c.Red)
|
||||||
.setTitle(":x: "+l.errors.missingArgsTitle)
|
.setTitle("❌ "+l.errors.missingArgsTitle)
|
||||||
.setDescription(message)
|
.setDescription(message)
|
||||||
|
|
||||||
return x
|
return x
|
||||||
@@ -42,7 +42,7 @@ exports.invalidArgsMessage = (message) => {
|
|||||||
exports.serverError = (message) => {
|
exports.serverError = (message) => {
|
||||||
var x = new embed()
|
var x = new embed()
|
||||||
.setColor(c.Orange)
|
.setColor(c.Orange)
|
||||||
.setTitle(":warning: "+l.errors.boterror)
|
.setTitle("⚠️ "+l.errors.boterror)
|
||||||
.setDescription(message)
|
.setDescription(message)
|
||||||
|
|
||||||
return x
|
return x
|
||||||
@@ -53,14 +53,19 @@ exports.invalidIdChooseFromList = (list,message) => {
|
|||||||
const beforemsg = message ? message+"\n\n" : ""
|
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("❌ "+l.errors.chooseFromListTitle)
|
||||||
.setDescription(beforemsg+l.errors.chooseFromListDescription+"\n`"+list.join("`\n`")+"`")
|
.setDescription(beforemsg+l.errors.chooseFromListDescription+"\n`"+list.join("`\n`")+"`")
|
||||||
return x
|
return x
|
||||||
}
|
}
|
||||||
|
|
||||||
|
exports.failedRenameChannel = new embed()
|
||||||
|
.setColor(c.Red)
|
||||||
|
.setTitle("❌ Failed to rename channel")
|
||||||
|
.setDescription("Discord channels can only be renamed twice every 10 minutes! Open Ticket can't do anything about this error!")
|
||||||
|
|
||||||
exports.notInATicket = new embed()
|
exports.notInATicket = new embed()
|
||||||
.setColor(c.Red)
|
.setColor(c.Red)
|
||||||
.setTitle(":x: "+l.errors.notInTicketTitle)
|
.setTitle("❌ "+l.errors.notInTicketTitle)
|
||||||
.setDescription(l.errors.notInTicketDescription)
|
.setDescription(l.errors.notInTicketDescription)
|
||||||
|
|
||||||
|
|
||||||
@@ -68,7 +73,7 @@ exports.notInATicket = new embed()
|
|||||||
exports.success = (title,message) => {
|
exports.success = (title,message) => {
|
||||||
var x = new embed()
|
var x = new embed()
|
||||||
.setColor(config.color)
|
.setColor(config.color)
|
||||||
.setTitle(":white_check_mark: "+title)
|
.setTitle("✅ "+title)
|
||||||
.setDescription(message)
|
.setDescription(message)
|
||||||
|
|
||||||
return x
|
return x
|
||||||
@@ -78,7 +83,7 @@ exports.success = (title,message) => {
|
|||||||
exports.warning = (title,message) => {
|
exports.warning = (title,message) => {
|
||||||
var x = new embed()
|
var x = new embed()
|
||||||
.setColor(c.Orange)
|
.setColor(c.Orange)
|
||||||
.setTitle(":warning: "+title)
|
.setTitle("⚠️ "+title)
|
||||||
.setDescription(message)
|
.setDescription(message)
|
||||||
|
|
||||||
return x
|
return x
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ exports.firstmsgRowNormal = new arb()
|
|||||||
.setDisabled(false)
|
.setDisabled(false)
|
||||||
.setStyle(bs.Success)
|
.setStyle(bs.Success)
|
||||||
.setLabel("Claim Ticket")
|
.setLabel("Claim Ticket")
|
||||||
|
.setEmoji("📌")
|
||||||
)
|
)
|
||||||
.addComponents(
|
.addComponents(
|
||||||
new button()
|
new button()
|
||||||
@@ -46,6 +47,7 @@ exports.firstmsgRowDisabled = new arb()
|
|||||||
.setDisabled(false)
|
.setDisabled(false)
|
||||||
.setStyle(bs.Success)
|
.setStyle(bs.Success)
|
||||||
.setLabel("Claim Ticket")
|
.setLabel("Claim Ticket")
|
||||||
|
.setEmoji("📌")
|
||||||
)
|
)
|
||||||
.addComponents(
|
.addComponents(
|
||||||
new button()
|
new button()
|
||||||
@@ -71,6 +73,7 @@ exports.firstmsgRowNormalNoClaim = new arb()
|
|||||||
.setDisabled(true)
|
.setDisabled(true)
|
||||||
.setStyle(bs.Secondary)
|
.setStyle(bs.Secondary)
|
||||||
.setLabel("Claim Ticket")
|
.setLabel("Claim Ticket")
|
||||||
|
.setEmoji("📌")
|
||||||
)
|
)
|
||||||
.addComponents(
|
.addComponents(
|
||||||
new button()
|
new button()
|
||||||
@@ -96,6 +99,7 @@ exports.firstmsgRowDisabledNoClaim = new arb()
|
|||||||
.setDisabled(true)
|
.setDisabled(true)
|
||||||
.setStyle(bs.Secondary)
|
.setStyle(bs.Secondary)
|
||||||
.setLabel("Claim Ticket")
|
.setLabel("Claim Ticket")
|
||||||
|
.setEmoji("📌")
|
||||||
)
|
)
|
||||||
.addComponents(
|
.addComponents(
|
||||||
new button()
|
new button()
|
||||||
|
|||||||
@@ -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,7 +47,7 @@ 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
|
||||||
@@ -63,7 +63,7 @@ exports.autocloseSignalEmbed = (closer,time) => {
|
|||||||
const embd = new embed()
|
const embd = new embed()
|
||||||
.setTitle("⏰ This ticket got closed by Autoclose!")
|
.setTitle("⏰ This ticket got closed by Autoclose!")
|
||||||
.setColor(mc)
|
.setColor(mc)
|
||||||
.setFooter({text:closer.tag,iconURL:closer.displayAvatarURL()})
|
.setFooter({text:closer.username,iconURL:closer.displayAvatarURL()})
|
||||||
.setDescription("This ticket has been inactive for `"+time+"h`!")
|
.setDescription("This ticket has been inactive for `"+time+"h`!")
|
||||||
return embd
|
return embd
|
||||||
}
|
}
|
||||||
@@ -77,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()})
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -90,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()})
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -102,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()})
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -115,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()})
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -127,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()})
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -140,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()})
|
||||||
}
|
}
|
||||||
@@ -26,15 +26,16 @@ module.exports = () => {
|
|||||||
}catch{}
|
}catch{}
|
||||||
|
|
||||||
if (!interaction.guild) return
|
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)
|
const hiddendata = bot.hiddenData.readHiddenData(interaction.channel.id)
|
||||||
if (hiddendata.length < 1) return interaction.editReply({embeds:[bot.errorLog.notInATicket]})
|
if (hiddendata.length < 1) return interaction.editReply({embeds:[bot.errorLog.notInATicket]})
|
||||||
const ticketId = hiddendata.find(d => d.key == "type").value
|
const ticketId = hiddendata.find(d => d.key == "type").value
|
||||||
|
|
||||||
|
if (!permsChecker.ticket(interaction.user.id,interaction.guild.id,ticketId)){
|
||||||
|
permsChecker.sendUserNoPerms(interaction.user)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
hiddendata.push({key:"claimedby",value:interaction.user.id})
|
hiddendata.push({key:"claimedby",value:interaction.user.id})
|
||||||
bot.hiddenData.writeHiddenData(interaction.channel.id,hiddendata)
|
bot.hiddenData.writeHiddenData(interaction.channel.id,hiddendata)
|
||||||
storage.set("claimData",interaction.channel.id,interaction.user.id)
|
storage.set("claimData",interaction.channel.id,interaction.user.id)
|
||||||
@@ -45,7 +46,7 @@ module.exports = () => {
|
|||||||
if (firstmsg == undefined || firstmsg.author.id != client.user.id) return interaction.editReply({embeds:[bot.errorLog.notInATicket]})
|
if (firstmsg == undefined || firstmsg.author.id != client.user.id) return interaction.editReply({embeds:[bot.errorLog.notInATicket]})
|
||||||
|
|
||||||
const newEmbed = new embed(firstmsg.embeds[0].data)
|
const newEmbed = new embed(firstmsg.embeds[0].data)
|
||||||
.setFooter({text:"claimed by: "+interaction.user.tag,iconURL:interaction.user.displayAvatarURL()})
|
.setFooter({text:"claimed by: "+interaction.user.username,iconURL:interaction.user.displayAvatarURL()})
|
||||||
|
|
||||||
if (firstmsg.components[0].components[1] && firstmsg.components[0].components[1].disabled){
|
if (firstmsg.components[0].components[1] && firstmsg.components[0].components[1].disabled){
|
||||||
firstmsg.edit({components:[bot.buttons.firstmsg.firstmsgRowDisabledNoClaim],embeds:[newEmbed]})
|
firstmsg.edit({components:[bot.buttons.firstmsg.firstmsgRowDisabledNoClaim],embeds:[newEmbed]})
|
||||||
|
|||||||
@@ -31,12 +31,16 @@ module.exports = () => {
|
|||||||
|
|
||||||
const firstcomponents = interaction.message.components
|
const firstcomponents = interaction.message.components
|
||||||
|
|
||||||
|
const hiddendata = bot.hiddenData.readHiddenData(interaction.channel.id)
|
||||||
|
if (hiddendata.length < 1) return interaction.channel.send({embeds:[bot.errorLog.notInATicket]})
|
||||||
|
const ticketId = hiddendata.find(d => d.key == "type").value
|
||||||
|
|
||||||
if (config.system.closeMode == "adminonly"){
|
if (config.system.closeMode == "adminonly"){
|
||||||
if (!permissionChecker.command(interaction.user.id,interaction.guild.id)){
|
if (!permissionChecker.ticket(interaction.user.id,interaction.guild.id,ticketId)){
|
||||||
if (!permissionChecker.sendUserNoPerms(interaction.user)){
|
if (!permissionChecker.sendUserNoPerms(interaction.user)){
|
||||||
permissionChecker.sendChannelNoPerms(interaction.channel,interaction.user)
|
permissionChecker.sendChannelNoPerms(interaction.channel,interaction.user)
|
||||||
}
|
}
|
||||||
interaction.message.edit({components:[firstcomponents]})
|
interaction.message.edit({components:firstcomponents})
|
||||||
closeTicketButtonChecker = false
|
closeTicketButtonChecker = false
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -56,12 +56,16 @@ module.exports = () => {
|
|||||||
|
|
||||||
const firstcomponents = interaction.message.components
|
const firstcomponents = interaction.message.components
|
||||||
|
|
||||||
|
const hiddendata = bot.hiddenData.readHiddenData(interaction.channel.id)
|
||||||
|
if (hiddendata.length < 1) return interaction.channel.send({embeds:[bot.errorLog.notInATicket]})
|
||||||
|
const ticketId = hiddendata.find(d => d.key == "type").value
|
||||||
|
|
||||||
if (config.system.closeMode == "adminonly"){
|
if (config.system.closeMode == "adminonly"){
|
||||||
if (!permissionChecker.command(interaction.user.id,interaction.guild.id)){
|
if (!permissionChecker.ticket(interaction.user.id,interaction.guild.id,ticketId)){
|
||||||
if (!permissionChecker.sendUserNoPerms(interaction.user)){
|
if (!permissionChecker.sendUserNoPerms(interaction.user)){
|
||||||
permissionChecker.sendChannelNoPerms(interaction.channel,interaction.user)
|
permissionChecker.sendChannelNoPerms(interaction.channel,interaction.user)
|
||||||
}
|
}
|
||||||
interaction.message.edit({components:[firstcomponents]})
|
interaction.message.edit({components:firstcomponents})
|
||||||
closeTicketButtonChecker = false
|
closeTicketButtonChecker = false
|
||||||
return interaction.deferUpdate()
|
return interaction.deferUpdate()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,7 +29,11 @@ module.exports = () => {
|
|||||||
|
|
||||||
const firstcomponents = bot.buttons.close.openRowNormal
|
const firstcomponents = bot.buttons.close.openRowNormal
|
||||||
|
|
||||||
if (!permissionChecker.command(interaction.user.id,interaction.guild.id)){
|
const hiddendata = bot.hiddenData.readHiddenData(interaction.channel.id)
|
||||||
|
if (hiddendata.length < 1) return interaction.channel.send({embeds:[bot.errorLog.notInATicket]})
|
||||||
|
const ticketId = hiddendata.find(d => d.key == "type").value
|
||||||
|
|
||||||
|
if (!permissionChecker.ticket(interaction.user.id,interaction.guild.id,ticketId)){
|
||||||
if (!permissionChecker.sendUserNoDelete(interaction.user)){
|
if (!permissionChecker.sendUserNoDelete(interaction.user)){
|
||||||
permissionChecker.sendChannelNoDelete(interaction.channel,interaction.user)
|
permissionChecker.sendChannelNoDelete(interaction.channel,interaction.user)
|
||||||
}
|
}
|
||||||
@@ -69,7 +73,11 @@ module.exports = () => {
|
|||||||
|
|
||||||
const firstcomponents = bot.buttons.close.closeCommandRow
|
const firstcomponents = bot.buttons.close.closeCommandRow
|
||||||
|
|
||||||
if (!permissionChecker.command(interaction.user.id,interaction.guild.id)){
|
const hiddendata = bot.hiddenData.readHiddenData(interaction.channel.id)
|
||||||
|
if (hiddendata.length < 1) return interaction.channel.send({embeds:[bot.errorLog.notInATicket]})
|
||||||
|
const ticketId = hiddendata.find(d => d.key == "type").value
|
||||||
|
|
||||||
|
if (!permissionChecker.ticket(interaction.user.id,interaction.guild.id,ticketId)){
|
||||||
if (!permissionChecker.sendUserNoDelete(interaction.user)){
|
if (!permissionChecker.sendUserNoDelete(interaction.user)){
|
||||||
permissionChecker.sendChannelNoDelete(interaction.channel,interaction.user)
|
permissionChecker.sendChannelNoDelete(interaction.channel,interaction.user)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,8 +21,21 @@ module.exports = () => {
|
|||||||
if (!interaction.isButton()) return
|
if (!interaction.isButton()) return
|
||||||
if (interaction.customId != "OTreopenTicket") return
|
if (interaction.customId != "OTreopenTicket") return
|
||||||
|
|
||||||
|
const hiddendata = bot.hiddenData.readHiddenData(interaction.channel.id)
|
||||||
|
if (hiddendata.length < 1) return interaction.reply({embeds:[bot.errorLog.notInATicket]})
|
||||||
|
const ticketId = hiddendata.find(d => d.key == "type").value
|
||||||
|
|
||||||
|
if (config.system.closeMode == "adminonly"){
|
||||||
|
if (!permissionChecker.ticket(interaction.user.id,interaction.guild.id,ticketId)){
|
||||||
|
if (!permissionChecker.sendUserNoPerms(interaction.user)){
|
||||||
|
permissionChecker.sendChannelNoPerms(interaction.channel,interaction.user)
|
||||||
|
}
|
||||||
|
return interaction.deferUpdate()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
await 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,ticketId)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -53,7 +53,7 @@ module.exports = async () => {
|
|||||||
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())
|
||||||
})
|
})
|
||||||
@@ -68,7 +68,7 @@ module.exports = async () => {
|
|||||||
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())
|
||||||
})
|
})
|
||||||
@@ -84,13 +84,13 @@ module.exports = async () => {
|
|||||||
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())
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,9 +33,9 @@ module.exports = async (invisible) => {
|
|||||||
//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)")
|
||||||
if (!invisible){
|
if (!invisible){
|
||||||
setInterval(() => {
|
setInterval(() => {
|
||||||
process.stdout.cursorTo(0)
|
if (process.stdout && process.stdout.cursorTo) process.stdout.cursorTo(0)
|
||||||
process.stdout.write("[status] there are "+chalk.blue(readystats+" out of 13")+" commands ready! (this can take up to 40 seconds)")
|
process.stdout.write("[status] there are "+chalk.blue(readystats+" out of 14")+" commands ready! (this can take up to 40 seconds)")
|
||||||
if (readystats >= 13){
|
if (readystats >= 14){
|
||||||
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)
|
||||||
@@ -268,4 +268,38 @@ module.exports = async (invisible) => {
|
|||||||
readystats++
|
readystats++
|
||||||
})
|
})
|
||||||
|
|
||||||
|
//stats
|
||||||
|
client.application.commands.create({
|
||||||
|
name:"stats",
|
||||||
|
description:"See bot statistics!",
|
||||||
|
defaultPermission:true,
|
||||||
|
type:act.ChatInput,
|
||||||
|
options:[
|
||||||
|
{
|
||||||
|
type:acot.Subcommand,
|
||||||
|
name:"global",
|
||||||
|
description:"See the global bot stats!"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type:acot.Subcommand,
|
||||||
|
name:"ticket",
|
||||||
|
description:"See the stats of a ticket (use inside of ticket)!"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type:acot.Subcommand,
|
||||||
|
name:"user",
|
||||||
|
description:"See the stats from a user or yourself!",
|
||||||
|
options:[
|
||||||
|
{
|
||||||
|
type:acot.User,
|
||||||
|
name:"user",
|
||||||
|
required:false,
|
||||||
|
description:"See the stats from a specific user!"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},sid).then(() => {
|
||||||
|
readystats++
|
||||||
|
})
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,383 @@
|
|||||||
|
const { EmbedBuilder, Guild, TextChannel, Message, User } = 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 permissionChecker = require("./utils/permisssionChecker")
|
||||||
|
|
||||||
|
/**@typedef {"TICKETS_CREATED"|"TICKETS_CLOSED"|"TICKETS_DELETED"|"TICKETS_REOPENED"|"TICKETS_AUTOCLOSED"|"TRANSCRIPTS_CREATED"|"TIME_SINCE_UPDATE"|"LAST_VERSION"} OTGlobalStatsType */
|
||||||
|
/**@typedef {"CREATED_AT"|"CREATED_BY"|"STATUS"} OTTicketStatsType */
|
||||||
|
/**@typedef {"TICKETS_CREATED"|"TICKETS_CLOSED"|"TICKETS_DELETED"|"TICKETS_REOPENED"} OTUserStatsType */
|
||||||
|
/**
|
||||||
|
* @callback OTStatsCallback
|
||||||
|
* @param {Boolean|Number|String|undefined} current
|
||||||
|
* @returns {Boolean|Number|String|undefined}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {OTGlobalStatsType} type
|
||||||
|
* @param {OTStatsCallback} callback
|
||||||
|
*/
|
||||||
|
const updateGlobalStats = (type,callback) => {
|
||||||
|
const currentstat = bot.statsStorage.get("global",type)
|
||||||
|
const newstat = callback(currentstat)
|
||||||
|
if (["string","number","boolean"].includes(typeof newstat)){
|
||||||
|
bot.statsStorage.set("global",type,newstat)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {OTTicketStatsType} type
|
||||||
|
* @param {String} id
|
||||||
|
* @param {OTStatsCallback} callback
|
||||||
|
*/
|
||||||
|
const updateTicketStats = (type,id,callback) => {
|
||||||
|
const currentstat = bot.statsStorage.get("ticket"+id,type)
|
||||||
|
const newstat = callback(currentstat)
|
||||||
|
if (["string","number","boolean"].includes(typeof newstat)){
|
||||||
|
bot.statsStorage.set("ticket"+id,type,newstat)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {OTUserStatsType} type
|
||||||
|
* @param {String} id
|
||||||
|
* @param {OTStatsCallback} callback
|
||||||
|
*/
|
||||||
|
const updateUserStats = (type,id,callback) => {
|
||||||
|
const currentstat = bot.statsStorage.get("user"+id,type)
|
||||||
|
const newstat = callback(currentstat)
|
||||||
|
if (["string","number","boolean"].includes(typeof newstat)){
|
||||||
|
bot.statsStorage.set("user"+id,type,newstat)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param {"global"|"ticket"|"user"} scope
|
||||||
|
* @param {OTGlobalStatsType|OTTicketStatsType|OTUserStatsType} type
|
||||||
|
* @param {String} [id]
|
||||||
|
*/
|
||||||
|
const removeStats = (scope,type,id) => {
|
||||||
|
const newScope = (scope == "global") ? scope : scope+id
|
||||||
|
bot.statsStorage.delete(newScope,type)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param {"global"|"ticket"|"user"} scope
|
||||||
|
* @param {OTGlobalStatsType|OTTicketStatsType|OTUserStatsType} type
|
||||||
|
* @param {String} [id]
|
||||||
|
*/
|
||||||
|
const existStats = (scope,type,id) => {
|
||||||
|
const newScope = (scope == "global") ? scope : scope+id
|
||||||
|
return (typeof bot.statsStorage.get(newScope,type) == "undefined") ? false : true
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param {"global"|"ticket"|"user"} scope
|
||||||
|
* @param {OTGlobalStatsType|OTTicketStatsType|OTUserStatsType} type
|
||||||
|
* @param {String} [id]
|
||||||
|
*/
|
||||||
|
const getStats = (scope,type,id) => {
|
||||||
|
const newScope = (scope == "global") ? scope : scope+id
|
||||||
|
return bot.statsStorage.get(newScope,type)
|
||||||
|
}
|
||||||
|
|
||||||
|
const startupStatsManager = () => {
|
||||||
|
//UPDATE LAST UPDATE DATE
|
||||||
|
if (!existStats("global","TIME_SINCE_UPDATE")){
|
||||||
|
updateGlobalStats("TIME_SINCE_UPDATE",(current) => {
|
||||||
|
return new Date().getTime()
|
||||||
|
})
|
||||||
|
updateGlobalStats("LAST_VERSION",(current) => {
|
||||||
|
return (require("../package.json")).version
|
||||||
|
})
|
||||||
|
}
|
||||||
|
if ((require("../package.json")).version != getStats("global","LAST_VERSION")){
|
||||||
|
updateGlobalStats("TIME_SINCE_UPDATE",(current) => {
|
||||||
|
return new Date().getTime()
|
||||||
|
})
|
||||||
|
updateGlobalStats("LAST_VERSION",(current) => {
|
||||||
|
return (require("../package.json")).version
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
//UPDATE THE OTHER STATS
|
||||||
|
if (!existStats("global","TICKETS_CREATED")){
|
||||||
|
updateGlobalStats("TICKETS_CREATED",(current) => {
|
||||||
|
return 0
|
||||||
|
})
|
||||||
|
}
|
||||||
|
if (!existStats("global","TICKETS_CLOSED")){
|
||||||
|
updateGlobalStats("TICKETS_CLOSED",(current) => {
|
||||||
|
return 0
|
||||||
|
})
|
||||||
|
}
|
||||||
|
if (!existStats("global","TICKETS_DELETED")){
|
||||||
|
updateGlobalStats("TICKETS_DELETED",(current) => {
|
||||||
|
return 0
|
||||||
|
})
|
||||||
|
}
|
||||||
|
if (!existStats("global","TICKETS_AUTOCLOSED")){
|
||||||
|
updateGlobalStats("TICKETS_AUTOCLOSED",(current) => {
|
||||||
|
return 0
|
||||||
|
})
|
||||||
|
}
|
||||||
|
if (!existStats("global","TICKETS_REOPENED")){
|
||||||
|
updateGlobalStats("TICKETS_REOPENED",(current) => {
|
||||||
|
return 0
|
||||||
|
})
|
||||||
|
}if (!existStats("global","TRANSCRIPTS_CREATED")){
|
||||||
|
updateGlobalStats("TRANSCRIPTS_CREATED",(current) => {
|
||||||
|
return 0
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
//HANDLE MEMBER LEAVE (clear the database)
|
||||||
|
client.on("guildMemberRemove",(member) => {
|
||||||
|
if (existStats("user","TICKETS_CREATED",member.id)){
|
||||||
|
removeStats("user","TICKETS_CREATED",member.id)
|
||||||
|
}
|
||||||
|
if (existStats("user","TICKETS_CLOSED",member.id)){
|
||||||
|
removeStats("user","TICKETS_CLOSED",member.id)
|
||||||
|
}
|
||||||
|
if (existStats("user","TICKETS_DELETED",member.id)){
|
||||||
|
removeStats("user","TICKETS_DELETED",member.id)
|
||||||
|
}
|
||||||
|
if (existStats("user","TICKETS_REOPENED",member.id)){
|
||||||
|
removeStats("user","TICKETS_REOPENED",member.id)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @returns {Promise<{startDate:Number, updateDate:Number, version:String, ticketsCreated:Number, ticketsClosed:Number, ticketsDeleted:Number, ticketsReopened:Number, ticketsAutoclosed:Number, transcriptsCreated:Number}>}
|
||||||
|
*/
|
||||||
|
const getGlobalStats = async () => {
|
||||||
|
//live data
|
||||||
|
const startDate = new Date().getTime() - client.uptime
|
||||||
|
const version = (require("../package.json")).version
|
||||||
|
|
||||||
|
//saved data
|
||||||
|
const ticketsCreated = getStats("global","TICKETS_CREATED")
|
||||||
|
const ticketsClosed = getStats("global","TICKETS_CLOSED")
|
||||||
|
const ticketsDeleted = getStats("global","TICKETS_DELETED")
|
||||||
|
const ticketsReopened = getStats("global","TICKETS_REOPENED")
|
||||||
|
const ticketsAutoclosed = getStats("global","TICKETS_AUTOCLOSED")
|
||||||
|
const transcriptsCreated = getStats("global","TRANSCRIPTS_CREATED")
|
||||||
|
const timeSinceUpdate = getStats("global","TIME_SINCE_UPDATE")
|
||||||
|
|
||||||
|
return {
|
||||||
|
startDate,
|
||||||
|
updateDate: (typeof timeSinceUpdate == "undefined") ? new Date().getTime() : timeSinceUpdate,
|
||||||
|
version,
|
||||||
|
|
||||||
|
ticketsCreated: (typeof ticketsCreated == "undefined") ? 0 : ticketsCreated,
|
||||||
|
ticketsClosed: (typeof ticketsClosed == "undefined") ? 0 : ticketsClosed,
|
||||||
|
ticketsDeleted: (typeof ticketsDeleted == "undefined") ? 0 : ticketsDeleted,
|
||||||
|
ticketsReopened: (typeof ticketsReopened == "undefined") ? 0 : ticketsReopened,
|
||||||
|
ticketsAutoclosed: (typeof ticketsAutoclosed == "undefined") ? 0 : ticketsAutoclosed,
|
||||||
|
transcriptsCreated: (typeof transcriptsCreated == "undefined") ? 0 : transcriptsCreated,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param {discord.TextChannel} channel
|
||||||
|
* @param {Number} limit
|
||||||
|
* @returns {Promise<Message[]>}
|
||||||
|
*/
|
||||||
|
const getmessages = async (channel,limit) => {
|
||||||
|
const final = []
|
||||||
|
var lastId = ""
|
||||||
|
|
||||||
|
while (true) {
|
||||||
|
const options = {limit:100}
|
||||||
|
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
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {Guild} guild
|
||||||
|
* @param {String} channelid
|
||||||
|
* @returns {Promise<{createdAt:Number, createdBy:String, messageAmount:Number, participants:String[], ticketName:String, status:"open"|"closed"|"reopened"|"autoclosed"}>}
|
||||||
|
*/
|
||||||
|
const getTicketStats = async (guild,channelid) => {
|
||||||
|
//live data
|
||||||
|
/**@type {TextChannel|undefined} */
|
||||||
|
const channel = guild.channels.cache.find((c) => c.id == channelid)
|
||||||
|
const messageAmount = (channel) ? (await getmessages(channel,5000)).length : 0
|
||||||
|
const participants = (channel) ? channel.members.map((m) => "<@"+m.user.id+">") : []
|
||||||
|
|
||||||
|
//saved data
|
||||||
|
const createdAt = getStats("ticket","CREATED_AT",channelid)
|
||||||
|
const status = getStats("ticket","STATUS",channelid)
|
||||||
|
|
||||||
|
const TEMPcreatedBy = getStats("ticket","CREATED_BY",channelid)
|
||||||
|
const TEMPcreatedByUser = (TEMPcreatedBy) ? guild.members.cache.find((m) => m.id == TEMPcreatedBy) : undefined
|
||||||
|
const createdBy = (TEMPcreatedByUser) ? "<@"+TEMPcreatedByUser.user.id+">" : "an unknown person 😄"
|
||||||
|
|
||||||
|
return {
|
||||||
|
createdAt: (typeof createdAt == "undefined") ? new Date().getTime() : createdAt,
|
||||||
|
createdBy: (typeof createdBy == "undefined") ? 0 : createdBy,
|
||||||
|
messageAmount,
|
||||||
|
participants:participants.slice(0,50),
|
||||||
|
ticketName:channel.name,
|
||||||
|
status: (typeof status == "undefined") ? "open" : status
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {Guild} guild
|
||||||
|
* @param {User} user
|
||||||
|
* @param {String} [channelid]
|
||||||
|
* @returns {Promise<{ticketsCreated:Number, ticketsClosed:Number, ticketsDeleted:Number, ticketsReopened:Number, role:"globaladmin"|"ticketadmin"|"member", userName:String}>}
|
||||||
|
*/
|
||||||
|
const getUserStats = async (guild,user,channelid) => {
|
||||||
|
//live data
|
||||||
|
const hiddendata = bot.hiddenData.readHiddenData(channelid)
|
||||||
|
const ticketId = (hiddendata.length < 1) ? false : hiddendata.find(d => d.key == "type").value
|
||||||
|
|
||||||
|
const isGlobalAdmin = permissionChecker.global(user.id,guild.id)
|
||||||
|
const isTicketAdmin = (ticketId) ? permissionChecker.ticket(user.id,guild.id,ticketId) : false
|
||||||
|
const role = (isGlobalAdmin) ? "globaladmin" : ((isTicketAdmin) ? "ticketadmin" : "member")
|
||||||
|
|
||||||
|
//saved data
|
||||||
|
const ticketsCreated = getStats("user","TICKETS_CREATED",user.id)
|
||||||
|
const ticketsClosed = getStats("user","TICKETS_CLOSED",user.id)
|
||||||
|
const ticketsDeleted = getStats("user","TICKETS_DELETED",user.id)
|
||||||
|
const ticketsReopened = getStats("user","TICKETS_REOPENED",user.id)
|
||||||
|
|
||||||
|
return {
|
||||||
|
ticketsCreated: (typeof ticketsCreated == "undefined") ? 0 : ticketsCreated,
|
||||||
|
ticketsClosed: (typeof ticketsClosed == "undefined") ? 0 : ticketsClosed,
|
||||||
|
ticketsDeleted: (typeof ticketsDeleted == "undefined") ? 0 : ticketsDeleted,
|
||||||
|
ticketsReopened: (typeof ticketsReopened == "undefined") ? 0 : ticketsReopened,
|
||||||
|
role,
|
||||||
|
userName:user.username
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const createGlobalStatsEmbed = async () => {
|
||||||
|
const stats = await getGlobalStats()
|
||||||
|
|
||||||
|
const sentences = [
|
||||||
|
`${l.stats.ticketsCreated}: \`${stats.ticketsCreated}\``,
|
||||||
|
`${l.stats.ticketsClosed}: \`${stats.ticketsClosed}\``,
|
||||||
|
`${l.stats.ticketsDeleted}: \`${stats.ticketsDeleted}\``,
|
||||||
|
`${l.stats.ticketsReopened}: \`${stats.ticketsReopened}\``,
|
||||||
|
`${l.stats.ticketsAutoclosed}: \`${stats.ticketsAutoclosed}\``,
|
||||||
|
|
||||||
|
`${l.stats.startupDate}: <t:${Math.round(stats.startDate/1000)}:f>`,
|
||||||
|
`${l.stats.latestUpdate}: <t:${Math.round(stats.updateDate/1000)}:D>`
|
||||||
|
]
|
||||||
|
|
||||||
|
const embed = new EmbedBuilder()
|
||||||
|
.setColor(config.color)
|
||||||
|
.setTitle(`📊 ${l.stats.globalTitle}!`)
|
||||||
|
.setDescription(sentences.slice(0,5).join("\n"))
|
||||||
|
.addFields({
|
||||||
|
name:`${l.stats.systemTitle}:`,
|
||||||
|
value:sentences.slice(5,7).join("\n")
|
||||||
|
})
|
||||||
|
.setFooter({text:`${l.stats.versionTitle}: v${stats.version}`})
|
||||||
|
return embed
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {Guild} guild
|
||||||
|
* @param {String} channelid
|
||||||
|
*/
|
||||||
|
const createTicketStatsEmbed = async (guild,channelid) => {
|
||||||
|
const stats = await getTicketStats(guild,channelid)
|
||||||
|
|
||||||
|
if (stats.status == "open"){
|
||||||
|
var newStatus = `🟢 \`${l.stats.switches.open}\``
|
||||||
|
}else if (stats.status == "reopened"){
|
||||||
|
var newStatus = `🟢 \`${l.stats.switches.reopened}\``
|
||||||
|
}else if (stats.status == "closed"){
|
||||||
|
var newStatus = `🔴 \`${l.stats.switches.closed}\``
|
||||||
|
}else if (stats.status == "autoclosed"){
|
||||||
|
var newStatus = `🔴 \`${l.stats.switches.autoclosed}\``
|
||||||
|
}
|
||||||
|
|
||||||
|
const sentences = [
|
||||||
|
`${l.stats.ticketCreatedOn}: <t:${Math.round(stats.createdAt/1000)}:f>`,
|
||||||
|
`${l.stats.ticketCreatedBy}: ${stats.createdBy}`,
|
||||||
|
`${l.stats.messagesSent}: \`${stats.messageAmount}\``,
|
||||||
|
`${l.stats.status}: ${newStatus}`
|
||||||
|
]
|
||||||
|
|
||||||
|
const embed = new EmbedBuilder()
|
||||||
|
.setColor(config.color)
|
||||||
|
.setTitle(`📊 ${l.stats.ticketTitle}`.replace("{0}",`#${stats.ticketName}!`))
|
||||||
|
.setDescription(sentences.join("\n"))
|
||||||
|
.addFields({
|
||||||
|
name:`${l.stats.participants}:`,
|
||||||
|
value:stats.participants.join("\n")
|
||||||
|
})
|
||||||
|
return embed
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {Guild} guild
|
||||||
|
* @param {User} user
|
||||||
|
* @param {String} channelid
|
||||||
|
*/
|
||||||
|
const createUserStatsEmbed = async (guild,user,channelid) => {
|
||||||
|
const stats = await getUserStats(guild,user,channelid)
|
||||||
|
|
||||||
|
if (stats.role == "globaladmin"){
|
||||||
|
var newRole = `🟢 \`${l.stats.switches.globalAdmin}\``
|
||||||
|
}else if (stats.role == "ticketadmin"){
|
||||||
|
var newRole = `🟡 \`${l.stats.switches.ticketAdmin}\``
|
||||||
|
}else if (stats.role == "member"){
|
||||||
|
var newRole = `🔴 \`${l.stats.switches.member}\``
|
||||||
|
}
|
||||||
|
|
||||||
|
const sentences = [
|
||||||
|
`${l.stats.role}: ${newRole}`,
|
||||||
|
`${l.stats.ticketsCreated}: \`${stats.ticketsCreated}\``,
|
||||||
|
`${l.stats.ticketsClosed}: \`${stats.ticketsClosed}\``,
|
||||||
|
`${l.stats.ticketsDeleted}: \`${stats.ticketsDeleted}\``,
|
||||||
|
`${l.stats.ticketsReopened}: \`${stats.ticketsReopened}\``
|
||||||
|
]
|
||||||
|
|
||||||
|
const embed = new EmbedBuilder()
|
||||||
|
.setColor(config.color)
|
||||||
|
.setTitle(`📊 ${l.stats.userTitle}`.replace("{0}",`${stats.userName}!`))
|
||||||
|
.setDescription(sentences.join("\n"))
|
||||||
|
return embed
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
updateGlobalStats,
|
||||||
|
updateTicketStats,
|
||||||
|
updateUserStats,
|
||||||
|
|
||||||
|
removeStats,
|
||||||
|
existStats,
|
||||||
|
getStats,
|
||||||
|
|
||||||
|
startupStatsManager,
|
||||||
|
|
||||||
|
getGlobalStats,
|
||||||
|
getTicketStats,
|
||||||
|
getUserStats,
|
||||||
|
createGlobalStatsEmbed,
|
||||||
|
createTicketStatsEmbed,
|
||||||
|
createUserStatsEmbed
|
||||||
|
}
|
||||||
@@ -43,6 +43,15 @@ module.exports = () => {
|
|||||||
require("./ticketCloser").closeManager(clientMember,channel,prefix,"close","OTautoclose",true)
|
require("./ticketCloser").closeManager(clientMember,channel,prefix,"close","OTautoclose",true)
|
||||||
storage.delete("autocloseTickets",channel.id)
|
storage.delete("autocloseTickets",channel.id)
|
||||||
|
|
||||||
|
//STATS
|
||||||
|
bot.statsManager.updateGlobalStats("TICKETS_AUTOCLOSED",(current) => {
|
||||||
|
if (typeof current != "undefined") return current+1
|
||||||
|
return 1
|
||||||
|
})
|
||||||
|
bot.statsManager.updateTicketStats("STATUS",channel.id,(current) => {
|
||||||
|
return "autoclosed"
|
||||||
|
})
|
||||||
|
|
||||||
channel.send({embeds:[bot.embeds.commands.autocloseSignalEmbed(client.user,t.value)],components:[bot.buttons.close.closeCommandRow]})
|
channel.send({embeds:[bot.embeds.commands.autocloseSignalEmbed(client.user,t.value)],components:[bot.buttons.close.closeCommandRow]})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -51,9 +51,14 @@ exports.closeManager = async (member,channel,prefix,mode,reason,nomessage) => {
|
|||||||
|
|
||||||
if (mode == "delete" || mode == "deletenotranscript"){
|
if (mode == "delete" || mode == "deletenotranscript"){
|
||||||
//delete
|
//delete
|
||||||
|
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)
|
||||||
|
|
||||||
//check perms
|
//check perms
|
||||||
if (!guild) return
|
if (!guild) return
|
||||||
if (!permsChecker.command(user.id,guild.id)){
|
if (!permsChecker.ticket(user.id,guild.id,ticketId)){
|
||||||
permsChecker.sendUserNoPerms(user)
|
permsChecker.sendUserNoPerms(user)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -63,7 +68,7 @@ exports.closeManager = 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("amountOfUserTickets",getuserID,Number(storage.get("amountOfUserTickets",getuserID)) - 1)
|
if (!isDatabaseError) storage.set("amountOfUserTickets",getuserID,Number(storage.get("amountOfUserTickets",getuserID)) - 1)
|
||||||
@@ -72,24 +77,35 @@ exports.closeManager = async (member,channel,prefix,mode,reason,nomessage) => {
|
|||||||
storage.delete("autocloseTickets",channel.id)
|
storage.delete("autocloseTickets",channel.id)
|
||||||
if (Number(storage.get("amountOfUserTickets",getuserID)) < 0) storage.set("amountOfUserTickets",getuserID,0)
|
if (Number(storage.get("amountOfUserTickets",getuserID)) < 0) storage.set("amountOfUserTickets",getuserID,0)
|
||||||
|
|
||||||
//getID & send DM & send api event
|
|
||||||
|
|
||||||
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)
|
|
||||||
|
|
||||||
require("../api/modules/events").onTicketDelete(user,channel,guild,new Date(),{name:channel.name,status:"deleted",ticketOptions:ticketData})
|
require("../api/modules/events").onTicketDelete(user,channel,guild,new Date(),{name:channel.name,status:"deleted",ticketOptions:ticketData})
|
||||||
|
|
||||||
|
//STATS
|
||||||
|
bot.statsManager.updateGlobalStats("TICKETS_DELETED",(current) => {
|
||||||
|
if (typeof current != "undefined") return current+1
|
||||||
|
return 1
|
||||||
|
})
|
||||||
|
bot.statsManager.updateUserStats("TICKETS_DELETED",user.id,(current) => {
|
||||||
|
if (typeof current != "undefined") return current+1
|
||||||
|
return 1
|
||||||
|
})
|
||||||
|
bot.statsManager.removeStats("ticket","CREATED_BY",channel.id)
|
||||||
|
bot.statsManager.removeStats("ticket","CREATED_AT",channel.id)
|
||||||
|
bot.statsManager.removeStats("ticket","STATUS",channel.id)
|
||||||
|
|
||||||
hiddendata.push({key:"pendingdelete",value:"true"})
|
hiddendata.push({key:"pendingdelete",value:"true"})
|
||||||
bot.hiddenData.writeHiddenData(channel.id,hiddendata)
|
bot.hiddenData.writeHiddenData(channel.id,hiddendata)
|
||||||
|
|
||||||
}else if (mode == "close"){
|
}else if (mode == "close"){
|
||||||
//close
|
//close
|
||||||
|
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)
|
||||||
|
|
||||||
//check perms
|
//check perms
|
||||||
if (config.system.closeMode == "adminonly"){
|
if (config.system.closeMode == "adminonly"){
|
||||||
if (!guild) return
|
if (!guild) return
|
||||||
if (!permsChecker.command(user.id,guild.id)){
|
if (!permsChecker.ticket(user.id,guild.id,ticketId)){
|
||||||
permsChecker.sendUserNoPerms(user)
|
permsChecker.sendUserNoPerms(user)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -129,16 +145,6 @@ exports.closeManager = async (member,channel,prefix,mode,reason,nomessage) => {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
//ticketinfo error
|
|
||||||
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
|
|
||||||
|
|
||||||
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)
|
|
||||||
|
|
||||||
if (!ticketData) return
|
if (!ticketData) return
|
||||||
if (ticketData.closedCategory.enable){
|
if (ticketData.closedCategory.enable){
|
||||||
/**@type {discord.CategoryChannel} */
|
/**@type {discord.CategoryChannel} */
|
||||||
@@ -179,18 +185,31 @@ exports.closeManager = async (member,channel,prefix,mode,reason,nomessage) => {
|
|||||||
channel.send({embeds:[embed],components:[bot.buttons.close.closeCommandRow]})
|
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}])
|
||||||
|
|
||||||
|
|
||||||
//send api event
|
//send api event
|
||||||
require("../api/modules/events").onTicketClose(user,channel,guild,new Date(),{name:channel.name,status:"closed",ticketOptions:ticketData},newReason)
|
require("../api/modules/events").onTicketClose(user,channel,guild,new Date(),{name:channel.name,status:"closed",ticketOptions:ticketData},newReason)
|
||||||
|
|
||||||
|
//STATS
|
||||||
|
bot.statsManager.updateGlobalStats("TICKETS_CLOSED",(current) => {
|
||||||
|
if (typeof current != "undefined") return current+1
|
||||||
|
return 1
|
||||||
|
})
|
||||||
|
bot.statsManager.updateUserStats("TICKETS_CLOSED",user.id,(current) => {
|
||||||
|
if (typeof current != "undefined") return current+1
|
||||||
|
return 1
|
||||||
|
})
|
||||||
|
bot.statsManager.updateTicketStats("STATUS",channel.id,(current) => {
|
||||||
|
return "closed"
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @param {discord.TextChannel} channel
|
* @param {discord.TextChannel} channel
|
||||||
* @param {Number} limit
|
* @param {Number} limit
|
||||||
* @returns
|
* @returns {Promise<discord.Message[]>}
|
||||||
*/
|
*/
|
||||||
const getmessages = async (channel,limit) => {
|
const getmessages = async (channel,limit) => {
|
||||||
const final = []
|
const final = []
|
||||||
|
|||||||
@@ -54,17 +54,20 @@ module.exports = () => {
|
|||||||
await interaction.deferReply({ephemeral:config.system.answerInEphemeralOnOpen})
|
await interaction.deferReply({ephemeral:config.system.answerInEphemeralOnOpen})
|
||||||
} catch{}
|
} catch{}
|
||||||
}else if (interaction.isChatInputCommand()){
|
}else if (interaction.isChatInputCommand()){
|
||||||
|
try {
|
||||||
await interaction.deferReply({ephemeral:config.system.answerInEphemeralOnOpen})
|
await interaction.deferReply({ephemeral:config.system.answerInEphemeralOnOpen})
|
||||||
|
} catch{}
|
||||||
}else if (interaction.isStringSelectMenu()){
|
}else if (interaction.isStringSelectMenu()){
|
||||||
try {
|
try {
|
||||||
await interaction.deferUpdate()
|
await interaction.deferUpdate()
|
||||||
} catch{}
|
} catch{}
|
||||||
}
|
}
|
||||||
|
|
||||||
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){
|
const currentUserTicketAmount = storage.get("amountOfUserTickets",interaction.member.id)
|
||||||
|
if (config.system.maxAmountOfTickets == 0 || !currentUserTicketAmount || currentUserTicketAmount == "false" || Number(currentUserTicketAmount) < config.system.maxAmountOfTickets){
|
||||||
|
|
||||||
//update storage
|
//update storage
|
||||||
storage.set("amountOfUserTickets",interaction.member.id,Number(storage.get("amountOfUserTickets",interaction.member.id))+1)
|
storage.set("amountOfUserTickets",interaction.member.id,Number(currentUserTicketAmount)+1)
|
||||||
var ticketNumber = interaction.member.user.username
|
var ticketNumber = interaction.member.user.username
|
||||||
|
|
||||||
//set ticketName
|
//set ticketName
|
||||||
@@ -94,7 +97,7 @@ module.exports = () => {
|
|||||||
permissionsArray.push({
|
permissionsArray.push({
|
||||||
id:interaction.member.user,
|
id:interaction.member.user,
|
||||||
type:"member",
|
type:"member",
|
||||||
allow:[pfb.AddReactions,pfb.AttachFiles,pfb.EmbedLinks,pfb.SendMessages,pfb.ViewChannel]
|
allow:[pfb.AddReactions,pfb.AttachFiles,pfb.EmbedLinks,pfb.SendMessages,pfb.ViewChannel,pfb.ReadMessageHistory]
|
||||||
})
|
})
|
||||||
|
|
||||||
//add main adminroles
|
//add main adminroles
|
||||||
@@ -106,7 +109,7 @@ module.exports = () => {
|
|||||||
permissionsArray.push({
|
permissionsArray.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,pfb.ReadMessageHistory]
|
||||||
})
|
})
|
||||||
}catch{}
|
}catch{}
|
||||||
})
|
})
|
||||||
@@ -125,7 +128,7 @@ module.exports = () => {
|
|||||||
permissionsArray.push({
|
permissionsArray.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,pfb.ReadMessageHistory]
|
||||||
})
|
})
|
||||||
}catch{}
|
}catch{}
|
||||||
}
|
}
|
||||||
@@ -142,7 +145,7 @@ module.exports = () => {
|
|||||||
permissionsArray.push({
|
permissionsArray.push({
|
||||||
id:adminrole,
|
id:adminrole,
|
||||||
type:"role",
|
type:"role",
|
||||||
allow:[pfb.AddReactions,pfb.ViewChannel],
|
allow:[pfb.AddReactions,pfb.ViewChannel,pfb.ReadMessageHistory],
|
||||||
deny:[pfb.SendMessages,pfb.AttachFiles,pfb.EmbedLinks]
|
deny:[pfb.SendMessages,pfb.AttachFiles,pfb.EmbedLinks]
|
||||||
})
|
})
|
||||||
}catch{}
|
}catch{}
|
||||||
@@ -209,9 +212,28 @@ 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})
|
||||||
|
|
||||||
|
//STATS:
|
||||||
|
bot.statsManager.updateGlobalStats("TICKETS_CREATED",(current) => {
|
||||||
|
if (typeof current != "undefined") return current+1
|
||||||
|
return 1
|
||||||
|
})
|
||||||
|
bot.statsManager.updateUserStats("TICKETS_CREATED",interaction.user.id,(current) => {
|
||||||
|
if (typeof current != "undefined") return current+1
|
||||||
|
return 1
|
||||||
|
})
|
||||||
|
bot.statsManager.updateTicketStats("CREATED_BY",ticketChannel.id,(current) => {
|
||||||
|
return interaction.user.id
|
||||||
|
})
|
||||||
|
bot.statsManager.updateTicketStats("CREATED_AT",ticketChannel.id,(current) => {
|
||||||
|
return new Date().getTime()
|
||||||
|
})
|
||||||
|
bot.statsManager.updateTicketStats("STATUS",ticketChannel.id,(current) => {
|
||||||
|
return "open"
|
||||||
|
})
|
||||||
|
|
||||||
const channelbutton = new discord.ActionRowBuilder()
|
const channelbutton = new discord.ActionRowBuilder()
|
||||||
.addComponents([
|
.addComponents([
|
||||||
new discord.ButtonBuilder()
|
new discord.ButtonBuilder()
|
||||||
@@ -227,10 +249,16 @@ module.exports = () => {
|
|||||||
}
|
}
|
||||||
catch{log("system","failed to send DM")}
|
catch{log("system","failed to send DM")}
|
||||||
|
|
||||||
if ((interaction.isButton() && config.system.answerInEphemeralOnOpen) || interaction.isChatInputCommand()) interaction.editReply({embeds:[bot.errorLog.success(l.messages.createdTitle,l.messages.createdDescription)],components:[channelbutton]})
|
if (((interaction.isButton() || interaction.isStringSelectMenu()) && 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{
|
||||||
|
interaction.editReply({embeds:[bot.errorLog.warning(l.errors.maxAmountTitle,l.errors.maxAmountDescription)]})
|
||||||
try {
|
try {
|
||||||
if (config.system.dmMessages){
|
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)]})
|
||||||
|
|||||||
@@ -6,16 +6,27 @@ const log = bot.errorLog.log
|
|||||||
const l = bot.language
|
const l = bot.language
|
||||||
const storage = bot.storage
|
const storage = bot.storage
|
||||||
const pfb = discord.PermissionFlagsBits
|
const pfb = discord.PermissionFlagsBits
|
||||||
|
const permsChecker = require("../utils/permisssionChecker")
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @param {discord.Guild} guild
|
* @param {discord.Guild} guild
|
||||||
* @param {discord.TextBasedChannel} channel
|
* @param {discord.TextBasedChannel} channel
|
||||||
* @param {discord.User} user
|
* @param {discord.User} user
|
||||||
|
* @param {String} ticketId option id
|
||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
const reopenTicket = (guild,channel,user) => {
|
const reopenTicket = (guild,channel,user,ticketId) => {
|
||||||
log("system","re-opened a ticket",[{key:"ticket",value:channel.name},{key:"user",value:user.tag}])
|
//check perms
|
||||||
|
if (config.system.closeMode == "adminonly"){
|
||||||
|
if (!guild) return
|
||||||
|
if (!permsChecker.ticket(user.id,guild.id,ticketId)){
|
||||||
|
permsChecker.sendUserNoPerms(user)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
log("system","re-opened a ticket",[{key:"ticket",value:channel.name},{key:"user",value:user.username}])
|
||||||
|
|
||||||
var permissionsArray = []
|
var permissionsArray = []
|
||||||
|
|
||||||
@@ -46,9 +57,21 @@ const reopenTicket = (guild,channel,user) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
channel.permissionOverwrites.set(permissionsArray)
|
channel.permissionOverwrites.set(permissionsArray)
|
||||||
|
|
||||||
require("../api/modules/events").onTicketReopen(user,channel,guild,new Date(),{name:channel.name,status:"reopened",ticketOptions:false})
|
require("../api/modules/events").onTicketReopen(user,channel,guild,new Date(),{name:channel.name,status:"reopened",ticketOptions:false})
|
||||||
|
|
||||||
|
//STATS
|
||||||
|
bot.statsManager.updateGlobalStats("TICKETS_REOPENED",(current) => {
|
||||||
|
if (typeof current != "undefined") return current+1
|
||||||
|
return 1
|
||||||
|
})
|
||||||
|
bot.statsManager.updateUserStats("TICKETS_REOPENED",user.id,(current) => {
|
||||||
|
if (typeof current != "undefined") return current+1
|
||||||
|
return 1
|
||||||
|
})
|
||||||
|
bot.statsManager.updateTicketStats("STATUS",channel.id,(current) => {
|
||||||
|
return "reopened"
|
||||||
|
})
|
||||||
}
|
}
|
||||||
exports.reopenTicket = reopenTicket
|
exports.reopenTicket = reopenTicket
|
||||||
@@ -71,7 +71,7 @@ exports.compile = (guild,channel,user,messagesInv,data) => {
|
|||||||
const memberColor = msg.member ? msg.member.displayHexColor : "#ffffff"
|
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:memberColor,
|
color:memberColor,
|
||||||
pfp:msg.author.displayAvatarURL()
|
pfp:msg.author.displayAvatarURL()
|
||||||
@@ -106,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,
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ const version = require("../info.json").version
|
|||||||
|
|
||||||
const mentions = require("./mentions").replacementions
|
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 {{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}, favicon:{enableCustomFavicon:Boolean, imageUrl:String}} OTTranscriptStyle} */
|
||||||
/**@typedef {{name:String, id:String, pfp:String}} OTTranscriptBot */
|
/**@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 {{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 {{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 */
|
||||||
@@ -215,7 +215,7 @@ exports.compile = (guild,channel,user,messagesInv,data) => {
|
|||||||
interactionName:msg.interaction.commandName
|
interactionName:msg.interaction.commandName
|
||||||
},
|
},
|
||||||
user:{
|
user:{
|
||||||
name:msg.interaction.user.username,
|
name:msg.interaction.user.displayName,
|
||||||
id:msg.interaction.user.id,
|
id:msg.interaction.user.id,
|
||||||
color:replycolor,
|
color:replycolor,
|
||||||
pfp:msg.interaction.user.displayAvatarURL(),
|
pfp:msg.interaction.user.displayAvatarURL(),
|
||||||
@@ -227,15 +227,15 @@ exports.compile = (guild,channel,user,messagesInv,data) => {
|
|||||||
}else if (replytype == "reply"){
|
}else if (replytype == "reply"){
|
||||||
|
|
||||||
var replycontentRAW = messages.find((msg2) => msg2.id == msg.reference.messageId)
|
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"
|
var replycontent = (replycontentRAW && replycontentRAW.content) ? replycontentRAW.content.slice(0,(60-replycontentRAW.author.displayName.length)) : "deleted this message"
|
||||||
const replycolorRAW = (replycontentRAW) ? msg.guild.members.cache.find((m) => m.id == replycontentRAW.author.id) : false
|
const replycolorRAW = (replycontentRAW) ? msg.guild.members.cache.find((m) => m.id == replycontentRAW.author.id) : false
|
||||||
const replycolor = (replycolorRAW) ? replycolorRAW.displayHexColor.replace("#000000","#ffffff") : "#ffffff"
|
const replycolor = (replycolorRAW) ? replycolorRAW.displayHexColor.replace("#000000","#ffffff") : "#ffffff"
|
||||||
|
|
||||||
var user = (replycontentRAW && replycontentRAW.content) ? {
|
var user = (replycontentRAW && replycontentRAW.content) ? {
|
||||||
name:(replycontentRAW) ? replycontentRAW.author.username : "undefined",
|
name:(replycontentRAW) ? replycontentRAW.author.displayName : "undefined",
|
||||||
id:(replycontentRAW) ? replycontentRAW.author.id : "undefined",
|
id:(replycontentRAW) ? replycontentRAW.author.id : "undefined",
|
||||||
color:replycolor,
|
color:replycolor,
|
||||||
pfp:(replycontentRAW) ? replycontentRAW.author.username : "",
|
pfp:(replycontentRAW) ? replycontentRAW.author.displayName : "",
|
||||||
bot:(replycontentRAW) ? replycontentRAW.author.bot : false,
|
bot:(replycontentRAW) ? replycontentRAW.author.bot : false,
|
||||||
system:(replycontentRAW) ? replycontentRAW.author.system : false,
|
system:(replycontentRAW) ? replycontentRAW.author.system : false,
|
||||||
verifiedBot:(replycontentRAW) ? replycontentRAW.author.flags.has(discord.UserFlags.VerifiedBot) : false,
|
verifiedBot:(replycontentRAW) ? replycontentRAW.author.flags.has(discord.UserFlags.VerifiedBot) : false,
|
||||||
@@ -264,7 +264,7 @@ exports.compile = (guild,channel,user,messagesInv,data) => {
|
|||||||
const authorColor = msg.member ? msg.member.displayHexColor.replace("#000000","#ffffff") : "#ffffff"
|
const authorColor = msg.member ? msg.member.displayHexColor.replace("#000000","#ffffff") : "#ffffff"
|
||||||
messagesArray.push({
|
messagesArray.push({
|
||||||
author:{
|
author:{
|
||||||
name:msg.author.tag,
|
name:msg.author.displayName,
|
||||||
id:msg.author.id,
|
id:msg.author.id,
|
||||||
color:authorColor,
|
color:authorColor,
|
||||||
pfp:msg.author.displayAvatarURL(),
|
pfp:msg.author.displayAvatarURL(),
|
||||||
@@ -288,6 +288,7 @@ exports.compile = (guild,channel,user,messagesInv,data) => {
|
|||||||
const dsb = data.style.background
|
const dsb = data.style.background
|
||||||
const dsh = data.style.header
|
const dsh = data.style.header
|
||||||
const dss = data.style.stats
|
const dss = data.style.stats
|
||||||
|
const dsf = data.style.favicon
|
||||||
|
|
||||||
/**@type {OTTranscriptCompileInput} */
|
/**@type {OTTranscriptCompileInput} */
|
||||||
const result = {
|
const result = {
|
||||||
@@ -317,7 +318,7 @@ exports.compile = (guild,channel,user,messagesInv,data) => {
|
|||||||
bot:{
|
bot:{
|
||||||
name:data.bot.name || "Open Ticket",
|
name:data.bot.name || "Open Ticket",
|
||||||
id:data.bot.id || 0,
|
id:data.bot.id || 0,
|
||||||
pfp:data.bot.pfp || "dj-dj.be/wp-content/uploads/2022/07/profielfoto-blauw-wit.png?size=128"
|
pfp:data.bot.pfp || "transcripts.dj-dj.be/favicon.png"
|
||||||
},
|
},
|
||||||
ticket:{
|
ticket:{
|
||||||
name:channel.name,
|
name:channel.name,
|
||||||
@@ -331,7 +332,7 @@ exports.compile = (guild,channel,user,messagesInv,data) => {
|
|||||||
creatorid:data.ticket.creatorid,
|
creatorid:data.ticket.creatorid,
|
||||||
creatorpfp:data.ticket.creatorpfp,
|
creatorpfp:data.ticket.creatorpfp,
|
||||||
|
|
||||||
closedbyname:user.tag,
|
closedbyname:user.displayName,
|
||||||
closedbyid:user.id,
|
closedbyid:user.id,
|
||||||
closedbypfp:user.displayAvatarURL(),
|
closedbypfp:user.displayAvatarURL(),
|
||||||
|
|
||||||
@@ -382,8 +383,8 @@ exports.compile = (guild,channel,user,messagesInv,data) => {
|
|||||||
name:"test-server"
|
name:"test-server"
|
||||||
},
|
},
|
||||||
customFavicon:{
|
customFavicon:{
|
||||||
enabled:false,
|
enabled:dsf.enableCustomFavicon,
|
||||||
image:"https://openticket.dj-dj.be"
|
image:(dsf.imageUrl) ? dsf.imageUrl : "https://openticket.dj-dj.be"
|
||||||
},
|
},
|
||||||
additionalFlags:[]
|
additionalFlags:[]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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.post("https://transcripts.dj-dj.be/api/upload?auth=openticketTRANSCRIPT1234&version=2",JSON.stringify(json))
|
const res = await axios.post("https://apis.dj-dj.be/transcripts/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(err){
|
}catch(err){
|
||||||
console.log("failed transcript upload!",err.response)
|
console.log("Failed HTML transcript upload! Reached Ratelimit 429!")
|
||||||
resolve(false)
|
resolve(false)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ 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.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)
|
||||||
@@ -34,18 +34,20 @@ exports.beingprocessed = (name,id,rawprocesstime,user) => {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @param {String} name
|
* @param {String} name channel name
|
||||||
* @param {String} id
|
* @param {String} url transcript url
|
||||||
* @param {String} url
|
* @param {discord.User} user transcript closer
|
||||||
* @param {discord.User} user
|
* @param {discord.User} creator transcript creator
|
||||||
*/
|
*/
|
||||||
exports.tsready = (name,id,url,user) => {
|
exports.tsready = (name,url,user,creator) => {
|
||||||
const embed = new discord.EmbedBuilder()
|
const embed = new discord.EmbedBuilder()
|
||||||
.setTitle("🧾 "+l.transcripts.title)
|
.setTitle("🧾 "+l.transcripts.title)
|
||||||
.setColor(config.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 (creator) embed.setFields([{name:"Ticket Creator", value:"<@"+creator.id+">"}])
|
||||||
|
|
||||||
if (url){
|
if (url){
|
||||||
embed.setURL(url)
|
embed.setURL(url)
|
||||||
embed.setDescription("\n["+l.transcripts.available+"]("+url+")\n")
|
embed.setDescription("\n["+l.transcripts.available+"]("+url+")\n")
|
||||||
@@ -67,12 +69,12 @@ 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 : ""
|
||||||
|
|
||||||
embed.setDescription("Something went wrong while creating the HTML transcript.\n\n[possible reasons](https://docs.openticket.dj-dj.be/the-system/transcripts/transcript-errors)"+errDesc)
|
embed.setDescription("Something went wrong while creating the HTML transcript.\n\n[possible reasons](https://otdocs.dj-dj.be/docs/current/docs/system/transcripts)"+errDesc)
|
||||||
|
|
||||||
return embed
|
return embed
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,6 +35,10 @@ const checkAvailability = async () => {
|
|||||||
*/
|
*/
|
||||||
module.exports = async (messages,guild,channel,user,reason) => {
|
module.exports = async (messages,guild,channel,user,reason) => {
|
||||||
require("../api/modules/events").onTranscriptCreation(messages,channel,guild,new Date())
|
require("../api/modules/events").onTranscriptCreation(messages,channel,guild,new Date())
|
||||||
|
bot.statsManager.updateGlobalStats("TRANSCRIPTS_CREATED",(current) => {
|
||||||
|
if (typeof current != "undefined") return current+1
|
||||||
|
return 1
|
||||||
|
})
|
||||||
const msglist = await channel.messages.fetchPinned()
|
const msglist = await channel.messages.fetchPinned()
|
||||||
|
|
||||||
const chName = channel.name
|
const chName = channel.name
|
||||||
@@ -55,6 +59,7 @@ module.exports = async (messages,guild,channel,user,reason) => {
|
|||||||
const tsb = tsconfig.style.background
|
const tsb = tsconfig.style.background
|
||||||
const tsh = tsconfig.style.header
|
const tsh = tsconfig.style.header
|
||||||
const tss = tsconfig.style.stats
|
const tss = tsconfig.style.stats
|
||||||
|
const tsf = tsconfig.style.favicon
|
||||||
const JSONDATA = require("./communication/compileJsonV2").compile(guild,channel,user,messages,{
|
const JSONDATA = require("./communication/compileJsonV2").compile(guild,channel,user,messages,{
|
||||||
style:{
|
style:{
|
||||||
background:{
|
background:{
|
||||||
@@ -75,17 +80,21 @@ module.exports = async (messages,guild,channel,user,reason) => {
|
|||||||
valueTextColor:tss.valueTextColor,
|
valueTextColor:tss.valueTextColor,
|
||||||
hideBackgroundColor:tss.hideBackgroundColor,
|
hideBackgroundColor:tss.hideBackgroundColor,
|
||||||
hideTextColor:tss.hideTextColor
|
hideTextColor:tss.hideTextColor
|
||||||
|
},
|
||||||
|
favicon:{
|
||||||
|
enableCustomFavicon:tsf.enableCustomFavicon,
|
||||||
|
imageUrl:tsf.imageUrl
|
||||||
}
|
}
|
||||||
|
|
||||||
},
|
},
|
||||||
bot:{
|
bot:{
|
||||||
name:client.user.username,
|
name:client.user.displayName,
|
||||||
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.displayName,
|
||||||
creatorpfp:ticketopener.displayAvatarURL(),
|
creatorpfp:ticketopener.displayAvatarURL(),
|
||||||
|
|
||||||
openedtime:opentime.getTime(),
|
openedtime:opentime.getTime(),
|
||||||
@@ -104,11 +113,35 @@ module.exports = async (messages,guild,channel,user,reason) => {
|
|||||||
if (!tc) return
|
if (!tc) return
|
||||||
tc.send({embeds:[errembed],files:[attachment]})
|
tc.send({embeds:[errembed],files:[attachment]})
|
||||||
}
|
}
|
||||||
|
if (tsconfig.sendTranscripts.enableDM && user){
|
||||||
|
const embed = tsembeds.tsready(chName,null,user,ticketopener)
|
||||||
|
try {
|
||||||
|
ticketopener.send({embeds:[embed],files:[attachment]})
|
||||||
|
}catch{}
|
||||||
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
const TSdata = await require("./communication/index").upload(JSONDATA)
|
const TSdata = await require("./communication/index").upload(JSONDATA)
|
||||||
if (!TSdata) return false
|
if (!TSdata){
|
||||||
|
const attachment = await require("./oldTranscript").createTranscript(messages,channel)
|
||||||
|
const errembed = tsembeds.tserror(chName,chId,user,"`HTML Transcript API: reached ratelimit`")
|
||||||
|
|
||||||
|
if (tsconfig.sendTranscripts.enableChannel){
|
||||||
|
/**@type {discord.TextChannel|undefined} */
|
||||||
|
const tc = guild.channels.cache.find((c) => c.id == tsconfig.sendTranscripts.channel)
|
||||||
|
|
||||||
|
if (!tc) return
|
||||||
|
tc.send({embeds:[errembed],files:[attachment]})
|
||||||
|
}
|
||||||
|
if (tsconfig.sendTranscripts.enableDM && user){
|
||||||
|
const embed = tsembeds.tsready(chName,null,user,ticketopener)
|
||||||
|
try {
|
||||||
|
ticketopener.send({embeds:[embed],files:[attachment]})
|
||||||
|
}catch{}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
if (TSdata.status == "success"){
|
if (TSdata.status == "success"){
|
||||||
//MAKE THIS COMPATIBLE WITH PREMIUM "customTranscriptUrl" IN FUTURE VERSIONS!!
|
//MAKE THIS COMPATIBLE WITH PREMIUM "customTranscriptUrl" IN FUTURE VERSIONS!!
|
||||||
@@ -136,12 +169,12 @@ module.exports = async (messages,guild,channel,user,reason) => {
|
|||||||
//ready
|
//ready
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
if (msg){
|
if (msg){
|
||||||
msg.edit({embeds:[tsembeds.tsready(chName,chId,url,user)]})
|
msg.edit({embeds:[tsembeds.tsready(chName,url,user,ticketopener)]})
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tsconfig.sendTranscripts.enableDM){
|
if (tsconfig.sendTranscripts.enableDM){
|
||||||
if (!user) return
|
if (!user) return
|
||||||
const embed = tsembeds.tsready(chName,chId,url,user)
|
const embed = tsembeds.tsready(chName,url,user,ticketopener)
|
||||||
try {
|
try {
|
||||||
ticketopener.send({embeds:[embed]})
|
ticketopener.send({embeds:[embed]})
|
||||||
}catch{}
|
}catch{}
|
||||||
@@ -158,10 +191,16 @@ module.exports = async (messages,guild,channel,user,reason) => {
|
|||||||
if (!tc) return
|
if (!tc) return
|
||||||
tc.send({embeds:[errembed],files:[attachment]})
|
tc.send({embeds:[errembed],files:[attachment]})
|
||||||
}
|
}
|
||||||
|
if (tsconfig.sendTranscripts.enableDM && user){
|
||||||
|
const embed = tsembeds.tsready(chName,null,user,ticketopener)
|
||||||
|
try {
|
||||||
|
ticketopener.send({embeds:[embed],files:[attachment]})
|
||||||
|
}catch{}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
const attachment = await require("./oldTranscript").createTranscript(messages,channel)
|
const attachment = await require("./oldTranscript").createTranscript(messages,channel)
|
||||||
const embed = tsembeds.tsready(chName,chId,false,user)
|
const embed = tsembeds.tsready(chName,null,user,ticketopener)
|
||||||
|
|
||||||
if (tsconfig.sendTranscripts.enableChannel){
|
if (tsconfig.sendTranscripts.enableChannel){
|
||||||
/**@type {discord.TextChannel|undefined} */
|
/**@type {discord.TextChannel|undefined} */
|
||||||
@@ -170,6 +209,12 @@ module.exports = async (messages,guild,channel,user,reason) => {
|
|||||||
if (!tc) return
|
if (!tc) return
|
||||||
tc.send({embeds:[embed],files:[attachment]})
|
tc.send({embeds:[embed],files:[attachment]})
|
||||||
}
|
}
|
||||||
|
if (tsconfig.sendTranscripts.enableDM && user){
|
||||||
|
const embed = tsembeds.tsready(chName,null,user,ticketopener)
|
||||||
|
try {
|
||||||
|
ticketopener.send({embeds:[embed],files:[attachment]})
|
||||||
|
}catch{}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
asyncmanager()
|
asyncmanager()
|
||||||
|
|||||||
@@ -47,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")
|
||||||
|
|||||||
@@ -2,10 +2,13 @@ const discord = require("discord.js")
|
|||||||
const bot = require("../../index")
|
const bot = require("../../index")
|
||||||
const config = bot.config
|
const config = bot.config
|
||||||
const l = bot.language
|
const l = bot.language
|
||||||
|
const b = discord.ButtonStyle
|
||||||
|
|
||||||
/**@returns {"DANGER"|"SUCCESS"|"PRIMARY"|"SECONDARY"} */
|
/**
|
||||||
|
* @param {String} color
|
||||||
|
* @returns {"DANGER"|"SUCCESS"|"PRIMARY"|"SECONDARY"} */
|
||||||
const getColor = (color) => {
|
const getColor = (color) => {
|
||||||
const b = discord.ButtonStyle
|
if (color){
|
||||||
if (color.toLowerCase() == "red"){
|
if (color.toLowerCase() == "red"){
|
||||||
return b.Danger
|
return b.Danger
|
||||||
}else if (color.toLowerCase() == "green"){
|
}else if (color.toLowerCase() == "green"){
|
||||||
@@ -14,11 +17,12 @@ const getColor = (color) => {
|
|||||||
return b.Primary
|
return b.Primary
|
||||||
}else if (color.toLowerCase() == "black" || color.toLowerCase() == "gray" || color.toLowerCase() == "grey"){
|
}else if (color.toLowerCase() == "black" || color.toLowerCase() == "gray" || color.toLowerCase() == "grey"){
|
||||||
return b.Secondary
|
return b.Secondary
|
||||||
}else if (color == "DANGER" || color == "SECONDARY" || color == "SUCCESS" || color == "PRIMARY"){
|
}else if (color.toUpperCase() == "DANGER" || color.toUpperCase() == "SECONDARY" || color.toUpperCase() == "SUCCESS" || color.toUpperCase() == "PRIMARY"){
|
||||||
return color
|
return color
|
||||||
}else if (color.toLowerCase() == "none" || color.toLowerCase() == "false" || color.toLowerCase() == ""){
|
}else if (color.toLowerCase() == "none" || color.toLowerCase() == "false" || color.toLowerCase() == ""){
|
||||||
return b.Secondary
|
return b.Secondary
|
||||||
}else return b.Secondary
|
}else return b.Secondary
|
||||||
|
}else return b.Secondary
|
||||||
}
|
}
|
||||||
|
|
||||||
const getOption = (id) => {
|
const getOption = (id) => {
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ 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)
|
if (option.description && option.description.length < 100) selectComponent.setDescription(option.description)
|
||||||
}
|
}
|
||||||
|
|
||||||
dropdown.addOptions(selectComponent)
|
dropdown.addOptions(selectComponent)
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ const storage = require("../../index").storage
|
|||||||
|
|
||||||
exports.readHiddenData = (channelid) => {
|
exports.readHiddenData = (channelid) => {
|
||||||
const content = storage.get("HIDDENDATA",channelid)
|
const content = storage.get("HIDDENDATA",channelid)
|
||||||
if (!content) return {type:"",data:[],status:false}
|
if (!content) return []
|
||||||
|
|
||||||
try {
|
try {
|
||||||
return JSON.parse(content)
|
return JSON.parse(content)
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ const getLivestatus = (local) => {
|
|||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
try {
|
try {
|
||||||
axios.get("https://livestatus.dj-dj.be/openticket.json").then((res) => {
|
axios.get("https://apis.dj-dj.be/livestatus/announcements/openticket.json").then((res) => {
|
||||||
const livestatus = res.data
|
const livestatus = res.data
|
||||||
if (!Array.isArray(livestatus)) return resolve(false)
|
if (!Array.isArray(livestatus)) return resolve(false)
|
||||||
if (!livestatus) return resolve(false)
|
if (!livestatus) return resolve(false)
|
||||||
@@ -135,77 +135,3 @@ exports.run = async (pluginData) => {
|
|||||||
|
|
||||||
console.log(final.join("\n\n"))
|
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.tag,
|
|
||||||
pfp:client.user.displayAvatarURL()
|
|
||||||
},
|
|
||||||
error:err,
|
|
||||||
openticket:{
|
|
||||||
config:{
|
|
||||||
messages:config.messages,
|
|
||||||
options:config.options,
|
|
||||||
transcripts:bot.tsconfig,
|
|
||||||
system:config.system
|
|
||||||
},
|
|
||||||
language:config.languageFile,
|
|
||||||
version:"3.4.0",
|
|
||||||
slashcmds:slashMode,
|
|
||||||
transcripts:transcriptMode,
|
|
||||||
plugins:fs.readdirSync("./plugins"),
|
|
||||||
pluginload:globalPluginData
|
|
||||||
},
|
|
||||||
details:{
|
|
||||||
errortime:new Date().getTime(),
|
|
||||||
actions:this.actionRecorder,
|
|
||||||
database:fs.readFileSync("./storage/database.json").toString()
|
|
||||||
}
|
|
||||||
})
|
|
||||||
if (!result){
|
|
||||||
waitTime = new Date().getTime()+30000
|
|
||||||
waitTimeEnabled = true
|
|
||||||
}
|
|
||||||
resolve(result)
|
|
||||||
}catch{resolve(false)}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
@@ -12,12 +12,12 @@ const storage = bot.storage
|
|||||||
* @param {String} guildid
|
* @param {String} guildid
|
||||||
* @returns {Boolean} has permissions?
|
* @returns {Boolean} has permissions?
|
||||||
*/
|
*/
|
||||||
exports.command = (memberid,guildid) => {
|
exports.global = (memberid,guildid) => {
|
||||||
bot.actionRecorder.push({
|
bot.actionRecorder.push({
|
||||||
category:"ot.managers.permissionChecker",
|
category:"ot.managers.permissionChecker",
|
||||||
file:"./core/permissionChecker.js",
|
file:"./core/permissionChecker.js",
|
||||||
time:new Date().getTime(),
|
time:new Date().getTime(),
|
||||||
type:"command"
|
type:"global"
|
||||||
})
|
})
|
||||||
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.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")){
|
||||||
@@ -25,6 +25,33 @@ exports.command = (memberid,guildid) => {
|
|||||||
}else {return true}
|
}else {return true}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param {String} memberid
|
||||||
|
* @param {String} guildid
|
||||||
|
* @param {String} optionid
|
||||||
|
* @returns {Boolean} has permissions?
|
||||||
|
*/
|
||||||
|
exports.ticket = (memberid,guildid,optionid) => {
|
||||||
|
bot.actionRecorder.push({
|
||||||
|
category:"ot.managers.permissionChecker",
|
||||||
|
file:"./core/permissionChecker.js",
|
||||||
|
time:new Date().getTime(),
|
||||||
|
type:"ticket"
|
||||||
|
})
|
||||||
|
|
||||||
|
const option = config.options.find((opt) => opt.id == optionid)
|
||||||
|
const ticketadmins = option && option.adminroles ? option.adminroles : []
|
||||||
|
const permsmember = client.guilds.cache.find(g => g.id == guildid).members.cache.find(m => m.id == memberid)
|
||||||
|
|
||||||
|
const isGlobalAdmin = config.adminRoles.some((item)=>{return permsmember.roles.cache.has(item)})
|
||||||
|
const isTicketAdmin = ticketadmins.some((item)=>{return permsmember.roles.cache.has(item)})
|
||||||
|
const hasAdministrator = permsmember.permissions.has("Administrator")
|
||||||
|
const hasManageGuild = permsmember.permissions.has("ManageGuild")
|
||||||
|
|
||||||
|
return isGlobalAdmin || isTicketAdmin || hasAdministrator || hasManageGuild
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @param {discord.User} user
|
* @param {discord.User} user
|
||||||
|
|||||||
@@ -17,22 +17,19 @@
|
|||||||
|
|
||||||
SUGGESTING NEW FEATURES:
|
SUGGESTING NEW FEATURES:
|
||||||
=====================
|
=====================
|
||||||
Open Ticket is a community project. This means that
|
Open Ticket is an open-source community project!
|
||||||
almost all feature ideas come from our community.
|
Because of this, almost 80% of all features in OT were ideas from our community!
|
||||||
Are you missing something you want in open ticket?
|
Feel free to add new ideas in our discord server
|
||||||
Then join our Discord server and we will add it (if possible)
|
or via github issues! Translations are always welcome!
|
||||||
|
|
||||||
Did you know that 80% of all features in OT were ideas from our community?
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
INFORMATION:
|
INFORMATION:
|
||||||
============
|
============
|
||||||
Open Ticket v3.4.0 - © DJdj Development
|
Open Ticket v3.5.5 - © DJdj Development
|
||||||
|
|
||||||
discord: https://discord.dj-dj.be
|
discord: https://discord.dj-dj.be
|
||||||
website: https://www.dj-dj.be
|
website: https://www.dj-dj.be
|
||||||
github: https://openticket.dj-dj.be
|
github: https://otgithub.dj-dj.be
|
||||||
support e-mail: support@dj-dj.be
|
support e-mail: support@dj-dj.be
|
||||||
|
|
||||||
Config files:
|
Config files:
|
||||||
@@ -41,7 +38,7 @@
|
|||||||
|
|
||||||
Send ./openticketdebug.txt when there are errors!
|
Send ./openticketdebug.txt when there are errors!
|
||||||
*/
|
*/
|
||||||
|
/** discord :)*/
|
||||||
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
|
||||||
@@ -57,9 +54,10 @@ const client = new discord.Client({
|
|||||||
partials:[Partials.Channel,Partials.Message]
|
partials:[Partials.Channel,Partials.Message]
|
||||||
})
|
})
|
||||||
exports.client = client
|
exports.client = client
|
||||||
client.setMaxListeners(50)
|
client.setMaxListeners(120)
|
||||||
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")
|
||||||
|
|
||||||
|
//LOAD CONFIG
|
||||||
var tempconfig = require("./config.json")
|
var tempconfig = require("./config.json")
|
||||||
/**@type {Boolean} */
|
/**@type {Boolean} */
|
||||||
var isDevConfig = false
|
var isDevConfig = false
|
||||||
@@ -75,31 +73,34 @@ if (process.argv.some((v) => v == "--devconfig")){
|
|||||||
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 config = tempconfig
|
const config = tempconfig
|
||||||
exports.config = config
|
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
|
||||||
|
|
||||||
|
//LOAD LANGUAGE
|
||||||
const language = require("./core/languageManager").language
|
const language = require("./core/languageManager").language
|
||||||
exports.language = language
|
exports.language = language
|
||||||
|
|
||||||
|
//LOAD FLAGS
|
||||||
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 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').main
|
||||||
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.statsStorage = require('./core/dynamicdatabase/storage').stats
|
||||||
|
if (process.argv.some((v) => v == "--debug")) console.log("[TEMP_DEBUG]","loaded stats storage")
|
||||||
|
|
||||||
exports.errorLog = require("./core/errorLogSystem")
|
exports.errorLog = require("./core/errorLogSystem")
|
||||||
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")
|
||||||
|
|
||||||
|
//LOAD SYSTEM LIBRARYS
|
||||||
exports.actionRecorder = require("./core/utils/liveStatus").actionRecorder
|
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")
|
||||||
|
|
||||||
exports.embeds = {
|
exports.embeds = {
|
||||||
commands:require("./core/interactionHandlers/embeds/commands")
|
commands:require("./core/interactionHandlers/embeds/commands")
|
||||||
}
|
}
|
||||||
@@ -110,6 +111,10 @@ exports.buttons = {
|
|||||||
}
|
}
|
||||||
this.errorLog.log("debug","loaded buttons & embeds")
|
this.errorLog.log("debug","loaded buttons & embeds")
|
||||||
|
|
||||||
|
exports.statsManager = require("./core/statsManager")
|
||||||
|
this.statsManager.startupStatsManager()
|
||||||
|
|
||||||
|
//START CLIENT LOGIN PROCESS
|
||||||
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({
|
this.actionRecorder.push({
|
||||||
@@ -118,17 +123,19 @@ client.on('ready',async () => {
|
|||||||
time:new Date().getTime(),
|
time:new Date().getTime(),
|
||||||
type:"client.loggedin.success"
|
type:"client.loggedin.success"
|
||||||
})
|
})
|
||||||
var statusSet = false
|
|
||||||
const setStatus = (type,text) => {
|
const setStatus = (type,text) => {
|
||||||
if (statusSet == true) return
|
const getTypeEnum = (type) => {
|
||||||
const getTypeEnum = (text) => {
|
if (type.toLowerCase() == "playing") return discord.ActivityType.Playing
|
||||||
if (text.toLowerCase() == "playing") return discord.ActivityType.Playing
|
else if (type.toLowerCase() == "listening") return discord.ActivityType.Listening
|
||||||
else if (text.toLowerCase() == "listening") return discord.ActivityType.Listening
|
else if (type.toLowerCase() == "watching") return discord.ActivityType.Watching
|
||||||
else if (text.toLowerCase() == "watching") return discord.ActivityType.Watching
|
else if (type.toLowerCase() == "custom") return discord.ActivityType.Custom
|
||||||
else return discord.ActivityType.Listening
|
else return discord.ActivityType.Listening
|
||||||
}
|
}
|
||||||
client.user.setActivity(text,{type:getTypeEnum(type)})
|
client.user.setActivity({
|
||||||
statusSet = true
|
type:getTypeEnum(type),
|
||||||
|
state:(text.toLowerCase() == "custom") ? text : undefined,
|
||||||
|
name:text
|
||||||
|
})
|
||||||
}
|
}
|
||||||
this.errorLog.log("debug","bot status loaded")
|
this.errorLog.log("debug","bot status loaded")
|
||||||
this.actionRecorder.push({
|
this.actionRecorder.push({
|
||||||
@@ -154,6 +161,10 @@ client.on('ready',async () => {
|
|||||||
|
|
||||||
if (config.status.enabled){
|
if (config.status.enabled){
|
||||||
setStatus(config.status.type,config.status.text)
|
setStatus(config.status.type,config.status.text)
|
||||||
|
//refresh status every 10 minutes
|
||||||
|
setInterval(() => {
|
||||||
|
setStatus(config.status.type,config.status.text)
|
||||||
|
},(60*10*1000))
|
||||||
}
|
}
|
||||||
|
|
||||||
this.actionRecorder.push({
|
this.actionRecorder.push({
|
||||||
@@ -226,7 +237,7 @@ client.on('ready',async () => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//load plugins
|
//LOAD PLUGINS (after client login)
|
||||||
this.actionRecorder.push({
|
this.actionRecorder.push({
|
||||||
category:"ot.managers.plugins",
|
category:"ot.managers.plugins",
|
||||||
file:"./core/api/pluginlauncher.js",
|
file:"./core/api/pluginlauncher.js",
|
||||||
@@ -242,6 +253,8 @@ client.on('ready',async () => {
|
|||||||
})
|
})
|
||||||
this.errorLog.log("debug","loading plugins")
|
this.errorLog.log("debug","loading plugins")
|
||||||
})
|
})
|
||||||
|
|
||||||
|
//LOAD CHECKER.JS
|
||||||
if (!require("./core/api/api.json").disable.checkerjs.all){
|
if (!require("./core/api/api.json").disable.checkerjs.all){
|
||||||
this.actionRecorder.push({
|
this.actionRecorder.push({
|
||||||
category:"ot.managers.main",
|
category:"ot.managers.main",
|
||||||
@@ -260,6 +273,7 @@ if (!require("./core/api/api.json").disable.checkerjs.all){
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//LOAD COMMANDS & CORE
|
||||||
if (process.argv[2] && process.argv[2].startsWith("slash")){
|
if (process.argv[2] && process.argv[2].startsWith("slash")){
|
||||||
//do nothing
|
//do nothing
|
||||||
}else{
|
}else{
|
||||||
@@ -283,6 +297,8 @@ 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")()
|
||||||
|
require("./commands/stats")()
|
||||||
|
|
||||||
this.actionRecorder.push({
|
this.actionRecorder.push({
|
||||||
category:"ot.managers.loader",
|
category:"ot.managers.loader",
|
||||||
file:"./index.js",
|
file:"./index.js",
|
||||||
@@ -314,6 +330,7 @@ if (process.argv[2] && process.argv[2].startsWith("slash")){
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//LOAD API
|
||||||
this.actionRecorder.push({
|
this.actionRecorder.push({
|
||||||
category:"ot.managers.loader",
|
category:"ot.managers.loader",
|
||||||
file:"./index.js",
|
file:"./index.js",
|
||||||
@@ -331,6 +348,7 @@ this.actionRecorder.push({
|
|||||||
type:"api.success"
|
type:"api.success"
|
||||||
})
|
})
|
||||||
|
|
||||||
|
//ERROR SYSTEM
|
||||||
this.actionRecorder.push({
|
this.actionRecorder.push({
|
||||||
category:"ot.managers.loader",
|
category:"ot.managers.loader",
|
||||||
file:"./index.js",
|
file:"./index.js",
|
||||||
@@ -368,9 +386,6 @@ 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:
|
|
||||||
await require("./core/utils/liveStatus").liveStatusUploadManager(error.name+": "+error.message+" | origin: "+origin+"\n"+error.stack)
|
|
||||||
})
|
})
|
||||||
|
|
||||||
this.actionRecorder.push({
|
this.actionRecorder.push({
|
||||||
@@ -380,6 +395,55 @@ this.actionRecorder.push({
|
|||||||
type:"debugsystem.success"
|
type:"debugsystem.success"
|
||||||
})
|
})
|
||||||
|
|
||||||
const token = config.token.fromENV ? process.env.TOKEN : config.token.value
|
//PARSE .env FILE FROM DOTENV LIB
|
||||||
client.login(token)
|
//npm i dotenv
|
||||||
|
//https://github.com/motdotla/dotenv
|
||||||
|
/**@param {Buffer} src */
|
||||||
|
const loadFromDotEnv = (src) => {
|
||||||
|
const LINE = /(?:^|^)\s*(?:export\s+)?([\w.-]+)(?:\s*=\s*?|:\s+?)(\s*'(?:\\'|[^'])*'|\s*"(?:\\"|[^"])*"|\s*`(?:\\`|[^`])*`|[^#\r\n]+)?\s*(?:#.*)?(?:$|$)/mg
|
||||||
|
|
||||||
|
const obj = {}
|
||||||
|
|
||||||
|
// Convert buffer to string
|
||||||
|
let lines = src.toString()
|
||||||
|
|
||||||
|
// Convert line breaks to same format
|
||||||
|
lines = lines.replace(/\r\n?/mg, '\n')
|
||||||
|
|
||||||
|
let match
|
||||||
|
while ((match = LINE.exec(lines)) != null) {
|
||||||
|
const key = match[1]
|
||||||
|
|
||||||
|
// Default undefined or null to empty string
|
||||||
|
let value = (match[2] || '')
|
||||||
|
|
||||||
|
// Remove whitespace
|
||||||
|
value = value.trim()
|
||||||
|
|
||||||
|
// Check if double quoted
|
||||||
|
const maybeQuote = value[0]
|
||||||
|
|
||||||
|
// Remove surrounding quotes
|
||||||
|
value = value.replace(/^(['"`])([\s\S]*)\1$/mg, '$2')
|
||||||
|
|
||||||
|
// Expand newlines if double quoted
|
||||||
|
if (maybeQuote === '"') {
|
||||||
|
value = value.replace(/\\n/g, '\n')
|
||||||
|
value = value.replace(/\\r/g, '\r')
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add to object
|
||||||
|
obj[key] = value
|
||||||
|
}
|
||||||
|
process.env.TOKEN = obj.TOKEN
|
||||||
|
}
|
||||||
|
|
||||||
|
//LOGIN SYSTEM
|
||||||
|
if (config.token.fromENV){
|
||||||
|
loadFromDotEnv(fs.readFileSync(".env"))
|
||||||
|
client.login(process.env.TOKEN)
|
||||||
|
}else{
|
||||||
|
client.login(config.token.value)
|
||||||
|
}
|
||||||
|
|
||||||
this.errorLog.log("debug","login with token")
|
this.errorLog.log("debug","login with token")
|
||||||
+86
-52
@@ -1,43 +1,43 @@
|
|||||||
{
|
{
|
||||||
"_CREDITS":"ChilledBroke#9986 & M4#5882",
|
"_CREDITS":"deqressing",
|
||||||
"_INFO":"This file is a translation for open ticket 3.4.0",
|
"_INFO":"This file is a translation for open ticket 3.5.5",
|
||||||
|
|
||||||
"errors": {
|
"errors": {
|
||||||
"missingArgsTitle": "قيمة غير صالحة!",
|
"missingArgsTitle": "قيمة غير صالحة!",
|
||||||
"missingArgsDescription": "قيمة مفقودة",
|
"missingArgsDescription": "قيمة مفقودة",
|
||||||
"noPermsTitle": "ليس لديك برمشنات !",
|
"noPermsTitle": "ليس لديك برمشنات !",
|
||||||
"noPermsDescription": "أنت بحاجة الى برمشن `ADMINISTRATOR` او أن تكون في قائمة المسموح بهم!",
|
"noPermsDescription": "أنت بحاجة الى برمشن `ADMINISTRATOR` او أن تكون في قائمة المسموح بهم!",
|
||||||
"noPermsDelete": "فقط الإداريين يمكنهم حذف التكت!",
|
"noPermsDelete": "فقط الإداريين يمكنهم حذف التيكت!",
|
||||||
"chooseFromListTitle": "Invalid ID",
|
"chooseFromListTitle": "الايدي غير صحيح!",
|
||||||
"chooseFromListDescription": "قم بأختيار أحد من الأيديات من الأسفل:",
|
"chooseFromListDescription": "قم بأختيار أحد من الأيديات من الأسفل:",
|
||||||
"boterror": "خلل في البوت !",
|
"boterror": "خلل في البوت !",
|
||||||
"notInTicketTitle": "انت لست في تكت!",
|
"notInTicketTitle": "انت لست في تكت!",
|
||||||
"notInTicketDescription": "هذا الأمر لا يعمل خارج التكت!",
|
"notInTicketDescription": "هذا الأمر لا يعمل خارج التيكت!",
|
||||||
"ticketDoesntExist": "هذا التكت لم يعد فعال!",
|
"ticketDoesntExist": "هذا التيكت لم يعد فعال!",
|
||||||
"roleDoesntExist": "خطاً ,لم تعد الرتبة موجوده!",
|
"roleDoesntExist": "خطاً ,لم تعد الرتبة موجوده!",
|
||||||
"anotherOption": "هذا الخيار ليس التكت و لكنه شيء أخر!",
|
"anotherOption": "هذا الخيار ليس التيكت و لكنه شيء أخر!",
|
||||||
"maxAmountTitle": "خطأ , تم الوصول الى الحد الأقصى!",
|
"maxAmountTitle": "خطأ , تم الوصول الى الحد الأقصى!",
|
||||||
"maxAmountDescription": "لقد وصلت الى الحد الأقصى لعدد التكتات المسموحة بها!\nSo لا يمكنك فتح واحدة أخرى!",
|
"maxAmountDescription": "لقد وصلت الى الحد الأقصى لعدد التيكتات المسموحة بها!\nSo لا يمكنك فتح واحدة أخرى!",
|
||||||
"somethingWentWrong": "**هناك خطاً!**\nأعد المحاولة لاحقاً!"
|
"somethingWentWrong": "**هناك خطاً!**\nأعد المحاولة لاحقاً!"
|
||||||
},
|
},
|
||||||
"commands": {
|
"commands": {
|
||||||
"userAddedTitle": "تم أضافة {0} من المستخدمين في التكت!",
|
"userAddedTitle": "تم أضافة {0} من المستخدمين في التيكت!",
|
||||||
"userRemovedTitle": "تم أزالة {0} من المستخدمين من التكت!",
|
"userRemovedTitle": "تم أزالة {0} من المستخدمين من التيكت!",
|
||||||
"renameTitle": "تم تغيير أسم التكت الى {0}!",
|
"renameTitle": "تم تغيير أسم التيكت الى {0}!",
|
||||||
"closeTitle": "تم أغلاق التكت!",
|
"closeTitle": "تم أغلاق التيكت!",
|
||||||
"deleteTitle": " جاري حذف التكت...",
|
"deleteTitle": " جاري حذف التيكت...",
|
||||||
"reopenTitle": "إعادة فتح التكت!",
|
"reopenTitle": "إعادة فتح التيكت!",
|
||||||
|
|
||||||
"claimTitle":"This ticket is now claimed to {0}",
|
"claimTitle":"تم تعيين التيكت الى {0}",
|
||||||
"unclaimTitle":"This ticket isn't claimed anymore!",
|
"unclaimTitle":"هذا التيكت لم يتم تعيينه لاحد",
|
||||||
"changeTitle":"Changed ticket type to {0}!",
|
"changeTitle":"!تم تغيير نوع التيكت الى {0}",
|
||||||
|
|
||||||
"statsTitle":"Here are the stats for {0}!",
|
"statsTitle":"ها هي احصائيات {0}",
|
||||||
"autocloseTitle":"This ticket will be closed automatically after {0}!",
|
"autocloseTitle":"سيتم اغلاق التيكت تلقائيا في {0}",
|
||||||
"autocloseRejectTitle":"This ticket will no longer be closed automatically!",
|
"autocloseRejectTitle":"تم الغاء اغلاق التيكت تلقائيا",
|
||||||
"autocloseWarn":"This only affects inactive tickets!",
|
"autocloseWarn":"هذا يؤثر فقط على التذاكر الغير نشطة",
|
||||||
|
|
||||||
"goToTicket":"go to ticket",
|
"goToTicket":"الذهاب الى التيكت",
|
||||||
"ticketWarning": "هذا الأمبد موجود بالفعل في الرسالة بالأسفل!",
|
"ticketWarning": "هذا الأمبد موجود بالفعل في الرسالة بالأسفل!",
|
||||||
"maxTicketWarning": "**تحذير:** _يمكنك فقط فتح {0} تكت في الوقت!_"
|
"maxTicketWarning": "**تحذير:** _يمكنك فقط فتح {0} تكت في الوقت!_"
|
||||||
},
|
},
|
||||||
@@ -47,55 +47,89 @@
|
|||||||
"header2": "**قم بكتابة أمر `/new` او `/ticket` لفتح تكت!**\n\n",
|
"header2": "**قم بكتابة أمر `/new` او `/ticket` لفتح تكت!**\n\n",
|
||||||
|
|
||||||
"msgCmd": "أنشاء أيمبد مع الأزرار. (الأداريين فقط)",
|
"msgCmd": "أنشاء أيمبد مع الأزرار. (الأداريين فقط)",
|
||||||
"renameCmd": "إعادة تسمية التكت. (بدون مسافات)",
|
"renameCmd": "إعادة تسمية التيكت. (بدون مسافات)",
|
||||||
"closeCmd": "أغلاق التكت.",
|
"closeCmd": "أغلاق التيكت.",
|
||||||
"deleteCmd": "حذف التكت.",
|
"deleteCmd": "حذف التيكت.",
|
||||||
"addCmd": "إضافة مستخدم الى التكت.",
|
"addCmd": "إضافة مستخدم الى التيكت.",
|
||||||
"removeCmd": "إزالة مستخدم من التكت.",
|
"removeCmd": "إزالة مستخدم من التيكت.",
|
||||||
"reopenCmd": "إعادة فتح تكت بعد إغلاقة.",
|
"reopenCmd": "إعادة فتح تكت بعد إغلاقة.",
|
||||||
"changeCmd":"Change ticket type.",
|
"changeCmd":"تغيير نوع التيكت.",
|
||||||
"claimCmd":"Claim a ticket.",
|
"claimCmd":"تعيينك لتيكت معين.",
|
||||||
"unclaimCmd":"Unclaim a ticket.",
|
"unclaimCmd":"الغاء التغيين لتيكت معين",
|
||||||
"statsCmd":"View ticket stats.",
|
"statsCmd":"اضهار احصائيات التيكت",
|
||||||
"autocloseCmd":"Set timer to automatically close ticket"
|
"autocloseCmd":"قم بضبط مؤقت لاغلاق التيكت تلقائياً"
|
||||||
},
|
},
|
||||||
"buttons": {
|
"buttons": {
|
||||||
"close": "إغلاق التكت",
|
"close": "إغلاق التيكت",
|
||||||
"delete": "حذف التكت",
|
"delete": "حذف التيكت",
|
||||||
"reopen": "إعادة فتح التكت",
|
"reopen": "إعادة فتح التيكت",
|
||||||
"closeWithReason":"close with reason"
|
"closeWithReason":"اغلاق مع سبب"
|
||||||
},
|
},
|
||||||
"messages": {
|
"messages": {
|
||||||
"closedDescription": "فقط الأداريين يمكنهم التحدث في هذا التكت الأن!\n\n*أضغط على الزر بالأسفل لحذف التكت او إعادة فتحة مجدداً!*",
|
"closedDescription": "فقط الأداريين يمكنهم التحدث في هذا التيكت الأن!\n\n*أضغط على الزر بالأسفل لحذف التيكت او إعادة فتحة مجدداً!*",
|
||||||
"createdTitle": "تم إنشاء تكت!",
|
"createdTitle": "تم إنشاء تكت!",
|
||||||
"createdDescription": "تم أنشاء تكت , قم بأنتظار الدعم في الطريق!",
|
"createdDescription": "تم أنشاء تكت , قم بأنتظار الدعم في الطريق!",
|
||||||
|
|
||||||
"newTicketDmTitle": "تكت جديد!",
|
"newTicketDmTitle": "تكت جديد!",
|
||||||
"closedTicketDmTitle": "تم إغلاق التكت!",
|
"closedTicketDmTitle": "تم إغلاق التيكت!",
|
||||||
"deletedTicketDmTitle": "تم حذف التكت!",
|
"deletedTicketDmTitle": "تم حذف التيكت!",
|
||||||
"closedTicketDmDescription": "تم أغلاق تذكرتك من قبل إداري",
|
"closedTicketDmDescription": "تم أغلاق تذكرتك من قبل إداري",
|
||||||
"deletedTicketDmDescription": "تم حذف تذكرتك من قبل إداري!",
|
"deletedTicketDmDescription": "تم حذف تذكرتك من قبل إداري!",
|
||||||
"reopenTicketDmTitle": "تم إعادة فتح تذكرتك!",
|
"reopenTicketDmTitle": "تم إعادة فتح تذكرتك!",
|
||||||
"reopenTicketDmDescription": "تم إعادة فتح التكت!",
|
"reopenTicketDmDescription": "تم إعادة فتح التيكت!",
|
||||||
|
|
||||||
"chooseCategory": "أختر الكتقاجوري:",
|
"chooseCategory": "أختر الكتقاجوري:",
|
||||||
"gettingdeleted": "يتم حذف التكت...",
|
"gettingdeleted": "يتم حذف التيكت...",
|
||||||
|
|
||||||
"none": "لا يوجد",
|
"none": "لا يوجد",
|
||||||
"reason": "سبب",
|
"reason": "سبب",
|
||||||
"createdat":"created at",
|
"createdat":"تم الانشاء في",
|
||||||
"openedby":"opened by",
|
"openedby":"تم الانشاء من قبل",
|
||||||
"deletedby":"deleted by",
|
"deletedby":"تم الحذف من قبل",
|
||||||
"closedby":"closed by",
|
"closedby":"تم الاغلاق من قبل",
|
||||||
|
|
||||||
"modalreason":"What is the reason for closing this ticket?",
|
"modalreason":"ماهو سببك لاغلاق التيكت؟",
|
||||||
"chooseATicket": "Choose a ticket"
|
"chooseATicket": "اختار تيكت معين"
|
||||||
},
|
},
|
||||||
"transcripts":{
|
"transcripts":{
|
||||||
"title":"Transcript",
|
"title":"سجل",
|
||||||
"processed":"This transcript is being processed",
|
"processed":"يتم معالجة هذا السجل...",
|
||||||
"wait":"Please wait!",
|
"wait":"فضلا انتظر",
|
||||||
"estimated":"Estimated time",
|
"estimated":"الوقت المتوقع",
|
||||||
"available":"The transcript is available here"
|
"available":"تم انشاء السجل وهو متاح هنا"
|
||||||
|
},
|
||||||
|
"stats":{
|
||||||
|
"globalTitle":"احصائيات العامه",
|
||||||
|
"ticketTitle":"احصائيات التيكت ل {0}",
|
||||||
|
"userTitle":"احصائيات المستخدم {0}",
|
||||||
|
"systemTitle":"احصائيات السيستم",
|
||||||
|
"versionTitle":"نسخة البوت",
|
||||||
|
|
||||||
|
"ticketsCreated":"التيكتس التي تمت انشاؤه",
|
||||||
|
"ticketsClosed":"التيكتس التي تمت اغلاقه",
|
||||||
|
"ticketsDeleted":"التيكتس التي تمت حذفه",
|
||||||
|
"ticketsReopened":"التيكتس التي تمت العادة فتحه",
|
||||||
|
"ticketsAutoclosed":"التيكتس التي تمت اغلاقه تلقائيا",
|
||||||
|
"transcriptsCreated":"السجلات التي تمت انشاؤه",
|
||||||
|
"startupDate":"تم تشغيل البوت في",
|
||||||
|
"latestUpdate":"اخر التحديثات",
|
||||||
|
"ticketCreatedOn":"تم انشاءالتيكت في",
|
||||||
|
"ticketCreatedBy":"تم انشاء التيكت من قبل",
|
||||||
|
"messagesSent":"جميع الرسائل",
|
||||||
|
"status":"الحالة",
|
||||||
|
"participants":"المشاركون",
|
||||||
|
"role":"الرانك",
|
||||||
|
|
||||||
|
"switches":{
|
||||||
|
"globalAdmin":"ادمن عام",
|
||||||
|
"ticketAdmin":"ادمن تيكت",
|
||||||
|
"member":"عضو",
|
||||||
|
"open":"مفتوح",
|
||||||
|
"reopened":"اعادة فتحه",
|
||||||
|
"closed":"مغلق",
|
||||||
|
"autoclosed":"مغلق تلقائياً"
|
||||||
|
},
|
||||||
|
|
||||||
|
"errorUserNotFound":"هذا المستخدم لم يتم العثور عليه في قاعدة بياناتنا!"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,135 @@
|
|||||||
|
{
|
||||||
|
"_CREDITS":"Stragar",
|
||||||
|
"_INFO":"This file is a translation for open ticket 3.5.5",
|
||||||
|
|
||||||
|
"errors":{
|
||||||
|
"missingArgsTitle":"Грешни Аргументи!",
|
||||||
|
"missingArgsDescription":"Липсват Аргументи",
|
||||||
|
"noPermsTitle":"Нямате позволение!",
|
||||||
|
"noPermsDescription":"Трябва ви `ADMINISTRATOR` правомощия или да бъде в списъка с роли!",
|
||||||
|
"noPermsDelete":"Само админ може да изтрива тикети!",
|
||||||
|
"chooseFromListTitle":"Грешно ID",
|
||||||
|
"chooseFromListDescription":"Choose one of the id's below:",
|
||||||
|
"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":"Changed ticket type to {0}!",
|
||||||
|
|
||||||
|
"statsTitle":"Статистика за {0}!",
|
||||||
|
"autocloseTitle":"Този тикет ще се затвори автоматично след {0}!",
|
||||||
|
"autocloseRejectTitle":"Този тикет вече няма да се затваря автоматично!",
|
||||||
|
"autocloseWarn":"Това засяга само неактивни тикети!",
|
||||||
|
|
||||||
|
"goToTicket":"отидете на тикет",
|
||||||
|
"ticketWarning":"Текста е добавен по-долу!",
|
||||||
|
"maxTicketWarning":"**Предопреждение:** _Ти можеш да създадеш {0} тикети(s) време!_"
|
||||||
|
},
|
||||||
|
"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":"Транскриптът е достъпен тук"
|
||||||
|
},
|
||||||
|
"stats":{
|
||||||
|
"globalTitle":"Глобална статистика",
|
||||||
|
"ticketTitle":"Статистика на билета за {0}",
|
||||||
|
"userTitle":"Статистика на потребителя за {0}",
|
||||||
|
"systemTitle":"Системна статистика",
|
||||||
|
"versionTitle":"Версия на бота",
|
||||||
|
|
||||||
|
"ticketsCreated":"Създадени билети",
|
||||||
|
"ticketsClosed":"Затворени билети",
|
||||||
|
"ticketsDeleted":"Изтрити билети",
|
||||||
|
"ticketsReopened":"Повторно отворени билети",
|
||||||
|
"ticketsAutoclosed":"Автоматично затворени билети",
|
||||||
|
"transcriptsCreated":"Създадени транскрипти",
|
||||||
|
"startupDate":"Дата на стартиране",
|
||||||
|
"latestUpdate":"Последно обновление",
|
||||||
|
"ticketCreatedOn":"Билет създаден на",
|
||||||
|
"ticketCreatedBy":"Билет създаден от",
|
||||||
|
"messagesSent":"Изпратени съобщения",
|
||||||
|
"status":"Статус",
|
||||||
|
"participants":"Участници",
|
||||||
|
"role":"Роля",
|
||||||
|
|
||||||
|
"switches":{
|
||||||
|
"globalAdmin":"Глобален администратор",
|
||||||
|
"ticketAdmin":"Администратор на билет",
|
||||||
|
"member":"Член",
|
||||||
|
"open":"Отворен",
|
||||||
|
"reopened":"Повторно отворен",
|
||||||
|
"closed":"Затворен",
|
||||||
|
"autoclosed":"Автоматично затворен"
|
||||||
|
},
|
||||||
|
|
||||||
|
"errorUserNotFound":"Този потребител не може да бъде намерен в базата данни за статистика!"
|
||||||
|
}
|
||||||
|
}
|
||||||
+35
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"_CREDITS":"DJdj Development",
|
"_CREDITS":"DJdj Development",
|
||||||
"_INFO":"This file is a translation for open ticket 3.4.0",
|
"_INFO":"This file is a translation for open ticket 3.5.5",
|
||||||
|
|
||||||
"errors":{
|
"errors":{
|
||||||
"missingArgsTitle":"Invalid Arguments!",
|
"missingArgsTitle":"Invalid Arguments!",
|
||||||
@@ -97,5 +97,39 @@
|
|||||||
"wait":"Please wait!",
|
"wait":"Please wait!",
|
||||||
"estimated":"Estimated time",
|
"estimated":"Estimated time",
|
||||||
"available":"The transcript is available here"
|
"available":"The transcript is available here"
|
||||||
|
},
|
||||||
|
"stats":{
|
||||||
|
"globalTitle":"Global Stats",
|
||||||
|
"ticketTitle":"Ticket Stats for {0}",
|
||||||
|
"userTitle":"User Stats for {0}",
|
||||||
|
"systemTitle":"System Stats",
|
||||||
|
"versionTitle":"Bot Version",
|
||||||
|
|
||||||
|
"ticketsCreated":"Tickets Created",
|
||||||
|
"ticketsClosed":"Tickets Closed",
|
||||||
|
"ticketsDeleted":"Tickets Deleted",
|
||||||
|
"ticketsReopened":"Tickets Reopened",
|
||||||
|
"ticketsAutoclosed":"Tickets Autoclosed",
|
||||||
|
"transcriptsCreated":"Transcripts Created",
|
||||||
|
"startupDate":"Startup Date",
|
||||||
|
"latestUpdate":"Latest Update",
|
||||||
|
"ticketCreatedOn":"Ticket Created On",
|
||||||
|
"ticketCreatedBy":"Ticket Created By",
|
||||||
|
"messagesSent":"Messages Sent",
|
||||||
|
"status":"Status",
|
||||||
|
"participants":"Participants",
|
||||||
|
"role":"Role",
|
||||||
|
|
||||||
|
"switches":{
|
||||||
|
"globalAdmin":"Global Admin",
|
||||||
|
"ticketAdmin":"Ticket Admin",
|
||||||
|
"member":"Member",
|
||||||
|
"open":"Open",
|
||||||
|
"reopened":"Reopened",
|
||||||
|
"closed":"Closed",
|
||||||
|
"autoclosed":"Autoclosed"
|
||||||
|
},
|
||||||
|
|
||||||
|
"errorUserNotFound":"This user can't be found in the stats database!"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+87
-53
@@ -1,58 +1,58 @@
|
|||||||
{
|
{
|
||||||
"_CREDITS":"t0miiis#3022",
|
"_CREDITS":"spyeye_",
|
||||||
"_INFO":"This file is a translation for open ticket 3.4.0",
|
"_INFO":"This file is a translation for open ticket 3.5.5",
|
||||||
|
|
||||||
"errors":{
|
"errors":{
|
||||||
"missingArgsTitle":"Neplatny Argument!",
|
"missingArgsTitle":"Neplatný Argument!",
|
||||||
"missingArgsDescription":"Chybí Argument",
|
"missingArgsDescription":"Chybí Argument",
|
||||||
"noPermsTitle":"Nemáš práva!",
|
"noPermsTitle":"K tomuto nemáš práva!",
|
||||||
"noPermsDescription":"Potřebujes `ADMINISTRATOR`roli nebo byt v listině povolenych roli!",
|
"noPermsDescription":"Potřebuješ `ADMINISTRATOR`roli nebo být na seznamu povolených rolí!",
|
||||||
"noPermsDelete":"Pouze Admini muůřou mazat ticket!",
|
"noPermsDelete":"Pouze Admin může vymazat ticket!",
|
||||||
"chooseFromListTitle":"Neplatný ID",
|
"chooseFromListTitle":"Neplatné ID",
|
||||||
"chooseFromListDescription":"Vyber si jedno z ID níže:",
|
"chooseFromListDescription":"Vyber si jedno z ID níže:",
|
||||||
"boterror":"Bot Chyba!",
|
"boterror":"Chyba Bota!",
|
||||||
"notInTicketTitle":"Nejsi v ticketu!",
|
"notInTicketTitle":"Nejsi v ticketu!",
|
||||||
"notInTicketDescription":"Tenhle příkaz nefunguje mimo ticket!",
|
"notInTicketDescription":"Tento příkaz nefunguje mimo ticket!",
|
||||||
"ticketDoesntExist":"Tenhle ticket už neexistuje !",
|
"ticketDoesntExist":"Tento ticket už neexistuje!",
|
||||||
"roleDoesntExist":"Tenhle role už neexistuje!",
|
"roleDoesntExist":"Tato role už neexistuje!",
|
||||||
"anotherOption":"This option is not a ticket but another type!",
|
"anotherOption":"Tato možnost není ticket, ale jiná!",
|
||||||
"maxAmountTitle":"Max počet byl dosáhnut!",
|
"maxAmountTitle":"Byl dosáhnut maximální počet",
|
||||||
"maxAmountDescription":"Dosáhl jsi max počet povolených ticketu!\nSo nemůžeš si vytvořit nový!",
|
"maxAmountDescription":"Dosáhl jsi maximální počet povolených ticketů!\nTaže si nemůžeš vytvořit nový.",
|
||||||
"somethingWentWrong":"**Něco se pokazilo!**\nProsím zkus to jindy!"
|
"somethingWentWrong":"**Něco se pokazilo!**\nProsíme zkuste to později!"
|
||||||
},
|
},
|
||||||
"commands":{
|
"commands":{
|
||||||
"userAddedTitle":"Přidat {0} do tohohle ticketu!",
|
"userAddedTitle":"Přidat {0} do tohoto ticketu.",
|
||||||
"userRemovedTitle":"Odstranit {0} z tohohle ticketu!",
|
"userRemovedTitle":"Odstranit {0} z tohoto ticketu.",
|
||||||
"renameTitle":"Změnit jmeno na {0}!",
|
"renameTitle":"Změnit jméno na {0}!",
|
||||||
"closeTitle":"Zavři tenhle ticket!",
|
"closeTitle":"Uzavřít tento ticket!",
|
||||||
"deleteTitle":"Mažu ticket...",
|
"deleteTitle":"Probíhá vymazání ticketu...",
|
||||||
"reopenTitle":"Znovu otevíram ticket",
|
"reopenTitle":"Ticket byl znovu otevřen",
|
||||||
|
|
||||||
"claimTitle":"Ticket nyní převzal {0}",
|
"claimTitle":"Ticket nyní převzal {0}",
|
||||||
"unclaimTitle":"Ticket už není převzaný",
|
"unclaimTitle":"Ticket není nadále převzaný",
|
||||||
"changeTitle":"Změněn typ ticketu {0}!",
|
"changeTitle":"Typ ticketu byl změněn {0}!",
|
||||||
|
|
||||||
"statsTitle":"Tady je info o ticketu {0}!",
|
"statsTitle":"Zde jsou informace o ticketu {0}!",
|
||||||
"autocloseTitle":"Tento ticketu bude automaticky uzavřen za {0}!",
|
"autocloseTitle":"Tento ticketu bude automaticky uzavřen za {0}!",
|
||||||
"autocloseRejectTitle":"Tento ticketu už nebude automaticky uzavřen!",
|
"autocloseRejectTitle":"Tento ticket již nebude automaticky uzavřen!",
|
||||||
"autocloseWarn":"Toto zavře pouze neaktivní tickety!",
|
"autocloseWarn":"Tato možnost uzavře pouze neaktivní tickety!",
|
||||||
|
|
||||||
"goToTicket":"běž do ticketu",
|
"goToTicket":"Jít do ticketu",
|
||||||
"ticketWarning":"The embed is in the message below!",
|
"ticketWarning":"Embed se náchází pod touto zprávou.",
|
||||||
"maxTicketWarning":"**Warning:** _Můžeš vytvořit pouze {0} v tuhle chvíli!_"
|
"maxTicketWarning":"**Warning:** _V tuto chvíli můžeš vytvořit pouze {0} ticketů_"
|
||||||
},
|
},
|
||||||
"helpMenu":{
|
"helpMenu":{
|
||||||
"title":"Dostupné příkazy:",
|
"title":"Zde jsou všechny dostupné příkazy:",
|
||||||
"header1":"**Běž do {0} pro vytvoření ticketi!**\n\n",
|
"header1":"**Pro vytvoření ticketu bež do {0} **\n\n",
|
||||||
"header2":"**Použíj příkaz `/nový` nebo `/ticket` pro vytvoření ticketu**\n\n",
|
"header2":"**Použíj příkaz `/nový` nebo `/ticket` pro vytvoření nového ticketu**\n\n",
|
||||||
|
|
||||||
"msgCmd":"Vytvoř embed s tlačíky. (admins only)",
|
"msgCmd":"Vytvoř embed s tlačíky. (Pouze Admin)",
|
||||||
"renameCmd":"Přejmenovat ticket. (no spaces)",
|
"renameCmd":"Přejmenovat ticket. (Bez mezer)",
|
||||||
"closeCmd":"Zavřít ticket.",
|
"closeCmd":"Zavřít ticket.",
|
||||||
"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":"Znovu otevře ticket, který byl uzavřen.",
|
||||||
"changeCmd":"Změnit typ ticketu.",
|
"changeCmd":"Změnit typ ticketu.",
|
||||||
"claimCmd":"Převzi ticket.",
|
"claimCmd":"Převzi ticket.",
|
||||||
"unclaimCmd":"Uvolnit ticket.",
|
"unclaimCmd":"Uvolnit ticket.",
|
||||||
@@ -60,42 +60,76 @@
|
|||||||
"autocloseCmd":"Nastavit automatické uzavření ticketu"
|
"autocloseCmd":"Nastavit automatické uzavření ticketu"
|
||||||
},
|
},
|
||||||
"buttons":{
|
"buttons":{
|
||||||
"close":"Zavřit ticket",
|
"close":"Uzavřít ticket",
|
||||||
"delete":"Vymazat ticket",
|
"delete":"Vymazat ticket",
|
||||||
"reopen":"Znovu otevřít ticket",
|
"reopen":"Znovu otevřít ticket",
|
||||||
"closeWithReason":"zavřít s důvodem"
|
"closeWithReason":"Zzavřít s důvodem"
|
||||||
},
|
},
|
||||||
"messages":{
|
"messages":{
|
||||||
"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":"Zde mohou psát pouze Admin uživatelé\n\n*Klikni na tlačítko níže pro smazání nebo pro znovu otevření tohoto 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!",
|
||||||
|
|
||||||
"newTicketDmTitle":"Nový ticket!",
|
"newTicketDmTitle":"Nový ticket!",
|
||||||
"closedTicketDmTitle":"Ticket Zavřený!",
|
"closedTicketDmTitle":"Ticket byl Uzavřen!",
|
||||||
"deletedTicketDmTitle":"Ticket Odstranen!",
|
"deletedTicketDmTitle":"Ticket byl Odstraněn!",
|
||||||
"closedTicketDmDescription":"Tvuj ticket je uzavřen!",
|
"closedTicketDmDescription":"Tvůj ticket je uzavřen!",
|
||||||
"deletedTicketDmDescription":"Tvuj ticket byl smazan!",
|
"deletedTicketDmDescription":"Tvůj ticket byl vymazán!",
|
||||||
"reopenTicketDmTitle":"Ticket je znovu otevřený!",
|
"reopenTicketDmTitle":"Ticket je znovu otevřený!",
|
||||||
"reopenTicketDmDescription":"Tvuj ticket byl znovu ovetřený!",
|
"reopenTicketDmDescription":"Tvuj ticket byl znovu ovetřený!",
|
||||||
|
|
||||||
"chooseCategory":"Vyber si kategorii:",
|
"chooseCategory":"Vyber si kategorii:",
|
||||||
"gettingdeleted":"Ticket bude vymazan...",
|
"gettingdeleted":"Ticket bude vymazán...",
|
||||||
|
|
||||||
"none":"žádný",
|
"none":"Žádný",
|
||||||
"reason":"důvod",
|
"reason":"Důvod",
|
||||||
"createdat":"otevřeno v",
|
"createdat":"Otevřeno v",
|
||||||
"openedby":"otevřel",
|
"openedby":"Otevřel",
|
||||||
"deletedby":"smazano uzivatelem",
|
"deletedby":"Vymázáno uživatelem",
|
||||||
"closedby":"zavreno uzivatelem",
|
"closedby":"Uzavřeno uživatelem",
|
||||||
|
|
||||||
"modalreason":"Jakž byl důvod k zavření toho ticketu?",
|
"modalreason":"Zde napiš důvod uzavření tohoto ticketu.",
|
||||||
"chooseATicket": "Vyber ticket"
|
"chooseATicket": "Vyber si ticket"
|
||||||
},
|
},
|
||||||
"transcripts":{
|
"transcripts":{
|
||||||
"title":"Přepis",
|
"title":"Záznam",
|
||||||
"processed":"Tento přepis se zpracoval",
|
"processed":"Tento záznam byl zpracován",
|
||||||
"wait":"Prosím počkej!",
|
"wait":"Prosím počkej!",
|
||||||
"estimated":"Odhadovaný čas",
|
"estimated":"Odhadovaný čas",
|
||||||
"available":"Záloha je uložena zde!"
|
"available":"Záloha je uložena zde!"
|
||||||
|
},
|
||||||
|
"stats":{
|
||||||
|
"globalTitle":"Globální statistiky",
|
||||||
|
"ticketTitle":"Ticket statistiky pro {0}",
|
||||||
|
"userTitle":"Uživatelské statistiky pro {0}",
|
||||||
|
"systemTitle":"Sytstémov= statistiky",
|
||||||
|
"versionTitle":"Verze bota",
|
||||||
|
|
||||||
|
"ticketsCreated":"Ticketů vytvořeno:",
|
||||||
|
"ticketsClosed":"Tickety zavřeno:",
|
||||||
|
"ticketsDeleted":"Ticketu smazáno:",
|
||||||
|
"ticketsReopened":"Ticketů znovuotevřených:",
|
||||||
|
"ticketsAutoclosed":"Ticketů automaticky zavřeno:",
|
||||||
|
"transcriptsCreated":"Záloh ticketů vytvořeno:",
|
||||||
|
"startupDate":"Datum zapnutí",
|
||||||
|
"latestUpdate":"Poslední aktualizace",
|
||||||
|
"ticketCreatedOn":"Ticket založen na",
|
||||||
|
"ticketCreatedBy":"Ticket vytvořil",
|
||||||
|
"messagesSent":"Zpráva poslána",
|
||||||
|
"status":"Status",
|
||||||
|
"participants":"Účastníci",
|
||||||
|
"role":"Role",
|
||||||
|
|
||||||
|
"switches":{
|
||||||
|
"globalAdmin":"Globální Admin",
|
||||||
|
"ticketAdmin":"Ticket Admin",
|
||||||
|
"member":"Člen",
|
||||||
|
"open":"Otevřený",
|
||||||
|
"reopened":"Znovuotevřený",
|
||||||
|
"closed":"Zavřený",
|
||||||
|
"autoclosed":"Automaticky zavřený"
|
||||||
|
},
|
||||||
|
|
||||||
|
"errorUserNotFound":"Tento uživatel nebyl nalezen v databázi statistik!"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+37
-3
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"_CREDITS":"the_gamer#5095",
|
"_CREDITS":".the_gamer",
|
||||||
"_INFO":"This file is a translation for open ticket 3.4.0",
|
"_INFO":"This file is a translation for open ticket 3.5.5",
|
||||||
|
|
||||||
"errors": {
|
"errors": {
|
||||||
"missingArgsTitle": "Ugyldigt Argument!",
|
"missingArgsTitle": "Ugyldigt Argument!",
|
||||||
@@ -97,5 +97,39 @@
|
|||||||
"wait": "Vent venligst!",
|
"wait": "Vent venligst!",
|
||||||
"estimated": "Estimeret tid",
|
"estimated": "Estimeret tid",
|
||||||
"available": "Transcriptet er tilgængelig her"
|
"available": "Transcriptet er tilgængelig her"
|
||||||
}
|
},
|
||||||
|
"stats":{
|
||||||
|
"globalTitle":"Globale Statestikker",
|
||||||
|
"ticketTitle":"Ticket Statestikker tilhørende: {0}",
|
||||||
|
"userTitle":"Bruger Statestikker tilhørende: {0}",
|
||||||
|
"systemTitle":"System Statestikker",
|
||||||
|
"versionTitle":"Bot Version",
|
||||||
|
|
||||||
|
"ticketsCreated":"Tickets Oprettet",
|
||||||
|
"ticketsClosed":"Tickets Lukket",
|
||||||
|
"ticketsDeleted":"Tickets Slettet",
|
||||||
|
"ticketsReopened":"Tickets Genåbnet",
|
||||||
|
"ticketsAutoclosed":"Tickets Autolukket",
|
||||||
|
"transcriptsCreated":"Transcripts Oprettet",
|
||||||
|
"startupDate":"Startup Dato",
|
||||||
|
"latestUpdate":"Seneste Opdatering",
|
||||||
|
"ticketCreatedOn":"Ticket Oprettet Den",
|
||||||
|
"ticketCreatedBy":"Ticket Oprettet Af",
|
||||||
|
"messagesSent":"Beskeder sendt",
|
||||||
|
"status":"Status",
|
||||||
|
"participants":"Deltagere",
|
||||||
|
"role":"Rolle",
|
||||||
|
|
||||||
|
"switches":{
|
||||||
|
"globalAdmin":"Global Admin",
|
||||||
|
"ticketAdmin":"Ticket Admin",
|
||||||
|
"member":"Medlem",
|
||||||
|
"open":"Åben",
|
||||||
|
"reopened":"Genåbnet",
|
||||||
|
"closed":"Lukket",
|
||||||
|
"autoclosed":"Autolukket"
|
||||||
|
},
|
||||||
|
|
||||||
|
"errorUserNotFound":"Denne bruger kan ikke findes i statestik databasen!"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
+36
-2
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"_CREDITS":"DJj123dj#1706",
|
"_CREDITS":"djj123dj",
|
||||||
"_INFO":"This file is a translation for open ticket 3.4.0",
|
"_INFO":"This file is a translation for open ticket 3.5.5",
|
||||||
|
|
||||||
"errors":{
|
"errors":{
|
||||||
"missingArgsTitle":"Onjuiste parameters!",
|
"missingArgsTitle":"Onjuiste parameters!",
|
||||||
@@ -97,5 +97,39 @@
|
|||||||
"wait":"Gelieve te wachten!",
|
"wait":"Gelieve te wachten!",
|
||||||
"estimated":"Geschatte tijd",
|
"estimated":"Geschatte tijd",
|
||||||
"available":"Het transcript is hier beschikbaar"
|
"available":"Het transcript is hier beschikbaar"
|
||||||
|
},
|
||||||
|
"stats":{
|
||||||
|
"globalTitle":"Globale Stats",
|
||||||
|
"ticketTitle":"Ticket Stats voor {0}",
|
||||||
|
"userTitle":"User Stats voor {0}",
|
||||||
|
"systemTitle":"Systeem Stats",
|
||||||
|
"versionTitle":"Bot Versie",
|
||||||
|
|
||||||
|
"ticketsCreated":"Tickets Gemaakt",
|
||||||
|
"ticketsClosed":"Tickets Gesloten",
|
||||||
|
"ticketsDeleted":"Tickets Verwijderd",
|
||||||
|
"ticketsReopened":"Tickets Heropend",
|
||||||
|
"ticketsAutoclosed":"Tickets Auto-gesloten",
|
||||||
|
"transcriptsCreated":"Transcripts Gemaakt",
|
||||||
|
"startupDate":"Opstart Datum",
|
||||||
|
"latestUpdate":"Laatste Update",
|
||||||
|
"ticketCreatedOn":"Ticket Gemaakt Op",
|
||||||
|
"ticketCreatedBy":"Ticket Gemaakt Door",
|
||||||
|
"messagesSent":"Berichten Verzonden",
|
||||||
|
"status":"Status",
|
||||||
|
"participants":"Deelnemers",
|
||||||
|
"role":"Rol",
|
||||||
|
|
||||||
|
"switches":{
|
||||||
|
"globalAdmin":"Globale Admin",
|
||||||
|
"ticketAdmin":"Ticket Admin",
|
||||||
|
"member":"Member",
|
||||||
|
"open":"Open",
|
||||||
|
"reopened":"Heropend",
|
||||||
|
"closed":"Gesloten",
|
||||||
|
"autoclosed":"Auto-gesloten"
|
||||||
|
},
|
||||||
|
|
||||||
|
"errorUserNotFound":"Deze user kan niet in de database gevonden worden!"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+35
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"_CREDITS":"DJdj Development",
|
"_CREDITS":"DJdj Development",
|
||||||
"_INFO":"This file is a translation for open ticket 3.4.0",
|
"_INFO":"This file is a translation for open ticket 3.5.5",
|
||||||
|
|
||||||
"errors":{
|
"errors":{
|
||||||
"missingArgsTitle":"Invalid Arguments!",
|
"missingArgsTitle":"Invalid Arguments!",
|
||||||
@@ -97,5 +97,39 @@
|
|||||||
"wait":"Please wait!",
|
"wait":"Please wait!",
|
||||||
"estimated":"Estimated time",
|
"estimated":"Estimated time",
|
||||||
"available":"The transcript is available here"
|
"available":"The transcript is available here"
|
||||||
|
},
|
||||||
|
"stats":{
|
||||||
|
"globalTitle":"Global Stats",
|
||||||
|
"ticketTitle":"Ticket Stats for {0}",
|
||||||
|
"userTitle":"User Stats for {0}",
|
||||||
|
"systemTitle":"System Stats",
|
||||||
|
"versionTitle":"Bot Version",
|
||||||
|
|
||||||
|
"ticketsCreated":"Tickets Created",
|
||||||
|
"ticketsClosed":"Tickets Closed",
|
||||||
|
"ticketsDeleted":"Tickets Deleted",
|
||||||
|
"ticketsReopened":"Tickets Reopened",
|
||||||
|
"ticketsAutoclosed":"Tickets Autoclosed",
|
||||||
|
"transcriptsCreated":"Transcripts Created",
|
||||||
|
"startupDate":"Startup Date",
|
||||||
|
"latestUpdate":"Latest Update",
|
||||||
|
"ticketCreatedOn":"Ticket Created On",
|
||||||
|
"ticketCreatedBy":"Ticket Created By",
|
||||||
|
"messagesSent":"Messages Sent",
|
||||||
|
"status":"Status",
|
||||||
|
"participants":"Participants",
|
||||||
|
"role":"Role",
|
||||||
|
|
||||||
|
"switches":{
|
||||||
|
"globalAdmin":"Global Admin",
|
||||||
|
"ticketAdmin":"Ticket Admin",
|
||||||
|
"member":"Member",
|
||||||
|
"open":"Open",
|
||||||
|
"reopened":"Reopened",
|
||||||
|
"closed":"Closed",
|
||||||
|
"autoclosed":"Autoclosed"
|
||||||
|
},
|
||||||
|
|
||||||
|
"errorUserNotFound":"This user can't be found in the stats database!"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+97
-63
@@ -1,101 +1,135 @@
|
|||||||
{
|
{
|
||||||
"_CREDITS":"Sanke#6086",
|
"_CREDITS":"tostam",
|
||||||
"_INFO":"This file is a translation for open ticket 3.4.0",
|
"_INFO":"This file is a translation for open ticket 3.5.5",
|
||||||
|
|
||||||
"errors":{
|
"errors":{
|
||||||
"missingArgsTitle":"Arguments invalides!",
|
"missingArgsTitle":"Arguments invalides !",
|
||||||
"missingArgsDescription":"Argument manquant",
|
"missingArgsDescription":"Argument manquant !",
|
||||||
"noPermsTitle":"Pas de permissions!",
|
"noPermsTitle":"Tu n'as pas les permissions requises !",
|
||||||
"noPermsDescription":"Vous avez besoin de la permission `ADMINISTRATOR` ou être dans la liste des rôles autorisés!",
|
"noPermsDescription":"Vous avez besoin de la permission `ADMINISTRATOR` ou être dans la liste des rôles autorisés !",
|
||||||
"noPermsDelete":"Seuls les administrateurs peuvent supprimer un ticket!",
|
"noPermsDelete":"Seuls les staffs peuvent supprimer un ticket !",
|
||||||
"chooseFromListTitle":"Invalid ID",
|
"chooseFromListTitle":"ID invalide !",
|
||||||
"chooseFromListDescription":"Choisissez l'un des identifiants ci-dessous:",
|
"chooseFromListDescription":"Choisissez l'un des identifiants ci-dessous:",
|
||||||
"boterror":"Bot Error!",
|
"boterror":"Erreur du bot !",
|
||||||
"notInTicketTitle":"Vous n'êtes pas dans un ticket!",
|
"notInTicketTitle":"Vous n'êtes pas dans un ticket !",
|
||||||
"notInTicketDescription":"Cette commande ne fonctionne pas en dehors des tickets!",
|
"notInTicketDescription":"Cette commande ne fonctionne pas en dehors des tickets !",
|
||||||
"ticketDoesntExist":"Ce ticket n'existe plus!",
|
"ticketDoesntExist":"Ce ticket n'existe pas !",
|
||||||
"roleDoesntExist":"Ce rôle n'existe plus!",
|
"roleDoesntExist":"Ce rôle n'existe pas !",
|
||||||
"anotherOption":"Cette option n'est pas un ticket mais un autre type!",
|
"anotherOption":"Cette option n'est pas un ticket mais un autre type !",
|
||||||
"maxAmountTitle":"Montant maximum atteint!",
|
"maxAmountTitle":"Montant maximum de ticket atteint !",
|
||||||
"maxAmountDescription":"Vous avez atteint le nombre maximum de tickets autorisés!\nVous ne pouvez donc pas en créer un nouveau!",
|
"maxAmountDescription":"Vous avez atteint le nombre maximum de tickets autorisés !\nVous ne pouvez donc pas en créer un nouveau !",
|
||||||
"somethingWentWrong":"**Quelque chose s'est mal passé!**\nVeuillez réessayer une autre fois!"
|
"somethingWentWrong":"**Quelque chose s'est mal passé !**\nVeuillez réessayer une autre fois !"
|
||||||
},
|
},
|
||||||
"commands":{
|
"commands":{
|
||||||
"userAddedTitle":"{0} a été ajouté à ce ticket!",
|
"userAddedTitle":"{0} a été ajouté à ce ticket !",
|
||||||
"userRemovedTitle":"Supprimé {0} de ce ticket!",
|
"userRemovedTitle":"{0} a été supprimé de ce ticket !",
|
||||||
"renameTitle":"Changement du nom en {0}!",
|
"renameTitle":"Changement de nom du ticket en {0} !",
|
||||||
"closeTitle":"Fermé ce ticket!",
|
"closeTitle":"Ticket fermé",
|
||||||
"deleteTitle":"Suppression de ce ticket...",
|
"deleteTitle":"Suppression de ce ticket...",
|
||||||
"reopenTitle":"A rouvert ce ticket!",
|
"reopenTitle":"Ticket réouvert",
|
||||||
|
|
||||||
"claimTitle":"Ce ticket est maintenant réclamé à {0}",
|
"claimTitle":"Ce ticket est maintenant réclamé par {0}",
|
||||||
"unclaimTitle":"Ce ticket n'est pas réclamé!",
|
"unclaimTitle":"Ce ticket n'est plus réclamé !",
|
||||||
"changeTitle":"Modification du type de ticket en {0}!",
|
"changeTitle":"Modification du type de ticket en {0} !",
|
||||||
|
|
||||||
"statsTitle":"Voici les statistiques pour {0}!",
|
"statsTitle":"Voici les statistiques pour {0} !",
|
||||||
"autocloseTitle":"Ce ticket sera automatiquement clôturé après {0}!",
|
"autocloseTitle":"Ce ticket sera automatiquement clôturé après {0} !",
|
||||||
"autocloseRejectTitle":"Ce ticket ne sera plus clôturé automatiquement!",
|
"autocloseRejectTitle":"Ce ticket ne sera plus clôturé automatiquement !",
|
||||||
"autocloseWarn":"Cela n'affecte que les tickets inactifs!",
|
"autocloseWarn":"Cela n'affecte que les tickets inactifs !",
|
||||||
|
|
||||||
"goToTicket":"Aller au ticket",
|
"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 seulement {0} ticket(s) à la fois !_"
|
||||||
},
|
},
|
||||||
"helpMenu":{
|
"helpMenu":{
|
||||||
"title":"Commandes disponibles :",
|
"title":"Commandes disponibles :",
|
||||||
"header1":"**Allez à {0} pour créer un ticket !**\n\n",
|
"header1":"**Allez à {0} pour créer un ticket !**\n\n",
|
||||||
"header2":"**Exécutez la commande `/new` ou `/ticket` pour créer un ticket !**\n\n",
|
"header2":"**Exécutez la commande `/new` ou `/ticket` pour créer un ticket !**\n\n",
|
||||||
|
|
||||||
"msgCmd":"Faire apparaître une intégration avec des boutons. (administrateurs uniquement)",
|
"msgCmd":"Faire apparaître une intégration avec des boutons (administrateurs uniquement)",
|
||||||
"renameCmd":"Renommer un ticket. (sans espaces)",
|
"renameCmd":"Renommer un ticket (sans espaces)",
|
||||||
"closeCmd":"Fermer un ticket.",
|
"closeCmd":"Fermer un ticket",
|
||||||
"deleteCmd":"Supprimer un billet.",
|
"deleteCmd":"Supprimer un ticket",
|
||||||
"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":"Réouvrir un ticket après sa clôture",
|
||||||
"changeCmd":"Changer le type de ticket.",
|
"changeCmd":"Changer le type de ticket",
|
||||||
"claimCmd":"Réclamer un billet",
|
"claimCmd":"Réclamer un ticket",
|
||||||
"unclaimCmd":"Annuler la réclamation d'un ticket.",
|
"unclaimCmd":"Annuler la réclamation d'un ticket",
|
||||||
"statsCmd":"Afficher les statistiques des tickets.",
|
"statsCmd":"Afficher les statistiques des tickets",
|
||||||
"autocloseCmd":"Définir une minuterie pour fermer automatiquement le ticket"
|
"autocloseCmd":"Définir une minuterie pour fermer automatiquement le ticket"
|
||||||
},
|
},
|
||||||
"buttons":{
|
"buttons":{
|
||||||
"close":"Fermer le ticket",
|
"close":"Fermer le ticket",
|
||||||
"delete":"Supprimer le billet",
|
"delete":"Supprimer le ticket",
|
||||||
"reopen":"Billet de réouverture",
|
"reopen":"Réouvrir le ticket",
|
||||||
"closeWithReason":"fermer avec une raison"
|
"closeWithReason":"Fermer avec une raison"
|
||||||
},
|
},
|
||||||
"messages":{
|
"messages":{
|
||||||
"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 réouvrir 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 !",
|
||||||
|
|
||||||
"newTicketDmTitle":"Nouveau billet!",
|
"newTicketDmTitle":"Nouveau ticket !",
|
||||||
"closedTicketDmTitle":"Billet fermé!",
|
"closedTicketDmTitle":"Ticket fermé !",
|
||||||
"deletedTicketDmTitle":"Billet supprimé !",
|
"deletedTicketDmTitle":"Ticket supprimé !",
|
||||||
"closedTicketDmDescription":"Votre billet est fermé !",
|
"closedTicketDmDescription":"Votre ticket est fermé !",
|
||||||
"deletedTicketDmDescription":"Votre billet est supprimé !",
|
"deletedTicketDmDescription":"Votre ticket est supprimé !",
|
||||||
"reopenTicketDmTitle":"Billet rouvert!",
|
"reopenTicketDmTitle":"Ticket réouvert !",
|
||||||
"reopenTicketDmDescription":"Votre billet est rouvert !",
|
"reopenTicketDmDescription":"Votre ticket est réouvert !",
|
||||||
|
|
||||||
"chooseCategory":"choisissez une catégorie:",
|
"chooseCategory":"Choisissez une catégorie:",
|
||||||
"gettingdeleted":"Le ticket est en cours de suppression...",
|
"gettingdeleted":"Le ticket est en cours de suppression...",
|
||||||
|
|
||||||
"none":"rien",
|
"none":"Rien",
|
||||||
"reason":"raison",
|
"reason":"Raison",
|
||||||
"createdat":"Créé à",
|
"createdat":"Créé à",
|
||||||
"openedby":"Ouvert par",
|
"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"
|
||||||
},
|
},
|
||||||
"transcripts":{
|
"transcripts":{
|
||||||
"title":"Transcript",
|
"title":"Transcript",
|
||||||
"processed":"Cette transcript est en cours de traitement",
|
"processed":"Cette transcript est en cours de traitement",
|
||||||
"wait":"S'il vous plait, attendez...",
|
"wait":"S'il vous plait, attendez...",
|
||||||
"estimated":"Temps estime:",
|
"estimated":"Temps estimé:",
|
||||||
"available":"La transcript est disponible ici"
|
"available":"La transcript est disponible ici"
|
||||||
|
},
|
||||||
|
"stats":{
|
||||||
|
"globalTitle":"Statistiques du serveur",
|
||||||
|
"ticketTitle":"Statistiques des tickets pour {0}",
|
||||||
|
"userTitle":"Statistiques des utilisateurs pour {0}",
|
||||||
|
"systemTitle":"Statistiques du système",
|
||||||
|
"versionTitle":"Version du bot",
|
||||||
|
|
||||||
|
"ticketsCreated":"Tickets créés",
|
||||||
|
"ticketsClosed":"Tickets fermés",
|
||||||
|
"ticketsDeleted":"Tickets supprimés",
|
||||||
|
"ticketsReopened":"Tickets réouverts",
|
||||||
|
"ticketsAutoclosed":"Tickets fermés automatiquement",
|
||||||
|
"transcriptsCreated":"Transcriptions créées",
|
||||||
|
"startupDate":"Date de démarrage du bot",
|
||||||
|
"latestUpdate":"Dernière mise à jour",
|
||||||
|
"ticketCreatedOn":"Ticket créé le",
|
||||||
|
"ticketCreatedBy":"Ticket créé par",
|
||||||
|
"messagesSent":"Messages envoyés",
|
||||||
|
"status":"Status",
|
||||||
|
"participants":"Participants",
|
||||||
|
"role":"Role",
|
||||||
|
|
||||||
|
"switches":{
|
||||||
|
"globalAdmin":"Administrateur global",
|
||||||
|
"ticketAdmin":"Administrateur des tickets",
|
||||||
|
"member":"Membre",
|
||||||
|
"open":"Ouvrir",
|
||||||
|
"reopened":"Réouvert",
|
||||||
|
"closed":"Fermé",
|
||||||
|
"autoclosed":"Fermé automatiquement"
|
||||||
|
},
|
||||||
|
|
||||||
|
"errorUserNotFound":"Cet utilisateur est introuvable dans la base de données de statistiques !"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+36
-2
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"_CREDITS":"david.#8276 ",
|
"_CREDITS":"david.3",
|
||||||
"_INFO":"This file is a translation for open ticket 3.4.0",
|
"_INFO":"This file is a translation for open ticket 3.5.5",
|
||||||
|
|
||||||
"errors":{
|
"errors":{
|
||||||
"missingArgsTitle":"Ungültiges Argument!",
|
"missingArgsTitle":"Ungültiges Argument!",
|
||||||
@@ -97,5 +97,39 @@
|
|||||||
"wait":"Bitte warten!",
|
"wait":"Bitte warten!",
|
||||||
"estimated":"Verbleibende Zeit",
|
"estimated":"Verbleibende Zeit",
|
||||||
"available":"Das Transcript ist hier verfügbar"
|
"available":"Das Transcript ist hier verfügbar"
|
||||||
|
},
|
||||||
|
"stats":{
|
||||||
|
"globalTitle":"Global Stats",
|
||||||
|
"ticketTitle":"Ticket Stats für {0}",
|
||||||
|
"userTitle":"NutzerStats für {0}",
|
||||||
|
"systemTitle":"System Stats",
|
||||||
|
"versionTitle":"Bot Version",
|
||||||
|
|
||||||
|
"ticketsCreated":"Tickets erstellt",
|
||||||
|
"ticketsClosed":"Tickets geschlossen",
|
||||||
|
"ticketsDeleted":"Tickets gelöscht",
|
||||||
|
"ticketsReopened":"Tickets wiedergeöffnet",
|
||||||
|
"ticketsAutoclosed":"Tickets Autogeschlossen",
|
||||||
|
"transcriptsCreated":"Transcripts erstellt",
|
||||||
|
"startupDate":"Start Datum",
|
||||||
|
"latestUpdate":"Letztes Update",
|
||||||
|
"ticketCreatedOn":"Ticket erstellt am",
|
||||||
|
"ticketCreatedBy":"Ticket erstellt von",
|
||||||
|
"messagesSent":"Nachrichten gesendet",
|
||||||
|
"status":"Status",
|
||||||
|
"participants":"Teilnehmer",
|
||||||
|
"role":"Rolle",
|
||||||
|
|
||||||
|
"switches":{
|
||||||
|
"globalAdmin":"Global Admin",
|
||||||
|
"ticketAdmin":"Ticket Admin",
|
||||||
|
"member":"Nutzer",
|
||||||
|
"open":"Öffnen",
|
||||||
|
"reopened":"Wiedergeöffnet",
|
||||||
|
"closed":"Geschlossen",
|
||||||
|
"autoclosed":"Autogeschlossen"
|
||||||
|
},
|
||||||
|
|
||||||
|
"errorUserNotFound":"Der Nutzer wurde in der Statistik-Datenbank nicht gefunden!"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+36
-2
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"_CREDITS":"ꙅoᴎɒᎸɘƚꙅ#3744",
|
"_CREDITS":"ꙅoᴎɒᎸɘƚꙅ#3744",
|
||||||
"_INFO":"This file is a translation for open ticket 3.4.0",
|
"_INFO":"This file is a translation for open ticket 3.5.5",
|
||||||
|
|
||||||
"errors":{
|
"errors":{
|
||||||
"missingArgsTitle":"Invalid Arguments!",
|
"missingArgsTitle":"Invalid Arguments!",
|
||||||
@@ -88,7 +88,7 @@
|
|||||||
"deletedby":"Διεγράφη απο",
|
"deletedby":"Διεγράφη απο",
|
||||||
"closedby":"Έκλεισε από",
|
"closedby":"Έκλεισε από",
|
||||||
|
|
||||||
"modalreason":"Ποιός είναι ο λόγος για να κλείσει το εισιτήριο?",
|
"modalreason":"Γιατι να κλείσει το εισιτήριο?",
|
||||||
"chooseATicket": "Δίαλεξε ενα εισιτήριο"
|
"chooseATicket": "Δίαλεξε ενα εισιτήριο"
|
||||||
},
|
},
|
||||||
"transcripts":{
|
"transcripts":{
|
||||||
@@ -97,5 +97,39 @@
|
|||||||
"wait":"Παρακαλώ περιμένετε!",
|
"wait":"Παρακαλώ περιμένετε!",
|
||||||
"estimated":"Ώρα αναμονής",
|
"estimated":"Ώρα αναμονής",
|
||||||
"available":"Το αντίγραφο είναι ανοιχτώ εδώ!"
|
"available":"Το αντίγραφο είναι ανοιχτώ εδώ!"
|
||||||
|
},
|
||||||
|
"stats":{
|
||||||
|
"globalTitle":"Global Stats",
|
||||||
|
"ticketTitle":"Ticket Stats for {0}",
|
||||||
|
"userTitle":"User Stats for {0}",
|
||||||
|
"systemTitle":"System Stats",
|
||||||
|
"versionTitle":"Bot Version",
|
||||||
|
|
||||||
|
"ticketsCreated":"Tickets Created",
|
||||||
|
"ticketsClosed":"Tickets Closed",
|
||||||
|
"ticketsDeleted":"Tickets Deleted",
|
||||||
|
"ticketsReopened":"Tickets Reopened",
|
||||||
|
"ticketsAutoclosed":"Tickets Autoclosed",
|
||||||
|
"transcriptsCreated":"Transcripts Created",
|
||||||
|
"startupDate":"Startup Date",
|
||||||
|
"latestUpdate":"Latest Update",
|
||||||
|
"ticketCreatedOn":"Ticket Created On",
|
||||||
|
"ticketCreatedBy":"Ticket Created By",
|
||||||
|
"messagesSent":"Messages Sent",
|
||||||
|
"status":"Status",
|
||||||
|
"participants":"Participants",
|
||||||
|
"role":"Role",
|
||||||
|
|
||||||
|
"switches":{
|
||||||
|
"globalAdmin":"Global Admin",
|
||||||
|
"ticketAdmin":"Ticket Admin",
|
||||||
|
"member":"Member",
|
||||||
|
"open":"Open",
|
||||||
|
"reopened":"Reopened",
|
||||||
|
"closed":"Closed",
|
||||||
|
"autoclosed":"Autoclosed"
|
||||||
|
},
|
||||||
|
|
||||||
|
"errorUserNotFound":"This user can't be found in the stats database!"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,135 @@
|
|||||||
|
{
|
||||||
|
"_CREDITS":"Snowy",
|
||||||
|
"_INFO":"This file is a translation for open ticket 3.5.5",
|
||||||
|
|
||||||
|
"errors":{
|
||||||
|
"missingArgsTitle":"Hibás paraméterek!",
|
||||||
|
"missingArgsDescription":"Hiányzó paraméterek",
|
||||||
|
"noPermsTitle":"Nincs jogosultságod!",
|
||||||
|
"noPermsDescription":"Szükséged van az `Adminisztrátor` jogra, vagy rajta kell lenned az engedélyezett rangok listáján!",
|
||||||
|
"noPermsDelete":"Csak adminok törölhetik a ticketet!",
|
||||||
|
"chooseFromListTitle":"Ismeretlen ID",
|
||||||
|
"chooseFromListDescription":"Válassz egy ID-t az alábbi listából:",
|
||||||
|
"boterror":"Bot Hiba!",
|
||||||
|
"notInTicketTitle":"Nem vagy egy ticketben!",
|
||||||
|
"notInTicketDescription":"Ez a parancs nem működik a ticketeken kívűl!",
|
||||||
|
"ticketDoesntExist":"Ez a ticket már nem létezik!",
|
||||||
|
"roleDoesntExist":"Ez a rang már nem létezik!",
|
||||||
|
"anotherOption":"Ez a választás nem egy ticket, hanem más!",
|
||||||
|
"maxAmountTitle":"Maximum limit elérve!",
|
||||||
|
"maxAmountDescription":"Elérted a maximum engedélyezett ticketek számát!\nSzóval nem tudsz újat csinálni!",
|
||||||
|
"somethingWentWrong":"**Valami balul sült el!**\nKérlek próbáld újra később!"
|
||||||
|
},
|
||||||
|
"commands":{
|
||||||
|
"userAddedTitle":"{0} hozzáadva a tickethez!",
|
||||||
|
"userRemovedTitle":"{0} elvéve a ticketből!",
|
||||||
|
"renameTitle":"Ticket neve megváltoztatva erre: {0}!",
|
||||||
|
"closeTitle":"Ticket bezárva!",
|
||||||
|
"deleteTitle":"Ticket törlése...",
|
||||||
|
"reopenTitle":"Ticket újranyitva!",
|
||||||
|
|
||||||
|
"claimTitle":"A ticketet igényelte: {0}",
|
||||||
|
"unclaimTitle":"Már senki nem ingényeli a ticketet!",
|
||||||
|
"changeTitle":"Ticket típus megváltoztatva erre: {0}!",
|
||||||
|
|
||||||
|
"statsTitle":"Ticket statisztikák erre: {0}!",
|
||||||
|
"autocloseTitle":"Ez a ticket automatikusan be lesz zárva ennyi idő múlva: {0}!",
|
||||||
|
"autocloseRejectTitle":"Ez a ticket nem lesz automatikusan bezárva!",
|
||||||
|
"autocloseWarn":"Ez csak az inaktív hibajegyeket érinti!",
|
||||||
|
|
||||||
|
"goToTicket":"A tickethez",
|
||||||
|
"ticketWarning":"Az embed az alábbi üzenetben van!",
|
||||||
|
"maxTicketWarning":"**Warning:** _Csak {0} ticketet készíthetsz egy időben!_"
|
||||||
|
},
|
||||||
|
"helpMenu":{
|
||||||
|
"title":"Elérhető parancsok:",
|
||||||
|
"header1":"**Hogy elkészíts egy ticketet, menj ide: {0}!**\n\n",
|
||||||
|
"header2":"**Futtasd a `/new` vagy `/ticket` parancsot a ticket készítéséhez!**\n\n",
|
||||||
|
|
||||||
|
"msgCmd":"Embed küldése gombokkal. (csak adminok)",
|
||||||
|
"renameCmd":"Ticket átnevezése. (szóköz nélkül)",
|
||||||
|
"closeCmd":"Ticket bezárása.",
|
||||||
|
"deleteCmd":"Ticket törlése.",
|
||||||
|
"addCmd":"Felhasználó hozzáadása a tickethez.",
|
||||||
|
"removeCmd":"Felhasználó elvétele a tickettől.",
|
||||||
|
"reopenCmd":"Ticket újranyitása miután már be lett zárva.",
|
||||||
|
"changeCmd":"Ticket típusának megváltoztatása.",
|
||||||
|
"claimCmd":"Ticket igénylése.",
|
||||||
|
"unclaimCmd":"Ticket igénylésének törlése.",
|
||||||
|
"statsCmd":"Ticket statisztikák megtekintése.",
|
||||||
|
"autocloseCmd":"Ticketek automatikus bezárási idejének beállítása"
|
||||||
|
},
|
||||||
|
"buttons":{
|
||||||
|
"close":"Ticket bezárása",
|
||||||
|
"delete":"Ticket törlése",
|
||||||
|
"reopen":"Ticket újranyitása",
|
||||||
|
"closeWithReason":"Bezárás indokkal"
|
||||||
|
},
|
||||||
|
"messages":{
|
||||||
|
"closedDescription":"Csak adminok tudnak ebben a ticketben beszélni!\n\n*Kattints az alábbi gombokkal hogy töröld vagy újranyisd a ticketet!*",
|
||||||
|
"createdTitle":"Ticket Elkészítve!",
|
||||||
|
"createdDescription":"A ticketet elkészítve, meg tudod találni egy pingel!",
|
||||||
|
|
||||||
|
"newTicketDmTitle":"Új ticket!",
|
||||||
|
"closedTicketDmTitle":"Ticket bezárva!",
|
||||||
|
"deletedTicketDmTitle":"Ticket törölve!",
|
||||||
|
"closedTicketDmDescription":"A ticketed bezárták!",
|
||||||
|
"deletedTicketDmDescription":"A ticketed törölték!",
|
||||||
|
"reopenTicketDmTitle":"Ticket újranyitva!",
|
||||||
|
"reopenTicketDmDescription":"A ticketed újranyitották!",
|
||||||
|
|
||||||
|
"chooseCategory":"válassz egy kategóriát:",
|
||||||
|
"gettingdeleted":"A ticket törölve lesz...",
|
||||||
|
|
||||||
|
"none":"nincs",
|
||||||
|
"reason":"indok",
|
||||||
|
"createdat":"elkészítve ekkor:",
|
||||||
|
"openedby":"nyitotta:",
|
||||||
|
"deletedby":"törölve általa:",
|
||||||
|
"closedby":"bezárva általa:",
|
||||||
|
|
||||||
|
"modalreason":"Mi az indokod a ticket bezárására?",
|
||||||
|
"chooseATicket": "Válassz egy ticketet"
|
||||||
|
},
|
||||||
|
"transcripts":{
|
||||||
|
"title":"Átirat",
|
||||||
|
"processed":"Ez az átirat jelenleg feldolgozás alatt van",
|
||||||
|
"wait":"Kérlek várj!",
|
||||||
|
"estimated":"Becsült idő",
|
||||||
|
"available":"Az átirat itt érhető el"
|
||||||
|
},
|
||||||
|
"stats":{
|
||||||
|
"globalTitle":"Global Stats",
|
||||||
|
"ticketTitle":"Ticket Stats for {0}",
|
||||||
|
"userTitle":"User Stats for {0}",
|
||||||
|
"systemTitle":"System Stats",
|
||||||
|
"versionTitle":"Bot Version",
|
||||||
|
|
||||||
|
"ticketsCreated":"Tickets Created",
|
||||||
|
"ticketsClosed":"Tickets Closed",
|
||||||
|
"ticketsDeleted":"Tickets Deleted",
|
||||||
|
"ticketsReopened":"Tickets Reopened",
|
||||||
|
"ticketsAutoclosed":"Tickets Autoclosed",
|
||||||
|
"transcriptsCreated":"Transcripts Created",
|
||||||
|
"startupDate":"Startup Date",
|
||||||
|
"latestUpdate":"Latest Update",
|
||||||
|
"ticketCreatedOn":"Ticket Created On",
|
||||||
|
"ticketCreatedBy":"Ticket Created By",
|
||||||
|
"messagesSent":"Messages Sent",
|
||||||
|
"status":"Status",
|
||||||
|
"participants":"Participants",
|
||||||
|
"role":"Role",
|
||||||
|
|
||||||
|
"switches":{
|
||||||
|
"globalAdmin":"Global Admin",
|
||||||
|
"ticketAdmin":"Ticket Admin",
|
||||||
|
"member":"Member",
|
||||||
|
"open":"Open",
|
||||||
|
"reopened":"Reopened",
|
||||||
|
"closed":"Closed",
|
||||||
|
"autoclosed":"Autoclosed"
|
||||||
|
},
|
||||||
|
|
||||||
|
"errorUserNotFound":"This user can't be found in the stats database!"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,135 @@
|
|||||||
|
{
|
||||||
|
"_CREDITS":"erxg",
|
||||||
|
"_INFO":"This file is a translation for open ticket 3.5.5",
|
||||||
|
|
||||||
|
"errors":{
|
||||||
|
"missingArgsTitle":"Argumen tidak valid!",
|
||||||
|
"missingArgsDescription":"Argumen hilang",
|
||||||
|
"noPermsTitle":"Tidak ada akses!",
|
||||||
|
"noPermsDescription":"Anda memerlukan akses `ADMINISTRATOR` atau berada di dalam peran yang diizinkan!",
|
||||||
|
"noPermsDelete":"Hanya admin yang dapat menghapus tiket!",
|
||||||
|
"chooseFromListTitle":"ID Tidak Valid",
|
||||||
|
"chooseFromListDescription":"Silahkan pilih salah satu id di bawah:",
|
||||||
|
"boterror":"Bot Error!",
|
||||||
|
"notInTicketTitle":"Anda tidak berada di dalam sebuah tiket!",
|
||||||
|
"notInTicketDescription":"Perintah ini tidak bekerja di luar tiket!",
|
||||||
|
"ticketDoesntExist":"Tiket ini sudah tidak ada lagi!",
|
||||||
|
"roleDoesntExist":"Peran ini sudah tidak ada lagi!",
|
||||||
|
"anotherOption":"Opsi ini bukan tiket, melainkan tipe lain!",
|
||||||
|
"maxAmountTitle":"Batas maksimum tercapai!",
|
||||||
|
"maxAmountDescription":"Kamu telah meraih batas maksimum tiket yang diperbolehkan!\nJadi kamu tidak bisa membuat tiket baru!",
|
||||||
|
"somethingWentWrong":"Ada yang salah! Silakan coba lagi nanti!"
|
||||||
|
},
|
||||||
|
"commands":{
|
||||||
|
"userAddedTitle":"Menambah {0} ke tiket ini!",
|
||||||
|
"userRemovedTitle":"Mengeluarkan {0} dari tiket ini!",
|
||||||
|
"renameTitle":"Mengganti nama menjadi {0}!",
|
||||||
|
"closeTitle":"Menutup tiket ini!",
|
||||||
|
"deleteTitle":"Menghapus tiket ini...",
|
||||||
|
"reopenTitle":"Membuka ulang tiket ini!",
|
||||||
|
|
||||||
|
"claimTitle":"Tiket ini diklaim oleh {0}",
|
||||||
|
"unclaimTitle":"Tiket ini tidak diklaim lagi!",
|
||||||
|
"changeTitle":"Mengganti tipe tiket menjadi {0}!",
|
||||||
|
|
||||||
|
"statsTitle":"Ini adalah status untuk {0}!",
|
||||||
|
"autocloseTitle":"Tiket ini akan tutup otomatis setelah {0}!",
|
||||||
|
"autocloseRejectTitle":"Tiket ini tidak akan tertutup secara otomatis lagi!",
|
||||||
|
"autocloseWarn":"Ini hanya mempengaruhi tiket yang tidak aktif!",
|
||||||
|
|
||||||
|
"goToTicket":"Pergi ke tiket",
|
||||||
|
"ticketWarning":"Sematan tersebut tersedia dalam pesan di bawah ini!",
|
||||||
|
"maxTicketWarning":"**Peringatan:** _Anda hanya bisa membuat {0} tiket dalam satu waktu!_"
|
||||||
|
},
|
||||||
|
"helpMenu":{
|
||||||
|
"title":"Perintah yang tersedia:",
|
||||||
|
"header1":"**Pergi ke {0} untuk membuat tiket!**\n\n",
|
||||||
|
"header2":"**Jalankan perintah `/new` atau `/ticket` untuk membuat tiket!**\n\n",
|
||||||
|
|
||||||
|
"msgCmd":"Munculkan sematan dengan tombol. (hanya admin)",
|
||||||
|
"renameCmd":"Ganti nama tiket. (tanpa spasi)",
|
||||||
|
"closeCmd":"Tutup tiket.",
|
||||||
|
"deleteCmd":"Hapus tiket.",
|
||||||
|
"addCmd":"Tambahkan pengguna ke dalam tiket.",
|
||||||
|
"removeCmd":"Keluarkan pengguna dari tiket.",
|
||||||
|
"reopenCmd":"Buka ulang tiket setelah ditutup.",
|
||||||
|
"changeCmd":"Ganti tipe tiket.",
|
||||||
|
"claimCmd":"Klaim tiket.",
|
||||||
|
"unclaimCmd":"Batalkan klaim tiket.",
|
||||||
|
"statsCmd":"Lihat status tiket.",
|
||||||
|
"autocloseCmd":"Atur timer untuk menutup tiket secara otomatis"
|
||||||
|
},
|
||||||
|
"buttons":{
|
||||||
|
"close":"Tutup tiket",
|
||||||
|
"delete":"Hapus tiket",
|
||||||
|
"reopen":"Buka ulang tiket",
|
||||||
|
"closeWithReason":"Tutup dengan alasan"
|
||||||
|
},
|
||||||
|
"messages":{
|
||||||
|
"closedDescription":"Hanya admin yang dapat berbincang di tiket ini sekarang!\n\n*Tekan tombol di bawah untuk menghapus atau membuka ulang tiket ini!*",
|
||||||
|
"createdTitle":"Tiket dibuat!",
|
||||||
|
"createdDescription":"Tiket anda dibuat, anda dapat mengetahui dengan ping!",
|
||||||
|
|
||||||
|
"newTicketDmTitle":"Tiket baru!",
|
||||||
|
"closedTicketDmTitle":"Tiket ditutup!",
|
||||||
|
"deletedTicketDmTitle":"TIket dihapus!",
|
||||||
|
"closedTicketDmDescription":"Tiket anda ditutup!",
|
||||||
|
"deletedTicketDmDescription":"Tiket anda dihapus!",
|
||||||
|
"reopenTicketDmTitle":"Tiket dibuka kembali!",
|
||||||
|
"reopenTicketDmDescription":"Tiket anda dibuka kembali!",
|
||||||
|
|
||||||
|
"chooseCategory":"Pilih kategori:",
|
||||||
|
"gettingdeleted":"Tiket sedang dihapus...",
|
||||||
|
|
||||||
|
"none":"tidak ada",
|
||||||
|
"reason":"Alasan",
|
||||||
|
"createdat":"dibuat di",
|
||||||
|
"openedby":"dibuka oleh",
|
||||||
|
"deletedby":"dihapus oleh",
|
||||||
|
"closedby":"ditutup oleh",
|
||||||
|
|
||||||
|
"modalreason":"Apa alasan penutupan tiket ini?",
|
||||||
|
"chooseATicket": "Pilih tiket"
|
||||||
|
},
|
||||||
|
"transcripts":{
|
||||||
|
"title":"Transcript",
|
||||||
|
"processed":"Transkrip sedang diproses",
|
||||||
|
"wait":"Mohon tunggu!",
|
||||||
|
"estimated":"Estimasi waktu",
|
||||||
|
"available":"Transkrip tersedia di sini"
|
||||||
|
},
|
||||||
|
"stats":{
|
||||||
|
"globalTitle":"Statistik Global",
|
||||||
|
"ticketTitle":"Status Tiket Untuk {0}",
|
||||||
|
"userTitle":"Status Pengguna Untuk {0}",
|
||||||
|
"systemTitle":"Status Sistem",
|
||||||
|
"versionTitle":"Versi Robot",
|
||||||
|
|
||||||
|
"ticketsCreated":"Tiket Dibuat",
|
||||||
|
"ticketsClosed":"Tiket Ditutup",
|
||||||
|
"ticketsDeleted":"Tiket Dihapus",
|
||||||
|
"ticketsReopened":"Tiket Dibuka Kembali",
|
||||||
|
"ticketsAutoclosed":"Tiket Ditutup Otomatis",
|
||||||
|
"transcriptsCreated":"Transkrip Dibuat",
|
||||||
|
"startupDate":"Tanggal Mulai",
|
||||||
|
"latestUpdate":"Pembaruan Terbaru",
|
||||||
|
"ticketCreatedOn":"Tiket Dibuat Pada",
|
||||||
|
"ticketCreatedBy":"Tiket Dibuat Oleh",
|
||||||
|
"messagesSent":"Pesan Terkirim",
|
||||||
|
"status":"Status",
|
||||||
|
"participants":"Partisipan",
|
||||||
|
"role":"Peran",
|
||||||
|
|
||||||
|
"switches":{
|
||||||
|
"globalAdmin":"Admin Global",
|
||||||
|
"ticketAdmin":"Ticket Admin",
|
||||||
|
"member":"Anggota",
|
||||||
|
"open":"Buka",
|
||||||
|
"reopened":"Dibuka kembali",
|
||||||
|
"closed":"Ditutup",
|
||||||
|
"autoclosed":"Ditutup Otomatis"
|
||||||
|
},
|
||||||
|
|
||||||
|
"errorUserNotFound":"Pengguna ini tidak dapat ditemukan dalam basis data statistik!"
|
||||||
|
}
|
||||||
|
}
|
||||||
+36
-2
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"_CREDITS":"Maurizio#0268",
|
"_CREDITS":"maurizio26",
|
||||||
"_INFO":"This file is a translation for open ticket 3.4.0",
|
"_INFO":"This file is a translation for open ticket 3.5.5",
|
||||||
|
|
||||||
"errors":{
|
"errors":{
|
||||||
"missingArgsTitle":"Argomenti non validi!",
|
"missingArgsTitle":"Argomenti non validi!",
|
||||||
@@ -97,5 +97,39 @@
|
|||||||
"wait":"Perfavore attendi!",
|
"wait":"Perfavore attendi!",
|
||||||
"estimated":"Tempo estimato",
|
"estimated":"Tempo estimato",
|
||||||
"available":"La trascrizione è disponibile qui"
|
"available":"La trascrizione è disponibile qui"
|
||||||
|
},
|
||||||
|
"stats": {
|
||||||
|
"globalTitle": "Statistiche Globali",
|
||||||
|
"ticketTitle": "Statistiche Ticket per {0}",
|
||||||
|
"userTitle": "Statistiche Utenti per {0}",
|
||||||
|
"systemTitle": "Sistema Statistiche",
|
||||||
|
"versionTitle": "Versione Bot",
|
||||||
|
|
||||||
|
"ticketsCreated": "Tickets Creato",
|
||||||
|
"ticketsClosed": "Tickets Chiuso",
|
||||||
|
"ticketsDeleted": "Tickets Eliminato",
|
||||||
|
"ticketsReopened": "Tickets Riaperto",
|
||||||
|
"ticketsAutoclosed": "Tickets Chiuso Automaticamente",
|
||||||
|
"transcriptsCreated": "Transcrizione Creata",
|
||||||
|
"startupDate": "Data Inizio",
|
||||||
|
"latestUpdate": "Ultimo Update",
|
||||||
|
"ticketCreatedOn": "Ticket Creato Su",
|
||||||
|
"ticketCreatedBy": "Ticket Creato Da",
|
||||||
|
"messagesSent": "Messaggi Inviati",
|
||||||
|
"status": "Stato",
|
||||||
|
"participants": "Partecipanti",
|
||||||
|
"role": "Ruolo",
|
||||||
|
|
||||||
|
"switches": {
|
||||||
|
"globalAdmin": "Amministratore Globale",
|
||||||
|
"ticketAdmin": "Amministratore Ticket",
|
||||||
|
"member": "Membro",
|
||||||
|
"open": "Aperto",
|
||||||
|
"reopened": "Riaperto",
|
||||||
|
"closed": "Chiuso",
|
||||||
|
"autoclosed": "Chiuso Automaticamente"
|
||||||
|
},
|
||||||
|
|
||||||
|
"errorUserNotFound": "Questo utente non può essere trovato nel database delle statistiche!"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,135 @@
|
|||||||
|
{
|
||||||
|
"_CREDITS":"raze.hama",
|
||||||
|
"_INFO":"This file is a translation for open ticket 3.5.5",
|
||||||
|
|
||||||
|
"errors":{
|
||||||
|
"missingArgsTitle":"ئهوهی ههڵتبژاردوه نادروسته",
|
||||||
|
"missingArgsDescription":"ئهوهی ههڵتبژاردوه ناردوسته",
|
||||||
|
"noPermsTitle":"هیچ مۆڵەتێک نییە!",
|
||||||
|
"noPermsDescription":"پێویستت بە مۆڵەتی ئهدمین سترهیتهر هەیە یان دهبێت لە لیستی ڕۆڵە ڕێگەپێدراوەکاندا بیت!",
|
||||||
|
"noPermsDelete":"تەنها ئەدمینەکان دەتوانن بلیت بسڕنەوە!",
|
||||||
|
"chooseFromListTitle":"ناسنامەی نادروست",
|
||||||
|
"chooseFromListDescription":"یەکێک لەم ناسنامانهی خوارەوە هەڵبژێرە:",
|
||||||
|
"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":"**Go to {0} to create a ticket!**\n\n",
|
||||||
|
"header2":"**فەرمانەکە جێبەجێ بکە `/new` or `/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":" گواستنهوهكه لێرەدا بەردەستە"
|
||||||
|
},
|
||||||
|
"stats":{
|
||||||
|
"globalTitle":"ئاماری جیهانی",
|
||||||
|
"ticketTitle":"ئاماری بلیت بۆ {0}",
|
||||||
|
"userTitle":"ئاماری بەکارهێنەر بۆ {0}",
|
||||||
|
"systemTitle":"ئاماری سیستەم",
|
||||||
|
"versionTitle":"وەشانی بۆت",
|
||||||
|
|
||||||
|
"ticketsCreated":"بلیتەکان دروستکراون",
|
||||||
|
"ticketsClosed":"بلیتەکان داخراون",
|
||||||
|
"ticketsDeleted":"بلیتەکان سڕاونەتەوە",
|
||||||
|
"ticketsReopened":"بلیتەکان کرایەوە",
|
||||||
|
"ticketsAutoclosed":"بلیتەکان بە شێوەیەکی ئۆتۆماتیکی داخراون",
|
||||||
|
"transcriptsCreated":"گواستنهوه دروستکراون",
|
||||||
|
"startupDate":"بەرواری دەستپێکردن",
|
||||||
|
"latestUpdate":"نوێترین نوێکردنەوە",
|
||||||
|
"ticketCreatedOn":"بلیت دروستکراوە لەسەر",
|
||||||
|
"ticketCreatedBy":"بلیت دروستکراوە لەلایەن...",
|
||||||
|
"messagesSent":"پەیامەکان نێردراوە",
|
||||||
|
"status":"دۆخ",
|
||||||
|
"participants":"بەشداربووان",
|
||||||
|
"role":"ئەرک",
|
||||||
|
|
||||||
|
"switches":{
|
||||||
|
"globalAdmin":"بەڕێوەبەری جیهانی",
|
||||||
|
"ticketAdmin":"ئەدمینی بلیتەکان",
|
||||||
|
"member":"ئەندام",
|
||||||
|
"open":"کردنەوە",
|
||||||
|
"reopened":"دووبارە کرایەوە",
|
||||||
|
"closed":"داخراوە",
|
||||||
|
"autoclosed":"ئۆتۆماتیکی داخراوە"
|
||||||
|
},
|
||||||
|
|
||||||
|
"errorUserNotFound":"ئەم بەکارهێنەرە لە بنکەدراوەی ئامارەکاندا نادۆزرێتەوە!"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,135 @@
|
|||||||
|
{
|
||||||
|
"_CREDITS":"Ronalds1398",
|
||||||
|
"_INFO":"This file is a translation for open ticket 3.5.5",
|
||||||
|
|
||||||
|
"errors":{
|
||||||
|
"missingArgsTitle":"Nepareizi argumenti!",
|
||||||
|
"missingArgsDescription":"Trūkst argumentu!",
|
||||||
|
"noPermsTitle":"Nav atļauju!",
|
||||||
|
"noPermsDescription":"Jums ir nepieciešama `ADMINISTRATOR` atļauja vai jābūt atļautajām lomām!",
|
||||||
|
"noPermsDelete":"Tikai administratori var izdzēst biļetes!",
|
||||||
|
"chooseFromListTitle":"Nederīgs ID",
|
||||||
|
"chooseFromListDescription":"Izvēlieties vienu no zemāk esošajiem ID:",
|
||||||
|
"boterror":"Bota kļūda!",
|
||||||
|
"notInTicketTitle":"Jūs neesat biļetē!",
|
||||||
|
"notInTicketDescription":"Šī komanda nedarbojas ārpus biļetēm!",
|
||||||
|
"ticketDoesntExist":"Šāda biļete vairs nepastāv!",
|
||||||
|
"roleDoesntExist":"Šāda loma vairs nepastāv!",
|
||||||
|
"anotherOption":"Tas nav biļete, bet citas veida!",
|
||||||
|
"maxAmountTitle":"Sasniegta maksimālā summa!",
|
||||||
|
"maxAmountDescription":"Jūs esat sasniedzis maksimālo atļauto biļešu skaitu!\nTāpēc jūs nevarat izveidot jaunu!",
|
||||||
|
"somethingWentWrong":"**Kaut kas nogāja greizi!**\nLūdzu, mēģiniet vēlreiz!"
|
||||||
|
},
|
||||||
|
"commands":{
|
||||||
|
"userAddedTitle":"Pievienots {0} šai biļetei!",
|
||||||
|
"userRemovedTitle":"Noņemts {0} no šīs biļetes!",
|
||||||
|
"renameTitle":"Pārdēvēts uz {0}!",
|
||||||
|
"closeTitle":"Biļete aizvērta!",
|
||||||
|
"deleteTitle":"Dzēšam biļeti",
|
||||||
|
"reopenTitle":"Atkārtoti atveram biļeti!",
|
||||||
|
|
||||||
|
"claimTitle":"Šo biļeti ņēma {0}",
|
||||||
|
"unclaimTitle":"Šī biļete nav piešķirta nevienam!",
|
||||||
|
"changeTitle":"Biļetes veids mainīts uz {0}!",
|
||||||
|
|
||||||
|
"statsTitle":"Šeit ir statistika par {0}!",
|
||||||
|
"autocloseTitle":"Šī biļete tiks automātiski aizvērta pēc {0}!",
|
||||||
|
"autocloseRejectTitle":"Šī biļete vairs netiks automātiski aizvērta!",
|
||||||
|
"autocloseWarn":"Tas attiecas tikai uz neaktīvām biļetēm!",
|
||||||
|
|
||||||
|
"goToTicket":"doties uz biļeti",
|
||||||
|
"ticketWarning":"Iegults ir zemāk esošajā ziņā!",
|
||||||
|
"maxTicketWarning":"**Brīdinājums:** _Jūs varat izveidot tikai tik daudz biļetes vienlaikus: {0}!_"
|
||||||
|
},
|
||||||
|
"helpMenu":{
|
||||||
|
"title":"Pieejamie komandu:",
|
||||||
|
"header1":"**Dodieties uz {0}, lai izveidotu biļeti!**\n\n",
|
||||||
|
"header2":"**Izpildiet komandu `/new` vai `/ticket`, lai izveidotu biļeti!**\n\n",
|
||||||
|
|
||||||
|
"msgCmd":"Izveidojiet iegultni ar pogām. (tikai administratoriem)",
|
||||||
|
"renameCmd":"Pārdēvējiet biļeti. (bez atstarpēm)",
|
||||||
|
"closeCmd":"Aizveriet biļeti.",
|
||||||
|
"deleteCmd":"Dzēst biļeti.",
|
||||||
|
"addCmd":"Pievienojiet lietotāju biļetei.",
|
||||||
|
"removeCmd":"Noņemt lietotāju no biļetes.",
|
||||||
|
"reopenCmd":"Atveriet atkārtoti aizvērtu biļeti.",
|
||||||
|
"changeCmd":"Mainiet biļetes veidu.",
|
||||||
|
"claimCmd":"Paņemiet biļeti.",
|
||||||
|
"unclaimCmd":"Atsakieties no biļetes.",
|
||||||
|
"statsCmd":"Apskatiet biļetes statistiku.",
|
||||||
|
"autocloseCmd":"Iestatiet taimeri, lai automātiski aizvērtu biļeti"
|
||||||
|
},
|
||||||
|
"buttons":{
|
||||||
|
"close":"Aizveriet biļeti",
|
||||||
|
"delete":"Dzēst biļeti",
|
||||||
|
"reopen":"Atveriet biļeti",
|
||||||
|
"closeWithReason":"Aizveriet ar iemeslu"
|
||||||
|
},
|
||||||
|
"messages":{
|
||||||
|
"closedDescription":"Pašlaik šajā biļetē var runāt tikai administratori!\n\n*Nospiediet zemāk esošo pogu, lai dzēstu vai atkārtoti atveriet šo biļeti!*",
|
||||||
|
"createdTitle":"Biļete izveidota!",
|
||||||
|
"createdDescription":"Jūsu biļete ir izveidota, to varat atpazīt, izmantojot pingu!",
|
||||||
|
|
||||||
|
"newTicketDmTitle":"Jauna biļete!",
|
||||||
|
"closedTicketDmTitle":"Biļete aizvērta!",
|
||||||
|
"deletedTicketDmTitle":"Biļete dzēsta!",
|
||||||
|
"closedTicketDmDescription":"Jūsu biļete ir aizvērta!",
|
||||||
|
"deletedTicketDmDescription":"Jūsu biļete ir dzēsta!",
|
||||||
|
"reopenTicketDmTitle":"Biļete atkārtoti atvērta!",
|
||||||
|
"reopenTicketDmDescription":"Jūsu biļete ir atkārtoti atvērta!",
|
||||||
|
|
||||||
|
"chooseCategory":"izvēlieties kategoriju:",
|
||||||
|
"gettingdeleted":"Biļete tiek dzēsta...",
|
||||||
|
|
||||||
|
"none":"nav",
|
||||||
|
"reason":"iemērs",
|
||||||
|
"createdat":"izveidots",
|
||||||
|
"openedby":"atvēris",
|
||||||
|
"deletedby":"dzēsts",
|
||||||
|
"closedby":"aizvērts",
|
||||||
|
|
||||||
|
"modalreason":"Kāds ir šīs biļetes aizvēršanas iemesls?",
|
||||||
|
"chooseATicket": "Izvēlieties biļeti"
|
||||||
|
},
|
||||||
|
"transcripts":{
|
||||||
|
"title":"Transkripcija",
|
||||||
|
"processed":"Šī transkripcija tiek apstrādāta",
|
||||||
|
"wait":"Lūdzu, uzgaidiet!",
|
||||||
|
"estimated":"Apmēramais laiks",
|
||||||
|
"available":"Transkripcija pieejama šeit"
|
||||||
|
},
|
||||||
|
"stats":{
|
||||||
|
"globalTitle":"Globālā statistika",
|
||||||
|
"ticketTitle":"Biļetes statistika priekš {0}",
|
||||||
|
"userTitle":"Lietotāja statistika priekš {0}",
|
||||||
|
"systemTitle":"Sistēmas statistika",
|
||||||
|
"versionTitle":"Bota versija",
|
||||||
|
|
||||||
|
"ticketsCreated":"Biļetes izveidotas",
|
||||||
|
"ticketsClosed":"Biļetes aizvērtas",
|
||||||
|
"ticketsDeleted":"Biļetes dzēstas",
|
||||||
|
"ticketsReopened":"Biļetes atkārtoti atvērtas",
|
||||||
|
"ticketsAutoclosed":"Biļetes automātiski aizvērtas",
|
||||||
|
"transcriptsCreated":"Transkripcijas izveidotas",
|
||||||
|
"startupDate":"Palaišanas datums",
|
||||||
|
"latestUpdate":"Pēdējā atjaunināšana",
|
||||||
|
"ticketCreatedOn":"Biļete izveidota",
|
||||||
|
"ticketCreatedBy":"Biļete izveidota",
|
||||||
|
"messagesSent":"Ziņojumi nosūtīti",
|
||||||
|
"status":"Statuss",
|
||||||
|
"participants":"Dalībnieki",
|
||||||
|
"role":"Loma",
|
||||||
|
|
||||||
|
"switches":{
|
||||||
|
"globalAdmin":"Globālais Administrātors",
|
||||||
|
"ticketAdmin":"Biļešu Administrātors",
|
||||||
|
"member":"Dalībnieks",
|
||||||
|
"open":"Atvērts",
|
||||||
|
"reopened":"Atkārtoti atvērts",
|
||||||
|
"closed":"Aizvērts",
|
||||||
|
"autoclosed":"Automātiski aizvērts"
|
||||||
|
},
|
||||||
|
|
||||||
|
"errorUserNotFound":"Lietotājs nav atrasts mūsu datubāzē!"
|
||||||
|
}
|
||||||
|
}
|
||||||
+36
-2
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"_CREDITS":"NoOneNook#0266",
|
"_CREDITS":"noonenook",
|
||||||
"_INFO":"This file is a translation for open ticket 3.4.0",
|
"_INFO":"This file is a translation for open ticket 3.5.5",
|
||||||
|
|
||||||
"errors":{
|
"errors":{
|
||||||
"missingArgsTitle":"Ugyldige argumenter!",
|
"missingArgsTitle":"Ugyldige argumenter!",
|
||||||
@@ -97,5 +97,39 @@
|
|||||||
"wait":"Vennligst vent!",
|
"wait":"Vennligst vent!",
|
||||||
"estimated":"Beregnet tid",
|
"estimated":"Beregnet tid",
|
||||||
"available":"Loggfil er tilgjengelig over denne meldingen!"
|
"available":"Loggfil er tilgjengelig over denne meldingen!"
|
||||||
|
},
|
||||||
|
"stats":{
|
||||||
|
"globalTitle":"Globale Stats",
|
||||||
|
"ticketTitle":"Ticket Stats for {0}",
|
||||||
|
"userTitle":"Bruker Stats for {0}",
|
||||||
|
"systemTitle":"System Stats",
|
||||||
|
"versionTitle":"Bot Versjon",
|
||||||
|
|
||||||
|
"ticketsCreated":"Tickets Laget",
|
||||||
|
"ticketsClosed":"Tickets Lukket",
|
||||||
|
"ticketsDeleted":"Tickets Slettet",
|
||||||
|
"ticketsReopened":"Tickets Gjenåpnet",
|
||||||
|
"ticketsAutoclosed":"Tickets Auto-lukket",
|
||||||
|
"transcriptsCreated":"Transcripts Opprettet",
|
||||||
|
"startupDate":"Start Dato",
|
||||||
|
"latestUpdate":"Siste Oppdatering",
|
||||||
|
"ticketCreatedOn":"Ticket Laget den",
|
||||||
|
"ticketCreatedBy":"Ticket Laget av",
|
||||||
|
"messagesSent":"Meldinger sendt",
|
||||||
|
"status":"Status",
|
||||||
|
"participants":"Deltakere",
|
||||||
|
"role":"Rolle",
|
||||||
|
|
||||||
|
"switches":{
|
||||||
|
"globalAdmin":"Global Admin",
|
||||||
|
"ticketAdmin":"Ticket Admin",
|
||||||
|
"member":"Medlem",
|
||||||
|
"open":"Åpen",
|
||||||
|
"reopened":"Gjenåpnet",
|
||||||
|
"closed":"Lukket",
|
||||||
|
"autoclosed":"Auto-Lukket"
|
||||||
|
},
|
||||||
|
|
||||||
|
"errorUserNotFound":"Denne brukeren kan ikke bli funnet i statistikkdatabasen!"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,135 @@
|
|||||||
|
{
|
||||||
|
"_CREDITS":"sasanwm",
|
||||||
|
"_INFO":"This file is a translation for open ticket 3.5.5",
|
||||||
|
|
||||||
|
"errors":{
|
||||||
|
"missingArgsTitle":"آرگومانهای گم شده!",
|
||||||
|
"missingArgsDescription":"آرگومان گم شده",
|
||||||
|
"noPermsTitle":"شما دسترسی نداری!",
|
||||||
|
"noPermsDescription":"شما نیاز به دسترسی `ADMINISTRATOR` دارید یا باید در لیست رولهای مجاز باشید!",
|
||||||
|
"noPermsDelete":"فقط ادمین ها میتونند یک تیکت رو حذف کنند!",
|
||||||
|
"chooseFromListTitle":"ایدی نامعتبر",
|
||||||
|
"chooseFromListDescription":"یکی از ایدیهای زیر رو انتخاب کن:",
|
||||||
|
"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":"گزارش در دسترس هست در اینجا"
|
||||||
|
},
|
||||||
|
"stats":{
|
||||||
|
"globalTitle":"آمار گلوبال",
|
||||||
|
"ticketTitle":"آمار تیکت برای {0}",
|
||||||
|
"userTitle":"آمار یوزر برای {0}",
|
||||||
|
"systemTitle":"آمار سیستم",
|
||||||
|
"versionTitle":"ورژن ربات",
|
||||||
|
|
||||||
|
"ticketsCreated":"تیکتهای ایجاد شده",
|
||||||
|
"ticketsClosed":"تیکتهای بسته شده",
|
||||||
|
"ticketsDeleted":"تیکتهای حذف شده",
|
||||||
|
"ticketsReopened":"تیکتهای دوباره باز شده",
|
||||||
|
"ticketsAutoclosed":"تیکتهای به طور خودکار بسته شده",
|
||||||
|
"transcriptsCreated":"گزارشهای ایجاد شده",
|
||||||
|
"startupDate":"تاریخ راهاندازی",
|
||||||
|
"latestUpdate":"آخرین بروزرسانی",
|
||||||
|
"ticketCreatedOn":"تیکت ایجاد شده در",
|
||||||
|
"ticketCreatedBy":"تیکت ایجاد شده توسط",
|
||||||
|
"messagesSent":"پیامهای ارسال شده",
|
||||||
|
"status":"وضعیت",
|
||||||
|
"participants":"مشارکتکنندگان",
|
||||||
|
"role":"رول",
|
||||||
|
|
||||||
|
"switches":{
|
||||||
|
"globalAdmin":"ادمین گلوبال",
|
||||||
|
"ticketAdmin":"ادمین تیکت",
|
||||||
|
"member":"ممبر",
|
||||||
|
"open":"باز",
|
||||||
|
"reopened":"دوباره باز شده",
|
||||||
|
"closed":"بسته شده",
|
||||||
|
"autoclosed":"بسته شده به طور خودکار"
|
||||||
|
},
|
||||||
|
|
||||||
|
"errorUserNotFound":"این یوزر در دیتابیس آمار پیدا نمیشه!"
|
||||||
|
}
|
||||||
|
}
|
||||||
+36
-2
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"_CREDITS":"MKevas#8311",
|
"_CREDITS":"mkevas",
|
||||||
"_INFO":"This file is a translation for open ticket 3.4.0",
|
"_INFO":"This file is a translation for open ticket 3.5.5",
|
||||||
|
|
||||||
"errors":{
|
"errors":{
|
||||||
"missingArgsTitle":"Nieprawidłowe argumenty!",
|
"missingArgsTitle":"Nieprawidłowe argumenty!",
|
||||||
@@ -97,5 +97,39 @@
|
|||||||
"wait":"Proszę czekać!",
|
"wait":"Proszę czekać!",
|
||||||
"estimated":"Szacowany czas",
|
"estimated":"Szacowany czas",
|
||||||
"available":"Transkrypcja jest dostępna tutaj"
|
"available":"Transkrypcja jest dostępna tutaj"
|
||||||
|
},
|
||||||
|
"stats":{
|
||||||
|
"globalTitle":"Globalne Statystyki",
|
||||||
|
"ticketTitle":"Statystyki biletów dla {0}",
|
||||||
|
"userTitle":"Statystyki użytkowników dla {0}",
|
||||||
|
"systemTitle":"Statystyki systemu",
|
||||||
|
"versionTitle":"Wersja bota",
|
||||||
|
|
||||||
|
"ticketsCreated":"Bilety stworzone",
|
||||||
|
"ticketsClosed":"Bilety zamknięte",
|
||||||
|
"ticketsDeleted":"Bilety skasowane",
|
||||||
|
"ticketsReopened":"Bilety otwarte ponownie",
|
||||||
|
"ticketsAutoclosed":"Bilety automatycznie zamknięte",
|
||||||
|
"transcriptsCreated":"Utworzono transkrypcje",
|
||||||
|
"startupDate":"Data uruchomienia",
|
||||||
|
"latestUpdate":"Najnowsza aktualizacja",
|
||||||
|
"ticketCreatedOn":"Bilet został utworzony dnia",
|
||||||
|
"ticketCreatedBy":"Bilet stworzony przez",
|
||||||
|
"messagesSent":"Wiadomość wysłana",
|
||||||
|
"status":"Status",
|
||||||
|
"participants":"Uczestnicy",
|
||||||
|
"role":"Rola",
|
||||||
|
|
||||||
|
"switches":{
|
||||||
|
"globalAdmin":"Globalny administrator",
|
||||||
|
"ticketAdmin":"Admin biletowy",
|
||||||
|
"member":"Użytkownik",
|
||||||
|
"open":"Otwarte",
|
||||||
|
"reopened":"Otwarte ponownie",
|
||||||
|
"closed":"Zamknięte",
|
||||||
|
"autoclosed":"Automatycznie zamknięte"
|
||||||
|
},
|
||||||
|
|
||||||
|
"errorUserNotFound":"Tego użytkownika nie można znaleźć w bazie statystyk!"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"_CREDITS":"QuirAddon#9778",
|
"_CREDITS":"quiradon",
|
||||||
"_INFO":"This file is a translation for open ticket 3.4.0",
|
"_INFO":"This file is a translation for open ticket 3.5.5",
|
||||||
|
|
||||||
"errors":{
|
"errors":{
|
||||||
"missingArgsTitle":"Argumentos inválidos!",
|
"missingArgsTitle":"Argumentos inválidos!",
|
||||||
@@ -97,5 +97,39 @@
|
|||||||
"wait":"Por favor espere!",
|
"wait":"Por favor espere!",
|
||||||
"estimated":"Tempo estimado",
|
"estimated":"Tempo estimado",
|
||||||
"available":"A Transcrição está disponível aqui"
|
"available":"A Transcrição está disponível aqui"
|
||||||
|
},
|
||||||
|
"stats":{
|
||||||
|
"globalTitle":"Global Stats",
|
||||||
|
"ticketTitle":"Ticket Stats for {0}",
|
||||||
|
"userTitle":"User Stats for {0}",
|
||||||
|
"systemTitle":"System Stats",
|
||||||
|
"versionTitle":"Bot Version",
|
||||||
|
|
||||||
|
"ticketsCreated":"Tickets Created",
|
||||||
|
"ticketsClosed":"Tickets Closed",
|
||||||
|
"ticketsDeleted":"Tickets Deleted",
|
||||||
|
"ticketsReopened":"Tickets Reopened",
|
||||||
|
"ticketsAutoclosed":"Tickets Autoclosed",
|
||||||
|
"transcriptsCreated":"Transcripts Created",
|
||||||
|
"startupDate":"Startup Date",
|
||||||
|
"latestUpdate":"Latest Update",
|
||||||
|
"ticketCreatedOn":"Ticket Created On",
|
||||||
|
"ticketCreatedBy":"Ticket Created By",
|
||||||
|
"messagesSent":"Messages Sent",
|
||||||
|
"status":"Status",
|
||||||
|
"participants":"Participants",
|
||||||
|
"role":"Role",
|
||||||
|
|
||||||
|
"switches":{
|
||||||
|
"globalAdmin":"Global Admin",
|
||||||
|
"ticketAdmin":"Ticket Admin",
|
||||||
|
"member":"Member",
|
||||||
|
"open":"Open",
|
||||||
|
"reopened":"Reopened",
|
||||||
|
"closed":"Closed",
|
||||||
|
"autoclosed":"Autoclosed"
|
||||||
|
},
|
||||||
|
|
||||||
|
"errorUserNotFound":"This user can't be found in the stats database!"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+35
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"_CREDITS":"Sanke#6086",
|
"_CREDITS":"Sanke#6086",
|
||||||
"_INFO":"This file is a translation for open ticket 3.4.0",
|
"_INFO":"This file is a translation for open ticket 3.5.5",
|
||||||
|
|
||||||
"errors":{
|
"errors":{
|
||||||
"missingArgsTitle":"Argumente Invalide",
|
"missingArgsTitle":"Argumente Invalide",
|
||||||
@@ -97,5 +97,39 @@
|
|||||||
"wait":"Te rugam sa astepti!",
|
"wait":"Te rugam sa astepti!",
|
||||||
"estimated":"Timp estimat",
|
"estimated":"Timp estimat",
|
||||||
"available":"Transcriptul este disponibil aici"
|
"available":"Transcriptul este disponibil aici"
|
||||||
|
},
|
||||||
|
"stats":{
|
||||||
|
"globalTitle":"Statistici Globale",
|
||||||
|
"ticketTitle":"Statistici Ticket pentru {0}",
|
||||||
|
"userTitle":"Statistici utilizator pentru {0}",
|
||||||
|
"systemTitle":"Statistici Sistem",
|
||||||
|
"versionTitle":"Versiune Bot",
|
||||||
|
|
||||||
|
"ticketsCreated":"Tickete Create",
|
||||||
|
"ticketsClosed":"Tickets Inchise",
|
||||||
|
"ticketsDeleted":"Tickete Sterse",
|
||||||
|
"ticketsReopened":"Tickete Redeschise",
|
||||||
|
"ticketsAutoclosed":"Tickets Inchise automat",
|
||||||
|
"transcriptsCreated":"Transcript-uri create",
|
||||||
|
"startupDate":"Data startup",
|
||||||
|
"latestUpdate":"Update recent",
|
||||||
|
"ticketCreatedOn":"Ticket creat pe data",
|
||||||
|
"ticketCreatedBy":"Ticket Creat de",
|
||||||
|
"messagesSent":"Mesaje trimise",
|
||||||
|
"status":"Status",
|
||||||
|
"participants":"Participanti",
|
||||||
|
"role":"Rol",
|
||||||
|
|
||||||
|
"switches":{
|
||||||
|
"globalAdmin":"Admin Global",
|
||||||
|
"ticketAdmin":"Admin Ticket",
|
||||||
|
"member":"Membru",
|
||||||
|
"open":"Deschis",
|
||||||
|
"reopened":"Redeschis",
|
||||||
|
"closed":"Inchis",
|
||||||
|
"autoclosed":"Inchis automat"
|
||||||
|
},
|
||||||
|
|
||||||
|
"errorUserNotFound":"Acest utilizator nu poate fi gasit in database-ul nostru!"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+36
-2
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"_CREDITS":"Apexo#0723",
|
"_CREDITS":"apexo & ander",
|
||||||
"_INFO":"This file is a translation for open ticket 3.4.0",
|
"_INFO":"This file is a translation for open ticket 3.5.5",
|
||||||
|
|
||||||
"errors":{
|
"errors":{
|
||||||
"missingArgsTitle":"Неверные аргументы!",
|
"missingArgsTitle":"Неверные аргументы!",
|
||||||
@@ -97,5 +97,39 @@
|
|||||||
"wait":"Пожайлуста подождите!",
|
"wait":"Пожайлуста подождите!",
|
||||||
"estimated":"Оценочное время",
|
"estimated":"Оценочное время",
|
||||||
"available":"Транскрипт здесь доступен"
|
"available":"Транскрипт здесь доступен"
|
||||||
|
},
|
||||||
|
"stats":{
|
||||||
|
"globalTitle":"Общая статистика",
|
||||||
|
"ticketTitle":"Статистика тикета для {0}",
|
||||||
|
"userTitle":"Статистика пользователя для {0}",
|
||||||
|
"systemTitle":"Системная статистика",
|
||||||
|
"versionTitle":"Версия бота",
|
||||||
|
|
||||||
|
"ticketsCreated":"Тикет создан",
|
||||||
|
"ticketsClosed":"Тикет закрыт",
|
||||||
|
"ticketsDeleted":"Тикет удален",
|
||||||
|
"ticketsReopened":"Тикет переоткрыт",
|
||||||
|
"ticketsAutoclosed":"Тикет автоматически закрыт",
|
||||||
|
"transcriptsCreated":"Транскрипт создан",
|
||||||
|
"startupDate":"Дата запуска",
|
||||||
|
"latestUpdate":"Последнее обновление",
|
||||||
|
"ticketCreatedOn":"Тикет создан",
|
||||||
|
"ticketCreatedBy":"Тикет создан",
|
||||||
|
"messagesSent":"Сообщение отправлено",
|
||||||
|
"status":"Статус",
|
||||||
|
"participants":"Участники",
|
||||||
|
"role":"Роль",
|
||||||
|
|
||||||
|
"switches":{
|
||||||
|
"globalAdmin":"Главная",
|
||||||
|
"ticketAdmin":"Тикет",
|
||||||
|
"member":"Участник",
|
||||||
|
"open":"Открыть",
|
||||||
|
"reopened":"Переоткрытый",
|
||||||
|
"closed":"Закрыт",
|
||||||
|
"autoclosed":"Автоматически закрыт"
|
||||||
|
},
|
||||||
|
|
||||||
|
"errorUserNotFound":"Участник не найден в базе данных статистики!"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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",
|
||||||
@@ -11,14 +12,17 @@
|
|||||||
"it":"italian",
|
"it":"italian",
|
||||||
"ru":"russian",
|
"ru":"russian",
|
||||||
"tr": "Türkçe",
|
"tr": "Türkçe",
|
||||||
|
"ar": "Arabic",
|
||||||
|
"th": "Thailand",
|
||||||
|
|
||||||
"MISSING":"arabic,portuguese",
|
"MISSING":"portuguese",
|
||||||
"NOTAVAILABLE":"arabic,portuguese,czech"
|
"NOTAVAILABLE":"portuguese,czech"
|
||||||
},
|
},
|
||||||
"data":{
|
"data":{
|
||||||
"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.",
|
||||||
@@ -27,11 +31,14 @@
|
|||||||
"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":"Список доступных команд",
|
"ru":"Список доступных команд",
|
||||||
"tr": "Kullanılabilir komutların listesi."
|
"tr": "Kullanılabilir komutların listesi.",
|
||||||
|
"ar": "قائمة للكوماندات المتاحة",
|
||||||
|
"th": "List คำสั่งที่สามารถใช้งานได้"
|
||||||
},
|
},
|
||||||
"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.",
|
||||||
@@ -40,11 +47,14 @@
|
|||||||
"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 с кнопками",
|
"ru":"Создать embed с кнопками",
|
||||||
"tr": "Butonlar ile bir yerleştirme oluşturun."
|
"tr": "Butonlar ile bir yerleştirme oluşturun.",
|
||||||
|
"ar": "أنشاء أيمبد مع الأزرار.",
|
||||||
|
"th": "เรียก Embed และปุ่มต่างๆ"
|
||||||
},
|
},
|
||||||
"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.",
|
||||||
@@ -53,11 +63,14 @@
|
|||||||
"es-ES":"Cierra un ticket.",
|
"es-ES":"Cierra un ticket.",
|
||||||
"it":"Chiudi un ticket.",
|
"it":"Chiudi un ticket.",
|
||||||
"ru":"Закрыть тикет",
|
"ru":"Закрыть тикет",
|
||||||
"tr": "Bileti kapat."
|
"tr": "Bileti kapat.",
|
||||||
|
"ar": "اغلاق تيكت.",
|
||||||
|
"th": "ปิดห้องติดต่อ"
|
||||||
},
|
},
|
||||||
"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.",
|
||||||
@@ -66,11 +79,14 @@
|
|||||||
"es-ES":"Elimina un ticket.",
|
"es-ES":"Elimina un ticket.",
|
||||||
"it":"Elimina un ticket.",
|
"it":"Elimina un ticket.",
|
||||||
"ru":"Удалить тикет",
|
"ru":"Удалить тикет",
|
||||||
"tr": "Bileti sil."
|
"tr": "Bileti sil.",
|
||||||
|
"ar": "حذف تيكت.",
|
||||||
|
"th": "ลบห้องติดต่อ"
|
||||||
},
|
},
|
||||||
"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.",
|
||||||
@@ -79,11 +95,14 @@
|
|||||||
"es-ES":"Re-abre un ticket.",
|
"es-ES":"Re-abre un ticket.",
|
||||||
"it":"Ri-Apri un ticket.",
|
"it":"Ri-Apri un ticket.",
|
||||||
"ru":"Открыть заново тикет",
|
"ru":"Открыть заново тикет",
|
||||||
"tr": "Bileti yeniden aç."
|
"tr": "Bileti yeniden aç.",
|
||||||
|
"ar": "اعادة فتح تيكت.",
|
||||||
|
"th": "เปิดห้องติดต่อใหม่อีกครั้ง"
|
||||||
},
|
},
|
||||||
"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.",
|
||||||
@@ -92,11 +111,14 @@
|
|||||||
"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":"Добавить другого пользователя в тикет",
|
"ru":"Добавить другого пользователя в тикет",
|
||||||
"tr": "Bilete başka bir kullanıcı ekle."
|
"tr": "Bilete başka bir kullanıcı ekle.",
|
||||||
|
"ar": "اضافة مستخدم اخر الى تيكت معين.",
|
||||||
|
"th": "เพิ่มผู้ใช้เข้ามาในห้องติดต่อ"
|
||||||
},
|
},
|
||||||
"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.",
|
||||||
@@ -105,11 +127,14 @@
|
|||||||
"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":"Удалить пользователя из тикета",
|
"ru":"Удалить пользователя из тикета",
|
||||||
"tr": "Kullanıcıyı bir biletten kaldır."
|
"tr": "Kullanıcıyı bir biletten kaldır.",
|
||||||
|
"ar": "ازالة مستخدم من تيكت معين.",
|
||||||
|
"th": "ลบผู้ใช้ออกจากห้องติดต่อ"
|
||||||
},
|
},
|
||||||
"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.",
|
||||||
@@ -118,11 +143,14 @@
|
|||||||
"es-ES":"Crear un ticket.",
|
"es-ES":"Crear un ticket.",
|
||||||
"it":"Crea un ticket",
|
"it":"Crea un ticket",
|
||||||
"ru":"Создать тикет",
|
"ru":"Создать тикет",
|
||||||
"tr": "Bilet oluştur"
|
"tr": "Bilet oluştur",
|
||||||
|
"ar": "انشاء تيكت.",
|
||||||
|
"th": "สร้างห้องติดต่อใหม่"
|
||||||
},
|
},
|
||||||
"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.",
|
||||||
@@ -131,11 +159,14 @@
|
|||||||
"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":"Переименовать канал тикета",
|
"ru":"Переименовать канал тикета",
|
||||||
"tr": "Bilet kanalını yeniden adlandır."
|
"tr": "Bilet kanalını yeniden adlandır.",
|
||||||
|
"ar": "اعادة تسمية التيكت.",
|
||||||
|
"th": "แก้ไชชื่อห้องติดต่อ"
|
||||||
},
|
},
|
||||||
"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":" ",
|
||||||
@@ -144,11 +175,14 @@
|
|||||||
"es-ES":" ",
|
"es-ES":" ",
|
||||||
"it":" ",
|
"it":" ",
|
||||||
"ru":"Взять тикет",
|
"ru":"Взять тикет",
|
||||||
"tr":"Bilet talep et."
|
"tr":"Bilet talep et.",
|
||||||
|
"ar": "تعيين التيكت",
|
||||||
|
"th": "รับเรื่อง"
|
||||||
},
|
},
|
||||||
"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":" ",
|
||||||
@@ -157,11 +191,14 @@
|
|||||||
"es-ES":" ",
|
"es-ES":" ",
|
||||||
"it":" ",
|
"it":" ",
|
||||||
"ru":"Снять тикет",
|
"ru":"Снять тикет",
|
||||||
"tr":"Bileti iptal et."
|
"tr":"Bileti iptal et.",
|
||||||
|
"ar": "ازالة التعيين من شخص الى التيكت",
|
||||||
|
"th": "ยกเลิกการรับเรื่อง"
|
||||||
},
|
},
|
||||||
"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":" ",
|
||||||
@@ -170,7 +207,9 @@
|
|||||||
"es-ES":" ",
|
"es-ES":" ",
|
||||||
"it":" ",
|
"it":" ",
|
||||||
"ru":"Изменить тип тикета",
|
"ru":"Изменить тип тикета",
|
||||||
"tr":"Bilet türünü değiştir."
|
"tr":"Bilet türünü değiştir.",
|
||||||
|
"ar": "تغيير نوع التيكت",
|
||||||
|
"th": "เปลี่ยนประเภทห้องติดต่อ"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+36
-2
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"_CREDITS":"n1kkec#5341",
|
"_CREDITS":"n1kkec",
|
||||||
"_INFO":"This file is a translation for open ticket 3.4.0",
|
"_INFO":"This file is a translation for open ticket 3.5.5",
|
||||||
|
|
||||||
"errors":{
|
"errors":{
|
||||||
"missingArgsTitle":"Napačen argument!",
|
"missingArgsTitle":"Napačen argument!",
|
||||||
@@ -97,5 +97,39 @@
|
|||||||
"wait": "Počakajte!",
|
"wait": "Počakajte!",
|
||||||
"estimated": "Predvideni čas",
|
"estimated": "Predvideni čas",
|
||||||
"available": "Prepis je na voljo tukaj"
|
"available": "Prepis je na voljo tukaj"
|
||||||
|
},
|
||||||
|
"stats":{
|
||||||
|
"globalTitle":"Global Stats",
|
||||||
|
"ticketTitle":"Ticket Stats for {0}",
|
||||||
|
"userTitle":"User Stats for {0}",
|
||||||
|
"systemTitle":"System Stats",
|
||||||
|
"versionTitle":"Bot Version",
|
||||||
|
|
||||||
|
"ticketsCreated":"Tickets Created",
|
||||||
|
"ticketsClosed":"Tickets Closed",
|
||||||
|
"ticketsDeleted":"Tickets Deleted",
|
||||||
|
"ticketsReopened":"Tickets Reopened",
|
||||||
|
"ticketsAutoclosed":"Tickets Autoclosed",
|
||||||
|
"transcriptsCreated":"Transcripts Created",
|
||||||
|
"startupDate":"Startup Date",
|
||||||
|
"latestUpdate":"Latest Update",
|
||||||
|
"ticketCreatedOn":"Ticket Created On",
|
||||||
|
"ticketCreatedBy":"Ticket Created By",
|
||||||
|
"messagesSent":"Messages Sent",
|
||||||
|
"status":"Status",
|
||||||
|
"participants":"Participants",
|
||||||
|
"role":"Role",
|
||||||
|
|
||||||
|
"switches":{
|
||||||
|
"globalAdmin":"Global Admin",
|
||||||
|
"ticketAdmin":"Ticket Admin",
|
||||||
|
"member":"Member",
|
||||||
|
"open":"Open",
|
||||||
|
"reopened":"Reopened",
|
||||||
|
"closed":"Closed",
|
||||||
|
"autoclosed":"Autoclosed"
|
||||||
|
},
|
||||||
|
|
||||||
|
"errorUserNotFound":"This user can't be found in the stats database!"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+36
-2
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"_CREDITS":"Redactado#1673 & josuens14#5267",
|
"_CREDITS":"redactado & josuens",
|
||||||
"_INFO":"This file is a translation for open ticket 3.4.0",
|
"_INFO":"This file is a translation for open ticket 3.5.5",
|
||||||
|
|
||||||
"errors":{
|
"errors":{
|
||||||
"missingArgsTitle":"¡Argumentos inválidos!",
|
"missingArgsTitle":"¡Argumentos inválidos!",
|
||||||
@@ -97,5 +97,39 @@
|
|||||||
"wait":"¡Por favor, espere!",
|
"wait":"¡Por favor, espere!",
|
||||||
"estimated":"Tiempo estimado",
|
"estimated":"Tiempo estimado",
|
||||||
"available":"La transcripción estará disponible aquí"
|
"available":"La transcripción estará disponible aquí"
|
||||||
|
},
|
||||||
|
"stats":{
|
||||||
|
"globalTitle":"Estadísticas Globales",
|
||||||
|
"ticketTitle":"Estadísitcas para el ticket {0}",
|
||||||
|
"userTitle":"Estadísticas para el usuario {0}",
|
||||||
|
"systemTitle":"Estadísticas del sistema",
|
||||||
|
"versionTitle":"Versión del bot",
|
||||||
|
|
||||||
|
"ticketsCreated":"Tickets Creados",
|
||||||
|
"ticketsClosed":"Tickets Cerrados",
|
||||||
|
"ticketsDeleted":"Tickets Eliminados",
|
||||||
|
"ticketsReopened":"Tickets Reabiertos",
|
||||||
|
"ticketsAutoclosed":"Tickets Cerrados automáticamente",
|
||||||
|
"transcriptsCreated":"Transcripciones Creadas",
|
||||||
|
"startupDate":"Fecha de Inicio",
|
||||||
|
"latestUpdate":"Última Actualización",
|
||||||
|
"ticketCreatedOn":"Ticket creado el",
|
||||||
|
"ticketCreatedBy":"Ticket creado por",
|
||||||
|
"messagesSent":"Mensajes enviados",
|
||||||
|
"status":"Estado",
|
||||||
|
"participants":"Participantes",
|
||||||
|
"role":"Rol",
|
||||||
|
|
||||||
|
"switches":{
|
||||||
|
"globalAdmin":"Admin Global",
|
||||||
|
"ticketAdmin":"Admin del Ticket",
|
||||||
|
"member":"Miembro",
|
||||||
|
"open":"Abierto",
|
||||||
|
"reopened":"Reabierto",
|
||||||
|
"closed":"Cerrado",
|
||||||
|
"autoclosed":"Cerrado automáticamente"
|
||||||
|
},
|
||||||
|
|
||||||
|
"errorUserNotFound":"¡Este usuario no pudo ser encontrado en la base de datos de estadísitcas!"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+104
-70
@@ -1,101 +1,135 @@
|
|||||||
{
|
{
|
||||||
"_CREDITS":"Mods HD#0661",
|
"_CREDITS":"modshd",
|
||||||
"_INFO":"This file is a translation for open ticket 3.4.0",
|
"_INFO":"This file is a translation for open ticket 3.5.5",
|
||||||
|
|
||||||
"errors":{
|
"errors":{
|
||||||
"missingArgsTitle":"อาร์กิวเมนต์ไม่ถูกต้อง!",
|
"missingArgsTitle":"อาร์กิวเมนต์ไม่ถูกต้อง",
|
||||||
"missingArgsDescription":"อาร์กิวเมนต์ไม่ครบ",
|
"missingArgsDescription":"ขาดอาร์กิวเมนต์",
|
||||||
"noPermsTitle":"ไม่มีสิทธิ์!",
|
"noPermsTitle":"คุณไม่มีสิทธิ์ในการใช้งาน",
|
||||||
"noPermsDescription":"คุณต้องมีสิทธิ์ ADMINISTRATOR หรืออยู่ในรายชื่อบทบาทที่อนุญาต!",
|
"noPermsDescription":"คุณต้องมีสิทธิ์ `ADMINISTRATOR` หรืออยู่ในรายการบทบาทที่ได้รับอนุญาตเพื่อใช้งาน",
|
||||||
"noPermsDelete":"เฉพาะผู้ดูแลระบบเท่านั้นที่สามารถลบตั๋วได้!",
|
"noPermsDelete":"เฉพาะผู้ดูแลระบบเท่านั้นที่สามารถลบห้องติดต่อได้",
|
||||||
"chooseFromListTitle":"ID ไม่ถูกต้อง",
|
"chooseFromListTitle":"ID ไม่ถูกต้อง",
|
||||||
"chooseFromListDescription":"เลือกหนึ่งใน ID ด้านล่าง:",
|
"chooseFromListDescription":"เลือกหนึ่งใน ID ด้านล่าง:",
|
||||||
"boterror":"ข้อผิดพลาดของบอท!",
|
"boterror":"ข้อผิดพลาดของบอท",
|
||||||
"notInTicketTitle":"คุณไม่ได้อยู่ในตั๋ว!",
|
"notInTicketTitle":"คุณไม่ได้อยู่ในห้องติดต่อ",
|
||||||
"notInTicketDescription":"คำสั่งนี้ไม่สามารถทำงานนอกตั๋วได้!",
|
"notInTicketDescription":"คำสั่งนี้ไม่สามารถทำงานนอกห้องติดต่อ",
|
||||||
"ticketDoesntExist":"ตั๋วนี้ไม่มีอยู่แล้ว!",
|
"ticketDoesntExist":"ห้องติดต่อนี้ไม่มีอีกต่อไป",
|
||||||
"roleDoesntExist":"บทบาทนี้ไม่มีอยู่แล้ว!",
|
"roleDoesntExist":"บทบาทนี้ไม่มีอีกต่อไป",
|
||||||
"anotherOption":"ตัวเลือกนี้ไม่ใช่ตั๋วแต่เป็นประเภทอื่น!",
|
"anotherOption":"ตัวเลือกนี้ไม่ใช่ห้องติดต่อ แต่เป็นประเภทอื่น",
|
||||||
"maxAmountTitle":"จำนวนสูงสุดแล้ว!",
|
"maxAmountTitle":"ถึงจำนวนสูงสุดแล้ว",
|
||||||
"maxAmountDescription":"คุณได้สร้างตั๋วครบจำนวนที่เราให้สร้างไว้แล้ว\nดังนั้นคุณไม่สามารถสร้างตั๋วใหม่ได้!",
|
"maxAmountDescription":"คุณได้ถึงจำนวนสูงสุดของห้องติดต่อที่อนุญาต\nดังนั้นคุณไม่สามารถสร้างใหม่ได้ในขณะนี้",
|
||||||
"somethingWentWrong":"เกิดข้อผิดพลาดบางอย่าง!\nโปรดลองอีกครั้งในครั้งถัดไป!"
|
"somethingWentWrong":"**มีบางอย่างผิดพลาด**\nกรุณาลองอีกครั้งในภายหลัง"
|
||||||
},
|
},
|
||||||
"commands":{
|
"commands":{
|
||||||
"userAddedTitle":"เพิ่ม {0} เข้าสู่ตั๋วนี้แล้ว!",
|
"userAddedTitle":"เพิ่ม {0} ในห้องติดต่อนี้",
|
||||||
"userRemovedTitle":"นำ {0} ออกจากตั๋วนี้แล้ว!",
|
"userRemovedTitle":"ลบ {0} ออกจากห้องติดต่อนี้",
|
||||||
"renameTitle":"เปลี่ยนชื่อเป็น {0}!",
|
"renameTitle":"เปลี่ยนชื่อเป็น {0}",
|
||||||
"closeTitle":"ปิดตั๋วนี้!",
|
"closeTitle":"ปิดห้องติดต่อนี้",
|
||||||
"deleteTitle":"กำลังลบตั๋วนี้...",
|
"deleteTitle":"กำลังลบห้องติดต่อนี้...",
|
||||||
"reopenTitle":"เปิดตั๋วนี้ใหม่!",
|
"reopenTitle":"เปิดห้องติดต่อนี้อีกครั้ง",
|
||||||
|
|
||||||
"claimTitle":"ตั๋วนี้ถูกเรียกเก็บโดย {0}",
|
"claimTitle":"ห้องติดต่อนี้ถูกรับเรื่องโดย {0}",
|
||||||
"unclaimTitle":"ไม่มีการเรียกเก็บตั๋วนี้อีกต่อไป!",
|
"unclaimTitle":"ห้องติดต่อนี้ไม่ได้ถูกรับเรื่องอีกแล้ว",
|
||||||
"changeTitle":"เปลี่ยนประเภทตั๋วเป็น {0}!",
|
"changeTitle":"เปลี่ยนประเภทห้องติดต่อเป็น {0}",
|
||||||
|
|
||||||
"statsTitle":"นี่คือสถิติสำหรับ {0}!",
|
"statsTitle":"นี่คือสถิติสำหรับ {0}",
|
||||||
"autocloseTitle":"ตั๋วนี้จะถูกปิดอัตโนมัติหลังจาก {0}!",
|
"autocloseTitle":"ห้องติดต่อนี้จะถูกปิดอัตโนมัติหลังจาก {0}",
|
||||||
"autocloseRejectTitle":"ตั๋วนี้จะไม่ถูกปิดอัตโนมัติอีกต่อไป!",
|
"autocloseRejectTitle":"ห้องติดต่อนี้จะไม่ถูกปิดอัตโนมัติอีกต่อไป",
|
||||||
"autocloseWarn":"สิ่งนี้มีผลต่อตั๋วที่ไม่มีการเคลื่อนไหว!",
|
"autocloseWarn":"ส่วนนี้มีผลกับห้องติดต่อที่ไม่ได้ใช้งาน",
|
||||||
|
|
||||||
"goToTicket":"ไปยังตั๋ว",
|
"goToTicket":"ไปที่ห้องติดต่อ",
|
||||||
"ticketWarning":"Embed อยู่ในข้อความข้างล่าง",
|
"ticketWarning":"Embed อยู่ในข้อความด้านล่าง",
|
||||||
"maxTicketWarning":"**คำเตือน:** _คุณสามารถสร้างตั๋วได้สูงสุด {0} ตั๋วต่อครั้ง!_"
|
"maxTicketWarning":"**คำเตือน:** _คุณสามารถสร้างห้องติดต่อได้แค่ {0} ห้องติดต่อคน_"
|
||||||
},
|
},
|
||||||
"helpMenu":{
|
"helpMenu":{
|
||||||
"title":"คำสั่งที่มีอยู่:",
|
"title":"คำสั่งที่ใช้ได้:",
|
||||||
"header1":"**ไปที่ {0} เพื่อสร้างตั๋ว!**\n\n",
|
"header1":"**ไปที่ {0} เพื่อสร้างห้องติดต่อ**\n\n",
|
||||||
"header2":"**ใช้คำสั่ง `/new` หรือ `/ticket` เพื่อสร้างตั๋ว!**\n\n",
|
"header2":"**ใช้คำสั่ง `/new` หรือ `/ticket` เพื่อสร้างห้องติดต่อ**\n\n",
|
||||||
|
|
||||||
"msgCmd":"แสดง Embed พร้อมปุ่ม (สำหรับแอดมินเท่านั้น)",
|
"msgCmd":"สร้าง embed พร้อมปุ่ม (เฉพาะผู้ดูแลระบบ)",
|
||||||
"renameCmd":"เปลี่ยนชื่อตั๋ว (ห้ามมีช่องว่าง)",
|
"renameCmd":"เปลี่ยนชื่อห้องติดต่อ (ไม่มีช่องว่าง)",
|
||||||
"closeCmd":"ปิดตั๋ว",
|
"closeCmd":"ปิดห้องติดต่อ",
|
||||||
"deleteCmd":"ลบตั๋ว",
|
"deleteCmd":"ลบห้องติดต่อ",
|
||||||
"addCmd":"เพิ่มผู้ใช้เข้าสู่ตั๋ว",
|
"addCmd":"เพิ่มผู้ใช้ในห้องติดต่อ",
|
||||||
"removeCmd":"นำผู้ใช้ออกจากตั๋ว",
|
"removeCmd":"ลบผู้ใช้ออกจากห้องติดต่อ",
|
||||||
"reopenCmd":"เปิดตั๋วใหม่หลังจากถูกปิด",
|
"reopenCmd":"เปิดห้องติดต่ออีกครั้งหลังจากถูกปิด",
|
||||||
"changeCmd":"เปลี่ยนประเภทตั๋ว",
|
"changeCmd":"เปลี่ยนประเภทห้องติดต่อ",
|
||||||
"claimCmd":"เรียกเก็บตั๋ว",
|
"claimCmd":"รับเรื่องห้องติดต่อ",
|
||||||
"unclaimCmd":"ยกเลิกการเรียกเก็บตั๋ว",
|
"unclaimCmd":"ยกเลิกการรับเรื่องห้องติดต่อ",
|
||||||
"statsCmd":"ดูสถิติของตั๋ว",
|
"statsCmd":"ดูสถิติห้องติดต่อ",
|
||||||
"autocloseCmd":"ตั้งเวลาปิดตั๋วโดยอัตโนมัติ"
|
"autocloseCmd":"ตั้งค่าการปิดห้องติดต่ออัตโนมัติ"
|
||||||
},
|
},
|
||||||
"buttons":{
|
"buttons":{
|
||||||
"close":"ปิดตั๋ว",
|
"close":"ปิดห้องติดต่อ",
|
||||||
"delete":"ลบตั๋ว",
|
"delete":"ลบห้องติดต่อ",
|
||||||
"reopen":"เปิดตั๋วใหม่",
|
"reopen":"เปิดห้องติดต่ออีกครั้ง",
|
||||||
"closeWithReason":"ปิดตั๋วพร้อมเหตุผล"
|
"closeWithReason":"ปิดด้วยเหตุผล"
|
||||||
},
|
},
|
||||||
"messages":{
|
"messages":{
|
||||||
"closedDescription":"ตอนนี้เฉพาะผู้ดูแลเท่านั้นที่สามารถพูดได้ในตั๋วนี้!\n\n*คลิกที่ปุ่มด้านล่างเพื่อลบหรือเปิดตั๋วใหม่!*",
|
"closedDescription":"เฉพาะผู้ดูแลระบบเท่านั้นที่สามารถพูดคุยในห้องติดต่อนี้ได้\n\n*คลิกที่ปุ่มด้านล่างเพื่อลบหรือเปิดห้องติดต่อนี้อีกครั้ง*",
|
||||||
"createdTitle":"สร้างตั๋วแล้ว!",
|
"createdTitle":"สร้างห้องติดต่อแล้ว",
|
||||||
"createdDescription":"ตั๋วของคุณถูกสร้างเรียบร้อยแล้ว คุณจะได้รับการแจ้งเตือนด้วยการพิมพ์ข้อความด้วย @ ตามตั๋วของคุณ!",
|
"createdDescription":"ห้องติดต่อของคุณถูกสร้างแล้ว คุณสามารถตรวจสอบได้จากการแจ้งเตือน",
|
||||||
|
|
||||||
"newTicketDmTitle":"ตั๋วใหม่!",
|
"newTicketDmTitle":"ห้องติดต่อใหม่",
|
||||||
"closedTicketDmTitle":"ตั๋วถูกปิด!",
|
"closedTicketDmTitle":"ปิดห้องติดต่อ",
|
||||||
"deletedTicketDmTitle":"ตั๋วถูกลบ!",
|
"deletedTicketDmTitle":"ลบห้องติดต่อ",
|
||||||
"closedTicketDmDescription":"ตั๋วของคุณถูกปิด!",
|
"closedTicketDmDescription":"ห้องติดต่อของคุณถูกปิด",
|
||||||
"deletedTicketDmDescription":"ตั๋วของคุณถูกลบ!",
|
"deletedTicketDmDescription":"ห้องติดต่อของคุณถูกลบ",
|
||||||
"reopenTicketDmTitle":"ตั๋วถูกเปิดใหม่!",
|
"reopenTicketDmTitle":"เปิดห้องติดต่ออีกครั้ง",
|
||||||
"reopenTicketDmDescription":"ตั๋วของคุณถูกเปิดใหม่!",
|
"reopenTicketDmDescription":"ห้องติดต่อของคุณถูกเปิดอีกครั้ง",
|
||||||
|
|
||||||
"chooseCategory":"เลือกหมวดหมู่:",
|
"chooseCategory":"เลือกหมวดหมู่:",
|
||||||
"gettingdeleted":"กำลังลบตั๋ว...",
|
"gettingdeleted":"กำลังลบห้องติดต่อ...",
|
||||||
|
|
||||||
"none":"ไม่มี",
|
"none":"ไม่มี",
|
||||||
"reason":"เหตุผล",
|
"reason":"เหตุผล",
|
||||||
"createdat":"สร้างเมื่อ",
|
"createdat":"สร้างเมื่อ",
|
||||||
"openedby":"เปิดโดย",
|
"openedby":"เปิดโดย",
|
||||||
"deletedby":"ลบโดย",
|
"deletedby":"ถูกลบโดย",
|
||||||
"closedby":"ปิดโดย",
|
"closedby":"ถูกปิดโดย",
|
||||||
|
|
||||||
"modalreason":"เหตุผลที่ต้องการปิดตั๋ว?",
|
"modalreason":"เหตุผลในการปิดห้องติดต่อนี้คืออะไร?",
|
||||||
"chooseATicket": "เลือกตั๋ว"
|
"chooseATicket": "เลือกห้องติดต่อ"
|
||||||
},
|
},
|
||||||
"transcripts":{
|
"transcripts":{
|
||||||
"title":"บันทึกข้อความ",
|
"title":"บันทึกการสนทนา",
|
||||||
"processed":"กำลังประมวลผลบันทึกข้อความ",
|
"processed":"บันทึกการสนทนากำลังดำเนินการ",
|
||||||
"wait":"โปรดรอสักครู่!",
|
"wait":"กรุณารอ...",
|
||||||
"estimated":"เวลาโดยประมาณ",
|
"estimated":"เวลาโดยประมาณ",
|
||||||
"available":"บันทึกข้อความพร้อมใช้งานที่นี่"
|
"available":"บันทึกการสนทนาสามารถใช้งานได้ที่นี่"
|
||||||
|
},
|
||||||
|
"stats":{
|
||||||
|
"globalTitle":"สถิติทั้งหมด",
|
||||||
|
"ticketTitle":"สถิติห้องติดต่อสำหรับ {0}",
|
||||||
|
"userTitle":"สถิติผู้ใช้สำหรับ {0}",
|
||||||
|
"systemTitle":"สถานะระบบ",
|
||||||
|
"versionTitle":"เวอร์ชั่นของบอท",
|
||||||
|
|
||||||
|
"ticketsCreated":"ห้องติดต่อที่สร้าง",
|
||||||
|
"ticketsClosed":"ห้องติดต่อที่ปิด",
|
||||||
|
"ticketsDeleted":"ห้องติดต่อที่ลบ:",
|
||||||
|
"ticketsReopened":"ห้องติดต่อที่เปิดใหม่",
|
||||||
|
"ticketsAutoclosed":"ห้องติดต่อที่ปิดโดยอัตโนมัติ",
|
||||||
|
"transcriptsCreated":"ทรานสคริปต์ที่สร้าง",
|
||||||
|
"startupDate":"วันที่เริ่มต้น",
|
||||||
|
"latestUpdate":"การอัปเดตล่าสุด",
|
||||||
|
"ticketCreatedOn":"ห้องติดต่อที่สร้างเมื่อ",
|
||||||
|
"ticketCreatedBy":"ห้องติดต่อที่สร้างโดย",
|
||||||
|
"messagesSent":"ข้อความที่ส่ง",
|
||||||
|
"status":"สถานะ",
|
||||||
|
"participants":"ผู้มีส่วนร่วม",
|
||||||
|
"role":"บทบาท",
|
||||||
|
|
||||||
|
"switches":{
|
||||||
|
"globalAdmin":"ผู้ดูแลทั้งหมด",
|
||||||
|
"ticketAdmin":"ผู้ดูแลห้องติดต่อ",
|
||||||
|
"member":"ผู้ใช้",
|
||||||
|
"open":"เปิด",
|
||||||
|
"reopened":"เปิดใหม่",
|
||||||
|
"closed":"ปิด",
|
||||||
|
"autoclosed":"ปิดโดยอัตโนมัติ"
|
||||||
|
},
|
||||||
|
|
||||||
|
"errorUserNotFound":"ไม่พบผู้ใช้ในฐานข้อมูลสถิติ"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+36
-2
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"_CREDITS":"Hydrâelčhâvø#1575",
|
"_CREDITS":"Hydra#0009",
|
||||||
"_INFO":"This file is a translation for open ticket 3.4.0",
|
"_INFO":"This file is a translation for open ticket 3.5.5",
|
||||||
|
|
||||||
"errors":{
|
"errors":{
|
||||||
"missingArgsTitle":"Geçersiz argümanlar!",
|
"missingArgsTitle":"Geçersiz argümanlar!",
|
||||||
@@ -97,5 +97,39 @@
|
|||||||
"wait":"Lütfen Bekleyiniz!",
|
"wait":"Lütfen Bekleyiniz!",
|
||||||
"estimated":"Tahmini Süre",
|
"estimated":"Tahmini Süre",
|
||||||
"available":"Transkript burada mevcuttur"
|
"available":"Transkript burada mevcuttur"
|
||||||
|
},
|
||||||
|
"stats":{
|
||||||
|
"globalTitle":"Global Stats",
|
||||||
|
"ticketTitle":"Ticket Stats for {0}",
|
||||||
|
"userTitle":"User Stats for {0}",
|
||||||
|
"systemTitle":"System Stats",
|
||||||
|
"versionTitle":"Bot Version",
|
||||||
|
|
||||||
|
"ticketsCreated":"Tickets Created",
|
||||||
|
"ticketsClosed":"Tickets Closed",
|
||||||
|
"ticketsDeleted":"Tickets Deleted",
|
||||||
|
"ticketsReopened":"Tickets Reopened",
|
||||||
|
"ticketsAutoclosed":"Tickets Autoclosed",
|
||||||
|
"transcriptsCreated":"Transcripts Created",
|
||||||
|
"startupDate":"Startup Date",
|
||||||
|
"latestUpdate":"Latest Update",
|
||||||
|
"ticketCreatedOn":"Ticket Created On",
|
||||||
|
"ticketCreatedBy":"Ticket Created By",
|
||||||
|
"messagesSent":"Messages Sent",
|
||||||
|
"status":"Status",
|
||||||
|
"participants":"Participants",
|
||||||
|
"role":"Role",
|
||||||
|
|
||||||
|
"switches":{
|
||||||
|
"globalAdmin":"Global Admin",
|
||||||
|
"ticketAdmin":"Ticket Admin",
|
||||||
|
"member":"Member",
|
||||||
|
"open":"Open",
|
||||||
|
"reopened":"Reopened",
|
||||||
|
"closed":"Closed",
|
||||||
|
"autoclosed":"Autoclosed"
|
||||||
|
},
|
||||||
|
|
||||||
|
"errorUserNotFound":"This user can't be found in the stats database!"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,135 @@
|
|||||||
|
{
|
||||||
|
"_CREDITS":"ander",
|
||||||
|
"_INFO":"Цей файл є перекладом для open ticket 3.5.5",
|
||||||
|
|
||||||
|
"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":"Транскрипція доступна тут"
|
||||||
|
},
|
||||||
|
"stats":{
|
||||||
|
"globalTitle":"Загальна статистика",
|
||||||
|
"ticketTitle":"Статистика тікету для {0}",
|
||||||
|
"userTitle":"Статистика корстувача для {0}",
|
||||||
|
"systemTitle":"Системна статистика",
|
||||||
|
"versionTitle":"Версія бота",
|
||||||
|
|
||||||
|
"ticketsCreated":"Тікет створен",
|
||||||
|
"ticketsClosed":"Тікет закрито",
|
||||||
|
"ticketsDeleted":"Тікет видалено",
|
||||||
|
"ticketsReopened":"Тікет перевідкритий",
|
||||||
|
"ticketsAutoclosed":"Тікет автоматично закритий",
|
||||||
|
"transcriptsCreated":"Транскрипт створено",
|
||||||
|
"startupDate":"Дата запуску",
|
||||||
|
"latestUpdate":"Останнє оновлення",
|
||||||
|
"ticketCreatedOn":"Тікет створено",
|
||||||
|
"ticketCreatedBy":"Тікет створено",
|
||||||
|
"messagesSent":"Повідомлення відправлено",
|
||||||
|
"status":"Стан",
|
||||||
|
"participants":"Учасники",
|
||||||
|
"role":"Роль",
|
||||||
|
|
||||||
|
"switches":{
|
||||||
|
"globalAdmin":"Головна",
|
||||||
|
"ticketAdmin":"Тікет",
|
||||||
|
"member":"Учасник",
|
||||||
|
"open":"Відкрити",
|
||||||
|
"reopened":"Перевідкритий",
|
||||||
|
"closed":"Закритий",
|
||||||
|
"autoclosed":"Автоматично закритий"
|
||||||
|
},
|
||||||
|
|
||||||
|
"errorUserNotFound":"Учасник не знайдений у базі даних статистики!"
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
Binary file not shown.
|
Before Width: | Height: | Size: 65 KiB |
+10
-10
@@ -1,28 +1,28 @@
|
|||||||
{
|
{
|
||||||
"name": "open-ticket",
|
"name": "open-ticket",
|
||||||
"version": "3.4.0",
|
"author": "DJdj Development",
|
||||||
"description": "This is an open-source discord ticket bot, you can configure it and it comes with cool features like a transcript.",
|
"version": "3.5.5",
|
||||||
|
"description": "The most advanced open-source discord ticket bot with HTML transcripts and plugins! It uses discord.js v14 & no database required!",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "node index.js",
|
"start": "node index.js",
|
||||||
"test": "node index.js --devconfig",
|
"test": "node index.js --devconfig --noerrorupload",
|
||||||
"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"
|
|
||||||
},
|
},
|
||||||
"author": "DJdj Development",
|
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"axios": "^0.27.2",
|
"axios": "^1.6.2",
|
||||||
"chalk": "^5.0.1",
|
"chalk": "^5.0.1",
|
||||||
"discord.js": "^14.11.0"
|
"discord.js": "^14.14.1"
|
||||||
},
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "git+https://github.com/DJj123dj/open-ticket.git"
|
"url": "git+https://github.com/DJj123dj/open-ticket.git"
|
||||||
},
|
},
|
||||||
"bugs": {
|
"bugs": {
|
||||||
"url": "https://github.com/DJj123dj/open-ticket/issues"
|
"url": "https://github.com/DJj123dj/open-ticket/issues",
|
||||||
|
"email": "support@dj-dj.be"
|
||||||
},
|
},
|
||||||
"homepage": "https://github.com/DJj123dj/open-ticket#readme"
|
"homepage": "https://openticket.dj-dj.be"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,6 +27,10 @@
|
|||||||
"valueTextColor":"#ffffff",
|
"valueTextColor":"#ffffff",
|
||||||
"hideBackgroundColor":"#40444a",
|
"hideBackgroundColor":"#40444a",
|
||||||
"hideTextColor":"#ffffff"
|
"hideTextColor":"#ffffff"
|
||||||
|
},
|
||||||
|
"favicon":{
|
||||||
|
"enableCustomFavicon":false,
|
||||||
|
"imageUrl":"https://transcripts.dj-dj.be/favicon.png"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user