const mineflayer = require('mineflayer'); const { EventEmitter } = require('events'); const { EmbedBuilder, hyperlink, WebhookClient } = require('discord.js'); const { GuildMessage, GuildMessageSender, OfficerMessage } = require('./eventTypes.js'); const bot = mineflayer.createBot({ host: 'play.hypixel.net', username: 'proudcirclemc@gmail.com', auth: 'microsoft', version: '1.8.9' }); const webhookUrl = ';https://discord.com/api/webhooks/1262482329671176232/yAHgxkP2JSBPpdjmz6mdABu5yRkXxatXcbzI91iAjy0jM0z1kRzE1HZqzK5OGXCmkqPk' const webhookClient = new WebhookClient({ url: webhookUrl }); function cleanFormatting(rawString) { const formattingRegex = /§[0-9a-fklmnor]+|[\[\]:]+/g; return rawString.replace(formattingRegex, ''); } function parseGuildMessage(jsonChatMessage) { const extras = jsonChatMessage.json.extra; let extra_prefix = extras[0].text; if (extra_prefix.startsWith('§2Guild >') || extra_prefix.startsWith('§aO > ')) { // Guild Chat Event let hypixel_rank = null; let username = null; let guild_rank = null; let splitter = extra_prefix.trim().split(' '); if (splitter.length === 4) { username = splitter[2]; guild_rank = splitter[3]; } else if (splitter.length === 5) { hypixel_rank = splitter[2]; username = splitter[3]; guild_rank = splitter[4]; } else { console.error('Something went wrong: ' + splitter); return; } let message = extras[1].text; const guildMessageSender = new GuildMessageSender(username, hypixel_rank, guild_rank); if (extra_prefix.startsWith('§2Guild >')) { let guildMessage = new GuildMessage(message, guildMessageSender); chatEvents.emit('guildmsg', guildMessage); } else if (extra_prefix.startsWith('§aO > ')) { let officerMessage = new OfficerMessage(message, guildMessageSender); chatEvents.emit('officermsg', officerMessage); } } } function parsePersonalMessage(message) { let fromPortion = message.split(': '); if (!(fromPortion[0].startsWith('From '))) { return; } let fromSplit = fromPortion[0].split(' '); if (fromSplit[fromSplit.length - 1] !== 'illyum') { return; } let contents = fromPortion[1]; if (contents.startsWith('!joinparty')) { bot.chat('/party accept illyum'); } else if (contents.startsWith('!say ')) { bot.chat('/gc ' + contents.replace('!say ', '')); } else if (contents.startsWith('!reply ')) { bot.chat('/msg illyum ' + contents.replace('!reply ', '')); } } bot.once('spawn', () => { console.log('Bot Logged In!'); }); bot.on('message', async (jsonMsg, position) => { try { parseGuildMessage(jsonMsg); } catch (err) {} }); bot.on('messagestr', (message, position, jsonMsg) => { try { parsePersonalMessage(message); } catch (err) {} }); const chatEvents = new EventEmitter(); chatEvents.on('guildmsg', (guildMessage) => { const guildRank = guildMessage.getSender().getCleanGuildRank(); const username = guildMessage.getSender().getCleanUsername(); const msg = guildMessage.getContent(); if (username === 'ProudCircle') { return; } if (msg.startsWith('!')) { if (guildMessage.getContent().startsWith('!joinparty')) { bot.chat('/party accept ' + username); } else if (guildMessage.getContent().startsWith('!say ')) { bot.chat('/gc ' + guildMessage.getContent().replace('!say ', '')); } } else { let content; if (guildMessage.getSender().getCleanHypixelRank() === null) { content = `[${username}] ${guildRank}: \`${msg}\``; } else { content = `[${guildMessage.getSender().getCleanHypixelRank()}] [${username}] ${guildRank}: \`${msg}\``; } const embed = new EmbedBuilder() .setTitle(content) .setColor(0x00AA00); webhookClient.send({ embeds: [embed] }); } console.log(`Guild > [${guildRank}] [${username}]: ${guildMessage.getContent()}`); if (guildRank === 'Staff') { if (guildMessage.getContent().startsWith('!joinparty')) { bot.chat('/party accept ' + username); } else if (guildMessage.getContent().startsWith('!say ')) { bot.chat('/gc ' + guildMessage.getContent().replace('!say ', '')); } } }); chatEvents.on('officermsg', (guildMessage) => { const guildRank = guildMessage.getSender().getCleanGuildRank(); const username = guildMessage.getSender().getCleanUsername(); const msg = guildMessage.getContent(); console.log(`Officer > [${username}]: ${guildMessage.getContent()}`); if (guildMessage.getContent().startsWith('!joinparty')) { bot.chat('/party accept ' + username); } else if (guildMessage.getContent().startsWith('!say ')) { bot.chat('/gc ' + guildMessage.getContent().replace('!say ', '')); } });