Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
eab11361cb | ||
|
|
b281bba36f | ||
|
|
5e38573aed | ||
|
|
da7b6d487c | ||
|
|
6bf4e5f4bb | ||
|
|
213f532a3c | ||
|
|
45bd88e4d2 | ||
|
|
4eb8658459 | ||
|
|
b37118fee2 | ||
|
|
026caba68a | ||
|
|
2003f8801a | ||
|
|
473bacf13a | ||
|
|
8b3f2bc61a | ||
|
|
3aa373c33c | ||
|
|
9b6263e583 | ||
|
|
3e066d08ce | ||
|
|
aa48e28162 | ||
|
|
dc660ed94a | ||
|
|
e02ecf9553 | ||
|
|
23acc0926f |
No files matched your search
@@ -1,40 +0,0 @@
|
|||||||
---
|
|
||||||
name: "\U0001F41B Bug report"
|
|
||||||
about: Create a report to help us improve
|
|
||||||
title: "[BUG]"
|
|
||||||
labels: Bug
|
|
||||||
assignees: ""
|
|
||||||
---
|
|
||||||
|
|
||||||
**Describe the bug**
|
|
||||||
A clear and concise description of what the bug is.
|
|
||||||
|
|
||||||
**To Reproduce**
|
|
||||||
Steps to reproduce the behavior:
|
|
||||||
|
|
||||||
1. Go to '...'
|
|
||||||
2. Click on '....'
|
|
||||||
3. Scroll down to '....'
|
|
||||||
4. See error
|
|
||||||
|
|
||||||
**Expected behavior**
|
|
||||||
A clear and concise description of what you expected to happen.
|
|
||||||
|
|
||||||
**Screenshots**
|
|
||||||
If applicable, add screenshots to help explain your problem.
|
|
||||||
|
|
||||||
**Desktop (please complete the following information):**
|
|
||||||
|
|
||||||
- OS: [e.g. iOS]
|
|
||||||
- Browser [e.g. chrome, safari]
|
|
||||||
- Version [e.g. 22]
|
|
||||||
|
|
||||||
**Smartphone (please complete the following information):**
|
|
||||||
|
|
||||||
- Device: [e.g. iPhone6]
|
|
||||||
- OS: [e.g. iOS8.1]
|
|
||||||
- Browser [e.g. stock browser, safari]
|
|
||||||
- Version [e.g. 22]
|
|
||||||
|
|
||||||
**Additional context**
|
|
||||||
Add any other context about the problem here.
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
---
|
|
||||||
name: "❓Suggest an Idea?"
|
|
||||||
about: Suggest an idea for SupportBot?
|
|
||||||
title: "[SUGGESTION]"
|
|
||||||
labels: Suggestion
|
|
||||||
assignees: ""
|
|
||||||
---
|
|
||||||
|
|
||||||
**Is your feature request related to a problem? Please describe.**
|
|
||||||
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
|
||||||
|
|
||||||
**Describe the solution you'd like**
|
|
||||||
A clear and concise description of what you want to happen.
|
|
||||||
|
|
||||||
**Describe alternatives you've considered**
|
|
||||||
A clear and concise description of any alternative solutions or features you've considered.
|
|
||||||
|
|
||||||
**Additional context**
|
|
||||||
Add any other context or screenshots about the feature request here.
|
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
# This workflow will do a clean installation of node dependencies, build the source code and run tests across different versions of node
|
|
||||||
# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions
|
|
||||||
|
|
||||||
name: Node.js CI
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [dev, release]
|
|
||||||
pull_request:
|
|
||||||
branches: [dev, release]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
node-version: [16.x, 17.x]
|
|
||||||
# See supported Node.js release schedule at https://nodejs.org/en/about/releases/
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
- name: Use Node.js ${{ matrix.node-version }}
|
|
||||||
uses: actions/setup-node@v1
|
|
||||||
with:
|
|
||||||
node-version: ${{ matrix.node-version }}
|
|
||||||
- run: npm ci
|
|
||||||
- run: npm test
|
|
||||||
Vendored
BIN
Binary file not shown.
Vendored
BIN
Binary file not shown.
+3
-3
@@ -45,7 +45,7 @@ module.exports = new Command({
|
|||||||
!interaction.member.roles.cache.has(SupportStaff.id) &&
|
!interaction.member.roles.cache.has(SupportStaff.id) &&
|
||||||
!interaction.member.roles.cache.has(Admin.id)
|
!interaction.member.roles.cache.has(Admin.id)
|
||||||
)
|
)
|
||||||
return interaction.reply({ embeds: [NoPerms] });
|
return interaction.reply({ ephemeral: true, embeds: [NoPerms] });
|
||||||
|
|
||||||
let TicketData = await JSON.parse(
|
let TicketData = await JSON.parse(
|
||||||
fs.readFileSync("./Data/TicketData.json", "utf8")
|
fs.readFileSync("./Data/TicketData.json", "utf8")
|
||||||
@@ -56,9 +56,9 @@ module.exports = new Command({
|
|||||||
if (ticket === -1) {
|
if (ticket === -1) {
|
||||||
const Exists = new Discord.MessageEmbed()
|
const Exists = new Discord.MessageEmbed()
|
||||||
.setTitle("No Ticket Found!")
|
.setTitle("No Ticket Found!")
|
||||||
.setDescription(`${supportbot.NoValidTicket}`)
|
.setDescription(supportbot.NoValidTicket)
|
||||||
.setColor(supportbot.WarningColour);
|
.setColor(supportbot.WarningColour);
|
||||||
return interaction.reply({ embeds: [Exists] });
|
return interaction.reply({ ephemeral: true, embeds: [Exists] });
|
||||||
}
|
}
|
||||||
|
|
||||||
let uMember = interaction.options.getUser("user");
|
let uMember = interaction.options.getUser("user");
|
||||||
|
|||||||
+36
-17
@@ -57,7 +57,7 @@ module.exports = new Command({
|
|||||||
if (TicketData === -1) {
|
if (TicketData === -1) {
|
||||||
const Exists = new Discord.MessageEmbed()
|
const Exists = new Discord.MessageEmbed()
|
||||||
.setTitle("No Ticket Found!")
|
.setTitle("No Ticket Found!")
|
||||||
.setDescription(`${supportbot.NoValidTicket}`)
|
.setDescription(supportbot.NoValidTicket)
|
||||||
.setColor(supportbot.WarningColour);
|
.setColor(supportbot.WarningColour);
|
||||||
return interaction.followUp({ embeds: [Exists] });
|
return interaction.followUp({ embeds: [Exists] });
|
||||||
}
|
}
|
||||||
@@ -103,25 +103,38 @@ module.exports = new Command({
|
|||||||
const transcriptEmbed = new Discord.MessageEmbed()
|
const transcriptEmbed = new Discord.MessageEmbed()
|
||||||
.setTitle(supportbot.TranscriptTitle)
|
.setTitle(supportbot.TranscriptTitle)
|
||||||
.setColor(supportbot.EmbedColour)
|
.setColor(supportbot.EmbedColour)
|
||||||
.setFooter(supportbot.EmbedFooter)
|
.setFooter({
|
||||||
.addField(
|
text: supportbot.EmbedFooter,
|
||||||
"Ticket",
|
iconURL: interaction.user.displayAvatarURL(),
|
||||||
`${interaction.channel.name} (${interaction.channel.id})`
|
})
|
||||||
)
|
|
||||||
.addField("User", `${tUser}#${tUser.discriminator} (${tUser.id})`)
|
|
||||||
.addField("Closed By", interaction.user.tag)
|
|
||||||
.addField("Reason", reason);
|
|
||||||
const logEmbed = new Discord.MessageEmbed()
|
|
||||||
.setTitle(supportbot.TicketLog_Title)
|
|
||||||
.setColor(supportbot.EmbedColour)
|
|
||||||
.setFooter(supportbot.EmbedFooter)
|
|
||||||
.addField(
|
.addField(
|
||||||
"Ticket",
|
"Ticket",
|
||||||
`${interaction.channel.name} (${interaction.channel.id})`
|
`${interaction.channel.name} (${interaction.channel.id})`
|
||||||
)
|
)
|
||||||
.addField(
|
.addField(
|
||||||
"User",
|
"User",
|
||||||
`${tUser.username}#${tUser.discriminator} (${tUser.id})`
|
`${tUser?.username || "N/A"}#${tUser?.discriminator || "N/A"} (${
|
||||||
|
tUser?.id || ticket.user
|
||||||
|
})`
|
||||||
|
)
|
||||||
|
.addField("Closed By", interaction.user.tag)
|
||||||
|
.addField("Reason", reason);
|
||||||
|
const logEmbed = new Discord.MessageEmbed()
|
||||||
|
.setTitle(supportbot.TicketLog_Title)
|
||||||
|
.setColor(supportbot.EmbedColour)
|
||||||
|
.setFooter({
|
||||||
|
text: supportbot.EmbedFooter,
|
||||||
|
iconURL: interaction.user.displayAvatarURL(),
|
||||||
|
})
|
||||||
|
.addField(
|
||||||
|
"Ticket",
|
||||||
|
`${interaction.channel.name} (${interaction.channel.id})`
|
||||||
|
)
|
||||||
|
.addField(
|
||||||
|
"User",
|
||||||
|
`${tUser?.username || "N/A"}#${tUser?.discriminator || "N/A"} (${
|
||||||
|
tUser?.id || ticket.user
|
||||||
|
})`
|
||||||
)
|
)
|
||||||
.addField("Closed By", interaction.user.tag)
|
.addField("Closed By", interaction.user.tag)
|
||||||
.addField("Reason", reason);
|
.addField("Reason", reason);
|
||||||
@@ -155,8 +168,11 @@ module.exports = new Command({
|
|||||||
.catch(async (err) => {
|
.catch(async (err) => {
|
||||||
console.error(err);
|
console.error(err);
|
||||||
});
|
});
|
||||||
await tUser
|
|
||||||
.send({ embeds: [transcriptEmbed], files: [file] })
|
if (supportbot.DMTranscripts) {
|
||||||
|
|
||||||
|
await tUser
|
||||||
|
?.send({ embeds: [transcriptEmbed], files: [file] })
|
||||||
.catch(async (err) => {
|
.catch(async (err) => {
|
||||||
console.error(err);
|
console.error(err);
|
||||||
});
|
});
|
||||||
@@ -164,9 +180,12 @@ module.exports = new Command({
|
|||||||
ticket.subUsers.forEach(async (subUser) => {
|
ticket.subUsers.forEach(async (subUser) => {
|
||||||
await interaction.client.users.cache
|
await interaction.client.users.cache
|
||||||
.get(subUser)
|
.get(subUser)
|
||||||
.send({ embeds: [transcriptEmbed], files: [file] });
|
?.send({ embeds: [transcriptEmbed], files: [file] });
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
await interaction.channel.delete().catch(async (error) => {
|
await interaction.channel.delete().catch(async (error) => {
|
||||||
console.error(error);
|
console.error(error);
|
||||||
if (error.code !== Discord.Constants.APIErrors.UNKNOWN_CHANNEL) {
|
if (error.code !== Discord.Constants.APIErrors.UNKNOWN_CHANNEL) {
|
||||||
|
|||||||
+45
-1
@@ -29,6 +29,41 @@ module.exports = new Command({
|
|||||||
type: "STRING",
|
type: "STRING",
|
||||||
required: true,
|
required: true,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
name: "color",
|
||||||
|
description: "Embed HEX Color",
|
||||||
|
type: "STRING",
|
||||||
|
required: false,
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
name: "fieldtitle",
|
||||||
|
description: "Add an additional Embed Field",
|
||||||
|
type: "STRING",
|
||||||
|
required: false,
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
name: "fieldcontent",
|
||||||
|
description: "Add an additional Embed Field",
|
||||||
|
type: "STRING",
|
||||||
|
required: false,
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
name: "thumbnail",
|
||||||
|
description: "Embed Thumbnail URL",
|
||||||
|
type: "STRING",
|
||||||
|
required: false,
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
name: "image",
|
||||||
|
description: "Embed Image URL",
|
||||||
|
type: "STRING",
|
||||||
|
required: false,
|
||||||
|
},
|
||||||
],
|
],
|
||||||
permissions: ["SEND_MESSAGES"],
|
permissions: ["SEND_MESSAGES"],
|
||||||
|
|
||||||
@@ -54,10 +89,19 @@ module.exports = new Command({
|
|||||||
) {
|
) {
|
||||||
const EmbedTitle = interaction.options.getString("title");
|
const EmbedTitle = interaction.options.getString("title");
|
||||||
const EmbedSubject = interaction.options.getString("message");
|
const EmbedSubject = interaction.options.getString("message");
|
||||||
|
const EmbedColour = interaction.options.getString("color");
|
||||||
|
const EmbedThumbnail = interaction.options.getString("thumbnail");
|
||||||
|
const EmbedImage = interaction.options.getString("image");
|
||||||
|
const EmbedFieldContent = interaction.options.getString("fieldcontent");
|
||||||
|
const EmbedFieldTitle = interaction.options.getString("fieldtitle");
|
||||||
|
|
||||||
const EmbedMsg = new Discord.MessageEmbed()
|
const EmbedMsg = new Discord.MessageEmbed()
|
||||||
.setTitle(EmbedTitle)
|
.setTitle(EmbedTitle)
|
||||||
.setDescription(EmbedSubject);
|
.setDescription(EmbedSubject)
|
||||||
|
.addField(EmbedFieldTitle, EmbedFieldContent)
|
||||||
|
.setColor(EmbedColour)
|
||||||
|
.setThumbnail(EmbedThumbnail)
|
||||||
|
.setImage(EmbedImage);
|
||||||
|
|
||||||
interaction.reply({
|
interaction.reply({
|
||||||
embeds: [EmbedMsg],
|
embeds: [EmbedMsg],
|
||||||
|
|||||||
+9
-9
@@ -31,6 +31,8 @@ module.exports = new Command({
|
|||||||
botCommands += `**/${cmdconfig.HelpCommand}** ${cmdconfig.HelpCommandDesc}\n`;
|
botCommands += `**/${cmdconfig.HelpCommand}** ${cmdconfig.HelpCommandDesc}\n`;
|
||||||
botCommands += `**/${cmdconfig.InfoCommand}** ${cmdconfig.InfoCommandDesc}\n`;
|
botCommands += `**/${cmdconfig.InfoCommand}** ${cmdconfig.InfoCommandDesc}\n`;
|
||||||
botCommands += `**/${cmdconfig.PingCommand}** ${cmdconfig.PingCommandDesc}\n`;
|
botCommands += `**/${cmdconfig.PingCommand}** ${cmdconfig.PingCommandDesc}\n`;
|
||||||
|
botCommands += `**/${cmdconfig.UserInfoCommand}** ${cmdconfig.UserInfoCommandDesc}\n`;
|
||||||
|
botCommands += `**/${cmdconfig.SuggestCommand}** ${cmdconfig.SuggestCommandDesc}\n`;
|
||||||
|
|
||||||
let ticketCommands = "";
|
let ticketCommands = "";
|
||||||
ticketCommands += `**/${cmdconfig.OpenTicket}** ${cmdconfig.OpenTicketDesc}\n`;
|
ticketCommands += `**/${cmdconfig.OpenTicket}** ${cmdconfig.OpenTicketDesc}\n`;
|
||||||
@@ -39,6 +41,8 @@ module.exports = new Command({
|
|||||||
let staffCommands = "";
|
let staffCommands = "";
|
||||||
staffCommands += `**/${cmdconfig.TicketAdd}** ${cmdconfig.TicketAddDesc}\n`;
|
staffCommands += `**/${cmdconfig.TicketAdd}** ${cmdconfig.TicketAddDesc}\n`;
|
||||||
staffCommands += `**/${cmdconfig.TicketRemove}** ${cmdconfig.TicketRemoveDesc}\n`;
|
staffCommands += `**/${cmdconfig.TicketRemove}** ${cmdconfig.TicketRemoveDesc}\n`;
|
||||||
|
staffCommands += `**/${cmdconfig.UserInfoCommand}** ${cmdconfig.UserInfoCommandDesc}\n`;
|
||||||
|
staffCommands += `**/${cmdconfig.TranslateCommand}** ${cmdconfig.TranslateCommandDesc}\n`;
|
||||||
|
|
||||||
const HelpEmbed1 = new Discord.MessageEmbed()
|
const HelpEmbed1 = new Discord.MessageEmbed()
|
||||||
.setTitle(supportbot.Name + " Commands")
|
.setTitle(supportbot.Name + " Commands")
|
||||||
@@ -58,7 +62,10 @@ module.exports = new Command({
|
|||||||
)
|
)
|
||||||
|
|
||||||
.setColor(supportbot.EmbedColour)
|
.setColor(supportbot.EmbedColour)
|
||||||
.setFooter(supportbot.EmbedFooter, interaction.user.displayAvatarURL());
|
.setFooter({
|
||||||
|
text: supportbot.EmbedFooter,
|
||||||
|
iconURL: interaction.user.displayAvatarURL(),
|
||||||
|
});
|
||||||
|
|
||||||
if (
|
if (
|
||||||
interaction.member.roles.cache.has(SupportStaff.id) ||
|
interaction.member.roles.cache.has(SupportStaff.id) ||
|
||||||
@@ -71,16 +78,9 @@ module.exports = new Command({
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (supportbot.SendHelpPage === "dm") {
|
|
||||||
interaction.user.reply({
|
|
||||||
embeds: [HelpEmbed1],
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (supportbot.SendHelpPage === "channel") {
|
|
||||||
interaction.reply({
|
interaction.reply({
|
||||||
|
ephemeral: true,
|
||||||
embeds: [HelpEmbed1],
|
embeds: [HelpEmbed1],
|
||||||
});
|
});
|
||||||
}
|
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
+3
-3
@@ -55,9 +55,9 @@ module.exports = new Command({
|
|||||||
if (ticket === -1) {
|
if (ticket === -1) {
|
||||||
const Exists = new Discord.MessageEmbed()
|
const Exists = new Discord.MessageEmbed()
|
||||||
.setTitle("No Ticket Found!")
|
.setTitle("No Ticket Found!")
|
||||||
.setDescription(`${supportbot.NoValidTicket}`)
|
.setDescription(supportbot.NoValidTicket)
|
||||||
.setColor(supportbot.WarningColour);
|
.setColor(supportbot.WarningColour);
|
||||||
return interaction.reply({ embeds: [Exists] });
|
return interaction.reply({ ephemeral: true, embeds: [Exists] });
|
||||||
}
|
}
|
||||||
|
|
||||||
let uMember = interaction.options.getUser("user");
|
let uMember = interaction.options.getUser("user");
|
||||||
@@ -68,7 +68,7 @@ module.exports = new Command({
|
|||||||
)
|
)
|
||||||
.setColor(supportbot.ErrorColour);
|
.setColor(supportbot.ErrorColour);
|
||||||
|
|
||||||
if (!uMember) return interaction.reply({ embeds: [UserNotExist] });
|
if (!uMember) return interaction.reply({ ephemeral: true, embeds: [UserNotExist] });
|
||||||
|
|
||||||
await interaction.channel.permissionOverwrites.edit(uMember.id, {
|
await interaction.channel.permissionOverwrites.edit(uMember.id, {
|
||||||
VIEW_CHANNEL: false,
|
VIEW_CHANNEL: false,
|
||||||
|
|||||||
+6
-3
@@ -34,7 +34,7 @@ module.exports = new Command({
|
|||||||
|
|
||||||
const NoChannel = new Discord.MessageEmbed()
|
const NoChannel = new Discord.MessageEmbed()
|
||||||
.setTitle("Missing Channel!")
|
.setTitle("Missing Channel!")
|
||||||
.setDescription(`${supportbot.InvalidChannel}`)
|
.setDescription(supportbot.InvalidChannel)
|
||||||
.setColor(supportbot.ErrorColour);
|
.setColor(supportbot.ErrorColour);
|
||||||
|
|
||||||
if (!suggestChannel) return interaction.reply({ embeds: [NoChannel] });
|
if (!suggestChannel) return interaction.reply({ embeds: [NoChannel] });
|
||||||
@@ -45,7 +45,10 @@ module.exports = new Command({
|
|||||||
.addField("Suggestion", suggestion, true)
|
.addField("Suggestion", suggestion, true)
|
||||||
.addField("From", `<@${interaction.user.id}>`)
|
.addField("From", `<@${interaction.user.id}>`)
|
||||||
.setThumbnail(interaction.user.displayAvatarURL())
|
.setThumbnail(interaction.user.displayAvatarURL())
|
||||||
.setFooter(supportbot.EmbedFooter, interaction.user.displayAvatarURL())
|
.setFooter({
|
||||||
|
text: supportbot.EmbedFooter,
|
||||||
|
iconURL: interaction.user.displayAvatarURL(),
|
||||||
|
})
|
||||||
.setColor(supportbot.EmbedColour);
|
.setColor(supportbot.EmbedColour);
|
||||||
|
|
||||||
const suggestionMsg = await suggestChannel.send({ embeds: [SuggestEmbed] });
|
const suggestionMsg = await suggestChannel.send({ embeds: [SuggestEmbed] });
|
||||||
@@ -62,6 +65,6 @@ module.exports = new Command({
|
|||||||
.addField("Sent to:", `<#${suggestChannel.id}>`)
|
.addField("Sent to:", `<#${suggestChannel.id}>`)
|
||||||
.setColor(supportbot.SuccessColour);
|
.setColor(supportbot.SuccessColour);
|
||||||
|
|
||||||
return interaction.reply({ embeds: [Submitted] });
|
return interaction.reply({ ephemeral: true, mbeds: [Submitted] });
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
+76
-77
@@ -31,15 +31,22 @@ module.exports = new Command({
|
|||||||
permissions: ["SEND_MESSAGES"],
|
permissions: ["SEND_MESSAGES"],
|
||||||
|
|
||||||
async run(interaction) {
|
async run(interaction) {
|
||||||
|
let disableCommand = true;
|
||||||
|
if (interaction.isCommand() && disableCommand)
|
||||||
|
return interaction.reply({
|
||||||
|
content: "This command is disabled",
|
||||||
|
ephemeral: true,
|
||||||
|
});
|
||||||
|
let department = interaction.customId?.split("-")[1] || null;
|
||||||
let TicketData = await JSON.parse(
|
let TicketData = await JSON.parse(
|
||||||
fs.readFileSync("./Data/TicketData.json", "utf8")
|
fs.readFileSync("./Data/TicketData.json", "utf8")
|
||||||
);
|
);
|
||||||
const { getRole, getChannel, getCategory } = interaction.client;
|
const { getRole, getCategory } = interaction.client;
|
||||||
let User = interaction.guild.members.cache.get(interaction.user.id);
|
let User = interaction.guild.members.cache.get(interaction.user.id);
|
||||||
|
|
||||||
if (
|
if (
|
||||||
supportbot.MaxAllowedTickets &&
|
supportbot.MaxAllowedTickets &&
|
||||||
TicketData.tickets.filter((t) => t.user == interaction.user.id && t.open)
|
TicketData.tickets.filter((t) => t.user === interaction.user.id && t.open)
|
||||||
.length >= supportbot.MaxAllowedTickets
|
.length >= supportbot.MaxAllowedTickets
|
||||||
) {
|
) {
|
||||||
return interaction.reply({
|
return interaction.reply({
|
||||||
@@ -73,39 +80,29 @@ module.exports = new Command({
|
|||||||
|
|
||||||
const TicketExists = new MessageEmbed()
|
const TicketExists = new MessageEmbed()
|
||||||
.setTitle("Ticket Exists!")
|
.setTitle("Ticket Exists!")
|
||||||
.setDescription(`${supportbot.TicketExists}`)
|
.setDescription(supportbot.TicketExists);
|
||||||
.setColor(supportbot.WarningColour);
|
|
||||||
|
|
||||||
if (
|
if (
|
||||||
await interaction.guild.channels.cache.find((ticketChannel) => {
|
await interaction.guild.channels.cache.find(
|
||||||
ticketChannel.name === `${supportbot.TicketPrefix}${ticketNumberID}`;
|
(ticketChannel) =>
|
||||||
})
|
ticketChannel.name === `${supportbot.TicketPrefix}${ticketNumberID}`
|
||||||
|
)
|
||||||
) {
|
) {
|
||||||
return await interaction.reply({ embeds: [TicketExists] });
|
return await interaction.reply({
|
||||||
|
embeds: [TicketExists],
|
||||||
|
ephemeral: true,
|
||||||
|
});
|
||||||
}
|
}
|
||||||
const Staff = await getRole(supportbot.Staff, interaction.guild);
|
const Staff = await getRole(supportbot.Staff, interaction.guild);
|
||||||
const Admin = await getRole(supportbot.Admin, interaction.guild);
|
const Admin = await getRole(supportbot.Admin, interaction.guild);
|
||||||
const DeptRole1 = await getRole(
|
if (!Staff || !Admin)
|
||||||
supportbot.DepartmentRole_1,
|
|
||||||
interaction.guild
|
|
||||||
);
|
|
||||||
const DeptRole2 = await getRole(
|
|
||||||
supportbot.DepartmentRole_2,
|
|
||||||
interaction.guild
|
|
||||||
);
|
|
||||||
const DeptRole3 = await getRole(
|
|
||||||
supportbot.DepartmentRole_3,
|
|
||||||
interaction.guild
|
|
||||||
);
|
|
||||||
if (!Staff || !Admin || !DeptRole1 || !DeptRole2 || !DeptRole3)
|
|
||||||
return interaction.reply({
|
return interaction.reply({
|
||||||
content:
|
content:
|
||||||
"Some roles seem to be missing!\nPlease check for errors when starting the bot.",
|
"Some roles seem to be missing!\nPlease check for errors when starting the bot.",
|
||||||
ephemeral: true,
|
ephemeral: true,
|
||||||
});
|
});
|
||||||
const Author = interaction.user;
|
|
||||||
let TicketCategory = await getCategory(
|
let TicketCategory = await getCategory(
|
||||||
supportbot.TicketCategory,
|
supportbot.Departments[department].category || supportbot.TicketCategory,
|
||||||
interaction.guild
|
interaction.guild
|
||||||
);
|
);
|
||||||
const ticketChannel = await interaction.guild.channels.create(
|
const ticketChannel = await interaction.guild.channels.create(
|
||||||
@@ -119,7 +116,7 @@ module.exports = new Command({
|
|||||||
allow: [Permissions.FLAGS.VIEW_CHANNEL],
|
allow: [Permissions.FLAGS.VIEW_CHANNEL],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: Author.id,
|
id: interaction.user.id,
|
||||||
allow: [Permissions.FLAGS.VIEW_CHANNEL],
|
allow: [Permissions.FLAGS.VIEW_CHANNEL],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -129,20 +126,20 @@ module.exports = new Command({
|
|||||||
],
|
],
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
if (supportbot.AllowStaff) {
|
if (supportbot.AllowAllStaff) {
|
||||||
ticketChannel.permissionOverwrites.edit(Staff.id, {
|
await ticketChannel.permissionOverwrites.edit(Staff.id, {
|
||||||
VIEW_CHANNEL: true,
|
VIEW_CHANNEL: true,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
if (supportbot.TicketDepartments) {
|
if (supportbot.TicketDepartments && !department) {
|
||||||
ticketChannel.permissionOverwrites.edit(interaction.user.id, {
|
await ticketChannel.permissionOverwrites.edit(interaction.user.id, {
|
||||||
SEND_MESSAGES: false,
|
SEND_MESSAGES: false,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
await TicketData.tickets.push({
|
await TicketData.tickets.push({
|
||||||
id: ticketChannel.id,
|
id: ticketChannel.id,
|
||||||
name: ticketChannel.name,
|
name: ticketChannel.name,
|
||||||
user: Author.id,
|
user: interaction.user.id,
|
||||||
number: ticketNumberID,
|
number: ticketNumberID,
|
||||||
reason: TicketSubject,
|
reason: TicketSubject,
|
||||||
open: true,
|
open: true,
|
||||||
@@ -186,23 +183,23 @@ module.exports = new Command({
|
|||||||
.setColor(supportbot.EmbedColour);
|
.setColor(supportbot.EmbedColour);
|
||||||
|
|
||||||
if (supportbot.TicketSubject === "embed") {
|
if (supportbot.TicketSubject === "embed") {
|
||||||
if (TicketSubject != "No Reason Provided.") {
|
if (TicketSubject !== "No Reason Provided.") {
|
||||||
TicketMessage.addFields({ name: "Reason", value: TicketSubject });
|
TicketMessage.addFields({ name: "Reason", value: TicketSubject });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (supportbot.TicketSubject === "description") {
|
if (supportbot.TicketSubject === "description") {
|
||||||
if (TicketSubject != "No Reason Provided.") {
|
if (TicketSubject !== "No Reason Provided.") {
|
||||||
await ticketChannel.setTopic(
|
await ticketChannel.setTopic(
|
||||||
`Reason: ${TicketSubject} - User ID: ${interaction.user.id} - Ticket: ${ticketChannel.name}`
|
`Reason: ${TicketSubject} - User ID: ${interaction.user.id} - Ticket: ${ticketChannel.name}`
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (supportbot.TicketDepartments) {
|
if (supportbot.TicketDepartments && !department) {
|
||||||
TicketMessage.addFields({
|
TicketMessage.addFields({
|
||||||
name: "Departments",
|
name: "Departments",
|
||||||
value: ` **${supportbot.DepartmentTitle_1}**\n **${supportbot.DepartmentTitle_2}**\n **${supportbot.DepartmentTitle_3}**`,
|
value: ` **${supportbot.Departments.map((X) => X.title).join("\n")}**`,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
const CloseButton = new MessageButton()
|
const CloseButton = new MessageButton()
|
||||||
@@ -218,33 +215,16 @@ module.exports = new Command({
|
|||||||
.setEmoji(supportbot.TicketLockEmoji);
|
.setEmoji(supportbot.TicketLockEmoji);
|
||||||
|
|
||||||
const row2 = new MessageActionRow().addComponents(CloseButton, LockButton);
|
const row2 = new MessageActionRow().addComponents(CloseButton, LockButton);
|
||||||
|
if (supportbot.TicketDepartments && !department) {
|
||||||
if (supportbot.TicketDepartments) {
|
|
||||||
try {
|
try {
|
||||||
const Department1Button = new MessageButton()
|
let buttons = await supportbot.Departments.map((x) =>
|
||||||
.setCustomId("Department1")
|
new MessageButton()
|
||||||
.setLabel(supportbot.DepartmentTitle_1)
|
.setCustomId("Department" + supportbot.Departments.indexOf(x))
|
||||||
.setStyle(supportbot.TicketDept1Colour)
|
.setLabel(x.title)
|
||||||
.setEmoji(supportbot.TicketDept1Emoji);
|
.setStyle(x.color)
|
||||||
|
.setEmoji(x.emoji)
|
||||||
const Department2Button = new MessageButton()
|
|
||||||
.setCustomId("Department2")
|
|
||||||
.setLabel(supportbot.DepartmentTitle_2)
|
|
||||||
.setStyle(supportbot.TicketDept2Colour)
|
|
||||||
.setEmoji(supportbot.TicketDept2Emoji);
|
|
||||||
|
|
||||||
const Department3Button = new MessageButton()
|
|
||||||
.setCustomId("Department3")
|
|
||||||
.setLabel(supportbot.DepartmentTitle_3)
|
|
||||||
.setStyle(supportbot.TicketDept3Colour)
|
|
||||||
.setEmoji(supportbot.TicketDept3Emoji);
|
|
||||||
|
|
||||||
const row = new MessageActionRow().addComponents(
|
|
||||||
Department1Button,
|
|
||||||
Department2Button,
|
|
||||||
Department3Button
|
|
||||||
);
|
);
|
||||||
|
const row = new MessageActionRow().addComponents(buttons);
|
||||||
const m = await ticketChannel.send({
|
const m = await ticketChannel.send({
|
||||||
embeds: [TicketMessage],
|
embeds: [TicketMessage],
|
||||||
components: [row],
|
components: [row],
|
||||||
@@ -260,13 +240,13 @@ module.exports = new Command({
|
|||||||
time: supportbot.Timeout * 60000,
|
time: supportbot.Timeout * 60000,
|
||||||
});
|
});
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
if (e.code == "INTERACTION_COLLECTOR_ERROR") {
|
if (e.code === "INTERACTION_COLLECTOR_ERROR") {
|
||||||
try {
|
try {
|
||||||
TicketData = await JSON.parse(
|
TicketData = await JSON.parse(
|
||||||
fs.readFileSync("./Data/TicketData.json", "utf8")
|
fs.readFileSync("./Data/TicketData.json", "utf8")
|
||||||
);
|
);
|
||||||
let ticket = await TicketData.tickets.findIndex(
|
let ticket = await TicketData.tickets.findIndex(
|
||||||
(t) => t.id == ticketChannel.id
|
(t) => t.id === ticketChannel.id
|
||||||
);
|
);
|
||||||
TicketData.tickets[ticket].open = false;
|
TicketData.tickets[ticket].open = false;
|
||||||
fs.writeFileSync(
|
fs.writeFileSync(
|
||||||
@@ -283,25 +263,14 @@ module.exports = new Command({
|
|||||||
return await ticketChannel.delete();
|
return await ticketChannel.delete();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
let role;
|
let num = collector.customId.split("Department")[1];
|
||||||
let title;
|
let role = getRole(supportbot.Departments[num].role, interaction.guild);
|
||||||
if (collector.customId === "Department1") {
|
let title = supportbot.Departments[num].title;
|
||||||
role = DeptRole1;
|
|
||||||
title = supportbot.DepartmentTitle_1;
|
|
||||||
}
|
|
||||||
if (collector.customId === "Department2") {
|
|
||||||
role = DeptRole2;
|
|
||||||
title = supportbot.DepartmentTitle_2;
|
|
||||||
}
|
|
||||||
if (collector.customId === "Department3") {
|
|
||||||
role = DeptRole3;
|
|
||||||
title = supportbot.DepartmentTitle_3;
|
|
||||||
}
|
|
||||||
|
|
||||||
ticketChannel.permissionOverwrites.edit(role.id, {
|
await ticketChannel.permissionOverwrites.edit(role.id, {
|
||||||
VIEW_CHANNEL: true,
|
VIEW_CHANNEL: true,
|
||||||
});
|
});
|
||||||
ticketChannel.permissionOverwrites.edit(Author.id, {
|
await ticketChannel.permissionOverwrites.edit(interaction.user.id, {
|
||||||
SEND_MESSAGES: true,
|
SEND_MESSAGES: true,
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -323,7 +292,37 @@ module.exports = new Command({
|
|||||||
});
|
});
|
||||||
} catch (error) {}
|
} catch (error) {}
|
||||||
} else {
|
} else {
|
||||||
await ticketChannel.send({ embeds: [TicketMessage], components: [row2] });
|
await ticketChannel.send({
|
||||||
|
embeds: [TicketMessage],
|
||||||
|
components: [row2],
|
||||||
|
});
|
||||||
|
if (department) {
|
||||||
|
let role = await getRole(
|
||||||
|
supportbot.Departments[department].role,
|
||||||
|
interaction.guild
|
||||||
|
);
|
||||||
|
let title = supportbot.Departments[department].title;
|
||||||
|
await ticketChannel.permissionOverwrites.edit(role.id, {
|
||||||
|
VIEW_CHANNEL: true,
|
||||||
|
});
|
||||||
|
let TicketCat = await getCategory(
|
||||||
|
supportbot.Departments[department].category ||
|
||||||
|
supportbot.TicketCategory,
|
||||||
|
interaction.guild
|
||||||
|
);
|
||||||
|
await ticketChannel.setParent(TicketCat.id, { lockPermissions: false });
|
||||||
|
await ticketChannel.send({
|
||||||
|
embeds: [
|
||||||
|
{
|
||||||
|
description: `> Thank for reaching out to the **${title} Department**. Please provide us information regarding your query.`,
|
||||||
|
color: supportbot.EmbedColour,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (supportbot.AllowTicketMentions) {
|
||||||
|
await ticketChannel.send("@here");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
@@ -0,0 +1,108 @@
|
|||||||
|
// SupportBot | Emerald Services
|
||||||
|
// Ticket Add Command
|
||||||
|
|
||||||
|
const fs = require("fs");
|
||||||
|
|
||||||
|
const Discord = require("discord.js");
|
||||||
|
const yaml = require("js-yaml");
|
||||||
|
const supportbot = yaml.load(
|
||||||
|
fs.readFileSync("./Configs/supportbot.yml", "utf8")
|
||||||
|
);
|
||||||
|
const cmdconfig = yaml.load(
|
||||||
|
fs.readFileSync("./Configs/commands.yml", "utf8")
|
||||||
|
);
|
||||||
|
|
||||||
|
const Command = require("../Structures/Command.js");
|
||||||
|
const translate = require("@vitalets/google-translate-api");
|
||||||
|
|
||||||
|
module.exports = new Command({
|
||||||
|
name: cmdconfig.TranslateCommand, // Name of command
|
||||||
|
description: cmdconfig.TranslateCommandDesc, // Description of command
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
type: "STRING",
|
||||||
|
name: "language",
|
||||||
|
description: "A 2 letter language code",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: "STRING",
|
||||||
|
name: "text",
|
||||||
|
description: "The text to translate",
|
||||||
|
required: true,
|
||||||
|
}, // The input text for the translation
|
||||||
|
],
|
||||||
|
permissions: ["SEND_MESSAGES"], // The permission the user/role at least requires
|
||||||
|
|
||||||
|
async run(interaction) {
|
||||||
|
|
||||||
|
const { getRole } = interaction.client;
|
||||||
|
let SupportStaff = await getRole(supportbot.Staff, interaction.guild);
|
||||||
|
let Admin = await getRole(supportbot.Admin, interaction.guild);
|
||||||
|
if (!SupportStaff || !Admin)
|
||||||
|
return interaction.reply(
|
||||||
|
"Some roles seem to be missing!\nPlease check the error logs."
|
||||||
|
);
|
||||||
|
|
||||||
|
const NoPerms = new Discord.MessageEmbed()
|
||||||
|
.setTitle("Invalid Permissions!")
|
||||||
|
.setDescription(
|
||||||
|
`${supportbot.IncorrectPerms}\n\nRole Required: \`${supportbot.Staff}\` or \`${supportbot.Admin}\``
|
||||||
|
)
|
||||||
|
.setColor(supportbot.WarningColour);
|
||||||
|
|
||||||
|
if (
|
||||||
|
!interaction.member.roles.cache.has(SupportStaff.id) &&
|
||||||
|
!interaction.member.roles.cache.has(Admin.id)
|
||||||
|
)
|
||||||
|
return interaction.reply({ embeds: [NoPerms] });
|
||||||
|
|
||||||
|
const { getChannel } = interaction.client;
|
||||||
|
let lang = interaction.options.getString("language"); // Grab choice of language code by user
|
||||||
|
let url = "https://www.science.co.il/language/Codes.php"; // URL to all available language codes
|
||||||
|
let text = await interaction.options.getString("text"); // Grab the text to translate by the user
|
||||||
|
let translatelog = await getChannel(
|
||||||
|
supportbot.TranslateLogChannel,
|
||||||
|
interaction.guild
|
||||||
|
); // Grab the set logging channel for translations
|
||||||
|
|
||||||
|
|
||||||
|
// Return message if user has provided an invalid language code
|
||||||
|
const result = await translate(text, { to: lang }).catch(async (err) => {
|
||||||
|
if (err && err.code == 400) {
|
||||||
|
await interaction.reply({
|
||||||
|
embeds: [
|
||||||
|
new Discord.MessageEmbed()
|
||||||
|
.setColor(supportbot.WarningColour)
|
||||||
|
.setTitle("Valid Language Codes")
|
||||||
|
.setURL(url)
|
||||||
|
.setDescription(
|
||||||
|
"Click the title to see which 2 letter language codes are valid."
|
||||||
|
),
|
||||||
|
],
|
||||||
|
ephemeral: true,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (!result) return;
|
||||||
|
|
||||||
|
// Embed containing language code, original text and translated text
|
||||||
|
let transembed = new Discord.MessageEmbed()
|
||||||
|
.setAuthor({ name: interaction.user.tag, iconURL: interaction.user.displayAvatarURL({ dynamic: true }) })
|
||||||
|
.setColor(supportbot.SuccessColour)
|
||||||
|
.setDescription(`**Translation to ${lang}**`)
|
||||||
|
.addFields(
|
||||||
|
{ name: "Original text", value: text },
|
||||||
|
{ name: "Translated text", value: result.text },
|
||||||
|
)
|
||||||
|
.setFooter({ text: `Author: ${interaction.user.id}` })
|
||||||
|
.setTimestamp();
|
||||||
|
|
||||||
|
// Send embed [transembed] with translated message to channel
|
||||||
|
await interaction.reply({ embeds: [transembed] });
|
||||||
|
|
||||||
|
// Send embed [transembed] to logging channel
|
||||||
|
await translatelog.send({ embeds: [transembed] });
|
||||||
|
},
|
||||||
|
|
||||||
|
})
|
||||||
@@ -0,0 +1,127 @@
|
|||||||
|
// SupportBot | Emerald Services
|
||||||
|
// User Info Command
|
||||||
|
|
||||||
|
const fs = require("fs");
|
||||||
|
const moment = require("moment");
|
||||||
|
|
||||||
|
const Discord = require("discord.js");
|
||||||
|
const yaml = require("js-yaml");
|
||||||
|
const supportbot = yaml.load(
|
||||||
|
fs.readFileSync("./Configs/supportbot.yml", "utf8")
|
||||||
|
);
|
||||||
|
const cmdconfig = yaml.load(
|
||||||
|
fs.readFileSync("./Configs/commands.yml", "utf8")
|
||||||
|
);
|
||||||
|
|
||||||
|
const Command = require("../Structures/Command.js");
|
||||||
|
|
||||||
|
module.exports = new Command({
|
||||||
|
name: cmdconfig.UserInfoCommand, // Name of command
|
||||||
|
description: cmdconfig.UserInfoCommandDesc, // Description of command
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
type: "USER",
|
||||||
|
name: "user",
|
||||||
|
description: "The user you want to get info about.",
|
||||||
|
required: true,
|
||||||
|
}, // The user input
|
||||||
|
],
|
||||||
|
permissions: ["SEND_MESSAGES"], // The permission the user/role at least requires
|
||||||
|
|
||||||
|
async run(interaction) {
|
||||||
|
const { getRole } = interaction.client;
|
||||||
|
let SupportStaff = await getRole(supportbot.Staff, interaction.guild);
|
||||||
|
let Admin = await getRole(supportbot.Admin, interaction.guild);
|
||||||
|
if (!SupportStaff || !Admin)
|
||||||
|
return interaction.reply(
|
||||||
|
"Some roles seem to be missing!\nPlease check the error logs."
|
||||||
|
);
|
||||||
|
|
||||||
|
const NoPerms = new Discord.MessageEmbed()
|
||||||
|
.setTitle("Invalid Permissions!")
|
||||||
|
.setDescription(
|
||||||
|
`${supportbot.IncorrectPerms}\n\nRole Required: \`${supportbot.Staff}\` or \`${supportbot.Admin}\``
|
||||||
|
)
|
||||||
|
.setColor(supportbot.WarningColour);
|
||||||
|
|
||||||
|
if (
|
||||||
|
!interaction.member.roles.cache.has(SupportStaff.id) &&
|
||||||
|
!interaction.member.roles.cache.has(Admin.id)
|
||||||
|
)
|
||||||
|
return interaction.reply({ embeds: [NoPerms] });
|
||||||
|
|
||||||
|
let user = await interaction.options.getUser("user") || interaction.author; // Grab the mentioned user
|
||||||
|
let member = await interaction.guild.members.cache.get(user.id) // Check for user and his ID
|
||||||
|
|
||||||
|
const UserNotExist = new Discord.MessageEmbed()
|
||||||
|
.setTitle("User Not Found!")
|
||||||
|
.setDescription(
|
||||||
|
`${supportbot.UserNotFound}\n\nTry Again:\`/${cmdconfig.UserInfoCommand} <@!User_ID> or @User\``
|
||||||
|
)
|
||||||
|
.setColor(supportbot.ErrorColour);
|
||||||
|
|
||||||
|
if (!user) return interaction.reply({ embeds: [UserNotExist] });
|
||||||
|
|
||||||
|
// Flags a user/bot can have
|
||||||
|
const flags = {
|
||||||
|
DISCORD_EMPLOYEE: 'Discord Employee',
|
||||||
|
DISCORD_PARTNER: 'Discord Partner',
|
||||||
|
BUGHUNTER_LEVEL_1: 'Bug Hunter (Level 1)',
|
||||||
|
BUGHUNTER_LEVEL_2: 'Bug Hunter (Level 2)',
|
||||||
|
HYPESQUAD_EVENTS: 'HypeSquad Events',
|
||||||
|
HOUSE_BRAVERY: 'House of Bravery',
|
||||||
|
HOUSE_BRILLIANCE: 'House of Brilliance',
|
||||||
|
HOUSE_BALANCE: 'House of Balance',
|
||||||
|
EARLY_SUPPORTER: 'Early Supporter',
|
||||||
|
TEAM_USER: 'Team User',
|
||||||
|
SYSTEM: 'System',
|
||||||
|
VERIFIED_BOT: 'Verified Bot',
|
||||||
|
VERIFIED_DEVELOPER: 'Verified Bot Developer'
|
||||||
|
};
|
||||||
|
|
||||||
|
// Status message with icon
|
||||||
|
let status = {
|
||||||
|
online: "🟢Online",
|
||||||
|
idle: "🟡Idle",
|
||||||
|
dnd: "🔴Do Not Disturb",
|
||||||
|
offline: "⚫Offline"
|
||||||
|
};
|
||||||
|
|
||||||
|
const userFlags = user.flags.toArray();
|
||||||
|
|
||||||
|
// Embed containing the userinfo
|
||||||
|
let userembed = new Discord.MessageEmbed()
|
||||||
|
.setTitle(`User Info for User: ${user.tag}`)
|
||||||
|
.setThumbnail(member.displayAvatarURL({ dynamic: true, size: 512 }))
|
||||||
|
.setColor(member.roles.highest.hexColor)
|
||||||
|
.addFields(
|
||||||
|
{ name: "Name:", value: `${user.tag}\n<@${member.id}>`, inline: true },
|
||||||
|
{ name: "ID:", value: `${member.id}`, inline: true },
|
||||||
|
{ name: "Is Bot:", value: user.bot ? "Yes" : "No", inline: true },
|
||||||
|
{ name: "House/Badge:", value: `${userFlags.length ? userFlags.map(flag => flags[flag]).join("\n") : "None"}`, inline: true },
|
||||||
|
{ name: "Current Status:", value: `${status[member.presence ? member.presence.status : "offline"]}`, inline: true },
|
||||||
|
{ name: "Avatar URL:", value: `[Click Here](${member.displayAvatarURL()})`, inline: true },
|
||||||
|
{ name: "\u200b", value: "\u200b", inline: false}
|
||||||
|
)
|
||||||
|
.addFields(
|
||||||
|
{ name: "Creation Date:", value: `${moment(user.createdAt).format("MMMM Do YYYY, h:mm:ss a")}\n> ${moment(user.createdAt).startOf("day").fromNow()}`, inline: true },
|
||||||
|
{ name: "Joined Date:", value: `${moment(member.joinedAt).format("MMMM Do YYYY, h:mm:ss a")}\n> ${moment(member.joinedAt).startOf("day").fromNow()}`, inline: true },
|
||||||
|
{ name: "Roles Total:", value: `${member.roles.cache.size -1}`, inline: false },
|
||||||
|
{ name: "Highest Role:", value: `${member.roles.highest.id === interaction.guild.id ? "None" : member.roles.highest.toString()}`, inline: true },
|
||||||
|
{ name: "Roles:", value: `${member.roles.cache.map(r => r).join(" ").replace("@everyone", " ") || "None"}`, inline: false },
|
||||||
|
)
|
||||||
|
.setFooter({ text: supportbot.EmbedFooter })
|
||||||
|
.setTimestamp();
|
||||||
|
|
||||||
|
// Send embed [userembed]
|
||||||
|
await interaction.reply({ embeds: [userembed] }).catch((err) => console.error("An error has occured: ", err));
|
||||||
|
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @INFO
|
||||||
|
* UserInfo command by Sypher#3415 | 321332200668790786
|
||||||
|
* @INFO
|
||||||
|
* Solely created for SupportBot | https://github.com/Emerald-Services/SupportBot/
|
||||||
|
**/
|
||||||
@@ -14,6 +14,7 @@
|
|||||||
# Command Name Configuration
|
# Command Name Configuration
|
||||||
# -------------------------------
|
# -------------------------------
|
||||||
|
|
||||||
|
Blacklist: "blacklist"
|
||||||
TicketAdd: "add"
|
TicketAdd: "add"
|
||||||
TicketRemove: "remove"
|
TicketRemove: "remove"
|
||||||
OpenTicket: "ticket"
|
OpenTicket: "ticket"
|
||||||
@@ -22,14 +23,18 @@ InfoCommand: "info"
|
|||||||
PingCommand: "ping"
|
PingCommand: "ping"
|
||||||
HelpCommand: "help"
|
HelpCommand: "help"
|
||||||
EmbedCommand: "embed"
|
EmbedCommand: "embed"
|
||||||
SuggestCommand: "suggest"
|
SuggestCommand: "suggestion"
|
||||||
|
TranslateCommand: "translate"
|
||||||
|
UserInfoCommand: "userinfo"
|
||||||
|
|
||||||
# ---------------------------------------
|
# ---------------------------------------
|
||||||
# Command Description Configuration
|
# Command Description Configuration
|
||||||
# ---------------------------------------
|
# ---------------------------------------
|
||||||
|
|
||||||
|
BlacklistDesc: "Blacklist a user from creating Tickets."
|
||||||
TicketAddDesc: "Add a user to a support ticket."
|
TicketAddDesc: "Add a user to a support ticket."
|
||||||
TicketRemoveDesc: "Remove a user from a support ticket."
|
TicketRemoveDesc: "Remove a user from a support ticket."
|
||||||
|
TranslateCommandDesc: "Translates the language provided, along with the abbreviation (2 char) long language code"
|
||||||
OpenTicketDesc: "Open a new support ticket."
|
OpenTicketDesc: "Open a new support ticket."
|
||||||
CloseTicketDesc: "Close your support ticket."
|
CloseTicketDesc: "Close your support ticket."
|
||||||
InfoCommandDesc: "Get information about the brand."
|
InfoCommandDesc: "Get information about the brand."
|
||||||
@@ -37,3 +42,4 @@ PingCommandDesc: "Pong!"
|
|||||||
HelpCommandDesc: "Get a list of all the commands."
|
HelpCommandDesc: "Get a list of all the commands."
|
||||||
EmbedCommandDesc: "Send a message as an embed."
|
EmbedCommandDesc: "Send a message as an embed."
|
||||||
SuggestCommandDesc: "Suggest a feature for the server."
|
SuggestCommandDesc: "Suggest a feature for the server."
|
||||||
|
UserInfoCommandDesc: "Get info about a user."
|
||||||
+88
-39
@@ -10,16 +10,14 @@
|
|||||||
# Discord Support: https://emeraldsrv.dev/discord
|
# Discord Support: https://emeraldsrv.dev/discord
|
||||||
# Community Resources: https://emeraldsrv.dev/resources
|
# Community Resources: https://emeraldsrv.dev/resources
|
||||||
|
|
||||||
SupportBot_Version: "7.4.2"
|
SupportBot_Version: "7.6"
|
||||||
|
|
||||||
# -------------------------
|
# -------------------------
|
||||||
# General Configuration
|
# General Configuration
|
||||||
# -------------------------
|
# -------------------------
|
||||||
|
|
||||||
Name: "SupportBot"
|
Name: "SupportBot"
|
||||||
Token: "BOT_TOKEN"
|
Token: "TOKEN_HERE"
|
||||||
# Guild ID Ex: 123456789123456789
|
|
||||||
Guild: ""
|
|
||||||
|
|
||||||
# -------------------------
|
# -------------------------
|
||||||
# Activity Configuration
|
# Activity Configuration
|
||||||
@@ -55,23 +53,58 @@ InfoButtonText: "Visit Site"
|
|||||||
InfoURL: "https://emeraldsrv.dev"
|
InfoURL: "https://emeraldsrv.dev"
|
||||||
InfoColour: "#f74343"
|
InfoColour: "#f74343"
|
||||||
|
|
||||||
# -------------------------
|
|
||||||
# Help Configuration
|
|
||||||
# -------------------------
|
|
||||||
|
|
||||||
SendHelpPage: "channel" # Set to channel or dm
|
|
||||||
|
|
||||||
# -------------------------
|
# -------------------------
|
||||||
# Role Configuration
|
# Role Configuration
|
||||||
# -------------------------
|
# -------------------------
|
||||||
|
|
||||||
AutoRole: true
|
AutoRole: true
|
||||||
AutoRole_Role: "Member"
|
JoinRole: "Verified Member"
|
||||||
|
|
||||||
Staff: "Staff"
|
Staff: "Staff"
|
||||||
Admin: "Admin"
|
Admin: "Admin"
|
||||||
TicketBlackListRole: "Blacklisted"
|
TicketBlackListRole: "Blacklisted"
|
||||||
|
|
||||||
|
# ----------------------------
|
||||||
|
# Join/Leave Configuration
|
||||||
|
# ----------------------------
|
||||||
|
|
||||||
|
Welcome: true
|
||||||
|
# set to false to disable joining logs
|
||||||
|
|
||||||
|
WelcomeChannel: "join-leave-logs"
|
||||||
|
WelcomeColour: "#f74343"
|
||||||
|
WelcomeTitle: "User Joined!"
|
||||||
|
WelcomeMessage: "%joined_user% has joined the server!"
|
||||||
|
# Available Placeholders:
|
||||||
|
# %joined_user% - Mentions the user who joined
|
||||||
|
|
||||||
|
EmbedWelcomeImage: true
|
||||||
|
EmbedWelcomeImageURL: "https://media.discordapp.net/attachments/958247876344025108/986777740738986094/unknown.png"
|
||||||
|
|
||||||
|
EmbedWelcomeThumbnail: "BOT"
|
||||||
|
# "USER" will display the user's profile picture.
|
||||||
|
# "BOT" will display the bot's profile picture.
|
||||||
|
# false to disable
|
||||||
|
|
||||||
|
Leave: true
|
||||||
|
# set to false to disable leaving logs
|
||||||
|
|
||||||
|
LeaveChannel: "join-leave-logs"
|
||||||
|
LeaveColour: "#f74343"
|
||||||
|
LeaveTitle: "User Left!"
|
||||||
|
LeaveMessage: "%joined_user% has left the server!"
|
||||||
|
# Available Placeholders:
|
||||||
|
# %joined_user% - Mentions the user who joined
|
||||||
|
|
||||||
|
EmbedLeaveImage: true
|
||||||
|
EmbedLeaveImageURL: "https://cdn.discordapp.com/attachments/958247876344025108/986778170223120384/unknown.png"
|
||||||
|
|
||||||
|
EmbedLeaveThumbnail: false
|
||||||
|
# "USER" will display the user's profile picture.
|
||||||
|
# "BOT" will display the bot's profile picture.
|
||||||
|
# false to disable
|
||||||
|
|
||||||
|
|
||||||
# ----------------------------
|
# ----------------------------
|
||||||
# Suggestions Configuration
|
# Suggestions Configuration
|
||||||
# ----------------------------
|
# ----------------------------
|
||||||
@@ -80,16 +113,23 @@ SuggestionChannel: "suggestions"
|
|||||||
SuggestionUpvote: "✅"
|
SuggestionUpvote: "✅"
|
||||||
SuggestionDownvote: "❌"
|
SuggestionDownvote: "❌"
|
||||||
|
|
||||||
|
# -------------------------
|
||||||
|
# Translate Configuration
|
||||||
|
# -------------------------
|
||||||
|
|
||||||
|
TranslateLogChannel: "translations-log"
|
||||||
|
|
||||||
# -------------------------
|
# -------------------------
|
||||||
# Tickets Configuration
|
# Tickets Configuration
|
||||||
# -------------------------
|
# -------------------------
|
||||||
|
|
||||||
TicketCategory: "Tickets"
|
TicketCategory: "Tickets" # Only for tickets without a category
|
||||||
TicketPrefix: "ticket-" # The prefix for ticket channel names
|
TicketPrefix: "ticket-" # The prefix for ticket channel names
|
||||||
|
|
||||||
TicketLog: "logs"
|
TicketLog: "ticket-data"
|
||||||
TranscriptLog: "transcripts"
|
TranscriptLog: "ticket-data"
|
||||||
|
|
||||||
|
DMTranscripts: true
|
||||||
TranscriptTitle: "Ticket Transcript"
|
TranscriptTitle: "Ticket Transcript"
|
||||||
TicketLog_Title: "Ticket Closed"
|
TicketLog_Title: "Ticket Closed"
|
||||||
TicketBlackListMessage: "You are not allowed to open a ticket"
|
TicketBlackListMessage: "You are not allowed to open a ticket"
|
||||||
@@ -97,12 +137,12 @@ TicketBlackListMessage: "You are not allowed to open a ticket"
|
|||||||
MaxAllowedTickets: 2
|
MaxAllowedTickets: 2
|
||||||
|
|
||||||
TicketSubject: "description"
|
TicketSubject: "description"
|
||||||
# "description" will displays the ticket reason within the channel description
|
# "description" will display the ticket reason within the channel description
|
||||||
# "embed" will displays the ticket reason within the ticket embed
|
# "embed" will display the ticket reason within the ticket embed
|
||||||
|
|
||||||
AllowTicketMentions: true
|
AllowTicketMentions: true
|
||||||
# Set to true to allow the ticket to mention the author and the support team.
|
# Set to true to allow the ticket to mention the author and the support team.
|
||||||
# Set to false to dis-allow mentions within tickets.
|
# Set false to dis-allow mentions within tickets.
|
||||||
|
|
||||||
# --- Creation Config ---
|
# --- Creation Config ---
|
||||||
# --- Start ---
|
# --- Start ---
|
||||||
@@ -143,14 +183,6 @@ TicketCloseColour: "DANGER"
|
|||||||
TicketDeleteColour: "DANGER"
|
TicketDeleteColour: "DANGER"
|
||||||
TicketLockColour: "PRIMARY"
|
TicketLockColour: "PRIMARY"
|
||||||
|
|
||||||
TicketDept1Colour: "PRIMARY"
|
|
||||||
TicketDept2Colour: "PRIMARY"
|
|
||||||
TicketDept3Colour: "PRIMARY"
|
|
||||||
|
|
||||||
TicketDept1Emoji: "1️⃣"
|
|
||||||
TicketDept2Emoji: "2️⃣"
|
|
||||||
TicketDept3Emoji: "3️⃣"
|
|
||||||
|
|
||||||
TranscriptSavedMessage: "📝 **Transcript Saved!**"
|
TranscriptSavedMessage: "📝 **Transcript Saved!**"
|
||||||
TicketLockMessage: "❌ **Ticket Locked!**"
|
TicketLockMessage: "❌ **Ticket Locked!**"
|
||||||
TicketDeleteMessage: "⚠ **Ticket Deleting!**" # Tickets deleting after 5 seconds by default.
|
TicketDeleteMessage: "⚠ **Ticket Deleting!**" # Tickets deleting after 5 seconds by default.
|
||||||
@@ -161,29 +193,46 @@ TicketDeleteMessage: "⚠ **Ticket Deleting!**" # Tickets deleting after 5 secon
|
|||||||
TicketDepartments: true
|
TicketDepartments: true
|
||||||
# Delete the ticket if no department selected. TIME IN MINUTES
|
# Delete the ticket if no department selected. TIME IN MINUTES
|
||||||
Timeout: 5
|
Timeout: 5
|
||||||
AllowStaff: true
|
# Set to true to allow all staff to access the ticket
|
||||||
# If set to false users with the "Staff" role will not be able to view tickets
|
AllowAllStaff: false
|
||||||
# without a valid department role set below.
|
|
||||||
|
|
||||||
# Set to false to allow "Staff" to see tickets whether its a department for them or not.
|
|
||||||
|
|
||||||
DepartmentTitle_1: "General Support"
|
|
||||||
DepartmentTitle_2: "Billing Support"
|
|
||||||
DepartmentTitle_3: "Admin Team"
|
|
||||||
# Ticket department title, This is the title for a ticket department to help users know what is available.
|
|
||||||
|
|
||||||
DepartmentRole_1: "Support"
|
|
||||||
DepartmentRole_2: "Support"
|
|
||||||
DepartmentRole_3: "Admin"
|
|
||||||
# Ticket roles are the roles that will be able to gain access to tickets depending on what department has been chosen.
|
# Ticket roles are the roles that will be able to gain access to tickets depending on what department has been chosen.
|
||||||
|
|
||||||
|
Departments:
|
||||||
|
- title: "Support"
|
||||||
|
role: "Staff"
|
||||||
|
color: "SECONDARY"
|
||||||
|
emoji: "1️⃣"
|
||||||
|
category: "Billing Support"
|
||||||
|
- title: "Billing Support"
|
||||||
|
role: "Staff"
|
||||||
|
color: "SECONDARY"
|
||||||
|
emoji: "2️⃣"
|
||||||
|
category: "Admin Team"
|
||||||
|
- title: "Admin Team"
|
||||||
|
role: "Admin"
|
||||||
|
color: "SECONDARY"
|
||||||
|
emoji: "3️⃣"
|
||||||
|
category: "Admin Support"
|
||||||
|
# - title: "Other"
|
||||||
|
# role: "Staff"
|
||||||
|
# color: "SECONDARY"
|
||||||
|
# emoji: "3️⃣"
|
||||||
|
# category: "Tickets"
|
||||||
|
|
||||||
|
# Discord Button Colour Selection
|
||||||
|
# PRIMARY - Blurple
|
||||||
|
# SECONDARY - Grey
|
||||||
|
# DANGER - Red
|
||||||
|
# SUCCESS - Green
|
||||||
|
|
||||||
# --- Closing Config ---
|
# --- Closing Config ---
|
||||||
# --- Start ---
|
# --- Start ---
|
||||||
|
|
||||||
StaffOnly: true
|
StaffOnly: true
|
||||||
ClosingTicket: ":warning: You have requested to close your support ticket."
|
ClosingTicket: ":warning: You have requested to close your support ticket."
|
||||||
ClosingConfirmation_Word: "confirm"
|
ClosingConfirmation_Word: "confirm"
|
||||||
CloseConfirmation: false
|
CloseConfirmation: true
|
||||||
|
|
||||||
# ---------------------------
|
# ---------------------------
|
||||||
# Error / Warning Messages
|
# Error / Warning Messages
|
||||||
|
|||||||
@@ -20,9 +20,9 @@ TicketPanel: true
|
|||||||
# Ticket Panel Message Configuration
|
# Ticket Panel Message Configuration
|
||||||
# ----------------------------------------
|
# ----------------------------------------
|
||||||
|
|
||||||
Channel: "create-ticket"
|
Channel: "▣┃ticket-creation"
|
||||||
ButtonEmoji: "📩"
|
ButtonEmoji: "📩"
|
||||||
ButtonLabel: "Open Ticket"
|
ButtonLabel: "Create Ticket"
|
||||||
ButtonColour: "SUCCESS"
|
ButtonColour: "SUCCESS"
|
||||||
# Colour Options:
|
# Colour Options:
|
||||||
# -> PRIMARY - Purple
|
# -> PRIMARY - Purple
|
||||||
@@ -33,9 +33,9 @@ ButtonColour: "SUCCESS"
|
|||||||
PanelTitle: "Need Help? Create a Support Ticket."
|
PanelTitle: "Need Help? Create a Support Ticket."
|
||||||
|
|
||||||
TicketPanel_Description: true
|
TicketPanel_Description: true
|
||||||
TicketPanel_Thumbnail: false
|
TicketPanel_Thumbnail: true
|
||||||
TicketPanel_Image: false
|
TicketPanel_Image: true
|
||||||
|
|
||||||
PanelMessage: "Click the button to open a new support ticket."
|
PanelMessage: "Click the button to open a new support ticket."
|
||||||
PanelThumbnail: "https://i.imgur.com/ieeZejl.png"
|
PanelThumbnail: "https://i.imgur.com/ieeZejl.png"
|
||||||
PanelImage: "https://i.imgur.com/5NkcmDq.png"
|
PanelImage: "https://i.imgur.com/5NkcmDq.png"
|
||||||
@@ -1,4 +1 @@
|
|||||||
{
|
{"id":0,"TicketPanelID":""}
|
||||||
"id": 0,
|
|
||||||
"TicketPanelID": ""
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,46 @@
|
|||||||
|
|
||||||
|
const Discord = require('discord.js');
|
||||||
|
const fs = require("fs");
|
||||||
|
const Event = require("../Structures/Event.js");
|
||||||
|
const yaml = require("js-yaml");
|
||||||
|
const supportbot = yaml.load(
|
||||||
|
fs.readFileSync("./Configs/supportbot.yml", "utf8")
|
||||||
|
);
|
||||||
|
|
||||||
|
module.exports = new Event("guildMemberAdd", async (client, member, interaction, guild) => {
|
||||||
|
|
||||||
|
if (supportbot.Welcome) {
|
||||||
|
const WelcomeChannel = member.guild.channels.cache.find(channel => channel.name === supportbot.WelcomeChannel)
|
||||||
|
|
||||||
|
const WelcomeEmbed = new Discord.MessageEmbed()
|
||||||
|
.setColor(supportbot.WelcomeColour)
|
||||||
|
.setTitle(supportbot.WelcomeTitle)
|
||||||
|
.setDescription(supportbot.WelcomeMessage.replace(/%joined_user%/g, member.user))
|
||||||
|
.setTimestamp();
|
||||||
|
|
||||||
|
if (supportbot.EmbedWelcomeThumbnail === "BOT") {
|
||||||
|
WelcomeEmbed.setThumbnail(client.user.displayAvatarURL())
|
||||||
|
}
|
||||||
|
|
||||||
|
if (supportbot.EmbedWelcomeThumbnail === "USER") {
|
||||||
|
WelcomeEmbed.setThumbnail(member.user.displayAvatarURL())
|
||||||
|
}
|
||||||
|
|
||||||
|
if (supportbot.EmbedWelcomeImage) {
|
||||||
|
WelcomeEmbed.setImage(supportbot.EmbedWelcomeImageURL)
|
||||||
|
}
|
||||||
|
|
||||||
|
WelcomeChannel.send({
|
||||||
|
embeds: [WelcomeEmbed]
|
||||||
|
})
|
||||||
|
|
||||||
|
if (supportbot.AutoRole) {
|
||||||
|
var role = member.guild.roles.cache.find(role => role.name === supportbot.JoinRole);
|
||||||
|
member.roles.add(role);
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(`\u001b[32m`, `[+]`, `\u001b[33m`, `${member.user.username} joined the server!`)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
|
||||||
|
const Discord = require('discord.js');
|
||||||
|
const fs = require("fs");
|
||||||
|
const Event = require("../Structures/Event.js");
|
||||||
|
const yaml = require("js-yaml");
|
||||||
|
const supportbot = yaml.load(
|
||||||
|
fs.readFileSync("./Configs/supportbot.yml", "utf8")
|
||||||
|
);
|
||||||
|
|
||||||
|
module.exports = new Event("guildMemberRemove", async (client, member, interaction, guild) => {
|
||||||
|
|
||||||
|
if (supportbot.Leave) {
|
||||||
|
const LeaveChannel = member.guild.channels.cache.find(channel => channel.name === supportbot.LeaveChannel)
|
||||||
|
|
||||||
|
const LeaveEmbed = new Discord.MessageEmbed()
|
||||||
|
.setColor(supportbot.LeaveColour)
|
||||||
|
.setTitle(supportbot.LeaveTitle)
|
||||||
|
.setDescription(supportbot.LeaveMessage.replace(/%joined_user%/g, member.user))
|
||||||
|
.setTimestamp();
|
||||||
|
|
||||||
|
if (supportbot.EmbedLeaveThumbnail === "BOT") {
|
||||||
|
LeaveEmbed.setThumbnail(client.user.displayAvatarURL())
|
||||||
|
}
|
||||||
|
|
||||||
|
if (supportbot.EmbedLeaveThumbnail === "USER") {
|
||||||
|
LeaveEmbed.setThumbnail(member.user.displayAvatarURL())
|
||||||
|
}
|
||||||
|
|
||||||
|
if (supportbot.EmbedLeaveImage) {
|
||||||
|
LeaveEmbed.setImage(supportbot.EmbedLeaveImageURL)
|
||||||
|
}
|
||||||
|
|
||||||
|
LeaveChannel.send({
|
||||||
|
embeds: [LeaveEmbed]
|
||||||
|
})
|
||||||
|
|
||||||
|
console.log(`\u001b[31m`, `[-]`, `\u001b[33m`, `${member.user.username} joined the server!`)
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
+18
-13
@@ -15,7 +15,7 @@ const Event = require("../Structures/Event.js");
|
|||||||
module.exports = new Event("interactionCreate", async (client, interaction) => {
|
module.exports = new Event("interactionCreate", async (client, interaction) => {
|
||||||
if (interaction.isCommand()) {
|
if (interaction.isCommand()) {
|
||||||
const command = client.commands.find(
|
const command = client.commands.find(
|
||||||
(cmd) => cmd.name.toLowerCase() == interaction.commandName
|
(cmd) => cmd.name.toLowerCase() === interaction.commandName
|
||||||
);
|
);
|
||||||
|
|
||||||
if (interaction.user.bot || !interaction.guild) return;
|
if (interaction.user.bot || !interaction.guild) return;
|
||||||
@@ -29,7 +29,7 @@ module.exports = new Event("interactionCreate", async (client, interaction) => {
|
|||||||
embeds: [NotValid],
|
embeds: [NotValid],
|
||||||
});
|
});
|
||||||
|
|
||||||
const permission = interaction.member.permissions.has(command.permission);
|
const permission = interaction.member.permissions.has(command.permissions);
|
||||||
|
|
||||||
const ValidPerms = new Discord.MessageEmbed()
|
const ValidPerms = new Discord.MessageEmbed()
|
||||||
.setDescription(
|
.setDescription(
|
||||||
@@ -41,11 +41,13 @@ module.exports = new Event("interactionCreate", async (client, interaction) => {
|
|||||||
return interaction.reply({
|
return interaction.reply({
|
||||||
embeds: [ValidPerms],
|
embeds: [ValidPerms],
|
||||||
});
|
});
|
||||||
interaction.user = interaction.user;
|
|
||||||
command.run(interaction);
|
command.run(interaction);
|
||||||
}
|
}
|
||||||
if (interaction.isButton()) {
|
if (interaction.isButton()) {
|
||||||
if (interaction.customId === "openticket") {
|
if (
|
||||||
|
interaction.customId === "openticket" ||
|
||||||
|
interaction.customId.includes("department-")
|
||||||
|
) {
|
||||||
try {
|
try {
|
||||||
const cmd = client.commands.get(cmdconfig.OpenTicket);
|
const cmd = client.commands.get(cmdconfig.OpenTicket);
|
||||||
if (!cmd) return;
|
if (!cmd) return;
|
||||||
@@ -65,7 +67,7 @@ module.exports = new Event("interactionCreate", async (client, interaction) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (interaction.customId === "ticketlock") {
|
if (interaction.customId === "ticketlock") {
|
||||||
if (interaction.channel.name.startsWith(`${supportbot.TicketPrefix}`)) {
|
if (interaction.channel.name.startsWith(supportbot.TicketPrefix)) {
|
||||||
interaction.message.fetch();
|
interaction.message.fetch();
|
||||||
let Admin =
|
let Admin =
|
||||||
interaction.guild.roles.cache.find(
|
interaction.guild.roles.cache.find(
|
||||||
@@ -84,25 +86,28 @@ module.exports = new Event("interactionCreate", async (client, interaction) => {
|
|||||||
|
|
||||||
let parent =
|
let parent =
|
||||||
interaction.guild.channels.cache.find(
|
interaction.guild.channels.cache.find(
|
||||||
(c) => c.name === `${supportbot.LockTicketCategory}`
|
(c) => c.name === supportbot.LockTicketCategory
|
||||||
) ||
|
) ||
|
||||||
interaction.guild.channels.cache.find(
|
interaction.guild.channels.cache.find(
|
||||||
(c) => c.id === `${supportbot.LockTicketCategory}`
|
(c) => c.id === supportbot.LockTicketCategory
|
||||||
);
|
);
|
||||||
if (parent) {
|
if (parent) {
|
||||||
interaction.channel.setParent(parent.id);
|
await interaction.channel.setParent(parent.id);
|
||||||
}
|
}
|
||||||
|
|
||||||
all.forEach((perm) => {
|
all.forEach((perm) => {
|
||||||
interaction.channel.permissionOverwrites.delete(perm.id);
|
interaction.channel.permissionOverwrites.delete(perm.id);
|
||||||
});
|
});
|
||||||
interaction.channel.permissionOverwrites.create(Admin.id, {
|
await interaction.channel.permissionOverwrites.create(Admin.id, {
|
||||||
VIEW_CHANNEL: true,
|
VIEW_CHANNEL: true,
|
||||||
});
|
});
|
||||||
|
|
||||||
interaction.channel.permissionOverwrites.create(interaction.guild.id, {
|
await interaction.channel.permissionOverwrites.create(
|
||||||
VIEW_CHANNEL: false,
|
interaction.guild.id,
|
||||||
});
|
{
|
||||||
|
VIEW_CHANNEL: false,
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
const ticketDeleteButton = new Discord.MessageButton()
|
const ticketDeleteButton = new Discord.MessageButton()
|
||||||
.setCustomId("ticketclose")
|
.setCustomId("ticketclose")
|
||||||
@@ -116,7 +121,7 @@ module.exports = new Event("interactionCreate", async (client, interaction) => {
|
|||||||
const ArchiveEmbed = new Discord.MessageEmbed()
|
const ArchiveEmbed = new Discord.MessageEmbed()
|
||||||
.setTitle("Archived")
|
.setTitle("Archived")
|
||||||
.setDescription(`Archived ${interaction.channel.name}`)
|
.setDescription(`Archived ${interaction.channel.name}`)
|
||||||
.setColor(`${supportbot.SuccessColour}`);
|
.setColor(supportbot.SuccessColour);
|
||||||
|
|
||||||
interaction.reply({ embeds: [ArchiveEmbed] });
|
interaction.reply({ embeds: [ArchiveEmbed] });
|
||||||
interaction.message.edit({ components: [row] });
|
interaction.message.edit({ components: [row] });
|
||||||
|
|||||||
+43
-34
@@ -14,7 +14,7 @@ const panelconfig = yaml.load(
|
|||||||
|
|
||||||
const Event = require("../Structures/Event.js");
|
const Event = require("../Structures/Event.js");
|
||||||
|
|
||||||
module.exports = new Event("ready", async (client) => {
|
module.exports = new Event("ready", async (client, interaction) => {
|
||||||
const { getRole, getChannel, getCategory } = client;
|
const { getRole, getChannel, getCategory } = client;
|
||||||
client.user.setActivity(supportbot.BotActivity, {
|
client.user.setActivity(supportbot.BotActivity, {
|
||||||
type: supportbot.ActivityType,
|
type: supportbot.ActivityType,
|
||||||
@@ -34,15 +34,17 @@ module.exports = new Event("ready", async (client) => {
|
|||||||
console.log(` `);
|
console.log(` `);
|
||||||
console.log(
|
console.log(
|
||||||
`\u001b[33m`,
|
`\u001b[33m`,
|
||||||
`${supportbot.Name} v${supportbot.SupportBot_Version}`,
|
`${supportbot.Name} | v${supportbot.SupportBot_Version}`,
|
||||||
`\u001b[36m`,
|
`\u001b[36m`,
|
||||||
`Connected to Discord`
|
`Connected to Discord`
|
||||||
);
|
);
|
||||||
console.log(
|
console.log(
|
||||||
`\u001b[33m`,
|
`\u001b[33m`,
|
||||||
`Invite to your server:`,
|
`Invite to your server:`,
|
||||||
`\u001b[36m`,
|
`\u001b[36m`,
|
||||||
`https://discord.com/api/oauth2/authorize?client_id=` + client.user.id + `&permissions=8&scope=bot%20applications.commands`
|
`https://discord.com/api/oauth2/authorize?client_id=` +
|
||||||
|
client.user.id +
|
||||||
|
`&permissions=8&scope=bot%20applications.commands`
|
||||||
);
|
);
|
||||||
console.log(
|
console.log(
|
||||||
`\u001b[33m`,
|
`\u001b[33m`,
|
||||||
@@ -72,32 +74,27 @@ module.exports = new Event("ready", async (client) => {
|
|||||||
console.log(`\u001b[37m`, `SupportBot proudly created by Emerald Services`);
|
console.log(`\u001b[37m`, `SupportBot proudly created by Emerald Services`);
|
||||||
console.log(` `);
|
console.log(` `);
|
||||||
console.log(`\u001b[31m`, `――――――――――――――――――――――――――――――――――――――――――――`);
|
console.log(`\u001b[31m`, `――――――――――――――――――――――――――――――――――――――――――――`);
|
||||||
if (
|
|
||||||
!supportbot.Guild ||
|
|
||||||
(await client.guilds.cache.size) !== 1 ||
|
|
||||||
(await client.guilds.cache.first().id) !== supportbot.Guild
|
|
||||||
) {
|
|
||||||
console.log(
|
|
||||||
`\u001b[31m`,
|
|
||||||
`${client.user.username} is not in the correct server set in your config. Please join the server and restart the bot.`
|
|
||||||
);
|
|
||||||
console.log(`\u001b[31m`, `${client.user.username} will now exit.`);
|
|
||||||
return process.exit(1);
|
|
||||||
}
|
|
||||||
const roles = [
|
const roles = [
|
||||||
supportbot.Admin,
|
supportbot.Admin,
|
||||||
supportbot.Staff,
|
supportbot.Staff,
|
||||||
supportbot.TicketBlackListRole,
|
supportbot.TicketBlackListRole,
|
||||||
supportbot.DepartmentRole_1,
|
|
||||||
supportbot.DepartmentRole_2,
|
|
||||||
supportbot.DepartmentRole_3,
|
|
||||||
];
|
];
|
||||||
if (supportbot.AutoRole) roles.push(supportbot.AutoRole_Role);
|
if (supportbot.TicketDepartments) {
|
||||||
|
supportbot.Departments.forEach((department) => roles.push(department.role));
|
||||||
|
}
|
||||||
|
if (supportbot.AutoRole) roles.push(supportbot.JoinRole);
|
||||||
const channels = [
|
const channels = [
|
||||||
supportbot.SuggestionChannel,
|
supportbot.SuggestionChannel,
|
||||||
supportbot.TicketLog,
|
supportbot.TicketLog,
|
||||||
supportbot.TranscriptLog,
|
supportbot.TranscriptLog,
|
||||||
panelconfig.Channel,
|
panelconfig.Channel,
|
||||||
|
supportbot.WelcomeChannel,
|
||||||
|
supportbot.LeaveChannel,
|
||||||
|
supportbot.TranslateLogChannel
|
||||||
];
|
];
|
||||||
const categories = [supportbot.TicketCategory];
|
const categories = [supportbot.TicketCategory];
|
||||||
|
|
||||||
@@ -160,11 +157,14 @@ module.exports = new Event("ready", async (client) => {
|
|||||||
fs.readFileSync("./Data/ticket-panel-id.json", "utf8")
|
fs.readFileSync("./Data/ticket-panel-id.json", "utf8")
|
||||||
);
|
);
|
||||||
|
|
||||||
chan1.messages.fetch(panelid.TicketPanelID).catch(async (r) => {
|
chan1.messages.fetch(panelid.TicketPanelID).catch(async () => {
|
||||||
let embed = new Discord.MessageEmbed()
|
let embed = new Discord.MessageEmbed()
|
||||||
.setTitle(`${panelconfig.PanelTitle}`)
|
.setTitle(panelconfig.PanelTitle)
|
||||||
.setColor(supportbot.SuccessColour)
|
.setColor(supportbot.SuccessColour)
|
||||||
.setFooter(supportbot.EmbedFooter);
|
.setFooter({
|
||||||
|
text: supportbot.EmbedFooter,
|
||||||
|
iconURL: interaction.user.displayAvatarURL(),
|
||||||
|
});
|
||||||
|
|
||||||
if (panelconfig.TicketPanel_Description) {
|
if (panelconfig.TicketPanel_Description) {
|
||||||
embed.setDescription(panelconfig.PanelMessage);
|
embed.setDescription(panelconfig.PanelMessage);
|
||||||
@@ -177,13 +177,22 @@ module.exports = new Event("ready", async (client) => {
|
|||||||
if (panelconfig.TicketPanel_Image) {
|
if (panelconfig.TicketPanel_Image) {
|
||||||
embed.setImage(panelconfig.PanelImage);
|
embed.setImage(panelconfig.PanelImage);
|
||||||
}
|
}
|
||||||
|
let button;
|
||||||
let button = new Discord.MessageButton()
|
if (supportbot.TicketDepartments) {
|
||||||
.setLabel(panelconfig.ButtonLabel)
|
button = supportbot.Departments.map((x) =>
|
||||||
.setCustomId("openticket")
|
new Discord.MessageButton()
|
||||||
.setStyle(panelconfig.ButtonColour)
|
.setCustomId("department-" + supportbot.Departments.indexOf(x))
|
||||||
.setEmoji(panelconfig.ButtonEmoji);
|
.setLabel(x.title)
|
||||||
|
.setStyle(x.color)
|
||||||
|
.setEmoji(x.emoji)
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
button = new Discord.MessageButton()
|
||||||
|
.setLabel(panelconfig.ButtonLabel)
|
||||||
|
.setCustomId("openticket")
|
||||||
|
.setStyle(panelconfig.ButtonColour)
|
||||||
|
.setEmoji(panelconfig.ButtonEmoji);
|
||||||
|
}
|
||||||
let row = new Discord.MessageActionRow().addComponents(button);
|
let row = new Discord.MessageActionRow().addComponents(button);
|
||||||
|
|
||||||
await chan1
|
await chan1
|
||||||
@@ -194,7 +203,7 @@ module.exports = new Event("ready", async (client) => {
|
|||||||
.then((r) => {
|
.then((r) => {
|
||||||
let data = {
|
let data = {
|
||||||
id: panelid.id,
|
id: panelid.id,
|
||||||
TicketPanelID: `${r.id}`,
|
TicketPanelID: r.id,
|
||||||
};
|
};
|
||||||
fs.writeFileSync(
|
fs.writeFileSync(
|
||||||
"./Data/ticket-panel-id.json",
|
"./Data/ticket-panel-id.json",
|
||||||
@@ -203,7 +212,7 @@ module.exports = new Event("ready", async (client) => {
|
|||||||
);
|
);
|
||||||
})
|
})
|
||||||
.catch((e) => {
|
.catch((e) => {
|
||||||
console.log("Raw" + e);
|
console.log("Raw: " + e);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,5 +9,4 @@ SupportBot is an open-sourced support system for discord. It's completely free t
|
|||||||
**|** [Discord](https://emeraldsrv.dev/discord) **|**
|
**|** [Discord](https://emeraldsrv.dev/discord) **|**
|
||||||
[Hosting](https://emeraldsrv.dev/hosting) **|**
|
[Hosting](https://emeraldsrv.dev/hosting) **|**
|
||||||
[Documentation](https://emeraldsrv.dev/wiki/supportbot) **|**
|
[Documentation](https://emeraldsrv.dev/wiki/supportbot) **|**
|
||||||
[Download via Polymart](https://polymart.org/resource/supportbot-1-discord-ticket-bot.518) **|**
|
|
||||||
[Download via MC-Market](https://www.mc-market.org/resources/8940/) **|**
|
[Download via MC-Market](https://www.mc-market.org/resources/8940/) **|**
|
||||||
@@ -76,10 +76,10 @@ class Client extends Discord.Client {
|
|||||||
`\u001b[32;1m`,
|
`\u001b[32;1m`,
|
||||||
"Loaded"
|
"Loaded"
|
||||||
);
|
);
|
||||||
addon.commands.forEach((command) => {
|
addon.commands?.forEach((command) => {
|
||||||
this.commands.set(command.name, command);
|
this.commands.set(command.name, command);
|
||||||
});
|
});
|
||||||
addon.events.forEach((event) => {
|
addon.events?.forEach((event) => {
|
||||||
this.on(event.event, (...args) => event.run(this, ...args));
|
this.on(event.event, (...args) => event.run(this, ...args));
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@@ -89,7 +89,7 @@ class Client extends Discord.Client {
|
|||||||
// Slash Commands
|
// Slash Commands
|
||||||
|
|
||||||
this.once("ready", async () => {
|
this.once("ready", async () => {
|
||||||
await this.application?.commands.set(this.commands, supportbot.Guild);
|
await this.guilds.cache.first()?.commands.set(this.commands);
|
||||||
console.log(
|
console.log(
|
||||||
`\u001b[32;1m`,
|
`\u001b[32;1m`,
|
||||||
`Slash Commands Registered for ${this.guilds.cache.first().name}`
|
`Slash Commands Registered for ${this.guilds.cache.first().name}`
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ class Command {
|
|||||||
constructor(options) {
|
constructor(options) {
|
||||||
this.name = options.name;
|
this.name = options.name;
|
||||||
this.description = options.description;
|
this.description = options.description;
|
||||||
this.permissions = options.permissions;
|
this.permissions = options.permissions || [];
|
||||||
this.options = options.options || [];
|
this.options = options.options || [];
|
||||||
this.run = options.run;
|
this.run = options.run;
|
||||||
this.defaultPermission = true;
|
this.defaultPermission = true;
|
||||||
|
|||||||
Generated
+4900
-13
File diff suppressed because it is too large.
Load diff
+5
-1
@@ -18,7 +18,11 @@
|
|||||||
},
|
},
|
||||||
"homepage": "https://github.com/Emerald-Services/SupportBot#readme",
|
"homepage": "https://github.com/Emerald-Services/SupportBot#readme",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"@vitalets/google-translate-api": "^8.0.0",
|
||||||
"discord.js": "^13.6.0",
|
"discord.js": "^13.6.0",
|
||||||
"js-yaml": "^4.1.0"
|
"js-yaml": "^4.1.0",
|
||||||
|
"moment": "^2.29.3",
|
||||||
|
"translate": "^1.4.1",
|
||||||
|
"twitter": "^1.7.1"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in new issue
Block a user