喵呜简易辅助

喵呜辅助

目前為 2022-03-24 提交的版本,檢視 最新版本

// ==UserScript==
// @name         喵呜简易辅助
// @version      2.3.1
// @description  喵呜辅助
// @author       Ming
// @match        https://meows.com.cn/wp-admin/post-new.php
// @match        http://meows.com.cn/wp-admin/post-new.php
// @match        https://bgm.tv/subject/*
// @match        https://bgm.tv/subject_search/*
// @icon         https://lain.bgm.tv/pic/user/s/icon.jpg
// @run-at       document-end
// @require      https://cdn.jsdelivr.net/npm/sweetalert2@11
// @require      https://cdn.jsdelivr.net/npm/[email protected]/dist/jquery.min.js
// @grant        GM_setClipboard
// @grant        GM_addStyle
// @license      GPL
// @namespace    https://gf.qytechs.cn/users/890367
// ==/UserScript==

/*
 更新日志:
 --- 2.3  (2022.3.24)
 ------ 1. 新增设置选项:在新标签页打开搜索结果
 ------ 2. 新增设置选项:粘贴时直接应用摘要和标签
 ------ 3. 优化设置的文本提示

 --- 2.2  (2022.3.23)
 ------ 1. 简化搜索页
 ------ 2. 增加搜索页的隐藏/显示按钮
 ------ 3. 优化部分代码
 ------ 4. 美化发帖页面
 ------ 5. 在编辑器底部打开时详情页自动复制
 ------ 6. 在编辑器底部打开时若只有一个搜索结果直接跳转
 ------ 7. 可以同时应用摘要和标签(设置中开启)

 --- 2.1  (2022.3.22)
 ------ 1. 现在无需打开新网页了,在编辑器底部即可复制模板
 ------ 2. 优化了对标题的识别
 ------ 3. 修复:无中文名时标题错误的问题
 ------ 4. 修复其他小Bug
*/

