QuestionLooking for a guild maintenance bot

Posts 1–10 of 10 · Page 1 of 1
Looking for a guild maintenance bot
I'm the leader of a sizeable guild on AQW. Up until recently, we used to have a bot on discord that would be registered on a throwaway account and monitor the guild chat as well as keep track of who leaves and joins.

Recently our bot accounts have been getting disabled within 24 hours of creation. Either AE has caught wind of it, or the bot creator has stopped patching it so it can't bypass AE's detection anymore. I need a bot to replace it with similar features, because it's been really convenient to help maintain the guild. Even better if it can maintain more than one account per discord server so that we can also use it on our branches.

Please give me some suggestions.
I doubt that anyone would be willing (including me) to make that for free. You have to talk to someone, like... pay them to do that. But the program seems nice though, especially if it was done without using any flash-based technology like this.
Quote Originally Posted by NoobFloob View Post
I doubt that anyone would be willing (including me) to make that for free. You have to talk to someone, like... pay them to do that. But the program seems nice though, especially if it was done without using any flash-based technology like this.
Oh I'm not hoping for one made from scratch for free. I'm just wondering if there's an existing bot that you can direct me towards with similar features to the ones I described.
Quote Originally Posted by TheDarkLord666 View Post
I'm just wondering if there's an existing bot that you can direct me towards with similar features to the ones I described.
From what I know, bots that are similar to the ones you described does not exist, at least not publicly. Someone might have made that for a similar agenda but was not released because they have no reason to release it publicly.
Sounds like fun, I have current limitations preventing me from accessing certain hardware of mine. This is where most of my tools sit. I will likely target doing this on HTML/JS/Discord if I do for now. Seeing as Windows has the subsystem should be fine.
I do not have access to Visual Studio at the time being. So most of my projects are on hold. (Maybe a few months before I return to actively developing)

Now monthly updates/etc. I agree with Floob not many will do this without pay.

To make sure I get the gist, you want this account to login and be able to maintain guild chat talk to discord? Do you also seek be able to send guild messages from discord as that is much more work than just being able to keep track of guild chat one way.
Quote Originally Posted by IfOnlyYouKnew View Post
Sounds like fun, I have current limitations preventing me from accessing certain hardware of mine. This is where most of my tools sit. I will likely target doing this on HTML/JS/Discord if I do for now. Seeing as Windows has the subsystem should be fine.
I do not have access to Visual Studio at the time being. So most of my projects are on hold. (Maybe a few months before I return to actively developing)

Now monthly updates/etc. I agree with Floob not many will do this without pay.

To make sure I get the gist, you want this account to login and be able to maintain guild chat talk to discord? Do you also seek be able to send guild messages from discord as that is much more work than just being able to keep track of guild chat one way.
Well, the old bot we used used to login a throwaway account via discord and have the function to keep track of the guild chat and joins/leaves, while also being able to send messages to the guild chat via discord.

Again, I don't want to impose on the people here, so please don't go out of your way to make one for me if it'll be too much of an inconvenience. I'm just trying to see if anyone knows of a bot with such functionality to replace the one we used to have, or alternatively help me figure out a safeguard to ensure our throwaways aren't banned so quickly with our existing bot.

Edit: Meanwhile I'm still looking around elsewhere as well, reaching out to former guild connections to see if they have any ideas. It's a bit of a shot in the dark right now. I'm not so desperate for this bot, but it was a great convenience to have on hand. It can be a bit difficult to maintain a guild of our size without the help of such resources.
Quote Originally Posted by TheDarkLord666 View Post
don't go out of your way to make one for me if it'll be too much of an inconvenience.
I don't think anyone would be inconvenienced especially when they are paid to do that.

Quote Originally Posted by TheDarkLord666 View Post
help me figure out a safeguard to ensure our throwaways aren't banned so quickly with our existing bot.
If you don't have any access to the source code of the bot or have no idea how to "patch" that (in case that you have the source code), then you can't safeguard it. IMO, it gets detected easily due to the suspicious packets being sent to the game. The packets sent to the server might be different from the original packets generated by the original AQW client, causing a flag to the server and getting your throwaway account disabled.
We're you using AQWConnect? Seems to be the one that appears when searching on google.


