fix: ClientUser.notes return empty Collection fix: Recieve messages from large servers #72 feat: checkUpdate return Debug event (not console.log) feat: RelationshipAdd event, param type return RelationshipTypes feat: online status when login feat: fix documents
		
			
				
	
	
		
			143 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			143 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 'use strict';
 | |
| 
 | |
| let ClientUser;
 | |
| const { VoiceConnection, VoiceConnectionStatus } = require('@discordjs/voice');
 | |
| const axios = require('axios');
 | |
| const chalk = require('chalk');
 | |
| const Discord = require('../../../index');
 | |
| const { Events, Opcodes } = require('../../../util/Constants');
 | |
| const { Networking } = require('../../../util/Voice');
 | |
| 
 | |
| async function checkUpdate(client) {
 | |
|   const res_ = await axios.get(`https://registry.npmjs.com/${encodeURIComponent('discord.js-selfbot-v13')}`);
 | |
|   const lastest_tag = res_.data['dist-tags'].latest;
 | |
|   // Checking if the package is outdated
 | |
|   // Stable version
 | |
|   if (lastest_tag !== Discord.version && Discord.version.includes('-') == false) {
 | |
|     return client.emit(
 | |
|       Events.DEBUG,
 | |
|       `${chalk.yellowBright('[WARNING]')} New Discord.js-selfbot-v13 version.
 | |
| Old Version: ${chalk.redBright(Discord.version)} => New Version: ${chalk.greenBright(lastest_tag)}`,
 | |
|     );
 | |
|   }
 | |
|   client.emit(
 | |
|     Events.DEBUG,
 | |
|     `${chalk.greenBright('[OK]')} Discord.js-selfbot-v13 is up to date. Version: ${chalk.blueBright(Discord.version)}`,
 | |
|   );
 | |
|   return null;
 | |
| }
 | |
| 
 | |
| module.exports = (client, { d: data }, shard) => {
 | |
|   if (client.options.checkUpdate) {
 | |
|     try {
 | |
|       checkUpdate(client);
 | |
|     } catch (e) {
 | |
|       client.emit(Events.DEBUG, `${chalk.redBright('[Fail]')} Check Update error: ${e.message}`);
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   if (client.options.patchVoice) {
 | |
|     /* eslint-disable */
 | |
|     VoiceConnection.prototype.configureNetworking = function () {
 | |
|       const { server, state } = this.packets;
 | |
|       if (!server || !state || this.state.status === VoiceConnectionStatus.Destroyed || !server.endpoint) return;
 | |
|       const networking = new Networking(
 | |
|         {
 | |
|           endpoint: server.endpoint,
 | |
|           serverId: server.guild_id ?? server.channel_id,
 | |
|           token: server.token,
 | |
|           sessionId: state.session_id,
 | |
|           userId: state.user_id,
 | |
|         },
 | |
|         Boolean(this.debug),
 | |
|       );
 | |
|       networking.once('close', this.onNetworkingClose);
 | |
|       networking.on('stateChange', this.onNetworkingStateChange);
 | |
|       networking.on('error', this.onNetworkingError);
 | |
|       networking.on('debug', this.onNetworkingDebug);
 | |
|       this.state = {
 | |
|         ...this.state,
 | |
|         status: VoiceConnectionStatus.Connecting,
 | |
|         networking,
 | |
|       };
 | |
|     };
 | |
|     client.emit(
 | |
|       Events.DEBUG,
 | |
|       `${chalk.greenBright('[OK]')} Patched VoiceConnection.prototype.configureNetworking [@discordjs/voice]`,
 | |
|     );
 | |
|     /* eslint-enable */
 | |
|   }
 | |
| 
 | |
|   client.session_id = data.session_id;
 | |
|   if (client.user) {
 | |
|     client.user._patch(data.user);
 | |
|   } else {
 | |
|     ClientUser ??= require('../../../structures/ClientUser');
 | |
|     client.user = new ClientUser(client, data.user);
 | |
|     client.users.cache.set(client.user.id, client.user);
 | |
|   }
 | |
| 
 | |
|   client.user.setAFK(false);
 | |
| 
 | |
|   client.setting._patch(data.user_settings);
 | |
| 
 | |
|   client.user.connectedAccounts = data.connected_accounts ?? [];
 | |
| 
 | |
|   client.user._patchNote(data.notes);
 | |
| 
 | |
|   for (const private_channel of data.private_channels) {
 | |
|     client.channels._add(private_channel);
 | |
|   }
 | |
|   // Start event
 | |
|   client.on(Events.USER_SETTINGS_UPDATE, s => {
 | |
|     if (('status' in s || 'custom_status' in s) && client.options.readyStatus) {
 | |
|       client.customStatusAuto(client);
 | |
|     }
 | |
|   });
 | |
| 
 | |
|   /**
 | |
|    * Read_state: Return Array:
 | |
|    *     {
 | |
|    *      mention_count: 14, // ok it's ping count
 | |
|    *      last_pin_timestamp: '1970-01-01T00:00:00+00:00', // why discord ?
 | |
|    *      last_message_id: 0, // :)
 | |
|    *      id: '840218426969817119' // channel id
 | |
|    *	   },
 | |
|    */
 | |
| 
 | |
|   /*
 | |
| 	for (const object of data.read_state) {
 | |
| 		if (object.mention_count == 0) continue;
 | |
| 		client.user.messageMentions.set(object.id, object);
 | |
| 	}
 | |
| 	*/
 | |
| 
 | |
|   for (const guild of data.guilds) {
 | |
|     guild.shardId = shard.id;
 | |
|     client.guilds._add(guild);
 | |
|   }
 | |
| 
 | |
|   // Receive messages in large guilds
 | |
|   client.guilds.cache.map(guild => {
 | |
|     client.ws.broadcast({
 | |
|       op: Opcodes.LAZY_REQUEST,
 | |
|       d: {
 | |
|         guild_id: guild.id,
 | |
|         typing: true,
 | |
|         threads: false,
 | |
|         activities: true,
 | |
|         thread_member_lists: [],
 | |
|         members: [],
 | |
|         channels: {
 | |
|           // [guild.channels.cache.first().id]: [[0, 99]],
 | |
|         },
 | |
|       },
 | |
|     });
 | |
|     return true;
 | |
|   });
 | |
| 
 | |
|   client.relationships._setup(data.relationships);
 | |
| 
 | |
|   shard.checkReady();
 | |
| };
 |