discord.js-selfbot-v13/DOCUMENT.md
March 7th 3688622120 API v9, edit document + readme
Request by github.com/dolfies
2022-04-03 15:20:39 +07:00

11 KiB

Discord.js Selfbot v13

  • Install: npm i discord.js-selfbot-v13@latest

Risky actions

Change log:

/* If you want to change the API version from v9 to v10, here are the instructions */
const { Client } = require('discord.js-selfbot-v13');
const client = new Client({
	ws: {
		version: 10
	},
	http: {
		version: 10
	}
});

Client Settings

Click to show
new Client({
  checkUpdate: true, // Check Package Update (Bot Ready) [Enable Default]
  readyStatus: false, // Set Custom Status sync from Account (Bot Ready) [Disable Default]
})

User Settings

Click to show
client.setting // Return Data Setting User;
client.setting.setDisplayCompactMode(true | false); // Message Compact Mode
client.setting.setTheme('dark' | 'light'); // Discord App theme
client.setting.setLocale(value); // Set Language
	/**
	 * * Locale Setting, must be one of:
	 * * `DANISH`
	 * * `GERMAN`
	 * * `ENGLISH_UK`
	 * * `ENGLISH_US`
	 * * `SPANISH`
	 * * `FRENCH`
	 * * `CROATIAN`
	 * * `ITALIAN`
	 * * `LITHUANIAN`
	 * * `HUNGARIAN`
	 * * `DUTCH`
	 * * `NORWEGIAN`
	 * * `POLISH`
	 * * `BRAZILIAN_PORTUGUESE`
	 * * `ROMANIA_ROMANIAN`
	 * * `FINNISH`
	 * * `SWEDISH`
	 * * `VIETNAMESE`
	 * * `TURKISH`
	 * * `CZECH`
	 * * `GREEK`
	 * * `BULGARIAN`
	 * * `RUSSIAN`
	 * * `UKRAINIAN`
	 * * `HINDI`
	 * * `THAI`
	 * * `CHINA_CHINESE`
	 * * `JAPANESE`
	 * * `TAIWAN_CHINESE`
	 * * `KOREAN`
	 * @param {string} value
	 * @returns {locale}
	 */

Discord User Info

Click to show

Code:

GuildMember.user.getProfile();
// or
User.getProfile();

Response

User {
  id: '721746046543331449',
  bot: false,
  system: false,
  flags: UserFlagsBitField { bitfield: 256 },
  connectedAccounts: [],
  premiumSince: 1623357181151,
  premiumGuildSince: 0,
  mutualGuilds: Collection(3) [Map] {
    '906765260017516605' => { id: '906765260017516605', nick: null },
    '809133733591384155' => { id: '809133733591384155', nick: 'uwu' },
    '926065180788531261' => { id: '926065180788531261', nick: 'shiro' }
  },
  username: 'Shiraori',
  discriminator: '1782',
  avatar: 'f9ba7fb35b223e5f1a12eb910faa40c2',
  banner: undefined,
  accentColor: undefined
}

Discord User Friend / Blocked

Click to show

Code:

GuildMember.user.setFriend();
User.unFriend();
Message.member.user.sendFriendRequest();
// or
GuildMember.user.setBlock();
User.unBlock();

Response

User {
  id: '721746046543331449',
  bot: false,
  system: false,
  flags: UserFlagsBitField { bitfield: 256 },
  note: null,
  connectedAccounts: [],
  premiumSince: 1623357181151,
  premiumGuildSince: 0,
  mutualGuilds: Collection(3) [Map] {
    '906765260017516605' => { id: '906765260017516605', nick: null },
    '809133733591384155' => { id: '809133733591384155', nick: 'uwu' },
    '926065180788531261' => { id: '926065180788531261', nick: 'shiro' }
  },
  username: 'Shiraori',
  discriminator: '1782',
  avatar: 'f9ba7fb35b223e5f1a12eb910faa40c2',
  banner: undefined,
  accentColor: undefined
}

Discord Guild set position

Click to show

Code:

guild.setPosition(position, type, folderID);
// Position: The guild's index in the directory or out of the directory
// Type:
//     + 'FOLDER': Move guild to folder
//     + 'HOME': Move the guild out of the directory
// FolderID: The folder's ID , if you want to move the guild to a folder

Response

Guild {}

Group DM

Click to show

Code:

/* Create */
const memberAdd = [
	client.users.cache.get('id1'),
	client.users.cache.get('id2'),
	...
	client.users.cache.get('id9')
]
// Max member add to Group: 9, Min: 2
await client.channels.createGroupDM(memberAdd);
/* Edit */
const groupDM = client.channels.cache.get('id');
await groupDM.setName('New Name');
await groupDM.setIcon('iconURL');
await groupDM.getInvite();
await groupDM.fetchInvite();
await groupDM.removeInvite(invite);
await groupDM.addMember(user);
await groupDM.removeMember(user);
/* Text Channel not Bulk delete */
await groupDM.send('Hello World');
await groupDM.delete(); // Leave

Custom Status and RPC

Click to show Custom Status
const RichPresence = require('discord-rpc-contructor'); // My module :))
const custom = new RichPresence.CustomStatus()
    .setUnicodeEmoji('🎮') // Set Unicode Emoji [Using one]
    .setDiscordEmoji({ // Set Custom Emoji (Nitro Classic / Boost) [Using one]
        name: 'nom',
        id: '737373737373737373',
        animated: false,
    })
    .setState('Testing') // Name of presence
    .toDiscord();
client.user.setActivity(custom);

Rich Presence [Custom]

