style(norme/eslint): now edited the husky rules before commiting

This commit is contained in:
Raphael 2025-08-18 14:57:23 +02:00
parent 439ddab587
commit 1c4c0f5872
16 changed files with 1883 additions and 1845 deletions

View file

@ -1,93 +1,95 @@
import { prisma } from "../../lib/prisma.ts";
import { prisma } from '../../lib/prisma.ts';
import {
ActionRowBuilder,
ChannelType,
PermissionsBitField,
ComponentType,
StringSelectMenuBuilder,
StringSelectMenuInteraction,
StringSelectMenuOptionBuilder,
SlashCommandBuilder,
MessageFlags,
SlashCommandBuilder,
EmbedBuilder,
} from "discord.js";
import emoji from "../../../assets/emoji.json" assert { type: "json" };
ActionRowBuilder,
ChannelType,
PermissionsBitField,
ComponentType,
StringSelectMenuBuilder,
StringSelectMenuInteraction,
StringSelectMenuOptionBuilder,
SlashCommandBuilder,
MessageFlags,
SlashCommandBuilder,
EmbedBuilder,
} from 'discord.js';
import emoji from '../../../assets/emoji.json' assert { type: 'json' };
export default {
data: new SlashCommandBuilder()
.setName("logs")
.setDescription("edit the logs configuration")
.addStringOption((option) =>
option
.setName("action")
.setDescription("What is the action you to perform")
.setRequired(true)
.addChoices(
{
name: "Show",
value: "logs_show",
},
{
name: "Auto-configuration",
value: "logs_auto",
},
{
name: "Configuration",
value: "logs_config",
},
),
),
async execute(interaction: CommandInteraction) {
let guildData: Guild;
try {
guildData = await prisma.guild.findUnique({
where: {
id: interaction.guild.id,
},
});
} catch (err) {
console.error(
`\t⚠ | Cannot get the database connection!\n\t\t(${err}).`,
);
await interaction.reply({
content: `${emoji.answer.error} | Cannot connect to the database`,
flags: MessageFlags.Ephemeral,
});
return;
}
let userData: User;
try {
userData = await prisma.user.findUnique({
where: {
id: interaction.user.id,
},
});
} catch (err) {
throw `\t⚠ | Cannot get the database connection!\n\t\t(${err}).`;
await interaction.reply({
content: `${emoji.answer.error} | Cannot connect to the database`,
flags: MessageFlags.Ephemeral,
});
return;
}
const choice: string = interaction.options.getString("action");
switch (choice) {
case "logs_show": {
if (!userData.isOwner) {
await interaction.reply({
content: `${emoji.answer.no} | This command is only for owner`,
flags: MessageFlags.Ephemeral,
});
return;
}
if (guildData.logEnable) {
const logsData: EmbedBuilder = new EmbedBuilder()
.setTitle(`Logs for ${interaction.guild.name}`)
.setColor(`${guildData.color}`)
.setFooter({
text: guildData.footer,
}).setDescription(`
data: new SlashCommandBuilder()
.setName('logs')
.setDescription('edit the logs configuration')
.addStringOption((option) =>
option
.setName('action')
.setDescription('What is the action you to perform')
.setRequired(true)
.addChoices(
{
name: 'Show',
value: 'logs_show',
},
{
name: 'Auto-configuration',
value: 'logs_auto',
},
{
name: 'Configuration',
value: 'logs_config',
},
),
),
async execute(interaction: CommandInteraction) {
let guildData: Guild;
try {
guildData = await prisma.guild.findUnique({
where: {
id: interaction.guild.id,
},
});
}
catch (err) {
console.error(
`\t⚠ | Cannot get the database connection!\n\t\t(${err}).`,
);
await interaction.reply({
content: `${emoji.answer.error} | Cannot connect to the database`,
flags: MessageFlags.Ephemeral,
});
return;
}
let userData: User;
try {
userData = await prisma.user.findUnique({
where: {
id: interaction.user.id,
},
});
}
catch (err) {
throw `\t⚠ | Cannot get the database connection!\n\t\t(${err}).`;
await interaction.reply({
content: `${emoji.answer.error} | Cannot connect to the database`,
flags: MessageFlags.Ephemeral,
});
return;
}
const choice: string = interaction.options.getString('action');
switch (choice) {
case 'logs_show': {
if (!userData.isOwner) {
await interaction.reply({
content: `${emoji.answer.no} | This command is only for owner`,
flags: MessageFlags.Ephemeral,
});
return;
}
if (guildData.logEnable) {
const logsData: EmbedBuilder = new EmbedBuilder()
.setTitle(`Logs for ${interaction.guild.name}`)
.setColor(`${guildData.color}`)
.setFooter({
text: guildData.footer,
}).setDescription(`
${guildData.logCategory ? `${emoji.answer.yes} | Categories` : `${emoji.answer.no} | Categories`}
${guildData.logBot ? `${emoji.answer.yes} | Bot` : `${emoji.answer.no} | Bot`}
${guildData.logChannels ? `${emoji.answer.yes} | Channels` : `${emoji.answer.no} | Channels`}
@ -97,185 +99,186 @@ export default {
${guildData.logServer ? `${emoji.answer.yes} | Server` : `${emoji.answer.no} | Server`}
`);
await interaction.reply({
embeds: [logsData],
});
} else {
await interaction.reply({
content: `${emoji.answer.no} | The log is disable on the server`,
flags: MessageFlags.Ephemeral,
});
}
return;
}
case "logs_auto": {
if (!userData.isOwner) {
await interaction.reply({
content: `${emoji.answer.no} | This command is only for owner`,
flags: MessageFlags.Ephemeral,
});
return;
}
if (guildData.logEnable) {
await interaction.reply({
content: `${emoji.answer.error} | The log is already setup on this server`,
flags: MessageFlags.Ephemeral,
});
return;
}
await interaction.reply({
embeds: [logsData],
});
}
else {
await interaction.reply({
content: `${emoji.answer.no} | The log is disable on the server`,
flags: MessageFlags.Ephemeral,
});
}
return;
}
case 'logs_auto': {
if (!userData.isOwner) {
await interaction.reply({
content: `${emoji.answer.no} | This command is only for owner`,
flags: MessageFlags.Ephemeral,
});
return;
}
if (guildData.logEnable) {
await interaction.reply({
content: `${emoji.answer.error} | The log is already setup on this server`,
flags: MessageFlags.Ephemeral,
});
return;
}
const roles = interaction.guild?.roles.cache
.filter((role) => !role.managed && role.id !== interaction.guild?.id)
.sort((a, b) => b.position - a.position);
const roles = interaction.guild?.roles.cache
.filter((role) => !role.managed && role.id !== interaction.guild?.id)
.sort((a, b) => b.position - a.position);
const menu = new StringSelectMenuBuilder()
.setCustomId("role_select")
.setPlaceholder("Choose the role that will have logs access")
.setMinValues(1)
.setMaxValues(Math.min(roles.size, 25))
.addOptions(
roles.map((role) =>
new StringSelectMenuOptionBuilder()
.setLabel(role.name)
.setValue(role.id),
),
);
const menu = new StringSelectMenuBuilder()
.setCustomId('role_select')
.setPlaceholder('Choose the role that will have logs access')
.setMinValues(1)
.setMaxValues(Math.min(roles.size, 25))
.addOptions(
roles.map((role) =>
new StringSelectMenuOptionBuilder()
.setLabel(role.name)
.setValue(role.id),
),
);
const roleSelection =
const roleSelection =
new ActionRowBuilder<StringSelectMenuBuilder>().addComponents(menu);
const permSelector: EmbedBuilder = new EmbedBuilder()
.setTitle("Which role will have access")
.setColor(`${guildData.color}`)
.setFooter({
text: guildData.footer,
});
const permSelector: EmbedBuilder = new EmbedBuilder()
.setTitle('Which role will have access')
.setColor(`${guildData.color}`)
.setFooter({
text: guildData.footer,
});
const msg = await interaction.reply({
embeds: [permSelector],
components: [roleSelection],
flags: MessageFlags.fetchReply,
});
const collector = msg.createMessageComponentCollector({
componentType: ComponentType.StringSelect,
time: 60_000,
max: 25,
});
collector.on(
"collect",
async (selectInteraction: StringSelectMenuInteraction) => {
if (selectInteraction.user.id !== interaction.user.id) {
selectInteraction.reply({
content: `${emoji.answer.no} | You cannot use this selector !`,
ephemeral: true,
});
return;
}
const selectedRoles = selectInteraction.values;
const permissionOverwrites = [
{
id: interaction.guild.roles.everyone.id,
deny: [
PermissionsBitField.Flags.ViewChannel,
PermissionsBitField.Flags.SendMessages,
],
},
...selectedRoles.map((id) => ({
id,
allow: [PermissionsBitField.Flags.ViewChannel],
})),
];
const msg = await interaction.reply({
embeds: [permSelector],
components: [roleSelection],
flags: MessageFlags.fetchReply,
});
const collector = msg.createMessageComponentCollector({
componentType: ComponentType.StringSelect,
time: 60_000,
max: 25,
});
collector.on(
'collect',
async (selectInteraction: StringSelectMenuInteraction) => {
if (selectInteraction.user.id !== interaction.user.id) {
selectInteraction.reply({
content: `${emoji.answer.no} | You cannot use this selector !`,
ephemeral: true,
});
return;
}
const selectedRoles = selectInteraction.values;
const permissionOverwrites = [
{
id: interaction.guild.roles.everyone.id,
deny: [
PermissionsBitField.Flags.ViewChannel,
PermissionsBitField.Flags.SendMessages,
],
},
...selectedRoles.map((id) => ({
id,
allow: [PermissionsBitField.Flags.ViewChannel],
})),
];
const category = (await interaction.guild.channels.create({
name: "Logs",
type: ChannelType.GuildCategory,
permissionOverwrites,
})) as CategoryChannel;
const category = (await interaction.guild.channels.create({
name: 'Logs',
type: ChannelType.GuildCategory,
permissionOverwrites,
})) as CategoryChannel;
const logBot = (await interaction.guild.channels.create({
name: "bot-logs",
type: ChannelType.GuildText,
parent: category,
permissionOverwrites,
})) as TextChannel;
const logBot = (await interaction.guild.channels.create({
name: 'bot-logs',
type: ChannelType.GuildText,
parent: category,
permissionOverwrites,
})) as TextChannel;
const logChannels = (await interaction.guild.channels.create({
name: "channel-logs",
type: ChannelType.GuildText,
parent: category,
permissionOverwrites,
})) as TextChannel;
const logChannels = (await interaction.guild.channels.create({
name: 'channel-logs',
type: ChannelType.GuildText,
parent: category,
permissionOverwrites,
})) as TextChannel;
const logMember = (await interaction.guild.channels.create({
name: "member-logs",
type: ChannelType.GuildText,
parent: category,
permissionOverwrites,
})) as TextChannel;
const logMember = (await interaction.guild.channels.create({
name: 'member-logs',
type: ChannelType.GuildText,
parent: category,
permissionOverwrites,
})) as TextChannel;
const logMod = (await interaction.guild.channels.create({
name: "mod-logs",
type: ChannelType.GuildText,
parent: category,
permissionOverwrites,
})) as TextChannel;
const logMod = (await interaction.guild.channels.create({
name: 'mod-logs',
type: ChannelType.GuildText,
parent: category,
permissionOverwrites,
})) as TextChannel;
const logMsg = (await interaction.guild.channels.create({
name: "message-logs",
type: ChannelType.GuildText,
parent: category,
permissionOverwrites,
})) as TextChannel;
const logMsg = (await interaction.guild.channels.create({
name: 'message-logs',
type: ChannelType.GuildText,
parent: category,
permissionOverwrites,
})) as TextChannel;
const logServer = (await interaction.guild.channels.create({
name: "server-logs",
type: ChannelType.GuildText,
parent: category,
permissionOverwrites,
})) as TextChannel;
const logServer = (await interaction.guild.channels.create({
name: 'server-logs',
type: ChannelType.GuildText,
parent: category,
permissionOverwrites,
})) as TextChannel;
await prisma.guild.update({
where: {
id: interaction.guild.id,
},
data: {
logEnable: true,
logCategory: category.id,
logBot: logBot.id,
logChannels: logChannels.id,
logMember: logMember.id,
logMod: logMod.id,
logMsg: logMsg.id,
logServer: logServer.id,
},
});
const mentionList = selectedRoles
.map((id) => `- <@&${id}>`)
.join("\n");
const autoConfig = new EmbedBuilder()
.setTitle("The logs category is created")
.setDescription(
`
await prisma.guild.update({
where: {
id: interaction.guild.id,
},
data: {
logEnable: true,
logCategory: category.id,
logBot: logBot.id,
logChannels: logChannels.id,
logMember: logMember.id,
logMod: logMod.id,
logMsg: logMsg.id,
logServer: logServer.id,
},
});
const mentionList = selectedRoles
.map((id) => `- <@&${id}>`)
.join('\n');
const autoConfig = new EmbedBuilder()
.setTitle('The logs category is created')
.setDescription(
`
This following roles will have access to the logs.
${mentionList}
`,
)
.setColor(`${guildData.color}`)
.setFooter({
text: guildData.footer,
});
await selectInteraction.update({
embeds: [autoConfig],
components: [],
});
return;
},
);
break;
}
default:
console.error(`no choice on logs command ${choice}`);
return;
}
},
)
.setColor(`${guildData.color}`)
.setFooter({
text: guildData.footer,
});
await selectInteraction.update({
embeds: [autoConfig],
components: [],
});
return;
},
);
break;
}
default:
console.error(`no choice on logs command ${choice}`);
return;
}
},
};

