diff --git a/package-lock.json b/package-lock.json index 981b690..6f6f99e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -86,6 +86,7 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-1.9.0.tgz", "integrity": "sha512-0zx8DePNVvQibh5ly5kCEei5wtPBIUbSoE9n+91Rlladz4tgtFbJ36PZMxxZrTEOQ7AHMZ/b0crT/0fCy6FTKg==", + "license": "Apache-2.0", "dependencies": { "@discordjs/formatters": "^0.5.0", "@discordjs/util": "^1.1.1", @@ -105,12 +106,14 @@ "node_modules/@discordjs/builders/node_modules/discord-api-types": { "version": "0.37.97", "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.97.tgz", - "integrity": "sha512-No1BXPcVkyVD4ZVmbNgDKaBoqgeQ+FJpzZ8wqHkfmBnTZig1FcH3iPPersiK1TUIAzgClh2IvOuVUYfcWLQAOA==" + "integrity": "sha512-No1BXPcVkyVD4ZVmbNgDKaBoqgeQ+FJpzZ8wqHkfmBnTZig1FcH3iPPersiK1TUIAzgClh2IvOuVUYfcWLQAOA==", + "license": "MIT" }, "node_modules/@discordjs/collection": { "version": "1.5.3", "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-1.5.3.tgz", "integrity": "sha512-SVb428OMd3WO1paV3rm6tSjM4wC+Kecaa1EUGX7vc6/fddvw/6lg90z4QtCqm21zvVe92vMMDt9+DkIvjXImQQ==", + "license": "Apache-2.0", "engines": { "node": ">=16.11.0" } @@ -119,6 +122,7 @@ "version": "0.5.0", "resolved": "https://registry.npmjs.org/@discordjs/formatters/-/formatters-0.5.0.tgz", "integrity": "sha512-98b3i+Y19RFq1Xke4NkVY46x8KjJQjldHUuEbCqMvp1F5Iq9HgnGpu91jOi/Ufazhty32eRsKnnzS8n4c+L93g==", + "license": "Apache-2.0", "dependencies": { "discord-api-types": "0.37.97" }, @@ -132,12 +136,14 @@ "node_modules/@discordjs/formatters/node_modules/discord-api-types": { "version": "0.37.97", "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.97.tgz", - "integrity": "sha512-No1BXPcVkyVD4ZVmbNgDKaBoqgeQ+FJpzZ8wqHkfmBnTZig1FcH3iPPersiK1TUIAzgClh2IvOuVUYfcWLQAOA==" + "integrity": "sha512-No1BXPcVkyVD4ZVmbNgDKaBoqgeQ+FJpzZ8wqHkfmBnTZig1FcH3iPPersiK1TUIAzgClh2IvOuVUYfcWLQAOA==", + "license": "MIT" }, "node_modules/@discordjs/rest": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-2.4.0.tgz", "integrity": "sha512-Xb2irDqNcq+O8F0/k/NaDp7+t091p+acb51iA4bCKfIn+WFWd6HrNvcsSbMMxIR9NjcMZS6NReTKygqiQN+ntw==", + "license": "Apache-2.0", "dependencies": { "@discordjs/collection": "^2.1.1", "@discordjs/util": "^1.1.1", @@ -160,6 +166,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-2.1.1.tgz", "integrity": "sha512-LiSusze9Tc7qF03sLCujF5iZp7K+vRNEDBZ86FT9aQAv3vxMLihUvKvpsCWiQ2DJq1tVckopKm1rxomgNUc9hg==", + "license": "Apache-2.0", "engines": { "node": ">=18" }, @@ -170,12 +177,14 @@ "node_modules/@discordjs/rest/node_modules/discord-api-types": { "version": "0.37.97", "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.97.tgz", - "integrity": "sha512-No1BXPcVkyVD4ZVmbNgDKaBoqgeQ+FJpzZ8wqHkfmBnTZig1FcH3iPPersiK1TUIAzgClh2IvOuVUYfcWLQAOA==" + "integrity": "sha512-No1BXPcVkyVD4ZVmbNgDKaBoqgeQ+FJpzZ8wqHkfmBnTZig1FcH3iPPersiK1TUIAzgClh2IvOuVUYfcWLQAOA==", + "license": "MIT" }, "node_modules/@discordjs/util": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@discordjs/util/-/util-1.1.1.tgz", "integrity": "sha512-eddz6UnOBEB1oITPinyrB2Pttej49M9FZQY8NxgEvc3tq6ZICZ19m70RsmzRdDHk80O9NoYN/25AqJl8vPVf/g==", + "license": "Apache-2.0", "engines": { "node": ">=18" }, @@ -187,6 +196,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/@discordjs/ws/-/ws-1.1.1.tgz", "integrity": "sha512-PZ+vLpxGCRtmr2RMkqh8Zp+BenUaJqlS6xhgWKEZcgC/vfHLEzpHtKkB0sl3nZWpwtcKk6YWy+pU3okL2I97FA==", + "license": "Apache-2.0", "dependencies": { "@discordjs/collection": "^2.1.0", "@discordjs/rest": "^2.3.0", @@ -209,6 +219,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-2.1.1.tgz", "integrity": "sha512-LiSusze9Tc7qF03sLCujF5iZp7K+vRNEDBZ86FT9aQAv3vxMLihUvKvpsCWiQ2DJq1tVckopKm1rxomgNUc9hg==", + "license": "Apache-2.0", "engines": { "node": ">=18" }, @@ -219,7 +230,8 @@ "node_modules/@discordjs/ws/node_modules/discord-api-types": { "version": "0.37.83", "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.83.tgz", - "integrity": "sha512-urGGYeWtWNYMKnYlZnOnDHm8fVRffQs3U0SpE8RHeiuLKb/u92APS8HoQnPTFbnXmY1vVnXjXO4dOxcAn3J+DA==" + "integrity": "sha512-urGGYeWtWNYMKnYlZnOnDHm8fVRffQs3U0SpE8RHeiuLKb/u92APS8HoQnPTFbnXmY1vVnXjXO4dOxcAn3J+DA==", + "license": "MIT" }, "node_modules/@isaacs/cliui": { "version": "8.0.2", @@ -436,6 +448,7 @@ "version": "1.5.3", "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.5.3.tgz", "integrity": "sha512-x7zadcfJGxFka1Q3f8gCts1F0xMwCKbZweM85xECGI0hBTeIZJGGCrHgLggihBoprlQ/hBmDR5LKfIPqnmHM3w==", + "license": "MIT", "engines": { "node": ">=v14.0.0", "npm": ">=7.0.0" @@ -445,6 +458,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-4.0.0.tgz", "integrity": "sha512-d9dUmWVA7MMiKobL3VpLF8P2aeanRTu6ypG2OIaEv/ZHH/SUQ2iHOVyi5wAPjQ+HmnMuL0whK9ez8I/raWbtIg==", + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", "lodash": "^4.17.21" @@ -457,6 +471,7 @@ "version": "3.5.3", "resolved": "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.5.3.tgz", "integrity": "sha512-jjmJywLAFoWeBi1W7994zZyiNWPIiqRRNAmSERxyg93xRGzNYvGjlZ0gR6x0F4gPRi2+0O6S71kOZYyr3cxaIQ==", + "license": "MIT", "engines": { "node": ">=v14.0.0", "npm": ">=7.0.0" @@ -486,6 +501,7 @@ "version": "8.5.12", "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.12.tgz", "integrity": "sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==", + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -494,6 +510,7 @@ "version": "2.4.6", "resolved": "https://registry.npmjs.org/@vladfrangu/async_event_emitter/-/async_event_emitter-2.4.6.tgz", "integrity": "sha512-RaI5qZo6D2CVS6sTHFKg1v5Ohq/+Bo2LZ5gzUEwZ/WkHhwtGTCB/sVLw8ijOkAUxasZ+WshN/Rzj4ywsABJ5ZA==", + "license": "MIT", "engines": { "node": ">=v14.0.0", "npm": ">=7.0.0" @@ -1045,12 +1062,14 @@ "node_modules/discord-api-types": { "version": "0.37.100", "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.100.tgz", - "integrity": "sha512-a8zvUI0GYYwDtScfRd/TtaNBDTXwP5DiDVX7K5OmE+DRT57gBqKnwtOC5Ol8z0mRW8KQfETIgiB8U0YZ9NXiCA==" + "integrity": "sha512-a8zvUI0GYYwDtScfRd/TtaNBDTXwP5DiDVX7K5OmE+DRT57gBqKnwtOC5Ol8z0mRW8KQfETIgiB8U0YZ9NXiCA==", + "license": "MIT" }, "node_modules/discord.js": { "version": "14.16.3", "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-14.16.3.tgz", "integrity": "sha512-EPCWE9OkA9DnFFNrO7Kl1WHHDYFXu3CNVFJg63bfU7hVtjZGyhShwZtSBImINQRWxWP2tgo2XI+QhdXx28r0aA==", + "license": "Apache-2.0", "dependencies": { "@discordjs/builders": "^1.9.0", "@discordjs/collection": "1.5.3", @@ -1706,7 +1725,8 @@ "node_modules/lodash.snakecase": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", - "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==" + "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==", + "license": "MIT" }, "node_modules/lru-cache": { "version": "10.4.3", @@ -1721,7 +1741,8 @@ "node_modules/magic-bytes.js": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/magic-bytes.js/-/magic-bytes.js-1.10.0.tgz", - "integrity": "sha512-/k20Lg2q8LE5xiaaSkMXk4sfvI+9EGEykFS4b0CHHGWqDYU0bGUFSwchNOMA56D7TCs9GwVTkqe9als1/ns8UQ==" + "integrity": "sha512-/k20Lg2q8LE5xiaaSkMXk4sfvI+9EGEykFS4b0CHHGWqDYU0bGUFSwchNOMA56D7TCs9GwVTkqe9als1/ns8UQ==", + "license": "MIT" }, "node_modules/make-fetch-happen": { "version": "13.0.1", @@ -2646,7 +2667,8 @@ "node_modules/ts-mixer": { "version": "6.0.4", "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.4.tgz", - "integrity": "sha512-ufKpbmrugz5Aou4wcr5Wc1UUFWOLhq+Fm6qa6P0w0K5Qw2yhaUoiWszhCVuNQyNwrlGiscHOmqYoAox1PtvgjA==" + "integrity": "sha512-ufKpbmrugz5Aou4wcr5Wc1UUFWOLhq+Fm6qa6P0w0K5Qw2yhaUoiWszhCVuNQyNwrlGiscHOmqYoAox1PtvgjA==", + "license": "MIT" }, "node_modules/tslib": { "version": "2.7.0", @@ -2657,6 +2679,7 @@ "version": "6.19.8", "resolved": "https://registry.npmjs.org/undici/-/undici-6.19.8.tgz", "integrity": "sha512-U8uCCl2x9TK3WANvmBavymRzxbfFYG+tAu+fgx3zxQy3qdagQqBLwJVrdyO1TBfUXvfKveMKJZhpvUYoOjM+4g==", + "license": "MIT", "engines": { "node": ">=18.17" } @@ -2842,6 +2865,7 @@ "version": "8.18.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "license": "MIT", "engines": { "node": ">=10.0.0" }, diff --git a/src/bot.js b/src/bot.js index 8451dea..3061d4d 100644 --- a/src/bot.js +++ b/src/bot.js @@ -1,6 +1,6 @@ const mc = require('minecraft-protocol'); const { EventEmitter } = require('events'); -EventEmitter.defaultMaxListeners = Infinity; +EventEmitter.defaultMaxListeners = 5e6; const util = require('util'); const createRegistry = require('prismarine-registry'); const ChatMessage = require('prismarine-chat'); @@ -27,15 +27,18 @@ function createBot(options = {}, config) { bot.registry.language = require('./data/language.json'); bot.emit('registry_ready', bot.registry) }) + client.on('disconnect', data => { bot.emit("disconnect", data); - console.log(ChatMessage(bot._client.version).fromNotch(data.reason)?.toAnsi()) bot.console.warn(`${ChatMessage(bot._client.version).fromNotch("§8[§bClient Reconnect§8]§r")?.toAnsi()} ${ChatMessage(bot._client.version).fromNotch(data.reason)?.toAnsi()}`) }) + client.on('end', reason => { bot.emit('end', reason); if (reason === "socketClosed") return; bot.console.warn(ChatMessage(bot._client.version).fromNotch(`§8[§bClient Reconnect§8]§r ${reason}`)?.toAnsi()) + // bot = undefined; +// config = undefined; }) client.on('error', error => { @@ -64,4 +67,4 @@ function createBot(options = {}, config) { bot.bots = options.bots ?? [bot] return bot } -module.exports = createBot +module.exports = createBot; diff --git a/src/commands/bots.js b/src/commands/bots.js index 0e8487e..90e7cf1 100644 --- a/src/commands/bots.js +++ b/src/commands/bots.js @@ -2,7 +2,7 @@ const bots = require('../data/bots.json'); const CommandError = require('../util/command_error') module.exports = { name: "bots", - description: ["shows a list of known bots"], + description: "shows a list of known bots", aliases: ["knownbots"], trustLevel: 0, usages:[""], diff --git a/src/commands/cloop.js b/src/commands/cloop.js index f2d38bf..b6daa3c 100644 --- a/src/commands/cloop.js +++ b/src/commands/cloop.js @@ -20,7 +20,8 @@ module.exports = { if (!args && !args[0] && !args[1] && !args[2] && !args[3]) return switch (args[1]) { case 'add': - if (parseInt(args[2]) === NaN) bot.tellraw(`@a[name="${source?.player?.profile?.name}"]`, { text: 'Invalid interval', color: 'red' }) + if (isNaN(args[2])) throw new CommandError({ text: 'Invalid interval', color: 'red' }) +//bot.tellraw(`@a[name="${source?.player?.profile?.name}"]`, { text: 'Invalid interval', color: 'red' }) const interval = parseInt(args[2]) const command = args.slice(3).join(' '); bot.cloop.add(command, interval) diff --git a/src/commands/cowsay.js b/src/commands/cowsay.js index 03838b9..6fa3466 100644 --- a/src/commands/cowsay.js +++ b/src/commands/cowsay.js @@ -7,9 +7,10 @@ module.exports = { trustLevel: 0, aliases: [ ], - description: 'amogus', + description: 'cows', usages: [ - "just wait till the command is ready :3" + "", + "list" ], execute (context) { const bot = context.bot; diff --git a/src/commands/echo.js b/src/commands/echo.js index 4668960..51d6cd0 100644 --- a/src/commands/echo.js +++ b/src/commands/echo.js @@ -16,16 +16,20 @@ module.exports = { bot.chat.command(message.substring(1)) return } + // if bot.chat.message(message) }, discordExecute (context) { const bot = context.bot; const args = context.arguments; +// const interaction = context.interaction +//interaction.options.getString('input') if (args.join(' ').startsWith('/')) { bot.chat.command(args.join(' ').substring(1)) return } bot.chat.message(args.join(' ')) +// bot.chat.message('e') } } diff --git a/src/commands/help.js b/src/commands/help.js index 26919b4..0d0ccc6 100644 --- a/src/commands/help.js +++ b/src/commands/help.js @@ -129,6 +129,7 @@ module.exports = { } console.log(aliases)*/ // } +// tellraw @p {"text":"this","clickEvent":{"action":"suggest_command","value":"this"}} if (command.trustLevel === 0) { public.push([ { @@ -139,12 +140,12 @@ module.exports = { action: "show_text", value: [ { - text: `Command:${command.name}\n`, - color: 'gray' + text: `Command: ${command.name}\n`, + color: 'blue' }, { text: `Trust Level: `, - color: 'gray' + color: 'blue' }, { text: `${command.trustLevel}\n`, @@ -152,20 +153,20 @@ module.exports = { }, { text: `${command.description}\n`, - color: 'gray' + color: 'blue' }, { text: `Command Aliases: ${command.aliases}\n`, - color: 'gray' + color: 'blue' }, { text: 'click on me to use me :)', - color: 'gray', + color: 'dark_blue', }, ], }, clickEvent: { - action: 'run_command', + action: 'suggest_command', value: `${config.prefixes[0]}${command?.name}` } } @@ -181,11 +182,11 @@ module.exports = { value: [ { text: `Command:${command.name}\n`, - color: 'gray' + color: 'blue' }, { text: `Trust Level: `, - color: 'gray' + color: 'blue' }, { text: `${command.trustLevel}\n`, @@ -193,20 +194,20 @@ module.exports = { }, { text: `${command.description}\n`, - color: 'gray' + color: 'blue' }, { text: `Command Aliases: ${command.aliases}\n`, - color: 'gray' + color: 'blue' }, { text: 'click on me to use me :)', - color: 'gray', + color: 'dark_blue', }, ], }, clickEvent: { - action: 'run_command', + action: 'suggest_command', value: `${config.prefixes[0]}${command?.name}` } } @@ -222,11 +223,11 @@ module.exports = { value: [ { text: `Command:${command.name}\n`, - color: 'gray' + color: 'blue' }, { text: `Trust Level: `, - color: 'gray' + color: 'blue' }, { text: `${command.trustLevel}\n`, @@ -234,20 +235,20 @@ module.exports = { }, { text: `${command.description}\n`, - color: 'gray' + color: 'blue' }, { text: `Command Aliases: ${command.aliases}\n`, - color: 'gray' + color: 'blue' }, { text: 'click on me to use me :)', - color: 'gray', + color: 'dark_blue', }, ], }, clickEvent: { - action: 'run_command', + action: 'suggest_command', value: `${config.prefixes[0]}${command?.name}` } } @@ -263,11 +264,11 @@ module.exports = { value: [ { text: `Command:${command.name}\n`, - color: 'gray' + color: 'blue' }, { text: `Trust Level: `, - color: 'gray' + color: 'blue' }, { text: `${command.trustLevel}\n`, @@ -275,20 +276,20 @@ module.exports = { }, { text: `${command.description}\n`, - color: 'gray' + color: 'blue' }, { text: `Command Aliases: ${command.aliases}\n`, - color: 'gray' + color: 'blue' }, { text: 'click on me to use me :)', - color: 'gray', + color: 'dark_blue', }, ], }, clickEvent: { - action: 'run_command', + action: 'suggest_command', value: `${config.prefixes[0]}${command?.name}` } } diff --git a/src/commands/list.js b/src/commands/list.js index 1162e6c..f403657 100644 --- a/src/commands/list.js +++ b/src/commands/list.js @@ -3,7 +3,7 @@ const { EmbedBuilder } = require('discord.js'); const fixansi = require('../util/ansi'); module.exports = { name: 'list', - description:['check the player list'], + description:'check the player list', trustLevel: 0, aliases:['playerlist', 'plist', 'pl'], usages:[""], diff --git a/src/commands/rtp.js b/src/commands/rtp.js index 4aea9f5..89e3eb1 100644 --- a/src/commands/rtp.js +++ b/src/commands/rtp.js @@ -2,7 +2,7 @@ const between = require('../util/between') const CommandError = require('../util/command_error') module.exports = { name: 'tpr', - description:['teleport to a random place'], + description:'teleport to a random place', trustLevel: 1, aliases:['rtp', 'teleportrandom', 'randomteleport'], usages:[""], diff --git a/src/commands/urban.js b/src/commands/urban.js index 1d4a42d..5e4b33b 100644 --- a/src/commands/urban.js +++ b/src/commands/urban.js @@ -3,7 +3,7 @@ const { EmbedBuilder, ButtonBuilder, ButtonStyle, ActionRowBuilder, StringSelect const { request } = require('undici'); module.exports = { name: 'urban', - description:['urban dictionary'], + description:'urban dictionary', aliases:['urbandictionary'], trustLevel: 0, usages: [ diff --git a/src/commands/wiki.js b/src/commands/wiki.js index 99b8c7b..5d059d5 100644 --- a/src/commands/wiki.js +++ b/src/commands/wiki.js @@ -3,7 +3,7 @@ const CommandError = require('../util/command_error') const { EmbedBuilder } = require('discord.js') module.exports = { name: 'wiki', - description:['wikipedia'], + description:'wikipedia', trustLevel: 0, aliases:['wikipedia'], usages:[""], diff --git a/src/data/info.json b/src/data/info.json index 75475c2..a53c1f2 100644 --- a/src/data/info.json +++ b/src/data/info.json @@ -1,8 +1,8 @@ { "bot": { "buildstring": { - "version": "v6.0.8", - "build":"1090", + "version": "v6.0.9", + "build":"1110", "codename":"" }, "source": "https://code.chipmunk.land/Parker2991/FridayNightFunkinBoyfriendBot/" diff --git a/src/index.js b/src/index.js index 2b383ba..43259ec 100644 --- a/src/index.js +++ b/src/index.js @@ -10,15 +10,7 @@ const { MessageContent, GuildMessages, Guilds } = GatewayIntentBits; const discordClient = new Client({ intents: [Guilds, GuildMessages, MessageContent] }); console.log('Starting FNFBoyfriendBot'); checks(); -/* -if (!fs.existsSync(path.join(__dirname, "../config.yml"))) { - console.log("Config not found creating config from the default config"); - fs.copyFileSync( - path.join(__dirname, "./data/default_config.yml"), - path.join(__dirname, "../config.yml") - ) -} -*/ + try { config = js_yaml.load(fs.readFileSync(path.join(__dirname, '../', 'config.yml'))) } catch (e) { diff --git a/src/modules/boot.js b/src/modules/boot.js index 4018ad3..b6aed85 100644 --- a/src/modules/boot.js +++ b/src/modules/boot.js @@ -1,4 +1,3 @@ -const readline = require('readline'); function boot (bot, options, discordClient, config) { bot.on("packet.login", (data) => { if (bot.options.isCreayun) return diff --git a/src/modules/chat.js b/src/modules/chat.js index 26749af..f7bf279 100644 --- a/src/modules/chat.js +++ b/src/modules/chat.js @@ -33,19 +33,19 @@ function chat (bot, options, config) { }) switch (packet.type) { case 1: - bot.emit('message', { translate: "chat.type.emote", with: [ sender, message ]}) + bot.emit('profilelessChat', { translate: "chat.type.emote", with: [ sender, message ]}) break case 2: - bot.emit('message', { translate: "commands.message.display.incoming", with: [ sender, message], color: "gray", italic: true }) + bot.emit('profilelessChat', { translate: "commands.message.display.incoming", with: [ sender, message], color: "gray", italic: true }) break case 3: - bot.emit('message', [{ translate: "commands.message.display.outgoing", with: [ sender, message ], color: "gray", italic: true }]) + bot.emit('profilelessChat', [{ translate: "commands.message.display.outgoing", with: [ sender, message ], color: "gray", italic: true }]) break case 4: - bot.emit('message', [message]); + bot.emit('profilelessChat', [message]); break case 5: - bot.emit('message', [{ translate: 'chat.type.announcement', with: [ sender, message ]}]) + bot.emit('profilelessChat', [{ translate: 'chat.type.announcement', with: [ sender, message ]}]) break } tryParsingMessage(message, { senderName: sender, players: bot.players, getMessageAsPrismarine: bot.getMessageAsPrismarine }) @@ -56,16 +56,20 @@ function chat (bot, options, config) { bot.emit('player_chat', { plain: packet.plainMessage, unsigned, senderUuid: packet.senderUuid }) switch (packet.type) { case 5: - bot.emit('message', { translate: "chat.type.announcement", with: [ bot.players.find(player => player.uuid === packet.senderUuid).profile.name, packet.plainMessage ]}) + bot.emit('playerChat', { translate: "chat.type.announcement", with: [ bot.players.find(player => player.uuid === packet.senderUuid).profile.name, packet.plainMessage ]}) + break + case 4: + bot.emit('playerChat', unsigned); break case 3: - bot.emit('message', { translate: "commands.message.display.outgoing", with: [ bot.players.find(player => player.uuid === packet.senderUuid).profile.name, packet.plainMessage ], color: "gray", italic: true }) + bot.emit('playerChat', { translate: "commands.message.display.outgoing", with: [ bot.players.find(player => player.uuid === packet.senderUuid).profile.name, packet.plainMessage ], color: "gray", italic: true }) break case 2: - bot.emit('message', { translate: "commands.message.display.incoming", with: [ bot.players.find(player => player.uuid === packet.senderUuid).profile.name, packet.plainMessage ], color: "gray", italic: true }) + bot.emit('playerChat', { translate: "commands.message.display.incoming", with: [ bot.players.find(player => player.uuid === packet.senderUuid).profile.name, packet.plainMessage ], color: "gray", italic: true }) + break + case 1: + bot.emit('playerChat', { translate: "chat.type.emote", with: [ bot.players.find(player => player.uuid === packet.senderUuid).profile.name, packet.plainMessage ]}) break - default: - bot.emit('message', unsigned) } tryParsingMessage(unsigned, { senderUuid: packet.senderUuid, players: bot.players, getMessageAsPrismarine: bot.getMessageAsPrismarine }) }) @@ -82,11 +86,36 @@ function chat (bot, options, config) { return } - bot.emit('message', message) + bot.emit('systemChat', message) tryParsingMessage(message, { players: bot.players, getMessageAsPrismarine: bot.getMessageAsPrismarine }) }) + bot.on('packet.action_bar', (message) => { + let parsedMessage = tryParse(message.text) + bot.emit('actionBar', { + translate: '[%s] %s', + color: 'dark_gray', + with: [ + { text: "Action Bar", color: "light_purple" }, + parsedMessage + ] + }); + }) + + bot.on('packet.boss_bar', (data) => { + bot.emit('bossBar', { + translate: '[%s | %s: %s] %s', + color: 'dark_gray', + with: [ + { text: "Boss Bar", color: "dark_aqua" }, + { text: "Action ID", color: "blue" }, + { text: `${data.action}`, color: 'gold' }, + tryParse(data.title) + ] + }) + }) + function tryParsingMessage (message, data) { let parsed for (const parser of bot.chatParsers) { @@ -140,3 +169,4 @@ function chat (bot, options, config) { } } module.exports = chat; + diff --git a/src/modules/command_manager.js b/src/modules/command_manager.js index a54a404..67af16c 100644 --- a/src/modules/command_manager.js +++ b/src/modules/command_manager.js @@ -7,6 +7,7 @@ async function command_manager (bot, options, config, discordClient) { bot.commandManager = { commands: {}, commandlist: [], + collection: new Collection(), execute (source, commandName, args) { const command = this.getCommand(commandName.toLowerCase()); try { @@ -20,7 +21,7 @@ async function command_manager (bot, options, config, discordClient) { } } else if (!source?.sources?.discord && !source?.sources?.console) { if (!command || !command.execute) - throw new CommandError({ + bot.tellraw("@a", { translate: "%s%s%s %s", color: "dark_gray", with: [ @@ -50,6 +51,7 @@ async function command_manager (bot, options, config, discordClient) { } ]) } + if (command?.trustLevel > 0) { const event = bot.discord.message; const roles = event?.member?.roles?.cache; @@ -84,7 +86,7 @@ async function command_manager (bot, options, config, discordClient) { return command?.execute({ bot, source, arguments: args, config, discordClient }); } } catch (error) { - console.error(error.stack) + console.error(error) if (source?.sources?.discord && !source?.sources?.console) { const Embed = new EmbedBuilder() .setColor(`${config.colors.discord.error}`) @@ -100,7 +102,17 @@ async function command_manager (bot, options, config, discordClient) { if (bot.options.isSavage || bot.options.isCreayun) { bot.chat.message(`&4${error.message}`) } else { - bot.tellraw("@a", error._message) +// console.log(error.toString()); + if (error.toString().length > 256) { + bot.tellraw("@a", error._message); + } else if (error.toString().length < 256) { + bot.chat.message(`${bot.getMessageAsPrismarine(error._message)?.toMotd().replaceAll('§','&')}`) + /*}*else if (error.toString().length < 256 && error._useChat === false) { + bot.tellraw("@a", error._message);*/ + } else { + bot.tellraw("@a", error._message); + } +// bot.tellraw("@a", error._message) } } else { if (bot.options.isSavage || bot.options.isCreayun) { @@ -120,9 +132,9 @@ async function command_manager (bot, options, config, discordClient) { discordExecute(source, command) { const [commandName, ...args] = command.split(" "); - if (source?.sources?.discord && !source.sources.console) { + if (source?.sources?.discord && !source?.sources?.console) { return this.discordExecute(source, commandName, args) - } + } }, register (command) { @@ -155,6 +167,7 @@ async function command_manager (bot, options, config, discordClient) { } if (filename.endsWith('.js')) { let commands = require(path.join(__dirname, '../commands', filename)); bot.commandManager.register(commands); + bot.commandManager.collection.set(commands.name, commands) bot.commandManager.commandlist.push(commands); } } catch (error) { diff --git a/src/modules/console.js b/src/modules/console.js index 530bbde..9ca03a0 100644 --- a/src/modules/console.js +++ b/src/modules/console.js @@ -1,7 +1,7 @@ const CommandSource = require('../util/command_source'); const prismarineChat = require('prismarine-chat')('1.20.2'); function Console (bot, options, config) { - let rateLimit = 0; + let ratelimit = 0; bot.console = { readline: null, server: 'all', @@ -66,17 +66,74 @@ function Console (bot, options, config) { } } } - bot.on('message', (message) => { + setInterval(() => ratelimit = 0, 1000 * 2); + + bot.on('profilelessChat', (message) => { + if (!options.logging) return; + bot.console.log(bot.getMessageAsPrismarine(message)?.toAnsi()); + bot.console.fileLogger(`[${new Date().toLocaleTimeString("en-US", { timeZone: "America/CHICAGO", })} ${new Date().toLocaleDateString("en-US", { timeZone: "America/CHICAGO", })} logs] [${options.serverName}] ${bot.getMessageAsPrismarine(message)?.toString()}`); + }) + + bot.on('systemChat', (message) => { + if (!options.logging) return; + if (ratelimit > 15) return; + bot.console.log(bot.getMessageAsPrismarine(message)?.toAnsi()); + bot.console.fileLogger(`[${new Date().toLocaleTimeString("en-US", { timeZone: "America/CHICAGO", })} ${new Date().toLocaleDateString("en-US", { timeZone: "America/CHICAGO", })} logs] [${options.serverName}] ${bot.getMessageAsPrismarine(message)?.toString()}`); + ratelimit++ + }) + + bot.on('playerChat', (message) => { + if (!options.logging) return; + if (ratelimit > 15) return; + bot.console.log(bot.getMessageAsPrismarine(message)?.toAnsi()); + bot.console.fileLogger(`[${new Date().toLocaleTimeString("en-US", { timeZone: "America/CHICAGO", })} ${new Date().toLocaleDateString("en-US", { timeZone: "America/CHICAGO", })} logs] [${options.serverName}] ${bot.getMessageAsPrismarine(message)?.toString()}`); + ratelimit++ + }) +// console.log(ratelimit) + bot.on('bossBar', (message) => { + if (!options.logging) return; + if (ratelimit > 10) return; + bot.console.log(bot.getMessageAsPrismarine(message)?.toAnsi()); + bot.console.fileLogger(`[${new Date().toLocaleTimeString("en-US", { timeZone: "America/CHICAGO", })} ${new Date().toLocaleDateString("en-US", { timeZone: "America/CHICAGO", })} logs] [${options.serverName}] ${bot.getMessageAsPrismarine(message)?.toString()}`); + ratelimit++ + }) + + bot.on('actionBar', (message) => { + if (!options.logging) return; + if (ratelimit > 10) return + bot.console.log(bot.getMessageAsPrismarine(message)?.toAnsi()); + bot.console.fileLogger(`[${new Date().toLocaleTimeString("en-US", { timeZone: "America/CHICAGO", })} ${new Date().toLocaleDateString("en-US", { timeZone: "America/CHICAGO", })} logs] [${options.serverName}] ${bot.getMessageAsPrismarine(message)?.toString()}`); + ratelimit++ + }) + +/* +setInterval(() => spamCount = 0, 1000 * 2) + + bot.on('message', message => { + if (spamCount > 300) { + console.log('WTF spam detected not logging') + return + } + + const ansi = bot.getMessageAsPrismarine(message)?.toAnsi() + const string = bot.getMessageAsPrismarine(message)?.toString() + const now = new Date().toLocaleString() + + + spamCount++ +*/ + +/* bot.on('message', (message) => { rateLimit++ setTimeout(() => { rateLimit-- }, 1000) if (!options.logging) return; -/* if (rateLimit > 100) { + if (rateLimit > 100) { return - }*/ + } bot.console.log(bot.getMessageAsPrismarine(message)?.toAnsi()); bot.console.fileLogger(`[${new Date().toLocaleTimeString("en-US", { timeZone: "America/CHICAGO", })} ${new Date().toLocaleDateString("en-US", { timeZone: "America/CHICAGO", })} logs] [${options.serverName}] ${bot.getMessageAsPrismarine(message)?.toString()}`); - }) + })*/ } module.exports = Console; diff --git a/src/modules/discord.js b/src/modules/discord.js index 404ba18..2c6dc9a 100644 --- a/src/modules/discord.js +++ b/src/modules/discord.js @@ -1,10 +1,10 @@ // TODO: Maybe move client creation elsepwhere -const { Client, GatewayIntentBits, interaction } = require('discord.js') -const { MessageContent, GuildMessages, Guilds } = GatewayIntentBits +//const { Client, GatewayIntentBits, interaction } = require('discord.js') +//const { MessageContent, GuildMessages, Guilds } = GatewayIntentBits const fixansi = require('../util/ansi'); const CommandSource = require('../util/command_source') -const client = new Client({ intents: [Guilds, GuildMessages, MessageContent] }) +//const client = new Client({ intents: [Guilds, GuildMessages, MessageContent] }) const util = require('util') function discord(bot, options, config, discordClient) { @@ -57,10 +57,22 @@ function discord(bot, options, config, discordClient) { sendDiscordMessage(e.message) } } - bot.on('message', message => { - sendComponent(message) + + bot.on('profilelessChat', (message) => { + sendComponent(message); }) + bot.on('systemChat', (message) => { + sendComponent(message); + }) + + bot.on('playerChat', (message) => { + sendComponent(message); + }) +/* bot.on('message', message => { + sendComponent(message) + })*/ + function messageCreate(message, source) { bot.discord.message = message; if (message.author.id === bot.discord.client.user.id) return diff --git a/src/modules/reconnect.js b/src/modules/reconnect.js index 8d97338..bcf6393 100644 --- a/src/modules/reconnect.js +++ b/src/modules/reconnect.js @@ -2,10 +2,15 @@ const mc = require('minecraft-protocol'); const usernameGen = require("../util/usernameGen"); function reconnect (bot, options, config) { bot.on('end', () => { + //bot = undefined; + + bot._client.removeAllListeners(); + //client = undefined; + //bot._client = undefined; if (bot.reconnectDelay < 0) return setTimeout(() => { if (options.usernameGen) { - client = options.client ?? mc.createClient(options, bot.options.username = usernameGen(bot)) + client = options.client ?? mc.createClient(options, options.username = usernameGen(bot)) } else { client = options.client ?? mc.createClient(options) } diff --git a/src/modules/selfcare.js b/src/modules/selfcare.js index 23e9f88..0ca6d71 100644 --- a/src/modules/selfcare.js +++ b/src/modules/selfcare.js @@ -16,7 +16,7 @@ function selfcare (bot, options, config) { bot.vanished = true // You now have the tag: &8[&bPrefix&8: &3~&8] // You no longer have a tag - bot.on('message', (message) => { + bot.on('systemChat', (message) => { const stringMessage = bot.getMessageAsPrismarine(message)?.toString(); if (options.isSavage) { if (stringMessage === "Please, login with the command: /login ") login = true; @@ -82,6 +82,7 @@ You already have registered this username! }) bot.on("packet.position", (packet, position) => { + if (options.isSavage || options.isCreayun) return positionCount++ setTimeout(() => { positionCount-- diff --git a/src/util/command_error.js b/src/util/command_error.js index de12caf..f613992 100644 --- a/src/util/command_error.js +++ b/src/util/command_error.js @@ -1,12 +1,14 @@ // TODO: Improve how messages are stringified const ChatMessage = require('prismarine-chat')('1.20.2') -const stringify = message => new ChatMessage(message).toString() +const stringify = message => new ChatMessage(message)?.toString() class CommandError extends Error { - constructor (message, filename, lineError) { - super(stringify(message), filename, lineError) + constructor (message, filename, lineError, useChat) { + super(stringify(message), filename, lineError, useChat) this.name = 'CommandError' this._message = message + return this._useChat = useChat +// this._useChat = useChat } get message () {