Greasy Fork is available in English.

[bot]意味検索

意味検索機能を追します。

// ==UserScript==
// @name         [bot]意味検索
// @version      1.1
// @description  意味検索機能を追します。
// @match        *.x-feeder.info/*/
// @match        *.x-feeder.info/*/sp/
// @exclude      *.x-feeder.info/*/settings/**
// @match        http://drrrkari.com/room/
// @match        http://www.3751chat.com/ChatRoom*
// @match        https://pictsense.com/*
// @match        http://www.himachat.com/
// @match        https://discordapp.com/*
// @require      https://greasyfork.org/scripts/387509-yaju1919-library/code/yaju1919_library.js?version=719422
// @require      https://greasyfork.org/scripts/387372-chatbot/code/Chatbot.js?version=719362
// @require      https://greasyfork.org/scripts/382269-encyclopedia/code/Encyclopedia.js?version=717421
// @grant        GM.xmlHttpRequest
// @namespace https://greasyfork.org/users/263519
// ==/UserScript==
(()=>{
    'use strict';
    const yaju1919 = yaju1919_library;
    const makeText_NotFound = () => {
        const list = `
教えて。
しらなーい
分かりません。
難しい質問だな。
広辞苑を開けば?
こっちこそ知りたい。
質問の意図が分からん。
その質問に答える必要ある?
google先生に聞いてみてはいかがでしょうか?
`.split(/\s+/).filter(v=>v);
        return yaju1919.rand(list);
    };
    Encyclopedia.setNotFound(()=>g_superSay(makeText_NotFound()));
    const toDOM = str => $(str.replace(/src *= *".*?"/g,""));
    Encyclopedia.regist({ // ウィキペディア
        url: "https://ja.wikipedia.org/wiki",
        randomURL: "https://ja.wikipedia.org/wiki/特別:おまかせ表示",
        callback: r=> {
            const html = toDOM(r).find('.mw-parser-output');
            html.find('div').remove();
            html.find('.toc').remove();
            html.find('table').remove();
            html.find('sup').remove();
            html.find('img').remove();
            html.find('.noprint').remove();
            html.find('.mw-editsection').remove();
            html.find('.mw-ui-icon').remove();
            say(shapeStr(html.text()));
        }
    });
    Encyclopedia.regist({ // ニコニコ大百科
        url: "https://dic.nicovideo.jp/a",
        randomURL: "https://dic.nicovideo.jp/random/a",
        callback: r=> {
            const html = toDOM(r).find("#article");
            html.find('div').remove();
            html.find('ul').remove();
            html.find('table').remove();
            // html.find(".dic").remove()
            say(shapeStr(html.text()));
        }
    });
    Encyclopedia.regist({ // ピクシブ百科事典
        url: "https://dic.pixiv.net/a",
        callback: r=>say(shapeStr(toDOM(r).find(".summary").text()))
    });
    const shapeStr = str => {
        const m = str.replace(/\n+/g,'\n').replace(/^(\n| )+|(\n| )+$/g,'').match(/^(.|\n)+?。(\n| |$)/);
        return m ? m[0] : makeText_NotFound();
    };
    let g_superSay;
    const say = str => {
        g_superSay(str.split("。"));
    };
    const main = ({text,wait}) => {
        let m = text.match(/^(.+)(とは|[^だ]って)((何|なに|誰|だれ)|(どんな|どういう)(意味|いみ))(なん)?(だ|か|です(か)?)?(\?|?|$)/);
        if(!m) m = text.match(/^(.+)とは$/);
        if(!m) m = text.match(/^(.+)の(意味|いみ)を(.+に)(教|おし)えて((下|くだ)さい)?$/);
        if(!m) return;
        g_superSay = wait();
        Encyclopedia.search(m[1].trim());
    };
    let g_n = 4;
    Encyclopedia.set(g_n*1000);
    const setConfig = () => {
        const h = $("<span>");
        yaju1919.appendInputNumber(h,{
            title: "検索間隔時間",
            min: 1,
            value: g_n,
            explain:"ロボット検出BANを回避[秒]",
            change: n => {
                g_n = n;
                Encyclopedia.set(g_n*1000);
            }
        })
        return h;
    };
    win.Chatbot["意味検索"] = {
        main: main,
        config: setConfig,
        priority: 8,
    };
})();