const RPC = require('discord-rpc-contructor');
const r = new RPC.Rpc()
	.setApplicationId('817229550684471297')
	.setType(0)
	.setState('State')
	.setName('Name')
	.setDetails('Details')
	.setParty({
		size: [1, 2],
		id: RPC.uuid(),
	})
	.setStartTimestamp(Date.now())
	.setAssetsLargeImage('929325841350000660')
	.setAssetsLargeText('Youtube')
	.setAssetsSmallImage('895316294222635008')
	.setAssetsSmallText('Bot')
client.user.setActivity(r.toDiscord().game);
// Button not working

Rich Presence with Twitch / Spotify

Update soon ~

How to get AssetID ?

Code

const RPC = require('discord-rpc-contructor');
// Bot ID
RPC.getRpcImages('817229550684471297').then(console.log);

Return

// ID is AssetID
[
  { id: '838629816881381376', type: 1, name: 'honkai' },
  { id: '853533658250084352', type: 1, name: 'vscode' },
  { id: '895316294222635008', type: 1, name: 'botsagiri' },
  { id: '929324633063292929', type: 1, name: 'soundcloud' },
  { id: '929324634858479666', type: 1, name: 'spotify' },
  { id: '929325841350000660', type: 1, name: 'youtube' }
]

You can cache to use these files, do not run this function too much because it will be rate limit And you can change the status 5 times every 20 seconds!

Interaction

Button Click
await Button.click(Message); // Message has button (v1)
//
await message.clickButton(buttonID); // Message has button (v2)
Message Select Menu
await MessageSelectMenu.select(Message, options); // Message has menu (v1)
// value: ['value1', 'value2' , ...]
await message.selectMenu(menuID, options) // If message has >= 2 menu
await message.selectMenu(options) // If message has 1 menu
Slash Command
// v1 [deprecated]
// v2
await Channel.sendSlash(botID, commandName, ['option1', 'option2']);
// Eg /addrole roleID: 12345678987654321 userID: 98765432123456789
// => await Channel.sendSlash(botID, 'addrole', ['12345678987654321', '98765432123456789']);
// Command group
await Channel.sendSlash(botID, commandName, ['sub command', 'option1', 'option2']);
// Eg: /role add roleID: 12345678987654321 userID: 98765432123456789
// => await Channel.sendSlash(botID, 'role', ['add', '12345678987654321', '98765432123456789']);
Message Context Command
// v1 [deprecated]
// v2
await message.contextMenu(botID, commandName);
Issue ?
  • It has some minor bugs.
  • ErrorCode: 20012 => You are not authorized to perform this action on this application
  • I tried to fix it by creating 1 DMs with bot
  • In this way, all Slash commands can be obtained
  • I will try to find another way to not need to create DMs with Bot anymore
  • Credit: Here

MessageEmbed ?

  • Because Discord has removed the ability to send Embeds in its API, that means MessageEmbed is unusable. But I have created a constructor that uses oEmbed from page (known to this site by module py discord.py-self_embed, thanks)
Click to show

Code:

const Discord = require('discord.js-selfbot-v13');
const w = new Discord.WebEmbed({
  shorten: true,
  hidden: false // if you send this embed with MessagePayload.options.embeds, it must set to false
})
	.setAuthor({ name: 'hello', url: 'https://google.com' })
	.setColor('RED')
	.setDescription('description uh')
	.setProvider({ name: 'provider', url: 'https://google.com' })
	.setTitle('This is Title')
        .setURL('https://google.com')
	.setImage(
		'https://cdn.discordapp.com/attachments/820557032016969751/959093026695835648/unknown.png',
	)
	.setVideo(
		'https://cdn.discordapp.com/attachments/877060758092021801/957691816143097936/The_Quintessential_Quintuplets_And_Rick_Astley_Autotune_Remix.mp4',
	);
message.channel.send({ content: `Hello world`, embeds: [w] }) // Patched :)

Features & Issues

  • No Timestamp, Footer, Thumbnail (but embed video, thumbnail working), Fields, Author iconURL
  • Video with Embed working
  • Description limit 350 characters
  • If you use hidden mode you must make sure your custom content is less than 1000 characters without nitro (because hidden mode uses 1000 characters + URL)

User & ClientUser Method

Click to show
// HypeSquad
await client.user.setHypeSquad('HOUSE_BRAVERY');
await client.user.setHypeSquad('HOUSE_BRILLIANCE');
await client.user.setHypeSquad('HOUSE_BALANCE');
// Set Note to User
await user.setNote('Hello World');
// Set Username
await client.user.setUsername('new username', 'password');
// Set Accent Color
await client.user.setAccentColor('RED'); // set color same as Embed.setColor()
// Set Banner
await client.user.setBanner('image file / image url'); // same as setAvatar & Require Nitro level 2
// Set Discord Tag
await client.user.setDiscriminator('1234', 'password'); // #1234 & Require Nitro
// Set About me
await client.user.setAboutMe('Hello World');
// Set Email
await client.user.setEmail('aiko.dev@mail.nezukobot.vn', 'password'); // It is clone email =))
// Change Password
await client.user.setPassword('old password', 'new password');
// Disable Account
await client.user.disableAccount('password');
// Delete Account [WARNING] Cannot be changed once used!
await client.user.deleteAccount('password');

Join Guild using Invite

Click to show
await client.fetchInvite('code').then(async invite => {
  await invite.acceptInvite(true); 
});

invite.acceptInvite(true); => Auto skip verify screen

But if you are blocked by HCaptcha, this will not work

Reddem Nitro ?

Click to show
await client.reddemNitro('code')

More features

Click to show - I need requests from you! Ask questions, I will help you!

Warning

  • This is a beta version, so there are some bugs.
  • If you use the Client.destroy() function, for an account that uses 2FA, it will cause a logout and the Token will no longer be usable.