白嫖没有错,花心也没有猜错,错的是这个破站直播!
// ==UserScript==// @name 花心拯救者// @namespace Cutemon// @version 1.60// @description 白嫖没有错,花心也没有猜错,错的是这个破站直播!// @author Cutemon// @include /https?:\/\/live\.bilibili\.com\/\d+\??.*/// @require https://static.hdslb.com/live-static/libs/jquery/jquery-1.11.3.min.js// @grant none// @license MIT// ==/UserScript==(function() {'use strict';let room_id = window.location.pathname.slice(1),medal_id = '';let xx, yy;let left, top;// 获取用户cookielet getCookie = Name => {let search = Name + '='; //查询检索的值let returnvalue = ''; //返回值if (document.cookie.length > 0) {let sd = document.cookie.indexOf(search);if (sd != -1) {sd += search.length;let end = document.cookie.indexOf(';', sd);if (end == -1) end = document.cookie.length;//unescape() 函数可对通过 escape() 编码的字符串进行解码。returnvalue = unescape(document.cookie.substring(sd, end));}}return returnvalue;};function bindInput() {let bindTimer = setInterval(() => {console.log(`弹幕输入框事件绑定中……`);if ($('.chat-input').length) {// 一般情况下获取dom$('.chat-input').focus(checkMedal);left = $('#control-panel-ctnr-box').offset().left + 8 + 'px';top = $('#control-panel-ctnr-box').offset().top - 50 + 'px';console.log(`勋章自动切换功能已启动`);toast('勋章自动切换功能已启动', 'success');clearInterval(bindTimer);} else {// iframe情况下获取domtry {let ifr = document.getElementById('player-ctnr').getElementsByTagName('iframe');if (ifr.length) {$('head').append(`<style type="text/css">/** Link Toast Style By LancerComet at 17:31, 2015.12.16.* # Carry Your World #* ---* 直播站 Toast 组件样式文件.*/.link-toast {position: absolute;padding: 12px 24px;font-size: 14px;border-radius: 8px;white-space: nowrap;color: #fff;-webkit-animation: link-msg-move-in-top cubic-bezier(0.22, 0.58, 0.12, 0.98) 0.4s;animation: link-msg-move-in-top cubic-bezier(0.22, 0.58, 0.12, 0.98) 0.4s;z-index: 10000;}.link-toast.fixed {position: fixed;}.link-toast.success {background-color: #47d279;-webkit-box-shadow: 0 0.2em 0.1em 0.1em rgba(71,210,121,0.2);box-shadow: 0 0.2em 0.1em 0.1em rgba(71,210,121,0.2);}.link-toast.caution {background-color: #ffb243;-webkit-box-shadow: 0 0.2em 0.1em 0.1em rgba(255,190,68,0.2);box-shadow: 0 0.2em 0.1em 0.1em rgba(255,190,68,0.2);}.link-toast.error {background-color: #ff6464;-webkit-box-shadow: 0 0.2em 1em 0.1em rgba(255,100,100,0.2);box-shadow: 0 0.2em 1em 0.1em rgba(255,100,100,0.2);}.link-toast.info {background-color: #48bbf8;-webkit-box-shadow: 0 0.2em 0.1em 0.1em rgba(72,187,248,0.2);box-shadow: 0 0.2em 0.1em 0.1em rgba(72,187,248,0.2);}.link-toast.out {-webkit-animation: link-msg-fade-out cubic-bezier(0.22, 0.58, 0.12, 0.98) 0.4s;animation: link-msg-fade-out cubic-bezier(0.22, 0.58, 0.12, 0.98) 0.4s;}@-webkit-keyframes link-msg-move-in-top {from {opacity: 0;-webkit-transform: translate(0, 5em);transform: translate(0, 5em);}to {opacity: 1;-webkit-transform: translate(0, 0);transform: translate(0, 0);}}@keyframes link-msg-move-in-top {from {opacity: 0;-webkit-transform: translate(0, 5em);transform: translate(0, 5em);}to {opacity: 1;-webkit-transform: translate(0, 0);transform: translate(0, 0);}}@-webkit-keyframes link-msg-fade-out {from {opacity: 1;}to {opacity: 0;}}@keyframes link-msg-fade-out {from {opacity: 1;}to {opacity: 0;}}</style>`);let domChat = ifr[0].contentWindow.document.getElementsByClassName('chat-input')[0];$(domChat).focus(checkMedal);let domPanel = ifr[0].contentWindow.document.getElementById('control-panel-ctnr-box');left = $(domPanel).offset().left + 8 + 'px';top = $(domPanel).offset().top - 50 + 'px';console.log(`勋章自动切换功能已启动`);toast('勋章自动切换功能已启动', 'success');clearInterval(bindTimer);}} catch (err) {let ifr = document.getElementById('player-ctnr').getElementsByTagName('iframe');console.log(`chatinput: ${$('.chat-input').length}\niframe: ${ifr.length}`);}}}, 1e3);$('body').mousemove(e => {xx = e.originalEvent.x || e.originalEvent.layerX || 0;yy = e.originalEvent.y || e.originalEvent.layerY || 0;//let d = document.getElementById("div");获取某div在当前窗口的位置//let dx = xx - p.getBoundingClientRect().left;//let dy = yy - p.getBoundingClientRect().top;//$(this).text(dx + '---' + dy);鼠标在该div内位置});}function getMedal() {$.ajax({type: 'GET',url:'//api.live.bilibili.com/xlive/web-room/v1/index/getInfoByRoom',data: {room_id},success: res => {if (res.code == 0) {console.log('勋章id获取成功');medal_id = res.data.anchor_info.medal_info.medal_id;bindInput();}}});}function checkMedal() {// let left = '85%',// top = '70%';$.ajax({type: 'GET',// url: '//api.live.bilibili.com/i/ajaxWearFansMedal',url:'//api.live.bilibili.com/live_user/v1/UserInfo/get_weared_medal',success: res => {if (medal_id == res.data.medal_id) {toast('已经佩戴本房间勋章,无需重复佩戴', 'caution');} else {wearMedal(medal_id);}}});}function wearMedal(medal_id) {// let left = xx - 100 + 'px',// top = yy - 100 + 'px';// let left = '85%',// top = '70%';$.ajax({type: 'POST',// url: '//api.live.bilibili.com/i/ajaxWearFansMedal',url: '//api.live.bilibili.com/xlive/web-room/v1/fansMedal/wear',data: {medal_id},success: res => {if (res.code == 0) {toast(res.message || res.msg, 'success');console.log(left, top, res.message || res.msg);} else {toast(res.message || res.msg, 'caution');// $('.chat-input').unbind();}}});}function toast(text, level) {text = text || '这是一个提示';level = level || 'success'; // success,caution,info,error// left = left || '75%';// top = top || '80%';if (level != 'success') {console.log(text);}let id = new Date().valueOf();$('body').append('<div class="link-toast ' +level +'"data-id="' +id +'" style="position: fixed; left: ' +left +'; top: ' +top +';"><span class="toast-text">' +text +'</span></div>');$("div.link-toast[data-id='" + id + "']").slideDown('normal', function() {setTimeout(function() {$("div.link-toast[data-id='" + id + "']").fadeOut('normal', function() {$("div.link-toast[data-id='" + id + "']").remove();});}, 1500);});}window.onload = function() {let token = getCookie('bili_jct');$.ajaxSetup({crossDomain: true,xhrFields: {withCredentials: true},data: {csrf: token,csrf_token: token}});console.log(`花心拯救者脚本已开始工作!`);getMedal();};})();