mandalorien / Sethi - Spy

// ==UserScript==
// @namespace    https://openuserjs.org/users/mandalorien
// @name         Sethi - Spy
// @author mandalorien
// @version      0.1.2
// @description  enregistre les espionnages recu , puis regroupement de données .
// @copyright 2020, mandalorien (https://openuserjs.org/users/mandalorien)
// @license GPL-2.0-only
// @require      https://code.jquery.com/jquery-3.4.1.min.js
// @require      https://openuserjs.org/install/mandalorien/Sethi_-_Functions.user.js
// @match        https://*.ogame.gameforge.com/game/index.php?page=*
// @match        https://*.ogame.gameforge.com/game/index.php?page=ingame&component=galaxy*
// @match        https://*.ogame.gameforge.com/game/index.php?page=messages*
// @match        https://*.ogame.gameforge.com/game/index.php?page=ingame&component=preferences*
// @updateURL https://openuserjs.org/meta/mandalorien/Sethi_-_Spy.meta.js
// @downloadURL https://openuserjs.org/install/mandalorien/Sethi_-_Spy.user.js
// @grant        GM_xmlhttpRequest
// @grant        GM_addStyle
// @run-at       document-end
// ==/UserScript==

// ==OpenUser JS==
// @author mandalorien
// ==OpenUser JS==

var db;
var KEYS = [37,38,39,40]; //left,high,right,low
var META_UNIVERSE = $('meta[name="ogame-universe"').attr("content");
var UNIVERSE = 0;
const regex = /s(.*)\-|U/;
let m;

var _BackgroundTable ='data:image/gif;base64,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';

var _MODE_DEV = false;

$(document).ready(function(){

    if ((m = regex.exec(META_UNIVERSE)) !== null) {
        // The result can be accessed through the `m`-variable.

        if(window.openDatabase){
            db = openDatabase('sethi', '1.0', 'database', 1000000000);
            db.transaction(function (tx) {
                tx.executeSql('CREATE TABLE IF NOT EXISTS LOGS (id_spy,Universe,PlayerName,PlayerAlliance,PlanetName,HaveMoon,SizeMoon,GalaxyAttaker,SystemAttaker,PlanetAttaker,Timer,GalaxyDefender,SystemDefender,PlanetDefender)');
            });
        }

        UNIVERSE = parseFloat(m[1]);
    }

    //-----------------------------PAGE RECAP
    var _MENU = $('#menuTableTools');
    var _LINK = '<li id="optionTopRaider"><span class="menu_icon"><a id="iconeUpdate" href="https://s'+ UNIVERSE +'-fr.ogame.gameforge.com/game/index.php?page=ingame&component=overview&sethi=recap"></a></span><a id="affOptionsTR" class="menubutton " href="https://s'+ UNIVERSE +'-fr.ogame.gameforge.com/game/index.php?page=ingame&component=overview&sethi=recap" accesskey="" target="_self"><span class="textlabel">Recap</span></a></li>';

    if($_GET('sethi') == 'recap'){

        //on prepare le tableau
        var _TABLE = "<table id='sethi_information' width='657px' background='"+ _BackgroundTable +"';>";

        _TABLE +="<tr>";
        _TABLE +='<th><input width="100px" type="text" id="searchPlayer" class="ogl-formatInput"></th>';

        _TABLE +="<th colspan='24'>Heures :</th>";

        _TABLE +="</tr>";

        _TABLE +="<tr>";
        _TABLE +="<th>Joueurs</th>";
        for(var _H = 0;_H < 24;_H++){
            _TABLE +="<th width='15px' style='padding:3px;'>"+ _H +"</th>";
        }

        _TABLE +="</tr>";
        _TABLE +="</table>";

        $("#middle").html(_TABLE);
    }

    $(_MENU).append(_LINK);
    

    var GALAXY = parseFloat($("#galaxy_input").val());
    var SYSTEM = parseFloat($("#system_input").val());

    spyMessage(UNIVERSE);

    //show more spy
    $("#planetList .smallplanet").each(function(){

        var _E = $(this);
        var _pla = $(_E).find('.planetlink').prepend('<span class="infospy"></span>');
        var _mo = $(_E).find('.moonlink').prepend('<span class="infospy"></span>');
        var _C = $(_E).find('.planet-koords').text();
        var positions = _C.split(':');


        var _Gcheck = parseFloat(positions[0].substr(1,positions[0].length));
        var _Scheck = parseFloat(positions[1]);
        var _Pcheck = parseFloat(positions[2].substr(0,positions[0].length));

        db.transaction(function (tx) {
            tx.executeSql('SELECT * FROM LOGS WHERE GalaxyDefender = ? AND SystemDefender = ? AND PlanetDefender = ?', [_Gcheck,_Scheck,_Pcheck], function (tx, results) {

                let amountMoon = 0;
                let amountPlanet = 0;

                $(results.rows).each(function(i,ele){
                    if(ele.HaveMoon == 0){
                        amountPlanet++;
                    }else{
                        amountMoon ++;
                    }
                });

                $(_pla).find('.infospy').text(amountPlanet);
                $(_mo).find('.infospy').text(amountMoon);
            });
        });
    });
});


