2023-12-17 14:55:27 -05:00
// 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 )
2024-01-12 12:24:01 -05:00
function discord ( bot , options ) {
2023-12-17 14:55:27 -05:00
if ( ! options . discord ? . channelId ) {
bot . discord = { invite : options . discord ? . invite }
return
}
2024-01-26 21:24:08 -05:00
const ChatMessage = require ( 'prismarine-chat' ) ( bot . options . version )
2023-12-17 14:55:27 -05:00
bot . discord = {
client ,
channel : undefined ,
invite : options . discord . invite || undefined ,
commandPrefix : options . discord . commandPrefix
}
client . on ( 'ready' , ( context ) => {
2023-12-26 18:45:18 -05:00
//setMaxListeners(Infinity)
client . setMaxListeners ( 25 )
bot . discord . channel = client . channels . cache . get ( options . discord . channelId )
2023-12-17 14:55:27 -05:00
bot . discord . channel . send ( ` \` \` \` \n Starting ${ process . env [ "buildstring" ] } ...... \n \` \` \` ` )
bot . discord . channel . send ( ` \` \` \` \n Foundation: ${ process . env [ "FoundationBuildString" ] } \n \` \` \` ` )
bot . discord . channel . send ( ` \` \` \` \n Successfully 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`\`\`')
/ * b o t . o n ( ' m e s s a g e ' , ( m e s s a g e ) = > {
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 ) {
2024-01-12 12:24:01 -05:00
const lang = require ( ` ../util/language/lolus.json ` )
2023-12-17 14:55:27 -05:00
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
2023-12-20 11:54:03 -05:00
//
2023-12-17 14:55:27 -05:00
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 )
2024-01-26 21:24:08 -05:00
//console.log(message.content)
2023-12-17 14:55:27 -05:00
}
bot . commandManager . executeString ( source , message . content . substring ( bot . discord . commandPrefix . length ) )
return
}
2024-01-27 10:34:27 -05:00
if ( ! bot . options . Core . enabled ) {
2024-01-26 21:24:08 -05:00
bot . chat ( ` &8[&5FNF&bBoyfriend&4Bot &9Discord&8] ${ message . member . displayName . replaceAll ( '\xa7' , '&' ) } &f › ${ message . content . replaceAll ( '\xa7' , '&' ) } ` )
} else {
2023-12-17 14:55:27 -05:00
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
]
} )
}
2024-01-26 21:24:08 -05:00
}
2023-12-17 14:55:27 -05:00
client . on ( 'messageCreate' , messageCreate )
2023-12-29 16:15:50 -05:00
bot . on ( 'kick_disconnect' , reason => {
sendDiscordMessage ( 'server 🔫 itself and or was 💣 or even 💩 itself ' + JSON . stringify ( reason ) )
//sendDiscordMessage(reason)
2023-12-17 14:55:27 -05:00
2023-12-29 16:15:50 -05:00
} )
bot . on ( 'disconnect' , reason => {
sendDiscordMessage ( JSON . stringify ( reason ) )
//sendDiscordMessage(reason)
} )
2024-01-26 21:24:08 -05:00
bot . on ( 'packet.login' , ( data ) => {
sendDiscordMessage ( ` Connecting to ${ bot . options . host } : ${ bot . options . port } ` )
} )
2023-12-29 16:15:50 -05:00
bot . on ( 'end' , reason => {
sendDiscordMessage ( JSON . stringify ( reason ) )
//sendDiscordMessage(reason)
} )
bot . on ( 'error' , ( error , reason , data ) => {
sendDiscordMessage ( '🔫 shot itself' )
2023-12-17 14:55:27 -05:00
sendDiscordMessage ( ` Disconnected: ${ error . stack } ` )
//sendDiscordMessage(reason)
} )
2024-01-26 21:24:08 -05:00
process . on ( "uncaughtException" , ( e ) => {
sendDiscordMessage ( "uncaught " + e . stack ) ;
} ) ;
2023-12-17 14:55:27 -05:00
/ * b o t . o n ( ' e n d ' , ( r e a s o n , e v e n t ) = > {
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 })
/ * b o t . c o n s o l e . i n f o (
` 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 ;
}
}
//
2024-01-12 12:24:01 -05:00
module . exports = discord