View file

@ -1,322 +1,326 @@
import { prisma } from "../../lib/prisma.ts";
import { prisma } from '../../lib/prisma.ts';
import {
ActivityType,
PresenceUpdateStatus,
MessageFlags,
SlashCommandBuilder,
} from "discord.js";
import emoji from "../../../assets/emoji.json" assert { type: "json" };
ActivityType,
PresenceUpdateStatus,
MessageFlags,
SlashCommandBuilder,
} from 'discord.js';
import emoji from '../../../assets/emoji.json' assert { type: 'json' };
export default {
data: new SlashCommandBuilder()
.setName("set")
.setDescription("edit the default behavour of the bot")
.addSubcommand((subcommand) =>
subcommand
.setName("color")
.setDescription("Change the default color for the embed")
.addStringOption((option) =>
option
.setName("color")
.setDescription("The new color by default")
.setRequired(true),
),
)
.addSubcommand((subcommand) =>
subcommand
.setName("footer")
.setDescription("Change the default footer for the embed")
.addStringOption((option) =>
option
.setName("text")
.setDescription("The new text by default of the bot")
.setRequired(true),
),
)
.addSubcommand((subcommand) =>
subcommand
.setName("pp")
.setDescription("Change the bot profile picture")
.addStringOption((option) =>
option
.setName("link")
.setDescription("The new link to the new profile picture")
.setRequired(true),
),
)
.addSubcommand((subcommand) =>
subcommand
.setName("status")
.setDescription("Change the status of the bot")
.addStringOption((option) =>
option
.setName("status")
.setDescription("The new status used by the bot")
.setRequired(true),
)
.addStringOption((option) =>
option
.setName("presence")
.setDescription("The new presence of the bot")
.setRequired(true)
.addChoices(
{
name: "Online",
value: "online",
},
{
name: "Do not disturb",
value: "dnd",
},
{
name: "Idle",
value: "idle",
},
{
name: "Invisible",
value: "invisible",
},
),
)
.addStringOption((option) =>
option
.setName("type")
.setDescription("The type of the new activity")
.setRequired(true)
.addChoices(
{
name: "Playing",
value: "play",
},
{
name: "Watching",
value: "watch",
},
{
name: "Listening",
value: "listen",
},
{
name: "Competing",
value: "competing",
},
{
name: "Streaming",
value: "stream",
},
),
),
),
async execute(interaction: CommandInteraction) {
let userData: User;
try {
userData = await prisma.user.findUnique({
where: {
id: interaction.user.id,
},
});
} catch (err) {
console.error(
`\t⚠ | Cannot get the database connection!\n\t\t(${err}).`,
);
await interaction.reply({
content: `${emoji.answer.error} | Cannot connect to the database`,
flags: MessageFlags.Ephemeral,
});
return;
}
const subcommand: string = interaction.options.getSubcommand();
switch (subcommand) {
case "color": {
if (!userData.isOwner) {
await interaction.reply({
content: `${emoji.answer.no} | This command is only for owner`,
flags: MessageFlags.Ephemeral,
});
return;
}
const newColor: string = interaction.options.getString("color");
if (!/^#[0-9A-Fa-f]{6}$/.test(newColor)) {
await interaction.reply({
content: `${emoji.answer.no} | You have to give a color with the syntax: \`#000000\`.`,
flags: MessageFlags.Ephemeral,
});
return;
}
await prisma.guild.upsert({
where: {
id: interaction.guild.id,
},
update: {
color: newColor,
},
create: {
id: interaction.guild.id,
color: newColor,
},
});
await interaction.reply({
content: `${emoji.answer.yes} | The default color for embed will be now changed by \`${newColor}\``,
flags: MessageFlags.Ephemeral,
});
return;
}
case "footer": {
if (!userData.isOwner) {
await interaction.reply({
content: `${emoji.answer.no} | This command is only for owner`,
flags: MessageFlags.Ephemeral,
});
return;
}
const newFooter: string = interaction.options.getString("text");
if (newFooter.length > 2048) {
await interaction.reply({
content: `${emoji.answer.no} | The maximum lenght for the footer is 2048`,
flags: MessageFlags.Ephemeral,
});
return;
}
await prisma.guild.upsert({
where: {
id: interaction.guild.id,
},
update: {
footer: newFooter,
},
create: {
id: interaction.guild.id,
footer: newFooter,
},
});
await interaction.reply({
content: `${emoji.answer.yes} | The default footer for embed will be now changed by \`${newFooter}\`.`,
flags: MessageFlags.Ephemeral,
});
return;
}
case "pp": {
if (!userData.isBuyer) {
await interaction.reply({
content: `${emoji.answer.no} | This command is only for buyer`,
flags: MessageFlags.Ephemeral,
});
return;
}
const newPicture: string = interaction.options.getString("link");
try {
interaction.client.user.setAvatar(newPicture);
} catch (err) {
await interaction.reply({
content: `${emoji.answer.no} | Error during changing the bot profile picture`,
flags: MessageFlags.Ephemeral,
});
console.error(
`\t⚠ | Cannot change the bot profile picture!\n\t\t(${err}).`,
);
}
await interaction.reply({
content: `${emoji.answer.yes} | The picture profile of the bot is now updated.`,
flags: MessageFlags.Ephemeral,
});
return;
}
case "status": {
if (!userData.isBuyer) {
await interaction.reply({
content: `${emoji.answer.no} | This command is only for buyer`,
flags: MessageFlags.Ephemeral,
});
return;
}
const newStatus: string = interaction.options.getString("status");
const tmpType: string = interaction.options.getString("type");
let newType: ActivityType;
switch (tmpType) {
case "play":
newType = ActivityType.Playing;
break;
case "listen":
newType = ActivityType.Listening;
break;
case "watch":
newType = ActivityType.Watching;
break;
case "stream":
newType = ActivityType.Streaming;
break;
case "competing":
newType = ActivityType.Competing;
break;
}
const tmpPresence: string = interaction.options.getString("presence");
let newPresence: PresenceUpdateStatus;
switch (tmpPresence) {
case "online":
newPresence = PresenceUpdateStatus.Online;
break;
case "idle":
newPresence = PresenceUpdateStatus.Idle;
break;
case "dnd":
newPresence = PresenceUpdateStatus.DoNotDisturb;
break;
case "invisible":
newPresence = PresenceUpdateStatus.Invisible;
break;
}
try {
await prisma.bot.upsert({
where: {
id: 1,
},
update: {
status: newStatus,
type: tmpType,
presence: newPresence,
},
create: {
id: 1,
status: newStatus,
type: tmpType,
presence: newPresence,
},
});
if (tmpType === "steam") {
interaction.client.user.setPresence({
status: newPresence,
activities: [
{
name: newStatus,
type: newType,
url: "https://twitch.tv/EniumRaphael",
},
],
});
} else {
interaction.client.user.setPresence({
status: newPresence,
activities: [
{
name: newStatus,
type: newType,
},
],
});
}
} catch (err) {
await interaction.reply({
content: `${emoji.answer.no} | Cannot change the status\n\n\t${err}`,
flags: MessageFlags.Ephemeral,
});
return;
}
await interaction.reply({
content: `${emoji.answer.yes} | The new activity is now \`${newStatus}\``,
flags: MessageFlags.Ephemeral,
});
return;
}
}
},
data: new SlashCommandBuilder()
.setName('set')
.setDescription('edit the default behavour of the bot')
.addSubcommand((subcommand) =>
subcommand
.setName('color')
.setDescription('Change the default color for the embed')
.addStringOption((option) =>
option
.setName('color')
.setDescription('The new color by default')
.setRequired(true),
),
)
.addSubcommand((subcommand) =>
subcommand
.setName('footer')
.setDescription('Change the default footer for the embed')
.addStringOption((option) =>
option
.setName('text')
.setDescription('The new text by default of the bot')
.setRequired(true),
),
)
.addSubcommand((subcommand) =>
subcommand
.setName('pp')
.setDescription('Change the bot profile picture')
.addStringOption((option) =>
option
.setName('link')
.setDescription('The new link to the new profile picture')
.setRequired(true),
),
)
.addSubcommand((subcommand) =>
subcommand
.setName('status')
.setDescription('Change the status of the bot')
.addStringOption((option) =>
option
.setName('status')
.setDescription('The new status used by the bot')
.setRequired(true),
)
.addStringOption((option) =>
option
.setName('presence')
.setDescription('The new presence of the bot')
.setRequired(true)
.addChoices(
{
name: 'Online',
value: 'online',
},
{
name: 'Do not disturb',
value: 'dnd',
},
{
name: 'Idle',
value: 'idle',
},
{
name: 'Invisible',
value: 'invisible',
},
),
)
.addStringOption((option) =>
option
.setName('type')
.setDescription('The type of the new activity')
.setRequired(true)
.addChoices(
{
name: 'Playing',
value: 'play',
},
{
name: 'Watching',
value: 'watch',
},
{
name: 'Listening',
value: 'listen',
},
{
name: 'Competing',
value: 'competing',
},
{
name: 'Streaming',
value: 'stream',
},
),
),
),
async execute(interaction: CommandInteraction) {
let userData: User;
try {
userData = await prisma.user.findUnique({
where: {
id: interaction.user.id,
},
});
}
catch (err) {
console.error(
`\t⚠ | Cannot get the database connection!\n\t\t(${err}).`,
);
await interaction.reply({
content: `${emoji.answer.error} | Cannot connect to the database`,
flags: MessageFlags.Ephemeral,
});
return;
}
const subcommand: string = interaction.options.getSubcommand();
switch (subcommand) {
case 'color': {
if (!userData.isOwner) {
await interaction.reply({
content: `${emoji.answer.no} | This command is only for owner`,
flags: MessageFlags.Ephemeral,
});
return;
}
const newColor: string = interaction.options.getString('color');
if (!/^#[0-9A-Fa-f]{6}$/.test(newColor)) {
await interaction.reply({
content: `${emoji.answer.no} | You have to give a color with the syntax: \`#000000\`.`,
flags: MessageFlags.Ephemeral,
});
return;
}
await prisma.guild.upsert({
where: {
id: interaction.guild.id,
},
update: {
color: newColor,
},
create: {
id: interaction.guild.id,
color: newColor,
},
});
await interaction.reply({
content: `${emoji.answer.yes} | The default color for embed will be now changed by \`${newColor}\``,
flags: MessageFlags.Ephemeral,
});
return;
}
case 'footer': {
if (!userData.isOwner) {
await interaction.reply({
content: `${emoji.answer.no} | This command is only for owner`,
flags: MessageFlags.Ephemeral,
});
return;
}
const newFooter: string = interaction.options.getString('text');
if (newFooter.length > 2048) {
await interaction.reply({
content: `${emoji.answer.no} | The maximum lenght for the footer is 2048`,
flags: MessageFlags.Ephemeral,
});
return;
}
await prisma.guild.upsert({
where: {
id: interaction.guild.id,
},
update: {
footer: newFooter,
},
create: {
id: interaction.guild.id,
footer: newFooter,
},
});
await interaction.reply({
content: `${emoji.answer.yes} | The default footer for embed will be now changed by \`${newFooter}\`.`,
flags: MessageFlags.Ephemeral,
});
return;
}
case 'pp': {
if (!userData.isBuyer) {
await interaction.reply({
content: `${emoji.answer.no} | This command is only for buyer`,
flags: MessageFlags.Ephemeral,
});
return;
}
const newPicture: string = interaction.options.getString('link');
try {
interaction.client.user.setAvatar(newPicture);
}
catch (err) {
await interaction.reply({
content: `${emoji.answer.no} | Error during changing the bot profile picture`,
flags: MessageFlags.Ephemeral,
});
console.error(
`\t⚠ | Cannot change the bot profile picture!\n\t\t(${err}).`,
);
}
await interaction.reply({
content: `${emoji.answer.yes} | The picture profile of the bot is now updated.`,
flags: MessageFlags.Ephemeral,
});
return;
}
case 'status': {
if (!userData.isBuyer) {
await interaction.reply({
content: `${emoji.answer.no} | This command is only for buyer`,
flags: MessageFlags.Ephemeral,
});
return;
}
const newStatus: string = interaction.options.getString('status');
const tmpType: string = interaction.options.getString('type');
let newType: ActivityType;
switch (tmpType) {
case 'play':
newType = ActivityType.Playing;
break;
case 'listen':
newType = ActivityType.Listening;
break;
case 'watch':
newType = ActivityType.Watching;
break;
case 'stream':
newType = ActivityType.Streaming;
break;
case 'competing':
newType = ActivityType.Competing;
break;
}
const tmpPresence: string = interaction.options.getString('presence');
let newPresence: PresenceUpdateStatus;
switch (tmpPresence) {
case 'online':
newPresence = PresenceUpdateStatus.Online;
break;
case 'idle':
newPresence = PresenceUpdateStatus.Idle;
break;
case 'dnd':
newPresence = PresenceUpdateStatus.DoNotDisturb;
break;
case 'invisible':
newPresence = PresenceUpdateStatus.Invisible;
break;
}
try {
await prisma.bot.upsert({
where: {
id: 1,
},
update: {
status: newStatus,
type: tmpType,
presence: newPresence,
},
create: {
id: 1,
status: newStatus,
type: tmpType,
presence: newPresence,
},
});
if (tmpType === 'steam') {
interaction.client.user.setPresence({
status: newPresence,
activities: [
{
name: newStatus,
type: newType,
url: 'https://twitch.tv/EniumRaphael',
},
],
});
}
else {
interaction.client.user.setPresence({
status: newPresence,
activities: [
{
name: newStatus,
type: newType,
},
],
});
}
}
catch (err) {
await interaction.reply({
content: `${emoji.answer.no} | Cannot change the status\n\n\t${err}`,
flags: MessageFlags.Ephemeral,
});
return;
}
await interaction.reply({
content: `${emoji.answer.yes} | The new activity is now \`${newStatus}\``,
flags: MessageFlags.Ephemeral,
});
return;
}
}
},
};

