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}`);
});