Files
LazyBot/app/bot.js
T
2026-01-16 00:25:06 +01:00

121 lines
3.2 KiB
JavaScript

const loadSlashCommands = require('./slash_commands.js');
loadSlashCommands();
const db = require("./db");
const { Client, GatewayIntentBits, ActivityType, Events } = require("discord.js");
const client = new Client({ intents: Object.values(GatewayIntentBits) });
client.once("clientReady", () => {
console.log(`Bot connecté en tant que ${client.user.tag}`);
client.user.setActivity("LazyBot à votre service !", { type: ActivityType.Custom });
});
client.on(Events.InteractionCreate, async interaction => {
if (!interaction.isChatInputCommand()) return;
if (interaction.commandName === 'ping') {
await interaction.reply('Pong!');
}
});
client.on(Events.GuildMemberAdd, member => {
db.get(
"SELECT enabled, channel_id, message FROM welcome_config WHERE guild_id = ?",
[member.guild.id],
(err, row) => {
if (err || !row || !row.enabled) return;
let msg = row.message;
msg = msg
.replace("{user}", member.user.username)
.replace("{mention}", `<@${member.id}>`)
.replace("{server}", member.guild.name);
const channel = member.guild.channels.cache.get(row.channel_id);
if (channel) {
channel.send(msg);
}
}
);
db.get(
"SELECT enabled, role_id FROM autorole_newuser_config WHERE guild_id = ?",
[member.guild.id],
(err, row) => {
if (err || !row || !row.enabled) return;
const role = member.guild.roles.cache.get(row.role_id);
if (role) {
member.roles.add(role);
}
}
);
});
client.on(Events.GuildMemberRemove, member => {
db.get(
"SELECT enabled, channel_id, message FROM goodbye_config WHERE guild_id = ?",
[member.guild.id],
(err, row) => {
if (err || !row || !row.enabled) return;
let msg = row.message;
msg = msg
.replace("{user}", member.user.username)
.replace("{server}", member.guild.name);
const channel = member.guild.channels.cache.get(row.channel_id);
if (channel) {
channel.send(msg);
}
}
);
});
client.on(Events.VoiceStateUpdate, (oldState, newState) => {
if (newState.member.user.bot) return;
const guildId = newState.guild.id;
db.get(
"SELECT enabled, role_id, exclude_channel_ids FROM autorole_vocal_config WHERE guild_id = ?",
[guildId],
(err, row) => {
if (err || !row || !row.enabled) return;
let excludeChannelIds = [];
try {
excludeChannelIds = row.exclude_channel_ids
? JSON.parse(row.exclude_channel_ids)
: [];
} catch (err) {
console.error("Erreur parsing exclude_channel_ids", err);
excludeChannelIds = [];
}
const role = newState.guild.roles.cache.get(row.role_id);
if (!role) return;
// User joins a voice channel and it's not excluded et a pas déjà le rôle
if (newState.channelId && !excludeChannelIds.includes(newState.channelId) && !newState.member.roles.cache.has(role.id)) {
newState.member.roles.add(role);
}
// User leaves a voice channel or joins an excluded one
else if (!newState.channelId || excludeChannelIds.includes(newState.channelId)) {
newState.member.roles.remove(role);
}
}
);
});
client.login(process.env.BOT_TOKEN);
module.exports = client;