plugin refactor and stuff
This commit is contained in:
parent
f139c0b417
commit
989b3fa1f3
26 changed files with 88 additions and 100 deletions
34
bot.js
34
bot.js
|
@ -3,6 +3,12 @@ const { EventEmitter } = require('events')
|
|||
const fs = require('fs')
|
||||
const path = require('path')
|
||||
|
||||
const plugins = []
|
||||
for (const filename of fs.readdirSync('plugins')) {
|
||||
if (!filename.endsWith('.js')) return
|
||||
plugins.push(require(path.resolve('plugins', filename)))
|
||||
}
|
||||
|
||||
function createBot (options = {}) {
|
||||
// defaults
|
||||
options.username ??= 'Bot'
|
||||
|
@ -10,20 +16,6 @@ function createBot (options = {}) {
|
|||
options.prefix ??= '!'
|
||||
options.brand ??= 'vanilla' // found that mineflayer has this so i added it here lol
|
||||
|
||||
options.plugins ??= {}
|
||||
fs.readdirSync(
|
||||
'plugins'
|
||||
).forEach((file) => { // populate plugins array
|
||||
if (file.endsWith('.js') && options.plugins[file] == null) {
|
||||
options.plugins[file] = require(path.resolve('plugins', file))
|
||||
}
|
||||
})
|
||||
const plugins = []
|
||||
Object.keys(options.plugins).forEach((key) => {
|
||||
const plugin = options.plugins[key]
|
||||
if (plugin) plugins.push(plugin)
|
||||
})
|
||||
|
||||
options.colors ??= {}
|
||||
options.colors.primary ??= 'white'
|
||||
options.colors.secondary ??= 'green'
|
||||
|
@ -99,23 +91,19 @@ function createBot (options = {}) {
|
|||
bot._client.write('teleport_confirm', { teleportId: packet.teleportId })
|
||||
})
|
||||
|
||||
// plugin injection
|
||||
bot.plugins.forEach((plugin) => {
|
||||
if (typeof plugin.client === 'function') plugin.client(bot, bot._client)
|
||||
bot._client.on('packet', (data, meta) => {
|
||||
bot.emit('packet', data, meta);
|
||||
bot.emit('packet.' + meta.name, data);
|
||||
})
|
||||
})
|
||||
bot._client = options.client ?? mc.createClient(options)
|
||||
bot.emit('set_client', bot._client)
|
||||
|
||||
bot.plugins.forEach((plugin) => {
|
||||
if (typeof plugin.bot === 'function') plugin.bot(bot)
|
||||
})
|
||||
for (const plugin of plugins) plugin(bot)
|
||||
|
||||
function loadPlugin (plugin) {
|
||||
try {
|
||||
if (typeof plugin.bot === 'function') plugin.bot(bot)
|
||||
if (typeof plugin.client === 'function') plugin.client(bot, bot._client)
|
||||
bot.plugins.push(plugin)
|
||||
plugin(bot)
|
||||
} catch (e) {
|
||||
console.log(`Error loading ${plugin}:`)
|
||||
console.log(require('util').inspect(e))
|
||||
|
|
|
@ -4,7 +4,7 @@ const usages = ['destroy']
|
|||
const aliases = ['destroy']
|
||||
const enabled = true
|
||||
|
||||
const permLevel = 0
|
||||
const permLevel = 1
|
||||
|
||||
function execute (bot, cmd, entity, args, handler) {
|
||||
let i = 0
|
||||
|
|
|
@ -29,7 +29,7 @@ function execute (bot, cmd, player, args, handler) {
|
|||
msg.push({ text: a[i] })
|
||||
if (a[i + 1] != null) {
|
||||
msg.push(
|
||||
{ text: a[i + 1], underlined: true, clickEvent: { action: 'run_command', value: `${bot.prefix}${name} ${a[i + 1]}` } }
|
||||
{ text: a[i + 1], underlined: true, clickEvent: { action: 'suggest_command', value: `${bot.prefix}${name} ${a[i + 1]}` } }
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,14 +1,6 @@
|
|||
[
|
||||
[
|
||||
"test00001",
|
||||
""
|
||||
],
|
||||
[
|
||||
"MCSTORM_IO_.*",
|
||||
""
|
||||
],
|
||||
[
|
||||
"okay",
|
||||
"g"
|
||||
]
|
||||
]
|
File diff suppressed because one or more lines are too long
|
@ -1,4 +1,4 @@
|
|||
function bot (bot) {
|
||||
function inject (bot) {
|
||||
bot.on('login', () => {
|
||||
bot.chat.queue.push('/commandspy:commandspy on')
|
||||
// bot.chat.queue.push('/essentials:vanish enable')
|
||||
|
@ -18,19 +18,22 @@ function bot (bot) {
|
|||
})
|
||||
|
||||
bot.on('chat', (message) => {
|
||||
// if (/\u00a76Vanish for .*\u00a76: disabled/.test(message.raw)) { bot.core.run(`sudo ${bot._client.uuid} essentials:vanish enable`) } else if (/§6God mode§c disabled§6./.test(message.raw)) { bot.core.run(`sudo ${bot._client.uuid} essentials:god enable`) } else if (/§rSuccessfully disabled CommandSpy/.test(message.raw)) { bot.core.run(`sudo ${bot._client.uuid} commandspy:commandspy on`) } else if (/§6Your nickname is now .*§6./.test(message.raw)) { bot.core.run(`essentials:nick ${bot._client.uuid} off`) }
|
||||
})
|
||||
|
||||
bot._client.on('player_info', (packet) => {
|
||||
if (packet.action === 0) {
|
||||
packet.data.forEach((player) => {
|
||||
if (player.UUID === bot._client.uuid && player.name !== bot._client.username) { bot.core.run(`essentials:sudo ${bot._client.uuid} username ${bot._client.username}`) }
|
||||
})
|
||||
if (/\u00a76Vanish for .*\u00a76: disabled/.test(message.raw)) {
|
||||
bot.core.run(`sudo ${bot._client.uuid} essentials:vanish enable`)
|
||||
} else if (/§6God mode§c disabled§6./.test(message.raw)) {
|
||||
bot.core.run(`sudo ${bot._client.uuid} essentials:god enable`)
|
||||
} else if (/§rSuccessfully disabled CommandSpy/.test(message.raw)) {
|
||||
bot.core.run(`sudo ${bot._client.uuid} commandspy:commandspy on`)
|
||||
} else if (/§6Your nickname is now .*§6./.test(message.raw)) {
|
||||
bot.core.run(`essentials:nick ${bot._client.uuid} off`)
|
||||
}
|
||||
})
|
||||
}
|
||||
function client (bot, client) {
|
||||
client.on('game_state_change', (packet) => {
|
||||
|
||||
bot.on('player_added', (player) => {
|
||||
if (player.uuid === bot._client.uuid && player.username !== bot._client.username) bot.core.run(`essentials:sudo ${bot._client.uuid} username ${bot._client.username}`)
|
||||
})
|
||||
|
||||
bot.on('packet.game_state_change', (packet) => {
|
||||
switch (packet.reason) {
|
||||
case 3:
|
||||
if (packet.gameMode !== 1) { bot.chat.queue.push('/minecraft:gamemode creative @s[type=player]') }
|
||||
|
@ -40,11 +43,11 @@ function client (bot, client) {
|
|||
}
|
||||
})
|
||||
|
||||
client.on('update_health', (packet) => {
|
||||
bot.on('packet.update_health', (packet) => {
|
||||
if (packet.health <= 0) { bot._client.write('client_command', { payload: 0 }) }
|
||||
})
|
||||
|
||||
// bot._client.on('declare_commands', () => bot.chat.queue.push(bot.brand === 'kaboom' ? '/op @s[type=player]' : '/trigger opme')) // assumes that the vanilla server has an 'opme' trigger
|
||||
bot.on('packet.declare_commands', () => bot.chat.queue.push(bot.brand === 'kaboom' ? '/op @s[type=player]' : '/trigger opme')) // assumes that the vanilla server has an 'opme' trigger
|
||||
}
|
||||
|
||||
module.exports = { bot, client }
|
||||
module.exports = inject
|
||||
|
|
|
@ -17,18 +17,15 @@ setInterval(() => {
|
|||
}, 5 * 6000)
|
||||
|
||||
// expose the blacklist and make the bot uuid ban blacklisted players
|
||||
function bot (bot) { bot.blacklist = blacklist }
|
||||
function inject (bot) {
|
||||
bot.blacklist = blacklist
|
||||
|
||||
function client (bot, client) {
|
||||
client.on('player_info', (packet) => {
|
||||
if (packet.action === 0) {
|
||||
packet.data.forEach((player) => {
|
||||
blacklist.forEach(([pattern, flags]) => {
|
||||
if (new RegExp(pattern, flags).test(player.name)) { bot.exploits.uuidBan(player.UUID) }
|
||||
})
|
||||
})
|
||||
bot.on('player_added', player => {
|
||||
for (const [pattern, flags] of blacklist) {
|
||||
const regex = new RegExp(pattern, flags)
|
||||
if (regex.test(player.username)) bot.exploits.uuidBan(player.uuid)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
module.exports = { bot, client }
|
||||
module.exports = inject
|
||||
|
|
|
@ -13,4 +13,4 @@ function inject (bot) {
|
|||
})
|
||||
}
|
||||
|
||||
module.exports.bot = inject
|
||||
module.exports = inject
|
||||
|
|
|
@ -61,4 +61,4 @@ function censor (match) {
|
|||
return c
|
||||
}
|
||||
|
||||
module.exports.bot = inject
|
||||
module.exports = inject
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
const parseText = require('./../util/text_parser.js')
|
||||
const nbt = require('prismarine-nbt')
|
||||
|
||||
function bot (bot) {
|
||||
function inject (bot) {
|
||||
bot.chat = {
|
||||
queue: [],
|
||||
patterns: [],
|
||||
|
@ -75,20 +75,18 @@ function bot (bot) {
|
|||
bot.emit('cspy', player, command)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
function client (bot, client) {
|
||||
client.on('profileless_chat', (packet) => {
|
||||
bot.on('packet.profileless_chat', (packet) => {
|
||||
const message = parseText(nbt.simplify(packet.message))
|
||||
bot.emit('chat', message, packet)
|
||||
})
|
||||
|
||||
client.on('player_chat', (packet) => {
|
||||
bot.on('packet.player_chat', (packet) => {
|
||||
const message = packet.unsignedChatContent ? parseText(nbt.simplify(packet.unsignedChatContent)) : packet.plainMessage
|
||||
bot.emit('chat', message, { sender: packet.senderUuid })
|
||||
})
|
||||
|
||||
client.on('system_chat', (packet) => {
|
||||
bot.on('packet.system_chat', (packet) => {
|
||||
const json = nbt.simplify(packet.content)
|
||||
if (json?.translate === 'advMode.setCommand.success') return
|
||||
|
||||
|
@ -97,4 +95,4 @@ function client (bot, client) {
|
|||
})
|
||||
}
|
||||
|
||||
module.exports = { bot, client }
|
||||
module.exports = inject
|
||||
|
|
|
@ -14,4 +14,4 @@ function inject (bot) {
|
|||
}
|
||||
}
|
||||
|
||||
module.exports.bot = inject
|
||||
module.exports = inject
|
||||
|
|
|
@ -43,9 +43,12 @@ function inject (bot) {
|
|||
}
|
||||
}
|
||||
|
||||
const requirement = source => source.permissionLevel >= command.permLevel
|
||||
|
||||
const node = bot.commands.dispatcher.register(
|
||||
literal(command.aliases[0])
|
||||
.executes(c => { _execute(c, []); return 0 })
|
||||
.requires(requirement)
|
||||
.then(
|
||||
argument('args', greedyString())
|
||||
.executes(c => { _execute(c, c.getArgument('args').split(' ')); return 0 })
|
||||
|
@ -55,6 +58,7 @@ function inject (bot) {
|
|||
bot.commands.dispatcher.register(
|
||||
literal(command.aliases[i])
|
||||
.executes(context => { _execute([]); return 0 })
|
||||
.requires(requirement)
|
||||
.redirect(node)
|
||||
)
|
||||
}
|
||||
|
@ -143,4 +147,4 @@ function isValid (command) {
|
|||
typeof command.permLevel === 'number'
|
||||
}
|
||||
|
||||
module.exports.bot = inject
|
||||
module.exports = inject
|
||||
|
|
|
@ -74,7 +74,7 @@ function inject (bot) {
|
|||
function handleLine (line) {
|
||||
if (bot.host !== bot.console.host && bot.console.host !== 'all') return
|
||||
if (line.startsWith('.')) {
|
||||
const source = new CommandSource({ bot, sendFeedback })
|
||||
const source = new CommandSource({ bot, permissionLevel: Infinity, sendFeedback })
|
||||
bot.commands.execute(line.substring(1), source)
|
||||
} else {
|
||||
bot.fancyMsg('test', '_ChipMC_', line)
|
||||
|
@ -89,4 +89,4 @@ function inject (bot) {
|
|||
}
|
||||
}
|
||||
|
||||
module.exports.bot = inject
|
||||
module.exports = inject
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
const nbt = require('prismarine-nbt')
|
||||
const mcNamespace = 'minecraft:'
|
||||
|
||||
function bot (bot) {
|
||||
function inject (bot) {
|
||||
let mcData = require('minecraft-data')('1.17.1')
|
||||
bot.on('login', () => (mcData = require('minecraft-data')(bot._client.version)))
|
||||
|
||||
|
@ -85,4 +85,4 @@ function bot (bot) {
|
|||
setInterval(() => bot.core.refill(), 60 * 1000)
|
||||
}
|
||||
|
||||
module.exports = { bot }
|
||||
module.exports = inject
|
||||
|
|
|
@ -128,4 +128,4 @@ function inject (bot) {
|
|||
return result
|
||||
}*/
|
||||
|
||||
module.exports.bot = inject
|
||||
module.exports = inject
|
||||
|
|
|
@ -9,13 +9,13 @@ while (lootTable.length <= 256) { lootTable += 'i' }
|
|||
|
||||
function inject (bot) {
|
||||
bot.exploits = {
|
||||
titleKick: function (selector) {
|
||||
titleKick (selector) {
|
||||
return new Promise((resolve) => {
|
||||
bot.core.run(`minecraft:title ${selector} title ${JSON.stringify(kick)}`)
|
||||
bot.once('player_info', resolve)
|
||||
})
|
||||
},
|
||||
uuidBan: function (UUID) {
|
||||
uuidBan (UUID) {
|
||||
return new Promise((resolve) => {
|
||||
const nbtUUID = toNBTUUID(UUID)
|
||||
bot.exploits.titleKick(`@p[nbt=${SNBT.stringify(nbt.comp({ UUID: nbtUUID }))}]`).then((packet) => {
|
||||
|
@ -24,17 +24,17 @@ function inject (bot) {
|
|||
})
|
||||
})
|
||||
},
|
||||
bossbarBan: function (selector) {
|
||||
bossbarBan (selector) {
|
||||
bot.core.run(`/bossbar add ban title ${JSON.stringify(kick)}`)
|
||||
setTimeout(() => bot.core.run(`/minecraft:bossbar set ban players ${selector}`), 50)
|
||||
},
|
||||
chunkBan: function () {
|
||||
chunkBan () {
|
||||
// i will add code later
|
||||
},
|
||||
execute: function (args) {
|
||||
execute (args) {
|
||||
bot.core.run(`minecraft:execute unless data entity @p run ${args}`)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports.bot = inject
|
||||
module.exports = inject
|
||||
|
|
|
@ -12,4 +12,4 @@ function inject (bot) {
|
|||
}
|
||||
}
|
||||
|
||||
module.exports.bot = inject
|
||||
module.exports = inject
|
||||
|
|
|
@ -13,4 +13,4 @@ function inject (bot) {
|
|||
}
|
||||
}
|
||||
|
||||
module.exports.bot = inject
|
||||
module.exports = inject
|
||||
|
|
|
@ -82,4 +82,4 @@ function kahootErrMsg (message) {
|
|||
])
|
||||
}
|
||||
|
||||
module.exports.bot = inject
|
||||
module.exports = inject
|
||||
|
|
|
@ -12,4 +12,4 @@ function inject (bot) {
|
|||
})
|
||||
}
|
||||
|
||||
module.exports.bot = inject
|
||||
module.exports = inject
|
||||
|
|
|
@ -25,4 +25,4 @@ function inject (bot) {
|
|||
}
|
||||
}
|
||||
|
||||
module.exports.bot = inject
|
||||
module.exports = inject
|
||||
|
|
|
@ -128,4 +128,4 @@ function format (ms) {
|
|||
return seconds + ':' + (minutes.length <= 1 ? '0' : '') + minutes
|
||||
}
|
||||
|
||||
module.exports.bot = inject
|
||||
module.exports = inject
|
||||
|
|
|
@ -2,10 +2,10 @@ const nbt = require('prismarine-nbt')
|
|||
|
||||
const gamemodes = ['survival', 'creative', 'adventure', 'spectator']
|
||||
|
||||
function inject (bot, client) {
|
||||
function inject (bot) {
|
||||
bot.players = []
|
||||
|
||||
client.on('player_info', packet => {
|
||||
bot.on('packet.player_info', packet => {
|
||||
for (const player of packet.data) {
|
||||
if (packet.action & 1) addPlayer(player)
|
||||
if (packet.action & 2) initializeChat(player)
|
||||
|
@ -16,6 +16,12 @@ function inject (bot, client) {
|
|||
}
|
||||
})
|
||||
|
||||
bot.on('packet.player_remove', packet => {
|
||||
for (const uuid of packet.players) {
|
||||
removePlayer(uuid)
|
||||
}
|
||||
})
|
||||
|
||||
function addPlayer (player) {
|
||||
bot.players.filter(_player => _player.uuid !== player.uuid) // Remove duplicates
|
||||
|
||||
|
@ -65,13 +71,13 @@ function inject (bot, client) {
|
|||
}
|
||||
|
||||
async function removePlayer (uuid) {
|
||||
const target = bot.players.find(_player => _player.uuid === player.uuid)
|
||||
const target = bot.players.find(_player => _player.uuid === uuid)
|
||||
if (target == null) return
|
||||
|
||||
// Check that the player actually left
|
||||
const completions = await bot.tabComplete('scoreboard players add ')
|
||||
for (const match of completions.matches) {
|
||||
if (match.tooltip) return
|
||||
if (match.tooltip) continue
|
||||
|
||||
if (match.match === target.username) {
|
||||
target.listed = false
|
||||
|
@ -83,7 +89,7 @@ function inject (bot, client) {
|
|||
bot.emit('player_removed', target)
|
||||
}
|
||||
|
||||
client.on('end', () => (bot.players = []))
|
||||
bot.on('end', () => (bot.players = []))
|
||||
}
|
||||
|
||||
module.exports.client = inject
|
||||
module.exports = inject
|
||||
|
|
|
@ -17,7 +17,7 @@ setInterval(() => {
|
|||
}, 5 * 6000)
|
||||
|
||||
// expose the data to the bot
|
||||
function bot (bot) {
|
||||
function inject (bot) {
|
||||
bot.seen = seen
|
||||
|
||||
bot.on('player_added', player => {
|
||||
|
@ -40,4 +40,4 @@ function bot (bot) {
|
|||
})
|
||||
}
|
||||
|
||||
module.exports = { bot }
|
||||
module.exports = inject
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
function inject (bot, client) {
|
||||
function inject (bot) {
|
||||
const transactions = {}
|
||||
let transactionId = 0
|
||||
|
||||
function tabComplete (text) {
|
||||
return new Promise(resolve => {
|
||||
transactions[transactionId] = resolve
|
||||
client.write('tab_complete', { transactionId, text })
|
||||
bot._client.write('tab_complete', { transactionId, text })
|
||||
|
||||
transactionId = (transactionId + 1) % 256
|
||||
})
|
||||
}
|
||||
|
||||
client.on('tab_complete', packet => {
|
||||
bot.on('packet.tab_complete', packet => {
|
||||
if (!transactions[packet.transactionId]) return
|
||||
|
||||
transactions[packet.transactionId](packet)
|
||||
|
@ -21,4 +21,4 @@ function inject (bot, client) {
|
|||
bot.tabComplete = tabComplete
|
||||
}
|
||||
|
||||
module.exports.client = inject
|
||||
module.exports = inject
|
||||
|
|
|
@ -95,4 +95,4 @@ function inject (bot) {
|
|||
}
|
||||
}
|
||||
|
||||
module.exports.bot = inject
|
||||
module.exports = inject
|
||||
|
|
Loading…
Reference in a new issue