佐々木bot

try to take over the world!

Vous devrez installer une extension telle que Tampermonkey, Greasemonkey ou Violentmonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey ou Violentmonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey ou Violentmonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey ou Userscripts pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey pour installer ce script.

Vous devrez installer une extension de gestionnaire de script utilisateur pour installer ce script.

(J'ai déjà un gestionnaire de scripts utilisateur, laissez-moi l'installer !)

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

(J'ai déjà un gestionnaire de style utilisateur, laissez-moi l'installer!)

// ==UserScript==
// @name         佐々木bot
// @namespace    http://tampermonkey.net/
// @version      0.7
// @description  try to take over the world!
// @author       You
// @match        *.x-feeder.info/*/
// @exclude      *.x-feeder.info/*/sp*
// @exclude      *.x-feeder.info/*/settings/**
// @require      https://greasyfork.org/scripts/396472-yaju1919/code/yaju1919.js?version=802405
// @require      https://greasyfork.org/scripts/388005-managed-extensions/code/Managed_Extensions.js?version=720959
// @grant        GM.setValue
// @grant        GM.getValue
// @grant        GM.xmlHttpRequest
// ==/UserScript==

(function(){
    'use strict';
    function setCookie(c_name,value,expiredays){
        // pathの指定
        var path = location.pathname;
        // pathをフォルダ毎に指定する場合のIE対策
        var paths = new Array();
        paths = path.split("/");
        if(paths[paths.length-1] != ""){
            paths[paths.length-1] = "";
            path = paths.join("/");
        }
        // 有効期限の日付
        var extime = new Date().getTime();
        var cltime = new Date(extime + (60*60*24*1000*expiredays));
        var exdate = cltime.toUTCString();
        // クッキーに保存する文字列を生成
        var s = "";
        s += c_name + "=" + value;// 値はエンコードしない
        s += "; path=" + path;
        if(expiredays){
            s += "; expires=" +exdate+"; ";
        }else{
            s += "; ";
        }
        // クッキーに保存
        document.cookie=s;
    }
    var input_time_min, input_time_max, atrandom_flag, run_flag, btn_holder;
    win.Managed_Extensions["佐々木bot"] = {
        config: ()=>{
            const h = $("<div>");
            $("<div>").text("メッセ送信間隔[秒]").appendTo(h);
            input_time_min = yaju1919.addInputNumber(h,{
                placeholder: "最小",
                min: 10,
                max: 500,
                value: 30,
                save: 'min',
                int: true
            });
            $("<div>").text("~").appendTo(h);
            input_time_max = yaju1919.addInputNumber(h,{
                placeholder: "最大",
                min: 10,
                max: 500,
                value: 60,
                save: 'max',
                int: true
            });
            h.append("<br>");
            atrandom_flag = yaju1919.addInputBool(h,{
                title: "無差別モード",
            });
            h.append("<br>");
            h.append("<br>");
            btn_holder = $("<div>").appendTo(h);
            run_flag = yaju1919.addInputBool(btn_holder,{
                title: "run",
                change: function(v){
                    if(v) main();
                }
            });
            return h;
        },
    };
    //------------------
    const _ = str => {
        console.warn(`${str} ${yaju1919.getTime()}`);
    };
    let cnt = 0,
        cnt_sid = 0;
    const main = () => {
        setCookie("sid",'',0);
        if(cnt++ % 3){
            main2();
            setTimeout(main, yaju1919.randInt(input_time_min(),input_time_max()) * 1000);
        }
        else {
            GM.xmlHttpRequest({
                method: "GET",
                url: location.href,
                onload: r => {
                    if(!run_flag()) return;
                    var hds = r.responseHeaders;
                    var m = hds.match(/sid/);
                    if(!m) return _("sidが見つかりませんでした。"); // sidが無い
                    _(`${++cnt_sid}回目 sidを新規発行しました。`);
                    var sid = hds.slice(m.index + 4).match(/[0-9a-zA-Z]+/)[0];
                    setCookie("sid",sid,0);
                    main2();
                    setTimeout(main, yaju1919.randInt(input_time_min(),input_time_max()) * 1000);
                },
            });
        }
    };
    let targetId, ignore = [], exp = 0, level2exp = 10;
    function main2(){
        var ids = Object.keys(unsafeWindow.onlineUsers);
        if(ids.filter(v=>all_ids.indexOf(v)===-1).length) selectNewTarget();
        if(targetId){
            if(ids.indexOf(targetId) === -1) {
                selectNewTarget();
            }
        }
        else {
            selectNewTarget();
        }
        var level;
        if(exp === 0) level = 1;
        else if(exp < level2exp) level = 2;
        else if(exp < level2exp * 2) level = 3;
        else {
            selectNewTarget();
        }
        exp++;
        if(!targetId) return _("送る相手が存在しない");
        sendMessage(getIdiomLevel(level),targetId);
    }
    const all_ids = [];
    function selectNewTarget(){
        if(targetId) ignore.push(targetId);
        targetId = null;
        var myId = unsafeWindow.sessionId;
        var ids = Object.keys(unsafeWindow.onlineUsers);
        var select_ids = ids.filter(v=>{
            if(v === myId) return;
            if(ignore.indexOf(v) !== -1 && atrandom_flag() === false) return;
            if(unsafeWindow.onlineUsers[v].name.indexOf("きょーた") !== -1) return;
            return v;
        });
        if(!ids.length) {
            _("botを停止させます。");
            return btn_holder.find("button").click().trigger('change');
        }
        const first_ids = [];
        ids.forEach(function(v){
            if(all_ids.indexOf(v) === -1) {
                first_ids.push(v);
                all_ids.push(v);
            }
        });
        targetId = first_ids.length ? yaju1919.randArray(first_ids) : yaju1919.randArray(select_ids);
        idiom_log = [];
        exp = 0;
        level2exp = yaju1919.randInt(5,10);
    }
    function sendMessage(str,id){
        if(!str || !id) return;
        $.post(location.href + "message.php",{
            receiver_id: id,
            receiver_name: '',
            message_body: str.split('').join('\0'),
            hide_name: 0,
        });
        _(`${id} に送信 ${str}`);
    }
    const GOBI = '#heart#';
    const idiom = { // 出会い厨語録
        1: [ // 序盤
            "こんにちは かわいいね",
        ].concat(new Array(50).fill().map(v=>"女の子?")),
        2: [ // 中盤
            "男の子?",
            "何歳?",
            "気になった",
            "名前は?けんた",
            "下の名前は?",
            "どこ住んでる?愛知です",
            "愛知県の21歳です"+GOBI,
            "彼女欲しいです"+GOBI,
            "僕と付き合おう"+GOBI,
            "付き合って"+GOBI,
            "付き合おう"+GOBI,
            "僕と結婚してくれる?",
            "胸何カップ?",
            "付き合って?",
            "彼氏欲しいよね?",
            "好き",
            GOBI,
        ],
        3: [ // 終盤
            "好き",
            GOBI,
            "何で嫌?",
            "お願い",
            "気持ちよくするから",
            "気持ちよくするからだめ?",
            "セックスしない?",
            "せっくすしよ"+GOBI,
            "SEXしよ"+GOBI,
            "Hしよ",
            "僕の童貞を奪ってください"+GOBI,
            "乳首舐めていい?",
            "妊娠させていい?",
        ]
    }
    let idiom_log = [], level = 0;
    function getIdiomLevel(level){
        idiom_log.unshift(yaju1919.randArray(idiom[String(level)].filter(v=>idiom_log.indexOf(v)===-1)));
        return idiom_log[0].replace(GOBI, yaju1919.randArray(["❤️","♡","♥"]));
    }
})();