//https://xxx.ogame.gameforge.com/game/index.php?page=messages&tab=20&ajax=1 page Spy
//https://xxx.ogame.gameforge.com/game/index.php?page=messages&tab=25&ajax=1 page corbeille
function spyMessage(UNIVERSE){

    let _R;

    _R = 'https://s'+ UNIVERSE +'-fr.ogame.gameforge.com/game/index.php?page=messages&tab=20&ajax=1';
    if(_MODE_DEV){
        console.log(_R);
    }
    
    $.ajax({
        method: "GET",
        url: _R,
        dataType:'html'
    })
        .done(function(_RESULT){

        let _HTML = $.parseHTML(_RESULT);
        let _LI = $(_HTML).find('.tab_inner li.msg');

        if(_LI.length < 50){
            alert("Veuillez changer Nombre de messages par page :50 , actuellement votre nombre de messages affiché simultanément est "+ _LI.length +"");
            return;
        }
        
        //Todo : faire un compteur
        $(_LI).each(function(index,li){
            let DATE_SPY = $(li).find('.msg_head').find('.fright').find('.msg_date').text().trim();
            let SPY_MSG = $(li).find('.msg_content').find('.espionageDefText').text().trim();
            let SPY_HTML = $(li).find('.msg_content').find('.espionageDefText');
            // console.log(SPY_MSG);
            let SPY_ID_MSG = $(li).attr('data-msg-id');

            if(SPY_MSG != ""){
                let coordAttaker = findCoord(SPY_HTML,SPY_MSG.trim(),0);
                let coordDefender = findCoord(SPY_HTML,SPY_MSG.trim(),1);

                let PLAYERNAME = findPlayerName(SPY_MSG);

                let TP = -1;
                let TM = -1;

                if(coordAttaker.isMoon == 0){
                    TP = 0;
                }else{
                    TM = 0;
                }

                if(_MODE_DEV){
                    console.log(coordAttaker);
                    console.log(coordDefender);
                }

                let _Data = [
                    SPY_ID_MSG,
                    UNIVERSE,
                    PLAYERNAME,
                    '',
                    '',
                    coordAttaker.isMoon,
                    '',
                    coordAttaker.galaxy,
                    coordAttaker.system,
                    coordAttaker.planet,
                    DATE_SPY,
                    coordDefender.galaxy,
                    coordDefender.system,
                    coordDefender.planet
                ];

                if(window.openDatabase){
                    db.transaction(function (tx) {
                        /* LOGS id unique,id_spy,Universe,PlayerName,PlayerAlliance,PlanetName,HaveMoon,SizeMoon,GalaxyAttaker,SystemAttaker,PlanetAttaker,Timer,GalaxyDefender,SystemDefender,PlanetDefender */
                        tx.executeSql('SELECT * FROM LOGS WHERE id_spy = ?', [SPY_ID_MSG], function (tx, results) {
                            var len = parseFloat(results.rows.length, i);

                            if(len <= 0){
                                
                                var _REQ = 'INSERT INTO LOGS ';
                                _REQ += '(id_spy,Universe,PlayerName,PlayerAlliance,PlanetName,HaveMoon,SizeMoon,GalaxyAttaker,SystemAttaker,PlanetAttaker,Timer,GalaxyDefender,SystemDefender,PlanetDefender) ';
                                _REQ += 'VALUES ';
                                _REQ += '(?,?,?,?,?,?,?,?,?,?,?,?,?,?) ';
                                
                                if(_MODE_DEV){
                                    console.log(_REQ);
                                }
                                
                                tx.executeSql(_REQ,_Data, function (tx, results) {
                                    console.log("save : "+ _Data[2] + ' ' + _Data[10]);
                                });
                            }
                        }, null);
                    });
                }
            }
        });
    });
    

_R = 'https://s'+ UNIVERSE +'-fr.ogame.gameforge.com/game/index.php?page=messages&tab=25&ajax=1';
    if(_MODE_DEV){
        console.log(_R);
    }
    
    $.ajax({
        method: "GET",
        url: _R,
        dataType:'html'
    })
        .done(function(_RESULT){

        let _HTML = $.parseHTML(_RESULT);
        let _LI = $(_HTML).find('.tab_inner li.msg');

        //Todo : faire un compteur
        $(_LI).each(function(index,li){
            let DATE_SPY = $(li).find('.msg_head').find('.fright').find('.msg_date').text().trim();
            let SPY_MSG = $(li).find('.msg_content').find('.espionageDefText').text().trim();
            let SPY_HTML = $(li).find('.msg_content').find('.espionageDefText');
            // console.log(SPY_MSG);
            let SPY_ID_MSG = $(li).attr('data-msg-id');

            if(SPY_MSG != ""){
                let coordAttaker = findCoord(SPY_HTML,SPY_MSG.trim(),0);
                let coordDefender = findCoord(SPY_HTML,SPY_MSG.trim(),1);

                let PLAYERNAME = findPlayerName(SPY_MSG);

                let TP = -1;
                let TM = -1;

                if(coordAttaker.isMoon == 0){
                    TP = 0;
                }else{
                    TM = 0;
                }

                if(_MODE_DEV){
                    console.log(coordAttaker);
                    console.log(coordDefender);
                }

                let _Data = [
                    SPY_ID_MSG,
                    UNIVERSE,
                    PLAYERNAME,
                    '',
                    '',
                    coordAttaker.isMoon,
                    '',
                    coordAttaker.galaxy,
                    coordAttaker.system,
                    coordAttaker.planet,
                    DATE_SPY,
                    coordDefender.galaxy,
                    coordDefender.system,
                    coordDefender.planet
                ];

                if(window.openDatabase){
                    db.transaction(function (tx) {
                        /* LOGS id unique,id_spy,Universe,PlayerName,PlayerAlliance,PlanetName,HaveMoon,SizeMoon,GalaxyAttaker,SystemAttaker,PlanetAttaker,Timer,GalaxyDefender,SystemDefender,PlanetDefender */
                        tx.executeSql('SELECT * FROM LOGS WHERE id_spy = ?', [SPY_ID_MSG], function (tx, results) {
                            var len = parseFloat(results.rows.length, i);

                            if(len <= 0){
                                
                                var _REQ = 'INSERT INTO LOGS ';
                                _REQ += '(id_spy,Universe,PlayerName,PlayerAlliance,PlanetName,HaveMoon,SizeMoon,GalaxyAttaker,SystemAttaker,PlanetAttaker,Timer,GalaxyDefender,SystemDefender,PlanetDefender) ';
                                _REQ += 'VALUES ';
                                _REQ += '(?,?,?,?,?,?,?,?,?,?,?,?,?,?) ';
                                
                                if(_MODE_DEV){
                                    console.log(_REQ);
                                }
                                
                                tx.executeSql(_REQ,_Data, function (tx, results) {
                                    console.log("save : "+ _Data[2] + ' ' + _Data[10]);
                                });
                            }
                        }, null);
                    });
                }
            }
        });
    });
}

