Greasy Fork is available in English.

[bot-manager]botマネージャー ( ミナコイチャット版 )

複数のbotを管理します。

// ==UserScript==
// @name         [bot-manager]botマネージャー ( ミナコイチャット版 )
// @namespace    http://tampermonkey.net/
// @version      1.8
// @description  複数のbotを管理します。
// @author       You
// @match        http://www.3751chat.com/ChatRoom*
// @require      http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js
// @require      https://greasyfork.org/scripts/387509-yaju1919-library/code/yaju1919_library.js?version=719796
// @require      https://greasyfork.org/scripts/387372-chatbot/code/Chatbot.js?version=720412
// @grant        GM.setValue
// @grant        GM.getValue
// ==/UserScript==
(function () {
  'use strict';
    const yaju1919 = yaju1919_library;
    //---------------------------------------------------------------------------------
    const getMyName = () => $("#namelabelChat").text().trim(); // 自分の名前を取得
    //---------------------------------------------------------------------------------
    const getNewPost = () => { // 一番上の投稿を取得
        const top = $(".chatter").eq(0).parent().parent().parent();
        const name = top.find(".chatter").text().trim();
        const text = top.find(".chatbody").text().trim();
        const id = new Date(top.find(".choiusu").eq(0).text().match(/\((.*)\)/)[1]).getTime();
        return {id:id,name:name,text:text};
    };
    //---------------------------------------------------------------------------------
    const post = str => {
        if(str.length > 1000) return;
        $("#chat").val(str);
        $("#chat").next().click();
    };
    //---------------------------------------------------------------------------------
    let logId = 0;
    const update = ()=>{ // 新しい発言内容の文字列を返す
        const post = getNewPost(); // 一番上;
        const topId = post.id;
        if(logId >= topId) return;
        logId = topId;
        const myName = getMyName();
        if(post.name === myName) return; // 自分だったら処理を終了
        return { name: post.name, text: post.text, myName: myName };
    };
    const rand = yaju1919.rand; // ランダムな要素を返す
    //---------------------------------------------------------------------------------
    let id_log = 0;
    const entered_array = [];
    const greet = () =>{ // 自動挨拶
        let name,enter,time;
        $(".hello").each((i,e)=>{
            if($(e).find(".chatter").get(0)) return true;
            name = $(e).find(".nobr").text();
            enter = $(e).find("tbody").text().match(/([入退]室)しました.*?$/)[1];
            time = new Date($(e).find(".choiusu").eq(0).text().match(/\((.*)\)/)[1]).getTime();
            return false;
        });
        if(name === getMyName()) return;
        if(time === id_log) return;
        id_log = time;
        let first_flag = false;
        if(entered_array.indexOf(name) === -1){
            entered_array.push(name);
            first_flag = true;
        }
        return enter === "入室" ? (
            first_flag ? rand([ // 初対面
                `${name}さん、はじめまして`,
                `${name}さんこんにちは`,
                `${name}さん、オッスオッス!`,
                `ご機嫌よう${name}さん`,
                `${name}さん、ゆっくりしていってね`,
                `グーテンモルゲン!${name}さん。`,
            ]) : rand([ // 2回目以降
                `${name}さん、おかえり`,
                `また来たの?${name}さん`,
                `【朗報】${name}さん帰還`,
                `お帰りなさいませ、${name}様`,
                `${name}さん久しぶり~`,
                `あら!いらっしゃいご無沙汰じゃないっすか!${name}さん`,
            ])
        ) : rand([ // 別れ
            `${name}さん、さようなら`,
            `バイバイ${name}さん`,
            `またね!${name}さん`,
            `${name}さん乙です。`,
            `Good Bye ${name}さん`,
            `${name}さん退室しちゃった。`,
        ]);
    };
    //---------------------------------------------------------------------------------
    const auto = () =>{ // 定期投稿
        return rand([ // 定期投稿
            '過疎',
            '放置',
            '憂鬱だなぁ…',
            '暇だなー',
            '暇定期',
            '腹減った',
            '眠い',
            '腹痛い',
            'もうこんな時間か',
            '・・・',
            'しーん',
            'とりあえず何か発言してみる',
            '潮が引いたように静寂が訪れた',
            'そして誰もいなくなった・・・',
            'この時間帯は人いないのかな?',
            "近所の犬うるさい",
            "(・ω・)",
            "(-_-).zZ乙",
            "_(:3」∠)_",
            rand([ // 定期発狂
                "\( 'ω')/ウオオオオオアアアーーーッ!",
                "(っ'ヮ'c)ウゥッヒョオアアァアアアァ",
                "( ^o^)<ンンンンンンンンンンンンンンンwww",
            ]),
        ]);
    };
    //---------------------------------------------------------------------------------
    const UI = appendChatbotManager({
        update: update,
        post: post,
        greet: greet,
        auto: auto
    });
    const auto_update_flag = yaju1919.appendCheckButton(UI,{title: "自動更新"});
    setInterval(()=>{ // 自動更新
        if(!auto_update_flag()) return;
        $("#namecolorChat").next().next().click();
    },500);
    //------------------------------------------------------------------------------------------------------------------------------
    //------------------------------------------------------------------------------------------------------------------------------
    //--------サイト内のバグを消す----------------------------------------------------------------------------------------------------------------------
    $("<script>").attr("src","https://code.jquery.com/jquery-3.3.1.min.js").appendTo($("body"));
    win.pushLogs = (loglines, effect) => {
        win.$.fmtColor = () => "";
        var html = null;
        for (let i = 0; i < loglines.length; i++) {
            if (loglines[i]) {
                var line = loglines[i];
                if (typeof (line) == 'string') {
                    html = '<div><div class="hello">' + loglines[i] + '</div><hr size="1"></div>' + html;
                } else if (typeof (line == 'object')) {
                    html = '<span>error</span>';
                }
            }
        }
        if (!html) {
            return;
        }
        var chatarea = document.getElementById('chatarea');
        var newspace;
        if (effect) {
            $('#chatarea').prepend($(html));
        } else {
            $('#chatarea').prepend($(html))
        }
        win.fadeNowUpdate();
        if (!win.gFirstPushLogsDone) {
            win.gFirstPushLogsDone = true;
            return;
        }
        while ($('#chatarea > div').length > win.gRoomVars.max_displine + 10) {
            chatarea.removeChild(chatarea.lastChild);
        }
    };
    //------------------------------------------------------------------------------------------------------------------------------
    //------------------------------------------------------------------------------------------------------------------------------
    //------------------------------------------------------------------------------------------------------------------------------
})();