style(src/prettier): updating with the prettier
This commit is contained in:
parent
b36925546c
commit
bb46ad3996
17 changed files with 1909 additions and 1717 deletions
2
.github/workflows/bun.yml
vendored
2
.github/workflows/bun.yml
vendored
|
|
@ -2,7 +2,7 @@ name: CheckBuild
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches: [ master ]
|
branches: [master]
|
||||||
pull_request:
|
pull_request:
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
|
|
|
||||||
|
|
@ -7,11 +7,13 @@ bun install
|
||||||
```
|
```
|
||||||
|
|
||||||
To run in developpement bot:
|
To run in developpement bot:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
bun run dev
|
bun run dev
|
||||||
```
|
```
|
||||||
|
|
||||||
To build to javacript:
|
To build to javacript:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
bun run build
|
bun run build
|
||||||
```
|
```
|
||||||
|
|
|
||||||
53
eslint.config.js
Normal file
53
eslint.config.js
Normal file
|
|
@ -0,0 +1,53 @@
|
||||||
|
import js from "@eslint/js";
|
||||||
|
|
||||||
|
export default [
|
||||||
|
js.configs.recommended,
|
||||||
|
{
|
||||||
|
languageOptions: {
|
||||||
|
ecmaVersion: "latest",
|
||||||
|
},
|
||||||
|
rules: {
|
||||||
|
"arrow-spacing": ["warn", { before: true, after: true }],
|
||||||
|
"brace-style": ["error", "stroustrup", { allowSingleLine: true }],
|
||||||
|
"comma-dangle": ["error", "always-multiline"],
|
||||||
|
"comma-spacing": "error",
|
||||||
|
"comma-style": "error",
|
||||||
|
curly: ["error", "multi-line", "consistent"],
|
||||||
|
"dot-location": ["error", "property"],
|
||||||
|
"handle-callback-err": "off",
|
||||||
|
indent: ["error", "tab"],
|
||||||
|
"keyword-spacing": "error",
|
||||||
|
"max-nested-callbacks": ["error", { max: 4 }],
|
||||||
|
"max-statements-per-line": ["error", { max: 2 }],
|
||||||
|
"no-console": "off",
|
||||||
|
"no-empty-function": "error",
|
||||||
|
"no-floating-decimal": "error",
|
||||||
|
"no-inline-comments": "error",
|
||||||
|
"no-lonely-if": "error",
|
||||||
|
"no-multi-spaces": "error",
|
||||||
|
"no-multiple-empty-lines": ["error", { max: 2, maxEOF: 1, maxBOF: 0 }],
|
||||||
|
"no-shadow": ["error", { allow: ["err", "resolve", "reject"] }],
|
||||||
|
"no-trailing-spaces": ["error"],
|
||||||
|
"no-var": "error",
|
||||||
|
"no-undef": "off",
|
||||||
|
"object-curly-spacing": ["error", "always"],
|
||||||
|
"prefer-const": "error",
|
||||||
|
quotes: ["error", "single"],
|
||||||
|
semi: ["error", "always"],
|
||||||
|
"space-before-blocks": "error",
|
||||||
|
"space-before-function-paren": [
|
||||||
|
"error",
|
||||||
|
{
|
||||||
|
anonymous: "never",
|
||||||
|
named: "never",
|
||||||
|
asyncArrow: "always",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
"space-in-parens": "error",
|
||||||
|
"space-infix-ops": "error",
|
||||||
|
"space-unary-ops": "error",
|
||||||
|
"spaced-comment": "error",
|
||||||
|
yoda: "error",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
@ -1,43 +1,62 @@
|
||||||
import { prisma } from '../../lib/prisma.ts';
|
import { prisma } from "../../lib/prisma.ts";
|
||||||
import { ActionRowBuilder, ChannelType, PermissionsBitField, ComponentType, StringSelectMenuBuilder, StringSelectMenuInteraction, StringSelectMenuOptionBuilder, SlashCommandBuilder, ChatInputCommandInteractionActivityType, channelMention, roleMention, PresenceUpdateStatus, MessageFlags, SlashCommandBuilder, EmbedBuilder } from 'discord.js';
|
import {
|
||||||
import emoji from '../../../assets/emoji.json' assert { type: "json" };
|
ActionRowBuilder,
|
||||||
|
ChannelType,
|
||||||
|
PermissionsBitField,
|
||||||
|
ComponentType,
|
||||||
|
StringSelectMenuBuilder,
|
||||||
|
StringSelectMenuInteraction,
|
||||||
|
StringSelectMenuOptionBuilder,
|
||||||
|
SlashCommandBuilder,
|
||||||
|
ChatInputCommandInteractionActivityType,
|
||||||
|
channelMention,
|
||||||
|
roleMention,
|
||||||
|
PresenceUpdateStatus,
|
||||||
|
MessageFlags,
|
||||||
|
SlashCommandBuilder,
|
||||||
|
EmbedBuilder,
|
||||||
|
} from "discord.js";
|
||||||
|
import emoji from "../../../assets/emoji.json" assert { type: "json" };
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
data: new SlashCommandBuilder()
|
data: new SlashCommandBuilder()
|
||||||
.setName('logs')
|
.setName("logs")
|
||||||
.setDescription('edit the logs configuration')
|
.setDescription("edit the logs configuration")
|
||||||
.addStringOption(option => option
|
.addStringOption((option) =>
|
||||||
.setName('action')
|
option
|
||||||
.setDescription('What is the action you to perform')
|
.setName("action")
|
||||||
|
.setDescription("What is the action you to perform")
|
||||||
.setRequired(true)
|
.setRequired(true)
|
||||||
.addChoices(
|
.addChoices(
|
||||||
{
|
{
|
||||||
name: 'Show',
|
name: "Show",
|
||||||
value: 'logs_show'
|
value: "logs_show",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'Auto-configuration',
|
name: "Auto-configuration",
|
||||||
value: 'logs_auto'
|
value: "logs_auto",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'Configuration',
|
name: "Configuration",
|
||||||
value: 'logs_config'
|
value: "logs_config",
|
||||||
},
|
},
|
||||||
)
|
),
|
||||||
),
|
),
|
||||||
async execute(interaction: CommandInteraction) {
|
async execute(interaction: CommandInteraction) {
|
||||||
let guildData: Guild;
|
let guildData: Guild;
|
||||||
try {
|
try {
|
||||||
guildData = await prisma.guild.findUnique({
|
guildData = await prisma.guild.findUnique({
|
||||||
where: {
|
where: {
|
||||||
id: interaction.guild.id
|
id: interaction.guild.id,
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error(`\t⚠️ | Cannot get the database connection!\n\t\t(${err}).`);
|
console.error(
|
||||||
|
`\t⚠️ | Cannot get the database connection!\n\t\t(${err}).`,
|
||||||
|
);
|
||||||
await interaction.reply({
|
await interaction.reply({
|
||||||
content: `${emoji.answer.error} | Cannot connect to the database`,
|
content: `${emoji.answer.error} | Cannot connect to the database`,
|
||||||
flags: MessageFlags.Ephemeral
|
flags: MessageFlags.Ephemeral,
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -45,28 +64,27 @@ export default {
|
||||||
try {
|
try {
|
||||||
userData = await prisma.user.findUnique({
|
userData = await prisma.user.findUnique({
|
||||||
where: {
|
where: {
|
||||||
id: interaction.user.id
|
id: interaction.user.id,
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
throw(`\t⚠️ | Cannot get the database connection!\n\t\t(${err}).`);
|
throw `\t⚠️ | Cannot get the database connection!\n\t\t(${err}).`;
|
||||||
await interaction.reply({
|
await interaction.reply({
|
||||||
content: `${emoji.answer.error} | Cannot connect to the database`,
|
content: `${emoji.answer.error} | Cannot connect to the database`,
|
||||||
flags: MessageFlags.Ephemeral
|
flags: MessageFlags.Ephemeral,
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const choice: string = interaction.options.getString('action');
|
const choice: string = interaction.options.getString("action");
|
||||||
switch (choice) {
|
switch (choice) {
|
||||||
case 'logs_show':
|
case "logs_show":
|
||||||
if (guildData.logEnable) {
|
if (guildData.logEnable) {
|
||||||
const logsData: EmbedBuilder = new EmbedBuilder()
|
const logsData: EmbedBuilder = new EmbedBuilder()
|
||||||
.setTitle(`Logs for ${interaction.guild.name}`)
|
.setTitle(`Logs for ${interaction.guild.name}`)
|
||||||
.setColor(`${guildData.color}`)
|
.setColor(`${guildData.color}`)
|
||||||
.setFooter({
|
.setFooter({
|
||||||
text: guildData.footer
|
text: guildData.footer,
|
||||||
})
|
}).setDescription(`
|
||||||
.setDescription(`
|
|
||||||
${guildData.logCategory ? `${emoji.answer.yes} | Categories` : `${emoji.answer.no} | Categories`}
|
${guildData.logCategory ? `${emoji.answer.yes} | Categories` : `${emoji.answer.no} | Categories`}
|
||||||
${guildData.logBot ? `${emoji.answer.yes} | Bot` : `${emoji.answer.no} | Bot`}
|
${guildData.logBot ? `${emoji.answer.yes} | Bot` : `${emoji.answer.no} | Bot`}
|
||||||
${guildData.logChannels ? `${emoji.answer.yes} | Channels` : `${emoji.answer.no} | Channels`}
|
${guildData.logChannels ? `${emoji.answer.yes} | Channels` : `${emoji.answer.no} | Channels`}
|
||||||
|
|
@ -74,73 +92,71 @@ export default {
|
||||||
${guildData.logMod ? `${emoji.answer.yes} | Moderation` : `${emoji.answer.no} | Moderation`}
|
${guildData.logMod ? `${emoji.answer.yes} | Moderation` : `${emoji.answer.no} | Moderation`}
|
||||||
${guildData.logMsg ? `${emoji.answer.yes} | Message` : `${emoji.answer.no} | Message`}
|
${guildData.logMsg ? `${emoji.answer.yes} | Message` : `${emoji.answer.no} | Message`}
|
||||||
${guildData.logServer ? `${emoji.answer.yes} | Server` : `${emoji.answer.no} | Server`}
|
${guildData.logServer ? `${emoji.answer.yes} | Server` : `${emoji.answer.no} | Server`}
|
||||||
`)
|
`);
|
||||||
|
|
||||||
await interaction.reply({
|
await interaction.reply({
|
||||||
embeds: [
|
embeds: [logsData],
|
||||||
logsData
|
|
||||||
]
|
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
await interaction.reply({
|
await interaction.reply({
|
||||||
content: `${emoji.answer.no} | The log is disable on the server`,
|
content: `${emoji.answer.no} | The log is disable on the server`,
|
||||||
flags: MessageFlags.Ephemeral
|
flags: MessageFlags.Ephemeral,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
case 'logs_auto':
|
case "logs_auto":
|
||||||
if (guildData.logEnable) {
|
if (guildData.logEnable) {
|
||||||
await interaction.reply({
|
await interaction.reply({
|
||||||
content: `${emoji.answer.error} | The log is already setup on this server`,
|
content: `${emoji.answer.error} | The log is already setup on this server`,
|
||||||
flags: MessageFlags.Ephemeral
|
flags: MessageFlags.Ephemeral,
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const roles = interaction.guild?.roles.cache
|
const roles = interaction.guild?.roles.cache
|
||||||
.filter(role => !role.managed && role.id !== interaction.guild?.id)
|
.filter((role) => !role.managed && role.id !== interaction.guild?.id)
|
||||||
.sort((a, b) => b.position - a.position)
|
.sort((a, b) => b.position - a.position);
|
||||||
|
|
||||||
const menu = new StringSelectMenuBuilder()
|
const menu = new StringSelectMenuBuilder()
|
||||||
.setCustomId('role_select')
|
.setCustomId("role_select")
|
||||||
.setPlaceholder('Choose the role that will have logs access')
|
.setPlaceholder("Choose the role that will have logs access")
|
||||||
.setMinValues(1)
|
.setMinValues(1)
|
||||||
.setMaxValues(Math.min(roles.size, 25))
|
.setMaxValues(Math.min(roles.size, 25))
|
||||||
.addOptions(roles.map(role =>
|
.addOptions(
|
||||||
|
roles.map((role) =>
|
||||||
new StringSelectMenuOptionBuilder()
|
new StringSelectMenuOptionBuilder()
|
||||||
.setLabel(role.name)
|
.setLabel(role.name)
|
||||||
.setValue(role.id)
|
.setValue(role.id),
|
||||||
)
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
const roleSelection = new ActionRowBuilder<StringSelectMenuBuilder>().addComponents(menu);
|
const roleSelection =
|
||||||
|
new ActionRowBuilder<StringSelectMenuBuilder>().addComponents(menu);
|
||||||
|
|
||||||
let permSelector: EmbedBuilder = new EmbedBuilder()
|
let permSelector: EmbedBuilder = new EmbedBuilder()
|
||||||
.setTitle(`Which role will have access`)
|
.setTitle(`Which role will have access`)
|
||||||
.setColor(`${guildData.color}`)
|
.setColor(`${guildData.color}`)
|
||||||
.setFooter({
|
.setFooter({
|
||||||
text: guildData.footer
|
text: guildData.footer,
|
||||||
})
|
});
|
||||||
|
|
||||||
const msg = await interaction.reply({
|
const msg = await interaction.reply({
|
||||||
embeds: [
|
embeds: [permSelector],
|
||||||
permSelector
|
components: [roleSelection],
|
||||||
],
|
flags: MessageFlags.fetchReply,
|
||||||
components: [
|
|
||||||
roleSelection
|
|
||||||
],
|
|
||||||
flags: MessageFlags.fetchReply
|
|
||||||
});
|
});
|
||||||
const collector = msg.createMessageComponentCollector({
|
const collector = msg.createMessageComponentCollector({
|
||||||
componentType: ComponentType.StringSelect,
|
componentType: ComponentType.StringSelect,
|
||||||
time: 60_000,
|
time: 60_000,
|
||||||
max: 25
|
max: 25,
|
||||||
});
|
});
|
||||||
collector.on('collect', async (selectInteraction: StringSelectMenuInteraction) => {
|
collector.on(
|
||||||
|
"collect",
|
||||||
|
async (selectInteraction: StringSelectMenuInteraction) => {
|
||||||
if (selectInteraction.user.id !== interaction.user.id) {
|
if (selectInteraction.user.id !== interaction.user.id) {
|
||||||
selectInteraction.reply({
|
selectInteraction.reply({
|
||||||
content: `${emoji.answer.no} | You cannot use this selector !`,
|
content: `${emoji.answer.no} | You cannot use this selector !`,
|
||||||
ephemeral: true
|
ephemeral: true,
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -150,68 +166,66 @@ export default {
|
||||||
id: interaction.guild.roles.everyone.id,
|
id: interaction.guild.roles.everyone.id,
|
||||||
deny: [
|
deny: [
|
||||||
PermissionsBitField.Flags.ViewChannel,
|
PermissionsBitField.Flags.ViewChannel,
|
||||||
PermissionsBitField.Flags.SendMessages
|
PermissionsBitField.Flags.SendMessages,
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
...selectedRoles.map(id => ({
|
...selectedRoles.map((id) => ({
|
||||||
id,
|
id,
|
||||||
allow: [
|
allow: [PermissionsBitField.Flags.ViewChannel],
|
||||||
PermissionsBitField.Flags.ViewChannel
|
})),
|
||||||
],
|
|
||||||
}))
|
|
||||||
];
|
];
|
||||||
|
|
||||||
const category = await interaction.guild.channels.create({
|
const category = (await interaction.guild.channels.create({
|
||||||
name: 'Logs',
|
name: "Logs",
|
||||||
type: ChannelType.GuildCategory,
|
type: ChannelType.GuildCategory,
|
||||||
permissionOverwrites
|
permissionOverwrites,
|
||||||
}) as CategoryChannel;
|
})) as CategoryChannel;
|
||||||
|
|
||||||
const logBot = await interaction.guild.channels.create({
|
const logBot = (await interaction.guild.channels.create({
|
||||||
name: 'bot-logs',
|
name: "bot-logs",
|
||||||
type: ChannelType.GuildText,
|
type: ChannelType.GuildText,
|
||||||
parent: category,
|
parent: category,
|
||||||
permissionOverwrites
|
permissionOverwrites,
|
||||||
}) as TextChannel;
|
})) as TextChannel;
|
||||||
|
|
||||||
const logChannels = await interaction.guild.channels.create({
|
const logChannels = (await interaction.guild.channels.create({
|
||||||
name: 'channel-logs',
|
name: "channel-logs",
|
||||||
type: ChannelType.GuildText,
|
type: ChannelType.GuildText,
|
||||||
parent: category,
|
parent: category,
|
||||||
permissionOverwrites
|
permissionOverwrites,
|
||||||
}) as TextChannel;
|
})) as TextChannel;
|
||||||
|
|
||||||
const logMember = await interaction.guild.channels.create({
|
const logMember = (await interaction.guild.channels.create({
|
||||||
name: 'member-logs',
|
name: "member-logs",
|
||||||
type: ChannelType.GuildText,
|
type: ChannelType.GuildText,
|
||||||
parent: category,
|
parent: category,
|
||||||
permissionOverwrites
|
permissionOverwrites,
|
||||||
}) as TextChannel;
|
})) as TextChannel;
|
||||||
|
|
||||||
const logMod = await interaction.guild.channels.create({
|
const logMod = (await interaction.guild.channels.create({
|
||||||
name: 'mod-logs',
|
name: "mod-logs",
|
||||||
type: ChannelType.GuildText,
|
type: ChannelType.GuildText,
|
||||||
parent: category,
|
parent: category,
|
||||||
permissionOverwrites
|
permissionOverwrites,
|
||||||
}) as TextChannel;
|
})) as TextChannel;
|
||||||
|
|
||||||
const logMsg = await interaction.guild.channels.create({
|
const logMsg = (await interaction.guild.channels.create({
|
||||||
name: 'message-logs',
|
name: "message-logs",
|
||||||
type: ChannelType.GuildText,
|
type: ChannelType.GuildText,
|
||||||
parent: category,
|
parent: category,
|
||||||
permissionOverwrites
|
permissionOverwrites,
|
||||||
}) as TextChannel;
|
})) as TextChannel;
|
||||||
|
|
||||||
const logServer = await interaction.guild.channels.create({
|
const logServer = (await interaction.guild.channels.create({
|
||||||
name: 'server-logs',
|
name: "server-logs",
|
||||||
type: ChannelType.GuildText,
|
type: ChannelType.GuildText,
|
||||||
parent: category,
|
parent: category,
|
||||||
permissionOverwrites
|
permissionOverwrites,
|
||||||
}) as TextChannel;
|
})) as TextChannel;
|
||||||
|
|
||||||
await prisma.guild.update({
|
await prisma.guild.update({
|
||||||
where: {
|
where: {
|
||||||
id: interaction.guild.id
|
id: interaction.guild.id,
|
||||||
},
|
},
|
||||||
data: {
|
data: {
|
||||||
logEnable: true,
|
logEnable: true,
|
||||||
|
|
@ -221,31 +235,34 @@ export default {
|
||||||
logMember: logMember.id,
|
logMember: logMember.id,
|
||||||
logMod: logMod.id,
|
logMod: logMod.id,
|
||||||
logMsg: logMsg.id,
|
logMsg: logMsg.id,
|
||||||
logServer: logServer.id
|
logServer: logServer.id,
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
const mentionList = selectedRoles.map(id => `- <@&${id}>`).join('\n');
|
const mentionList = selectedRoles
|
||||||
|
.map((id) => `- <@&${id}>`)
|
||||||
|
.join("\n");
|
||||||
const autoConfig = new EmbedBuilder()
|
const autoConfig = new EmbedBuilder()
|
||||||
.setTitle(`The logs category is created`)
|
.setTitle(`The logs category is created`)
|
||||||
.setDescription(`
|
.setDescription(
|
||||||
|
`
|
||||||
This following roles will have access to the logs.
|
This following roles will have access to the logs.
|
||||||
${mentionList}
|
${mentionList}
|
||||||
`)
|
`,
|
||||||
|
)
|
||||||
.setColor(`${guildData.color}`)
|
.setColor(`${guildData.color}`)
|
||||||
.setFooter({
|
.setFooter({
|
||||||
text: guildData.footer
|
text: guildData.footer,
|
||||||
})
|
});
|
||||||
await selectInteraction.update({
|
await selectInteraction.update({
|
||||||
embeds: [
|
embeds: [autoConfig],
|
||||||
autoConfig
|
components: [],
|
||||||
],
|
|
||||||
components: []
|
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
});
|
},
|
||||||
|
);
|
||||||
default:
|
default:
|
||||||
console.error(`no choice on logs command ${choice}`);
|
console.error(`no choice on logs command ${choice}`);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
}
|
};
|
||||||
|
|
|
||||||
|
|
@ -1,110 +1,130 @@
|
||||||
import { prisma } from '../../lib/prisma.ts';
|
import { prisma } from "../../lib/prisma.ts";
|
||||||
import { ActivityType, userMention, roleMention, PresenceUpdateStatus, MessageFlags, SlashCommandBuilder, EmbedBuilder } from 'discord.js';
|
import {
|
||||||
import emoji from '../../../assets/emoji.json' assert { type: "json" };
|
ActivityType,
|
||||||
|
userMention,
|
||||||
|
roleMention,
|
||||||
|
PresenceUpdateStatus,
|
||||||
|
MessageFlags,
|
||||||
|
SlashCommandBuilder,
|
||||||
|
EmbedBuilder,
|
||||||
|
} from "discord.js";
|
||||||
|
import emoji from "../../../assets/emoji.json" assert { type: "json" };
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
data: new SlashCommandBuilder()
|
data: new SlashCommandBuilder()
|
||||||
.setName('set')
|
.setName("set")
|
||||||
.setDescription('edit the default behavour of the bot')
|
.setDescription("edit the default behavour of the bot")
|
||||||
.addSubcommand(subcommand => subcommand
|
.addSubcommand((subcommand) =>
|
||||||
.setName('color')
|
subcommand
|
||||||
.setDescription('Change the default color for the embed')
|
.setName("color")
|
||||||
.addStringOption(option =>
|
.setDescription("Change the default color for the embed")
|
||||||
option.setName('color')
|
.addStringOption((option) =>
|
||||||
.setDescription('The new color by default')
|
option
|
||||||
.setRequired(true)
|
.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
|
.addSubcommand((subcommand) =>
|
||||||
.setName('footer')
|
subcommand
|
||||||
.setDescription('Change the default footer for the embed')
|
.setName("pp")
|
||||||
.addStringOption(option =>
|
.setDescription("Change the bot profile picture")
|
||||||
option.setName('text')
|
.addStringOption((option) =>
|
||||||
.setDescription('The new text by default of the bot')
|
option
|
||||||
.setRequired(true)
|
.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),
|
||||||
)
|
)
|
||||||
.addSubcommand(subcommand => subcommand
|
.addStringOption((option) =>
|
||||||
.setName('pp')
|
option
|
||||||
.setDescription('Change the bot profile picture')
|
.setName("presence")
|
||||||
.addStringOption(option =>
|
.setDescription("The new presence of the bot")
|
||||||
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)
|
.setRequired(true)
|
||||||
.addChoices(
|
.addChoices(
|
||||||
{
|
{
|
||||||
name: 'Online',
|
name: "Online",
|
||||||
value: 'online'
|
value: "online",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'Do not disturb',
|
name: "Do not disturb",
|
||||||
value: 'dnd'
|
value: "dnd",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'Idle',
|
name: "Idle",
|
||||||
value: 'idle'
|
value: "idle",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'Invisible',
|
name: "Invisible",
|
||||||
value: 'invisible'
|
value: "invisible",
|
||||||
},
|
},
|
||||||
|
),
|
||||||
)
|
)
|
||||||
)
|
.addStringOption((option) =>
|
||||||
.addStringOption(option =>
|
option
|
||||||
option.setName('type')
|
.setName("type")
|
||||||
.setDescription('The type of the new activity')
|
.setDescription("The type of the new activity")
|
||||||
.setRequired(true)
|
.setRequired(true)
|
||||||
.addChoices(
|
.addChoices(
|
||||||
{
|
{
|
||||||
name: 'Playing',
|
name: "Playing",
|
||||||
value: 'play'
|
value: "play",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'Watching',
|
name: "Watching",
|
||||||
value: 'watch'
|
value: "watch",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'Listening',
|
name: "Listening",
|
||||||
value: 'listen'
|
value: "listen",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'Competing',
|
name: "Competing",
|
||||||
value: 'competing'
|
value: "competing",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'Streaming',
|
name: "Streaming",
|
||||||
value: 'stream'
|
value: "stream",
|
||||||
},
|
},
|
||||||
)
|
),
|
||||||
)
|
),
|
||||||
),
|
),
|
||||||
async execute(interaction: CommandInteraction) {
|
async execute(interaction: CommandInteraction) {
|
||||||
let guildData: Guild;
|
let guildData: Guild;
|
||||||
try {
|
try {
|
||||||
guildData = await prisma.guild.findUnique({
|
guildData = await prisma.guild.findUnique({
|
||||||
where: {
|
where: {
|
||||||
id: interaction.guild.id
|
id: interaction.guild.id,
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error(`\t⚠️ | Cannot get the database connection!\n\t\t(${err}).`);
|
console.error(
|
||||||
|
`\t⚠️ | Cannot get the database connection!\n\t\t(${err}).`,
|
||||||
|
);
|
||||||
await interaction.reply({
|
await interaction.reply({
|
||||||
content: `${emoji.answer.error} | Cannot connect to the database`,
|
content: `${emoji.answer.error} | Cannot connect to the database`,
|
||||||
flags: MessageFlags.Ephemeral
|
flags: MessageFlags.Ephemeral,
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -112,198 +132,204 @@ export default {
|
||||||
try {
|
try {
|
||||||
userData = await prisma.user.findUnique({
|
userData = await prisma.user.findUnique({
|
||||||
where: {
|
where: {
|
||||||
id: interaction.user.id
|
id: interaction.user.id,
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error(`\t⚠️ | Cannot get the database connection!\n\t\t(${err}).`);
|
console.error(
|
||||||
|
`\t⚠️ | Cannot get the database connection!\n\t\t(${err}).`,
|
||||||
|
);
|
||||||
await interaction.reply({
|
await interaction.reply({
|
||||||
content: `${emoji.answer.error} | Cannot connect to the database`,
|
content: `${emoji.answer.error} | Cannot connect to the database`,
|
||||||
flags: MessageFlags.Ephemeral
|
flags: MessageFlags.Ephemeral,
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const subcommand: string = interaction.options.getSubcommand();
|
const subcommand: string = interaction.options.getSubcommand();
|
||||||
switch (subcommand) {
|
switch (subcommand) {
|
||||||
case 'color':
|
case "color":
|
||||||
if (!userData.isOwner) {
|
if (!userData.isOwner) {
|
||||||
await interaction.reply({
|
await interaction.reply({
|
||||||
content: `${emoji.answer.no} | This command is only for owner`,
|
content: `${emoji.answer.no} | This command is only for owner`,
|
||||||
flags: MessageFlags.Ephemeral
|
flags: MessageFlags.Ephemeral,
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const newColor: string = interaction.options.getString('color');
|
const newColor: string = interaction.options.getString("color");
|
||||||
if (!/^#[0-9A-Fa-f]{6}$/.test(newColor)) {
|
if (!/^#[0-9A-Fa-f]{6}$/.test(newColor)) {
|
||||||
await interaction.reply({
|
await interaction.reply({
|
||||||
content: `${emoji.answer.no} | You have to give a color with the syntax: \`#000000\`.`,
|
content: `${emoji.answer.no} | You have to give a color with the syntax: \`#000000\`.`,
|
||||||
flags: MessageFlags.Ephemeral
|
flags: MessageFlags.Ephemeral,
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
await prisma.guild.upsert({
|
await prisma.guild.upsert({
|
||||||
where: {
|
where: {
|
||||||
id: interaction.guild.id
|
id: interaction.guild.id,
|
||||||
},
|
},
|
||||||
update: {
|
update: {
|
||||||
color: newColor
|
color: newColor,
|
||||||
},
|
},
|
||||||
create: {
|
create: {
|
||||||
id: interaction.guild.id,
|
id: interaction.guild.id,
|
||||||
color: newColor
|
color: newColor,
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
await interaction.reply({
|
await interaction.reply({
|
||||||
content: `${emoji.answer.yes} | The default color for embed will be now changed by \`${newColor}\``,
|
content: `${emoji.answer.yes} | The default color for embed will be now changed by \`${newColor}\``,
|
||||||
flags: MessageFlags.Ephemeral
|
flags: MessageFlags.Ephemeral,
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
case 'footer':
|
case "footer":
|
||||||
if (!userData.isOwner) {
|
if (!userData.isOwner) {
|
||||||
await interaction.reply({
|
await interaction.reply({
|
||||||
content: `${emoji.answer.no} | This command is only for owner`,
|
content: `${emoji.answer.no} | This command is only for owner`,
|
||||||
flags: MessageFlags.Ephemeral
|
flags: MessageFlags.Ephemeral,
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const newFooter: string = interaction.options.getString('text');
|
const newFooter: string = interaction.options.getString("text");
|
||||||
if (newFooter.length > 2048) {
|
if (newFooter.length > 2048) {
|
||||||
await interaction.reply({
|
await interaction.reply({
|
||||||
content: `${emoji.answer.no} | The maximum lenght for the footer is 2048`,
|
content: `${emoji.answer.no} | The maximum lenght for the footer is 2048`,
|
||||||
flags: MessageFlags.Ephemeral
|
flags: MessageFlags.Ephemeral,
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
await prisma.guild.upsert({
|
await prisma.guild.upsert({
|
||||||
where: {
|
where: {
|
||||||
id: interaction.guild.id
|
id: interaction.guild.id,
|
||||||
},
|
},
|
||||||
update: {
|
update: {
|
||||||
footer: newFooter
|
footer: newFooter,
|
||||||
},
|
},
|
||||||
create: {
|
create: {
|
||||||
id: interaction.guild.id,
|
id: interaction.guild.id,
|
||||||
footer: newFooter
|
footer: newFooter,
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
await interaction.reply({
|
await interaction.reply({
|
||||||
content: `${emoji.answer.yes} | The default footer for embed will be now changed by \`${newFooter}\`.`,
|
content: `${emoji.answer.yes} | The default footer for embed will be now changed by \`${newFooter}\`.`,
|
||||||
flags: MessageFlags.Ephemeral
|
flags: MessageFlags.Ephemeral,
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
case 'pp':
|
case "pp":
|
||||||
if (!userData.isBuyer) {
|
if (!userData.isBuyer) {
|
||||||
await interaction.reply({
|
await interaction.reply({
|
||||||
content: `${emoji.answer.no} | This command is only for buyer`,
|
content: `${emoji.answer.no} | This command is only for buyer`,
|
||||||
flags: MessageFlags.Ephemeral
|
flags: MessageFlags.Ephemeral,
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const newPicture: string = interaction.options.getString('link');
|
const newPicture: string = interaction.options.getString("link");
|
||||||
try {
|
try {
|
||||||
interaction.client.user.setAvatar(newPicture);
|
interaction.client.user.setAvatar(newPicture);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
await interaction.reply({
|
await interaction.reply({
|
||||||
content: `${emoji.answer.no} | Error during changing the bot profile picture`,
|
content: `${emoji.answer.no} | Error during changing the bot profile picture`,
|
||||||
flags: MessageFlags.Ephemeral
|
flags: MessageFlags.Ephemeral,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
await interaction.reply({
|
await interaction.reply({
|
||||||
content: `${emoji.answer.yes} | The picture profile of the bot is now updated.`,
|
content: `${emoji.answer.yes} | The picture profile of the bot is now updated.`,
|
||||||
flags: MessageFlags.Ephemeral
|
flags: MessageFlags.Ephemeral,
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
case 'status':
|
case "status":
|
||||||
if (!userData.isBuyer) {
|
if (!userData.isBuyer) {
|
||||||
await interaction.reply({
|
await interaction.reply({
|
||||||
content: `${emoji.answer.no} | This command is only for buyer`,
|
content: `${emoji.answer.no} | This command is only for buyer`,
|
||||||
flags: MessageFlags.Ephemeral
|
flags: MessageFlags.Ephemeral,
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const newStatus: string = interaction.options.getString('status');
|
const newStatus: string = interaction.options.getString("status");
|
||||||
const tmpType: string = interaction.options.getString('type');
|
const tmpType: string = interaction.options.getString("type");
|
||||||
let newType: ActivityType;
|
let newType: ActivityType;
|
||||||
switch (tmpType) {
|
switch (tmpType) {
|
||||||
case 'play':
|
case "play":
|
||||||
newType = ActivityType.Playing;
|
newType = ActivityType.Playing;
|
||||||
break;
|
break;
|
||||||
case 'listen':
|
case "listen":
|
||||||
newType = ActivityType.Listening;
|
newType = ActivityType.Listening;
|
||||||
break;
|
break;
|
||||||
case 'watch':
|
case "watch":
|
||||||
newType = ActivityType.Watching;
|
newType = ActivityType.Watching;
|
||||||
break;
|
break;
|
||||||
case 'stream':
|
case "stream":
|
||||||
newType = ActivityType.Streaming;
|
newType = ActivityType.Streaming;
|
||||||
break;
|
break;
|
||||||
case 'competing':
|
case "competing":
|
||||||
newType = ActivityType.Competing;
|
newType = ActivityType.Competing;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
const tmpPresence: string = interaction.options.getString('presence');
|
const tmpPresence: string = interaction.options.getString("presence");
|
||||||
let newPresence: PresenceUpdateStatus;
|
let newPresence: PresenceUpdateStatus;
|
||||||
switch (tmpPresence) {
|
switch (tmpPresence) {
|
||||||
case 'online':
|
case "online":
|
||||||
newPresence = PresenceUpdateStatus.Online;
|
newPresence = PresenceUpdateStatus.Online;
|
||||||
break;
|
break;
|
||||||
case 'idle':
|
case "idle":
|
||||||
newPresence = PresenceUpdateStatus.Idle;
|
newPresence = PresenceUpdateStatus.Idle;
|
||||||
break;
|
break;
|
||||||
case 'dnd':
|
case "dnd":
|
||||||
newPresence = PresenceUpdateStatus.DoNotDisturb;
|
newPresence = PresenceUpdateStatus.DoNotDisturb;
|
||||||
break;
|
break;
|
||||||
case 'invisible':
|
case "invisible":
|
||||||
newPresence = PresenceUpdateStatus.Invisible;
|
newPresence = PresenceUpdateStatus.Invisible;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
await prisma.bot.upsert({
|
await prisma.bot.upsert({
|
||||||
where: {
|
where: {
|
||||||
id: 1
|
id: 1,
|
||||||
},
|
},
|
||||||
update: {
|
update: {
|
||||||
status: newStatus,
|
status: newStatus,
|
||||||
type: tmpType,
|
type: tmpType,
|
||||||
presence: newPresence
|
presence: newPresence,
|
||||||
},
|
},
|
||||||
create: {
|
create: {
|
||||||
id: 1,
|
id: 1,
|
||||||
status: newStatus,
|
status: newStatus,
|
||||||
type: tmpType,
|
type: tmpType,
|
||||||
presence: newPresence
|
presence: newPresence,
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
if (tmpType === 'steam') {
|
if (tmpType === "steam") {
|
||||||
interaction.client.user.setPresence({
|
interaction.client.user.setPresence({
|
||||||
status: newPresence,
|
status: newPresence,
|
||||||
activities: [{
|
activities: [
|
||||||
|
{
|
||||||
name: newStatus,
|
name: newStatus,
|
||||||
type: newType,
|
type: newType,
|
||||||
url: 'https://twitch.tv/EniumRaphael'
|
url: "https://twitch.tv/EniumRaphael",
|
||||||
}]
|
},
|
||||||
|
],
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
interaction.client.user.setPresence({
|
interaction.client.user.setPresence({
|
||||||
status: newPresence,
|
status: newPresence,
|
||||||
activities: [{
|
activities: [
|
||||||
|
{
|
||||||
name: newStatus,
|
name: newStatus,
|
||||||
type: newType,
|
type: newType,
|
||||||
}]
|
},
|
||||||
|
],
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
await interaction.reply({
|
await interaction.reply({
|
||||||
content: `${emoji.answer.no} | Cannot change the status\n\n\t${err}`,
|
content: `${emoji.answer.no} | Cannot change the status\n\n\t${err}`,
|
||||||
flags: MessageFlags.Ephemeral
|
flags: MessageFlags.Ephemeral,
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
await interaction.reply({
|
await interaction.reply({
|
||||||
content: `${emoji.answer.yes} | The new activity is now \`${newStatus}\``,
|
content: `${emoji.answer.yes} | The new activity is now \`${newStatus}\``,
|
||||||
flags: MessageFlags.Ephemeral
|
flags: MessageFlags.Ephemeral,
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
}
|
};
|
||||||
|
|
|
||||||
|
|
@ -1,32 +1,40 @@
|
||||||
import { EmbedBuilder, userMention, MessageFlags, SlashCommandBuilder } from 'discord.js';
|
import {
|
||||||
import { prisma } from '../../lib/prisma.ts';
|
EmbedBuilder,
|
||||||
import emoji from '../../../assets/emoji.json' assert { type: "json" };
|
userMention,
|
||||||
|
MessageFlags,
|
||||||
|
SlashCommandBuilder,
|
||||||
|
} from "discord.js";
|
||||||
|
import { prisma } from "../../lib/prisma.ts";
|
||||||
|
import emoji from "../../../assets/emoji.json" assert { type: "json" };
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
data: new SlashCommandBuilder()
|
data: new SlashCommandBuilder()
|
||||||
.setName('buyer')
|
.setName("buyer")
|
||||||
.setDescription('Interact with the buyers')
|
.setDescription("Interact with the buyers")
|
||||||
.addSubcommand(subcommand => subcommand
|
.addSubcommand((subcommand) =>
|
||||||
.setName('add')
|
subcommand
|
||||||
.setDescription('Add a user on the buyer list')
|
.setName("add")
|
||||||
.addUserOption(option =>
|
.setDescription("Add a user on the buyer list")
|
||||||
option.setName('target')
|
.addUserOption((option) =>
|
||||||
.setDescription('The user who will be added to the list')
|
option
|
||||||
.setRequired(true)
|
.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
|
.addSubcommand((subcommand) =>
|
||||||
.setName('delete')
|
subcommand.setName("list").setDescription("The list of the buyer"),
|
||||||
.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) {
|
async execute(interaction: CommandInteraction) {
|
||||||
const subcommand = interaction.options.getSubcommand();
|
const subcommand = interaction.options.getSubcommand();
|
||||||
|
|
@ -34,14 +42,16 @@ export default {
|
||||||
try {
|
try {
|
||||||
userData = await prisma.user.findUnique({
|
userData = await prisma.user.findUnique({
|
||||||
where: {
|
where: {
|
||||||
id: interaction.user.id
|
id: interaction.user.id,
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error(`\t⚠️ | Cannot get the database connection!\n\t\t(${err}).`);
|
console.error(
|
||||||
|
`\t⚠️ | Cannot get the database connection!\n\t\t(${err}).`,
|
||||||
|
);
|
||||||
await interaction.reply({
|
await interaction.reply({
|
||||||
content: `${emoji.answer.error} | Cannot connect to the database`,
|
content: `${emoji.answer.error} | Cannot connect to the database`,
|
||||||
flags: MessageFlags.Ephemeral
|
flags: MessageFlags.Ephemeral,
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -49,149 +59,155 @@ export default {
|
||||||
try {
|
try {
|
||||||
guildData = await prisma.guild.findUnique({
|
guildData = await prisma.guild.findUnique({
|
||||||
where: {
|
where: {
|
||||||
id: interaction.guild.id
|
id: interaction.guild.id,
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error(`\t⚠️ | Cannot get the database connection!\n\t\t(${err}).`);
|
console.error(
|
||||||
|
`\t⚠️ | Cannot get the database connection!\n\t\t(${err}).`,
|
||||||
|
);
|
||||||
await interaction.reply({
|
await interaction.reply({
|
||||||
content: `${emoji.answer.error} | Cannot connect to the database`,
|
content: `${emoji.answer.error} | Cannot connect to the database`,
|
||||||
flags: MessageFlags.Ephemeral
|
flags: MessageFlags.Ephemeral,
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const target: GuildMember = interaction.options.getUser('target')
|
const target: GuildMember = interaction.options.getUser("target");
|
||||||
switch (subcommand) {
|
switch (subcommand) {
|
||||||
case 'add':
|
case "add":
|
||||||
if (!userData.isDev) {
|
if (!userData.isDev) {
|
||||||
await interaction.reply({
|
await interaction.reply({
|
||||||
content: `${emoji.answer.no} | This command is only for the developper of the bot`,
|
content: `${emoji.answer.no} | This command is only for the developper of the bot`,
|
||||||
flags: MessageFlags.Ephemeral
|
flags: MessageFlags.Ephemeral,
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
await prisma.bot.update({
|
await prisma.bot.update({
|
||||||
where: {
|
where: {
|
||||||
id: 1
|
id: 1,
|
||||||
},
|
},
|
||||||
data: {
|
data: {
|
||||||
buyers: {
|
buyers: {
|
||||||
connect: {
|
connect: {
|
||||||
id: target.id
|
id: target.id,
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
owners: {
|
owners: {
|
||||||
connect: {
|
connect: {
|
||||||
id: target.id
|
id: target.id,
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
await prisma.user.upsert({
|
await prisma.user.upsert({
|
||||||
where: {
|
where: {
|
||||||
id: target.id
|
id: target.id,
|
||||||
},
|
},
|
||||||
update: {
|
update: {
|
||||||
isBuyer: true,
|
isBuyer: true,
|
||||||
isOwner: true
|
isOwner: true,
|
||||||
},
|
},
|
||||||
create: {
|
create: {
|
||||||
id: target.id,
|
id: target.id,
|
||||||
isBuyer: true,
|
isBuyer: true,
|
||||||
isOwner: true
|
isOwner: true,
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error(`⚠️ | Error when adding ${target.username} to the buyer list`);
|
console.error(
|
||||||
|
`⚠️ | Error when adding ${target.username} to the buyer list`,
|
||||||
|
);
|
||||||
await interaction.reply({
|
await interaction.reply({
|
||||||
content: `${emoji.answer.error} | Error when adding ${target.username} to the owner list`,
|
content: `${emoji.answer.error} | Error when adding ${target.username} to the owner list`,
|
||||||
flags: MessageFlags.Ephemeral
|
flags: MessageFlags.Ephemeral,
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
await interaction.reply({
|
await interaction.reply({
|
||||||
content: `${emoji.answer.yes} | ${target.username} has been added to the buyer list`,
|
content: `${emoji.answer.yes} | ${target.username} has been added to the buyer list`,
|
||||||
flags: MessageFlags.Ephemeral
|
flags: MessageFlags.Ephemeral,
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
case 'delete':
|
case "delete":
|
||||||
if (!userData.isDev) {
|
if (!userData.isDev) {
|
||||||
await interaction.reply({
|
await interaction.reply({
|
||||||
content: `${emoji.answer.no} | This command is only for buyer`,
|
content: `${emoji.answer.no} | This command is only for buyer`,
|
||||||
flags: MessageFlags.Ephemeral
|
flags: MessageFlags.Ephemeral,
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
} else if (interaction.user.id === target.id) {
|
} else if (interaction.user.id === target.id) {
|
||||||
await interaction.reply({
|
await interaction.reply({
|
||||||
content: `${emoji.answer.no} | You cannot removing yourself from the buyer list`,
|
content: `${emoji.answer.no} | You cannot removing yourself from the buyer list`,
|
||||||
flags: MessageFlags.Ephemeral
|
flags: MessageFlags.Ephemeral,
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
await prisma.bot.update({
|
await prisma.bot.update({
|
||||||
where: {
|
where: {
|
||||||
id: 1
|
id: 1,
|
||||||
},
|
},
|
||||||
data: {
|
data: {
|
||||||
buyers: {
|
buyers: {
|
||||||
disconnect: {
|
disconnect: {
|
||||||
id: target.id
|
id: target.id,
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
owners: {
|
owners: {
|
||||||
disconnect: {
|
disconnect: {
|
||||||
id: target.id
|
id: target.id,
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
await prisma.user.upsert({
|
await prisma.user.upsert({
|
||||||
where: {
|
where: {
|
||||||
id: target.id
|
id: target.id,
|
||||||
},
|
},
|
||||||
update: {
|
update: {
|
||||||
isBuyer: false,
|
isBuyer: false,
|
||||||
isOwner: false
|
isOwner: false,
|
||||||
},
|
},
|
||||||
create: {
|
create: {
|
||||||
id: target.id,
|
id: target.id,
|
||||||
isBuyer: false,
|
isBuyer: false,
|
||||||
isOwner: false
|
isOwner: false,
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error(`⚠️ | Error when removing ${target.username} to the username`);
|
console.error(
|
||||||
|
`⚠️ | Error when removing ${target.username} to the username`,
|
||||||
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
await interaction.reply({
|
await interaction.reply({
|
||||||
content: `${emoji.answer.yes} | ${target.username} has been removing to the buyer list`,
|
content: `${emoji.answer.yes} | ${target.username} has been removing to the buyer list`,
|
||||||
flags: MessageFlags.Ephemeral
|
flags: MessageFlags.Ephemeral,
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
case 'list':
|
case "list":
|
||||||
if (!userData.isBuyer) {
|
if (!userData.isBuyer) {
|
||||||
await interaction.reply({
|
await interaction.reply({
|
||||||
content: `${emoji.answer.no} | This command is only for buyer`,
|
content: `${emoji.answer.no} | This command is only for buyer`,
|
||||||
flags: MessageFlags.Ephemeral
|
flags: MessageFlags.Ephemeral,
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
const bot = await prisma.bot.findUnique({
|
const bot = await prisma.bot.findUnique({
|
||||||
where: {
|
where: {
|
||||||
id: 1
|
id: 1,
|
||||||
},
|
},
|
||||||
include: {
|
include: {
|
||||||
buyers: true
|
buyers: true,
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
if (!bot || bot.buyers.length === 0) {
|
if (!bot || bot.buyers.length === 0) {
|
||||||
await interaction.reply({
|
await interaction.reply({
|
||||||
content: `${emoji.answer.error} | There is no buyer registered.`,
|
content: `${emoji.answer.error} | There is no buyer registered.`,
|
||||||
flags: MessageFlags.Ephemeral
|
flags: MessageFlags.Ephemeral,
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
@ -205,32 +221,32 @@ export default {
|
||||||
console.warn(`⚠️ | ${buyer.id} : ${err}`);
|
console.warn(`⚠️ | ${buyer.id} : ${err}`);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
})
|
}),
|
||||||
);
|
);
|
||||||
|
|
||||||
const toSend: EmbedBuilder = new EmbedBuilder()
|
const toSend: EmbedBuilder = new EmbedBuilder()
|
||||||
.setTitle(`${emoji.badge.buyer} | Buyer list`)
|
.setTitle(`${emoji.badge.buyer} | Buyer list`)
|
||||||
.setColor(guildData.color)
|
.setColor(guildData.color)
|
||||||
.setFooter({
|
.setFooter({
|
||||||
text: guildData.footer
|
text: guildData.footer,
|
||||||
})
|
})
|
||||||
.setDescription(buyerList.filter(Boolean).join(''))
|
.setDescription(buyerList.filter(Boolean).join(""));
|
||||||
await interaction.reply({
|
await interaction.reply({
|
||||||
embeds: [
|
embeds: [toSend],
|
||||||
toSend
|
flags: MessageFlags.Ephemeral,
|
||||||
],
|
|
||||||
flags: MessageFlags.Ephemeral
|
|
||||||
});
|
});
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error(`⚠️ | error when fetching infromation from the database: ${err}`);
|
console.error(
|
||||||
|
`⚠️ | error when fetching infromation from the database: ${err}`,
|
||||||
|
);
|
||||||
await interaction.reply({
|
await interaction.reply({
|
||||||
content: `${emoji.answer.error} | Cannot fetch the infromation of the database.`,
|
content: `${emoji.answer.error} | Cannot fetch the infromation of the database.`,
|
||||||
flags: MessageFlags.Ephemeral
|
flags: MessageFlags.Ephemeral,
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
}
|
};
|
||||||
|
|
|
||||||
|
|
@ -1,32 +1,40 @@
|
||||||
import { EmbedBuilder, userMention, MessageFlags, SlashCommandBuilder } from 'discord.js';
|
import {
|
||||||
import { prisma } from '../../lib/prisma.ts';
|
EmbedBuilder,
|
||||||
import emoji from '../../../assets/emoji.json' assert { type: "json" };
|
userMention,
|
||||||
|
MessageFlags,
|
||||||
|
SlashCommandBuilder,
|
||||||
|
} from "discord.js";
|
||||||
|
import { prisma } from "../../lib/prisma.ts";
|
||||||
|
import emoji from "../../../assets/emoji.json" assert { type: "json" };
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
data: new SlashCommandBuilder()
|
data: new SlashCommandBuilder()
|
||||||
.setName('owner')
|
.setName("owner")
|
||||||
.setDescription('Interact with the owners')
|
.setDescription("Interact with the owners")
|
||||||
.addSubcommand(subcommand => subcommand
|
.addSubcommand((subcommand) =>
|
||||||
.setName('add')
|
subcommand
|
||||||
.setDescription('Add a user on the owner list')
|
.setName("add")
|
||||||
.addUserOption(option =>
|
.setDescription("Add a user on the owner list")
|
||||||
option.setName('target')
|
.addUserOption((option) =>
|
||||||
.setDescription('The user who will be added to the list')
|
option
|
||||||
.setRequired(true)
|
.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
|
.addSubcommand((subcommand) =>
|
||||||
.setName('delete')
|
subcommand.setName("list").setDescription("The list of the owner"),
|
||||||
.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) {
|
async execute(interaction: CommandInteraction) {
|
||||||
const subcommand = interaction.options.getSubcommand();
|
const subcommand = interaction.options.getSubcommand();
|
||||||
|
|
@ -34,14 +42,16 @@ export default {
|
||||||
try {
|
try {
|
||||||
userData = await prisma.user.findUnique({
|
userData = await prisma.user.findUnique({
|
||||||
where: {
|
where: {
|
||||||
id: interaction.user.id
|
id: interaction.user.id,
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error(`\t⚠️ | Cannot get the database connection!\n\t\t(${err}).`);
|
console.error(
|
||||||
|
`\t⚠️ | Cannot get the database connection!\n\t\t(${err}).`,
|
||||||
|
);
|
||||||
await interaction.reply({
|
await interaction.reply({
|
||||||
content: `${emoji.answer.error} | Cannot connect to the database`,
|
content: `${emoji.answer.error} | Cannot connect to the database`,
|
||||||
flags: MessageFlags.Ephemeral
|
flags: MessageFlags.Ephemeral,
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -49,139 +59,145 @@ export default {
|
||||||
try {
|
try {
|
||||||
guildData = await prisma.guild.findUnique({
|
guildData = await prisma.guild.findUnique({
|
||||||
where: {
|
where: {
|
||||||
id: interaction.guild.id
|
id: interaction.guild.id,
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error(`\t⚠️ | Cannot get the database connection!\n\t\t(${err}).`);
|
console.error(
|
||||||
|
`\t⚠️ | Cannot get the database connection!\n\t\t(${err}).`,
|
||||||
|
);
|
||||||
await interaction.reply({
|
await interaction.reply({
|
||||||
content: `${emoji.answer.error} | Cannot connect to the database`,
|
content: `${emoji.answer.error} | Cannot connect to the database`,
|
||||||
flags: MessageFlags.Ephemeral
|
flags: MessageFlags.Ephemeral,
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const target: GuildMember = interaction.options.getUser('target')
|
const target: GuildMember = interaction.options.getUser("target");
|
||||||
switch (subcommand) {
|
switch (subcommand) {
|
||||||
case 'add':
|
case "add":
|
||||||
if (!userData.isBuyer) {
|
if (!userData.isBuyer) {
|
||||||
await interaction.reply({
|
await interaction.reply({
|
||||||
content: `${emoji.answer.no} | This command is only for buyer`,
|
content: `${emoji.answer.no} | This command is only for buyer`,
|
||||||
flags: MessageFlags.Ephemeral
|
flags: MessageFlags.Ephemeral,
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
await prisma.bot.update({
|
await prisma.bot.update({
|
||||||
where: {
|
where: {
|
||||||
id: 1
|
id: 1,
|
||||||
},
|
},
|
||||||
data: {
|
data: {
|
||||||
owners: {
|
owners: {
|
||||||
connect: {
|
connect: {
|
||||||
id: target.id
|
id: target.id,
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
await prisma.user.upsert({
|
await prisma.user.upsert({
|
||||||
where: {
|
where: {
|
||||||
id: target.id
|
id: target.id,
|
||||||
},
|
},
|
||||||
update: {
|
update: {
|
||||||
isOwner: true
|
isOwner: true,
|
||||||
},
|
},
|
||||||
create: {
|
create: {
|
||||||
id: target.id,
|
id: target.id,
|
||||||
isOwner: true
|
isOwner: true,
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error(`⚠️ | Error when adding ${target.username} to the username`);
|
console.error(
|
||||||
|
`⚠️ | Error when adding ${target.username} to the username`,
|
||||||
|
);
|
||||||
await interaction.reply({
|
await interaction.reply({
|
||||||
content: `${emoji.answer.error} | Error when adding ${target.username} to the owner list`,
|
content: `${emoji.answer.error} | Error when adding ${target.username} to the owner list`,
|
||||||
flags: MessageFlags.Ephemeral
|
flags: MessageFlags.Ephemeral,
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
await interaction.reply({
|
await interaction.reply({
|
||||||
content: `${emoji.answer.yes} | ${target.username} has been added to the owner list`,
|
content: `${emoji.answer.yes} | ${target.username} has been added to the owner list`,
|
||||||
flags: MessageFlags.Ephemeral
|
flags: MessageFlags.Ephemeral,
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
case 'delete':
|
case "delete":
|
||||||
if (!userData.isBuyer) {
|
if (!userData.isBuyer) {
|
||||||
await interaction.reply({
|
await interaction.reply({
|
||||||
content: `${emoji.answer.no} | This command is only for buyer`,
|
content: `${emoji.answer.no} | This command is only for buyer`,
|
||||||
flags: MessageFlags.Ephemeral
|
flags: MessageFlags.Ephemeral,
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
} else if (interaction.user.id === target.id) {
|
} else if (interaction.user.id === target.id) {
|
||||||
await interaction.reply({
|
await interaction.reply({
|
||||||
content: `${emoji.answer.no} | You cannot removing yourself from the owner list`,
|
content: `${emoji.answer.no} | You cannot removing yourself from the owner list`,
|
||||||
flags: MessageFlags.Ephemeral
|
flags: MessageFlags.Ephemeral,
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
await prisma.bot.update({
|
await prisma.bot.update({
|
||||||
where: {
|
where: {
|
||||||
id: 1
|
id: 1,
|
||||||
},
|
},
|
||||||
data: {
|
data: {
|
||||||
owners: {
|
owners: {
|
||||||
disconnect: {
|
disconnect: {
|
||||||
id: target.id
|
id: target.id,
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
await prisma.user.upsert({
|
await prisma.user.upsert({
|
||||||
where: {
|
where: {
|
||||||
id: target.id
|
id: target.id,
|
||||||
},
|
},
|
||||||
update: {
|
update: {
|
||||||
isOwner: false
|
isOwner: false,
|
||||||
},
|
},
|
||||||
create: {
|
create: {
|
||||||
id: target.id,
|
id: target.id,
|
||||||
isOwner: false
|
isOwner: false,
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error(`⚠️ | Error when removing ${target.username} to the username`);
|
console.error(
|
||||||
|
`⚠️ | Error when removing ${target.username} to the username`,
|
||||||
|
);
|
||||||
await interaction.reply({
|
await interaction.reply({
|
||||||
content: `${emoji.answer.error} | Cannot removing the user from the owner list`,
|
content: `${emoji.answer.error} | Cannot removing the user from the owner list`,
|
||||||
flags: MessageFlags.Ephemeral
|
flags: MessageFlags.Ephemeral,
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
await interaction.reply({
|
await interaction.reply({
|
||||||
content: `${emoji.answer.yes} | ${target.username} has been removing to the owner list`,
|
content: `${emoji.answer.yes} | ${target.username} has been removing to the owner list`,
|
||||||
flags: MessageFlags.Ephemeral
|
flags: MessageFlags.Ephemeral,
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
case 'list':
|
case "list":
|
||||||
if (!userData.isOwner) {
|
if (!userData.isOwner) {
|
||||||
await interaction.reply({
|
await interaction.reply({
|
||||||
content: `${emoji.answer.no} | This command is only for owner`,
|
content: `${emoji.answer.no} | This command is only for owner`,
|
||||||
flags: MessageFlags.Ephemeral
|
flags: MessageFlags.Ephemeral,
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
const bot = await prisma.bot.findUnique({
|
const bot = await prisma.bot.findUnique({
|
||||||
where: {
|
where: {
|
||||||
id: 1
|
id: 1,
|
||||||
},
|
},
|
||||||
include: {
|
include: {
|
||||||
owners: true
|
owners: true,
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
if (!bot || bot.owners.length === 0) {
|
if (!bot || bot.owners.length === 0) {
|
||||||
await interaction.reply({
|
await interaction.reply({
|
||||||
content: `${emoji.answer.error} | There is no owner registered.`,
|
content: `${emoji.answer.error} | There is no owner registered.`,
|
||||||
flags: MessageFlags.Ephemeral
|
flags: MessageFlags.Ephemeral,
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
@ -195,31 +211,31 @@ export default {
|
||||||
console.warn(`⚠️ | ${owner.id} : ${err}`);
|
console.warn(`⚠️ | ${owner.id} : ${err}`);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
})
|
}),
|
||||||
);
|
);
|
||||||
|
|
||||||
const toSend: EmbedBuilder = new EmbedBuilder()
|
const toSend: EmbedBuilder = new EmbedBuilder()
|
||||||
.setTitle(`${emoji.badge.owner} | Owner list`)
|
.setTitle(`${emoji.badge.owner} | Owner list`)
|
||||||
.setColor(guildData.color)
|
.setColor(guildData.color)
|
||||||
.setFooter({
|
.setFooter({
|
||||||
text: guildData.footer
|
text: guildData.footer,
|
||||||
})
|
})
|
||||||
.setDescription(ownerList.filter(Boolean).join(''))
|
.setDescription(ownerList.filter(Boolean).join(""));
|
||||||
await interaction.reply({
|
await interaction.reply({
|
||||||
embeds: [
|
embeds: [toSend],
|
||||||
toSend
|
flags: MessageFlags.Ephemeral,
|
||||||
],
|
|
||||||
flags: MessageFlags.Ephemeral
|
|
||||||
});
|
});
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error(`⚠️ | error when fetching infromation from the database: ${err}`);
|
console.error(
|
||||||
|
`⚠️ | error when fetching infromation from the database: ${err}`,
|
||||||
|
);
|
||||||
await interaction.reply({
|
await interaction.reply({
|
||||||
content: `${emoji.answer.error} | Cannot fetch the infromation of the database.`,
|
content: `${emoji.answer.error} | Cannot fetch the infromation of the database.`,
|
||||||
flags: MessageFlags.Ephemeral
|
flags: MessageFlags.Ephemeral,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
}
|
};
|
||||||
|
|
|
||||||
|
|
@ -1,32 +1,40 @@
|
||||||
import { EmbedBuilder, userMention, MessageFlags, SlashCommandBuilder } from 'discord.js';
|
import {
|
||||||
import { prisma } from '../../lib/prisma.ts';
|
EmbedBuilder,
|
||||||
import emoji from '../../../assets/emoji.json' assert { type: "json" };
|
userMention,
|
||||||
|
MessageFlags,
|
||||||
|
SlashCommandBuilder,
|
||||||
|
} from "discord.js";
|
||||||
|
import { prisma } from "../../lib/prisma.ts";
|
||||||
|
import emoji from "../../../assets/emoji.json" assert { type: "json" };
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
data: new SlashCommandBuilder()
|
data: new SlashCommandBuilder()
|
||||||
.setName('whitelist')
|
.setName("whitelist")
|
||||||
.setDescription('Interact with the whitelist')
|
.setDescription("Interact with the whitelist")
|
||||||
.addSubcommand(subcommand => subcommand
|
.addSubcommand((subcommand) =>
|
||||||
.setName('add')
|
subcommand
|
||||||
.setDescription('Add a user on the whitelist')
|
.setName("add")
|
||||||
.addUserOption(option =>
|
.setDescription("Add a user on the whitelist")
|
||||||
option.setName('target')
|
.addUserOption((option) =>
|
||||||
.setDescription('The user who will be added to the whitelist')
|
option
|
||||||
.setRequired(true)
|
.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
|
.addSubcommand((subcommand) =>
|
||||||
.setName('delete')
|
subcommand.setName("list").setDescription("Show the whitelist"),
|
||||||
.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) {
|
async execute(interaction: CommandInteraction) {
|
||||||
const subcommand = interaction.options.getSubcommand();
|
const subcommand = interaction.options.getSubcommand();
|
||||||
|
|
@ -34,14 +42,16 @@ export default {
|
||||||
try {
|
try {
|
||||||
userData = await prisma.user.findUnique({
|
userData = await prisma.user.findUnique({
|
||||||
where: {
|
where: {
|
||||||
id: interaction.user.id
|
id: interaction.user.id,
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error(`\t⚠️ | Whitelist => Cannot get the database connection!\n\t\t(${err}).`);
|
console.error(
|
||||||
|
`\t⚠️ | Whitelist => Cannot get the database connection!\n\t\t(${err}).`,
|
||||||
|
);
|
||||||
await interaction.reply({
|
await interaction.reply({
|
||||||
content: `${emoji.answer.error} | Cannot connect to the database`,
|
content: `${emoji.answer.error} | Cannot connect to the database`,
|
||||||
flags: MessageFlags.Ephemeral
|
flags: MessageFlags.Ephemeral,
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -49,24 +59,26 @@ export default {
|
||||||
try {
|
try {
|
||||||
guildData = await prisma.guild.findUnique({
|
guildData = await prisma.guild.findUnique({
|
||||||
where: {
|
where: {
|
||||||
id: interaction.guild.id
|
id: interaction.guild.id,
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error(`\t⚠️ | Cannot get the database connection!\n\t\t(${err}).`);
|
console.error(
|
||||||
|
`\t⚠️ | Cannot get the database connection!\n\t\t(${err}).`,
|
||||||
|
);
|
||||||
await interaction.reply({
|
await interaction.reply({
|
||||||
content: `${emoji.answer.error} | Cannot connect to the database`,
|
content: `${emoji.answer.error} | Cannot connect to the database`,
|
||||||
flags: MessageFlags.Ephemeral
|
flags: MessageFlags.Ephemeral,
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const target: GuildMember = interaction.options.getUser('target')
|
const target: GuildMember = interaction.options.getUser("target");
|
||||||
switch (subcommand) {
|
switch (subcommand) {
|
||||||
case 'add':
|
case "add":
|
||||||
if (!userData.isOwner) {
|
if (!userData.isOwner) {
|
||||||
await interaction.reply({
|
await interaction.reply({
|
||||||
content: `${emoji.answer.no} | This command is only for owner`,
|
content: `${emoji.answer.no} | This command is only for owner`,
|
||||||
flags: MessageFlags.Ephemeral
|
flags: MessageFlags.Ephemeral,
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -75,54 +87,56 @@ export default {
|
||||||
where: {
|
where: {
|
||||||
userId_guildId: {
|
userId_guildId: {
|
||||||
userId: target.id,
|
userId: target.id,
|
||||||
guildId: interaction.guild.id
|
guildId: interaction.guild.id,
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
update: {
|
update: {
|
||||||
isWlUser: true
|
isWlUser: true,
|
||||||
},
|
},
|
||||||
create: {
|
create: {
|
||||||
userId: target.id,
|
userId: target.id,
|
||||||
guildId: interaction.guild.id,
|
guildId: interaction.guild.id,
|
||||||
isWlUser: true
|
isWlUser: true,
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
await prisma.guild.update({
|
await prisma.guild.update({
|
||||||
where: {
|
where: {
|
||||||
id: interaction.guild.id
|
id: interaction.guild.id,
|
||||||
},
|
},
|
||||||
data: {
|
data: {
|
||||||
WlUsers: {
|
WlUsers: {
|
||||||
connect: {
|
connect: {
|
||||||
id: target.id
|
id: target.id,
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error(`⚠️ | Error when adding ${target.username} to the whitelist\n\t${err}`);
|
console.error(
|
||||||
|
`⚠️ | Error when adding ${target.username} to the whitelist\n\t${err}`,
|
||||||
|
);
|
||||||
await interaction.reply({
|
await interaction.reply({
|
||||||
content: `${emoji.answer.error} | Error when adding ${target.username} to the whitelist`,
|
content: `${emoji.answer.error} | Error when adding ${target.username} to the whitelist`,
|
||||||
flags: MessageFlags.Ephemeral
|
flags: MessageFlags.Ephemeral,
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
await interaction.reply({
|
await interaction.reply({
|
||||||
content: `${emoji.answer.yes} | ${target.username} has been added to the whitelist`,
|
content: `${emoji.answer.yes} | ${target.username} has been added to the whitelist`,
|
||||||
flags: MessageFlags.Ephemeral
|
flags: MessageFlags.Ephemeral,
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
case 'delete':
|
case "delete":
|
||||||
if (!userData.isOwner) {
|
if (!userData.isOwner) {
|
||||||
await interaction.reply({
|
await interaction.reply({
|
||||||
content: `${emoji.answer.no} | This command is only for owner`,
|
content: `${emoji.answer.no} | This command is only for owner`,
|
||||||
flags: MessageFlags.Ephemeral
|
flags: MessageFlags.Ephemeral,
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
} else if (interaction.user.id === target.id) {
|
} else if (interaction.user.id === target.id) {
|
||||||
await interaction.reply({
|
await interaction.reply({
|
||||||
content: `${emoji.answer.no} | You cannot removing yourself from the whitelist`,
|
content: `${emoji.answer.no} | You cannot removing yourself from the whitelist`,
|
||||||
flags: MessageFlags.Ephemeral
|
flags: MessageFlags.Ephemeral,
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -131,65 +145,67 @@ export default {
|
||||||
where: {
|
where: {
|
||||||
userId_guildId: {
|
userId_guildId: {
|
||||||
userId: target.id,
|
userId: target.id,
|
||||||
guildId: interaction.guild.id
|
guildId: interaction.guild.id,
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
update: {
|
update: {
|
||||||
isWlUser: false
|
isWlUser: false,
|
||||||
},
|
},
|
||||||
create: {
|
create: {
|
||||||
userId: target.id,
|
userId: target.id,
|
||||||
guildId: interaction.guild.id,
|
guildId: interaction.guild.id,
|
||||||
isWlUser: false
|
isWlUser: false,
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
await prisma.guild.update({
|
await prisma.guild.update({
|
||||||
where: {
|
where: {
|
||||||
id: interaction.guild.id
|
id: interaction.guild.id,
|
||||||
},
|
},
|
||||||
data: {
|
data: {
|
||||||
WlUsers: {
|
WlUsers: {
|
||||||
disconnect: {
|
disconnect: {
|
||||||
id: target.id
|
id: target.id,
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error(`⚠️ | Error when removing ${target.username} to the username\n\t${err}`);
|
console.error(
|
||||||
|
`⚠️ | Error when removing ${target.username} to the username\n\t${err}`,
|
||||||
|
);
|
||||||
await interaction.reply({
|
await interaction.reply({
|
||||||
content: `${emoji.answer.error} | Cannot remove ${target.username} from the whitelist`,
|
content: `${emoji.answer.error} | Cannot remove ${target.username} from the whitelist`,
|
||||||
flags: MessageFlags.Ephemeral
|
flags: MessageFlags.Ephemeral,
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
await interaction.reply({
|
await interaction.reply({
|
||||||
content: `${emoji.answer.yes} | ${target.username} has been removing to the whitelist`,
|
content: `${emoji.answer.yes} | ${target.username} has been removing to the whitelist`,
|
||||||
flags: MessageFlags.Ephemeral
|
flags: MessageFlags.Ephemeral,
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
case 'list':
|
case "list":
|
||||||
if (!userData.isOwner) {
|
if (!userData.isOwner) {
|
||||||
await interaction.reply({
|
await interaction.reply({
|
||||||
content: `${emoji.answer.no} | This command is only for owner`,
|
content: `${emoji.answer.no} | This command is only for owner`,
|
||||||
flags: MessageFlags.Ephemeral
|
flags: MessageFlags.Ephemeral,
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
const guild = await prisma.guild.findUnique({
|
const guild = await prisma.guild.findUnique({
|
||||||
where: {
|
where: {
|
||||||
id: interaction.guild.id
|
id: interaction.guild.id,
|
||||||
},
|
},
|
||||||
include: {
|
include: {
|
||||||
WlUsers: true
|
WlUsers: true,
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
if (!guild || guild.WlUsers.length === 0) {
|
if (!guild || guild.WlUsers.length === 0) {
|
||||||
await interaction.reply({
|
await interaction.reply({
|
||||||
content: `${emoji.answer.error} | There is no whitelisted user.`,
|
content: `${emoji.answer.error} | There is no whitelisted user.`,
|
||||||
flags: MessageFlags.Ephemeral
|
flags: MessageFlags.Ephemeral,
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
@ -203,31 +219,31 @@ export default {
|
||||||
console.warn(`⚠️ | ${whitelist.id} : ${err}`);
|
console.warn(`⚠️ | ${whitelist.id} : ${err}`);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
})
|
}),
|
||||||
);
|
);
|
||||||
|
|
||||||
const toSend: EmbedBuilder = new EmbedBuilder()
|
const toSend: EmbedBuilder = new EmbedBuilder()
|
||||||
.setTitle(`🗞️ | Whitelist`)
|
.setTitle(`🗞️ | Whitelist`)
|
||||||
.setColor(guildData.color)
|
.setColor(guildData.color)
|
||||||
.setFooter({
|
.setFooter({
|
||||||
text: guildData.footer
|
text: guildData.footer,
|
||||||
})
|
})
|
||||||
.setDescription(WlUsers.filter(Boolean).join(''))
|
.setDescription(WlUsers.filter(Boolean).join(""));
|
||||||
await interaction.reply({
|
await interaction.reply({
|
||||||
embeds: [
|
embeds: [toSend],
|
||||||
toSend
|
flags: MessageFlags.Ephemeral,
|
||||||
],
|
|
||||||
flags: MessageFlags.Ephemeral
|
|
||||||
});
|
});
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error(`⚠️ | Whitelist => error when fetching infromation from the database: ${err}`);
|
console.error(
|
||||||
|
`⚠️ | Whitelist => error when fetching infromation from the database: ${err}`,
|
||||||
|
);
|
||||||
await interaction.reply({
|
await interaction.reply({
|
||||||
content: `${emoji.answer.error} | Cannot fetch the infromation of the database.`,
|
content: `${emoji.answer.error} | Cannot fetch the infromation of the database.`,
|
||||||
flags: MessageFlags.Ephemeral
|
flags: MessageFlags.Ephemeral,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
}
|
};
|
||||||
|
|
|
||||||
|
|
@ -1,30 +1,40 @@
|
||||||
import { MessageFlags, ChatInputCommandInteraction, CategoryChannel, ChannelType, PermissionsBitField, SlashCommandBuilder } from 'discord.js';
|
import {
|
||||||
import emoji from '../../../assets/emoji.json' assert { type: "json" };
|
MessageFlags,
|
||||||
import { prisma } from '../../lib/prisma.ts';
|
ChatInputCommandInteraction,
|
||||||
|
CategoryChannel,
|
||||||
|
ChannelType,
|
||||||
|
PermissionsBitField,
|
||||||
|
SlashCommandBuilder,
|
||||||
|
} from "discord.js";
|
||||||
|
import emoji from "../../../assets/emoji.json" assert { type: "json" };
|
||||||
|
import { prisma } from "../../lib/prisma.ts";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
data: new SlashCommandBuilder()
|
data: new SlashCommandBuilder()
|
||||||
.setName('deletecat')
|
.setName("deletecat")
|
||||||
.setDescription('Delete the categorie given in parameter')
|
.setDescription("Delete the categorie given in parameter")
|
||||||
.addChannelOption(opt => opt
|
.addChannelOption((opt) =>
|
||||||
.setName('category')
|
opt
|
||||||
.setDescription('Choose the categorie you want to delete')
|
.setName("category")
|
||||||
|
.setDescription("Choose the categorie you want to delete")
|
||||||
.setRequired(true)
|
.setRequired(true)
|
||||||
.addChannelTypes(ChannelType.GuildCategory)
|
.addChannelTypes(ChannelType.GuildCategory),
|
||||||
),
|
),
|
||||||
async execute(interaction: CommandInteraction) {
|
async execute(interaction: CommandInteraction) {
|
||||||
let userData: User;
|
let userData: User;
|
||||||
try {
|
try {
|
||||||
userData = await prisma.user.findUnique({
|
userData = await prisma.user.findUnique({
|
||||||
where: {
|
where: {
|
||||||
id: interaction.user.id
|
id: interaction.user.id,
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error(`\t⚠️ | Whitelist => Cannot get the database connection!\n\t\t(${err}).`);
|
console.error(
|
||||||
|
`\t⚠️ | Whitelist => Cannot get the database connection!\n\t\t(${err}).`,
|
||||||
|
);
|
||||||
await interaction.reply({
|
await interaction.reply({
|
||||||
content: `${emoji.answer.error} | Cannot connect to the database`,
|
content: `${emoji.answer.error} | Cannot connect to the database`,
|
||||||
flags: MessageFlags.Ephemeral
|
flags: MessageFlags.Ephemeral,
|
||||||
});
|
});
|
||||||
console.error(`Cannot connect to the database:\n\t${err}`);
|
console.error(`Cannot connect to the database:\n\t${err}`);
|
||||||
return;
|
return;
|
||||||
|
|
@ -32,27 +42,34 @@ export default {
|
||||||
if (!userData.isOwner) {
|
if (!userData.isOwner) {
|
||||||
await interaction.reply({
|
await interaction.reply({
|
||||||
content: `${emoji.answer.no} | This command is only for owner`,
|
content: `${emoji.answer.no} | This command is only for owner`,
|
||||||
flags: MessageFlags.Ephemeral
|
flags: MessageFlags.Ephemeral,
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const category: GuildCategory = interaction.options.getChannel('category', true);
|
const category: GuildCategory = interaction.options.getChannel(
|
||||||
|
"category",
|
||||||
|
true,
|
||||||
|
);
|
||||||
try {
|
try {
|
||||||
for (const channel of category.children.cache.values()) {
|
for (const channel of category.children.cache.values()) {
|
||||||
await channel.delete(`Delete cat of ${channel.name} (by ${interaction.username})`);
|
await channel.delete(
|
||||||
|
`Delete cat of ${channel.name} (by ${interaction.username})`,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
await category.delete(`Delete cat of ${category.name} (by ${interaction.username})`);
|
await category.delete(
|
||||||
|
`Delete cat of ${category.name} (by ${interaction.username})`,
|
||||||
|
);
|
||||||
await interaction.reply({
|
await interaction.reply({
|
||||||
content: `${emoji.answer.yes} | Suppressed the ${category.name}`,
|
content: `${emoji.answer.yes} | Suppressed the ${category.name}`,
|
||||||
flags: MessageFlags.Ephemeral
|
flags: MessageFlags.Ephemeral,
|
||||||
});
|
});
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
await interaction.reply({
|
await interaction.reply({
|
||||||
content: `${emoji.answer.error} | Cannot suppress the category's channels`,
|
content: `${emoji.answer.error} | Cannot suppress the category's channels`,
|
||||||
flags: MessageFlags.Ephemeral
|
flags: MessageFlags.Ephemeral,
|
||||||
});
|
});
|
||||||
console.error(`Cannot suppress the category's channel:\n\t${err}`);
|
console.error(`Cannot suppress the category's channel:\n\t${err}`);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
}
|
};
|
||||||
|
|
|
||||||
|
|
@ -1,23 +1,29 @@
|
||||||
import { prisma } from '../../lib/prisma.ts';
|
import { prisma } from "../../lib/prisma.ts";
|
||||||
import { userMention, roleMention, MessageFlags, SlashCommandBuilder, EmbedBuilder } from 'discord.js';
|
import {
|
||||||
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 {
|
function getGuildRoles(guild: Guild): string {
|
||||||
const roles = guild.roles.cache
|
const roles = guild.roles.cache
|
||||||
.filter(role => role.id !== guild.id)
|
.filter((role) => role.id !== guild.id)
|
||||||
.sort((a, b) => b.position - a.position)
|
.sort((a, b) => b.position - a.position)
|
||||||
.map(role => roleMention(role.id));
|
.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 {
|
function getUserRoles(target: GuildMember): string {
|
||||||
const roles = target.roles.cache
|
const roles = target.roles.cache
|
||||||
.filter(role => role.id !== target.guild.id)
|
.filter((role) => role.id !== target.guild.id)
|
||||||
.sort((a, b) => b.position - a.position)
|
.sort((a, b) => b.position - a.position)
|
||||||
.map(role => `${roleMention(role.id)}`);
|
.map((role) => `${roleMention(role.id)}`);
|
||||||
|
|
||||||
return roles.length > 0 ? roles.join(', ') : 'No role';
|
return roles.length > 0 ? roles.join(", ") : "No role";
|
||||||
}
|
}
|
||||||
|
|
||||||
function getUserBadges(userData: {
|
function getUserBadges(userData: {
|
||||||
|
|
@ -28,69 +34,74 @@ function getUserBadges(userData: {
|
||||||
}): string {
|
}): string {
|
||||||
const badges: string[] = [];
|
const badges: string[] = [];
|
||||||
|
|
||||||
if (userData.isDev)
|
if (userData.isDev) badges.push(`${emoji.badge.dev}`);
|
||||||
badges.push(`${emoji.badge.dev}`);
|
if (userData.isEnium) badges.push(`${emoji.badge.enium}`);
|
||||||
if (userData.isEnium)
|
if (userData.isPwn) badges.push(`${emoji.badge.dash}`);
|
||||||
badges.push(`${emoji.badge.enium}`);
|
if (userData.isBuyer) badges.push(`${emoji.badge.buyer}`);
|
||||||
if (userData.isPwn)
|
if (userData.isOwner) badges.push(`${emoji.badge.owner}`);
|
||||||
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 {
|
export default {
|
||||||
data: new SlashCommandBuilder()
|
data: new SlashCommandBuilder()
|
||||||
.setName('info')
|
.setName("info")
|
||||||
.setDescription('Show the infromation of one of these categories (user, server, bot)')
|
.setDescription(
|
||||||
.addSubcommand(subcommand => subcommand
|
"Show the infromation of one of these categories (user, server, bot)",
|
||||||
.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("user")
|
||||||
|
.setDescription("Show the infromation of one user")
|
||||||
|
.addUserOption((option) =>
|
||||||
|
option
|
||||||
|
.setName("target")
|
||||||
|
.setDescription("The user to show the infromation"),
|
||||||
|
),
|
||||||
)
|
)
|
||||||
.addSubcommand(subcommand => subcommand
|
.addSubcommand((subcommand) =>
|
||||||
.setName('server')
|
subcommand
|
||||||
.setDescription('Show the infromation of the server')
|
.setName("server")
|
||||||
|
.setDescription("Show the infromation of the server"),
|
||||||
),
|
),
|
||||||
async execute(interaction: CommandInteraction) {
|
async execute(interaction: CommandInteraction) {
|
||||||
let guildData: Guild;
|
let guildData: Guild;
|
||||||
try {
|
try {
|
||||||
guildData = await prisma.guild.findUnique({
|
guildData = await prisma.guild.findUnique({
|
||||||
where: {
|
where: {
|
||||||
id: interaction.guild.id
|
id: interaction.guild.id,
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error(`\t⚠️ | Cannot get the database connection!\n\t\t(${err}).`);
|
console.error(
|
||||||
|
`\t⚠️ | Cannot get the database connection!\n\t\t(${err}).`,
|
||||||
|
);
|
||||||
await interaction.reply({
|
await interaction.reply({
|
||||||
content: `${emoji.answer.error} | Cannot connect to the database`,
|
content: `${emoji.answer.error} | Cannot connect to the database`,
|
||||||
flags: MessageFlags.Ephemeral
|
flags: MessageFlags.Ephemeral,
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const subcommand: string = interaction.options.getSubcommand();
|
const subcommand: string = interaction.options.getSubcommand();
|
||||||
switch (subcommand) {
|
switch (subcommand) {
|
||||||
case 'user':
|
case "user":
|
||||||
const targetGlobal: GuildMember = interaction.options.getUser('target') || interaction.user;
|
const targetGlobal: GuildMember =
|
||||||
|
interaction.options.getUser("target") || interaction.user;
|
||||||
await targetGlobal.fetch();
|
await targetGlobal.fetch();
|
||||||
let userData: User;
|
let userData: User;
|
||||||
try {
|
try {
|
||||||
userData = await prisma.user.findUnique({
|
userData = await prisma.user.findUnique({
|
||||||
where: {
|
where: {
|
||||||
id: targetGlobal.id
|
id: targetGlobal.id,
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error(`\t⚠️ | Cannot get the database connection!\n\t\t(${err}).`);
|
console.error(
|
||||||
|
`\t⚠️ | Cannot get the database connection!\n\t\t(${err}).`,
|
||||||
|
);
|
||||||
await interaction.reply({
|
await interaction.reply({
|
||||||
content: `${emoji.answer.error} | Cannot connect to the database`,
|
content: `${emoji.answer.error} | Cannot connect to the database`,
|
||||||
flags: MessageFlags.Ephemeral
|
flags: MessageFlags.Ephemeral,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
let targetServer: GuildMember;
|
let targetServer: GuildMember;
|
||||||
|
|
@ -101,22 +112,25 @@ export default {
|
||||||
console.error(`\t⚠️ | Cannot get the targetServer!\n\t\t(${err}).`);
|
console.error(`\t⚠️ | Cannot get the targetServer!\n\t\t(${err}).`);
|
||||||
await interaction.reply({
|
await interaction.reply({
|
||||||
content: `${emoji.answer.error} | Cannot get the guild profile of the user`,
|
content: `${emoji.answer.error} | Cannot get the guild profile of the user`,
|
||||||
flags: MessageFlags.Ephemeral
|
flags: MessageFlags.Ephemeral,
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const userResult: EmbedBuilder = new EmbedBuilder()
|
const userResult: EmbedBuilder = new EmbedBuilder()
|
||||||
.setTitle(`${targetGlobal.displayName}'s information`)
|
.setTitle(`${targetGlobal.displayName}'s information`)
|
||||||
.setColor(`${guildData.color}`)
|
.setColor(`${guildData.color}`)
|
||||||
.setThumbnail(`${targetGlobal.displayAvatarURL({dynamic: true, size: 2048})}`)
|
.setThumbnail(
|
||||||
|
`${targetGlobal.displayAvatarURL({ dynamic: true, size: 2048 })}`,
|
||||||
|
)
|
||||||
.setFooter({
|
.setFooter({
|
||||||
text: guildData.footer
|
text: guildData.footer,
|
||||||
})
|
})
|
||||||
.setImage(targetGlobal.bannerURL({
|
.setImage(
|
||||||
|
targetGlobal.bannerURL({
|
||||||
size: 2048,
|
size: 2048,
|
||||||
dynamic: true
|
dynamic: true,
|
||||||
}))
|
}),
|
||||||
.setDescription(`
|
).setDescription(`
|
||||||
**👤 | Username:**
|
**👤 | Username:**
|
||||||
${targetGlobal.username}
|
${targetGlobal.username}
|
||||||
**🆔 | ID:**
|
**🆔 | ID:**
|
||||||
|
|
@ -131,24 +145,22 @@ export default {
|
||||||
<t:${parseInt(targetGlobal.createdTimestamp / 1000)}:f> (<t:${parseInt(targetGlobal.createdTimestamp / 1000)}:R>)
|
<t:${parseInt(targetGlobal.createdTimestamp / 1000)}:f> (<t:${parseInt(targetGlobal.createdTimestamp / 1000)}:R>)
|
||||||
**🛬 | Server Join:**
|
**🛬 | Server Join:**
|
||||||
<t:${parseInt(targetServer.joinedTimestamp / 1000)}:f> (<t:${parseInt(targetServer.joinedTimestamp / 1000)}:R>)
|
<t:${parseInt(targetServer.joinedTimestamp / 1000)}:f> (<t:${parseInt(targetServer.joinedTimestamp / 1000)}:R>)
|
||||||
`)
|
`);
|
||||||
await interaction.reply({
|
await interaction.reply({
|
||||||
embeds: [
|
embeds: [userResult],
|
||||||
userResult
|
flags: MessageFlags.Ephemeral,
|
||||||
],
|
|
||||||
flags: MessageFlags.Ephemeral
|
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
case 'server':
|
case "server":
|
||||||
const guild: Guild = interaction.guild;
|
const guild: Guild = interaction.guild;
|
||||||
const serverResult: EmbedBuilder = new EmbedBuilder()
|
const serverResult: EmbedBuilder = new EmbedBuilder()
|
||||||
.setTitle(`${guild.name} Informations`)
|
.setTitle(`${guild.name} Informations`)
|
||||||
.setColor(guildData.color)
|
.setColor(guildData.color)
|
||||||
.setThumbnail(guild.iconURL({dynamic: true, size: 2048}))
|
.setThumbnail(guild.iconURL({ dynamic: true, size: 2048 }))
|
||||||
.setFooter({
|
.setFooter({
|
||||||
text: guildData.footer
|
text: guildData.footer,
|
||||||
})
|
})
|
||||||
.setImage(guild.bannerURL({dynamic: true, size: 2048}))
|
.setImage(guild.bannerURL({ dynamic: true, size: 2048 }))
|
||||||
.setDescription(`
|
.setDescription(`
|
||||||
**🆔 | ID:**
|
**🆔 | ID:**
|
||||||
${guild.id}
|
${guild.id}
|
||||||
|
|
@ -173,13 +185,11 @@ export default {
|
||||||
**🏅 | Roles:**
|
**🏅 | Roles:**
|
||||||
There is ${guild.roles.cache.size - 1} on __${guild.name}__
|
There is ${guild.roles.cache.size - 1} on __${guild.name}__
|
||||||
${getGuildRoles(guild)}
|
${getGuildRoles(guild)}
|
||||||
`)
|
`);
|
||||||
await interaction.reply({
|
await interaction.reply({
|
||||||
embeds: [
|
embeds: [serverResult],
|
||||||
serverResult
|
flags: MessageFlags.Ephemeral,
|
||||||
],
|
|
||||||
flags: MessageFlags.Ephemeral
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
}
|
};
|
||||||
|
|
|
||||||
|
|
@ -1,19 +1,19 @@
|
||||||
import { MessageFlags, SlashCommandBuilder } from 'discord.js';
|
import { MessageFlags, SlashCommandBuilder } from "discord.js";
|
||||||
import emoji from '../../../assets/emoji.json' assert { type: "json" };
|
import emoji from "../../../assets/emoji.json" assert { type: "json" };
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
data: new SlashCommandBuilder()
|
data: new SlashCommandBuilder()
|
||||||
.setName('ping')
|
.setName("ping")
|
||||||
.setDescription('Show your latency'),
|
.setDescription("Show your latency"),
|
||||||
async execute(interaction: CommandInteraction) {
|
async execute(interaction: CommandInteraction) {
|
||||||
const time: number = Date.now();
|
const time: number = Date.now();
|
||||||
await interaction.reply({
|
await interaction.reply({
|
||||||
content: `${emoji.answer.loading} | Calculating your ping !`,
|
content: `${emoji.answer.loading} | Calculating your ping !`,
|
||||||
flags: MessageFlags.Ephemeral
|
flags: MessageFlags.Ephemeral,
|
||||||
});
|
});
|
||||||
|
|
||||||
await interaction.editReply({
|
await interaction.editReply({
|
||||||
content: `⏱️ | Response latency: **${Date.now() - time}**ms`
|
content: `⏱️ | Response latency: **${Date.now() - time}**ms`,
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
}
|
};
|
||||||
|
|
|
||||||
|
|
@ -1,25 +1,25 @@
|
||||||
import { Events, MessageFlags } from 'discord.js'
|
import { Events, MessageFlags } from "discord.js";
|
||||||
import { prisma } from '../../lib/prisma.ts';
|
import { prisma } from "../../lib/prisma.ts";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: Events.GuildCreate,
|
name: Events.GuildCreate,
|
||||||
async execute(guild, client) {
|
async execute(guild, client) {
|
||||||
const botData = await prisma.bot.findUnique({
|
const botData = await prisma.bot.findUnique({
|
||||||
where: {
|
where: {
|
||||||
id: 1
|
id: 1,
|
||||||
},
|
},
|
||||||
include: {
|
include: {
|
||||||
buyers: true
|
buyers: true,
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
await prisma.guild.upsert({
|
await prisma.guild.upsert({
|
||||||
where: {
|
where: {
|
||||||
id: guild.id
|
id: guild.id,
|
||||||
},
|
},
|
||||||
update: {},
|
update: {},
|
||||||
create: {
|
create: {
|
||||||
id: guild.id
|
id: guild.id,
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const members = await guild.members.fetch();
|
const members = await guild.members.fetch();
|
||||||
|
|
@ -27,29 +27,31 @@ export default {
|
||||||
for (const [memberId, member] of members) {
|
for (const [memberId, member] of members) {
|
||||||
await prisma.user.upsert({
|
await prisma.user.upsert({
|
||||||
where: {
|
where: {
|
||||||
id: memberId
|
id: memberId,
|
||||||
},
|
},
|
||||||
update: {},
|
update: {},
|
||||||
create: {
|
create: {
|
||||||
id: memberId
|
id: memberId,
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
await prisma.guildUser.upsert({
|
await prisma.guildUser.upsert({
|
||||||
where: {
|
where: {
|
||||||
userId_guildId: {
|
userId_guildId: {
|
||||||
userId: memberId,
|
userId: memberId,
|
||||||
guildId: guild.id
|
guildId: guild.id,
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
update: {},
|
update: {},
|
||||||
create: {
|
create: {
|
||||||
userId: memberId,
|
userId: memberId,
|
||||||
guildId: guild.id
|
guildId: guild.id,
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
console.log(`✅ | Guild ${guild.name} synchronisée avec ${members.size} membres.`);
|
console.log(
|
||||||
}
|
`✅ | Guild ${guild.name} synchronisée avec ${members.size} membres.`,
|
||||||
}
|
);
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import { ActivityType, PresenceUpdateStatus, Events } from 'discord.js'
|
import { ActivityType, PresenceUpdateStatus, Events } from "discord.js";
|
||||||
import { prisma } from '../../lib/prisma.ts';
|
import { prisma } from "../../lib/prisma.ts";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: Events.ClientReady,
|
name: Events.ClientReady,
|
||||||
|
|
@ -9,65 +9,71 @@ export default {
|
||||||
let botData: Bot;
|
let botData: Bot;
|
||||||
botData = await prisma.bot.findUnique({
|
botData = await prisma.bot.findUnique({
|
||||||
where: {
|
where: {
|
||||||
id: 1
|
id: 1,
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
const newStatus: string = botData.status;
|
const newStatus: string = botData.status;
|
||||||
const tmpType: string = botData.type;
|
const tmpType: string = botData.type;
|
||||||
let newType: ActivityType;
|
let newType: ActivityType;
|
||||||
switch (tmpType) {
|
switch (tmpType) {
|
||||||
case 'play':
|
case "play":
|
||||||
newType = ActivityType.Playing;
|
newType = ActivityType.Playing;
|
||||||
break;
|
break;
|
||||||
case 'listen':
|
case "listen":
|
||||||
newType = ActivityType.Listening;
|
newType = ActivityType.Listening;
|
||||||
break;
|
break;
|
||||||
case 'watch':
|
case "watch":
|
||||||
newType = ActivityType.Watching;
|
newType = ActivityType.Watching;
|
||||||
break;
|
break;
|
||||||
case 'stream':
|
case "stream":
|
||||||
newType = ActivityType.Streaming;
|
newType = ActivityType.Streaming;
|
||||||
break;
|
break;
|
||||||
case 'comptet':
|
case "comptet":
|
||||||
newType = ActivityType.Competing;
|
newType = ActivityType.Competing;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
const tmpPresence: string = botData.presence
|
const tmpPresence: string = botData.presence;
|
||||||
let newPresence: PresenceUpdateStatus;
|
let newPresence: PresenceUpdateStatus;
|
||||||
switch (tmpPresence) {
|
switch (tmpPresence) {
|
||||||
case 'online':
|
case "online":
|
||||||
newPresence = PresenceUpdateStatus.Online;
|
newPresence = PresenceUpdateStatus.Online;
|
||||||
break;
|
break;
|
||||||
case 'idle':
|
case "idle":
|
||||||
newPresence = PresenceUpdateStatus.Idle;
|
newPresence = PresenceUpdateStatus.Idle;
|
||||||
break;
|
break;
|
||||||
case 'dnd':
|
case "dnd":
|
||||||
newPresence = PresenceUpdateStatus.DoNotDisturb;
|
newPresence = PresenceUpdateStatus.DoNotDisturb;
|
||||||
break;
|
break;
|
||||||
case 'invisible':
|
case "invisible":
|
||||||
newPresence = PresenceUpdateStatus.Invisible;
|
newPresence = PresenceUpdateStatus.Invisible;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (botData.type === 'steam') {
|
if (botData.type === "steam") {
|
||||||
client.user.setPresence({
|
client.user.setPresence({
|
||||||
status: newPresence,
|
status: newPresence,
|
||||||
activities: [{
|
activities: [
|
||||||
|
{
|
||||||
name: newStatus,
|
name: newStatus,
|
||||||
type: newType,
|
type: newType,
|
||||||
url: 'https://twich.tv/EniumRaphael'
|
url: "https://twich.tv/EniumRaphael",
|
||||||
}]
|
},
|
||||||
|
],
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
client.user.setPresence({
|
client.user.setPresence({
|
||||||
status: newPresence,
|
status: newPresence,
|
||||||
activities: [{
|
activities: [
|
||||||
|
{
|
||||||
name: newStatus,
|
name: newStatus,
|
||||||
type: newType,
|
type: newType,
|
||||||
}]
|
},
|
||||||
|
],
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error(`\t⚠️ | Cannot get the database connection!\n\t\t(${err}).`);
|
console.error(
|
||||||
|
`\t⚠️ | Cannot get the database connection!\n\t\t(${err}).`,
|
||||||
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
console.log(`✅ | ${client.user.username} is now running under TTS bot`);
|
console.log(`✅ | ${client.user.username} is now running under TTS bot`);
|
||||||
|
|
|
||||||
|
|
@ -1,33 +1,34 @@
|
||||||
import { Events, MessageFlags } from 'discord.js'
|
import { Events, MessageFlags } from "discord.js";
|
||||||
import emoji from '../../../assets/emoji.json' assert { type: "json" };
|
import emoji from "../../../assets/emoji.json" assert { type: "json" };
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: Events.InteractionCreate,
|
name: Events.InteractionCreate,
|
||||||
async execute(interaction) {
|
async execute(interaction) {
|
||||||
if (!interaction.isChatInputCommand())
|
if (!interaction.isChatInputCommand()) return;
|
||||||
return;
|
|
||||||
const command = interaction.client.commands.get(interaction.commandName);
|
const command = interaction.client.commands.get(interaction.commandName);
|
||||||
if (!command) {
|
if (!command) {
|
||||||
console.error(`⚠️ | Can't execute ${interaction.commandName}`);
|
console.error(`⚠️ | Can't execute ${interaction.commandName}`);
|
||||||
await interaction.reply({
|
await interaction.reply({
|
||||||
content: `${emoji.answer.error} | Cannot execute the command ${interaction.commandName}`,
|
content: `${emoji.answer.error} | Cannot execute the command ${interaction.commandName}`,
|
||||||
flags: MessageFlags.Ephemeral
|
flags: MessageFlags.Ephemeral,
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
await command.execute(interaction);
|
await command.execute(interaction);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error(`⚠️ | Error when occured this command ${interaction.commandName}\n\t${error}`);
|
console.error(
|
||||||
|
`⚠️ | Error when occured this command ${interaction.commandName}\n\t${error}`,
|
||||||
|
);
|
||||||
if (interaction.replied || interaction.deferred) {
|
if (interaction.replied || interaction.deferred) {
|
||||||
await interaction.followUp({
|
await interaction.followUp({
|
||||||
content: `${emoji.answer.error} | ${interaction.commandName} seems have a problem, thanks report that to the support (After Print)`,
|
content: `${emoji.answer.error} | ${interaction.commandName} seems have a problem, thanks report that to the support (After Print)`,
|
||||||
flags: MessageFlags.Ephemeral
|
flags: MessageFlags.Ephemeral,
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
await interaction.reply({
|
await interaction.reply({
|
||||||
content: `${emoji.answer.error} | ${interaction.commandName} seems have a problem, thanks report that to the support (Before Print)`,
|
content: `${emoji.answer.error} | ${interaction.commandName} seems have a problem, thanks report that to the support (Before Print)`,
|
||||||
flags: MessageFlags.Ephemeral
|
flags: MessageFlags.Ephemeral,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
62
src/index.ts
62
src/index.ts
|
|
@ -1,9 +1,9 @@
|
||||||
import fs from 'node:fs'
|
import fs from "node:fs";
|
||||||
import path from 'node:path'
|
import path from "node:path";
|
||||||
import 'dotenv/config';
|
import "dotenv/config";
|
||||||
import { Client, Collection, GatewayIntentBits } from 'discord.js';
|
import { Client, Collection, GatewayIntentBits } from "discord.js";
|
||||||
import { PrismaClient } from '@prisma/client';
|
import { PrismaClient } from "@prisma/client";
|
||||||
import { deployCommands } from './internal/deploy-commands.ts';
|
import { deployCommands } from "./internal/deploy-commands.ts";
|
||||||
|
|
||||||
const prisma = new PrismaClient();
|
const prisma = new PrismaClient();
|
||||||
|
|
||||||
|
|
@ -20,21 +20,21 @@ client.login(process.env.DSC_TOKEN);
|
||||||
|
|
||||||
client.commands = new Collection();
|
client.commands = new Collection();
|
||||||
|
|
||||||
const commandFolderPath = path.join(__dirname, 'commands');
|
const commandFolderPath = path.join(__dirname, "commands");
|
||||||
const commandFolders = fs.readdirSync(commandFolderPath);
|
const commandFolders = fs.readdirSync(commandFolderPath);
|
||||||
|
|
||||||
console.log(`\n🔍 | Commands search:`)
|
console.log(`\n🔍 | Commands search:`);
|
||||||
for (const folder of commandFolders) {
|
for (const folder of commandFolders) {
|
||||||
const commandsPath = path.join(commandFolderPath, folder);
|
const commandsPath = path.join(commandFolderPath, folder);
|
||||||
const commandFiles = fs
|
const commandFiles = fs
|
||||||
.readdirSync(commandsPath)
|
.readdirSync(commandsPath)
|
||||||
.filter(file => file.endsWith('.js') || file.endsWith('.ts'));
|
.filter((file) => file.endsWith(".js") || file.endsWith(".ts"));
|
||||||
for (const file of commandFiles) {
|
for (const file of commandFiles) {
|
||||||
const fullCommandPath = path.join(commandsPath, file);
|
const fullCommandPath = path.join(commandsPath, file);
|
||||||
try {
|
try {
|
||||||
const commandModule = await import(fullCommandPath);
|
const commandModule = await import(fullCommandPath);
|
||||||
const command = commandModule.default || commandModule;
|
const command = commandModule.default || commandModule;
|
||||||
if ('data' in command && 'execute' in command) {
|
if ("data" in command && "execute" in command) {
|
||||||
client.commands.set(command.data.name, command);
|
client.commands.set(command.data.name, command);
|
||||||
console.log(`\t✅ | ${command.data.name}`);
|
console.log(`\t✅ | ${command.data.name}`);
|
||||||
}
|
}
|
||||||
|
|
@ -43,23 +43,23 @@ for (const folder of commandFolders) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
console.log('\n\n');
|
console.log("\n\n");
|
||||||
|
|
||||||
const eventFolderPath = path.join(__dirname, 'events');
|
const eventFolderPath = path.join(__dirname, "events");
|
||||||
const eventFolders = fs.readdirSync(eventFolderPath);
|
const eventFolders = fs.readdirSync(eventFolderPath);
|
||||||
|
|
||||||
console.log(`\n🔍 | Events search:`)
|
console.log(`\n🔍 | Events search:`);
|
||||||
for (const folder of eventFolders) {
|
for (const folder of eventFolders) {
|
||||||
const eventsPath = path.join(eventFolderPath, folder);
|
const eventsPath = path.join(eventFolderPath, folder);
|
||||||
const eventFiles = fs
|
const eventFiles = fs
|
||||||
.readdirSync(eventsPath)
|
.readdirSync(eventsPath)
|
||||||
.filter(file => file.endsWith('.js') || file.endsWith('.ts'));
|
.filter((file) => file.endsWith(".js") || file.endsWith(".ts"));
|
||||||
for (const file of eventFiles) {
|
for (const file of eventFiles) {
|
||||||
const fullEventPath = path.join(eventsPath, file);
|
const fullEventPath = path.join(eventsPath, file);
|
||||||
try {
|
try {
|
||||||
const eventModule = await import(fullEventPath);
|
const eventModule = await import(fullEventPath);
|
||||||
const event = eventModule.default || eventModule;
|
const event = eventModule.default || eventModule;
|
||||||
if ('name' in event && 'execute' in event) {
|
if ("name" in event && "execute" in event) {
|
||||||
if (event.once) {
|
if (event.once) {
|
||||||
client.once(event.name, (...args) => event.execute(...args));
|
client.once(event.name, (...args) => event.execute(...args));
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -72,27 +72,27 @@ for (const folder of eventFolders) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
console.log('\n\n');
|
console.log("\n\n");
|
||||||
|
|
||||||
client.once('ready', async () => {
|
client.once("ready", async () => {
|
||||||
console.log(`🤖 | Connecté en tant que ${client.user?.tag}`);
|
console.log(`🤖 | Connecté en tant que ${client.user?.tag}`);
|
||||||
|
|
||||||
await prisma.bot.upsert({
|
await prisma.bot.upsert({
|
||||||
where: {
|
where: {
|
||||||
id: 1
|
id: 1,
|
||||||
},
|
},
|
||||||
update: {},
|
update: {},
|
||||||
create: {}
|
create: {},
|
||||||
});
|
});
|
||||||
for (const [guildId, guild] of client.guilds.cache) {
|
for (const [guildId, guild] of client.guilds.cache) {
|
||||||
await prisma.guild.upsert({
|
await prisma.guild.upsert({
|
||||||
where: {
|
where: {
|
||||||
id: guildId
|
id: guildId,
|
||||||
},
|
},
|
||||||
update: {},
|
update: {},
|
||||||
create: {
|
create: {
|
||||||
id: guildId
|
id: guildId,
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const members = await guild.members.fetch();
|
const members = await guild.members.fetch();
|
||||||
|
|
@ -100,29 +100,31 @@ client.once('ready', async () => {
|
||||||
for (const [memberId, member] of members) {
|
for (const [memberId, member] of members) {
|
||||||
await prisma.user.upsert({
|
await prisma.user.upsert({
|
||||||
where: {
|
where: {
|
||||||
id: memberId
|
id: memberId,
|
||||||
},
|
},
|
||||||
update: {},
|
update: {},
|
||||||
create: {
|
create: {
|
||||||
id: memberId
|
id: memberId,
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
await prisma.guildUser.upsert({
|
await prisma.guildUser.upsert({
|
||||||
where: {
|
where: {
|
||||||
userId_guildId: {
|
userId_guildId: {
|
||||||
userId: memberId,
|
userId: memberId,
|
||||||
guildId: guildId
|
guildId: guildId,
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
update: {},
|
update: {},
|
||||||
create: {
|
create: {
|
||||||
userId: memberId,
|
userId: memberId,
|
||||||
guildId: guildId
|
guildId: guildId,
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log(`✅ | Guild ${guild.name} synchronisée avec ${members.size} membres.`);
|
console.log(
|
||||||
|
`✅ | Guild ${guild.name} synchronisée avec ${members.size} membres.`,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -1,34 +1,42 @@
|
||||||
import { REST, Routes } from 'discord.js'
|
import { REST, Routes } from "discord.js";
|
||||||
import { pathToFileURL } from 'node:url';
|
import { pathToFileURL } from "node:url";
|
||||||
import { Client, Collection, Events, GatewayIntentBits, MessageFlags } from 'discord.js';
|
import {
|
||||||
import 'dotenv/config';
|
Client,
|
||||||
import fs from 'node:fs'
|
Collection,
|
||||||
import path from 'node:path'
|
Events,
|
||||||
|
GatewayIntentBits,
|
||||||
|
MessageFlags,
|
||||||
|
} from "discord.js";
|
||||||
|
import "dotenv/config";
|
||||||
|
import fs from "node:fs";
|
||||||
|
import path from "node:path";
|
||||||
|
|
||||||
const client = new Client({
|
const client = new Client({
|
||||||
intents: [
|
intents: [GatewayIntentBits.Guilds],
|
||||||
GatewayIntentBits.Guilds
|
|
||||||
]
|
|
||||||
});
|
});
|
||||||
|
|
||||||
client.commands = new Collection();
|
client.commands = new Collection();
|
||||||
|
|
||||||
const commands = [];
|
const commands = [];
|
||||||
|
|
||||||
const foldersPath = path.join(__dirname, '../commands');
|
const foldersPath = path.join(__dirname, "../commands");
|
||||||
const commandFolders = fs.readdirSync(foldersPath);
|
const commandFolders = fs.readdirSync(foldersPath);
|
||||||
|
|
||||||
for (const folder of commandFolders) {
|
for (const folder of commandFolders) {
|
||||||
const commandsPath = path.join(foldersPath, folder);
|
const commandsPath = path.join(foldersPath, folder);
|
||||||
const commandFiles = fs.readdirSync(commandsPath).filter(file => file.endsWith('.ts') || file.endsWith('.js'));
|
const commandFiles = fs
|
||||||
|
.readdirSync(commandsPath)
|
||||||
|
.filter((file) => file.endsWith(".ts") || file.endsWith(".js"));
|
||||||
for (const file of commandFiles) {
|
for (const file of commandFiles) {
|
||||||
const filesPath = path.join(commandsPath, file);
|
const filesPath = path.join(commandsPath, file);
|
||||||
const commandModule = await import(filesPath);
|
const commandModule = await import(filesPath);
|
||||||
const command = commandModule.default || commandModule;
|
const command = commandModule.default || commandModule;
|
||||||
if ('data' in command && 'execute' in command) {
|
if ("data" in command && "execute" in command) {
|
||||||
commands.push(command.data.toJSON());
|
commands.push(command.data.toJSON());
|
||||||
} else {
|
} else {
|
||||||
console.log(`⚠️ | A Command is missing a required "data" or "execute" property.`);
|
console.log(
|
||||||
|
`⚠️ | A Command is missing a required "data" or "execute" property.`,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -41,7 +49,7 @@ const rest = new REST().setToken(process.env.DSC_TOKEN);
|
||||||
const data = await rest.put(
|
const data = await rest.put(
|
||||||
Routes.applicationCommands(process.env.CLIENT_ID),
|
Routes.applicationCommands(process.env.CLIENT_ID),
|
||||||
{
|
{
|
||||||
body: commands
|
body: commands,
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
console.log(`✅ | ${data.length} is now reloaded`);
|
console.log(`✅ | ${data.length} is now reloaded`);
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,3 @@
|
||||||
import { PrismaClient } from '@prisma/client';
|
import { PrismaClient } from "@prisma/client";
|
||||||
|
|
||||||
export const prisma = new PrismaClient();
|
export const prisma = new PrismaClient();
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue