// ==UserScript==
// @name 花心拯救者
// @namespace Cutemon
// @version 1.52
// @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
// ==/UserScript==
(function() {
'use strict';
let roomID = window.location.pathname.slice(1),
uid = '';
var xx, yy;
// 获取用户cookie
let getCookie = Name => {
var search = Name + '='; //查询检索的值
var returnvalue = ''; //返回值
if (document.cookie.length > 0) {
var sd = document.cookie.indexOf(search);
if (sd != -1) {
sd += search.length;
var end = document.cookie.indexOf(';', sd);
if (end == -1) end = document.cookie.length;
//unescape() 函数可对通过 escape() 编码的字符串进行解码。
returnvalue = unescape(document.cookie.substring(sd, end));
}
}
return returnvalue;
};
let token = getCookie('bili_jct');
$.ajaxSetup({
crossDomain: true,
xhrFields: {
withCredentials: true
},
data: {
csrf: token,
csrf_token: token
}
});
function getUid() {
console.log('ok');
$.ajax({
type: 'get',
url: '//api.live.bilibili.com/room/v1/Room/room_init',
data: {
id: roomID
},
success: function(response) {
uid = response.data.uid;
// console.log(roomLongId);
myMedal();
}
});
}
function myMedal() {
let left = xx - 200 + 'px',
top = yy - 20 + 'px';
$.ajax({
type: 'get',
// url: '//api.live.bilibili.com/i/ajaxGetMyMedalList',
url: '//api.live.bilibili.com/i/api/medal',
data: {
pageSize: 1000
},
success: function(response) {
// console.log(response.data[0]);
for (let i = 0; i < response.data.fansMedalList.length; i++) {
if (uid == response.data.fansMedalList[i].target_id) {
let medal_id = response.data.fansMedalList[i].medal_id;
console.log(medal_id);
$.ajax({
type: 'get',
url: '//api.live.bilibili.com/i/ajaxWearFansMedal',
data: {
medal_id: medal_id
},
success: function(response) {
toast(response.msg, 'success', left, top);
console.log(left, top, response.msg);
}
});
return;
}
}
toast('你没有这个房间的勋章', 'error', left, top);
$('.chat-input').unbind();
}
});
}
function toast(text, level, left, top) {
text = text || '这是一个提示';
level = level || 'success'; // success,caution,info,error
left = left || '50%';
top = top || '5%';
if (level != 'success') {
console.log(text);
}
var 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() {
console.log(`花心拯救者已启动!`);
var init = setInterval(() => {
console.log(`弹幕输入框dom检测中……`);
if ($('.chat-input').length) {
$('.chat-input').focus(getUid);
toast('勋章自动切换功能已启动', 'success');
clearInterval(init);
}
try {
var 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>`);
var domChat = ifr[0].contentWindow.document.getElementsByClassName(
'chat-input'
)[0];
$(domChat).focus(getUid);
toast('勋章自动切换功能已启动', 'success');
clearInterval(init);
}
} catch (err) {
console.log(
`chatinput: ${$('.chat-input')
.length}\niframe: ${ifr.length}`
);
}
}, 5e3);
$('body').mousemove(function(e) {
xx = e.originalEvent.x || e.originalEvent.layerX || 0;
yy = e.originalEvent.y || e.originalEvent.layerY || 0;
//var d = document.getElementById("div");获取某div在当前窗口的位置
//var dx = xx - p.getBoundingClientRect().left;
//var dy = yy - p.getBoundingClientRect().top;
//$(this).text(dx + '---' + dy);鼠标在该div内位置
});
};
})();