zookeeper/index.js

117 lines
3.8 KiB
JavaScript
Raw Permalink Normal View History

2024-08-10 02:53:40 -05:00
const { Client, GatewayIntentBits, Collection } = require('discord.js');
require('dotenv').config();
const fs = require('fs');
const path = require('path');
const client = new Client({
intents: [
GatewayIntentBits.Guilds,
GatewayIntentBits.GuildMessages,
GatewayIntentBits.MessageContent,
GatewayIntentBits.GuildMembers,
GatewayIntentBits.GuildVoiceStates
]
});
client.commands = new Collection();
const commandsPath = path.join(__dirname, 'commands');
try {
const commandFiles = fs.readdirSync(commandsPath).filter(file => file.endsWith('.js'));
for (const file of commandFiles) {
const filePath = path.join(commandsPath, file);
const command = require(filePath);
client.commands.set(command.name, command);
}
} catch (error) {
console.error('Error loading commands:', error);
}
client.once('ready', () => {
console.log('Bot is online!');
});
// Sets to keep track of "tranq" and "coma" users
const tranqUsers = new Set();
const comaUsers = new Set();
// Path to the JSON file to store baboon users
const baboonUsersPath = path.join(__dirname, 'baboon_users.json');
// Load baboon users from the JSON file
let baboonUsers = {};
if (fs.existsSync(baboonUsersPath)) {
baboonUsers = JSON.parse(fs.readFileSync(baboonUsersPath, 'utf8'));
}
client.on('messageCreate', async message => {
if (tranqUsers.has(message.author.id) || comaUsers.has(message.author.id)) {
await message.delete();
return;
}
if (!message.content.startsWith('~') || message.author.bot) return;
const args = message.content.slice(1).split(/ +/);
const commandName = args.shift().toLowerCase();
if (!client.commands.has(commandName)) return;
const command = client.commands.get(commandName);
try {
console.log(`Passing comaUsers and tranqUsers sets to ${commandName} command with sizes: comaUsers=${comaUsers.size}, tranqUsers=${tranqUsers.size}`);
await command.execute(message, args, tranqUsers, comaUsers);
} catch (error) {
console.error(error);
message.reply('There was an error trying to execute that command!');
}
});
client.on('guildMemberRemove', async member => {
const channelId = '826225570219687956'; // Channel ID to send the message
const roleId = '1160622954082738347'; // Baboon role ID
if (member.roles.cache.has(roleId)) {
const channel = member.guild.channels.cache.get(channelId);
if (channel) {
channel.send('The baboon has made an escape!');
} else {
console.error(`Channel with ID ${channelId} not found`);
}
// Store the user ID in the baboon users list
baboonUsers[member.id] = true;
fs.writeFileSync(baboonUsersPath, JSON.stringify(baboonUsers, null, 2), 'utf8');
}
});
client.on('guildMemberAdd', async member => {
const channelId = '826225570219687956'; // Channel ID to send the message
const roleId = '1160622954082738347'; // Baboon role ID
// Check if the user is in the baboon users list
if (baboonUsers[member.id]) {
const role = member.guild.roles.cache.get(roleId);
if (role) {
try {
await member.roles.add(role);
console.log(`Reapplied baboon role to ${member.user.tag}`);
const channel = member.guild.channels.cache.get(channelId);
if (channel) {
channel.send(`A loose baboon has been recaptured!`);
} else {
console.error(`Channel with ID ${channelId} not found`);
}
} catch (error) {
console.error(`Failed to reapply baboon role to ${member.user.tag}`, error);
}
} else {
console.error('Baboon role not found');
}
}
});
client.login(process.env.DISCORD_TOKEN);