Sleazy Fork is available in English.

丝丝吧写真视频免费观看

观看丝丝吧写真视频免费

  1. // ==UserScript==
  2. // @name 丝丝吧写真视频免费观看
  3. // @name:zh-TW 丝丝吧写真视频免费观看
  4. // @namespace http://tampermonkey.net/
  5. // @version 0.2.0
  6. // @description 观看丝丝吧写真视频免费
  7. // @description:zh-TW 观看丝丝吧写真视频免费
  8. // @author FFFFFFeng
  9. // @match *://*.si88.cc/*
  10. // @icon https://www.google.com/s2/favicons?domain=swag555.xyz
  11. // @grant none
  12. // ==/UserScript==
  13. (function () {
  14. let kitty_emojiList = ["😃","😄","😁","😆","😅","🤣","😂","🙂","🙃","🫠","😉","😊","😇","😕","🫤","😟","🙁","☹","😯","😲","🥺","🥹","😦","😧","😨","😰","😥","😢","😭","😱","😖","😣","😞","😓","😩","😫","😤","😡","😠"]
  15. let kitty_emojiIndex = 0
  16. let kitty_StatusColor = {
  17. success: "#67C23A",
  18. warning: "#E6A23C",
  19. info: "#909399",
  20. danger: "#F56C6C",
  21. '200': "#67C23A",
  22. '300': "#E6A23C",
  23. '400': "#909399",
  24. '500': '#F56C6C'
  25. }
  26. let kitty_config = {
  27. name: "丝丝吧脚本",
  28. id: "sisi",
  29. version: "0.2.0",
  30. homePageName: "kitty猫",
  31. homePageUrl: "www.kittymao.xyz",
  32.  
  33. update: 3,
  34. logListMaxLength: 5,
  35. logItemLength: 20,
  36.  
  37. useMethodUrlList: ["www.kittymao.xyz"],
  38. payUrlList: ["shop.kittymao.xyz"],
  39.  
  40. updateUrl: "https://sleazyfork.org/zh-CN/scripts/440819-cao",
  41. requestHostList: ["https://baixiaodu.uk/api","https://www.kittymao.xyz/api","https://kittymao.xyz/api"],
  42. }
  43. let kitty_isrun = {
  44. getNewVersion: false
  45. }
  46. let kitty_tabIndex = 0
  47. let kitty_logList = []
  48. function kitty_setCookie(cname, cvalue, exdays) {
  49. var d = new Date();
  50. d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
  51. var expires = "expires=" + d.toGMTString();
  52. document.cookie = cname + "=" + cvalue + "; " + expires+";path=/";
  53. }
  54. function kitty_insertStyle() {
  55. let style = document.createElement("style")
  56. style.innerHTML = `
  57. /* 整体-start */
  58. #kitty_vipPanel {
  59. width: 310px;
  60. height: 500px;
  61. box-shadow: 0 0 0 1px rgb(0 0 0 / 5%), 0 2px 4px 1px rgb(0 0 0 / 9%);
  62. border-left: 1px solid transparent;
  63. border-right: none;
  64. border-top: 1px solid transparent;
  65. border-bottom: 1px solid transparent;
  66. background-color: #FFFFFF;
  67. position: fixed;
  68. left: 6px;
  69. bottom: 6px;
  70. z-index: 99999;
  71. font-size: 16px;
  72. --script-panel-main-color: #DD2476;
  73. }
  74. #kitty_vipPanel a {
  75. text-decoration: underline;
  76. }
  77. .kitty_panelMain {
  78. font-size: 0.85em;
  79. }
  80. .hitty_hiddenPanel {
  81. left: -310px !important;
  82. }
  83. /* 整体-end */
  84. /* panelHead-start */
  85. .kitty_panelHead {
  86. display: flex;
  87. border-bottom: 1px solid #ececec;
  88. }
  89. .kitty_panelHead>div {
  90. color: #444;
  91. padding: 0 10px;
  92. height: 40px;
  93. line-height: 40px;
  94. box-sizing: border-box;
  95. user-select: none;
  96. text-align: center;
  97. width: 76px;
  98. font-size: 1em;
  99. }
  100. .kitty_panelHead>div:not(.kitty_headDivActive):hover {
  101. border-bottom: 3px solid #ccc;
  102. cursor: pointer;
  103. }
  104. .kitty_headDivActive {
  105. border-bottom: 3px solid var(--script-panel-main-color);
  106. color: #444;
  107. font-weight: bold;
  108. }
  109. /* panelHead-end */
  110. /* 界面显示按钮 */
  111. .kitty_showPanelBtn {
  112. position: absolute;
  113. left: 320px;
  114. bottom: 20px;
  115. width: 60px;
  116. height: 40px;
  117. line-height: 40px;
  118. color: var(--script-panel-main-color);
  119. user-select: none;
  120. background-color: #FFFFFF;
  121. position: absolute;
  122. left: 320;
  123. bottom: 20px;
  124. display: none;
  125. cursor: pointer;
  126. border-radius: 5px;
  127. }
  128. /* 身体 */
  129. .kitty_panelBody {
  130. padding: 0 10px;
  131. }
  132. .kitty_panelBody p {
  133. margin: 10px 0;
  134. }
  135. /* 输入框-start */
  136. .kitty_searchInput {
  137. width: 98%;
  138. border-radius: 24px;
  139. box-shadow: 0 0 0 1px rgb(0 0 0 / 5%), 0 2px 4px 1px rgb(0 0 0 / 9%);
  140. height: 40px;
  141. border-left: 1px solid transparent;
  142. border-right: none;
  143. border-top: 1px solid transparent;
  144. border-bottom: 1px solid transparent;
  145. overflow: hidden;
  146. margin: 0 auto;
  147. margin-top: 40px;
  148. margin-bottom: 50px;
  149. display: flex;
  150. }
  151. .kitty_searchInput:hover {
  152. border-top-left-radius: 24px;
  153. box-shadow: 0 0 0 1px rgb(0 0 0 / 10%), 0 2px 4px 1px rgb(0 0 0 / 18%);
  154. border-left: 1px solid transparent;
  155. border-right: none;
  156. border-top: 1px solid transparent;
  157. border-bottom: 1px solid transparent;
  158. }
  159. .kitty_searchInput input {
  160. height: 100%;
  161. border: 0;
  162. outline: 0;
  163. padding: 0 10px;
  164. color: black;
  165. width: 100%;
  166. }
  167. /* 输入框-end */
  168. /* go按钮-start */
  169. .kitty_goToVipBtn {
  170. color: #FFFFFF;
  171. font-weight: bold;
  172. background-color: var(--script-panel-main-color);
  173. height: 100px;
  174. width: 100px;
  175. border-radius: 50px;
  176. text-align: center;
  177. line-height: 100px;
  178. margin: 20px auto;
  179. box-shadow: 0 0 0 1px rgb(0 0 0 / 5%), 0 2px 4px 1px rgb(0 0 0 / 9%);
  180. user-select: none;
  181. }
  182. .kitty_goToVipBtn:hover {
  183. cursor: pointer;
  184. box-shadow: 0 0 0 0 rgb(0 0 0 / 5%), 0 2px 4px 1px rgb(0 0 0 / 18%);
  185. -webkit-box-shadow: 0 0 0 0 rgb(0 0 0 / 5%), 0 2px 4px 1px rgb(0 0 0 / 18%);
  186. -moz-box-shadow: 0 0 0 0 rgba(0,0,0,.05),0 2px 4px 1px rgba(0,0,0,.18);
  187. }
  188. /* 动画 */
  189. @keyframes kitty_float {
  190. 0% {
  191. transform: translateY(0px);
  192. }
  193. 5% {
  194. transform: translateY(-10px);
  195. }
  196. 10%,100% {
  197. transform: translateY(0px);
  198. }
  199. }
  200.  
  201. .kitty_navy {
  202. position: relative;
  203. }
  204.  
  205. .kitty_navy span {
  206. position: relative;
  207. display: inline-block;
  208. color: white;
  209. animation: kitty_float 9s ease-in-out infinite;
  210. animation-delay: 2s;
  211. font-size: 1.5em;
  212. }
  213. /* go按钮-end */
  214. .kitty_logOutput {
  215. color: #71777d;
  216. font-size: 0.9em;
  217. margin-top: 50px;
  218. }
  219. .kitty_logOutput div {
  220. margin: 0;
  221. padding: 0;
  222. line-height: 1.5;
  223. }
  224. .kitty_downloadText {
  225. font-size: 20px;
  226. font-weight: bold;
  227. }
  228. .kitty_downloadText a {
  229. cursor:pointer;
  230. }
  231. `
  232. document.querySelector("head").appendChild(style);
  233. }
  234. function kitty_createPanel() {
  235. let panel = document.createElement("div")
  236. panel.setAttribute("id", "kitty_vipPanel")
  237. panel.innerHTML = `
  238. <div class="kitty_showPanelBtn">&gt;&gt;显示</div>
  239. <div class="kitty_panelMain">
  240. <div class="kitty_panelHead">
  241. <div class="kitty_headDivActive">获取权限</div>
  242. <div>令牌登录</div>
  243. <div>使用指南</div>
  244. <div>商店</div>
  245. </div>
  246. <div class="kitty_panelBody kitty_panelBody_0">
  247. <div class="kitty_searchInput">
  248. <input id="kitty_txm" type="text" disabled placeholder="本脚本完全免费">
  249. </div>
  250. <div class="kitty_goToVipBtn kitty_navy">
  251. <span>G</span>
  252. <span>O</span>
  253. <span>!</span>
  254. </div>
  255. <div class="kitty_logOutput">
  256. <div>脚本--><span class="kitty_scriptName"></span>-<span class="kitty_version"></span>-<span class="kitty_update"></span></div>
  257. <div>主页--><a class="kitty_homepage" target="_blank" href="">主页地址</a></div>
  258. <div>邮箱-->JamJamToday@protonmail.com</div>
  259. <div>操作--><span style="color: red;cursor:pointer;" class="kitty_hiddenPanelBtn">点此隐藏此脚本操作界面&lt;&lt;</span></div>
  260. <div class="kitty_logList">
  261. </div>
  262. </div>
  263. </div>
  264. <div class="kitty_panelBody kitty_panelBody_1" style="display:none;">
  265. <p>暂未开放</p>
  266. </div>
  267. <div class="kitty_panelBody kitty_panelBody_2" style="display:none;">
  268. <p>+ 使用方法线路1: <a target="_blank" href="https://docs.kittymao.xyz">docs.kittymao.xyz</a></p>
  269. </div>
  270. <div class="kitty_panelBody kitty_panelBody_3" style="display:none;">
  271. <p>+ 商店线路1: <a target="_blank" href="https://shop.kittymao.xyz">shop.kittymao.xyz</a></p>
  272. </div>
  273. </div>
  274. `
  275. document.body.appendChild(panel)
  276. }
  277.  
  278. function kitty_eventBind() {
  279. let tabs = document.querySelectorAll(".kitty_panelHead>div")
  280. for (let i = 0; i < tabs.length; i++) {
  281. tabs[i].addEventListener("click", function() {
  282. for (let ii = 0; ii < tabs.length; ii++) {
  283. tabs[ii].className = ""
  284. }
  285. tabs[i].className = "kitty_headDivActive"
  286. kitty_changeTab(i)
  287. })
  288. }
  289. document.querySelector(".kitty_hiddenPanelBtn").addEventListener("click", function() {
  290. kitty_hiddenPanel()
  291. })
  292. document.querySelector(".kitty_showPanelBtn").addEventListener("click", function() {
  293. kitty_showPanel()
  294. })
  295. let gets = document.querySelectorAll(".kitty_goToVipBtn")
  296. gets[0].addEventListener("click", function() {
  297. kitty_getPermissionStart()
  298. })
  299. }
  300. function kitty_changeTab(index) {
  301. kitty_tabIndex = index
  302. let panelBodys = document.querySelectorAll(".kitty_panelBody")
  303. if(!panelBodys[kitty_tabIndex]) {
  304. return
  305. }
  306. for (let i = 0; i < panelBodys.length; i ++) {
  307. panelBodys[i].style.display = "none"
  308. }
  309. panelBodys[kitty_tabIndex].style.display = "block"
  310. }
  311.  
  312.  
  313. function kitty_hiddenPanel() {
  314. document.querySelector("#kitty_vipPanel").className = "hitty_hiddenPanel"
  315. document.querySelector(".kitty_showPanelBtn").style.display = "block"
  316. }
  317. function kitty_showPanel() {
  318. document.querySelector("#kitty_vipPanel").className = ""
  319. document.querySelector(".kitty_showPanelBtn").style.display = "none"
  320. }
  321. function kitty_getPermissionStart() {
  322. let emoLength = kitty_emojiList.length
  323. let txm = document.querySelector("#kitty_txm").value
  324. localStorage.setItem("kitty_txm", txm)
  325. kitty_getSuccessHost();
  326. kitty_getPermission(0, txm, false);
  327. }
  328. function kitty_getSuccessHost() {
  329. let successHost = localStorage.getItem("kitty_requestSuccessHost")
  330. if(successHost) {
  331. let findIndex = kitty_config.requestHostList.indexOf(successHost);
  332. if (findIndex!=-1) {
  333. kitty_config.requestHostList.splice(findIndex, 1);
  334. kitty_config.requestHostList.unshift(successHost);
  335. }
  336. }
  337. }
  338. function kitty_getHost(index) {
  339. return kitty_config.requestHostList[index]
  340. }
  341.  
  342.  
  343. function kitty_getStatusTypeText(type) {
  344. let typeText = "提示";
  345. switch(type){
  346. case "success":
  347. typeText = "成功"
  348. break
  349. case "warning":
  350. typeText = "警告"
  351. break
  352. case "info":
  353. typeText = "信息"
  354. break
  355. case "danger":
  356. typeText = "失败"
  357. break
  358. case '200':
  359. typeText = "成功"
  360. break
  361. case '300':
  362. typeText = "警告"
  363. break
  364. case '400':
  365. typeText = "信息"
  366. break
  367. case '500':
  368. typeText = "失败"
  369. break
  370. }
  371. return typeText;
  372. }
  373. function kitty_logListPush(item, type) {
  374. if (kitty_logList.length >= kitty_config.logListMaxLength) {
  375. kitty_logListShift()
  376. }
  377. let stringLength = item.length
  378. let start = 0;
  379. let end = kitty_config.logItemLength-1
  380. let headLine = true
  381. while(stringLength>=0) {
  382. let typeText = `${kitty_getStatusTypeText(type)}-->`;
  383. let styleColor = ""
  384. if (type) {
  385. styleColor = type?`color: ${kitty_StatusColor[type]}`:"";
  386. }
  387. kitty_logList.push(`<span style="${styleColor}">${headLine?typeText:'<span style="opacity: 0;">续行--</span>&gt;'}${item.substring(start, end)}</span>`)
  388. start = end
  389. end += end
  390. stringLength = stringLength-kitty_config.logItemLength
  391. headLine = false
  392. }
  393. kitty_showLogList()
  394. }
  395. function kitty_logListShift() {
  396. kitty_logList.shift();
  397. kitty_showLogList();
  398. }
  399. function kitty_showLogList() {
  400. let innerhtml = "";
  401. let kitty_logListDiv = document.getElementsByClassName("kitty_logList")[0]
  402. kitty_logList.forEach(item => {
  403. innerhtml+=`<div>${item}</div>`
  404. })
  405. kitty_logListDiv.innerHTML = innerhtml;
  406. }
  407. function kitty_setConfig() {
  408. document.getElementsByClassName("kitty_scriptName")[0].innerHTML = kitty_config.name;
  409. document.getElementsByClassName("kitty_version")[0].innerHTML = `v${kitty_config.version}`;
  410. let homepage = document.getElementsByClassName("kitty_homepage")[0];
  411. homepage.innerHTML = kitty_config.homePageName+`(${kitty_config.homePageUrl})`
  412. homepage.href = "https://"+kitty_config.homePageUrl
  413. if (kitty_config.update===1) {
  414. let versionSpan = document.getElementsByClassName("kitty_update")[0];
  415. versionSpan.innerHTML = `已最新`;
  416. versionSpan.style = `color: ${kitty_StatusColor.success};`;
  417. } else if (kitty_config.update===2) {
  418. let versionSpan = document.getElementsByClassName("kitty_update")[0];
  419. versionSpan.innerHTML = `<span class="kitty_toNewVersion" style="user-select: none;cursor: pointer;">点此更新</span>`;
  420. versionSpan.style = `color: ${kitty_StatusColor.warning};`;
  421. document.querySelector(".kitty_toNewVersion").addEventListener("click", function() {
  422. window.open(kitty_config.updateUrl)
  423. })
  424. } else {
  425. let versionSpan = document.getElementsByClassName("kitty_update")[0];
  426. versionSpan.innerHTML = `<span class="kitty_checkVersion" style="user-select: none;cursor: pointer;">检查更新</span>`;
  427. versionSpan.style = `color: ${kitty_StatusColor.warning};`;
  428. document.querySelector(".kitty_checkVersion").addEventListener("click", function() {
  429. kitty_getNewVersion(0, false)
  430. })
  431. }
  432. }
  433.  
  434. function kitty_getCardNumber() {
  435. let txm = localStorage.getItem("txm")
  436. if (txm) {
  437. localStorage.setItem("kitty_txm", txm)
  438. localStorage.removeItem("txm")
  439. }
  440. let kitty_txm = localStorage.getItem("kitty_txm")
  441. if (kitty_txm) {
  442. //kitty_logListPush("在使用前请安装好modheader并配置,详情请查看使用指南", "warning")
  443. if (kitty_isSuccess()) {
  444. kitty_logListPush("请求成功, 请尝试观看", "success")
  445. } else {
  446. kitty_logListPush("已准备就绪,请点击GO按钮", "info")
  447. }
  448. kitty_logListPush("更多脚本请访问官网", "warning")
  449. kitty_logListPush("www.kittymao.xyz", "warning")
  450. } else {
  451. if (kitty_isSuccess()) {
  452. kitty_logListPush("请求成功, 请尝试观看", "success")
  453. } else {
  454. kitty_logListPush(`已准备就绪,请点击GO按钮${kitty_emojiList[kitty_emojiIndex]}`, "info")
  455. }
  456. kitty_logListPush("更多脚本请访问官网", "warning")
  457. kitty_logListPush("www.kittymao.xyz", "warning")
  458. kitty_emojiIndex++
  459. }
  460. }
  461. function kitty_getPermission(index, txm, change) {
  462. if (kitty_isrun.getPermission&&!change) {
  463. return
  464. }
  465. let host = kitty_getHost(index)
  466. if(!change) {
  467. kitty_logListPush("发送请求中请耐心等待...", "info")
  468. }
  469. kitty_isrun.getPermission = true
  470. let url = `${host}/ssb/getPermission`
  471. fetch(url,{
  472. method: "POST",
  473. headers: {
  474. "Content-Type": "application/json",
  475. },
  476. body: JSON.stringify({
  477. "version": kitty_config.version,
  478. "nickname": "ssb"
  479. })
  480. }).then(res => res.json()).then(res => {
  481. localStorage.setItem("kitty_requestSuccessHost", host)
  482. console.log(res)
  483. try {
  484. if (res.success) {
  485. dealGetPermissionRes(res.data)
  486. } else {
  487. kitty_logListPush(res.message, "danger")
  488. }
  489. } catch(e) {
  490. kitty_logListPush("失败,返回值处理有问题", "danger")
  491. console.log(e)
  492. }
  493. kitty_isrun.getPermission = false
  494. }).catch((e) => {
  495. if (e.toString().includes("JSON")) {
  496. kitty_logListPush("JSON解析失败,请联系作者", "danger")
  497. kitty_isrun.getPermission = false
  498. } else {
  499. console.log(e)
  500. index++
  501. let getHost = kitty_getHost(index)
  502. if (getHost) {
  503. kitty_logListPush("请求失败,切换线路中请耐心等待...", "warning")
  504. kitty_getPermission(index, txm, true)
  505. } else {
  506. kitty_logListPush("请求失败,请联系作者", "danger")
  507. kitty_isrun.getPermission = false
  508. }
  509. }
  510. })
  511. }
  512. function dealGetPermissionRes(resData) {
  513. let cookieArr = resData.token
  514. cookieArr.forEach((item) => {
  515. let temp = item.split(";")[0]
  516. let tempArr = temp.split("=")
  517. kitty_setCookie(tempArr[0], tempArr[1])
  518. })
  519. kitty_logListPush("请求成功, 刷新页面中请稍候...", "success");
  520. setTimeout(() => {
  521. location.reload()
  522. }, 1000)
  523. }
  524. function kitty_checkIsSuccess() {
  525. if (kitty_isSuccess()) {
  526. kitty_hiddenPanel();
  527. }
  528. }
  529. function kitty_isSuccess() {
  530. return kitty_getCookie("xszfvmlusername")
  531. }
  532. function kitty_getNewVersion(index, change) {
  533. if (kitty_isrun.getNewVersion&&!change) {
  534. return
  535. }
  536. let host = kitty_getHost(index)
  537. if(!change) {
  538. kitty_logListPush("检查版本号中请耐心等待...", "info")
  539. }
  540. kitty_isrun.getNewVersion = true
  541. let url = `${host}/getVersion`
  542. fetch(url,{
  543. method: "POST",
  544. headers: {
  545. "Content-Type": "application/json",
  546. },
  547. body: JSON.stringify({
  548. "nickname": "ssb"
  549. })
  550. }).then(res => res.json()).then(res => {
  551. localStorage.setItem("kitty_requestSuccessHost", host)
  552. try {
  553. let data = res.data
  554. if (data.version === kitty_config.version) {
  555. kitty_config.update = 1
  556. kitty_logListPush("已是最新版", "success")
  557. } else {
  558. kitty_config.update = 2
  559. kitty_config.updateUrl = data.updateUrl
  560. kitty_logListPush("不是最新版,可能无法使用", "warning")
  561. }
  562. kitty_setConfig()
  563. } catch(e) {
  564. kitty_logListPush("失败,返回值处理有问题", "danger")
  565. console.log(e)
  566. }
  567. kitty_isrun.getNewVersion = false
  568. }).catch((e) => {
  569. if (e.toString().includes("JSON")) {
  570. kitty_logListPush("JSON解析失败,请联系作者", "danger")
  571. kitty_isrun.getNewVersion = false
  572. } else {
  573. console.log(e)
  574. index++
  575. let getHost = kitty_getHost(index)
  576. if (getHost) {
  577. kitty_logListPush("请求失败,切换线路中请耐心等待...", "warning")
  578. kitty_getNewVersion(index, true)
  579. } else {
  580. kitty_logListPush("请求失败,请联系作者", "danger")
  581. kitty_isrun.getPermission = false
  582. }
  583. }
  584. })
  585. }
  586. function kitty_vipPanelInit() {
  587. kitty_insertStyle();
  588. kitty_createPanel();
  589. kitty_getSuccessHost();
  590. kitty_showLogList();
  591. kitty_eventBind();
  592. kitty_getCardNumber();
  593. kitty_setConfig();
  594. kitty_checkIsSuccess()
  595. }
  596. function kitty_getCookie (name) {
  597. const cookies = document.cookie.split(";"); // 将 document.cookie 拆分为多个 Cookie 字符串
  598. for (const cookie of cookies) {
  599. const [cookieName, cookieValue] = cookie.split("=");
  600. const trimmedCookieName = cookieName.trim(); // 去除空格
  601. if (trimmedCookieName === name) {
  602. return decodeURIComponent(cookieValue); // 解码 Cookie 值
  603. }
  604. }
  605. return null; // 没有找到匹配的 Cookie
  606. }
  607. function kitty_isRun() {
  608. let site = false
  609. let run = false
  610. if(document.title.includes('丝丝吧')) {
  611. site = true
  612. }
  613. if (document.querySelector("#kitty_vipPanel")||document.querySelector("#vipPanel")) {
  614. run = true
  615. }
  616. if (site&&!run) {
  617. kitty_vipPanelInit();
  618. }
  619. }
  620. kitty_isRun()
  621. })();