JS [Trinity RP] Авто-добавлялка в друзья / Флудер статусами

astynk

Известный
Автор темы
Проверенный
742
532
Форум является важной частью любого SAMP-сервера, так почему бы не написать что-то ориентированное именно на форум, а не на игру?

1. Авто-добавление онлайн игроков
Принцип работы: открывает ссылки на профили игроков из списка онлайн, нажимает на кнопку "Добавить в друзья".

Код:
var links = document.getElementsByTagName("A"),
profiles = [],
tick = 0;

for (var i = 0; i < links.length; i++)
    if (links[i].getAttribute("hovercard-ref") == "member")
        profiles.push(links[i]);

function addf() {
    var nw = window.open(profiles[tick]);
    setTimeout(function () {
        var g = nw.document.getElementsByTagName("A");
        for (var i = 0; i < g.length; i++)
            if (g[i].title == "Добавить в друзья")
                g[i].click();
    }, 3000);
    setTimeout(function () {
        tick++;
        nw.close();
        setTimeout(addf, 1000);
    }, 6000);
}
addf();

2. Автодобавление оффлайн игроков
Принцип работы: открывает полный список игроков, нажимает на кнопку "Добавить в друзья" напротив каждого профиля.

Код:
var poffset = 0;

function addf() {
    var nw = window.open("http://gta-trinity.ru/forum/index.php?/members/?sort_key=members_l_display_name&sort_order=asc&max_results=60&name_box=begins&st=" + poffset);
    setTimeout(function () {
        var g = nw.document.getElementsByTagName("A");
        for (var i = 0; i < g.length; i++)
            if (g[i].title == "Добавить в друзья")
                g[i].click();
    }, 5000);
    setTimeout(function () {
        nw.close();
        poffset += 60;
        setTimeout(addf, 1000);
    }, 10000);
}
addf();

3. Флудер статусами
Когда вы меняете свой статус на форуме, всем вашим друзьям приходит оповещение об этом. Меняя статус скриптом сотни раз, можно создать некоторый эффект.
Принцип работы: открывает окошко смены статуса, меняет его на рандомные цифры.

Код:
function byid(id) {
    return document.getElementById(id);
}
function floodstatustick() {
    byid("user_link").click();
    setTimeout(function () {
        byid("statusUpdateGlobal").value = Math.random();
    }, 3000);
    setTimeout(function () {
        byid("statusSubmitGlobal").click();
    }, 5000);
    setTimeout(floodstatustick, 10000);
}
setTimeout(floodstatustick, 5000);

Для работы первых двух скриптов потребуется разрешить все всплывающие окна в настройках браузера.

4. Флудер сообщениями
(в FORUM_LNK вставляем ссылку на раздел, который надо зафлудить)
Скорость отправки - 9-10 сообщений в секунду, вероятность того что сообщение не отправилось - менее 5%.
Код:
var FORUM_LNK = "http://gta-trinity.ru/forum/index.php?/forum/185-obedineniia/";
var C_PAGE = 1;

(function bigshit() {

var forum_wnd = window.open(FORUM_LNK + "/page-" + C_PAGE);

setTimeout(function () {
    var threads = forum_wnd.document.getElementsByClassName("topic_title");
    var tick = 0;

    setTimeout(function lala() {
        var tick_wnd = window.open(threads[tick].href);
        setTimeout(function () {
            var txtr = tick_wnd.document.getElementsByTagName("textarea")[1];
            if (!txtr) return setTimeout(arguments.callee, 1000);
            txtr.value = new Date().getTime();
            setTimeout(function () { tick_wnd.document.getElementById("submit_post").click(); setTimeout(function () {
                    tick_wnd.close();
                    if (tick < threads.length) lala(); else C_PAGE++, forum_wnd.close(), bigshit();
                    }, 2000) }, 1000);
            tick++;
        }, 1000);
    }, 1000);
}, 5000);

})();

Пошаговая инструкция для тех, кто чужд к JavaScript и не знает, как запустить вышеуказанные скрипты:

1. Ставим старый браузер Opera 9.64 (у каждого разные браузеры, у меня нет возможности писать инструкцию под каждый случай)
2. Авторизуемся под акком, открываем главную страницу форума
3. Жмём Ctrl-U - открывается исходный код страницы, затем ищем </body> при помощи поиска (Ctrl-F)
4. Перед </body> пишем <script>...</script>
5. Вместо многоточия вставляем нужный скрипт, нажимаем "Применить изменения"
 
Последнее редактирование:

astynk

Известный
Автор темы
Проверенный
742
532
Флудер сообщениями - в процессе написания. Имеются некоторые проблемы с отправкой сообщения.

upd: добавлено
 
Последнее редактирование:

r4nx

Известный
Друг
201
263
Почему нельзя просто консоль в браузере использовать?
 

astynk

Известный
Автор темы
Проверенный
742
532
Потому что я в рот ебал по одной строчке дрочить.
Как через консоль вообще можно написать что-то
 