var url = window.location.href
if (url.search('meows.com.cn') != -1)
{
    GM_addStyle('#ed_toolbar,#categorydiv,#tagsdiv-post_tag,#submitdiv,#major-publishing-actions,#formatdiv,#postexcerpt,#postimagediv{border-radius: 5px}')
    GM_addStyle('#post-status-info,#category-all{border-bottom-left-radius: 5px;border-bottom-right-radius: 5px}')
    GM_addStyle('#wp-content-editor-container{border-top-left-radius: 5px}')
    GM_addStyle('.update-nag.notice.notice-warning.inline,#contextual-help-link-wrap{display: none}')

    var bgmIframe = document.createElement("iframe")
    bgmIframe.style.cssText = 'height: 280px; width: 100%; margin-top: 15px; border-radius: 5px; box-shadow: rgb(170, 170, 170) 0px 0px 3px; display: none;'
    bgmIframe.id = "bgmframe"
    document.querySelector("#postdivrich").append(bgmIframe)

    var write = document.querySelector('.wp-header-end')
    var hideIframeBtn = document.createElement("button")
    var isIframeHidden = true
    hideIframeBtn.innerText = "隐藏搜索页"
    hideIframeBtn.style.cssText = 'font-size: 14px; margin-top: 10px; margin-left: 10px; display: none;'
    hideIframeBtn.className = "button"
    hideIframeBtn.onclick = function()
    {
        if (isIframeHidden)
        {
            hideIframeBtn.innerText = "隐藏搜索页"
            $("#bgmframe").fadeIn(250)
        }
        else
        {
            hideIframeBtn.innerText = "显示搜索页"
            $("#bgmframe").fadeOut(250)
        }
        isIframeHidden = !isIframeHidden
    }

    //添加模板按钮
    var templateBtn = document.createElement("button")
    templateBtn.innerText = "模板"
    templateBtn.className = "button"
    templateBtn.style.cssText = 'font-size: 14px; margin-top: 10px; margin-left: 2px'
    write.parentElement.insertBefore(templateBtn, write)
    templateBtn.onclick = function(){templateClick()} //按钮点击事件
    //设置按钮
    var settingsBtn = document.createElement("button")
    settingsBtn.innerText = "设置"
    settingsBtn.style.cssText = 'font-size: 14px; margin-left: 10px; margin-top: 10px;'
    settingsBtn.className = "button"
    var settingsBg = document.createElement("div")
    settingsBg.style.cssText = 'position: fixed; left: 0px; top: 0px; width: 100%; height: 100%; background: rgba(0, 0, 0, 0.4); z-index: 9998; backdrop-filter: blur(2px); display: none'
    settingsBg.id = 'jsSettingsBg'
    $('body').append(settingsBg)
    var settingsDiv = document.createElement("div")
    settingsDiv.style.cssText = 'position: fixed; left: 25%; top: 25%; background: rgb(250, 250, 250); width: 50%; height: 50%; border-radius: 16px; z-index: 9999; box-shadow: rgb(170, 170, 170) 0px 0px 20px; font-size: 26px; display: none'
    settingsDiv.id = 'jsSettings'
    $('body').append(settingsDiv)

    var settingsTitle = document.createElement("center")
    settingsTitle.innerText = '设置'
    settingsTitle.id = 'settingsTitle'
    settingsTitle.style.cssText = 'margin-top: 20px;'
    $('#jsSettings').append(settingsTitle)
    settingsDiv.id = 'jsSettings'

    var settingsList = document.createElement("ul")
    settingsList.id = 'settingsList'
    settingsList.style.fontSize = '20px'
    settingsList.style.marginTop = '28px'
    $('#settingsTitle').append(settingsList)
    var settingsOpt1 = document.createElement("li")
    settingsOpt1.style.marginTop = '11px'
    $('#settingsList').append(settingsOpt1)
    var SettingsOpt1Title = document.createElement("span")
    SettingsOpt1Title.innerText = '显示“同时应用摘要和标签”按钮'
    $('#settingsList li:nth-of-type(1)').append(SettingsOpt1Title)
    var SettingsOpt1Button = document.createElement("button")
    GM_addStyle('#settingsList li:nth-of-type(1) button{margin-left: 15px;font-size: 16px}')
    if (window.localStorage.showBtns == 'true') SettingsOpt1Button.innerText = '点击关闭'
    else SettingsOpt1Button.innerText = '点击开启'
    SettingsOpt1Button.onclick = function(){
        if(window.localStorage.showBtns == 'true')
        {
            window.localStorage.showBtns = 'false'
            SettingsOpt1Button.innerText = '点击开启'
            smryAndTagsBtn.style.display = 'none'
        }
        else
        {
            window.localStorage.showBtns = 'true'
            SettingsOpt1Button.innerText = '点击关闭'
            smryAndTagsBtn.style.display = 'inline'
        }
    }
    $('#settingsList li:nth-of-type(1)').append(SettingsOpt1Button)

    var settingsOpt2 = document.createElement("li")
    settingsOpt2.style.marginTop = '11px'
    $('#settingsList').append(settingsOpt2)
    var SettingsOpt2Title = document.createElement("span")
    SettingsOpt2Title.innerText = '在新标签页打开搜索结果'
    $('#settingsList li:nth-of-type(2)').append(SettingsOpt2Title)
    var SettingsOpt2Button = document.createElement("button")
    GM_addStyle('#settingsList li:nth-of-type(2) button{margin-left: 15px;font-size: 16px}')
    if (window.localStorage.showSearchResultInNewTab == 'true') SettingsOpt2Button.innerText = '点击关闭'
    else SettingsOpt2Button.innerText = '点击开启'
    SettingsOpt2Button.onclick = function(){
        if (window.localStorage.showSearchResultInNewTab == 'true')
        {
            window.localStorage.showSearchResultInNewTab = 'false'
            SettingsOpt2Button.innerText = '点击开启'
            if (bgmIframe.src != '') hideIframeBtn.style.display = 'inline'
        }
        else
        {
            window.localStorage.showSearchResultInNewTab = 'true'
            SettingsOpt2Button.innerText = '点击关闭'
            $("#bgmframe").fadeOut(250)
            hideIframeBtn.style.display = 'none'
        }
    }
    $('#settingsList li:nth-of-type(2)').append(SettingsOpt2Button)

    var settingsOpt3 = document.createElement("li")
    settingsOpt3.style.marginTop = '11px'
    $('#settingsList').append(settingsOpt3)
    var SettingsOpt3Title = document.createElement('span')
    SettingsOpt3Title.innerText = '粘贴时直接应用摘要和标签'
    $('#settingsList li:nth-of-type(3)').append(SettingsOpt3Title)
    var SettingsOpt3Button = document.createElement("button")
    GM_addStyle('#settingsList li:nth-of-type(3) button{margin-left: 15px;font-size: 16px}')
    if(window.localStorage.pasteAndGetTmp == 'true') SettingsOpt3Button.innerText = '点击关闭'
    else SettingsOpt3Button.innerText = '点击开启'
    SettingsOpt3Button.onclick = function(){
        if(window.localStorage.pasteAndGetTmp == 'true')
        {
            window.localStorage.pasteAndGetTmp = 'false'
            SettingsOpt3Button.innerText = '点击开启'
        }
        else
        {
            window.localStorage.pasteAndGetTmp = 'true'
            SettingsOpt3Button.innerText = '点击关闭'
        }
    }
    $('#settingsList li:nth-of-type(3)').append(SettingsOpt3Button)

    //console.log('[Settings] ShowButtons: ' + window.localStorage.showBtns)
    settingsBtn.onclick = function()
    {
        $('#jsSettings').fadeIn(140)
        $('#jsSettingsBg').fadeIn(140)
    }
    settingsBg.onclick = function()
    {
        $('#jsSettings').fadeOut(130)
        $('#jsSettingsBg').fadeOut(130)
    }

    //根据内容自动添加标签
    var tagBtn = document.querySelector('#link-post_tag')
    tagBtn.className = 'button'
    tagBtn.innerText = '从模板自动添加标签'
    tagBtn.onclick = function(){getTagsFromTmp()}
    //根据内容自动生成摘要,注意长度
    document.querySelector("#postexcerpt .inside p").remove()
    var smryBtn = document.createElement("button")
    smryBtn.innerText = "从模板生成摘要"
    smryBtn.className = "button"
    write.parentElement.insertBefore(smryBtn, write)
    smryBtn.style.cssText = 'font-size: 14px; margin-top: 10px; margin-left: 10px;'
    smryBtn.onclick = function(){getSmryFromTmp()}

    var smryAndTagsBtn = document.createElement("button")
    smryAndTagsBtn.innerText = '同时生成摘要和标签'
    smryAndTagsBtn.className = 'button'
    write.parentElement.insertBefore(smryAndTagsBtn, write)
    smryAndTagsBtn.style.cssText = 'font-size: 14px; margin-top: 10px; margin-left: 10px;'
    smryAndTagsBtn.onclick = function(){getTagsFromTmp();getSmryFromTmp();}

    if(window.localStorage.showBtns == 'false') smryAndTagsBtn.style.display = 'none'
    smryBtn.parentElement.insertBefore(settingsBtn, smryBtn)
    write.parentElement.insertBefore(hideIframeBtn, write)
    //$('#title').keypress(function(event){if(event.which == 13) templateClick()})
    document.addEventListener('paste', (ev) => {
        ev.clipboardData.items[0].getAsString(text => {
            //console.log(text)
            if(window.localStorage.pasteAndGetTmp == 'true')
            {
                if(text.search('[infobox title="下载"]') != -1){
                    getTagsFromTmp()
                    getSmryFromTmp()
                }
            }
        })
    })

}
else if(url.search('from=meows') != -1)
{
    GM_addStyle('#headerNeue2,#footer,#robot,#dock{display: none}')

    if(url.search("/subject_search") != -1)
    {
        //改链接
        for (var i = 1; i ; i++)
        {
            if (document.querySelector("#browserItemList li:nth-of-type(" + i + ")"))
            {
                document.querySelector("#browserItemList li:nth-of-type(" + i + ") a").href += "?from=meows"
                document.querySelector("#browserItemList li:nth-of-type(" + i + ") div h3 a").href += "?from=meows"
            }
            else break
        }
        if(i == 1)
        {
            Toast.fire({icon: 'error', position: 'top-end', title: '搜索无结果', text: '请尝试更换关键词'})
        }
        else if(i == 2)
        {
            window.open(document.querySelector('#browserItemList li:nth-of-type(1) a').href, '_self')
        }
        for (var j = 1; j ; j++)
        {
            if (document.querySelector("#multipage div a:nth-of-type(" + j + ")"))
            {
                document.querySelector("#multipage div a:nth-of-type(" + j + ")").href += "?from=meows"
            }
            else break
        }
        document.querySelector("#columnSearchB").width = "80%"
        document.querySelector("#columnSearchC").hidden = "true"
    }
    else if(url.search("bgm.tv/subject") != -1)
    {
        GM_addStyle('.chart_desc,panelInterestWrapper{display: none}')
        document.querySelector(".subjectNav").hidden = "true"
        document.querySelector("#subject_detail").style.width = "100%"
        CreateBtn()
        txt = ""
        var cat=document.querySelector(".focus.chl").innerText
        switch(cat)
        {
            case("动画"):
                Btn.onclick = function() {ani()}
                setTimeout(function(){ani()},150)
                break
            case("游戏"):
                Btn.onclick = function() {game()}
                setTimeout(function(){game()},150)
                break
            case("书籍"):
                Btn.onclick = function() {game()}
                setTimeout(function(){game()},150)
                break
            default: return
        }
    }
}
else if(url.search('bgm.tv/subject') != -1)
{
    CreateBtn()
    txt = ""
    var cate=document.querySelector(".focus.chl").innerText
    switch(cate)
    {
        case("动画"):
            Btn.onclick = function() {ani()}
            break
        case("游戏"):
            Btn.onclick = function() {game()}
            break
        case("书籍"):
            Btn.onclick = function() {game()}
            break
        default: return
    }
}

