您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
目前只能车
- // ==UserScript==
- // @name bilibili_live_modify
- // @namespace http://tampermonkey.net/
- // @match *://live.bilibili.com/*
- // @version 0.2
- // @description 目前只能车
- // @author Yi MIT
- // @icon data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
- // @require https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js
- // @require https://cdn.bootcdn.net/ajax/libs/qrcodejs/1.0.0/qrcode.min.js
- // @grant GM_xmlhttpRequest
- // @license MIT
- // ==/UserScript==
- (function () {
- let website;//站点:0(斗鱼),1(虎牙),2(bilibili),3(抖音)
- let url = window.location.host;//当前网址
- let cookie = document.cookie;//获取所有cookie
- let csrf = '';//csrf码
- let room_info = '';//房间信息
- let room_id = '';//房间号
- let data = '';//表单数据
- let sessdata = '';//B站登录(不可用)状态
- let sleepTime = -1;
- let start = 0;//按钮状态:0启动 1停止
- let periodic = ''//周期状态
- let strI = 0;
- let strMax = 20;
- setTimeout(() => {
- initDLC();
- }, 7000);
- //初始化
- async function initDLC() {
- if (url === 'www.douyu.com') {
- website = 0;
- } else if (url === 'www.huya.com') {
- website = 1;
- } else if (url === 'live.bilibili.com') {
- website = 2;
- let temp = window.location.href.split("/")[3].split("?")[0];
- if (isNaN(parseFloat(temp))) {
- return;
- }
- room_info = await (await fetch("https://api.live.bilibili.com/room/v1/Room/get_info?room_id=" + temp)).json();
- room_id = room_info.data.room_id;
- let cookie_list = cookie.split(";");
- let flag = false;
- for (let i = 0; i < cookie_list.length; i++) {
- let temp = cookie_list[i].trim().split("=");
- if (temp[0] === 'bili_jct') {
- csrf = temp[1];
- } else if (temp[0] === 'yimit_live_sessdata') {
- flag = true;
- cookie = cookie + ";SESSDATA=" + temp[1];
- }
- }
- if (flag === false) {
- let returnGenerate = await run_unicycle_request_GET("https://passport.bilibili.com/x/passport-login/web/qrcode/generate");
- let login_live = document.createElement("div");
- login_live.setAttribute("style", "z-index: 999;position: fixed; top: 35%; left: 40%;background: #ffffff;padding: 0.3%;height: 16%; width: 7%;border-radius: 12px;display: block;");
- let main_live = document.querySelectorAll(".app-content.p-relative.z-app-content");
- main_live[0].appendChild(login_live);
- let login_live_text = document.createElement("div");
- login_live_text.innerHTML = "使用脚本前,请先用bilibili手机客户端扫码登陆";
- login_live_text.setAttribute("style", "color: #f69; text-align: center;");
- login_live.appendChild(login_live_text);
- let qrcode = document.createElement("div");
- qrcode.setAttribute("id", "qrcode");
- let img = new QRCode(qrcode, {
- text: returnGenerate[0].data.url,
- width: 180,
- height: 180,
- colorDark : "#000000",
- colorLight : "#ffffff"
- });
- login_live.appendChild(qrcode);
- let code = 1;
- while (code !== 0) {
- let login_in = await run_unicycle_request_GET("https://passport.bilibili.com/x/passport-login/web/qrcode/poll?qrcode_key=" + returnGenerate[0].data.qrcode_key);
- code = login_in[0].data.code;
- if (code === 86090) {
- alert("二维码已扫未确认");
- } else if (code === 86038) {
- alert("二维码已失效");
- } else if (code === 0) {
- alert("账号已登录(不可用)");
- let sessdata = login_in[1].split('\n');
- for (let i = 0; i < sessdata.length; i++) {
- let set_cookie = sessdata[i].split(';');
- if (set_cookie.length > 1) {
- for (let j = 0, k = 0; j < set_cookie.length; j++) {
- let set_temp = set_cookie[j].split("=");
- if (set_temp[0].indexOf("SESSDATA") !== -1) {
- sessdata = set_temp[1];
- } else if (set_temp[0].trim() === 'Expires' && k === 0) {
- document.cookie = "yimit_live_sessdata=" + sessdata + "; expires=" + set_temp[1];
- cookie = cookie + ";SESSDATA=" + sessdata;
- k++;
- }
- }
- }
- }
- login_live.setAttribute("style", "z-index: 999;position: fixed; top: 35%; left: 40%;background: #ffffff;padding: 0.3%;height: 16%; width: 7%;border-radius: 12px;display: none;");
- }
- sleep(10);
- }
- }
- }
- let ul_tab_list = document.querySelectorAll(".tab-list.dp-flex");
- let tab_content = document.querySelectorAll(".tab-content.ts-dot-2.tab-content-pilot");
- let unicycle_test1_height = document.querySelectorAll(".tabs");
- if (document.getElementsByTagName("iframe").length > 2) {
- ul_tab_list = document.getElementsByTagName("iframe")[1].contentWindow.document.querySelectorAll(".tab-list.dp-flex");
- tab_content = document.getElementsByTagName("iframe")[1].contentWindow.document.querySelectorAll(".tab-content.ts-dot-2.tab-content-pilot");
- unicycle_test1_height = document.getElementsByTagName("iframe")[1].contentWindow.document.querySelectorAll(".tabs");
- }
- // let ul_tab_list = document.querySelectorAll(".tab-list.dp-flex");
- // alert(document.getElementsByTagName("iframe")[1].contentWindow.document.querySelectorAll(".tab-list.dp-flex").length);
- let li_tab_list = document.createElement("li");
- li_tab_list.setAttribute("id", "li-tab-list");
- li_tab_list.setAttribute('data-v-9a8f688c', '');
- li_tab_list.setAttribute('data-v-9d1b85a4', '');
- li_tab_list.setAttribute('class', 'item live-skin-normal-text dp-i-block live-skin-separate-border border-box t-center pointer opacity6');
- li_tab_list.setAttribute('height', '14px');
- li_tab_list.setAttribute('line-height', '14px');
- li_tab_list.setAttribute('border-right', '1px solid #e3e5e7;');
- li_tab_list.setAttribute('flex', '1');
- li_tab_list.innerHTML = "独轮车";
- ul_tab_list[0].appendChild(li_tab_list);
- let ul_tab_children = ul_tab_list[0].querySelectorAll('li');
- let unicycle_test1 = document.createElement("div");
- unicycle_test1.className = "unicycle-test1";
- unicycle_test1.setAttribute('data-v-018ef60e', '');
- unicycle_test1.setAttribute('data-v-30dc9297', '');
- unicycle_test1.setAttribute('style', 'z-index: 999;position: absolute;background: rgba(255, 255, 255, 0);');
- unicycle_test1.setAttribute('class', 'gift-rank-cntr live-skin-coloration-area rank-list-content a-move-in-top');
- unicycle_test1.style.width = tab_content[0].offsetWidth + 'px';
- unicycle_test1.style.top = unicycle_test1_height[0].offsetHeight + 'px';
- // unicycle_test1.style.height = 400 + 'px';
- unicycle_test1.style.height = "80%";
- unicycle_test1.style.display = 'none';
- tab_content[0].appendChild(unicycle_test1);
- let mode = document.createElement("div");
- mode.style.padding = "1%";
- mode.style.height = "100%";
- unicycle_test1.appendChild(mode);
- let mode_top = document.createElement("div");
- mode_top.style.width = "98%";
- mode_top.style.height = "7%";
- mode_top.style.padding = "0% 1% 2% 1%";
- mode.appendChild(mode_top);
- let mode_top_select = document.createElement("div");
- mode_top_select.style.height = "100%";
- mode_top_select.style.width = "50%";
- mode_top_select.style.display = "inline-flex";
- mode_top_select.innerHTML = "模式选择:"
- mode_top_select.style.alignItems = "center";
- let mode_top_select_1 = document.createElement("select");
- mode_top_select_1.style.height = "100%";
- mode_top_select_1.style.borderRadius = "4px";
- mode_top_select_1.style.border = "1px solid rgba(255,102,153,0.8)";
- mode_top.appendChild(mode_top_select);
- mode_top_select.appendChild(mode_top_select_1);
- let mode_top_select_option_0 = document.createElement("option");
- mode_top_select_option_0.value = "0";
- mode_top_select_option_0.innerHTML = "单句模式";
- mode_top_select_option_0.style.border = "0";
- mode_top_select_option_0.style.padding = "0";
- mode_top_select_option_0.style.borderRadius = "4px";
- mode_top_select_1.appendChild(mode_top_select_option_0);
- let mode_top_select_option_1 = document.createElement("option");
- mode_top_select_option_1.value = "1";
- mode_top_select_option_1.innerHTML = "说书模式";
- mode_top_select_option_1.style.border = "0";
- mode_top_select_option_1.style.padding = "0";
- mode_top_select_option_1.style.borderRadius = "4px";
- mode_top_select_1.appendChild(mode_top_select_option_1);
- let mode_top_select_option_2 = document.createElement("option");
- mode_top_select_option_2.value = "2";
- mode_top_select_option_2.innerHTML = "编程模式";
- mode_top_select_option_2.style.border = "0";
- mode_top_select_option_2.style.padding = "0";
- mode_top_select_option_2.style.borderRadius = "4px";
- mode_top_select_1.appendChild(mode_top_select_option_2);
- let mode_top_select_option_3 = document.createElement("option");
- mode_top_select_option_3.value = "3";
- mode_top_select_option_3.innerHTML = "随机模式";
- mode_top_select_option_3.style.border = "0";
- mode_top_select_option_3.style.padding = "0";
- mode_top_select_option_3.style.borderRadius = "4px";
- mode_top_select_1.appendChild(mode_top_select_option_3);
- let mode_top_select_right = document.createElement("div");
- mode_top_select_right.style.height = "100%";
- mode_top_select_right.style.width = "50%";
- mode_top_select_right.style.display = "inline-flex";
- mode_top.appendChild(mode_top_select_right);
- let mode_top_select_right_text = document.createElement("input");
- mode_top_select_right_text.setAttribute("id", "input_time");
- mode_top_select_right_text.type = "text";
- mode_top_select_right_text.style.width = "80%";
- mode_top_select_right_text.style.float = "right";
- mode_top_select_right_text.placeholder = "间隔时间(ms)";
- mode_top_select_right_text.style.borderRadius = "4px 0 0 4px";
- mode_top_select_right_text.style.padding = "0% 2%";
- mode_top_select_right_text.style.border = "1px solid rgba(255,102,153,0.8)";
- mode_top_select_right.appendChild(mode_top_select_right_text);
- let text_time = mode_top_select_right_text.value;
- let mode_top_select_right_span = document.createElement("span");
- mode_top_select_right_span.innerHTML = "ms";
- mode_top_select_right_span.style.display = "block";
- mode_top_select_right_span.style.justifyContent = "center";
- mode_top_select_right_span.style.alignContent = "center";
- mode_top_select_right_span.style.textAlign = "center";
- mode_top_select_right_span.style.width = "20%";
- mode_top_select_right_span.style.borderRadius = "0 4px 4px 0";
- mode_top_select_right_span.style.border = "1px solid rgba(255,102,153,0.8)";
- mode_top_select_right.appendChild(mode_top_select_right_span);
- let mode_text = document.createElement("textarea");
- mode_text.rows = "10";
- mode_text.cols = "20";
- mode_text.placeholder = "有活的整活,没活的复制,直播间不养闲人!";
- mode_text.style.width = "96%";
- mode_text.style.height = "75%";
- mode_text.style.padding = "2%";
- mode_text.style.borderRadius = "4px";
- mode_text.style.border = "1px solid rgba(255,102,153,0.8)";
- mode_text.setAttribute("id", "mode-text");
- mode.appendChild(mode_text);
- let text_str = mode_text.value;
- let mode_button = document.createElement("div");
- mode_button.style.padding = "2% 0%";
- mode_button.style.width = "100%";
- mode_button.style.height = "8%";
- mode_button.style.display = "inline-flex";
- mode.appendChild(mode_button);
- let mode_button_left = document.createElement("div");
- mode_button_left.style.height = "100%";
- mode_button_left.style.width = "50%";
- mode_button_left.style.display = "inline-flex";
- mode_button.appendChild(mode_button_left);
- let mode_button_right = document.createElement("div");
- mode_button_right.style.height = "100%";
- mode_button_right.style.width = "50%";
- mode_button_right.style.display = "inline-flex";
- mode_button.appendChild(mode_button_right);
- let mode_button_button = document.createElement("button");
- mode_button_button.setAttribute("id", "mode_button_button");
- mode_button_button.innerHTML = "独轮车,启动!";
- mode_button_button.style.padding = "0% 3%";
- mode_button_button.style.width = "94%";
- mode_button_button.style.background = "rgba(255,102,153,0.8)";
- mode_button_button.style.color = "#ffffff";
- mode_button_button.style.border = "0";
- mode_button_button.style.borderRadius = "4px";
- mode_button_right.appendChild(mode_button_button);
- for (let j = 0; j < ul_tab_children.length; j++) {
- ul_tab_children[j].addEventListener('click', (function(children, num, unicycle_test1_1) {
- return function(e) {
- for (let i = 0; i < children.length; i++) {
- children[i].setAttribute('class', 'item live-skin-normal-text dp-i-block live-skin-separate-border border-box t-center pointer opacity6');
- }
- // let tab_content = document.querySelectorAll(".tab-content.ts-dot-2.tab-content-pilot");
- let tab_content = document.getElementsByTagName("iframe").length > 2 ? document.getElementsByTagName("iframe")[1].contentWindow.document.querySelectorAll(".tab-content.ts-dot-2.tab-content-pilot") : document.querySelectorAll(".tab-content.ts-dot-2.tab-content-pilot");
- if (children[num].id === 'li-tab-list') {
- unicycle_test1_1.style.display = 'block';
- tab_content[0].querySelectorAll("div")[0].style.display = "none";
- // let switch_btn = document.querySelectorAll(".switch-btn-bg.live-skin-highlight-bg");
- let switch_btn = document.getElementsByTagName("iframe").length > 2 ? document.getElementsByTagName("iframe")[1].contentWindow.document.querySelectorAll(".switch-btn-bg.live-skin-highlight-bg") : document.querySelectorAll(".switch-btn-bg.live-skin-highlight-bg");
- switch_btn[0].click();
- } else {
- unicycle_test1_1.style.display = 'none';
- tab_content[0].querySelectorAll("div")[0].style.display = "block";
- }
- children[num].setAttribute('class', 'item live-skin-normal-text dp-i-block live-skin-separate-border border-box t-center pointer active');
- }
- })(ul_tab_children, j, unicycle_test1));
- }
- mode_top_select_1.addEventListener("change", (function(mode_top_select_1_1, text) {
- return function(e) {
- let change_num = mode_top_select_1_1.value;
- // let temp = document.getElementById("input_time");
- let temp = document.getElementsByTagName("iframe").length > 2 ? document.getElementsByTagName("iframe")[1].contentWindow.document.getElementById("input_time") : document.getElementById("input_time");
- if (change_num === '0') {
- temp.removeAttribute("disabled");
- text.placeholder = "按照指定时间间隔逐行发送弹幕" + '\n' + "1.使用回车换行。" + '\n' + "2.每行字符数建议不超过弹幕字符上限(超过部分会裁掉)。" + '\n' + "3.间隔时间建议不小于网站规定。";
- } else if (change_num === '1') {
- temp.removeAttribute("disabled");
- text.placeholder = "按照指定时间间隔逐行发送弹幕" + '\n' + "1.以符号为分段依据,过长会拆分发送。" + "\n" + "2.间隔时间建议不小于网站规定。";
- } else if (change_num === '2') {
- temp.setAttribute("disabled", "");
- text.placeholder = "待发送弹幕间可自定义发送间隔" + "\n" + "1.请以一行待发送弹幕一行间隔时间的格式来编写。" + "\n" + "2.每行字符数建议不超过弹幕字符上限(超过部分会裁掉)。" + '\n' + "3.间隔时间建议不小于网站规定。" + "\n\n例如:\n" + "谁不在改变呀!\n6000\n我也在改变呀!\n7000\n改变就应该改变!\n8000\n而不是不改变!\n9000";
- } else if (change_num === '3') {
- temp.setAttribute("disabled", "");
- text.placeholder = "随机时间间隔逐行发送弹幕" + '\n' + "1.使用回车换行。" + '\n' + "2.每行字符数建议不超过弹幕字符上限(超过部分会裁掉)。" + '\n' + "3.间隔时间建议不小于网站规定。";
- }
- }
- })(mode_top_select_1, mode_text));
- mode_button_button.addEventListener("click", (function(mode_top_select_1_1, room_id_1, csrf_1, cookie_1, data_1) {
- return function(e) {
- let change_num = mode_top_select_1_1.value;
- // let str = document.getElementById("mode-text").value;
- let str = document.getElementsByTagName("iframe").length > 2 ? document.getElementsByTagName("iframe")[1].contentWindow.document.getElementById("mode-text").value : document.getElementById("mode-text").value;
- // let time = document.getElementById("input_time").value;
- let time = document.getElementsByTagName("iframe").length > 2 ? document.getElementsByTagName("iframe")[1].contentWindow.document.getElementById("input_time").value : document.getElementById("input_time").value;
- let text = document.getElementsByTagName("iframe").length > 2 ? document.getElementsByTagName("iframe")[1].contentWindow.document.querySelectorAll(".chat-input.border-box") : document.querySelectorAll(".chat-input.border-box");
- // let button = document.getElementById("mode_button_button");
- let button = document.getElementsByTagName("iframe").length > 2 ? document.getElementsByTagName("iframe")[1].contentWindow.document.getElementById("mode_button_button") : document.getElementById("mode_button_button");
- if (start === 0) {
- if (str.trim() === "") {
- alert("独轮车不写内容好比上厕所不带纸");
- } else if (change_num === '0') {
- if (time.trim() === '') {
- alert("为什么不写时间!");
- } else {
- start = 1;
- button.innerHTML = "我说婷婷";
- let str_split = str.split("\n");
- let str_num = str_split.length;
- periodic = setInterval(() => {
- let str_temp = str_split[strI].length > 20 ? str_split[strI].substr(0, 20) : str_split[strI];
- text[text.length - 1].value = str_temp;
- let form_data = formData(str_temp, room_id_1, csrf_1);
- run_unicycle_request_1("https://api.live.bilibili.com/msg/send", cookie_1, form_data);
- strI = ++strI % str_split.length;
- sleep(100);
- text[text.length - 1].value = '';
- }, time);
- }
- } else if (change_num === '1') {
- if (time.trim() === '') {
- alert("为什么不写时间!");
- } else {
- start = 1;
- button.innerHTML = "我说婷婷";
- let str_split = new Array();
- let temp_str = '';
- for (let i = 0, j = 1; i < str.length; i++) {
- if (j < strMax && ([i] !== '\n' || str[i] !== '\t' || str[i] !== ',' || str[i] !== '.' || str[i] !== '?' || str[i] !== '!' || str[i] !== ',' || str[i] !== '。' || str[i] !== '?' || str[i] !== '!')) {
- temp_str += str[i];
- j++;
- } else {
- temp_str += str[i];
- str_split.push(temp_str);
- temp_str = '';
- j = 1;
- }
- }
- periodic = setInterval(() => {
- text[text.length - 1].value = str_split[strI];
- let form_data = formData(str_split[strI], room_id_1, csrf_1);
- run_unicycle_request_1("https://api.live.bilibili.com/msg/send", cookie_1, form_data);
- strI = ++strI % str_split.length;
- sleep(100);
- text[text.length - 1].value = '';
- }, time);
- }
- } else if (change_num === '2') {
- alert("编程模式");
- } else if (change_num === '3') {
- alert("随机模式");
- }
- } else {
- start = 0;
- button.innerHTML = "独轮车,启动!";
- clearInterval(periodic);
- }
- }
- })(mode_top_select_1, room_id, csrf, cookie, data));
- }
- })();
- async function run_unicycle_request_1(url, cookie, data) {
- GM_xmlhttpRequest({
- method: 'POST',
- url: url,
- anonymous: true,
- cookie: cookie,
- data: data,
- onload: function(response) {
- },
- onerror: function (){
- alert(`操作失败`);
- }
- });
- }
- async function run_unicycle_request_GET(url) {
- return new Promise((resolve, reject) => {
- GM_xmlhttpRequest({
- method: 'GET',
- url: url,
- headers: {
- "Content-Type": "application/json; charset=utf-8",
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36",
- },
- onload: function(response) {
- let array = new Array();
- array[0] = JSON.parse(response.responseText);
- array[1] = response.responseHeaders;
- resolve(array);
- },
- onerror: function (){
- alert(`操作失败!`);
- }
- });
- })
- }
- function sleep(time){
- return new Promise((resolve) => setTimeout(resolve, time));
- }
- function formData(msg, room_id, csrf) {
- let form = new FormData();
- form.append("bubble","0");
- form.append("msg",msg);
- form.append("color","16777215");
- form.append("mode","1");
- form.append("fontsize","25");
- form.append("rnd",Date.now());
- form.append("roomid",room_id);
- form.append("csrf",csrf);
- form.append("csrf_token",csrf);
- return form;
- }
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址