mirror of
https://github.com/arthur-pbty/discord.js-selfbot.git
synced 2026-06-03 15:07:23 +02:00
342 lines
11 KiB
JavaScript
342 lines
11 KiB
JavaScript
const axios = require('axios');
|
|
const { cp } = require('fs');
|
|
const WebSocket = require('ws');
|
|
|
|
class EventEmitter {
|
|
constructor() {
|
|
this.events = {};
|
|
}
|
|
|
|
on(event, listener) {
|
|
if (!this.events[event]) {
|
|
this.events[event] = [];
|
|
}
|
|
this.events[event].push(listener);
|
|
}
|
|
|
|
emit(event, ...args) {
|
|
if (this.events[event]) {
|
|
this.events[event].forEach(listener => {
|
|
listener(...args);
|
|
});
|
|
}
|
|
}
|
|
}
|
|
|
|
class Client extends EventEmitter {
|
|
constructor() {
|
|
super();
|
|
this.baseUrl = 'https://discord.com/api/v10';
|
|
}
|
|
|
|
async login(token) {
|
|
try {
|
|
this.token = token;
|
|
const user = await this.getUser();
|
|
this.user = user;
|
|
this.emit('ready');
|
|
this.initWebSocket();
|
|
} catch (error) {
|
|
console.error('Erreur lors de l\'initialisation :', error);
|
|
}
|
|
}
|
|
|
|
initWebSocket() {
|
|
// Simplified example to open a WebSocket connection
|
|
this.ws = new WebSocket('wss://gateway.discord.gg/?v=10&encoding=json')
|
|
|
|
this.ws.on('open', () => {
|
|
|
|
// Envoyer un payload pour identifier et initialiser la session
|
|
this.ws.send(JSON.stringify({
|
|
op: 2,
|
|
d: {
|
|
token: this.token,
|
|
intents: 3276799, // Intents pour avoir tous les événements
|
|
properties: {
|
|
$os: 'linux',
|
|
$browser: 'my_library',
|
|
$device: 'my_library'
|
|
}
|
|
}
|
|
}));
|
|
});
|
|
|
|
this.ws.on('message', (data) => {
|
|
const payload = JSON.parse(data);
|
|
|
|
// Vérifier le type de l'événement reçu
|
|
switch (payload.op) {
|
|
case 10: // Hello
|
|
// Répondre avec le heartbeat
|
|
const interval = payload.d.heartbeat_interval;
|
|
setInterval(() => {
|
|
this.ws.send(JSON.stringify({
|
|
op: 1,
|
|
d: null
|
|
}));
|
|
}, interval);
|
|
break;
|
|
case 0: // Dispatch
|
|
const { t, d } = payload;
|
|
switch (t) {
|
|
case 'APPLICATION_COMMAND_PERMISSIONS_UPDATE':
|
|
this.emit('applicationCommandPermissionsUpdate', d);
|
|
break;
|
|
case 'AUTO_MODERATION_ACTION_EXECUTION':
|
|
this.emit('autoModerationActionExecution', d);
|
|
break;
|
|
case 'AUTO_MODERATION_RULE_CREATE':
|
|
this.emit('autoModerationRuleCreate', d);
|
|
break;
|
|
case 'AUTO_MODERATION_RULE_DELETE':
|
|
this.emit('autoModerationRuleDelete', d);
|
|
break;
|
|
case 'AUTO_MODERATION_RULE_UPDATE':
|
|
this.emit('autoModerationRuleUpdate', d);
|
|
break;
|
|
case 'CHANNEL_CREATE':
|
|
this.emit('channelCreate', d);
|
|
break;
|
|
case 'CHANNEL_DELETE':
|
|
this.emit('channelDelete', d);
|
|
break;
|
|
case 'CHANNEL_PINS_UPDATE':
|
|
this.emit('channelPinsUpdate', d);
|
|
break;
|
|
case 'CHANNEL_UPDATE':
|
|
this.emit('channelUpdate', d);
|
|
break;
|
|
case 'DEBUG':
|
|
this.emit('debug', d);
|
|
break;
|
|
case 'EMOJI_CREATE':
|
|
this.emit('emojiCreate', d);
|
|
break;
|
|
case 'EMOJI_DELETE':
|
|
this.emit('emojiDelete', d);
|
|
break;
|
|
case 'EMOJI_UPDATE':
|
|
this.emit('emojiUpdate', d);
|
|
break;
|
|
case 'ENTITLEMENT_CREATE':
|
|
this.emit('entitlementCreate', d);
|
|
break;
|
|
case 'ENTITLEMENT_DELETE':
|
|
this.emit('entitlementDelete', d);
|
|
break;
|
|
case 'ENTITLEMENT_UPDATE':
|
|
this.emit('entitlementUpdate', d);
|
|
break;
|
|
case 'ERROR':
|
|
this.emit('error', d);
|
|
break;
|
|
case 'GUILD_AUDIT_LOG_ENTRY_CREATE':
|
|
this.emit('guildAuditLogEntryCreate', d);
|
|
break;
|
|
case 'GUILD_AVAILABLE':
|
|
this.emit('guildAvailable', d);
|
|
break;
|
|
case 'GUILD_BAN_ADD':
|
|
this.emit('guildBanAdd', d);
|
|
break;
|
|
case 'GUILD_BAN_REMOVE':
|
|
this.emit('guildBanRemove', d);
|
|
break;
|
|
case 'GUILD_CREATE':
|
|
this.emit('guildCreate', d);
|
|
break;
|
|
case 'GUILD_DELETE':
|
|
this.emit('guildDelete', d);
|
|
break;
|
|
case 'GUILD_INTEGRATIONS_UPDATE':
|
|
this.emit('guildIntegrationsUpdate', d);
|
|
break;
|
|
case 'GUILD_MEMBER_ADD':
|
|
this.emit('guildMemberAdd', d);
|
|
break;
|
|
case 'GUILD_MEMBER_AVAILABLE':
|
|
this.emit('guildMemberAvailable', d);
|
|
break;
|
|
case 'GUILD_MEMBER_REMOVE':
|
|
this.emit('guildMemberRemove', d);
|
|
break;
|
|
case 'GUILD_MEMBERS_CHUNK':
|
|
this.emit('guildMembersChunk', d);
|
|
break;
|
|
case 'GUILD_MEMBER_UPDATE':
|
|
this.emit('guildMemberUpdate', d);
|
|
break;
|
|
case 'GUILD_SCHEDULED_EVENT_CREATE':
|
|
this.emit('guildScheduledEventCreate', d);
|
|
break;
|
|
case 'GUILD_SCHEDULED_EVENT_DELETE':
|
|
this.emit('guildScheduledEventDelete', d);
|
|
break;
|
|
case 'GUILD_SCHEDULED_EVENT_UPDATE':
|
|
this.emit('guildScheduledEventUpdate', d);
|
|
break;
|
|
case 'GUILD_SCHEDULED_EVENT_USER_ADD':
|
|
this.emit('guildScheduledEventUserAdd', d);
|
|
break;
|
|
case 'GUILD_SCHEDULED_EVENT_USER_REMOVE':
|
|
this.emit('guildScheduledEventUserRemove', d);
|
|
break;
|
|
case 'GUILD_UNAVAILABLE':
|
|
this.emit('guildUnavailable', d);
|
|
break;
|
|
case 'GUILD_UPDATE':
|
|
this.emit('guildUpdate', d);
|
|
break;
|
|
case 'INTERACTION_CREATE':
|
|
this.emit('interactionCreate', d);
|
|
break;
|
|
case 'INVITE_CREATE':
|
|
this.emit('inviteCreate', d);
|
|
break;
|
|
case 'INVITE_DELETE':
|
|
this.emit('inviteDelete', d);
|
|
break;
|
|
case 'MESSAGE_CREATE':
|
|
this.emit('messageCreate', d);
|
|
break;
|
|
case 'MESSAGE_DELETE':
|
|
this.emit('messageDelete', d);
|
|
break;
|
|
case 'MESSAGE_DELETE_BULK':
|
|
this.emit('messageDeleteBulk', d);
|
|
break;
|
|
case 'MESSAGE_POLL_VOTE_ADD':
|
|
this.emit('messagePollVoteAdd', d);
|
|
break;
|
|
case 'MESSAGE_POLL_VOTE_REMOVE':
|
|
this.emit('messagePollVoteRemove', d);
|
|
break;
|
|
case 'MESSAGE_REACTION_ADD':
|
|
this.emit('messageReactionAdd', d);
|
|
break;
|
|
case 'MESSAGE_REACTION_REMOVE':
|
|
this.emit('messageReactionRemove', d);
|
|
break;
|
|
case 'MESSAGE_REACTION_REMOVE_ALL':
|
|
this.emit('messageReactionRemoveAll', d);
|
|
break;
|
|
case 'MESSAGE_REACTION_REMOVE_EMOJI':
|
|
this.emit('messageReactionRemoveEmoji', d);
|
|
break;
|
|
case 'MESSAGE_UPDATE':
|
|
this.emit('messageUpdate', d);
|
|
break;
|
|
case 'PRESENCE_UPDATE':
|
|
this.emit('presenceUpdate', d);
|
|
break;
|
|
//case 'READY':
|
|
// this.emit('ready', d);
|
|
// break;
|
|
case 'ROLE_CREATE':
|
|
this.emit('roleCreate', d);
|
|
break;
|
|
case 'ROLE_DELETE':
|
|
this.emit('roleDelete', d);
|
|
break;
|
|
case 'ROLE_UPDATE':
|
|
this.emit('roleUpdate', d);
|
|
break;
|
|
case 'SHARD_DISCONNECT':
|
|
this.emit('shardDisconnect', d);
|
|
break;
|
|
case 'SHARD_ERROR':
|
|
this.emit('shardError', d);
|
|
break;
|
|
case 'SHARD_READY':
|
|
this.emit('shardReady', d);
|
|
break;
|
|
case 'SHARD_RECONNECTING':
|
|
this.emit('shardReconnecting', d);
|
|
break;
|
|
case 'SHARD_RESUME':
|
|
this.emit('shardResume', d);
|
|
break;
|
|
case 'STAGE_INSTANCE_CREATE':
|
|
this.emit('stageInstanceCreate', d);
|
|
break;
|
|
case 'STAGE_INSTANCE_DELETE':
|
|
this.emit('stageInstanceDelete', d);
|
|
break;
|
|
case 'STAGE_INSTANCE_UPDATE':
|
|
this.emit('stageInstanceUpdate', d);
|
|
break;
|
|
case 'STICKER_CREATE':
|
|
this.emit('stickerCreate', d);
|
|
break;
|
|
case 'STICKER_DELETE':
|
|
this.emit('stickerDelete', d);
|
|
break;
|
|
case 'STICKER_UPDATE':
|
|
this.emit('stickerUpdate', d);
|
|
break;
|
|
case 'THREAD_CREATE':
|
|
this.emit('threadCreate', d);
|
|
break;
|
|
case 'THREAD_DELETE':
|
|
this.emit('threadDelete', d);
|
|
break;
|
|
case 'THREAD_LIST_SYNC':
|
|
this.emit('threadListSync', d);
|
|
break;
|
|
case 'THREAD_MEMBERS_UPDATE':
|
|
this.emit('threadMembersUpdate', d);
|
|
break;
|
|
case 'THREAD_MEMBER_UPDATE':
|
|
this.emit('threadMemberUpdate', d);
|
|
break;
|
|
case 'THREAD_UPDATE':
|
|
this.emit('threadUpdate', d);
|
|
break;
|
|
case 'TYPING_START':
|
|
this.emit('typingStart', d);
|
|
break;
|
|
case 'USER_UPDATE':
|
|
this.emit('userUpdate', d);
|
|
break;
|
|
case 'VOICE_STATE_UPDATE':
|
|
this.emit('voiceStateUpdate', d);
|
|
break;
|
|
case 'WARN':
|
|
this.emit('warn', d);
|
|
break;
|
|
case 'WEBHOOKS_UPDATE':
|
|
this.emit('webhooksUpdate', d);
|
|
break;
|
|
case 'WEBHOOK_UPDATE':
|
|
this.emit('webhookUpdate', d);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
});
|
|
}
|
|
|
|
async getUser() {
|
|
const url = `${this.baseUrl}/users/@me`;
|
|
try {
|
|
const response = await axios.get(url, {
|
|
headers: {
|
|
'Authorization': this.token
|
|
}
|
|
});
|
|
return response.data;
|
|
} catch (error) {
|
|
console.error(`Error: ${error.response ? error.response.data.message : error.message}`);
|
|
throw new Error(`Error: ${error.response ? error.response.data.message : error.message}`);
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
|
|
module.exports = { Client }; |