// ==UserScript==
// @name 破解立知
// @namespace https://ez118.github.io/
// @version 4.0
// @description 破解立知课堂工具(由两位来自上海某中学的有痔青年共同编制)
// @author ZZY_WISU
// @match https://*.imlizhi.com/slive/pc/*
// @match https://easilive.seewo.com/*
// @license GNU GPLv3
// @icon https://edu.seewo.com/res/head/1/default.png
// @run-at document-end
// @grant GM_xmlhttpRequest
// @grant GM_download
// @grant GM_registerMenuCommand
// @grant GM_unregisterMenuCommand
// @grant GM_setValue
// @grant GM_getValue
// ==/UserScript==
/* 自定义部分 */
var verlist = [69, 50 ,40, 36, 29, 25, 19, 14, 11, 8, 4, 1];
//破解列表
var api = "https://s2.imlizhi.com/slive/pc/enow/thumbnail/api/v1/courseware";
//对接官方接口
var ReaderUrl = "https://easilive.seewo.com/ZZY_WISU/";
//课件浏览器的链接
var ScriptUrl = "https://gf.qytechs.cn/scripts/441933-%E7%A0%B4%E8%A7%A3%E7%AB%8B%E7%9F%A5/code/%E7%A0%B4%E8%A7%A3%E7%AB%8B%E7%9F%A5.user.js";
//用于查检更新的链接
var MaxPageNum = 120;
//用于储存最大课件页面数量
/*以上为自定义部分*/
/* 以下为菜单设定 */
function OpenExplorer() {
let cid = document.getElementsByClassName("enow__stage-wrap")[0].id.replace("stage-", "");
let title = document.getElementsByTagName("title")[0].innerText;
window.open(ReaderUrl + "@" + cid + "@0@" + encodeURI(title) + "@0");
}
function UnlockLimit() {
try{
var parent=document.getElementById('enow__non-interacte-hover');
parent.setAttribute("style", "display:none;");
}catch(e){}
try{
let toolbx = document.getElementsByClassName("enow__teachingtool-hide")[0];
toolbx.setAttribute("class", "enow__teachingtool");
}catch(e){}
}
function RemoveCover() {
try{
var parent= document.getElementsByClassName('live-poster live-pc-poster')[0];
parent.setAttribute("style", "visibility: hidden;");
}catch(e){}
}
function RemoveHand(){
try{
var parent= document.getElementsByClassName('live-raise-hand live-pc-raise-hand live-student-raise-hand')[0];
parent.setAttribute("style", "visibility: hidden;");
}catch(e){}
}
function BadGuyMode(){
var test_value = confirm("请选择是否打开坏小孩模式(点击确定表示打开,点击取消表示关闭)");
alert("打开状态:" + test_value);
if(test_value == true) { GM_setValue('BadGuyMode', {'state':'true'}); }
else { GM_setValue('BadGuyMode', {'state':'false'}); }
}
function CheckUpdate(){
location.href = ScriptUrl;
}
function MsgWordNumBreak(){
try{
let iptbx = document.getElementsByClassName("live-chat-send-msg-txt")[0];
iptbx.removeAttribute("maxlength");
}catch(e){}
}
let menu1 = GM_registerMenuCommand('手动打开课件浏览器', function () { OpenExplorer(); }, 'O');
let menu2 = GM_registerMenuCommand('解锁学生操作课件限制', function () { UnlockLimit(); }, 'U');
let menu3 = GM_registerMenuCommand('解除讨论区字符限制', function () { MsgWordNumBreak(); }, 'M');
let menu4 = GM_registerMenuCommand('移除课前等待遮罩', function () { RemoveCover(); }, 'R');
let menu5 = GM_registerMenuCommand('移除举手按钮', function () { RemoveHand(); }, 'H');
let menu6 = GM_registerMenuCommand('坏小孩模式', function () { BadGuyMode(); }, 'B');
let menu7 = GM_registerMenuCommand('查检更新', function () { CheckUpdate(); }, 'C');
/* 以上为菜单设定 */
function runAsync(url,send_type,data_ry) {
var p = new Promise((resolve, reject)=> {
GM_xmlhttpRequest({
method: send_type,
url: url,
headers: {"Content-Type": "application/x-www-form-urlencoded;charset=utf-8"},
data:data_ry,
onload: function(response){resolve(response.responseText);},
onerror: function(response){reject("请求失败");}
});
})
return p;
}
(function() {
'use strict';
if(window.location.href.split("@")[0] == ReaderUrl){
var data = window.location.href.split("@")[1];//课程ID
var ver = window.location.href.split("@")[2];//版本号在破解字典中的位置
var title = window.location.href.split("@")[3];//教师标题
var adds = window.location.href.split("@")[4];//版本微调
if(adds == undefined) adds = "0";
adds = new Number(adds);
var dochtml = "";
var obj = {};
var PageCnt = 0;
runAsync(api + "?coursewareId=" + data + "&version=" + (verlist[ver] + adds) + "&resolution=960_640","GET","content=erwer").then((result)=> {return result;}).then(function(result){
var filelist = eval("("+result+")");
if(filelist.message != "error"){
for(var i = 0; i <= MaxPageNum; i ++){
try{
obj[filelist.data[i].pageIndex] = filelist.data[i].downloadUrl;
}catch{}
}
for(i = 0; i <= MaxPageNum; i ++){
if(obj[i] != undefined) {dochtml += "<img src='" + obj[i] + "' title='第" + (i + 1) + "页'><br>"; PageCnt += 1;}
}
var script = '<script></script>';
var header = "<title>课件浏览器 | " + decodeURI(title) +"</title><style>body{background-color: rgb(50, 54, 57);user-select: none;margin:0px;} .msg{font-size:14px; z-index:5; border-radius:15px; padding:5px; padding-left:13px; padding-right:13px; background-color: rgb(51, 51, 51); position:fixed; top:15px; left:15px; color:#FFF;border:1px solid #CCC;} img{width:60%;min-width:450px;margin-top:5px;border-radius:4px;} a{color:#FFF; text-decoration:none;}</style>";
document.write(header + script + '<body><div class="msg"><a href="' + ReaderUrl + '@' + data + '@' + ver + '@' + title + '@' + (adds - 1) + '">◀</a> 共' + PageCnt + '页 (版本: ' + (verlist[ver] + adds) + ') <a href="' + ReaderUrl + '@' + data + '@' + ver + '@' + title + '@' + (adds + 1) + '">▶</a></div><center>' + dochtml + '</center></body>');
} else {
ver = new Number(ver) + 1;
if(verlist[ver] != undefined) location.href=ReaderUrl + "@" + data + "@" + ver + "@" + title + "@0";
else document.write("<title>出现问题</title><h2>抱歉,无法为您获取课件</h2><hr><b>你可以尝试更新该脚本以取得最新的破解字典。</b>");
}
});
} else if(window.location.href.split("/")[3] == "preview" || window.location.href.split("/")[3] == "course"){
var div=document.createElement("a");
div.innerText="右键空白处浏览课件";
div.setAttribute("style", "z-index:9;position:absolute;right:60px;top:120px;");
document.body.appendChild(div);
document.body.insertBefore(div, document.body.firstElementChild);
}
else {
if(GM_getValue('BadGuyMode').state == "true"){
setTimeout(function() {
UnlockLimit();
RemoveCover();
RemoveHand();
MsgWordNumBreak();
}, 5000);
}
}
})();