View file

@ -1,247 +1,254 @@
import { EmbedBuilder, MessageFlags, SlashCommandBuilder } from "discord.js";
import { prisma } from "../../lib/prisma.ts";
import emoji from "../../../assets/emoji.json" assert { type: "json" };
import { EmbedBuilder, MessageFlags, SlashCommandBuilder } from 'discord.js';
import { prisma } from '../../lib/prisma.ts';
import emoji from '../../../assets/emoji.json' assert { type: 'json' };
export default {
data: new SlashCommandBuilder()
.setName("buyer")
.setDescription("Interact with the buyers")
.addSubcommand((subcommand) =>
subcommand
.setName("add")
.setDescription("Add a user on the buyer list")
.addUserOption((option) =>
option
.setName("target")
.setDescription("The user who will be added to the list")
.setRequired(true),
),
)
.addSubcommand((subcommand) =>
subcommand
.setName("delete")
.setDescription("Delete a user on the buyer list")
.addUserOption((option) =>
option
.setName("target")
.setDescription("The user who will be deleted to the list")
.setRequired(true),
),
)
.addSubcommand((subcommand) =>
subcommand.setName("list").setDescription("The list of the buyer"),
),
async execute(interaction: CommandInteraction) {
const subcommand = interaction.options.getSubcommand();
let userData: User;
try {
userData = await prisma.user.findUnique({
where: {
id: interaction.user.id,
},
});
} catch (err) {
console.error(
`\t⚠ | Cannot get the database connection!\n\t\t(${err}).`,
);
await interaction.reply({
content: `${emoji.answer.error} | Cannot connect to the database`,
flags: MessageFlags.Ephemeral,
});
return;
}
let guildData: Guild;
try {
guildData = await prisma.guild.findUnique({
where: {
id: interaction.guild.id,
},
});
} catch (err) {
console.error(
`\t⚠ | Cannot get the database connection!\n\t\t(${err}).`,
);
await interaction.reply({
content: `${emoji.answer.error} | Cannot connect to the database`,
flags: MessageFlags.Ephemeral,
});
return;
}
const target: GuildMember = interaction.options.getUser("target");
switch (subcommand) {
case "add":
if (!userData.isDev) {
await interaction.reply({
content: `${emoji.answer.no} | This command is only for the developper of the bot`,
flags: MessageFlags.Ephemeral,
});
return;
}
try {
await prisma.bot.update({
where: {
id: 1,
},
data: {
buyers: {
connect: {
id: target.id,
},
},
owners: {
connect: {
id: target.id,
},
},
},
});
await prisma.user.upsert({
where: {
id: target.id,
},
update: {
isBuyer: true,
isOwner: true,
},
create: {
id: target.id,
isBuyer: true,
isOwner: true,
},
});
} catch (err) {
console.error(
`⚠️ | Error when adding ${target.username} to the buyer list\n\t${err}`,
);
await interaction.reply({
content: `${emoji.answer.error} | Error when adding ${target.username} to the owner list`,
flags: MessageFlags.Ephemeral,
});
return;
}
await interaction.reply({
content: `${emoji.answer.yes} | ${target.username} has been added to the buyer list`,
flags: MessageFlags.Ephemeral,
});
return;
case "delete":
if (!userData.isDev) {
await interaction.reply({
content: `${emoji.answer.no} | This command is only for buyer`,
flags: MessageFlags.Ephemeral,
});
return;
} else if (interaction.user.id === target.id) {
await interaction.reply({
content: `${emoji.answer.no} | You cannot removing yourself from the buyer list`,
flags: MessageFlags.Ephemeral,
});
return;
}
try {
await prisma.bot.update({
where: {
id: 1,
},
data: {
buyers: {
disconnect: {
id: target.id,
},
},
owners: {
disconnect: {
id: target.id,
},
},
},
});
await prisma.user.upsert({
where: {
id: target.id,
},
update: {
isBuyer: false,
isOwner: false,
},
create: {
id: target.id,
isBuyer: false,
isOwner: false,
},
});
} catch (err) {
console.error(
`⚠️ | Error when removing ${target.username} to the buyer list\n\t${err}`,
);
return;
}
await interaction.reply({
content: `${emoji.answer.yes} | ${target.username} has been removing to the buyer list`,
flags: MessageFlags.Ephemeral,
});
return;
case "list":
if (!userData.isBuyer) {
await interaction.reply({
content: `${emoji.answer.no} | This command is only for buyer`,
flags: MessageFlags.Ephemeral,
});
return;
}
try {
const bot = await prisma.bot.findUnique({
where: {
id: 1,
},
include: {
buyers: true,
},
});
data: new SlashCommandBuilder()
.setName('buyer')
.setDescription('Interact with the buyers')
.addSubcommand((subcommand) =>
subcommand
.setName('add')
.setDescription('Add a user on the buyer list')
.addUserOption((option) =>
option
.setName('target')
.setDescription('The user who will be added to the list')
.setRequired(true),
),
)
.addSubcommand((subcommand) =>
subcommand
.setName('delete')
.setDescription('Delete a user on the buyer list')
.addUserOption((option) =>
option
.setName('target')
.setDescription('The user who will be deleted to the list')
.setRequired(true),
),
)
.addSubcommand((subcommand) =>
subcommand.setName('list').setDescription('The list of the buyer'),
),
async execute(interaction: CommandInteraction) {
const subcommand = interaction.options.getSubcommand();
let userData: User;
try {
userData = await prisma.user.findUnique({
where: {
id: interaction.user.id,
},
});
}
catch (err) {
console.error(
`\t⚠ | Cannot get the database connection!\n\t\t(${err}).`,
);
await interaction.reply({
content: `${emoji.answer.error} | Cannot connect to the database`,
flags: MessageFlags.Ephemeral,
});
return;
}
let guildData: Guild;
try {
guildData = await prisma.guild.findUnique({
where: {
id: interaction.guild.id,
},
});
}
catch (err) {
console.error(
`\t⚠ | Cannot get the database connection!\n\t\t(${err}).`,
);
await interaction.reply({
content: `${emoji.answer.error} | Cannot connect to the database`,
flags: MessageFlags.Ephemeral,
});
return;
}
const target: GuildMember = interaction.options.getUser('target');
switch (subcommand) {
case 'add':
if (!userData.isDev) {
await interaction.reply({
content: `${emoji.answer.no} | This command is only for the developper of the bot`,
flags: MessageFlags.Ephemeral,
});
return;
}
try {
await prisma.bot.update({
where: {
id: 1,
},
data: {
buyers: {
connect: {
id: target.id,
},
},
owners: {
connect: {
id: target.id,
},
},
},
});
await prisma.user.upsert({
where: {
id: target.id,
},
update: {
isBuyer: true,
isOwner: true,
},
create: {
id: target.id,
isBuyer: true,
isOwner: true,
},
});
}
catch (err) {
console.error(
`⚠️ | Error when adding ${target.username} to the buyer list\n\t${err}`,
);
await interaction.reply({
content: `${emoji.answer.error} | Error when adding ${target.username} to the owner list`,
flags: MessageFlags.Ephemeral,
});
return;
}
await interaction.reply({
content: `${emoji.answer.yes} | ${target.username} has been added to the buyer list`,
flags: MessageFlags.Ephemeral,
});
return;
case 'delete':
if (!userData.isDev) {
await interaction.reply({
content: `${emoji.answer.no} | This command is only for buyer`,
flags: MessageFlags.Ephemeral,
});
return;
}
else if (interaction.user.id === target.id) {
await interaction.reply({
content: `${emoji.answer.no} | You cannot removing yourself from the buyer list`,
flags: MessageFlags.Ephemeral,
});
return;
}
try {
await prisma.bot.update({
where: {
id: 1,
},
data: {
buyers: {
disconnect: {
id: target.id,
},
},
owners: {
disconnect: {
id: target.id,
},
},
},
});
await prisma.user.upsert({
where: {
id: target.id,
},
update: {
isBuyer: false,
isOwner: false,
},
create: {
id: target.id,
isBuyer: false,
isOwner: false,
},
});
}
catch (err) {
console.error(
`⚠️ | Error when removing ${target.username} to the buyer list\n\t${err}`,
);
return;
}
await interaction.reply({
content: `${emoji.answer.yes} | ${target.username} has been removing to the buyer list`,
flags: MessageFlags.Ephemeral,
});
return;
case 'list':
if (!userData.isBuyer) {
await interaction.reply({
content: `${emoji.answer.no} | This command is only for buyer`,
flags: MessageFlags.Ephemeral,
});
return;
}
try {
const bot = await prisma.bot.findUnique({
where: {
id: 1,
},
include: {
buyers: true,
},
});
if (!bot || bot.buyers.length === 0) {
await interaction.reply({
content: `${emoji.answer.error} | There is no buyer registered.`,
flags: MessageFlags.Ephemeral,
});
break;
}
if (!bot || bot.buyers.length === 0) {
await interaction.reply({
content: `${emoji.answer.error} | There is no buyer registered.`,
flags: MessageFlags.Ephemeral,
});
break;
}
const buyerList = await Promise.all(
bot.buyers.map(async (buyer) => {
try {
const user = await interaction.client.users.fetch(buyer.id);
return `- ${user.username} (\`${user.id}\`)\n`;
} catch (err) {
console.warn(`⚠️ | ${buyer.id} : ${err}`);
return null;
}
}),
);
const buyerList = await Promise.all(
bot.buyers.map(async (buyer) => {
try {
const user = await interaction.client.users.fetch(buyer.id);
return `- ${user.username} (\`${user.id}\`)\n`;
}
catch (err) {
console.warn(`⚠️ | ${buyer.id} : ${err}`);
return null;
}
}),
);
const toSend: EmbedBuilder = new EmbedBuilder()
.setTitle(`${emoji.badge.buyer} | Buyer list`)
.setColor(guildData.color)
.setFooter({
text: guildData.footer,
})
.setDescription(buyerList.filter(Boolean).join(""));
await interaction.reply({
embeds: [toSend],
flags: MessageFlags.Ephemeral,
});
} catch (err) {
console.error(
`⚠️ | error when fetching infromation from the database: ${err}`,
);
await interaction.reply({
content: `${emoji.answer.error} | Cannot fetch the infromation of the database.`,
flags: MessageFlags.Ephemeral,
});
return;
}
break;
return;
}
},
const toSend: EmbedBuilder = new EmbedBuilder()
.setTitle(`${emoji.badge.buyer} | Buyer list`)
.setColor(guildData.color)
.setFooter({
text: guildData.footer,
})
.setDescription(buyerList.filter(Boolean).join(''));
await interaction.reply({
embeds: [toSend],
flags: MessageFlags.Ephemeral,
});
}
catch (err) {
console.error(
`⚠️ | error when fetching infromation from the database: ${err}`,
);
await interaction.reply({
content: `${emoji.answer.error} | Cannot fetch the infromation of the database.`,
flags: MessageFlags.Ephemeral,
});
return;
}
break;
return;
}
},
};

