- // ==UserScript==
- // @name 含羞草研究所|fi11.com 永久vip vip视频随意观看
- // @name:zh-TW 含羞草研究所|fi11.com 永久vip vip視頻隨意觀看
- // @namespace http://tampermonkey.net/
- // @version 2.6.1
- // @description 含羞草研究所,可观看含羞草vip視頻 除钻石和付费视频。
- // @description:zh-tw 含羞草研究所,可观看含羞草vip視頻,除钻石和付费视频。
- // @author JamToday
- // @include *
- // @icon data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
- // @grant none
- // @antifeature payment
- // ==/UserScript==
- (function () {
- let kitty_emojiList = ["😃","😄","😁","😆","😅","🤣","😂","🙂","🙃","🫠","😉","😊","😇","😕","🫤","😟","🙁","☹","😯","😲","🥺","🥹","😦","😧","😨","😰","😥","😢","😭","😱","😖","😣","😞","😓","😩","😫","😤","😡","😠"]
- let kitty_emojiIndex = 0
- let kitty_StatusColor = {
- success: "#67C23A",
- warning: "#E6A23C",
- info: "#909399",
- danger: "#F56C6C",
- '200': "#67C23A",
- '300': "#E6A23C",
- '400': "#909399",
- '500': '#F56C6C'
- }
- let kitty_config = {
- name: "含羞草脚本",
- id: "xns",
- version: "2.6.1",
- homePageName: "kitty猫",
- homePageUrl: "www.kittymao.xyz",
-
- update: 3,
- logListMaxLength: 5,
- logItemLength: 20,
-
- useMethodUrlList: ["docs.kittymao.xyz"],
- payUrlList: ["shop.kittymao.xyz"],
-
- updateUrl: "https://sleazyfork.org/zh-CN/scripts/477924",
- requestHostList: ["https://baixiaodu.uk/api","https://www.kittymao.xyz/api","https://kittymao.xyz/api"],
- }
- let kitty_isrun = {
- getNewVersion: false
- }
- let kitty_tabIndex = 0
- let kitty_logList = []
- let localStorageName = "token"
-
- function kitty_setCookie(cname, cvalue, exdays) {
- var d = new Date();
- d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
- var expires = "expires=" + d.toGMTString();
- document.cookie = cname + "=" + cvalue + "; " + expires;
- }
- function kitty_insertStyle() {
- let style = document.createElement("style")
- style.innerHTML = `
- /* 整体-start */
- #kitty_vipPanel {
- width: 310px;
- height: 500px;
- box-shadow: 0 0 0 1px rgb(0 0 0 / 5%), 0 2px 4px 1px rgb(0 0 0 / 9%);
- border-left: 1px solid transparent;
- border-right: none;
- border-top: 1px solid transparent;
- border-bottom: 1px solid transparent;
- background-color: #FFFFFF;
- position: fixed;
- left: 6px;
- bottom: 6px;
- z-index: 99999;
- font-size: 16px;
- --script-panel-main-color: black;
- }
- #kitty_vipPanel a {
- text-decoration: underline;
- }
- .kitty_panelMain {
- font-size: 0.85em;
- }
- .hitty_hiddenPanel {
- left: -310px !important;
- }
- /* 整体-end */
- /* panelHead-start */
- .kitty_panelHead {
- display: flex;
- border-bottom: 1px solid #ececec;
- }
- .kitty_panelHead>div {
- color: #444;
- padding: 0 10px;
- height: 40px;
- line-height: 40px;
- box-sizing: border-box;
- user-select: none;
- text-align: center;
- width: 76px;
- font-size: 1em;
- }
- .kitty_panelHead>div:not(.kitty_headDivActive):hover {
- border-bottom: 3px solid #ccc;
- cursor: pointer;
- }
- .kitty_headDivActive {
- border-bottom: 3px solid var(--script-panel-main-color);
- color: #444;
- font-weight: bold;
- }
- /* panelHead-end */
- /* 界面显示按钮 */
- .kitty_showPanelBtn {
- position: absolute;
- left: 320px;
- bottom: 20px;
- width: 60px;
- height: 40px;
- line-height: 40px;
- color: var(--script-panel-main-color);
- user-select: none;
- background-color: #FFFFFF;
- position: absolute;
- left: 320;
- bottom: 20px;
- display: none;
- cursor: pointer;
- border-radius: 5px;
- }
- /* 身体 */
- .kitty_panelBody {
- padding: 0 10px;
- }
- .kitty_panelBody p {
- margin: 10px 0;
- color: black;
- }
- /* 输入框-start */
- .kitty_searchInput {
- width: 98%;
- border-radius: 24px;
- box-shadow: 0 0 0 1px rgb(0 0 0 / 5%), 0 2px 4px 1px rgb(0 0 0 / 9%);
- height: 40px;
- border-left: 1px solid transparent;
- border-right: none;
- border-top: 1px solid transparent;
- border-bottom: 1px solid transparent;
- overflow: hidden;
- margin: 0 auto;
- margin-top: 40px;
- margin-bottom: 50px;
- display: flex;
- }
- .kitty_searchInput:hover {
- border-top-left-radius: 24px;
- box-shadow: 0 0 0 1px rgb(0 0 0 / 10%), 0 2px 4px 1px rgb(0 0 0 / 18%);
- border-left: 1px solid transparent;
- border-right: none;
- border-top: 1px solid transparent;
- border-bottom: 1px solid transparent;
- }
- .kitty_searchInput input {
- height: 100%;
- border: 0;
- outline: 0;
- padding: 0 10px;
- color: black !important;
- width: 100%;
- background-color: white;
- }
- /* 输入框-end */
- /* go按钮-start */
- .kitty_goToVipBtn {
- color: #FFFFFF;
- font-weight: bold;
- background-color: var(--script-panel-main-color);
- height: 100px;
- width: 100px;
- border-radius: 50px;
- text-align: center;
- line-height: 100px;
- margin: 20px auto;
- box-shadow: 0 0 0 1px rgb(0 0 0 / 5%), 0 2px 4px 1px rgb(0 0 0 / 9%);
- user-select: none;
- }
- .kitty_goToVipBtn:hover {
- cursor: pointer;
- box-shadow: 0 0 0 0 rgb(0 0 0 / 5%), 0 2px 4px 1px rgb(0 0 0 / 18%);
- -webkit-box-shadow: 0 0 0 0 rgb(0 0 0 / 5%), 0 2px 4px 1px rgb(0 0 0 / 18%);
- -moz-box-shadow: 0 0 0 0 rgba(0,0,0,.05),0 2px 4px 1px rgba(0,0,0,.18);
- }
- /* 动画 */
- @keyframes kitty_float {
- 0% {
- transform: translateY(0px);
- }
- 5% {
- transform: translateY(-10px);
- }
- 10%,100% {
- transform: translateY(0px);
- }
- }
-
- .kitty_navy {
- position: relative;
- }
-
- .kitty_navy span {
- position: relative;
- display: inline-block;
- color: white;
- animation: kitty_float 9s ease-in-out infinite;
- animation-delay: 2s;
- font-size: 1.5em;
- }
- /* go按钮-end */
- .kitty_logOutput {
- color: #71777d;
- font-size: 0.9em;
- margin-top: 50px;
- }
- .kitty_logOutput div {
- margin: 0;
- padding: 0;
- line-height: 1.5;
- }
- .kitty_downloadText {
- font-size: 20px;
- font-weight: bold;
- }
- .kitty_downloadText a {
- cursor:pointer;
- }
- `
- document.querySelector("head").appendChild(style);
- }
- function kitty_createPanel() {
- let panel = document.createElement("div")
- panel.setAttribute("id", "kitty_vipPanel")
- panel.innerHTML = `
- <div class="kitty_showPanelBtn">>>显示</div>
- <div class="kitty_panelMain">
- <div class="kitty_panelHead">
- <div class="kitty_headDivActive">获取权限</div>
- <div>令牌登录</div>
- <div>使用指南</div>
- <div>支付</div>
- </div>
- <div class="kitty_panelBody kitty_panelBody_0">
- <div class="kitty_searchInput">
- <input id="kitty_txm" type="text" placeholder="">
- </div>
- <div class="kitty_goToVipBtn kitty_navy">
- <span>G</span>
- <span>O</span>
- <span>!</span>
- </div>
- <div class="kitty_logOutput">
- <div>脚本--><span class="kitty_scriptName"></span>-<span class="kitty_version"></span>-<span class="kitty_update"></span></div>
- <div>主页--><a class="kitty_homepage" target="_blank" href="">主页地址</a></div>
- <div>邮箱-->JamJamToday@protonmail.com</div>
- <div>操作--><span style="color: red;cursor:pointer;" class="kitty_hiddenPanelBtn">点此隐藏此脚本操作界面<<</span></div>
- <div class="kitty_logList">
- </div>
- </div>
- </div>
- <div class="kitty_panelBody kitty_panelBody_1" style="display:none;">
- <p>暂未开放</p>
- </div>
- <div class="kitty_panelBody kitty_panelBody_2" style="display:none;">
- <p>+ 使用方法线路1: <a target="_blank" href="https://docs.kittymao.xyz">www.kittymao.xyz</a></p>
- </div>
- <div class="kitty_panelBody kitty_panelBody_3" style="display:none;">
- <p>+ 支付线路1: <a target="_blank" href="https://shop.kittymao.xyz">shop.kittymao.xyz</a></p>
- </div>
- </div>
- `
- document.body.appendChild(panel)
- }
-
- function kitty_eventBind() {
- let tabs = document.querySelectorAll(".kitty_panelHead>div")
- for (let i = 0; i < tabs.length; i++) {
- tabs[i].addEventListener("click", function() {
- for (let ii = 0; ii < tabs.length; ii++) {
- tabs[ii].className = ""
- }
- tabs[i].className = "kitty_headDivActive"
- kitty_changeTab(i)
- })
- }
- document.querySelector(".kitty_hiddenPanelBtn").addEventListener("click", function() {
- kitty_hiddenPanel()
- })
- document.querySelector(".kitty_showPanelBtn").addEventListener("click", function() {
- kitty_showPanel()
- })
- let gets = document.querySelectorAll(".kitty_goToVipBtn")
- gets[0].addEventListener("click", function() {
- kitty_getPermissionStart()
- })
- }
- function kitty_changeTab(index) {
- kitty_tabIndex = index
- let panelBodys = document.querySelectorAll(".kitty_panelBody")
- if(!panelBodys[kitty_tabIndex]) {
- return
- }
- for (let i = 0; i < panelBodys.length; i ++) {
- panelBodys[i].style.display = "none"
- }
- panelBodys[kitty_tabIndex].style.display = "block"
- }
-
-
- function kitty_hiddenPanel() {
- document.querySelector("#kitty_vipPanel").className = "hitty_hiddenPanel"
- document.querySelector(".kitty_showPanelBtn").style.display = "block"
- }
- function kitty_showPanel() {
- document.querySelector("#kitty_vipPanel").className = ""
- document.querySelector(".kitty_showPanelBtn").style.display = "none"
- }
- function kitty_getPermissionStart() {
- let emoLength = kitty_emojiList.length
- let txm = document.querySelector("#kitty_txm").value
- if (!txm) {
- kitty_logListPush(`请输入口令,然后点击GO按钮${kitty_emojiList[kitty_emojiIndex]}`, "info")
- kitty_emojiIndex++
- if (kitty_emojiIndex>=emoLength) {
- kitty_emojiIndex = 0;
- }
- return
- }
- localStorage.setItem("kitty_txm", txm)
- kitty_getSuccessHost();
- kitty_getPermission(0, txm, false);
- }
- function kitty_getSuccessHost() {
- let successHost = localStorage.getItem("kitty_requestSuccessHost")
- if(successHost) {
- let findIndex = kitty_config.requestHostList.indexOf(successHost);
- if (findIndex!=-1) {
- kitty_config.requestHostList.splice(findIndex, 1);
- kitty_config.requestHostList.unshift(successHost);
- }
- }
- }
- function kitty_getHost(index) {
- return kitty_config.requestHostList[index]
- }
-
-
- function kitty_getStatusTypeText(type) {
- let typeText = "提示";
- switch(type){
- case "success":
- typeText = "成功"
- break
- case "warning":
- typeText = "警告"
- break
- case "info":
- typeText = "信息"
- break
- case "danger":
- typeText = "失败"
- break
- case '200':
- typeText = "成功"
- break
- case '300':
- typeText = "警告"
- break
- case '400':
- typeText = "信息"
- break
- case '500':
- typeText = "失败"
- break
- }
- return typeText;
- }
- function kitty_logListPush(item, type) {
- let stringLength = item.length
- let start = 0;
- let end = kitty_config.logItemLength-1
- let headLine = true
- while(stringLength>=0) {
- let typeText = `${kitty_getStatusTypeText(type)}-->`;
- let styleColor = ""
- if (type) {
- styleColor = type?`color: ${kitty_StatusColor[type]}`:"";
- }
- if (kitty_logList.length >= kitty_config.logListMaxLength) {
- kitty_logListShift()
- }
- kitty_logList.push(`<span style="${styleColor}">${headLine?typeText:'<span style="opacity: 0;">续行--</span>>'}${item.substring(start, end)}</span>`)
- start = end
- end += end
- stringLength = stringLength-kitty_config.logItemLength
- headLine = false
- }
- kitty_showLogList()
- }
- function kitty_logListShift() {
- kitty_logList.shift();
- kitty_showLogList();
- }
- function kitty_showLogList() {
- let innerhtml = "";
- let kitty_logListDiv = document.getElementsByClassName("kitty_logList")[0]
- kitty_logList.forEach(item => {
- innerhtml+=`<div>${item}</div>`
- })
- kitty_logListDiv.innerHTML = innerhtml;
- }
- function kitty_setConfig() {
- document.getElementsByClassName("kitty_scriptName")[0].innerHTML = kitty_config.name;
- document.getElementsByClassName("kitty_version")[0].innerHTML = `v${kitty_config.version}`;
- let homepage = document.getElementsByClassName("kitty_homepage")[0];
- homepage.innerHTML = kitty_config.homePageName+`(${kitty_config.homePageUrl})`
- homepage.href = "https://"+kitty_config.homePageUrl
- if (kitty_config.update===1) {
- let versionSpan = document.getElementsByClassName("kitty_update")[0];
- versionSpan.innerHTML = `已最新`;
- versionSpan.style = `color: ${kitty_StatusColor.success};`;
- } else if (kitty_config.update===2) {
- let versionSpan = document.getElementsByClassName("kitty_update")[0];
- versionSpan.innerHTML = `<span class="kitty_toNewVersion" style="user-select: none;cursor: pointer;">点此更新</span>`;
- versionSpan.style = `color: ${kitty_StatusColor.warning};`;
- document.querySelector(".kitty_toNewVersion").addEventListener("click", function() {
- window.open(kitty_config.updateUrl)
- })
- } else {
- let versionSpan = document.getElementsByClassName("kitty_update")[0];
- versionSpan.innerHTML = `<span class="kitty_checkVersion" style="user-select: none;cursor: pointer;">检查更新</span>`;
- versionSpan.style = `color: ${kitty_StatusColor.warning};`;
- document.querySelector(".kitty_checkVersion").addEventListener("click", function() {
- kitty_getNewVersion(0, false)
- })
- }
- }
-
- function kitty_getCardNumber() {
- let txm = localStorage.getItem("txm")
- if (txm) {
- localStorage.setItem("kitty_txm", txm)
- localStorage.removeItem("txm")
- }
- let kitty_txm = localStorage.getItem("kitty_txm")
- if (kitty_txm) {
- document.querySelector("#kitty_txm").value = kitty_txm
- kitty_logListPush("已获取到上次使用的口令,请另外保存口令", "info")
- kitty_logListPush(`请点击GO按钮${kitty_emojiList[kitty_emojiIndex]}`, "info")
- } else {
- kitty_logListPush(`请输入口令,然后点击GO按钮${kitty_emojiList[kitty_emojiIndex]}`, "info")
- kitty_emojiIndex++
- }
- }
- function kitty_getPermission(index, txm, change) {
- if (kitty_isrun.getPermission&&!change) {
- return
- }
- let host = kitty_getHost(index)
- if(!change) {
- kitty_logListPush("发送请求中请耐心等待...", "info")
- }
- kitty_isrun.getPermission = true
- let url = `${host}/hxc/getPermission`
- fetch(url, {
- method: "POST",
- headers: {
- "Content-Type": "application/json",
- },
- body: JSON.stringify({
- "version": kitty_config.version,
- "cardContent": txm.trim(),
- "nickname": "hxc"
- })
- }).then(res => res.json()).then(res => {
- localStorage.setItem("kitty_requestSuccessHost", host)
- try {
- if (res.success) {
- dealGetPermissionRes(res.data)
- } else {
- kitty_logListPush(res.message, "warning")
- }
- } catch(e) {
- kitty_logListPush("失败,返回值处理有问题", "danger")
- console.log(e)
- }
- kitty_isrun.getPermission = false
- }).catch((e) => {
- if (e.toString().includes("JSON")) {
- kitty_logListPush("JSON解析失败,请联系作者", "danger")
- kitty_isrun.getPermission = false
- } else {
- console.log(e)
- index++
- let getHost = kitty_getHost(index)
- if (getHost) {
- kitty_logListPush("请求失败,切换线路中请耐心等待...", "warning")
- kitty_getPermission(index, txm, true)
- } else {
- kitty_logListPush("请求失败,请联系作者", "danger")
- kitty_isrun.getPermission = false
- }
- }
- })
- }
- function dealGetPermissionRes(resData) {
- console.log(resData)
- kitty_saveToken(resData)
- }
-
- function kitty_getNewVersion(index, change) {
- if (kitty_isrun.getNewVersion&&!change) {
- return
- }
- let host = kitty_getHost(index)
- if(!change) {
- kitty_logListPush("检查版本号中请耐心等待...", "info")
- }
- kitty_isrun.getNewVersion = true
- let url = `${host}/getVersion`
- fetch(url,{
- method: "POST",
- headers: {
- "Content-Type": "application/json",
- },
- body: JSON.stringify({
- "nickname": "hxc"
- })
- }).then(res => res.json()).then(res => {
- localStorage.setItem("kitty_requestSuccessHost", host)
- try {
- let data = res.data
- if (data.version === kitty_config.version) {
- kitty_config.update = 1
- kitty_logListPush("已是最新版", "success")
- } else {
- kitty_config.update = 2
- kitty_config.updateUrl = data.updateUrl
- kitty_logListPush("不是最新版,可能无法使用", "warning")
- }
- kitty_setConfig()
- } catch(e) {
- kitty_logListPush("失败,返回值处理有问题", "danger")
- console.log(e)
- }
- kitty_isrun.getNewVersion = false
- }).catch((e) => {
- if (e.toString().includes("JSON")) {
- kitty_logListPush("JSON解析失败,请联系作者", "danger")
- kitty_isrun.getNewVersion = false
- } else {
- console.log(e)
- index++
- let getHost = kitty_getHost(index)
- if (getHost) {
- kitty_logListPush("请求失败,切换线路中请耐心等待...", "warning")
- kitty_getNewVersion(index, true)
- } else {
- kitty_logListPush("请求失败,请联系作者", "danger")
- kitty_isrun.getPermission = false
- }
- }
- })
- }
- function kitty_vipPanelInit() {
- kitty_insertStyle();
- kitty_createPanel();
- kitty_getSuccessHost();
- kitty_showLogList();
- kitty_eventBind();
- kitty_setConfig();
- kitty_isLogin();
- }
- function kitty_saveToken ({token}) {
- let local = JSON.parse(localStorage.getItem(localStorageName))
- local = token
- localStorage.setItem("isGetPermission", true)
- localStorage.setItem("getTokenTime", Date.now())
- localStorage.setItem(localStorageName, JSON.stringify(local))
- kitty_logListPush("请求成功,刷新页面中", "success");
- location.reload();
- }
- function kitty_isSuccess() {
- let get = localStorage.getItem("isGetPermission")
- if (get === "true" || get === true) {
- get = true
- } else {
- get = false
- }
- let local = localStorage.getItem(localStorageName)
- let localb = false
- if (local) {
- localb = true
- } else {
- localb = false
- }
- if (!(localb && get)) {
- localStorage.setItem("isGetPermission", false)
- }
- return localb && get
- }
- function kitty_isLogin() {
- let isLoginInterval = setInterval(function(){
- let local = JSON.parse(localStorage.getItem(localStorageName))
- if (local) {
- kitty_logListPush("您已登录自己的账号", "success");
- if (kitty_isSuccess()) {
- kitty_getCardNumber();
- kitty_hiddenPanel();
- kitty_logListPush("请求成功,请尝试观看VIP视频", "success");
- } else {
- kitty_getCardNumber();
- }
- clearInterval(isLoginInterval)
- } else {
- kitty_logListPush("请先登录自己的含羞草账号...", "warning");
- localStorage.setItem("isGetPermission", false)
- }
-
- },500)
- }
- function kitty_isMobileDevice() {
- return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
- }
- function kitty_isRun() {
- let startnumber = 0;
- let startInterval = setInterval(()=>{
- startnumber ++
- if (localStorage.getItem("timeStampError")!=null||localStorage.getItem('homeGetAds')||localStorage.getItem('preInfo')) {
- let site = true
- let run = false
- if (document.querySelector("#kitty_vipPanel")||document.querySelector("#vipPanel")) {
- run = true
- }
- if (site&&!run) {
- let isH5 = kitty_isMobileDevice()
- if (isH5) {
- console.log("手机端")
- localStorageName = "fission-friends-h5_B_token"
- }
- kitty_vipPanelInit();
- console.log("启动脚本")
- }
- clearInterval(startInterval)
- }
- if (startnumber>=40) {
- clearInterval(startInterval)
- }
- },1000)
- }
- kitty_isRun()
- })();