joel momoent

This commit is contained in:
2026-02-01 19:28:30 +01:00
parent 032d25c9af
commit 09143a0638
8 changed files with 565 additions and 2 deletions

View File

@@ -0,0 +1,110 @@
/**
* Channel command - restrict Joel to a specific channel
*/
import { SlashCommandBuilder, ChannelType, PermissionFlagsBits } from "discord.js";
import type { Command } from "../types";
import { db } from "../../database";
import { botOptions } from "../../database/schema";
import { eq } from "drizzle-orm";
const command: Command = {
data: new SlashCommandBuilder()
.setName("channel")
.setDescription("Restrict Joel to respond only in a specific channel")
.addSubcommand(subcommand =>
subcommand
.setName("set")
.setDescription("Set the channel where Joel is allowed to respond")
.addChannelOption(option =>
option
.setName("channel")
.setDescription("The channel to restrict Joel to")
.addChannelTypes(ChannelType.GuildText)
.setRequired(true)
)
)
.addSubcommand(subcommand =>
subcommand
.setName("clear")
.setDescription("Remove channel restriction - Joel can respond anywhere")
)
.addSubcommand(subcommand =>
subcommand
.setName("status")
.setDescription("Check the current channel restriction")
)
.setDefaultMemberPermissions(PermissionFlagsBits.ManageGuild) as SlashCommandBuilder,
category: "moderation",
execute: async (interaction) => {
if (!interaction.inGuild()) {
await interaction.reply({ content: "This command can only be used in a server.", ephemeral: true });
return;
}
const guildId = interaction.guildId;
const subcommand = interaction.options.getSubcommand();
// Get or create bot options for this guild
const existing = await db
.select()
.from(botOptions)
.where(eq(botOptions.guild_id, guildId))
.limit(1);
if (subcommand === "set") {
const channel = interaction.options.getChannel("channel", true);
if (existing.length === 0) {
await db.insert(botOptions).values({
guild_id: guildId,
restricted_channel_id: channel.id,
});
} else {
await db
.update(botOptions)
.set({
restricted_channel_id: channel.id,
updated_at: new Date().toISOString(),
})
.where(eq(botOptions.guild_id, guildId));
}
await interaction.reply({
content: `✅ Joel is now restricted to <#${channel.id}>.\n\n*Though knowing Joel, he might occasionally break the rules anyway...*`,
ephemeral: true,
});
} else if (subcommand === "clear") {
if (existing.length > 0) {
await db
.update(botOptions)
.set({
restricted_channel_id: null,
updated_at: new Date().toISOString(),
})
.where(eq(botOptions.guild_id, guildId));
}
await interaction.reply({
content: "✅ Channel restriction removed. Joel can now respond in any channel.",
ephemeral: true,
});
} else if (subcommand === "status") {
const restrictedChannelId = existing[0]?.restricted_channel_id;
if (restrictedChannelId) {
await interaction.reply({
content: `📍 Joel is currently restricted to <#${restrictedChannelId}>.\n\nUse \`/channel clear\` to remove the restriction.`,
ephemeral: true,
});
} else {
await interaction.reply({
content: "🌐 Joel is not restricted to any channel - he can respond anywhere.\n\nUse `/channel set` to restrict him.",
ephemeral: true,
});
}
}
},
};
export default command;