View file

@ -1,236 +1,243 @@
import { EmbedBuilder, MessageFlags, SlashCommandBuilder } from "discord.js";
import { prisma } from "../../lib/prisma.ts";
import emoji from "../../../assets/emoji.json" assert { type: "json" };
import { EmbedBuilder, MessageFlags, SlashCommandBuilder } from 'discord.js';
import { prisma } from '../../lib/prisma.ts';
import emoji from '../../../assets/emoji.json' assert { type: 'json' };
export default {
data: new SlashCommandBuilder()
.setName("owner")
.setDescription("Interact with the owners")
.addSubcommand((subcommand) =>
subcommand
.setName("add")
.setDescription("Add a user on the owner list")
.addUserOption((option) =>
option
.setName("target")
.setDescription("The user who will be added to the list")
.setRequired(true),
),
)
.addSubcommand((subcommand) =>
subcommand
.setName("delete")
.setDescription("Delete a user on the owner list")
.addUserOption((option) =>
option
.setName("target")
.setDescription("The user who will be deleted to the list")
.setRequired(true),
),
)
.addSubcommand((subcommand) =>
subcommand.setName("list").setDescription("The list of the owner"),
),
async execute(interaction: CommandInteraction) {
const subcommand = interaction.options.getSubcommand();
let userData: User;
try {
userData = await prisma.user.findUnique({
where: {
id: interaction.user.id,
},
});
} catch (err) {
console.error(
`\t⚠ | Cannot get the database connection!\n\t\t(${err}).`,
);
await interaction.reply({
content: `${emoji.answer.error} | Cannot connect to the database`,
flags: MessageFlags.Ephemeral,
});
return;
}
let guildData: Guild;
try {
guildData = await prisma.guild.findUnique({
where: {
id: interaction.guild.id,
},
});
} catch (err) {
console.error(
`\t⚠ | Cannot get the database connection!\n\t\t(${err}).`,
);
await interaction.reply({
content: `${emoji.answer.error} | Cannot connect to the database`,
flags: MessageFlags.Ephemeral,
});
return;
}
const target: GuildMember = interaction.options.getUser("target");
switch (subcommand) {
case "add":
if (!userData.isBuyer) {
await interaction.reply({
content: `${emoji.answer.no} | This command is only for buyer`,
flags: MessageFlags.Ephemeral,
});
return;
}
try {
await prisma.bot.update({
where: {
id: 1,
},
data: {
owners: {
connect: {
id: target.id,
},
},
},
});
await prisma.user.upsert({
where: {
id: target.id,
},
update: {
isOwner: true,
},
create: {
id: target.id,
isOwner: true,
},
});
} catch (err) {
console.error(
`⚠️ | Error when adding ${target.username} to the owner list\n\t${err}`,
);
await interaction.reply({
content: `${emoji.answer.error} | Error when adding ${target.username} to the owner list`,
flags: MessageFlags.Ephemeral,
});
return;
}
await interaction.reply({
content: `${emoji.answer.yes} | ${target.username} has been added to the owner list`,
flags: MessageFlags.Ephemeral,
});
return;
case "delete":
if (!userData.isBuyer) {
await interaction.reply({
content: `${emoji.answer.no} | This command is only for buyer`,
flags: MessageFlags.Ephemeral,
});
return;
} else if (interaction.user.id === target.id) {
await interaction.reply({
content: `${emoji.answer.no} | You cannot removing yourself from the owner list`,
flags: MessageFlags.Ephemeral,
});
return;
}
try {
await prisma.bot.update({
where: {
id: 1,
},
data: {
owners: {
disconnect: {
id: target.id,
},
},
},
});
await prisma.user.upsert({
where: {
id: target.id,
},
update: {
isOwner: false,
},
create: {
id: target.id,
isOwner: false,
},
});
} catch (err) {
console.error(
`⚠️ | Error when removing ${target.username} to the owner list\n\t${err}`,
);
await interaction.reply({
content: `${emoji.answer.error} | Cannot removing the user from the owner list`,
flags: MessageFlags.Ephemeral,
});
return;
}
await interaction.reply({
content: `${emoji.answer.yes} | ${target.username} has been removing to the owner list`,
flags: MessageFlags.Ephemeral,
});
return;
case "list":
if (!userData.isOwner) {
await interaction.reply({
content: `${emoji.answer.no} | This command is only for owner`,
flags: MessageFlags.Ephemeral,
});
return;
}
try {
const bot = await prisma.bot.findUnique({
where: {
id: 1,
},
include: {
owners: true,
},
});
data: new SlashCommandBuilder()
.setName('owner')
.setDescription('Interact with the owners')
.addSubcommand((subcommand) =>
subcommand
.setName('add')
.setDescription('Add a user on the owner list')
.addUserOption((option) =>
option
.setName('target')
.setDescription('The user who will be added to the list')
.setRequired(true),
),
)
.addSubcommand((subcommand) =>
subcommand
.setName('delete')
.setDescription('Delete a user on the owner list')
.addUserOption((option) =>
option
.setName('target')
.setDescription('The user who will be deleted to the list')
.setRequired(true),
),
)
.addSubcommand((subcommand) =>
subcommand.setName('list').setDescription('The list of the owner'),
),
async execute(interaction: CommandInteraction) {
const subcommand = interaction.options.getSubcommand();
let userData: User;
try {
userData = await prisma.user.findUnique({
where: {
id: interaction.user.id,
},
});
}
catch (err) {
console.error(
`\t⚠ | Cannot get the database connection!\n\t\t(${err}).`,
);
await interaction.reply({
content: `${emoji.answer.error} | Cannot connect to the database`,
flags: MessageFlags.Ephemeral,
});
return;
}
let guildData: Guild;
try {
guildData = await prisma.guild.findUnique({
where: {
id: interaction.guild.id,
},
});
}
catch (err) {
console.error(
`\t⚠ | Cannot get the database connection!\n\t\t(${err}).`,
);
await interaction.reply({
content: `${emoji.answer.error} | Cannot connect to the database`,
flags: MessageFlags.Ephemeral,
});
return;
}
const target: GuildMember = interaction.options.getUser('target');
switch (subcommand) {
case 'add':
if (!userData.isBuyer) {
await interaction.reply({
content: `${emoji.answer.no} | This command is only for buyer`,
flags: MessageFlags.Ephemeral,
});
return;
}
try {
await prisma.bot.update({
where: {
id: 1,
},
data: {
owners: {
connect: {
id: target.id,
},
},
},
});
await prisma.user.upsert({
where: {
id: target.id,
},
update: {
isOwner: true,
},
create: {
id: target.id,
isOwner: true,
},
});
}
catch (err) {
console.error(
`⚠️ | Error when adding ${target.username} to the owner list\n\t${err}`,
);
await interaction.reply({
content: `${emoji.answer.error} | Error when adding ${target.username} to the owner list`,
flags: MessageFlags.Ephemeral,
});
return;
}
await interaction.reply({
content: `${emoji.answer.yes} | ${target.username} has been added to the owner list`,
flags: MessageFlags.Ephemeral,
});
return;
case 'delete':
if (!userData.isBuyer) {
await interaction.reply({
content: `${emoji.answer.no} | This command is only for buyer`,
flags: MessageFlags.Ephemeral,
});
return;
}
else if (interaction.user.id === target.id) {
await interaction.reply({
content: `${emoji.answer.no} | You cannot removing yourself from the owner list`,
flags: MessageFlags.Ephemeral,
});
return;
}
try {
await prisma.bot.update({
where: {
id: 1,
},
data: {
owners: {
disconnect: {
id: target.id,
},
},
},
});
await prisma.user.upsert({
where: {
id: target.id,
},
update: {
isOwner: false,
},
create: {
id: target.id,
isOwner: false,
},
});
}
catch (err) {
console.error(
`⚠️ | Error when removing ${target.username} to the owner list\n\t${err}`,
);
await interaction.reply({
content: `${emoji.answer.error} | Cannot removing the user from the owner list`,
flags: MessageFlags.Ephemeral,
});
return;
}
await interaction.reply({
content: `${emoji.answer.yes} | ${target.username} has been removing to the owner list`,
flags: MessageFlags.Ephemeral,
});
return;
case 'list':
if (!userData.isOwner) {
await interaction.reply({
content: `${emoji.answer.no} | This command is only for owner`,
flags: MessageFlags.Ephemeral,
});
return;
}
try {
const bot = await prisma.bot.findUnique({
where: {
id: 1,
},
include: {
owners: true,
},
});
if (!bot || bot.owners.length === 0) {
await interaction.reply({
content: `${emoji.answer.error} | There is no owner registered.`,
flags: MessageFlags.Ephemeral,
});
break;
}
if (!bot || bot.owners.length === 0) {
await interaction.reply({
content: `${emoji.answer.error} | There is no owner registered.`,
flags: MessageFlags.Ephemeral,
});
break;
}
const ownerList = await Promise.all(
bot.owners.map(async (owner) => {
try {
const user = await interaction.client.users.fetch(owner.id);
return `- ${user.username} (\`${user.id}\`)\n`;
} catch (err) {
console.warn(`⚠️ | ${owner.id} : ${err}`);
return null;
}
}),
);
const ownerList = await Promise.all(
bot.owners.map(async (owner) => {
try {
const user = await interaction.client.users.fetch(owner.id);
return `- ${user.username} (\`${user.id}\`)\n`;
}
catch (err) {
console.warn(`⚠️ | ${owner.id} : ${err}`);
return null;
}
}),
);
const toSend: EmbedBuilder = new EmbedBuilder()
.setTitle(`${emoji.badge.owner} | Owner list`)
.setColor(guildData.color)
.setFooter({
text: guildData.footer,
})
.setDescription(ownerList.filter(Boolean).join(""));
await interaction.reply({
embeds: [toSend],
flags: MessageFlags.Ephemeral,
});
} catch (err) {
console.error(
`⚠️ | error when fetching infromation from the database: ${err}`,
);
await interaction.reply({
content: `${emoji.answer.error} | Cannot fetch the infromation of the database.`,
flags: MessageFlags.Ephemeral,
});
}
break;
return;
}
},
const toSend: EmbedBuilder = new EmbedBuilder()
.setTitle(`${emoji.badge.owner} | Owner list`)
.setColor(guildData.color)
.setFooter({
text: guildData.footer,
})
.setDescription(ownerList.filter(Boolean).join(''));
await interaction.reply({
embeds: [toSend],
flags: MessageFlags.Ephemeral,
});
}
catch (err) {
console.error(
`⚠️ | error when fetching infromation from the database: ${err}`,
);
await interaction.reply({
content: `${emoji.answer.error} | Cannot fetch the infromation of the database.`,
flags: MessageFlags.Ephemeral,
});
}
break;
return;
}
},
};

