aboutsummaryrefslogtreecommitdiff
path: root/174bg/discord-bot/utilities
diff options
context:
space:
mode:
Diffstat (limited to '174bg/discord-bot/utilities')
-rw-r--r--174bg/discord-bot/utilities/createTicket.js52
-rw-r--r--174bg/discord-bot/utilities/notifyRoleByName.js19
2 files changed, 71 insertions, 0 deletions
diff --git a/174bg/discord-bot/utilities/createTicket.js b/174bg/discord-bot/utilities/createTicket.js
new file mode 100644
index 0000000..9b573d6
--- /dev/null
+++ b/174bg/discord-bot/utilities/createTicket.js
@@ -0,0 +1,52 @@
+import { ChannelType, PermissionFlagsBits } from "discord.js";
+
+export default async (interaction, roleNamesWithAccess) => {
+ const ticketsCategory = interaction.guild.channels.cache.find(
+ (channel) =>
+ channel.name.toLowerCase() === "tickets" &&
+ channel.type === ChannelType.GuildCategory,
+ );
+
+ if (!ticketsCategory)
+ return await interaction.reply("Tickets category not found.");
+
+ // get the roles that should have access to this ticket
+ const rolesWithAccess = roleNamesWithAccess.map((roleName) => {
+ return interaction.guild.roles.cache.find(
+ (role) => role.name.toLowerCase() === roleName.toLowerCase(),
+ );
+ });
+
+ // create a new text channel under the "tickets" category with the following format: ticket-<timestamp_short>
+ const timestamp = new Date()
+ .toISOString()
+ .replace(/[-:.T]/g, "")
+ .slice(2, 16);
+
+ const channelName = `ticket-${timestamp}`;
+
+ const newChannel = await interaction.guild.channels.create({
+ name: channelName,
+ type: ChannelType.GuildText,
+ parent: ticketsCategory.id,
+ // set permissions so that only the user who created the ticket and the roles with access can view it
+ permissionOverwrites: [
+ {
+ id: interaction.user.id,
+ allow: [
+ PermissionFlagsBits.ViewChannel,
+ PermissionFlagsBits.SendMessages,
+ ],
+ },
+ ...rolesWithAccess.map((role) => ({
+ id: role.id,
+ allow: [
+ PermissionFlagsBits.ViewChannel,
+ PermissionFlagsBits.SendMessages,
+ ],
+ })),
+ ],
+ });
+
+ return newChannel;
+};
diff --git a/174bg/discord-bot/utilities/notifyRoleByName.js b/174bg/discord-bot/utilities/notifyRoleByName.js
new file mode 100644
index 0000000..1b2b82a
--- /dev/null
+++ b/174bg/discord-bot/utilities/notifyRoleByName.js
@@ -0,0 +1,19 @@
+export default async (guild, roleName, message) => {
+ // get the role by name
+ const role = guild.roles.cache.find(
+ (role) => role.name.toLowerCase() === roleName.toLowerCase(),
+ );
+
+ if (!role) {
+ console.error(`Role "${roleName}" not found.`);
+ return;
+ }
+
+ // get all members with the role
+ const membersWithRole = role.members;
+
+ // send a DM to each member with the role
+ for (const member of membersWithRole.values()) {
+ await member.send(message);
+ }
+};