Scam Remove Bot

Why would you even include that link on the forum?

Tried it using noblox.js and it worked perfectly! All the scams are deleting one by one. Altough I do wish the bat file could repeat it. I’m not a scripter so would you use the echo command or somethin
(Trust me the bot removed the messages, I checked. I don’t have access to admin logs but the scams are gone)

2 Likes

I just noticed that it only scans the first page of chats, is there any way around that?

For those who don’t want to keep closing the file, I did some research since it bugged me.

:start
node index.js
pause
goto start

if you don’t want to constantly press enter and have it loop after each delete and prettyy much watch the wall all the time

:start
node index.js
goto start

You scribbled out your username the first time but not the second time. Since this is a public category I highly recommend fixing that and re-uploading.

Whoops, It isnt my name but thanks for letting me know hehe

1 Like

This is fully working version running 24/7 (edits done by me) 0q0-roblox is outdated so just change that and it’ll work as a dream. NOTE: It completely deletes all posts containing the word “robux” or “R$” so if you’re having a trading group you may get fake positives. You won’t have to update the keywords as all the scam messages contains the word Robux.

var rbx = require('0q0-roblox');
var request = require('request');

var username = 'Put the username of the bot here';
var password = 'The bots password here';

var groupId = "The ID of the group you want the bot to protect";

var keywords = [
  "thousands of robux",
  "thousands",
  "is giving access to",
  "giving access",
  "all game passes",
  "this is an official event",
  "official event",
  "no info needed","to the following link",
  "👉: rewardtool.se",
  "rewardtool.se",
  "rewardtool",
  "robux",
  "R$"
];

rbx.login(username, password).then(function() {
  console.log("LoggedIn");
  rbx.getWall({group: groupId}).then(function(data){
    var posts = data.posts
    for(var i = 0; i < data.posts.length; i++) {
      var found = 0;
      var message = data.posts[i]
      for (let phase of keywords) {
        if (message.content.toLowerCase().search(phase) != -1) found +=5;
      }
      if (/\S+\.\S+/.exec(message.content)) {
      //  found += 5;
      }
      if (found >= 5) {
          console.log("Removing Scam post from " + message.author.name );
          rbx.deleteWallPost({id:message.id, group:groupId}).catch(function(e) { });
        //  rbx.exile({group: groupId, target: message.author, deleteAllPosts: true});
      }
    }
  }).catch(function(e) { console.log(e); });

  var onWallPost = rbx.onWallPost({group: groupId});
  onWallPost.on("data", function(data) {
    var found = 0;
    for (let phase of keywords) {
      if (data.content.toLowerCase().search(phase) != -1) found+=5;
    }
    if (/\S+\.\S+/.exec(data.content)) {
    //  found += 5;
    }
    if (found >= 5) {
        console.log("Removing post with `" + data.content + "`` content!");
      rbx.deleteWallPost({id:data.id, group:groupId}).catch(function(e) { });
    }
  });
  onWallPost.on("close", function(e) { console.log("The event has disconnected!"); });
  onWallPost.on("error", function(e) { console.log(e); });
}).catch(function(e) {console.log(e); });
5 Likes

Was just about to post the exact same thing last night where I put in a for loop for mine to ensure I didn’t have to keep restarting the node process. I found success by updating the keywords to this though, if anyone wants to use this array:

let keywords = [
  "thousands of robux",
  "giving access to",
  "all game passes",
  "instantly receive access",
  "redemption code",
  "Get your CODE",
  "🔥All you need is a promotion code🔥",
  "earnblox.me",
  "no info needed",
  "to the following link",
  "👉: rewardtool.se",
  "rewardtool.se",
  "rewardtool",
  "❤Redeem TONS of ROBUX❤",
  " 🎁code🎁",
  "quickrobux.me",
  "EVERY Game Pass",
  "for FREE",
  "redeem here",
  "free robux",
  "you are qualified",
  "rewardbuddy.me",
  "Get your code",
  "👉",
  "R$ Instantly"
];
2 Likes

You’ll probably get way more false positives now though. As you use a lot keywords that’s in itself innocent. If you mainly search for “robux” and “R$” it will still work as they’ll always have to include that.

2 Likes

if you are on a mac and dont know how to run the bot. then simply follow the steps above but instead of running it with a bat script. press command + Space and type Terminal then type CD desktop/AntiScamBots and press enter.
desktop is the location where my bot is. andAntiScamBots is the folder where my index.js is.
image
then type ls that stands for list
image
and then to start the bot. type node index.js and press enter.
index.js is my javascript that runs the bot.
image
if it diddent remove all scam posts then press the arrow upkey on your keyboard and press enter. this will restart the node command.

2 Likes

Combining your keywords with Tor’s code we get this
var rbx = require(‘noblox.js’);
var request = require(‘request’);

var username = 'Put the username of the bot here';
var password = 'The bots password here';

var groupId = "The ID of the group you want the bot to protect";

var keywords = [
  "thousands of robux",
  "giving access to",
  "all game passes",
  "instantly receive access",
  "redemption code",
  "Get your CODE",
  "🔥All you need is a promotion code🔥",
  "earnblox.me",
  "no info needed",
  "to the following link",
  "👉: rewardtool.se",
  "rewardtool.se",
  "rewardtool",
  "❤Redeem TONS of ROBUX❤",
  " 🎁code🎁",
  "quickrobux.me",
  "EVERY Game Pass",
  "for FREE",
  "redeem here",
  "free robux",
  "you are qualified",
  "rewardbuddy.me",
  "Get your code",
  "👉",
  "R$ Instantly"
];