View file

@ -1,244 +1,251 @@
import { EmbedBuilder, MessageFlags, SlashCommandBuilder } from "discord.js";
import { prisma } from "../../lib/prisma.ts";
import emoji from "../../../assets/emoji.json" assert { type: "json" };
import { EmbedBuilder, MessageFlags, SlashCommandBuilder } from 'discord.js';
import { prisma } from '../../lib/prisma.ts';
import emoji from '../../../assets/emoji.json' assert { type: 'json' };
export default {
data: new SlashCommandBuilder()
.setName("whitelist")
.setDescription("Interact with the whitelist")
.addSubcommand((subcommand) =>
subcommand
.setName("add")
.setDescription("Add a user on the whitelist")
.addUserOption((option) =>
option
.setName("target")
.setDescription("The user who will be added to the whitelist")
.setRequired(true),
),
)
.addSubcommand((subcommand) =>
subcommand
.setName("delete")
.setDescription("Delete a user on the whitelist")
.addUserOption((option) =>
option
.setName("target")
.setDescription("The user who will be deleted to the whitelist")
.setRequired(true),
),
)
.addSubcommand((subcommand) =>
subcommand.setName("list").setDescription("Show the whitelist"),
),
async execute(interaction: CommandInteraction) {
const subcommand = interaction.options.getSubcommand();
let userData: User;
try {
userData = await prisma.user.findUnique({
where: {
id: interaction.user.id,
},
});
} catch (err) {
console.error(
`\t⚠ | Whitelist => Cannot get the database connection!\n\t\t(${err}).`,
);
await interaction.reply({
content: `${emoji.answer.error} | Cannot connect to the database`,
flags: MessageFlags.Ephemeral,
});
return;
}
let guildData: Guild;
try {
guildData = await prisma.guild.findUnique({
where: {
id: interaction.guild.id,
},
});
} catch (err) {
console.error(
`\t⚠ | Cannot get the database connection!\n\t\t(${err}).`,
);
await interaction.reply({
content: `${emoji.answer.error} | Cannot connect to the database`,
flags: MessageFlags.Ephemeral,
});
return;
}
const target: GuildMember = interaction.options.getUser("target");
switch (subcommand) {
case "add":
if (!userData.isOwner) {
await interaction.reply({
content: `${emoji.answer.no} | This command is only for owner`,
flags: MessageFlags.Ephemeral,
});
return;
}
try {
await prisma.guildUser.upsert({
where: {
userId_guildId: {
userId: target.id,
guildId: interaction.guild.id,
},
},
update: {
isWlUser: true,
},
create: {
userId: target.id,
guildId: interaction.guild.id,
isWlUser: true,
},
});
await prisma.guild.update({
where: {
id: interaction.guild.id,
},
data: {
WlUsers: {
connect: {
id: target.id,
},
},
},
});
} catch (err) {
console.error(
`⚠️ | Error when adding ${target.username} to the whitelist\n\t${err}`,
);
await interaction.reply({
content: `${emoji.answer.error} | Error when adding ${target.username} to the whitelist`,
flags: MessageFlags.Ephemeral,
});
return;
}
await interaction.reply({
content: `${emoji.answer.yes} | ${target.username} has been added to the whitelist`,
flags: MessageFlags.Ephemeral,
});
return;
case "delete":
if (!userData.isOwner) {
await interaction.reply({
content: `${emoji.answer.no} | This command is only for owner`,
flags: MessageFlags.Ephemeral,
});
return;
} else if (interaction.user.id === target.id) {
await interaction.reply({
content: `${emoji.answer.no} | You cannot removing yourself from the whitelist`,
flags: MessageFlags.Ephemeral,
});
return;
}
try {
await prisma.guildUser.upsert({
where: {
userId_guildId: {
userId: target.id,
guildId: interaction.guild.id,
},
},
update: {
isWlUser: false,
},
create: {
userId: target.id,
guildId: interaction.guild.id,
isWlUser: false,
},
});
await prisma.guild.update({
where: {
id: interaction.guild.id,
},
data: {
WlUsers: {
disconnect: {
id: target.id,
},
},
},
});
} catch (err) {
console.error(
`⚠️ | Error when removing ${target.username} to the username\n\t${err}`,
);
await interaction.reply({
content: `${emoji.answer.error} | Cannot remove ${target.username} from the whitelist`,
flags: MessageFlags.Ephemeral,
});
return;
}
await interaction.reply({
content: `${emoji.answer.yes} | ${target.username} has been removing to the whitelist`,
flags: MessageFlags.Ephemeral,
});
return;
case "list":
if (!userData.isOwner) {
await interaction.reply({
content: `${emoji.answer.no} | This command is only for owner`,
flags: MessageFlags.Ephemeral,
});
return;
}
try {
const guild = await prisma.guild.findUnique({
where: {
id: interaction.guild.id,
},
include: {
WlUsers: true,
},
});
data: new SlashCommandBuilder()
.setName('whitelist')
.setDescription('Interact with the whitelist')
.addSubcommand((subcommand) =>
subcommand
.setName('add')
.setDescription('Add a user on the whitelist')
.addUserOption((option) =>
option
.setName('target')
.setDescription('The user who will be added to the whitelist')
.setRequired(true),
),
)
.addSubcommand((subcommand) =>
subcommand
.setName('delete')
.setDescription('Delete a user on the whitelist')
.addUserOption((option) =>
option
.setName('target')
.setDescription('The user who will be deleted to the whitelist')
.setRequired(true),
),
)
.addSubcommand((subcommand) =>
subcommand.setName('list').setDescription('Show the whitelist'),
),
async execute(interaction: CommandInteraction) {
const subcommand = interaction.options.getSubcommand();
let userData: User;
try {
userData = await prisma.user.findUnique({
where: {
id: interaction.user.id,
},
});
}
catch (err) {
console.error(
`\t⚠ | Whitelist => Cannot get the database connection!\n\t\t(${err}).`,
);
await interaction.reply({
content: `${emoji.answer.error} | Cannot connect to the database`,
flags: MessageFlags.Ephemeral,
});
return;
}
let guildData: Guild;
try {
guildData = await prisma.guild.findUnique({
where: {
id: interaction.guild.id,
},
});
}
catch (err) {
console.error(
`\t⚠ | Cannot get the database connection!\n\t\t(${err}).`,
);
await interaction.reply({
content: `${emoji.answer.error} | Cannot connect to the database`,
flags: MessageFlags.Ephemeral,
});
return;
}
const target: GuildMember = interaction.options.getUser('target');
switch (subcommand) {
case 'add':
if (!userData.isOwner) {
await interaction.reply({
content: `${emoji.answer.no} | This command is only for owner`,
flags: MessageFlags.Ephemeral,
});
return;
}
try {
await prisma.guildUser.upsert({
where: {
userId_guildId: {
userId: target.id,
guildId: interaction.guild.id,
},
},
update: {
isWlUser: true,
},
create: {
userId: target.id,
guildId: interaction.guild.id,
isWlUser: true,
},
});
await prisma.guild.update({
where: {
id: interaction.guild.id,
},
data: {
WlUsers: {
connect: {
id: target.id,
},
},
},
});
}
catch (err) {
console.error(
`⚠️ | Error when adding ${target.username} to the whitelist\n\t${err}`,
);
await interaction.reply({
content: `${emoji.answer.error} | Error when adding ${target.username} to the whitelist`,
flags: MessageFlags.Ephemeral,
});
return;
}
await interaction.reply({
content: `${emoji.answer.yes} | ${target.username} has been added to the whitelist`,
flags: MessageFlags.Ephemeral,
});
return;
case 'delete':
if (!userData.isOwner) {
await interaction.reply({
content: `${emoji.answer.no} | This command is only for owner`,
flags: MessageFlags.Ephemeral,
});
return;
}
else if (interaction.user.id === target.id) {
await interaction.reply({
content: `${emoji.answer.no} | You cannot removing yourself from the whitelist`,
flags: MessageFlags.Ephemeral,
});
return;
}
try {
await prisma.guildUser.upsert({
where: {
userId_guildId: {
userId: target.id,
guildId: interaction.guild.id,
},
},
update: {
isWlUser: false,
},
create: {
userId: target.id,
guildId: interaction.guild.id,
isWlUser: false,
},
});
await prisma.guild.update({
where: {
id: interaction.guild.id,
},
data: {
WlUsers: {
disconnect: {
id: target.id,
},
},
},
});
}
catch (err) {
console.error(
`⚠️ | Error when removing ${target.username} to the username\n\t${err}`,
);
await interaction.reply({
content: `${emoji.answer.error} | Cannot remove ${target.username} from the whitelist`,
flags: MessageFlags.Ephemeral,
});
return;
}
await interaction.reply({
content: `${emoji.answer.yes} | ${target.username} has been removing to the whitelist`,
flags: MessageFlags.Ephemeral,
});
return;
case 'list':
if (!userData.isOwner) {
await interaction.reply({
content: `${emoji.answer.no} | This command is only for owner`,
flags: MessageFlags.Ephemeral,
});
return;
}
try {
const guild = await prisma.guild.findUnique({
where: {
id: interaction.guild.id,
},
include: {
WlUsers: true,
},
});
if (!guild || guild.WlUsers.length === 0) {
await interaction.reply({
content: `${emoji.answer.error} | There is no whitelisted user.`,
flags: MessageFlags.Ephemeral,
});
break;
}
if (!guild || guild.WlUsers.length === 0) {
await interaction.reply({
content: `${emoji.answer.error} | There is no whitelisted user.`,
flags: MessageFlags.Ephemeral,
});
break;
}
const WlUsers = await Promise.all(
guild.WlUsers.map(async (whitelist) => {
try {
const user = await interaction.client.users.fetch(whitelist.id);
return `- ${user.username} (\`${user.id}\`)\n`;
} catch (err) {
console.warn(`⚠️ | ${whitelist.id} : ${err}`);
return null;
}
}),
);
const WlUsers = await Promise.all(
guild.WlUsers.map(async (whitelist) => {
try {
const user = await interaction.client.users.fetch(whitelist.id);
return `- ${user.username} (\`${user.id}\`)\n`;
}
catch (err) {
console.warn(`⚠️ | ${whitelist.id} : ${err}`);
return null;
}
}),
);
const toSend: EmbedBuilder = new EmbedBuilder()
.setTitle("🗞️ | Whitelist")
.setColor(guildData.color)
.setFooter({
text: guildData.footer,
})
.setDescription(WlUsers.filter(Boolean).join(""));
await interaction.reply({
embeds: [toSend],
flags: MessageFlags.Ephemeral,
});
} catch (err) {
console.error(
`⚠️ | Whitelist => error when fetching infromation from the database: ${err}`,
);
await interaction.reply({
content: `${emoji.answer.error} | Cannot fetch the infromation of the database.`,
flags: MessageFlags.Ephemeral,
});
}
break;
return;
}
},
const toSend: EmbedBuilder = new EmbedBuilder()
.setTitle('🗞️ | Whitelist')
.setColor(guildData.color)
.setFooter({
text: guildData.footer,
})
.setDescription(WlUsers.filter(Boolean).join(''));
await interaction.reply({
embeds: [toSend],
flags: MessageFlags.Ephemeral,
});
}
catch (err) {
console.error(
`⚠️ | Whitelist => error when fetching infromation from the database: ${err}`,
);
await interaction.reply({
content: `${emoji.answer.error} | Cannot fetch the infromation of the database.`,
flags: MessageFlags.Ephemeral,
});
}
break;
return;
}
},
};

