快手弹幕语音助手

获取快手弹幕转语音 朗读弹幕

目前为 2020-01-01 提交的版本。查看 最新版本

// ==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);
		}
*/

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址