146 lines
5.0 KiB
JavaScript
146 lines
5.0 KiB
JavaScript
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 ', ''));
|
|
}
|
|
});
|