View file

@ -1,68 +1,70 @@
import { MessageFlags, ChannelType, SlashCommandBuilder } from "discord.js";
import emoji from "../../../assets/emoji.json" assert { type: "json" };
import { prisma } from "../../lib/prisma.ts";
import { MessageFlags, ChannelType, SlashCommandBuilder } from 'discord.js';
import emoji from '../../../assets/emoji.json' assert { type: 'json' };
import { prisma } from '../../lib/prisma.ts';
export default {
data: new SlashCommandBuilder()
.setName("deletecat")
.setDescription("Delete the categorie given in parameter")
.addChannelOption((opt) =>
opt
.setName("category")
.setDescription("Choose the categorie you want to delete")
.setRequired(true)
.addChannelTypes(ChannelType.GuildCategory),
),
async execute(interaction: CommandInteraction) {
let userData: User;
try {
userData = await prisma.user.findUnique({
where: {
id: interaction.user.id,
},
});
} catch (err) {
console.error(
`\t⚠ | Whitelist => Cannot get the database connection!\n\t\t(${err}).`,
);
await interaction.reply({
content: `${emoji.answer.error} | Cannot connect to the database`,
flags: MessageFlags.Ephemeral,
});
console.error(`Cannot connect to the database:\n\t${err}`);
return;
}
if (!userData.isOwner) {
await interaction.reply({
content: `${emoji.answer.no} | This command is only for owner`,
flags: MessageFlags.Ephemeral,
});
return;
}
const category: GuildCategory = interaction.options.getChannel(
"category",
true,
);
try {
for (const channel of category.children.cache.values()) {
await channel.delete(
`Delete cat of ${channel.name} (by ${interaction.username})`,
);
}
await category.delete(
`Delete cat of ${category.name} (by ${interaction.username})`,
);
await interaction.reply({
content: `${emoji.answer.yes} | Suppressed the ${category.name}`,
flags: MessageFlags.Ephemeral,
});
} catch (err) {
await interaction.reply({
content: `${emoji.answer.error} | Cannot suppress the category's channels`,
flags: MessageFlags.Ephemeral,
});
console.error(`Cannot suppress the category's channel:\n\t${err}`);
return;
}
},
data: new SlashCommandBuilder()
.setName('deletecat')
.setDescription('Delete the categorie given in parameter')
.addChannelOption((opt) =>
opt
.setName('category')
.setDescription('Choose the categorie you want to delete')
.setRequired(true)
.addChannelTypes(ChannelType.GuildCategory),
),
async execute(interaction: CommandInteraction) {
let userData: User;
try {
userData = await prisma.user.findUnique({
where: {
id: interaction.user.id,
},
});
}
catch (err) {
console.error(
`\t⚠ | Whitelist => Cannot get the database connection!\n\t\t(${err}).`,
);
await interaction.reply({
content: `${emoji.answer.error} | Cannot connect to the database`,
flags: MessageFlags.Ephemeral,
});
console.error(`Cannot connect to the database:\n\t${err}`);
return;
}
if (!userData.isOwner) {
await interaction.reply({
content: `${emoji.answer.no} | This command is only for owner`,
flags: MessageFlags.Ephemeral,
});
return;
}
const category: GuildCategory = interaction.options.getChannel(
'category',
true,
);
try {
for (const channel of category.children.cache.values()) {
await channel.delete(
`Delete cat of ${channel.name} (by ${interaction.username})`,
);
}
await category.delete(
`Delete cat of ${category.name} (by ${interaction.username})`,
);
await interaction.reply({
content: `${emoji.answer.yes} | Suppressed the ${category.name}`,
flags: MessageFlags.Ephemeral,
});
}
catch (err) {
await interaction.reply({
content: `${emoji.answer.error} | Cannot suppress the category's channels`,
flags: MessageFlags.Ephemeral,
});
console.error(`Cannot suppress the category's channel:\n\t${err}`);
return;
}
},
};