Shouldn't need constant updates (at least for a bit) from us devs if we link it to a cefSharp browser/Similar, Use ExternalCalls to the browser, implement java to react and create a custom debug made only for grabbing the guild chat. Just that at the very least should allow you to once again get guildchat in Discord from AQW. Sending messages from discord is another ballparks work. Also I'm almost certain NoobFloob could get it done for you. I actually cannot manage this at the moment. So unless you are willing to wait literal months for my life to change it's a no from me, Sorry. If and when I have the availability I will look into and attempt it if Floob has not.
Quote Originally Posted by IfOnlyYouKnew View Post
We're you using AQWConnect?
Now that I know this exists, patching it would be quite easy.

Steps:
  1. Head over to the '<AQWConnect Directory>/resources/app'
  2. Click 'main.js' and run it with notepad or any text editor
  3. Copy the javascript code below
  4. Paste the copied code onto the main.js file and save
  5. Run

 
main.js
Code:
const { app, BrowserWindow, Menu, session } = require("electron");
const path = require("path");
require("./modules/Flash");
const { ipcMain } = require("electron");
const Discord = require("./modules/Discord");
const AQMessage = require("./modules/AQMessage");
const { fs } = require("fs");

let mainWindow;
function createWindow() {
    mainWindow = new BrowserWindow({
        width: 960,
        height: 580,
        webPreferences: {
            plugins: true,
            nodeIntegration: true,
            enableRemoteModule: true,
        },
        frame: true,
    });
    mainWindow.setMenu(null);
    mainWindow.setIcon(path.join(__dirname, 'public', "Logo256.png"));
    mainWindow.webContents.on("new-window", newWindow);
    mainWindow.loadFile(path.join(__dirname, "public", "index.html"));

    require("./modules/app");
}

app.disableHardwareAcceleration(); 
app.on("ready", createWindow);
app.on("window-all-closed", () => {
    try {
        require('fs').unlinkSync(path.join(__dirname, "Console.log"));
    }
    catch { }
    app.quit();
});


/* IPC SECTION */
ipcMain.on("packet", (event, packet) => {
	//console.log(packet);
    if (Discord.IsLogging && (packet.includes("%xt%chat") || packet.includes("%xt%whisper"))) {
        var Message = packet.split("%")[4];
        var Sender = packet.split("%")[5];
        if (packet.includes("%xt%whisper")) {
            Discord.SendDiscordMessage(packet, Sender, true);
            return;
        }
        Discord.SendDiscordMessage(Message, Sender);
    }
});
ipcMain.on("discord-start", (event, args) => {
    if (args[1] == true)
        Discord.Initiate(args[0], args[1]);
    else Discord.DestroyClient();
});
ipcMain.on("discord-isEnabled", (event) => {
    event.returnValue = Discord.IsLogging;
});

var LoginServer = "Artix";
var AutoRelog = false;
ipcMain.on("set-login-server", (event, server) => {
    LoginServer = server;
})
ipcMain.on("get-login-server", (event) => {
    event.returnValue = LoginServer;
})
ipcMain.on("login", (event) => {
    mainWindow.webContents.send("Login");
})
ipcMain.on("join", (event, server) => {
    mainWindow.webContents.send("Connect", server);
})
ipcMain.on("set-autoRelog", (event, state) => {
    AutoRelog = state;
});
ipcMain.on("get-autoRelog", (event) => {
    event.returnValue = AutoRelog;
});
ipcMain.on("disconnect-called", (event) => {
    if (AutoRelog)
    {
        setTimeout(() => {
            mainWindow.webContents.send("Login");
        }, 2000);
        setTimeout(() => {
            mainWindow.webContents.send("Connect", LoginServer);
        }, 5000);
    }
});

app.once('ready', () => {
    session.defaultSession.webRequest.onBeforeSendHeaders((details, callback) => {
        details.requestHeaders['User-Agent'] = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) ArtixGameLauncher/2.1.2 Chrome/80.0.3987.163 Electron/8.5.5 Safari/537.36";
        details.requestHeaders['artixmode'] = 'launcher';
        callback({ cancel: false, requestHeaders: details.requestHeaders });
    });
});

/* FUNCTIONS */
function newWindow(event, url, frameName, disposition, options, additionalFeatures, referrer, postBody) { //Catched "new-window" event
	//Modify the popup window for character page to disable node integration (Needed for JQuery to work)
    event.preventDefault();
    const win = new BrowserWindow({
        webContents: options.webContents, // use existing webContents if provided
        show: true,
        webPreferences: {
            plugins: true
        }
    });
    win.setMenu(null);
    win.loadURL(url)
}


This 'patch' essentially makes the application a legitimate Artix Game Launcher which in theory reduces the risk of getting your throwaway account getting disabled easily.

@TheDarkLord666
Quote Originally Posted by NoobFloob View Post
Now that I know this exists, patching it would be quite easy.

