mirror of
https://github.com/ChomeNS/chomens-bot-mc.git
synced 2024-11-14 10:44:55 -05:00
improve chat parsing yup
This commit is contained in:
parent
0f4aa08108
commit
7e3bfbd4f1
2 changed files with 101 additions and 42 deletions
|
@ -71,7 +71,7 @@ function inject (bot, dcclient, config) {
|
||||||
bot._client.on('systemChat', listener)
|
bot._client.on('systemChat', listener)
|
||||||
bot._client.on('chat', listener)
|
bot._client.on('chat', listener)
|
||||||
|
|
||||||
bot.on('message', (message, packet) => parsePlayerMessages(message, packet, bot))
|
bot.on('message', (message, parsedMessage) => parsePlayerMessages(message, parsedMessage, bot))
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = { inject }
|
module.exports = { inject }
|
||||||
|
|
141
util/chat.js
141
util/chat.js
|
@ -23,27 +23,87 @@ function chatPacketListener (packet, bot, mc119) {
|
||||||
|
|
||||||
const message = ChatMessage.fromNotch(mc119 ? packet.formattedMessage : packet.message)
|
const message = ChatMessage.fromNotch(mc119 ? packet.formattedMessage : packet.message)
|
||||||
|
|
||||||
bot.emit('message', message, packet)
|
bot.emit('message', message, parsedMessage)
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
bot.console.error(e)
|
bot.console.error(e)
|
||||||
}
|
}
|
||||||
};
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* parse player messages (for prismarine-chat)
|
* new parse player messages, more accurate message real!11!!
|
||||||
* @param {object} message prismarine-chat ChatMessage
|
* @param {object} _message prismarine-chat ChatMessage - unused in code but used in legacy parsing
|
||||||
* @param {object} packet chat packet
|
* @param {object} parsedMessage parsed message in a js object
|
||||||
* @param {object} bot bot
|
* @param {object} bot bot
|
||||||
*/
|
*/
|
||||||
function parsePlayerMessages (message, packet, bot) {
|
function parsePlayerMessages (_message, parsedMessage, bot) {
|
||||||
|
const ChatMessage = require('prismarine-chat')(bot.version)
|
||||||
|
const vanillaKeys = [
|
||||||
|
'chat.type.text',
|
||||||
|
'chat.type.announcement',
|
||||||
|
'chat.type.emote'
|
||||||
|
]
|
||||||
|
|
||||||
|
// parse Extras™ chat messages
|
||||||
|
if (
|
||||||
|
parsedMessage.translate === '%s' &&
|
||||||
|
parsedMessage.with?.length === 1 &&
|
||||||
|
parsedMessage.with[0]?.text === '' &&
|
||||||
|
parsedMessage.with[0]?.extra?.length === 5
|
||||||
|
) {
|
||||||
|
const trueMessageComponent = parsedMessage.with[0].extra
|
||||||
|
const username = ChatMessage.fromNotch(trueMessageComponent[1]).toMotd()
|
||||||
|
const message = ChatMessage.fromNotch(trueMessageComponent[4]).toMotd()
|
||||||
|
bot.emit('chat', username, message)
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// parse CommandSpy™ messages
|
||||||
|
if (
|
||||||
|
(
|
||||||
|
parsedMessage.color === 'yellow' ||
|
||||||
|
parsedMessage.color === 'aqua'
|
||||||
|
) &&
|
||||||
|
parsedMessage.extra?.length === 2
|
||||||
|
) {
|
||||||
|
const username = parsedMessage.text
|
||||||
|
const command = parsedMessage.extra[1].text
|
||||||
|
bot.emit('cspy', username, command)
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// parse Minecraft Vanilla™ messages
|
||||||
|
if (
|
||||||
|
vanillaKeys.includes(parsedMessage.translate) &&
|
||||||
|
parsedMessage.with.length >= 2
|
||||||
|
) {
|
||||||
|
const username = ChatMessage.fromNotch(parsedMessage.with[0]).toMotd()
|
||||||
|
const message = ChatMessage.fromNotch(parsedMessage.with[1]).toMotd()
|
||||||
|
bot.emit('chat', username, message)
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
parsePlayerMessagesLegacy(_message, parsedMessage, bot)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* LEGACY - parse player messages (for prismarine-chat)
|
||||||
|
* @param {object} message prismarine-chat ChatMessage
|
||||||
|
* @param {object} _parsedMessage parsed message in a js object
|
||||||
|
* @param {object} bot bot
|
||||||
|
*/
|
||||||
|
function parsePlayerMessagesLegacy (message, _parsedMessage, bot) {
|
||||||
try {
|
try {
|
||||||
// here is all the player message parsing thing
|
// here is all the player message parsing thing
|
||||||
const raw = message.toMotd().substring(0, 32767)
|
const raw = message.toMotd() // lags the bot as you already know
|
||||||
if (raw.match(/.* .*: .*/g)) {
|
// if (raw.match(/.* .*: .*/g)) {
|
||||||
const username = raw.replace(/.*?\[.*?\] /g, '').replace(/:.*/g, '').replace(/§#....../gm, '')
|
// const username = raw.replace(/.*?\[.*?\] /g, '').replace(/:.*/g, '').replace(/§#....../gm, '')
|
||||||
const message = raw.split(': ').slice(1).join(' ').replace(/§#....../gm, '')
|
// const message = raw.split(': ').slice(1).join(' ').replace(/§#....../gm, '')
|
||||||
bot.emit('chat', username, message)
|
// bot.emit('chat', username, message)
|
||||||
} else if (raw.match(/.* .*\u203a .*/g)) {
|
// } else
|
||||||
|
if (raw.match(/.* .*\u203a .*/g)) {
|
||||||
const username = raw.replace(/.*?\[.*?\] /g, '').replace(/\u203a.*/g, '').replace(/§#....../gm, '').split(' ')[0]
|
const username = raw.replace(/.*?\[.*?\] /g, '').replace(/\u203a.*/g, '').replace(/§#....../gm, '').split(' ')[0]
|
||||||
const message = raw.split('\u203a ').slice(1).join(' ').substring(2)
|
const message = raw.split('\u203a ').slice(1).join(' ').substring(2)
|
||||||
bot.emit('chat', username, message)
|
bot.emit('chat', username, message)
|
||||||
|
@ -51,37 +111,36 @@ function parsePlayerMessages (message, packet, bot) {
|
||||||
const username = raw.replace(/.*?\[.*?\] /g, '').replace(/\u00BB.*/g, '').replace(/§#....../gm, '').split(' ')[0]
|
const username = raw.replace(/.*?\[.*?\] /g, '').replace(/\u00BB.*/g, '').replace(/§#....../gm, '').split(' ')[0]
|
||||||
const message = raw.split('\u00BB ').slice(1).join(' ')
|
const message = raw.split('\u00BB ').slice(1).join(' ')
|
||||||
bot.emit('chat', username, message)
|
bot.emit('chat', username, message)
|
||||||
} else if (raw.match(/.* .*> .*/g)) {
|
|
||||||
const username = raw.replace(/.*?\[.*?\] /g, '').replace(/>.*/g, '').replace(/§#....../gm, '').split(' ')[0]
|
|
||||||
const message = raw.split('> ').slice(1).join(' ').substring(2)
|
|
||||||
bot.emit('chat', username, message)
|
|
||||||
} else if (raw.match(/<.*> .*/g)) {
|
|
||||||
const username = raw.substring(1).split('>')[0]
|
|
||||||
const message = raw.split('> ').slice(1).join(' ')
|
|
||||||
|
|
||||||
bot.emit('chat', username, message)
|
|
||||||
} else if (raw.match(/§.*§b: §b\/.*/g)) {
|
|
||||||
const username = raw.split('§b: §b')[0]
|
|
||||||
const command = raw.split('§b: §b')[1]
|
|
||||||
|
|
||||||
bot.emit('cspy', username, command)
|
|
||||||
} else if (raw.match(/§.*§e: §e\/.*/g)) {
|
|
||||||
const username = raw.split('§e: §e')[0]
|
|
||||||
const command = raw.split('§e: §e')[1]
|
|
||||||
bot.emit('cspy', username, command)
|
|
||||||
} else if (raw.match(/§.*§b: \/.*/g)) {
|
|
||||||
const username = raw.split('§b: ')[0]
|
|
||||||
const command = raw.split('§b: ')[1]
|
|
||||||
|
|
||||||
bot.emit('cspy', username, command)
|
|
||||||
} else if (raw.match(/§.*§e: \/.*/g)) {
|
|
||||||
const username = raw.split('§e: ')[0]
|
|
||||||
const command = raw.split('§e: ')[1]
|
|
||||||
bot.emit('cspy', username, command)
|
|
||||||
}
|
}
|
||||||
} catch (e) {
|
// } else if (raw.match(/.* .*> .*/g)) {
|
||||||
|
// const username = raw.replace(/.*?\[.*?\] /g, '').replace(/>.*/g, '').replace(/§#....../gm, '').split(' ')[0]
|
||||||
|
// const message = raw.split('> ').slice(1).join(' ').substring(2)
|
||||||
|
// bot.emit('chat', username, message)
|
||||||
|
// } else if (raw.match(/<.*> .*/g)) {
|
||||||
|
// const username = raw.substring(1).split('>')[0]
|
||||||
|
// const message = raw.split('> ').slice(1).join(' ')
|
||||||
|
//
|
||||||
|
// bot.emit('chat', username, message)
|
||||||
|
// } else if (raw.match(/§.*§b: §b\/.*/g)) {
|
||||||
|
// const username = raw.split('§b: §b')[0]
|
||||||
|
// const command = raw.split('§b: §b')[1]
|
||||||
|
|
||||||
}
|
// bot.emit('cspy', username, command)
|
||||||
|
// } else if (raw.match(/§.*§e: §e\/.*/g)) {
|
||||||
|
// const username = raw.split('§e: §e')[0]
|
||||||
|
// const command = raw.split('§e: §e')[1]
|
||||||
|
// bot.emit('cspy', username, command)
|
||||||
|
// } else if (raw.match(/§.*§b: \/.*/g)) {
|
||||||
|
// const username = raw.split('§b: ')[0]
|
||||||
|
// const command = raw.split('§b: ')[1]
|
||||||
|
|
||||||
|
// bot.emit('cspy', username, command)
|
||||||
|
// } else if (raw.match(/§.*§e: \/.*/g)) {
|
||||||
|
// const username = raw.split('§e: ')[0]
|
||||||
|
// const command = raw.split('§e: ')[1]
|
||||||
|
// bot.emit('cspy', username, command)
|
||||||
|
// }
|
||||||
|
} catch (e) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports = { chatPacketListener, parsePlayerMessages }
|
module.exports = { chatPacketListener, parsePlayerMessages }
|
||||||
|
|
Loading…
Reference in a new issue