View file

@ -1,29 +1,29 @@
import { prisma } from "../../lib/prisma.ts";
import { prisma } from '../../lib/prisma.ts';
import {
userMention,
roleMention,
MessageFlags,
SlashCommandBuilder,
EmbedBuilder,
} from "discord.js";
import emoji from "../../../assets/emoji.json" assert { type: "json" };
userMention,
roleMention,
MessageFlags,
SlashCommandBuilder,
EmbedBuilder,
} from 'discord.js';
import emoji from '../../../assets/emoji.json' assert { type: 'json' };
function getGuildRoles(guild: Guild): string {
const roles = guild.roles.cache
.filter((role) => role.id !== guild.id)
.sort((a, b) => b.position - a.position)
.map((role) => roleMention(role.id));
const roles = guild.roles.cache
.filter((role) => role.id !== guild.id)
.sort((a, b) => b.position - a.position)
.map((role) => roleMention(role.id));
return roles.length > 0 ? roles.join(", ") : "No role";
return roles.length > 0 ? roles.join(', ') : 'No role';
}
function getUserRoles(target: GuildMember): string {
const roles = target.roles.cache
.filter((role) => role.id !== target.guild.id)
.sort((a, b) => b.position - a.position)
.map((role) => `${roleMention(role.id)}`);
const roles = target.roles.cache
.filter((role) => role.id !== target.guild.id)
.sort((a, b) => b.position - a.position)
.map((role) => `${roleMention(role.id)}`);
return roles.length > 0 ? roles.join(", ") : "No role";
return roles.length > 0 ? roles.join(', ') : 'No role';
}
function getUserBadges(userData: {
@ -32,105 +32,108 @@ function getUserBadges(userData: {
isBuyer?: boolean;
isOwner?: boolean;
}): string {
const badges: string[] = [];
const badges: string[] = [];
if (userData.isDev) badges.push(`${emoji.badge.dev}`);
if (userData.isEnium) badges.push(`${emoji.badge.enium}`);
if (userData.isPwn) badges.push(`${emoji.badge.dash}`);
if (userData.isBuyer) badges.push(`${emoji.badge.buyer}`);
if (userData.isOwner) badges.push(`${emoji.badge.owner}`);
if (userData.isDev) badges.push(`${emoji.badge.dev}`);
if (userData.isEnium) badges.push(`${emoji.badge.enium}`);
if (userData.isPwn) badges.push(`${emoji.badge.dash}`);
if (userData.isBuyer) badges.push(`${emoji.badge.buyer}`);
if (userData.isOwner) badges.push(`${emoji.badge.owner}`);
return badges.length > 0 ? badges.join(" ") : "Aucun badge";
return badges.length > 0 ? badges.join(' ') : 'Aucun badge';
}
export default {
data: new SlashCommandBuilder()
.setName("info")
.setDescription(
"Show the infromation of one of these categories (user, server, bot)",
)
.addSubcommand((subcommand) =>
subcommand
.setName("user")
.setDescription("Show the infromation of one user")
.addUserOption((option) =>
option
.setName("target")
.setDescription("The user to show the infromation"),
),
)
.addSubcommand((subcommand) =>
subcommand
.setName("server")
.setDescription("Show the infromation of the server"),
),
async execute(interaction: CommandInteraction) {
let guildData: Guild;
try {
guildData = await prisma.guild.findUnique({
where: {
id: interaction.guild.id,
},
});
} catch (err) {
console.error(
`\t⚠ | Cannot get the database connection!\n\t\t(${err}).`,
);
await interaction.reply({
content: `${emoji.answer.error} | Cannot connect to the database`,
flags: MessageFlags.Ephemeral,
});
return;
}
const subcommand: string = interaction.options.getSubcommand();
switch (subcommand) {
case "user": {
const targetGlobal: GuildMember =
interaction.options.getUser("target") || interaction.user;
await targetGlobal.fetch();
let userData: User;
try {
userData = await prisma.user.findUnique({
where: {
id: targetGlobal.id,
},
});
} catch (err) {
console.error(
`\t⚠ | Cannot get the database connection!\n\t\t(${err}).`,
);
await interaction.reply({
content: `${emoji.answer.error} | Cannot connect to the database`,
flags: MessageFlags.Ephemeral,
});
}
let targetServer: GuildMember;
data: new SlashCommandBuilder()
.setName('info')
.setDescription(
'Show the infromation of one of these categories (user, server, bot)',
)
.addSubcommand((subcommand) =>
subcommand
.setName('user')
.setDescription('Show the infromation of one user')
.addUserOption((option) =>
option
.setName('target')
.setDescription('The user to show the infromation'),
),
)
.addSubcommand((subcommand) =>
subcommand
.setName('server')
.setDescription('Show the infromation of the server'),
),
async execute(interaction: CommandInteraction) {
let guildData: Guild;
try {
guildData = await prisma.guild.findUnique({
where: {
id: interaction.guild.id,
},
});
}
catch (err) {
console.error(
`\t⚠ | Cannot get the database connection!\n\t\t(${err}).`,
);
await interaction.reply({
content: `${emoji.answer.error} | Cannot connect to the database`,
flags: MessageFlags.Ephemeral,
});
return;
}
const subcommand: string = interaction.options.getSubcommand();
switch (subcommand) {
case 'user': {
const targetGlobal: GuildMember =
interaction.options.getUser('target') || interaction.user;
await targetGlobal.fetch();
let userData: User;
try {
userData = await prisma.user.findUnique({
where: {
id: targetGlobal.id,
},
});
}
catch (err) {
console.error(
`\t⚠ | Cannot get the database connection!\n\t\t(${err}).`,
);
await interaction.reply({
content: `${emoji.answer.error} | Cannot connect to the database`,
flags: MessageFlags.Ephemeral,
});
}
let targetServer: GuildMember;
try {
targetServer = await interaction.guild.members.fetch(targetGlobal.id);
} catch (err) {
console.error(`\t⚠ | Cannot get the targetServer!\n\t\t(${err}).`);
await interaction.reply({
content: `${emoji.answer.error} | Cannot get the guild profile of the user`,
flags: MessageFlags.Ephemeral,
});
return;
}
const userResult: EmbedBuilder = new EmbedBuilder()
.setTitle(`${targetGlobal.displayName}'s information`)
.setColor(`${guildData.color}`)
.setThumbnail(
`${targetGlobal.displayAvatarURL({ dynamic: true, size: 2048 })}`,
)
.setFooter({
text: guildData.footer,
})
.setImage(
targetGlobal.bannerURL({
size: 2048,
dynamic: true,
}),
).setDescription(`
try {
targetServer = await interaction.guild.members.fetch(targetGlobal.id);
}
catch (err) {
console.error(`\t⚠ | Cannot get the targetServer!\n\t\t(${err}).`);
await interaction.reply({
content: `${emoji.answer.error} | Cannot get the guild profile of the user`,
flags: MessageFlags.Ephemeral,
});
return;
}
const userResult: EmbedBuilder = new EmbedBuilder()
.setTitle(`${targetGlobal.displayName}'s information`)
.setColor(`${guildData.color}`)
.setThumbnail(
`${targetGlobal.displayAvatarURL({ dynamic: true, size: 2048 })}`,
)
.setFooter({
text: guildData.footer,
})
.setImage(
targetGlobal.bannerURL({
size: 2048,
dynamic: true,
}),
).setDescription(`
**👤 | Username:**
${targetGlobal.username}
**🆔 | ID:**
@ -146,30 +149,30 @@ export default {
**🛬 | Server Join:**
<t:${parseInt(targetServer.joinedTimestamp / 1000)}:f> (<t:${parseInt(targetServer.joinedTimestamp / 1000)}:R>)
`);
await interaction.reply({
embeds: [userResult],
flags: MessageFlags.Ephemeral,
});
return;
}
case "server": {
const guild: Guild = interaction.guild;
const serverResult: EmbedBuilder = new EmbedBuilder()
.setTitle(`${guild.name} Informations`)
.setColor(guildData.color)
.setThumbnail(guild.iconURL({ dynamic: true, size: 2048 }))
.setFooter({
text: guildData.footer,
})
.setImage(guild.bannerURL({ dynamic: true, size: 2048 }))
.setDescription(`
await interaction.reply({
embeds: [userResult],
flags: MessageFlags.Ephemeral,
});
return;
}
case 'server': {
const guild: Guild = interaction.guild;
const serverResult: EmbedBuilder = new EmbedBuilder()
.setTitle(`${guild.name} Informations`)
.setColor(guildData.color)
.setThumbnail(guild.iconURL({ dynamic: true, size: 2048 }))
.setFooter({
text: guildData.footer,
})
.setImage(guild.bannerURL({ dynamic: true, size: 2048 }))
.setDescription(`
**🆔 | ID:**
${guild.id}
**🖊 | Description:**
${guild.description || "No description given."}
${guild.description || 'No description given.'}
**🔗 | VanityLink:**
${guild.vanityURLCode || "No custom link."}
${guild.vanityURLCode || 'No custom link.'}
**🆕 | Creation Date:**
<t:${parseInt(guild.createdTimestamp / 1000)}:R>
@ -187,11 +190,11 @@ export default {
There is ${guild.roles.cache.size - 1} on __${guild.name}__
${getGuildRoles(guild)}
`);
await interaction.reply({
embeds: [serverResult],
flags: MessageFlags.Ephemeral,
});
}
}
},
await interaction.reply({
embeds: [serverResult],
flags: MessageFlags.Ephemeral,
});
}
}
},
};

View file

@ -1,19 +1,19 @@
import { MessageFlags, SlashCommandBuilder } from "discord.js";
import emoji from "../../../assets/emoji.json" assert { type: "json" };
import { MessageFlags, SlashCommandBuilder } from 'discord.js';
import emoji from '../../../assets/emoji.json' assert { type: 'json' };
export default {
data: new SlashCommandBuilder()
.setName("ping")
.setDescription("Show your latency"),
async execute(interaction: CommandInteraction) {
const time: number = Date.now();
await interaction.reply({
content: `${emoji.answer.loading} | Calculating your ping !`,
flags: MessageFlags.Ephemeral,
});
data: new SlashCommandBuilder()
.setName('ping')
.setDescription('Show your latency'),
async execute(interaction: CommandInteraction) {
const time: number = Date.now();
await interaction.reply({
content: `${emoji.answer.loading} | Calculating your ping !`,
flags: MessageFlags.Ephemeral,
});
await interaction.editReply({
content: `⏱️ | Response latency: **${Date.now() - time}**ms`,
});
},
await interaction.editReply({
content: `⏱️ | Response latency: **${Date.now() - time}**ms`,
});
},
};