rbx.login(username, password).then(function() {
  console.log("LoggedIn");
  rbx.getWall({group: groupId}).then(function(data){
    var posts = data.posts
    for(var i = 0; i < data.posts.length; i++) {
      var found = 0;
      var message = data.posts[i]
      for (let phase of keywords) {
        if (message.content.toLowerCase().search(phase) != -1) found +=5;
      }
      if (/\S+\.\S+/.exec(message.content)) {
      //  found += 5;
      }
      if (found >= 5) {
          console.log("Removing Scam post from " + message.author.name );
          rbx.deleteWallPost({id:message.id, group:groupId}).catch(function(e) { });
        //  rbx.exile({group: groupId, target: message.author, deleteAllPosts: true});
      }
    }
  }).catch(function(e) { console.log(e); });

  var onWallPost = rbx.onWallPost({group: groupId});
  onWallPost.on("data", function(data) {
    var found = 0;
    for (let phase of keywords) {
      if (data.content.toLowerCase().search(phase) != -1) found+=5;
    }
    if (/\S+\.\S+/.exec(data.content)) {
    //  found += 5;
    }
    if (found >= 5) {
        console.log("Removing post with `" + data.content + "`` content!");
      rbx.deleteWallPost({id:data.id, group:groupId}).catch(function(e) { });
    }
  });
  onWallPost.on("close", function(e) { console.log("The event has disconnected!"); });
  onWallPost.on("error", function(e) { console.log(e); });
}).catch(function(e) {console.log(e); });

Very nice edit, it loops nicely.
An Idea I got was what if you could make a group manager discord bot (obviously use a different account and not your personal one) and make it delete messages and other stuff?
I know about RoVerify and all, a way around the leaking is if the bot generates an account for the user (if thats not against the roblox TOS)
Either way It’d be nice to have this bot run on a server rather than locally. Then it could truely run 24/7 withotu the expense of everyone’s electricity build.

Or you use nodemon / pm2 which is in my opinion better than a .bat file which is executing it all the time. Nodemon requires you to leave the CLI open, while pm2 let’s it run in the background, and after a restart (at least on a ubuntu vps) it starts the app automatically.

Only issue is that I’d have to make accounts etc (which I don’t know how to do trough a bot) and I’d have to store all the accounts somewhere on my computer which I really can’t do. But I believe you can run it on Heroku and it’s free.

1 Like

I tried doing Heroku but my brain is hurting
It seems like a good idea but I might need help carrying it out ;~;

I’ll help you out tommorow through PMs. I’m on phone at the moment.

1 Like

I have made a free other version of this that is way more easy to edit and works with the current scripts in 100%. Feel free to check it out.

Hey Dutch since the API update. I see you havn’t updated this script. If you wish I have changed your script so now it works, Here it is if you wish to look at it.

https://drive.google.com/open?id=1jJX-h09Rfx3nDckUHROwIUSr5QxC2wk2

1 Like

The usage shown here no longer works due to changes in Roblox’s login system with ReCaptcha. noblox-js/roblox.js now use Roblox tokens for login, meaning you can’t both run this script and use your account at the same time. rbx.login(token) would need to be used instead.

This may seem like an annoying work-around but ReCaptcha has also resulted in a huge decrease in the volume of scams posted in general on group walls.

This post does a good job of explaining how to use tokens to login: https://devforum.roblox.com/t/guide-to-scripting-bots-javascript-tutorial-funcaptcha-and-new-host-info/58201

Since the captcha change, This has stopped working. But I have edited the code for it to now work.

var request = require('request');

var cookie = "Cookie of the account."

var groupId = "00000";;

var keywords = [
  "thousands of robux",
  "thousands",
  "is giving access to",
  "giving access",
  "all game passes",
  "this is an official event",
  "official event",
  "no info needed","to the following link",
  "👉: rewardtool.se",
  "rewardtool.se",
  "rewardtool"
];

rbx.cookieLogin(cookie).then(function() {
  console.log("LoggedIn");
  rbx.getWall({group: groupId}).then(function(data){
    var posts = data.posts
    for(var i = 0; i < data.posts.length; i++) {
      var found = 0;
      var message = data.posts[i]
      for (let phase of keywords) {
        if (message.content.toLowerCase().search(phase) != -1) found +=5;
      }
      if (/\S+\.\S+/.exec(message.content)) {
      //  found += 5;
      }
      if (found >= 5) {
          console.log("Removing Scam post from " + message.author.name );
          rbx.deleteWallPost({id:message.id, group:groupId}).catch(function(e) { });
        //  rbx.exile({group: groupId, target: message.author, deleteAllPosts: true});
      }
    }
  }).catch(function(e) { console.log(e); });

  var onWallPost = rbx.onWallPost({group: group});
  onWallPost.on("data", function(data) {
    var found = 0;
    for (let phase of keywords) {
      if (data.content.toLowerCase().search(phase) != -1) found+=5;
    }
    if (/\S+\.\S+/.exec(data.content)) {
    //  found += 5;
    }
    if (found >= 5) {
        console.log("Removing post with `" + data.content + "`` content!");
      rbx.deleteWallPost({id:data.id, group:groupId}).catch(function(e) { });
    }
  });
  onWallPost.on("close", function(e) { console.log("The event has disconnected!"); });
  onWallPost.on("error", function(e) {});
}).catch(function(e) {});```
4 Likes