173 lines
5.0 KiB
JavaScript
173 lines
5.0 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');
|
|
let running = false;
|
|
/**
|
|
* Emitted whenever clientOptions.checkUpdate = false
|
|
* @event Client#update
|
|
* @param {string} oldVersion Current version
|
|
* @param {string} newVersion Latest version
|
|
*/
|
|
|
|
async function checkUpdate(client) {
|
|
const res_ = await axios
|
|
.get(`https://registry.npmjs.com/${encodeURIComponent('discord.js-selfbot-v13')}`)
|
|
.catch(() => {});
|
|
if (!res_) {
|
|
return client.emit(Events.DEBUG, `${chalk.redBright('[Fail]')} Check Update error`);
|
|
}
|
|
const latest_tag = res_.data['dist-tags'].latest;
|
|
if (client.options.checkUpdate) {
|
|
if (latest_tag !== Discord.version && Discord.version.includes('-') == false) {
|
|
if (!running) {
|
|
console.log(`
|
|
${chalk.yellowBright('[WARNING]')} New Discord.js-selfbot-v13 version.
|
|
Current: ${chalk.redBright(Discord.version)} => Latest: ${chalk.greenBright(latest_tag)}
|
|
|
|
If you don't want to show this message, set ${chalk.cyanBright('checkUpdate')} to false
|
|
|
|
new Client({
|
|
checkUpdate: false,
|
|
});
|
|
|
|
and using event update
|
|
https://discordjs-self-v13.netlify.app/#/docs/docs/main/class/Client?scrollTo=e-update\n`);
|
|
}
|
|
} else if (!running) {
|
|
console.log(
|
|
`
|
|
${chalk.greenBright('[OK]')} Discord.js-selfbot-v13 is up to date. Current: ${chalk.blueBright(Discord.version)}
|
|
|
|
If you don't want to show this message, set ${chalk.cyanBright('checkUpdate')} to false
|
|
|
|
new Client({
|
|
checkUpdate: false,
|
|
});
|
|
|
|
and using event update
|
|
https://discordjs-self-v13.netlify.app/#/docs/docs/main/class/Client?scrollTo=e-update\n`,
|
|
);
|
|
}
|
|
} else {
|
|
client.emit('update', Discord.version, latest_tag);
|
|
}
|
|
running = true;
|
|
return undefined;
|
|
}
|
|
|
|
module.exports = async (client, { d: data }, shard) => {
|
|
checkUpdate(client);
|
|
|
|
if (client.options.patchVoice && !running) {
|
|
/* eslint-disable */
|
|
VoiceConnection.prototype.configureNetworking = function () {
|
|
const { server, state } = this.packets;
|
|
if (
|
|
!server ||
|
|
!state ||
|
|
this.state.status === VoiceConnectionStatus.Destroyed /* 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 /* Connecting */,
|
|
networking,
|
|
};
|
|
};
|
|
client.emit(
|
|
Events.DEBUG,
|
|
`${chalk.greenBright('[OK]')} Patched ${chalk.cyanBright(
|
|
'VoiceConnection.prototype.configureNetworking',
|
|
)} [${chalk.bgMagentaBright('@discordjs/voice')} - ${chalk.redBright('v0.11.0')}]`,
|
|
);
|
|
/* 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.settings._patch(data.user_settings);
|
|
|
|
client.user.connectedAccounts = data.connected_accounts ?? [];
|
|
|
|
client.user._patchNote(data.notes);
|
|
|
|
const syncTime = Date.now();
|
|
for (const private_channel of data.private_channels) {
|
|
const channel = client.channels._add(private_channel);
|
|
// Rate limit warning
|
|
if (client.options.DMSync) {
|
|
client.ws.broadcast({
|
|
op: Opcodes.DM_UPDATE,
|
|
d: {
|
|
channel_id: channel.id,
|
|
},
|
|
});
|
|
}
|
|
}
|
|
if (client.options.DMSync) {
|
|
console.warn(
|
|
`Gateway Rate Limit Warning: Sending ${data.private_channels.length} Requests / ${Date.now() - syncTime || 1} ms`,
|
|
);
|
|
}
|
|
|
|
if (client.options.readyStatus && !running) {
|
|
client.customStatusAuto(client);
|
|
}
|
|
|
|
for (const guild of data.guilds) {
|
|
guild.shardId = shard.id;
|
|
client.guilds._add(guild);
|
|
}
|
|
|
|
// Receive messages in large guilds
|
|
for (const guild of data.guilds) {
|
|
await client.sleep(client.options.messageCreateEventGuildTimeout);
|
|
client.ws.broadcast({
|
|
op: Opcodes.LAZY_REQUEST,
|
|
d: {
|
|
guild_id: guild.id,
|
|
typing: true,
|
|
threads: true,
|
|
activities: true,
|
|
thread_member_lists: [],
|
|
members: [],
|
|
channels: {},
|
|
},
|
|
});
|
|
}
|
|
|
|
client.relationships._setup(data.relationships);
|
|
|
|
shard.checkReady();
|
|
};
|