2023-04-25 20:06:08 +00:00
// @ts-check
2023-04-30 12:57:30 +00:00
// Discord library internals type beat
2023-05-04 20:25:00 +00:00
const DiscordTypes = require ( "discord-api-types/v10" )
2023-03-05 16:05:35 +00:00
const passthrough = require ( "../passthrough" )
const { sync } = passthrough
2023-04-25 20:06:08 +00:00
/** @type {typeof import("./event-dispatcher")} */
const eventDispatcher = sync . require ( "./event-dispatcher" )
2023-03-05 16:05:35 +00:00
const utils = {
/ * *
2023-04-25 20:06:08 +00:00
* @ param { import ( "./discord-client" ) } client
2023-03-05 16:05:35 +00:00
* @ param { import ( "cloudstorm" ) . IGatewayMessage } message
* /
onPacket ( client , message ) {
if ( message . t === "READY" ) {
if ( client . ready ) return
client . ready = true
client . user = message . d . user
client . application = message . d . application
console . log ( ` Discord logged in as ${ client . user . username } # ${ client . user . discriminator } ( ${ client . user . id } ) ` )
} else if ( message . t === "GUILD_CREATE" ) {
client . guilds . set ( message . d . id , message . d )
const arr = [ ]
client . guildChannelMap . set ( message . d . id , arr )
for ( const channel of message . d . channels || [ ] ) {
2023-05-04 20:25:00 +00:00
// @ts-ignore
channel . guild _id = message . d . id
2023-03-05 16:05:35 +00:00
arr . push ( channel . id )
client . channels . set ( channel . id , channel )
}
} else if ( message . t === "GUILD_DELETE" ) {
client . guilds . delete ( message . d . id )
const channels = client . guildChannelMap . get ( message . d . id )
if ( channels ) {
for ( const id of channels ) client . channels . delete ( id )
}
client . guildChannelMap . delete ( message . d . id )
} else if ( message . t === "CHANNEL_CREATE" || message . t === "CHANNEL_DELETE" ) {
if ( message . t === "CHANNEL_CREATE" ) {
client . channels . set ( message . d . id , message . d )
if ( message . d [ "guild_id" ] ) { // obj[prop] notation can be used to access a property without typescript complaining that it doesn't exist on all values something can have
const channels = client . guildChannelMap . get ( message . d [ "guild_id" ] )
if ( channels && ! channels . includes ( message . d . id ) ) channels . push ( message . d . id )
}
} else {
client . channels . delete ( message . d . id )
if ( message . d [ "guild_id" ] ) {
const channels = client . guildChannelMap . get ( message . d [ "guild_id" ] )
if ( channels ) {
const previous = channels . indexOf ( message . d . id )
if ( previous !== - 1 ) channels . splice ( previous , 1 )
}
}
}
2023-04-25 20:06:08 +00:00
} else if ( message . t === "MESSAGE_CREATE" ) {
eventDispatcher . onMessageCreate ( client , message . d )
} else if ( message . t === "MESSAGE_REACTION_ADD" ) {
eventDispatcher . onReactionAdd ( client , message . d )
}
2023-03-05 16:05:35 +00:00
}
}
module . exports = utils