您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
try to take over the world!
// ==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(["❤️","♡","♥"])); } })();