// ==UserScript==
// @icon https://www.kuaishou.com/favicon.ico
// @name 快手弹幕语音助手
// @namespace [url=mailto:[email protected]][email protected][/url]
// @author 文超
// @description 获取快手弹幕转语音 朗读弹幕
// @match https://live.kuaishou.com/u/*
// @version 2.1.1
// @grant GM_addStyle
// ==/UserScript==
(function() {
'use strict';
setInterval(DelayGet, 50); //定时器 1s 10次=1000ms/100
//document.documentElement.webkitRequestFullscreen(); //chrome 全屏
var LastLiNum = 0;
//删除无用元素 延时点击流程
setTimeout(del_elm, 3000);
//弹幕转语音
function DelayGet() {
//console.log("======================================");
var chatUI = document.getElementsByClassName("chat-info");
for (var i = LastLiNum; i < chatUI.length; i++) {
LastLiNum = chatUI.length;
var elmName = chatUI[i].getElementsByClassName("username");
var chatHtml = chatUI[i].innerHTML;
var giftNum = chatUI[i].getElementsByClassName("comment")[1];
var nameTxt = elmName[0].innerText;
var tmp_Data = chatUI[i].innerText;
var tmp_Text = tmp_Data.replace(nameTxt, "");
nameTxt = nameMake(nameTxt); //用户名处理
var readTxt = '';
if (tmp_Text.search("点亮了") != -1) { //*********点亮红心
readTxt = '感谢 ' + nameTxt + '点亮小红心';
} else if (tmp_Text.search("送") != -1) { //*********送礼物
if(chatHtml.search(fans[0]) != -1){ //加入粉丝团
readTxt = '感谢 ' + nameTxt + fans[1];
} else { //礼物
var giftNumTxt = "";
if(giftNum){
giftNumTxt = ChinaCost(giftNum.innerText.replace("×",""));
}
var knowGift = false;
for(var j = 0; j < giftLink.length; j++){
if(chatHtml.search(giftLink[j]) != -1){ //已知礼物
readTxt = '感谢 ' + nameTxt + '送的' + giftNumTxt + giftName[j];
knowGift = true;
break;
}
}
if(!knowGift){ //未知礼物
readTxt = '感谢 ' + nameTxt + giftNumTxt + '送的礼物';
}
}
} else if (tmp_Text === '一') {
readTxt = nameTxt + '扣一';
} else {
tmp_Text = txt_make(tmp_Text); //弹幕内容处理
readTxt = nameTxt + '说:' + tmp_Text;
}
if (nameTxt.search("快手官方") != -1) {
readTxt = "";
}
console.log(readTxt); //输出控制台
console.log("============================");
TTSread(readTxt); //文字转TTS语音
}
}; //弹幕转语音
//功能函数
function del_elm() { //删除无用元素
//移除元素
document.querySelector("#app > div.live-detail > div.sidebar").remove(); //左边栏
document.querySelector("#app > div.live-detail > div.live-detail-container > div.more-recommend-live").remove();//直播推荐
document.querySelector("#app > div.live-detail > div.live-detail-container > div.work-list").remove(); //主播作品
//document.querySelector("#app > div.live-detail > div.header-placeholder").remove(); //顶边栏
document.querySelector("#app > div.live-detail > div.header-placeholder > header > div > div.left-part > ul").remove();//顶栏>导航
document.querySelector("#app > div.live-detail > div.header-placeholder > header > div > div.right-part > div.search-input.search.pl-input-container.readonly.placeholder-center").remove(); //顶栏>搜索框
document.querySelector("#app > div.live-detail > div.header-placeholder > header > div > div.right-part > span.follow-item").remove(); //顶栏>关注
document.querySelector("#app > div.live-detail > div.header-placeholder > header > div > div.right-part > span.history-item").remove(); //顶栏>观看历史
document.querySelector("#app > div.live-detail > div.live-detail-container").remove(); //视频框
//修改样式-聊天室宽度
document.querySelector("#app > div.live-detail > div.liveroom-sidebar.light").style.width="100%";
document.querySelector("#app > div.live-detail > div.liveroom-sidebar.light > div.chat > div.chat-actions > div.chat-input > div > textarea").style.width="80%";
document.querySelector("#app > div.live-detail > div.liveroom-sidebar.light > div.chat > div.chat-actions > div.chat-input > div > button").style.width="20%";
document.querySelector("#app > div.live-detail > div.liveroom-sidebar.light > div.chat > div.chat-actions").style.height="20%";
document.querySelector("#app > div.live-detail > div.liveroom-sidebar.light > div.chat > div.chat-actions > div.chat-input").style.height="60%";
document.querySelector("#app > div.live-detail > div.liveroom-sidebar.light > div.chat > div.chat-actions > div.chat-input > div").style.height="100%"
//模拟点击流程
//document.getElementsByClassName("theater-icon")[0].click();//快手剧场模式
}; //删除无用元素
function txt_make(txt) { //弹幕内容处理
txt = txt.replace(/1/g, '一');
txt = txt.replace(/2/g, '二');
txt = txt.replace(/3/g, '三');
txt = txt.replace(/4/g, '四');
txt = txt.replace(/5/g, '五');
txt = txt.replace(/6/g, '六');
txt = txt.replace(/7/g, '七');
txt = txt.replace(/8/g, '八');
txt = txt.replace(/9/g, '九');
txt = txt.replace(/(😂|🤣)+/g, '哭笑哭笑');
txt = txt.replace(/(😀|😃|😄|😁|😆|😊|😇|🙂|😉)+/g, '哈哈');
txt = txt.replace(/(😘|😗|😙)+/g, '么么哒');
return txt;
}; //弹幕内容处理
function nameMake(txt) { //用户名处理 去掉名字中特殊符号
txt = txt.replace(/[0-9]/g, '');
txt = txt.replace(/[😀😃😄😁😆😅😂🤣☺️😊😇🙂🙃😉😌😍🥰😘😗😙😚😋😛]/g, '');
txt = txt.replace(/[△▽○◇□☆▷◁♤♡♢♧▲▼●◆■★▶◀♠♥♦♣☼☽♀☺◐☑√✔☜☝☞㏂☀☾♂☹◑☒×✘☚☟☛㏘▪•‥…▁▂▃▄▅▆▇█∷※░▒▓▏▎▍▌▋▊▉]/g, '');
txt = txt.replace(/[♩♪♫♬§〼◎¤۞℗®©♭♯♮‖¶卍卐▬〓℡™㏇☌☍☋☊㉿◮◪◔◕@㈱№♈♉♊♋♌♎♏♐♑♓♒♍]/g, '');
txt = txt.replace(/[↖↑↗▨▤▧◤㊤◥☴☲☷←㊣→▩▦▥㊧㊥㊨☳☯☱↙↓↘▫◈▣◣㊦◢☶☵☰↕↔⊱⋛⋌⋚⊰¬¬▔†‡]/g, '');
txt = txt.replace(/[**✲❈❉✿❀❃❁☸✖✚✪❤ღ❦❧ி₪✎✍✌✁✄☁☂☃☄♨☇☈☡➷⊹✉☏]/g, '');
txt = txt.replace(/[@$&☢✈♟♙〠☣☠۩♜♖✙☭☄♨❂✟♞♘☤☪☮☥♝♗☦〄➹☧♛♕☨☩ஐ☫♚♔☬☎]/g, '');
txt = txt.replace(/丨/g, '');
txt = txt.replace(/:/g, '');
txt = txt.replace(/ /g, '');
txt = txt.replace(/,/g, '');
return txt;
}; //用户名处理
function TTSread(txt) { //文字转TTS语音
var tts = new SpeechSynthesisUtterance(txt);
tts.rate = 1.2;
window.speechSynthesis.speak(tts);
}; //文字转TTS语音
function ChinaCost(numberValue) { //数字转中文
var numberValue = new String(Math.round(numberValue * 100)); // 数字金额
var chineseValue = ""; // 转换后的汉字金额
var String1 = "零壹贰叁肆伍六柒捌玖"; // 汉字数字
var String2 = "万仟佰拾亿仟佰拾万仟佰拾个 "; // 对应单位
var len = numberValue.length; // numberValue 的字符串长度
var Ch1; // 数字的汉语读法
var Ch2; // 数字位的汉字读法
var nZero = 0; // 用来计算连续的零值的个数
var String3; // 指定位置的数值
if (len > 15) {
//alert("超出计算范围");
return "";
}
/*
if (numberValue == 0) {
chineseValue = "零元整";
return chineseValue;
}
*/
String2 = String2.substr(String2.length - len, len); // 取出对应位数的STRING2的值
for (var i = 0; i < len; i++) {
String3 = parseInt(numberValue.substr(i, 1), 10); // 取出需转换的某一位的值
if (i != (len - 3) && i != (len - 7) && i != (len - 11) && i != (len - 15)) {
if (String3 == 0) {
Ch1 = "";
Ch2 = "";
nZero = nZero + 1;
} else if (String3 != 0 && nZero != 0) {
Ch1 = "零" + String1.substr(String3, 1);
Ch2 = String2.substr(i, 1);
nZero = 0;
} else {
Ch1 = String1.substr(String3, 1);
Ch2 = String2.substr(i, 1);
nZero = 0;
}
} else { // 该位是万亿,亿,万,元位等关键位
if (String3 != 0 && nZero != 0) {
Ch1 = "零" + String1.substr(String3, 1);
Ch2 = String2.substr(i, 1);
nZero = 0;
} else if (String3 != 0 && nZero == 0) {
Ch1 = String1.substr(String3, 1);
Ch2 = String2.substr(i, 1);
nZero = 0;
} else if (String3 == 0 && nZero >= 3) {
Ch1 = "";
Ch2 = "";
nZero = nZero + 1;
} else {
Ch1 = "";
Ch2 = String2.substr(i, 1);
nZero = nZero + 1;
}
if (i == (len - 11) || i == (len - 3)) { // 如果该位是亿位或元位,则必须写上
Ch2 = String2.substr(i, 1);
}
}
chineseValue = chineseValue + Ch1 + Ch2;
}
/*
if (String3 == 0) { // 最后一位(分)为0时,加上“整”
chineseValue = chineseValue + "整";
}
*/
if (chineseValue.substr(0, 2) == "壹拾") { // 如果 以"壹拾"开头 去掉"壹"
chineseValue = chineseValue.substr(1);
}
return chineseValue;
}
//变量
var giftLink = new Array("2019/12/31/14/BMjAxOTEyMzExNDExMDNfMF9nNjNfbHY","2019/12/31/14/BMjAxOTEyMzExNDA5MjVfMF9nMTU4X2x2","2019/01/11/15/BMjAxOTAxMTExNTAxMzRfMF9nMTQ3X2x2","2018/12/27/17/BMjAxODEyMjcxNzU5MDNfMF9nMTUwX2x2","2018/12/27/17/BMjAxODEyMjcxNzU5MDRfMF9nMTQ5X2x2","2019/01/11/14/BMjAxOTAxMTExNDI4MzhfMF9nMTQ1X2x2","2019/01/09/15/BMjAxOTAxMDkxNTA5MTdfMF9nN19sdg==","2019/01/03/15/BMjAxOTAxMDMxNTU4NTdfMF9nOV9sdg==","2019/10/31/15/BMjAxOTEwMzExNTA0MTNfMF9nMjM1X2x2","2019/10/24/11/BMjAxOTEwMjQxMTI0MDFfMF9nMjI2X2x2","2019/08/22/15/BMjAxOTA4MjIxNTM4NDdfMF9nMl9sdg==","2019/10/16/10/BMjAxOTEwMTYxMDE2NTJfMF9nMjE3X2x2","2019/01/11/15/BMjAxOTAxMTExNTAyMzdfMF9nMTE0X2x2","2019/01/23/15/BMjAxOTAxMjMxNTE5NDRfMF9nMTY4X2x2","2019/01/16/17/BMjAxOTAxMTYxNzIxMjlfMF9nMTZfbHY=","2018/01/05/15/BMjAxODAxMDUxNTE1MzdfMF9nMzNfbHY=","2018/07/27/14/BMjAxODA3MjcxNDE3NTRfMF9nMTQ2X2x2","2017/09/29/09/BMjAxNzA5MjkwOTUwNDNfMF9nMjVfbHY=","2018/04/18/14/BMjAxODA0MTgxNDU0MDJfMF9nMTEzX2x2","2019/09/05/14/BMjAxOTA5MDUxNDUxNDhfMF9nNDFfbHY=","2018/03/22/14/BMjAxODAzMjIxNDA2NTlfMF9nOTRfbHY=","2019/04/11/11/BMjAxOTA0MTExMTU4NDVfMF9nMTY0X2x2","2019/11/19/10/BMjAxOTExMTkxMDE0NThfMF9nMjQ5X2x2","2019/11/12/10/BMjAxOTExMTIxMDAxMDBfMF9nMjQxX2x2","2019/11/01/14/BMjAxOTExMDExNDQwMjVfMF9nMTBfbHY=","2019/11/19/10/BMjAxOTExMTkxMDE2MjVfMF9nMjQ4X2x2","2019/11/19/10/BMjAxOTExMTkxMDE1NDdfMF9nMjQ3X2x2","2019/01/23/15/BMjAxOTAxMjMxNTExMjZfMF9nMTY1X2x2","2019/11/19/10/BMjAxOTExMTkxMDE2MDVfMF9nMjQ2X2x2");
var giftName = new Array("发财","鼠钱啦","赞","carry全场","血瓶","西瓜","么么哒","啤酒","爆单","金话筒","棒棒糖","辛苦了","玫瑰花","爱的信号","皇冠","烟花","怦然心动","凤冠","火箭","跑车","穿云箭","猫粮","巧克力","四叶草","甜甜圈","铃铛","福袋","爱心","金莲");
var fans = new Array("2019/11/06/10/BMjAxOTExMDYxMDQ4MzFfMF9nMjM2X2x2","加入粉丝团!直播间因为有你而精彩");
})();
/*
//刷新网页
if (LastLiNum > 200) {
window.location.reload(true);
}
*/