diff --git a/config/options.json b/config/options.json index 35a64db..60d8035 100644 --- a/config/options.json +++ b/config/options.json @@ -1,5 +1,6 @@ { "color": "#eeaadb", + "guildid": "481741000365178881", "devMessage": "Developed by taken.lua", "applicationsChannel": "776705352456470550", "staffApplicationsChannel": "1039258641393520700", @@ -10,6 +11,7 @@ "botLogChannel": "1174403585149243472", "guildLogChannel": "1183733282534326322", "errorLogChannel": "1192476369850994788", + "moderationLogChannel": "1193329771795447818", "waitingListChannel": "1145773618291298384", "waitingListMessage": "1146027645415473193", "instructionsgif": "https://cdn.discordapp.com/attachments/838716950723952640/1188211176300089384/4DMu513uNxbM.gif?ex=6599b2e4&is=65873de4&hm=e727c7a39aacbc47d6a5453f4b5f792a45679983c30d662cd258a311381b6df0&" diff --git a/src/commands/clear.ts b/src/commands/clear.ts index 2e6a71d..db92a92 100644 --- a/src/commands/clear.ts +++ b/src/commands/clear.ts @@ -1,8 +1,7 @@ import { SlashCommandBuilder, PermissionFlagsBits, - ChannelType, - GuildTextBasedChannel, + TextChannel, } from "discord.js" import { color } from "../../config/options.json" import { Command } from "../interfaces" @@ -30,7 +29,7 @@ export = { await interaction.deferReply({ ephemeral: true }) const amount = interaction.options.getInteger("amount")! - const channel2 = interaction.channel! + const channel = interaction.channel as TextChannel const embedColor = Number(color.replace("#", "0x")) if (!amount || amount < 1 || amount > 100) { @@ -45,20 +44,6 @@ export = { }) } - if (channel2.type !== ChannelType.GuildText) { - await interaction.editReply({ - embeds: [ - { - description: - "You can only clear messages in a text channel", - color: embedColor, - }, - ], - }) - } - - const channel = channel2 as GuildTextBasedChannel - channel.messages.fetch({ limit: amount }).then(async messages => { const messagesToDelete = messages .map(m => m) diff --git a/src/commands/counting/setup.ts b/src/commands/counting/setup.ts index 26050c4..6ebce53 100644 --- a/src/commands/counting/setup.ts +++ b/src/commands/counting/setup.ts @@ -1,4 +1,4 @@ -import { ChatInputCommandInteraction, GuildTextBasedChannel, channelMention } from "discord.js" +import { ChatInputCommandInteraction, TextChannel, channelMention } from "discord.js" import settingsSchema from "../../schemas/settingsSchema" import { color, devMessage } from "../../../config/options.json" import mongoose from "mongoose" @@ -6,7 +6,7 @@ import mongoose from "mongoose" export default async function setup(interaction: ChatInputCommandInteraction): Promise { await interaction.deferReply() - const channel = interaction.options.getChannel("channel") as GuildTextBasedChannel + const channel = interaction.options.getChannel("channel") as TextChannel const embedColor = Number(color.replace("#", "0x")) if (await settingsSchema.findOne({ name: "counting" })) { diff --git a/src/commands/send.ts b/src/commands/send.ts index 3700262..bf38d18 100644 --- a/src/commands/send.ts +++ b/src/commands/send.ts @@ -2,7 +2,7 @@ import { SlashCommandBuilder, PermissionFlagsBits, ChannelType, - GuildTextBasedChannel, + TextChannel, } from "discord.js" import { color, devMessage } from "../../config/options.json" import { Command } from "../interfaces" @@ -26,7 +26,8 @@ export = { .addChannelOption(option => option .setName("channel") - .setDescription("The channel to send the message to."), + .setDescription("The channel to send the message to.") + .addChannelTypes(ChannelType.GuildText, ChannelType.GuildAnnouncement) ) .setDefaultMemberPermissions(PermissionFlagsBits.Administrator) .setDMPermission(false), @@ -35,32 +36,9 @@ export = { await interaction.deferReply({ ephemeral: true }) const message = interaction.options.getString("message")! - const channel2 = - interaction.options.getChannel("channel") ?? interaction.channel + const channel = (interaction.options.getChannel("channel") || interaction.channel) as TextChannel const embedColor = Number(color.replace("#", "0x")) - if (channel2?.type !== ChannelType.GuildText) { - await interaction.editReply({ - embeds: [ - { - description: - "You can only send a message to a text channel.", - color: embedColor, - footer: { - text: interaction.guild!.name + " | " + devMessage, - icon_url: - interaction.guild!.iconURL({ - forceStatic: false, - }) || undefined, - }, - }, - ], - }) - return - } - - const channel = channel2 as GuildTextBasedChannel - channel.send({ embeds: [ { diff --git a/src/commands/setup.ts b/src/commands/setup.ts index 66b66b9..36d1d23 100644 --- a/src/commands/setup.ts +++ b/src/commands/setup.ts @@ -5,7 +5,7 @@ import { ActionRowBuilder, ButtonStyle, ChannelType, - GuildTextBasedChannel, + TextChannel, } from "discord.js" import { color, devMessage } from "../../config/options.json" import { Command } from "../interfaces" @@ -31,6 +31,7 @@ export = { .setDescription( "The channel to send the application to.", ) + .addChannelTypes(ChannelType.GuildText, ChannelType.GuildAnnouncement) .setRequired(true), ), ) @@ -44,6 +45,7 @@ export = { .setDescription( "The channel to send the application to.", ) + .addChannelTypes(ChannelType.GuildText, ChannelType.GuildAnnouncement) .setRequired(true), ), ) @@ -57,6 +59,7 @@ export = { .setDescription( "The channel to send the verfiy message to.", ) + .addChannelTypes(ChannelType.GuildText, ChannelType.GuildAnnouncement) .setRequired(true), ), ) @@ -70,6 +73,7 @@ export = { .setDescription( "The channel to send the waiting list message to.", ) + .addChannelTypes(ChannelType.GuildText, ChannelType.GuildAnnouncement) .setRequired(true), ), ) @@ -83,6 +87,7 @@ export = { .setDescription( "The channel to send the application to.", ) + .addChannelTypes(ChannelType.GuildText, ChannelType.GuildAnnouncement) .setRequired(true), ), ) @@ -94,17 +99,7 @@ export = { const embedColor = Number(color.replace("#", "0x")) if (subcommand === "sendguildapplication") { - const channel2 = interaction.options.getChannel("channel")! - - if (channel2.type !== ChannelType.GuildText) { - await interaction.reply({ - content: "That channel is not a text channel.", - ephemeral: true, - }) - return - } - - const channel = channel2 as GuildTextBasedChannel + const channel = interaction.options.getChannel("channel") as TextChannel await channel.send({ embeds: [ @@ -145,17 +140,7 @@ export = { } if (subcommand === "sendstaffapplication") { - const channel2 = interaction.options.getChannel("channel")! - - if (channel2.type !== ChannelType.GuildText) { - await interaction.reply({ - content: "That channel is not a text channel.", - ephemeral: true, - }) - return - } - - const channel = channel2 as GuildTextBasedChannel + const channel = interaction.options.getChannel("channel") as TextChannel await channel.send({ embeds: [ @@ -195,17 +180,7 @@ export = { } if (subcommand === "sendinactivityapplication") { - const channel2 = interaction.options.getChannel("channel")! - - if (channel2.type !== ChannelType.GuildText) { - await interaction.reply({ - content: "That channel is not a text channel.", - ephemeral: true, - }) - return - } - - const channel = channel2 as GuildTextBasedChannel + const channel = interaction.options.getChannel("channel") as TextChannel await channel.send({ embeds: [ @@ -245,17 +220,7 @@ export = { } if (subcommand === "sendverfiymessage") { - const channel2 = interaction.options.getChannel("channel")! - - if (channel2.type !== ChannelType.GuildText) { - await interaction.reply({ - content: "That channel is not a text channel.", - ephemeral: true, - }) - return - } - - const channel = channel2 as GuildTextBasedChannel + const channel = interaction.options.getChannel("channel") as TextChannel await channel.send({ embeds: [ @@ -294,17 +259,7 @@ export = { } if (subcommand === "sendwaitinglistmessage") { - const channel2 = interaction.options.getChannel("channel")! - - if (channel2.type !== ChannelType.GuildText) { - await interaction.reply({ - content: "That channel is not a text channel.", - ephemeral: true, - }) - return - } - - const channel = channel2 as GuildTextBasedChannel + const channel = interaction.options.getChannel("channel") as TextChannel await channel.send({ embeds: [ diff --git a/src/commands/slowmode.ts b/src/commands/slowmode.ts index bccbb88..9b2a639 100644 --- a/src/commands/slowmode.ts +++ b/src/commands/slowmode.ts @@ -2,7 +2,7 @@ import { SlashCommandBuilder, PermissionFlagsBits, ChannelType, - GuildTextBasedChannel, + TextChannel, } from "discord.js" import { color, devMessage } from "../../config/options.json" import { Command } from "../interfaces" @@ -27,7 +27,8 @@ export = { .addChannelOption(option => option .setName("channel") - .setDescription("The channel to set the slowmode of."), + .setDescription("The channel to set the slowmode of.") + .addChannelTypes(ChannelType.GuildText, ChannelType.GuildAnnouncement), ) .setDefaultMemberPermissions(PermissionFlagsBits.Administrator) .setDMPermission(false), @@ -36,32 +37,9 @@ export = { await interaction.deferReply({ ephemeral: true }) const seconds = interaction.options.getInteger("seconds") ?? 5 - const channel2 = - interaction.options.getChannel("channel") ?? interaction.channel + const channel = (interaction.options.getChannel("channel") || interaction.channel) as TextChannel const embedColor = Number(color.replace("#", "0x")) - if (channel2?.type !== ChannelType.GuildText) { - await interaction.editReply({ - embeds: [ - { - description: - "You can only set the slowmode of a text channel.", - color: embedColor, - footer: { - text: interaction.guild!.name + " | " + devMessage, - icon_url: - interaction.guild!.iconURL({ - forceStatic: false, - }) || undefined, - }, - }, - ], - }) - return - } - - const channel = channel2 as GuildTextBasedChannel - if (seconds > 21600) { await channel.setRateLimitPerUser(21600) await interaction.editReply({ diff --git a/src/components/buttons/guildapplicationaccept.ts b/src/components/buttons/guildapplicationaccept.ts index 99629a9..3cd8baa 100644 --- a/src/components/buttons/guildapplicationaccept.ts +++ b/src/components/buttons/guildapplicationaccept.ts @@ -2,7 +2,7 @@ import { ActionRowBuilder, ButtonStyle, ButtonBuilder, - GuildTextBasedChannel, + TextChannel, } from "discord.js" import { color, @@ -91,7 +91,7 @@ export = { // update waiting list const channel = guild.channels.cache.get( waitingListChannel, - ) as GuildTextBasedChannel + ) as TextChannel const wlmessage = await channel!.messages.fetch(waitingListMessage) const wlembed = wlmessage.embeds[0] diff --git a/src/components/buttons/guildapply.ts b/src/components/buttons/guildapply.ts index 63dcaab..06cfd18 100644 --- a/src/components/buttons/guildapply.ts +++ b/src/components/buttons/guildapply.ts @@ -4,7 +4,7 @@ import { ActionRowBuilder, EmbedBuilder, GuildMember, - GuildTextBasedChannel, + TextChannel, } from "discord.js" import { color } from "../../../config/options.json" import { largeM, smallM, ignM } from "../../../config/limitmessages.json" @@ -537,7 +537,7 @@ export = { const channel = guild.channels.cache.get( applicationsChannel, - ) as GuildTextBasedChannel + ) as TextChannel await channel.send({ embeds: [ { diff --git a/src/components/buttons/guildinactivitylog.ts b/src/components/buttons/guildinactivitylog.ts index 5aced77..da79415 100644 --- a/src/components/buttons/guildinactivitylog.ts +++ b/src/components/buttons/guildinactivitylog.ts @@ -4,7 +4,7 @@ import { ButtonStyle, EmbedBuilder, GuildMember, - GuildTextBasedChannel, + TextChannel, } from "discord.js" import { gm, @@ -305,7 +305,7 @@ module.exports = { const appChannel = guild.channels.cache.get( inactivityLogChannel, - ) as GuildTextBasedChannel + ) as TextChannel await appChannel.send({ embeds: [ diff --git a/src/components/buttons/staffapply.ts b/src/components/buttons/staffapply.ts index 9128b5a..f031ba0 100644 --- a/src/components/buttons/staffapply.ts +++ b/src/components/buttons/staffapply.ts @@ -4,7 +4,7 @@ import { ActionRowBuilder, EmbedBuilder, GuildMember, - GuildTextBasedChannel, + TextChannel, } from "discord.js" import { color, staffApplicationsChannel } from "../../../config/options.json" import { largeM, ignM } from "../../../config/limitmessages.json" @@ -464,7 +464,7 @@ export = { const channel = guild.channels.cache.get( staffApplicationsChannel, - ) as GuildTextBasedChannel + ) as TextChannel await channel.send({ embeds: [ diff --git a/src/events/cron/weeklyGexp.ts b/src/events/cron/weeklyGexp.ts index 6d7a138..0ade5ee 100644 --- a/src/events/cron/weeklyGexp.ts +++ b/src/events/cron/weeklyGexp.ts @@ -7,13 +7,13 @@ import { import { getGuild, getIGN } from "../../utils/Hypixel" import { Cron, GuildData } from "../../interfaces" import Illegitimate from "../../utils/Illegitimate" -import { GuildTextBasedChannel } from "discord.js" +import { TextChannel } from "discord.js" const client = Illegitimate.client async function guildWeekly() { const channel = client.channels.cache.get( guildLogChannel, - ) as GuildTextBasedChannel + ) as TextChannel if (!channel) { console.log("Guild log channel not found") diff --git a/src/events/server/guildMemberAdd/logNewJoins.ts b/src/events/server/guildMemberAdd/logNewJoins.ts index 10d9af2..5642e50 100644 --- a/src/events/server/guildMemberAdd/logNewJoins.ts +++ b/src/events/server/guildMemberAdd/logNewJoins.ts @@ -1,6 +1,7 @@ -import { ChannelType, GuildMember, userMention } from "discord.js" -import { color, botLogChannel } from "../../../../config/options.json" +import { GuildMember, userMention } from "discord.js" +import { color } from "../../../../config/options.json" import { Event } from "../../../interfaces" +import logToChannel from "../../../utils/functions/logtochannel" export = { name: "logNewJoins", @@ -9,24 +10,9 @@ export = { event: "guildMemberAdd", execute(member: GuildMember) { - const channel = member.guild.channels.cache.get(botLogChannel) const embedColor = Number(color.replace("#", "0x")) - if (!channel) { - console.log( - "[ERROR] Could not find channel used for new join logging.", - ) - return - } - - if (channel.type !== ChannelType.GuildText) { - console.log( - "[ERROR] The channel used for new join logging is not a text channel.", - ) - return - } - - channel.send({ + logToChannel("bot", { embeds: [ { title: "New Member", diff --git a/src/events/server/ready/sendOnlineMessage.ts b/src/events/server/ready/sendOnlineMessage.ts index c7ec0fd..40dd0c8 100644 --- a/src/events/server/ready/sendOnlineMessage.ts +++ b/src/events/server/ready/sendOnlineMessage.ts @@ -1,7 +1,6 @@ -import { onlineLogChannel, color } from "../../../../config/options.json" +import logToChannel from "../../../utils/functions/logtochannel" import { Event } from "../../../interfaces" -import { ExtendedClient as Client } from "../../../utils/Client" -import { ChannelType } from "discord.js" +import { color } from "../../../../config/options.json" export = { name: "sendonlinemessage", @@ -9,25 +8,12 @@ export = { type: "event", event: "ready", - execute(client: Client) { + execute() { if (process.env.NODE_ENV === "dev") return - const channel = client.channels.cache.get(onlineLogChannel) const embedColor = Number(color.replace("#", "0x")) - if (!channel) { - console.log( - "[ERROR] Could not find channel used for online message.", - ) - return - } - - if (channel.type !== ChannelType.GuildText) { - console.log("[ERROR] Online message channel is not a text channel.") - return - } - - channel.send({ + logToChannel("online", { embeds: [ { description: "Bot is online!", diff --git a/src/events/server/voiceStateUpdate/vcJoinLeave.ts b/src/events/server/voiceStateUpdate/vcJoinLeave.ts index 9e8d4c2..530dc6c 100644 --- a/src/events/server/voiceStateUpdate/vcJoinLeave.ts +++ b/src/events/server/voiceStateUpdate/vcJoinLeave.ts @@ -2,10 +2,10 @@ import { userMention, channelMention, VoiceState, - ChannelType, } from "discord.js" -import { botLogChannel, color } from "../../../../config/options.json" +import { color } from "../../../../config/options.json" import { Event } from "../../../interfaces" +import logToChannel from "../../../utils/functions/logtochannel" export = { name: "vcJoinLeave", @@ -16,29 +16,12 @@ export = { execute(oldState: VoiceState, newState: VoiceState) { if (process.env.NODE_ENV === "dev") return - const guild = oldState.guild - const channel = guild.channels.cache.get(botLogChannel) const embedColor = Number(color.replace("#", "0x")) - - if (!channel) { - console.log( - "[ERROR] Could not find channel used for voice channel join/leave logging.", - ) - return - } - - if (channel.type !== ChannelType.GuildText) { - console.log( - "[ERROR] The channel used for voice channel join/leave logging is not a text channel.", - ) - return - } - const oldChannel = oldState.channel const newChannel = newState.channel if (oldChannel === null && newChannel !== null) { - channel.send({ + logToChannel("bot", { embeds: [ { title: "Voice Channel Join", @@ -55,7 +38,7 @@ export = { ], }) } else if (oldChannel !== null && newChannel === null) { - channel.send({ + logToChannel("bot", { embeds: [ { title: "Voice Channel Leave", @@ -74,7 +57,7 @@ export = { } else if (oldChannel !== null && newChannel !== null) { if (oldChannel.id === newChannel.id) return - channel.send({ + logToChannel("bot", { embeds: [ { title: "Voice Channel Switch", diff --git a/src/utils/eventHandlers/autocomplete.ts b/src/utils/eventHandlers/autocomplete.ts index d6b790c..834a35e 100644 --- a/src/utils/eventHandlers/autocomplete.ts +++ b/src/utils/eventHandlers/autocomplete.ts @@ -1,9 +1,10 @@ import { ExtendedClient as Client } from "../Client" -import { errorLogChannel, color } from "../../../config/options.json" +import { color } from "../../../config/options.json" import { Autocomplete } from "../../interfaces" -import { Events, GuildTextBasedChannel } from "discord.js" +import { Events } from "discord.js" import path = require("path") import fs = require("fs") +import logToChannel from "../functions/logtochannel" type FileType = "js" | "ts" const embedColor = Number(color.replace("#", "0x")) @@ -52,14 +53,8 @@ export default function loadAutocompleteEvents(client: Client, ft: FileType) { await autocomplete.execute(interaction) } catch (error) { if (process.env.NODE_ENV !== "dev") { - const channel = client.channels.cache.get( - errorLogChannel, - ) as GuildTextBasedChannel - if (!channel) { - console.log("No error log channel found.") - } - await channel.send({ + await logToChannel("error", { embeds: [ { title: "Autocomplete error occured", diff --git a/src/utils/eventHandlers/button.ts b/src/utils/eventHandlers/button.ts index 549a6cf..25d6917 100644 --- a/src/utils/eventHandlers/button.ts +++ b/src/utils/eventHandlers/button.ts @@ -1,9 +1,10 @@ import { ExtendedClient as Client } from "../Client" -import { errorLogChannel, color } from "../../../config/options.json" +import { color } from "../../../config/options.json" import { Button } from "../../interfaces" -import { Events, GuildTextBasedChannel } from "discord.js" +import { Events } from "discord.js" import path = require("path") import fs = require("fs") +import logToChannel from "../functions/logtochannel" type FileType = "js" | "ts" const embedColor = Number(color.replace("#", "0x")) @@ -40,14 +41,8 @@ export default function loadButtonEvents(client: Client, ft: FileType) { await button.execute(interaction) } catch (error) { if (process.env.NODE_ENV !== "dev") { - const channel = client.channels.cache.get( - errorLogChannel, - ) as GuildTextBasedChannel - if (!channel) { - console.log("No error log channel found.") - } - await channel.send({ + await logToChannel("error", { embeds: [ { title: "Button error occured", diff --git a/src/utils/eventHandlers/command.ts b/src/utils/eventHandlers/command.ts index dc462ac..2532e00 100644 --- a/src/utils/eventHandlers/command.ts +++ b/src/utils/eventHandlers/command.ts @@ -1,9 +1,10 @@ import { ExtendedClient as Client } from "../Client" -import { errorLogChannel, color } from "../../../config/options.json" +import { color } from "../../../config/options.json" import { Command } from "../../interfaces" -import { Events, GuildTextBasedChannel } from "discord.js" +import { Events } from "discord.js" import path = require("path") import fs = require("fs") +import logToChannel from "../functions/logtochannel" type FileType = "js" | "ts" const embedColor = Number(color.replace("#", "0x")) @@ -41,14 +42,7 @@ export default function loadSlashCommandsEvents(client: Client, ft: FileType) { await command.execute(interaction, client) } catch (error) { if (process.env.NODE_ENV !== "dev") { - const channel = client.channels.cache.get( - errorLogChannel, - ) as GuildTextBasedChannel - if (!channel) { - console.log("No error log channel found.") - } - - await channel.send({ + await logToChannel("error", { embeds: [ { title: "Command error occured", diff --git a/src/utils/eventHandlers/contextmenu.ts b/src/utils/eventHandlers/contextmenu.ts index 86e08e9..403e835 100644 --- a/src/utils/eventHandlers/contextmenu.ts +++ b/src/utils/eventHandlers/contextmenu.ts @@ -1,9 +1,10 @@ import { ExtendedClient as Client } from "../Client" import { ContextMenu } from "../../interfaces" -import { errorLogChannel, color } from "../../../config/options.json" -import { Events, GuildTextBasedChannel } from "discord.js" +import { color } from "../../../config/options.json" +import { Events } from "discord.js" import path = require("path") import fs = require("fs") +import logToChannel from "../functions/logtochannel" type FileType = "js" | "ts" const embedColor = Number(color.replace("#", "0x")) @@ -48,14 +49,7 @@ export default function loadContextMenuEvents(client: Client, ft: FileType) { await command.execute(interaction) } catch (error) { if (process.env.NODE_ENV !== "dev") { - const channel = client.channels.cache.get( - errorLogChannel, - ) as GuildTextBasedChannel - if (!channel) { - console.log("No error log channel found.") - } - - await channel.send({ + await logToChannel("error", { embeds: [ { title: "Contextmenu error occured", diff --git a/src/utils/eventHandlers/modal.ts b/src/utils/eventHandlers/modal.ts index feaf5e2..8241677 100644 --- a/src/utils/eventHandlers/modal.ts +++ b/src/utils/eventHandlers/modal.ts @@ -1,9 +1,10 @@ import { ExtendedClient as Client } from "../Client" -import { errorLogChannel, color } from "../../../config/options.json" +import { color } from "../../../config/options.json" import { Modal } from "../../interfaces" -import { Events, GuildTextBasedChannel } from "discord.js" +import { Events} from "discord.js" import path = require("path") import fs = require("fs") +import logToChannel from "../functions/logtochannel" type FileType = "js" | "ts" const embedColor = Number(color.replace("#", "0x")) @@ -42,14 +43,7 @@ export default function loadModalEvents(client: Client, ft: FileType) { await modal.execute(interaction) } catch (error) { if (process.env.NODE_ENV !== "dev") { - const channel = client.channels.cache.get( - errorLogChannel, - ) as GuildTextBasedChannel - if (!channel) { - console.log("No error log channel found.") - } - - await channel.send({ + await logToChannel("error", { embeds: [ { title: "Button error occured", diff --git a/src/utils/functions/logtochannel.ts b/src/utils/functions/logtochannel.ts new file mode 100644 index 0000000..4f186b4 --- /dev/null +++ b/src/utils/functions/logtochannel.ts @@ -0,0 +1,25 @@ +import { guildid, onlineLogChannel, botLogChannel, guildLogChannel, errorLogChannel, moderationLogChannel } from "../../../config/options.json" +import { Guild, MessageCreateOptions, TextChannel } from "discord.js" +import Illegitimate from "../Illegitimate" + +const channels = { + online: onlineLogChannel, + bot: botLogChannel, + guild: guildLogChannel, + error: errorLogChannel, + mod: moderationLogChannel +} + +type Channel = keyof typeof channels + +export default async function logToChannel(channel: Channel, message: MessageCreateOptions): Promise { + const guild = Illegitimate.client.guilds.cache.get(guildid) as Guild + + const logChannel = guild.channels.cache.get(channels[channel]) as TextChannel + if (!logChannel) { + console.log(`[ERROR] Could not find channel used for ${channel} logging.`) + return + } + + await logChannel.send(message) +} \ No newline at end of file