Discord DM Spammer
Discord DM Spammer is a Multi-threaded Discord Self-Bot primarily used for mass messaging users on Discord. It has numerous other quality features to enhance the user experience and allowing the user to target the most users.
Features :
Token Utilities
- Avatar Changer
- Username Changer
- Hypesquad Changer
- Bio Changer
- Token Changer
- Invite joiner (Single/Multi modes)
- Guild Leaver
- Token Onliner
- Token Format Changer
- Token Checker
- Reaction Adder
- Server Checker
Mass Messaging
- Mass DM Advertisement
- Single DM Spam
- DM on React
Scraping Utilities
- Opcode 14 Scraper (Memberlist scraper)
- Opcode 8 Scraper (Bruteforce Scraper)
- Reaction Scraper
Other Features
- Multiple Captcha APIs supported
- Supports token & email:pass:token formats
- Compatible with all major OS and Architectures
- Proxyless
- Supports HTTP(s), SOCKS5 and SOCKS4 proxies
- Free & Open source
- Emulates Discord's requests to a very high accuracy to prevent detection
- Highly Documented
- Multi-threaded using Light-weight Goroutines supporting thousands of concurrent accounts
- Can Receieve messages during mass DM
- Can ping user
- Can send embeds using 3rd Party APIs
- Supports multiple messages
Preview
Disclaimer
The automation of User Discord accounts also known as self-bots is a violation of Discord Terms of Service & Community guidelines and will result in your account(s) being terminated. Discretion is adviced. I will not be responsible for your actions. Read about Discord Terms Of service and Community Guidelines
Configuration
Name |
Type |
Description |
direct_message_options |
DirectMessage |
Contains settings related to sending Direct messages to discord users. |
proxy_settings |
ProxySettings |
Contains settings related to proxies. |
scraper_settings |
ScraperSettings |
Contains settings related to scraping menu. |
captcha_settings |
CaptchaSettings |
Contains settings related to captchas. |
other_settings |
OtherSettings |
Contains miscellaneous settings and options. |
suspicion_avoidance |
SuspicionAvoidance |
Contains settings related to appearing like an actual user. |
dm_on_react |
DMonreact |
Contains settings for DM on react option. |
DirectMessage Object
Name |
Type |
Recommended Value |
Description |
individual_delay |
int |
90 |
Duration in seconds between 2 consecutive Direct messages by one instance. |
rate_limit_delay |
int |
60 |
Duration in seconds instance sleeps for when Discord says "You're opening new direct messages too fast" |
offset |
int |
1000 |
uration in Milliseconds (1/1000th of a second) that the program waits in between of starting 2 instances. Perhaps one of the most important settings which is why it has it's own section. Recommended offset is (60/number of tokens) * 1000 but it does not matter with a few tokens and can be set to any small value. |
skip_completed |
bool |
true |
Skip members who have already been DM'd from the input/completed.txt file |
call |
bool |
false |
Call users after DM (Token needs to be friended to Ring) |
remove_dead_tokens |
bool |
true |
Remove tokens which have died from input/tokens.txt once DMs are completed. |
remove_completed_members |
bool |
true |
Remove members who have been DM'd from input/memberids.txt once DMs are completed |
stop_dead_tokens |
bool |
true |
Stop using tokens which have been locked/disabled. |
check_mutual |
bool |
false |
Check mutual servers and Username |
friend_before_DM |
bool |
false |
Friend user before sending DM (Requires Check Mutual to get username and discriminator) |
online_tokens |
bool |
false |
Websocket tokens and set their status to online while mass DMing |
max_dms_per_token |
int |
0 |
Stop tokens at a particular number of DMs. 0 for unlimited. |
receive_messages |
bool |
false |
Receieve messages from the people your tokens are sending DMs to. They get saved to input/received.txt (Requires Online Tokens) |
skip_failed |
bool |
true |
Skip members who have already been attempted to be DM'd but failed from the input/failed.txt file |
block_after_dm |
bool |
false |
Block user after sending DM |
close_dm_after_message |
bool |
false |
Close DM (Presses the X in front of the DM) after sending a message |
ProxySettings Object
Name |
Type |
Recommended Value |
Description |
proxy |
string |
"" |
Using rotating proxy in config like in DM Spammer and earlier. (Depracated, see proxy_from_file ) |
proxy_from_file |
bool |
true |
Load proxies from /input/proxies.txt and use them globally throughout the program. A proxy is binded to each instance at the beginning of any function and sticks with it throughout the process. There is no in-built proxy checker and it does not rotate proxies on it's own. Always use high quality static checked proxies. |
proxy_for_captcha |
bool |
false |
Send proxy to captcha service to ensure that captcha is solved on the same IP address as the action taken on Discord (like joining server) to avoid detection. Each service has it's own documentation on what proxy is acceptable for them. Usually they don't support IP Authorization and disallow hostnames. You can ping your proxy hostname to resolve it's IP Address and use that |
proxy_protocol |
string |
"http" |
Proxy protocol of your proxies, used for actions on Discord and sent to captcha APIs as well |
gateway_proxy |
bool |
false |
use proxy for websocket functions. Same proxy is used as the one for other actions on Discord. |
timeout |
int |
60 |
Maximum time to wait before timing out incase of slow proxies or incase a proxy does not connect. |
ScraperSettings Object
Name |
Type |
Recommended Value |
Description |
online_scraper_delay |
int |
1000-2000 |
Delay in milliseconds to sleep between 2 scrape requests in Opcode 8 and Opcode 14 Scrapers. |
scrape_usernames |
bool |
false |
Scrape usernames and output them to input/names.txt while using Opcode 8 Scraper. |
scrape_avatars |
bool |
false |
Scrape avatars and output them to input/pfps/ while using Opcode 8 Scraper. |
CaptchaSettings Object
Name |
Type |
Recommended Value |
Description |
captcha_api_key |
string |
"your_captcha_key" |
Your authentication key for the captcha solving service you set. if user authenticated then enter username and password in format user:pass or just put the key. |
captcha_api |
string |
"anti-captcha.com" |
The captcha service you're using. Always check which ones are compatible before using one! Might need to use a different captcha provider if you're getting flagged or invalid solutions |
mac_captcha_wait |
int |
120 |
Maximum time to wait for the solution after submitting the captcha before cancelling the action and moving forward |
max_captcha_retry_dm |
int |
0 |
Maximum times to retry solving captcha if an unacceptable solution is returned (Implemented so people don't wipe out their balances) Keep 0 for unlimited |
max_captcha_retry_invite |
int |
3 |
Maximum times to retry joining server if met with captcha |
OtherSettings
Name |
Type |
Recommended Value |
Description |
disable_keep_alives |
bool |
false |
Open a new underlying TCP connection for each request. Highly detectable. Always keep false. But helps to rotate a rotating proxy's IP on each request when set in environment using the depracated proxy field in ProxySettings object |
SuspicionAvoidance Object
Name |
Type |
Recommended Value |
Description |
random_individual_delay |
int |
0 |
Random amount of time in seconds to be added to each individual delay |
random_rate_limit_delay |
int |
0 |
Random amount of time in seconds to be added to each rate limit delay |
random_delay_before_dm |
int |
0 |
Random amount of time in seconds to wait in between of opening a DM and sending a DM |
typing |
bool |
false |
Show user as typing before sending a message |
typing_variation |
int |
250 |
random delay added in typing |
typing_speed |
int |
300 |
Speed in which the message is typed (Affects the overall time it takes to send the message, shorter messages will be sent quicker) |
typing_base |
int |
100 |
base delay in typing |
DMonReact Object
Name |
Type |
Recommended Value |
Description |
observer_token |
string |
"your token" |
A token which is present in the server where yo want to sniff reactions and send DMs. This token is only used for looking at the reacts, it's never used to send DMs. |
change_name |
bool |
true |
An instance token changes name before sending DMs to people approved by observer token. Requires tokens in format email:pass:token |
change_avatar |
bool |
true |
An instance token changes avatar before sending DMs to people apporved by observer token. |
invite |
string |
"invite_to_server" |
Invite to the server where you're running DM on react, to join instances when they're needed so they don't get kicked. If not specified, the bot will assume the tokens are already present in the server |
server_id |
string |
"server_id" |
Server ID where you're running the DM on react. If not specified, instances will try to send to every reaction sniffed by observer token. This is required for other things like checking if Token is in server or not, it's highly recommended you specify this field. |
channel_id |
string |
"your_channelId" |
Channel ID where you want to send messages to reactions. If left blank, bot will send DMs to reacts in all channels in the server. |
message_id |
string |
"your_messageId" |
Message ID of the message on which you want to send people DMs who react. If left blank, would send DMs to all messages in the channel. |
emoji |
string |
"emojiname:id" |
The emoji when reacted with the message will be sent. Unicode emojis have to be entered just as the emoji. Example: "?" (Don't worry if it appears as boxes on your machine) And for custom/nitro emojis you have to put emoji_name:emoji_id which you can get from the emoji's URL. If left blank, messages will be sent to every reaction on the message. |
rotate_tokens |
bool |
true |
Re-uses tokens from a pool. Suppose if token was rate limited, it would be switched but later be returned to to be reused. |
max_anti_raid_queue |
int |
20 |
To ensure someone does not spam reactions to jam your bot and lock your instances, you can set the maximum queue size. Any reactions above this would be discarded. This will easily help bypass mass emoji reacts breaking the bot. |
max_dms_per_token |
int |
0 |
Maximum DMs you want your tokens to send. Set to 0 for unlimited. |
Offset
Offset is a duration in milliseconds. As the name suggests this offsets or displaces the goroutines (threads) by a short period of time to ensure that all accounts don't start at the exact same second. What is the recommended offset? If you have less than 100 tokens or are using short individual delays, it does not matter. You can put any offset like 50-300. But if you are running a large number of tokens, you should set your individual and rate limit delays to 60 each or higher. Your offset will come with this formula - (individual delay/number of tokens) * 1000 This ensures your tokens start evenly spread out throughout the individual delay period.
You can do more interesting things with offset. Normally to bypass Anti-Raid bots like Beemo or Wick, you'd have to join your tokens with high delays then wait for all of them to join to start DMing. Now with Offset you can make it so that one account joins and starts DMing, 30 seconds or any duration of your choice later the second account joins and start DMing so you save A LOT of time. How to do this? Set your offset to the duration you want your accounts to join in, like 30,000 - 60,000 (Remember offset is in milliseconds) and don't join your accounts to the server. Before Mass DMing, you'd get an option for advanced settings. Enter the server invite and serverid there. Use multiple proxies/ rotating proxies to prevent Discord server IP bans by the Anti-Raid bots. This won't work while Proxyless.
Using Captcha APIs
Captcha Solving APIs were introduced to DM Spammer on 8th February 2022 when Discord mandated Captchas for joining servers on some tokens they deemed untrustworthy. The supported Captcha APIs right now are capmonster.cloud and anti-captcha.com
You can register an account there, load some balance and copy your Captcha API Key to config. Make sure to specify the service you're using as well. It is extremely inexpensive and can join thousands of accounts in a couple USD. If there is an error with the captcha APIs, You will get an error code. You can look it up on their documentation here
Example configuration
{
"individual_delay": 60,
"rate_limit_delay": 60,
"offset": 100,
"skip_completed": true,
"skip_failed": true,
"remove_dead_tokens": true,
"remove_completed_members": true,
"stop_dead_tokens": true,
"check_mutual": false,
"friend_before_DM": false,
"online_tokens": false,
"online_scraper_delay": 2000,
"call": false,
"proxy_from_file": false,
"max_dms_per_token": 0,
"receive_messages": true,
"use_proxy_for_gateway": false,
"timeout": 60,
"captcha_api": "capmonster.cloud",
"captcha_api_key": "your_captcha_api_key",
"max_attempt_invite_rejoin": 4,
"disable_keep_alives": false
}
This is the config I'd use, with ofcourse the offset calculated accordingly.
Message in file
The input/message.json
is an array of messages from which one is chosen at random to be sent before each DM. Message.json is an array of messages. Find the examples below to add multiple messages. You can use the "get message" option to get messages from discord as well. Be sure to have the [] around the whole message. The only way to change lines is adding \n
. After discord update on 22nd January 2022; Embed support was removed from DM Spammer and higher as discord removed the capibility to send embeds completely from userbots
Example message 1 : Single Message, No Embed
[
{
"content": "Hi <user> join my telegram server LINK"
}
]
Example message 2: Multiple messages, No Embeds.
[
{
"content": "Hi <user> join my telegram server LINK"
},
{
"content": "We had a discord but it got terminated"
},
{
"content": "We might make one again but too lazy to do so"
}
]