import { Client , Intents } from "discord.js" ;
import assert from "assert" ;
import { TOKEN , chat _secret } from "./secrets/discord.js" ;
import http from "http" ;
import { io } from "socket.io-client" ;
const server = http . createServer ( ) ;
const socket = io ( "ws://localhost:5001" ) ;
socket . io . on ( "error" , ( error ) => {
console . error ( error ) ;
} ) ;
socket . io . on ( "ping" , ( ) => {
console . log ( "PING" ) ;
} ) ;
socket . on ( "connect" , ( ) => {
console . log ( "CONNECTED" , socket . connected ) ;
} ) ;
const client = new Client ( {
intents : [
Intents . FLAGS . GUILDS ,
Intents . FLAGS . GUILD _MEMBERS ,
Intents . FLAGS . GUILD _MESSAGES ,
Intents . FLAGS . GUILD _MESSAGE _REACTIONS ,
Intents . FLAGS . DIRECT _MESSAGE _REACTIONS ,
Intents . FLAGS . GUILD _INVITES ,
Intents . FLAGS . DIRECT _MESSAGES
] ,
partials : [ "REACTION" , "MESSAGE" , "CHANNEL" , "GUILD_MEMBER" ] ,
allowedMentions : {
parse : [ "users" , "roles" , "everyone" ] ,
repliedUser : true
}
} ) ;
const load _guild _channel = async ( client ) => {
const guilds = await client . guilds . fetch ( ) ;
let temp = guilds . entries ( ) . next ( ) . value [ 1 ] ;
assert ( temp , "Can't find any guilds/servers." ) ;
const guild = await temp . fetch ( ) ;
assert ( guild , "No guild after fetch." ) ;
const channels = await guild . channels . fetch ( ) ;
for ( let chan of channels . entries ( ) ) {
if ( chan [ 1 ] . type === "GUILD_TEXT" ) {
// remember, return await puts the errors here
return [ guild , await chan [ 1 ] . fetch ( ) ] ;
}
}
// fallthrough, no text channels
return [ guild , undefined ] ;
}
client . login ( TOKEN ) ;
let [ guild , channel ] = await load _guild _channel ( client ) ;
assert ( channel !== undefined , "Did not find one text channel." ) ;
console . log ( "Connected to Sever/Guild" , guild . name ) ;
console . log ( "Sending invites from Channel" , channel . name ) ;
const create _invite = async ( channel ) => {
return await channel . createInvite ( {
maxAge : 120 , maxUses : 1 , unique : true
} ) ;
}
client . on ( "ready" , async ( ) => {
console . log ( "Ready." ) ;
} ) ;
const all _events = [
"apiRequest" ,
"apiResponse" ,
"channelCreate" ,
"channelDelete" ,
"channelPinsUpdate" ,
"channelUpdate" ,
"debug" ,
"emojiCreate" ,
"emojiDelete" ,
"emojiUpdate" ,
"error" ,
"guildBanAdd" ,
"guildBanRemove" ,
"guildCreate" ,
"guildDelete" ,
"guildIntegrationsUpdate" ,
"guildMemberAdd" ,
"guildMemberAvailable" ,
"guildMemberRemove" ,
"guildMembersChunk" ,
"guildMemberUpdate" ,
"guildScheduledEventCreate" ,
"guildScheduledEventDelete" ,
"guildScheduledEventUpdate" ,
"guildScheduledEventUserAdd" ,
"guildScheduledEventUserRemove" ,
"guildUnavailable" ,
"guildUpdate" ,
"interactionCreate" ,
"invalidated" ,
"invalidRequestWarning" ,
"inviteCreate" ,
"inviteDelete" ,
"messageDelete" ,
"messageDeleteBulk" ,
"messageReactionAdd" ,
"messageReactionRemove" ,
"messageReactionRemoveAll" ,
"messageReactionRemoveEmoji" ,
"messageUpdate" ,
"presenceUpdate" ,
"rateLimit" ,
"roleCreate" ,
"roleDelete" ,
"roleUpdate" ,
"shardDisconnect" ,
"shardError" ,
"shardReady" ,
"shardReconnecting" ,
"shardResume" ,
"stageInstanceCreate" ,
"stageInstanceDelete" ,
"stageInstanceUpdate" ,
"stickerCreate" ,
"stickerDelete" ,
"stickerUpdate" ,
"threadCreate" ,
"threadDelete" ,
"threadListSync" ,
"threadMembersUpdate" ,
"threadMemberUpdate" ,
"threadUpdate" ,
"typingStart" ,
"userUpdate" ,
"voiceStateUpdate" ,
"warn" ,
"webhookUpdate" ,
] ;
client . on ( 'interactionCreate' , interaction => {
console . log ( "INTERACTION" , interaction ) ;
} ) ;
const BAN _LIST = { "zedshaw" : true } ;
client . on ( "messageCreate" , async msg => {
if ( msg . channel . type === "DM" ) {
console . log ( "DM FROM" , msg . author . username , msg . channel . type , msg . channel . name , msg . content ) ;
} else if ( msg . channel . name === "livestream" ) {
console . log ( ">>> LIVESTREAM CHAT MESSAGE FROM" , msg . author . username , msg . channel . type , msg . channel . name , msg . content ) ;
const initials = ` ${ msg . author . username [ 0 ] } ${ msg . author . username [ 1 ] } ` ;
socket . emit ( "/chat/message" , {
chat _secret , user _id : initials , text : msg . content
} ) ;
} else {
console . log ( "IGNORED MESSAGE FROM" , msg . author . username , "IN" , msg . channel . name ) ;
}
} ) ;
for ( let event of all _events ) {
client . on ( event , ( args ) => {
console . log ( "EVENT" , event , "ARGS" , args ) ;
} ) ;
}