/****
 * PARAM : param is text focus get url parameters
 *
****/
function $_GET(param) {
	var vars = {};
	window.location.href.replace( location.hash, '' ).replace(
		/[?&]+([^=&]+)=?([^&]*)?/gi, // regexp
		function( m, key, value ) { // callback
			vars[key] = value !== undefined ? value : '';
		}
	);

	if ( param ) {
		return vars[param] ? vars[param] : null;
	}
	return vars;
}

/****
 * PARAM : Data is array object container data send
 *
****/
function sendData(Data){

    let _R = "url to send data";

     $.ajax({
        method: "POST",
        url: _R,
        data: Data,
        dataType:'json'
    })
    .done(function(_RESULT){

     });
}

function findCoord(htmlb,text,iindex){
    const regex = /\[[^[\]]*\]/gm;
    let m;

    let _array = [];
    while ((m = regex.exec(text)) !== null) {

        // This is necessary to avoid infinite loops with zero-width matches
        if (m.index === regex.lastIndex) {
            regex.lastIndex++;
        }

        let coord = m[0];

        _array.push(coord);

    }

    /* pour savoir de ou a ou */
    var _Moon = 0;

    if($($(htmlb).find('figure')[1]).length > 0){
        if($($(htmlb).find('figure')[1]).hasClass('moon')){
            _Moon = 1;
        }
    }else{
        _Moon = 0;
    }

    let position = _array[iindex].split(':');

    return {
        galaxy:parseFloat(position[0].substr(1,position[0].length)),
        system:parseFloat(position[1]),
        planet:parseFloat(position[2].substr(0,position[0].length)),
        isMoon:_Moon
    };
}

function findPlayerName(text){
    const regex = /\((.*)\)/;
    let m;

    if ((m = regex.exec(text)) !== null) {
        // The result can be accessed through the `m`-variable.

        let playerName = m[1];
        return playerName;
    }
}

GM_addStyle(`
span.infospy{
  position:absolute;
  top:28px;
  left:2px;
  font-size:8px!important;
}
`);