[Journey] Reddit Bot Farm

Tabun

Registered Member
Joined
Jan 17, 2020
Messages
54
Reaction score
42
Over the past couple of weeks I've been working on a project in Golang to automate interactions with Reddit. I'm currently testing it with just 30 accounts but it should scale fine because of how I architected it.

What I have so far:

- "Identity system"
- Each account is associated with an "identity"
- Identities have random names/birth years which are in turn used to generate usernames (see attached image)
- Each identity has a % chance of having certain "interests" such as politics, gaming, technology, etc
- Each "interest" has subreddits that all have a certain % chance of being subscribed to
- See attached image

- Job server
- Generates daily job for each worker (getting information using the official reddit API on a random account) -- This pads the account with legit activity to make it seem more human
- "Scrolling" through some of the subreddits the account is subscribed to and upvoting a small percent of posts it sees
- Small percent chance that they repost a top post from a long time ago
- High percent chance that they post a paraphrased version of a comment on an already popular random thread (important that only popular threads are chosen because it helps "blend in" and otherwise users might notice)
- Http server listening for me to submit my own custom tasks (things to upvote/downvote/post/etc)

- Worker
- Can run unlimited number of workers
- Workers take tasks from job server via rabbitmq
- Emulate Reddit's iOS app mobile api
- Incorporated nearly every endpoint, including some of the undocumented graphql stuff
- I can't afford servers powerful enough for many instances of selenium or puppeteer so I used this

- Bulk Registerer
- Registers accounts using mobile API (had to learn a little about HMACs to do this because they request sign the registration requests)


What I need to do:

- Figure out how to most profitably use this system (selling accounts vs upvotes vs ...)
- Use something like https://www.delayforreddit.com/analysis and only post at optimum times to maximize karma
- Shadowban checks: I'm currently doing it manually but implementing whatever https://nullprogram.com/am-i-shadowbanned/ is doing shouldn't be hard
- Register more accounts
 

Attachments

  • ok.png
    ok.png
    58.5 KB · Views: 316
  • ok2.png
    ok2.png
    62.3 KB · Views: 312
I'm new here so I don't quite understand what's the actual end goal to have bots in reddit? This sounds interesting tho
 
Should be an interesting journey to follow.

Best of luck bro.

Did you code the bot yourself? And if so can you talk a little about the bot creation. I've worked with zennoposter in the past on reddit. So curious to see how you set your system up.
 
not really sure I understand this journey, but it looks interesting as reddit is an unknown space for me right now. good luck, hope I can learn a thing or two from this.
 
Should be an interesting journey to follow.

Best of luck bro.

Did you code the bot yourself? And if so can you talk a little about the bot creation. I've worked with zennoposter in the past on reddit. So curious to see how you set your system up.

Yes. I wrote it in Golang. I have never worked with Zennoposter so I can't offer any comparisons.

The basic idea is something like this
ok.png

I started by writing the part of the job server that generates the "padding" activity for the accounts - a snippet of this code can be found at https://pastebin.com/9LxRd3A8 (the code is not very pretty :) ). Then, using Charles proxy and a bunch of debugging I wrote a client for the reddit mobile API. It mostly uses the same OAuth endpoints as the official API but the authentication is a little different (involves some request signing) and it also has some GraphQL stuff as well. This became the basis of the "worker." Then I linked the job server and the worker using RabbitMQ queues. I also added some code for status reporting to the workers to report if the job was successful or not. After that, I added the ability to the job server to submit my own custom tasks to the workers to the job server instead of just the autogenerated ones.
 
UPDATE

The accounts are going along OK so far. None have been suspended or shadowbanned. The main problem is that subreddit moderators do not like posts (especially reposts!) from new, low karma accounts. This makes me think that I probably should have bought aged accounts. But from commenting (which mods seem to be ok with) the accounts are gaining a few karma each day so they should eventually be able to post. I think my end goal once I get enough accounts (that are old enough and have medium-high karma) is going to be make a panel for Reddit services.
 
UPDATE

Accounts are still plugging along. Most have positive, but single to low double digit, karma from just paraphrasing rising comments. I fixed quite a few bugs and the software is mostly out of the "testing" phase so I am going to scale up to more accounts. I still need to figure out how to grow the karma quicker though. I found some interesting ideas from SEOMadHatter at https://www.blackhatworld.com/seo/y...crease-karma-on-reddit.1237918/#post-13280880 so I am going to begin implementing those soon.
 
- Worker
- I can't afford servers powerful enough for many instances of selenium or puppeteer so I used this

Puppeteer has a https://github.com/puppeteer/puppeteer/blob/v5.5.0/docs/api.md#puppeteerdefaultargsoptions to control different users, cookies etc. You can make use of that if you get banned or something because of the api usage (api usage makes easy to mark accounts).
1- Open Puppeteer with nth account's data dir.
2- Do the queued task for that account.
3- Close Puppeteer after the tasks done.
4- Increase n and do the thing again.

This limits the budget for a worker droplet.

Just my two cents. Have a nice one.
 
Puppeteer has a userDataDir argument to control different users, cookies etc. You can make use of that if you get banned or something because of the api usage (api usage makes easy to mark accounts).
1- Open Puppeteer with nth account's data dir.
2- Do the queued task for that account.
3- Close Puppeteer after the tasks done.
4- Increase n and do the thing again.

This limits the budget for a worker droplet.

Just my two cents. Have a nice one.

Yeah you are right it probably could be done in Puppeteer. I initially attempted it in Puppeteer but soon reconsidered. I know you didn’t mean this argumentatively but these are just the reasons I didn’t go with puppeteer: 1) I don’t know puppeteer very well 2) I had lots of problems with timeouts especially when waiting for stuff in iframes (the new reddit login modal) to load 3) I figured the ban risk would be lower with the mobile API because there is a greater barrier to entry 4) I wouldn’t have to do as much anti-fingerprinting (see: developer tools network tab on reddit.com and the post request with JSON data to / for every action)


are you gonna open source it?

Maybe parts of it like the mobile API. Probably not though. Why would I want more spam on reddit (unless it’s my own;))?
 
THere's high chance the accounts will get shadow banned quickly.
It is possible to automate certain tasks in Reddit but they are getting strict every day.
Wish you all the best! :)
 
THere's high chance the accounts will get shadow banned quickly.
It is possible to automate certain tasks in Reddit but they are getting strict every day.
Wish you all the best! :)
It’s been running for a week or so with no bans on 30 accounts (at least according to https://nullprogram.com/am-i-shadowbanned/, some manual checks by me, and the bots’ comments have been getting responses as well). But so far the bots have only been doing “legit” activity, i.e. upvoting posts on the hot page of askreddt, commenting on big threads, etc. My goal is to make the “legit” stuff the accounts do cover for the more shady stuff that they are eventually going to do (once the accounts get enough karma and age) like upvote my posts.
 
Back
Top