Steps:
  1. Head over to the '<AQWConnect Directory>/resources/app'
  2. Click 'main.js' and run it with notepad or any text editor
  3. Copy the javascript code below
  4. Paste the copied code onto the main.js file and save
  5. Run

 
main.js
Code:
const { app, BrowserWindow, Menu, session } = require("electron");
const path = require("path");
require("./modules/Flash");
const { ipcMain } = require("electron");
const Discord = require("./modules/Discord");
const AQMessage = require("./modules/AQMessage");
const { fs } = require("fs");

let mainWindow;
function createWindow() {
    mainWindow = new BrowserWindow({
        width: 960,
        height: 580,
        webPreferences: {
            plugins: true,
            nodeIntegration: true,
            enableRemoteModule: true,
        },
        frame: true,
    });
    mainWindow.setMenu(null);
    mainWindow.setIcon(path.join(__dirname, 'public', "Logo256.png"));
    mainWindow.webContents.on("new-window", newWindow);
    mainWindow.loadFile(path.join(__dirname, "public", "index.html"));

    require("./modules/app");
}

app.disableHardwareAcceleration(); 
app.on("ready", createWindow);
app.on("window-all-closed", () => {
    try {
        require('fs').unlinkSync(path.join(__dirname, "Console.log"));
    }
    catch { }
    app.quit();
});


/* IPC SECTION */
ipcMain.on("packet", (event, packet) => {
	//console.log(packet);
    if (Discord.IsLogging && (packet.includes("%xt%chat") || packet.includes("%xt%whisper"))) {
        var Message = packet.split("%")[4];
        var Sender = packet.split("%")[5];
        if (packet.includes("%xt%whisper")) {
            Discord.SendDiscordMessage(packet, Sender, true);
            return;
        }
        Discord.SendDiscordMessage(Message, Sender);
    }
});
ipcMain.on("discord-start", (event, args) => {
    if (args[1] == true)
        Discord.Initiate(args[0], args[1]);
    else Discord.DestroyClient();
});
ipcMain.on("discord-isEnabled", (event) => {
    event.returnValue = Discord.IsLogging;
});

var LoginServer = "Artix";
var AutoRelog = false;
ipcMain.on("set-login-server", (event, server) => {
    LoginServer = server;
})
ipcMain.on("get-login-server", (event) => {
    event.returnValue = LoginServer;
})
ipcMain.on("login", (event) => {
    mainWindow.webContents.send("Login");
})
ipcMain.on("join", (event, server) => {
    mainWindow.webContents.send("Connect", server);
})
ipcMain.on("set-autoRelog", (event, state) => {
    AutoRelog = state;
});
ipcMain.on("get-autoRelog", (event) => {
    event.returnValue = AutoRelog;
});
ipcMain.on("disconnect-called", (event) => {
    if (AutoRelog)
    {
        setTimeout(() => {
            mainWindow.webContents.send("Login");
        }, 2000);
        setTimeout(() => {
            mainWindow.webContents.send("Connect", LoginServer);
        }, 5000);
    }
});

app.once('ready', () => {
    session.defaultSession.webRequest.onBeforeSendHeaders((details, callback) => {
        details.requestHeaders['User-Agent'] = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) ArtixGameLauncher/2.1.2 Chrome/80.0.3987.163 Electron/8.5.5 Safari/537.36";
        details.requestHeaders['artixmode'] = 'launcher';
        callback({ cancel: false, requestHeaders: details.requestHeaders });
    });
});

/* FUNCTIONS */
function newWindow(event, url, frameName, disposition, options, additionalFeatures, referrer, postBody) { //Catched "new-window" event
	//Modify the popup window for character page to disable node integration (Needed for JQuery to work)
    event.preventDefault();
    const win = new BrowserWindow({
        webContents: options.webContents, // use existing webContents if provided
        show: true,
        webPreferences: {
            plugins: true
        }
    });
    win.setMenu(null);
    win.loadURL(url)
}


This 'patch' essentially makes the application a legitimate Artix Game Launcher which in theory reduces the risk of getting your throwaway account getting disabled easily.

@TheDarkLord666
Allow me to pitch in: when I release flashdevtools, you can use it to do this from the official game launcher, which in theory even further reduces the risk of getting your account disabled.

On topic, this sounds like an interesting project. I'm currently busy with FDT, but after its initial release I might look into developing a guild maintenance bot.
Posts 1–10 of 10 · Page 1 of 1

Post a Reply

Similar Threads

Tags for this Thread

None

Need help?