const Toast = Swal.mixin(
    {
        toast: true,
        position: "top-end",
        showConfirmButton: false,
        timer: 2200,
        timerProgressBar: true
    })
var Btn, txt = ''
function templateClick(){
    document.getElementById("post-format-0").click() //设置发帖形式
    document.getElementById("category-tabs").click()
    //根据标题搜索
    var title = document.querySelector("#title").value
    if (title == '')
    {
        Toast.fire({icon: "error", position: "bottom-end", title: "标题不能为空哦", text: "推荐标题格式:【分类】名称"})
        return
    }
    var lend
    if(title[0] == '[') lend = title.search(']')
    else if(title[0] == '【') lend = title.search('】')
    else lend = 0
    var newURL
    if (title.substring(1,lend).search('动漫') >= 0)
    {
        document.getElementById('in-category-1').click()
        newURL = "https://bgm.tv/subject_search/" + title.substring(lend + 1) + "?cat=2&from=meows"
    }
    else if(title.substring(1,lend).search("游戏") >= 0)
    {
        document.getElementById("in-category-6").click()
        newURL = "https://bgm.tv/subject_search/" + title.substring(lend + 1) + "?cat=4&from=meows"
    }
    else if(title.substring(1,lend).search("小说") >= 0)
    {
        document.getElementById("in-category-5").click()
        newURL = "https://bgm.tv/subject_search/" + title.substring(lend + 1) + "?cat=1&from=meows"
    }
    else if(title.substring(1,lend).search("漫画") >= 0)
    {
        document.getElementById("in-category-4").click()
        newURL = "https://bgm.tv/subject_search/" + title.substring(lend + 1) + "?cat=1&from=meows"
    }
    else newURL = "https://bgm.tv/subject_search/" + title.substring(lend) + "?from=meows"
    if(window.localStorage.showSearchResultInNewTab == 'false')
    {
        bgmIframe.style.display = "inline"
        hideIframeBtn.innerText = "隐藏搜索页"
        isIframeHidden = false
        hideIframeBtn.style.display = "inline"
        bgmIframe.src = newURL
    }
    else window.open(newURL, '_blank')
}
function getTagsFromTmp()
{
    var content = document.querySelector("#content").value
    var starttag = content.indexOf('[infobox title="标签"]')
    if (starttag == -1)
    {
        Toast.fire({icon: "error", position: "bottom-end", title: "在内容中未找到标签", text: "请检查模板"})
    }
    else
    {
        var endtag = content.lastIndexOf("   ")
        var cnt = 0
        var tagtxt = content.substring(starttag + 22, endtag + 1)
        //console.log(tagtxt)
        var tags = ""
        for(var i = 0; i < tagtxt.length && tagtxt[i] != '\n'; i++)
        {
            if(tagtxt[i] == " ")
            {
                cnt++
                if(cnt % 2)
                {
                    document.querySelector("#new-tag-post_tag").value = tags
                    document.querySelector(".button.tagadd").click()
                    //console.log(tags)
                }
                tags = ""
            }
            else tags += tagtxt[i]
        }
        Toast.fire({icon: "success", position: "bottom-end", title: "应用标签成功", text: "共添加了" + parseInt(cnt / 2) + "个标签"})
    }
}
function getSmryFromTmp()
{
    var content = document.querySelector("#content").value
    var startsmry = content.indexOf('[infobox title="简介"]')
    if (startsmry == -1)
    {
        Toast.fire({icon: "error", position: "bottom-end", title: "在内容中未找到简介", text: "请检查模板"})
        return
    }
    var endsmry = content.substring(startsmry + 22).indexOf("[")
    var smry = content.substring(startsmry + 22, startsmry + 22 + endsmry - 2)
    //console.log(smry)
    if(isJapanese(smry))
    {
        Toast.fire({icon: "error", position: "bottom-end", title: "未能生成摘要", text: "检测到语言可能是日语"})
    }
    else
    {
        if(smry.length > 240){
            document.querySelector("#excerpt").value = smry.substr(0,215) + "……"
            Toast.fire({icon: "success", position: "bottom-end", title: "生成摘要成功", text: "内容过长已缩减"})
        }
        else{
            document.querySelector("#excerpt").value = smry
            Toast.fire({icon: "success", position: "bottom-end", title: "生成摘要成功"})
        }
    }
}