molimawka

Известный
Друг
443
655
Потому что я в рот ебал по одной строчке дрочить.
Как через консоль вообще можно написать что-то
Раскрою страшную тайну, но эти скрипты и в консоли работают

И зачем писать setTimeout(addf, 1000) если можно весь скрипт обгорнуть setInterval(#func#, 6000)
 
  • Нравится
Реакции: r4nx

astynk

Известный
Автор темы
Проверенный
742
532
Переписал авто-добавлялку в друзья. Теперь:
1 - работает на ajax. Никаких всплывающих окон и т.д.
2 - добавлена статистика работы. Пишет сколько друзей добавлено и т.д.
3 - изменен принцип поиска профилей. Сортирует по кол-ву сообщений, от большего к меньшему. В этом есть смысл, т.к. большинство профилей заброшено и на них не заходили годами.

В самом начале pageN = 0 - с какой страницы начинать.

Код:
var pageN=0;function fixn(n){return(n<10?"0":"")+n}function gtime(){var t=new Date(),h=t.getHours(),m=t.getMinutes(),s=t.getSeconds();return fixn(h)+":"+fixn(m)+":"+fixn(s)}var stats=document.createElement("DIV");document.body.insertBefore(stats,document.body.firstChild);stats.style.cssText="padding: 10px; font-family: Century Gothic";stats.innerHTML="Авто-добавление друзей by @astynk // 25.10.2018<br />Друзей добавлено: <span id='count'>0</span><br />Времени прошло: <span id='datamm'>00</span>:<span id='datass'>00</span><br /><br />";var logw=document.createElement("DIV");logw.style.cssText="height: 195px; overflow-y: scroll; font-size: 10px";stats.appendChild(logw);logw.innerHTML="&gt; Лог работы. Время начала: "+gtime();function writeIntoLog(text){logw.innerHTML+="<br />"+gtime()+" ::: "+text;logw.scrollTop=9999}function incrAddFInfo(){var a=document.getElementsByClassName("addfinfo");a[a.length-1].innerHTML++;document.getElementById("count").innerHTML++}function toSM(n){n=Math.round(n/1000);return n<60?(n+" сек."):(Math.floor(n/60)+" мин. "+(n-Math.floor(n/60)*60)+" сек.")}var timeL=new Date().getTime();function AddFriends(){timeL=new Date().getTime();var xhr1=new XMLHttpRequest();xhr1.open("GET","http://gta-trinity.ru/forum/index.php?/members/?sort_key=posts&sort_order=desc&max_results=60&name_box=begins&st="+(pageN*60),true);xhr1.send(null);writeIntoLog("Получение данных со страницы #"+pageN+"...");xhr1.onreadystatechange=function(){if(xhr1.readyState!=4)return;var div=document.createElement("DIV");div.innerHTML=xhr1.responseText;var links=div.getElementsByTagName("A"),urls=[];for(var i=0;i<links.length;i++)if(links[i].title=="Добавить в друзья")urls.push(links[i].href);writeIntoLog("Данные получены. Добавление друзей: <span class='addfinfo'>0</span>/"+urls.length);var C=0;for(var i=0;i<urls.length;i++){var xhr2=new XMLHttpRequest();xhr2.open("GET",urls[i],true);xhr2.send(null);xhr2.onreadystatechange=function(){if(this.readyState!=4)return;C++;incrAddFInfo();if(C!=urls.length-1)return;pageN++;writeIntoLog("Завершено. За "+toSM(new Date().getTime()-timeL)+" было добавлено "+(C+1)+" друзей.");AddFriends()}}}}AddFriends();var mm=0,ss=0;setInterval(function(){ss++;if(ss==60)ss=0,mm++;var hooked_mm=mm<10?("0"+mm):mm;var hooked_ss=ss<10?("0"+ss):ss;document.getElementById("datamm").innerHTML=hooked_mm;document.getElementById("datass").innerHTML=hooked_ss},1000);

F1daTQX.png
 

astynk

Известный
Автор темы
Проверенный
742
532
Функция для отправки сообщения, наконец-то на ajax'е. Скорость флуда впечатляет, создавая по 30 параллельных запросов можно добиться скорости более 100 сообщений в минуту.

Код:
function SendMessage(threadID, forumID, text, callback) {
    var xhr = new XMLHttpRequest();
    xhr.open("POST", ipb.vars['base_url'] + 'app=forums&module=ajax&section=topics&do=reply&t=' +threadID + '&f=' + forumID, true);
    xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
    xhr.setRequestHeader("X-Prototype-Version", "1.7.1");
    xhr.setRequestHeader("Accept", "text/javascript, text/html, application/xml, text/xml, */*");
    xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=UTF-8");
    xhr.send("md5check=" + ipb.vars['secure_hash'] + "&Post=" + text + "&isRte=0&noSmilies=0");
    xhr.onreadystatechange = function () {
        if (xhr.readyState == 4) callback && callback(xhr.responseText);
    };
}