// TODO: Maybe move client creation elsewhere const { escapeMarkdown } = require('../util/escapeMarkdown') const { Client, GatewayIntentBits } = require('discord.js') const { MessageContent, GuildMessages, Guilds } = GatewayIntentBits const CommandSource = require('../CommandModules/command_source') const client = new Client({ intents: [Guilds, GuildMessages, MessageContent] }) const util = require('util') client.login(process.env.discordtoken) function discord (bot, options) { if (!options.discord?.channelId) { bot.discord = { invite: options.discord?.invite } return } const ChatMessage = require('prismarine-chat')(bot.options.version) bot.discord = { client, channel: undefined, invite: options.discord.invite || undefined, commandPrefix: options.discord.commandPrefix } client.on('ready', (context) => { //setMaxListeners(Infinity) client.setMaxListeners(25) bot.discord.channel = client.channels.cache.get(options.discord.channelId) bot.discord.channel.send(`\`\`\`\nStarting ${process.env["buildstring"]}......\n\`\`\``) bot.discord.channel.send(`\`\`\`\nFoundation: ${process.env["FoundationBuildString"]}\n\`\`\``) bot.discord.channel.send(`\`\`\`\nSuccessfully logged into discord as ${bot.discord.client.user.username}#${bot.discord.client.user.discriminator}\n\`\`\``) bot.console.info(`Successfully logged into discord as ${bot.discord.client.user.username}#${bot.discord.client.user.discriminator}`) }) // I feel like this is a modified version of ChomeNS Bot's discord plugin (the js one ofc) lol - chayapak let discordQueue = [] setInterval(() => { if (discordQueue.length === 0) return try { bot.discord.channel.send(`\`\`\`ansi\n${discordQueue.join('\n').substring(0, 1984)}\n\`\`\``) } catch (error) { //ansi real bot.console.error(error.stack) }//im pretty sure the discord code is as old as the discord relay prototypes lmao //sus discordQueue = [] }, 2000) //const ansi = bot.getMessageAsPrismarine(message).toAnsi(lang).replaceAll('``\`\`\u200b\ansi\n\`\`\u001b[9', '\u001b[3\n`\`\`') /* bot.on('message', (message) => { const cleanMessage = escapeMarkdown(message.toAnsi(), true) const discordMsg = cleanMessage .replaceAll('@', '@\u200b') .replaceAll('http', 'http\u200b') .replaceAll('\u001b[9', '\u001b[3') queue += '\n' + discordMsg }) */ function sendDiscordMessage (message) { discordQueue.push(message) } /* const cleanMessage = escapeMarkdown(message.toAnsi(), true) const discordMsg = cleanMessage .replaceAll('@', '@\u200b') .replaceAll('http', 'http\u200b') .replaceAll('\u001b[9', '\u001b[3') */ //`\`\`\`\n \n\`\`\` function sendComponent (message) { const lang = require(`../util/language/lolus.json`) const ansi = bot.getMessageAsPrismarine(message).toAnsi(lang).replaceAll('```\u001b[9```' + '```\u001b[3```')// I have a function to fix ansi :shrug: /* would it be better to do ``` message1 message2 message3... ``` and not ``` message1 ``` ```` message2 ```` ```` message3... ``` */ const now = new Date().toLocaleString("en-US",{timeZone:"America/CHICAGO"})//real try { sendDiscordMessage(fixansi(ansi.replaceAll('`', '`\u200b'))) //'```ansi\n' + fixansi(ansi.replaceAll('\u200b').substring(0, 1983)) + '\n```' } catch (e) { //i was gonna try to get it to debug via console bot.console.error(`Error sending a message to Discord:\n${e.message}`) sendDiscordMessage(e.message) //already tried ansi }//send isnt defined } // its still doing the ansi crap //;/ //wait a min it shows smh about unable to read properties of undefined (reading 'send') in the console or smh on startup // its the messages it sending read lines 69 to 86 // i see bot.on('message', message => { sendComponent(message) }) function messageCreate (message) { if (message.author.id === bot.discord.client.user.id) return if (message.channel.id !== bot.discord.channel.id) return // if (message.content.startsWith(bot.discord.commandPrefix)) { // TODO: Don't hardcode this const source = new CommandSource({ profile: { name: message?.member?.displayName } }, { discord: true, console: false }, false, message) source.sendFeedback = message => { sendComponent(message) //console.log(message.content) } bot.commandManager.executeString(source, message.content.substring(bot.discord.commandPrefix.length)) return } if(bot.options.Core.CorelessMode){ bot.chat(`&8[&5FNF&bBoyfriend&4Bot &9Discord&8] ${message.member.displayName.replaceAll('\xa7', '&')}&f › ${message.content.replaceAll('\xa7', '&')}`) }else{ bot.tellraw({ translate: '[%s] %s \u203a %s', with: [ { translate: '%s%s%s %s', bold:false, with: [ { text: 'FNF', bold: false, color: 'dark_purple' }, { text: 'Boyfriend', bold: false, color: 'aqua' }, { text: 'Bot', bold: false, color: 'dark_red' }, { text: 'Discord', bold: false, color: 'blue' } ], clickEvent: bot.discord.invite ? { action: 'open_url', value: bot.discord.invite } : undefined, hoverEvent: { action: 'show_text', contents: 'Click to join the discord' } }, { text: message?.member?.displayName }, message.content ] }) } } client.on('messageCreate', messageCreate) bot.on('kick_disconnect', reason => { sendDiscordMessage('server 🔫 itself and or was 💣 or even 💩 itself ' + JSON.stringify(reason)) //sendDiscordMessage(reason) }) bot.on('disconnect', reason => { sendDiscordMessage(JSON.stringify(reason)) //sendDiscordMessage(reason) }) bot.on('packet.login', (data) => { sendDiscordMessage(`Connecting to ${bot.options.host}:${bot.options.port}`) }) bot.on('end', reason => { sendDiscordMessage(JSON.stringify(reason)) //sendDiscordMessage(reason) }) bot.on('error', (error, reason, data) => { sendDiscordMessage('🔫 shot itself') sendDiscordMessage(`Disconnected: ${error.stack}`) //sendDiscordMessage(reason) }) process.on("uncaughtException", (e) => { sendDiscordMessage("uncaught " + e.stack); }); /*bot.on('end', (reason, event) => { sendDiscordMessage('event:' + event) sendDiscordMessage('Reason:' + util.inspect(reason)) })*/ //client.on('end', reason => { bot.emit('end', reason) //client.on('keep_alive', ({ keepAliveId }) => { //bot.emit('keep_alive', { keepAliveId }) /* bot.console.info( `Disconnected from ${bot.server.host} (${event} event): ${util.inspect(reason)}` ) channel.send(`Disconnected: \`${util.inspect(reason)}\``) */ function fixansi(message) { const ansilist = { "\x1B\[93m": "\x1B[33m", // Yellow "\x1B\[96m": "\x1B[36m", // Blue "\x1B\[94m": "\x1B[34m", // Discord Blue "\x1B\[90m": "\x1B[30m", // Gray "\x1B\[91m": "\x1B[31m", // Light Red "\x1B\[95m": "\x1B\[35m", // Pink "\x1B\[92m": "\x1B\[32m", // Green "\x1B\[0m": "\x1B\[0m\x1B\[37m", // White "\x1B\[97m": "\x1B\[0m\x1B\[37m", // White }; let i = message; for (const ansi in ansilist) { if (ansilist.hasOwnProperty(ansi)) { i = i.replace(new RegExp(escapeRegExpChars(ansi), 'g'), ansilist[ansi]); function escapeRegExpChars(text) { return text.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); } } } return i; } } // module.exports = discord