function CreateBtn()
{
    var btnbg = document.querySelector(".nameSingle")
    btnbg.className = "nameSingle swal2-actions"
    btnbg.style.display = "block"

	Btn = document.createElement("button")
    Btn.className = "swal2-confirm swal2-styled"
	Btn.innerText = "复制模板"
    Btn.style.cssText = 'font-size: 16px; min-height: 35px; min-width: 100px; margin-left: 20px; margin-bottom: 10px; border-radius: 5px;'
    btnbg.append(Btn)
}
function ani()
{
    txt = ""
	Pic()
    Name()
    Smry()
    Tag()
    Info()
    DownloadAni()
    GM_setClipboard(txt, 'text')
    //bgBlur()
    Toast.fire({icon: "success", title: "复制成功"})
}
function game()
{
    txt = ""
	Pic()
    Name()
    Smry()
    Tag()
    InfoAll()
    Download()
    GM_setClipboard(txt, 'text')
    Toast.fire({icon: "success", title: "复制成功"})
}
function Pic()
{
    if (document.querySelector(".thickbox.cover"))
    {
		txt += '<img class="aligncenter" src=" ' + document.querySelector(".thickbox.cover").href + ' "width="720">\n'
	}
}
function Name()
{
    var name1 = document.querySelector("#infobox li:nth-of-type(1)")
    var name2 = document.querySelector(".nameSingle a")
    if(name1.innerText.search("名") >= 0 && name2)
    {
        if(name1.innerText.substring(5) != name2.innerHTML)
        {
            txt += '<p style="text-align: center"><span style="font-size: 14pt"><strong>' + name1.innerText.substring(5) + ' / ' + name2.innerHTML + '</strong></span></p>\n'
        }
        else
        {
            txt += '<p style="text-align: center"><span style="font-size: 14pt"><strong>' + name2.innerHTML + '</strong></span></p>\n'
        }
        return
    }
    if(name2) txt += '<p style="text-align: center"><span style="font-size: 14pt"><strong>' + name2.innerHTML + '</strong></span></p>\n'
    txt += '<p style="text-align: center"><span style="font-size: 14pt"><strong>' + name1?name1.innerText.substring(5):name2.innerHTML + '</strong></span></p>\n'
}
function Smry()
{
    var smry = document.querySelector("#subject_summary")
    if(smry)
    {
        txt += '[infobox title="简介"]\n\n' + smry.innerText + '\n\n[/infobox]\n\n'
    }
}
function Tag()
{
    var tag = document.querySelector(".subject_tag_section .inner")
    if(!tag) return
    var str = ""
	for (var n = 1; n <= 8; n++)
    {
        if (document.querySelector(".inner .l:nth-of-type(" + n + ") span"))
        {
            var q = document.querySelector(".inner .l:nth-of-type(" + n + ") span").innerText
            if (q != "漫改" && q != "轻改")
            {
                var tagi = document.querySelector(".inner .l:nth-of-type(" + n + ") span").innerText
                str += tagi + " &nbsp; "
            }
        }else break
    }
    txt += '[infobox title="标签"]\n\n' + str + '\n\n[/infobox]\n\n'
}
function Info()
{
    var str = ""
    for (var i = 1; i < 50; i++)
    {
        if (document.querySelector("#infobox li:nth-of-type(" + i + ")"))
        {
            var tmp = document.querySelector("#infobox li:nth-of-type(" + i + ")").innerText + "\n\n"
            if (tmp.search("中文名")=='0' || !tmp.search("别名") || !tmp.search("话数") || !tmp.search("原作") || !tmp.search("导演")
                || !tmp.search("动画制作") || !tmp.search("放送开始"))
            {
                str += tmp
            }
            else if (!tmp.search("官方网站") || !tmp.search("播放结束")) break
        }
        else break
    }
    str = str.replace( /: /g, ":")
    txt += '[infobox title="详情"]\n\n' + str + '[/infobox]\n\n'
}
function InfoAll()
{
    var str = ""
	for (var i = 1; i < 50; i++)
    {
		if (document.querySelector("#infobox li:nth-of-type(" + i + ")"))
        {
			var tmp = document.querySelector("#infobox li:nth-of-type(" + i + ")").innerText + "\n\n"
            str += tmp
		} else break
	}
    str = str.replace( /: /g, ":")
    txt += '[infobox title="详情"]\n\n' + str + '[/infobox]\n\n'
}
function DownloadAni()
{
    txt += '[infobox title="下载"]\n\n'
    txt += "<strong>【字幕组】</strong>\n\n"
    txt += "合集\n\n"
    txt += "[ypbtn]【网盘链接】[/ypbtn]"
    txt += "\n\n[/infobox]"
}
function Download()
{
    txt += '[infobox title="下载"]\n\n[ypbtn]【网盘链接】[/ypbtn]\n\n[/infobox]'
}
function isJapanese(temp)
{
	if(/[^\u0800-\u4e00]/.test(temp)) return false
	return true
}

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址