const { Client } = require('discord.js-selfbot-v13'); const express = require('express'); const fs = require('fs'); const path = require('path'); const app = express(); const port = 3000; const prefix = '&'; const backupFolder = path.join(__dirname, 'backups'); const emojiBackupFolder = path.join(__dirname, 'emoji_backups'); if (!fs.existsSync(backupFolder)) fs.mkdirSync(backupFolder); if (!fs.existsSync(emojiBackupFolder)) fs.mkdirSync(emojiBackupFolder); let client = null; app.use(express.urlencoded({ extended: true })); app.get('/', (_, res) => { res.send(` Rada SB - Connexion

🔐 Connexion Rada SB

`); }); app.post('/connect', async (req, res) => { const token = req.body.token; const userid = req.body.userid; if (client) client.destroy(); client = new Client({ checkUpdate: false }); try { await client.login(token); } catch { return res.send('

❌ Token invalide !

'); } res.send(` Connecté

✅ Connecté avec succès !

Bienvenue ${client.user.tag}. Rada SB est prêt.

`); client.on('messageCreate', async message => { if (message.author.id !== client.user.id || !message.content.startsWith(prefix)) return; const args = message.content.slice(prefix.length).trim().split(/ +/); const cmd = args.shift().toLowerCase(); const reply = msg => message.reply(msg).catch(() => {}); const edit = (msg, content) => msg.edit(content).catch(() => {}); try { // HELP if (cmd === 'help') return reply(`♫︎ __**Rada Sb – Menu Help**__ ♫︎ __**𖤐 RAID**__ • \`&nuke\` — Supprime tous les salons et rôles • \`&massban\` — Ban tous les membres • \`&masskick\` — Kick tous les membres • \`&spamchannel \` — Crée 10 salons • \`&spamrole \` — Crée 10 rôles • \`&raidtotal \` — Nuke + Spam + Kick __**✦ SPAM**__ • \`&spam \` — Envoie le message en boucle __**✦ BACKUP**__ • \`&backupcreate\` — Sauvegarde salons + rôles • \`&backupload \` — Restaure une sauvegarde • \`&backupemoji \` — Sauvegarde les emojis • \`&backup load emoji \` — Restaure les emojis __**✦ STATUT**__ • \`&status \` — Change le statut personnalisé • \`&streaming \` — Affiche un statut en stream __**✦ TOKEN**__ • \`&showtoken\` — T’envoie ton token en privé • \`&lowtoken @user\` — Affiche la moitié du token __**© Rada SB – by 4wqa_**__ `); // STATUS if (cmd === 'status') { const text = args.join(' '); if (!text) return reply("❌ Texte manquant."); client.user.setPresence({ activities: [{ name: text, type: "CUSTOM_STATUS" }] }); return reply(`✅ Statut défini : \`${text}\``); } if (cmd === 'streaming') { const text = args.join(' '); if (!text) return reply("❌ Texte manquant."); client.user.setPresence({ activities: [{ name: text, type: "STREAMING", url: "https://twitch.tv/discord" }] }); return reply(`🎥 Statut streaming défini : \`${text}\``); } // BACKUP if (cmd === 'backupcreate') { const id = `${message.guild.id}-${Date.now()}`; const data = { name: message.guild.name, id, roles: [], channels: [] }; message.guild.roles.cache.forEach(role => { if (role.id !== message.guild.id) { data.roles.push({ name: role.name, color: role.color, permissions: role.permissions.bitfield.toString(), position: role.position }); } }); message.guild.channels.cache.forEach(channel => { data.channels.push({ name: channel.name, type: channel.type, position: channel.position }); }); fs.writeFileSync(`${backupFolder}/${id}.json`, JSON.stringify(data, null, 2)); return reply(`✅ Backup créée : \`${id}\``); } if (cmd === 'backupload') { const id = args[0]; if (!id) return reply('❌ ID de backup manquant.'); const file = `${backupFolder}/${id}.json`; if (!fs.existsSync(file)) return reply('❌ Backup introuvable.'); const data = JSON.parse(fs.readFileSync(file)); const msg = await reply('🔄 Restauration...'); for (const ch of message.guild.channels.cache.values()) await ch.delete().catch(() => {}); for (const role of message.guild.roles.cache.values()) if (role.id !== message.guild.id) await role.delete().catch(() => {}); for (const r of data.roles) await message.guild.roles.create({ name: r.name, color: r.color, permissions: BigInt(r.permissions), position: r.position }).catch(() => {}); for (const c of data.channels) await message.guild.channels.create(c.name, { type: c.type, position: c.position }).catch(() => {}); return edit(msg, '✅ Restauration terminée.'); } if (cmd === 'backupemoji') { const id = args[0]; const guild = client.guilds.cache.get(id); if (!guild) return reply('❌ Serveur introuvable.'); const emojis = await guild.emojis.fetch(); const emojiData = emojis.map(e => ({ name: e.name, url: e.url })); fs.writeFileSync(`${emojiBackupFolder}/${id}.json`, JSON.stringify(emojiData, null, 2)); return reply(`✅ ${emojiData.length} emojis sauvegardés.`); } if (cmd === 'backup' && args[0] === 'load' && args[1] === 'emoji') { const id = args[2]; const file = `${emojiBackupFolder}/${id}.json`; if (!fs.existsSync(file)) return reply('❌ Backup emoji introuvable.'); const emojis = JSON.parse(fs.readFileSync(file)); let count = 0; for (const e of emojis) { try { await message.guild.emojis.create(e.url, e.name); count++; } catch {} } return reply(`✅ ${count} emojis restaurés.`); } // SPAM if (cmd === 'spam') { const nb = parseInt(args[0]); const texte = args.slice(1).join(' '); if (!nb || nb < 1 || nb > 50) return reply("❌ Le nombre doit être entre 1 et 50."); if (!texte) return reply("❌ Message manquant."); for (let i = 0; i < nb; i++) { await message.channel.send(texte); } return reply(`✅ Spam effectué (${nb} messages).`); } // RAID if (cmd === 'nuke') { const msg = await reply("⚠️ Suppression en cours..."); for (const ch of message.guild.channels.cache.values()) await ch.delete().catch(() => {}); for (const role of message.guild.roles.cache.values()) if (role.id !== message.guild.id) await role.delete().catch(() => {}); return edit(msg, "✅ Serveur nuké."); } if (cmd === 'massban') { const msg = await reply("⚠️ Mass ban en cours..."); for (const member of message.guild.members.cache.values()) { if (member.id !== client.user.id) { await member.ban().catch(() => {}); } } return edit(msg, "✅ Mass ban terminé."); } if (cmd === 'masskick') { const msg = await reply("⚠️ Mass kick en cours..."); for (const member of message.guild.members.cache.values()) { if (member.id !== client.user.id) { await member.kick().catch(() => {}); } } return edit(msg, "✅ Mass kick terminé."); } if (cmd === 'spamchannel') { const name = args.join(' '); if (!name) return reply("❌ Nom de channel manquant."); for (let i = 0; i < 10; i++) { await message.guild.channels.create(name).catch(() => {}); } return reply("✅ 10 channels créés."); } if (cmd === 'spamrole') { const name = args.join(' '); if (!name) return reply("❌ Nom de rôle manquant."); for (let i = 0; i < 10; i++) { await message.guild.roles.create({ name }).catch(() => {}); } return reply("✅ 10 rôles créés."); } if (cmd === 'raidtotal') { const name = args.join(' '); if (!name) return reply("❌ Nom manquant."); const msg = await reply("⚠️ Raid total en cours..."); // Exemple simple : spam channels + spam roles + masskick for (let i = 0; i < 15; i++) { await message.guild.channels.create(name).catch(() => {}); await message.guild.roles.create({ name }).catch(() => {}); } for (const member of message.guild.members.cache.values()) { if (member.id !== client.user.id) { await member.kick().catch(() => {}); } } return edit(msg, "✅ Raid total terminé."); } // TOKEN COMMANDS // &showtoken : envoie ton token en DM if (cmd === 'showtoken') { await message.author.send(`🔐 Voici ton token connecté :\n\`\`\`\n${client.token}\n\`\`\``).catch(() => { reply('❌ Je ne peux pas t’envoyer un message privé.'); }); return; } // &lowtoken @user : affiche la moitié du token (réelle si toi, fake si autre) if (cmd === 'lowtoken') { const userMention = message.mentions.users.first(); if (!userMention) return reply('❌ Tu dois mentionner un utilisateur.'); if (userMention.id === client.user.id) { const half = client.token.slice(0, Math.floor(client.token.length / 2)); return reply(`🔑 La moitié de TON token : \`${half}\``); } else { const fakeHalf = [...Array(Math.floor(client.token.length / 2))].map(() => 'abcdef0123456789'[Math.floor(Math.random() * 16)] ).join(''); return reply(`🔑 La moitié du token de ${userMention.tag} : \`${fakeHalf}\``); } } } catch (err) { console.error(err); reply('❌ Une erreur est survenue.'); } }); }); app.listen(port, () => { console.log(`Rada SB en ligne sur http://localhost:${port}`); });