可删除未发言用户

master
yin5th 2021-11-25 18:11:01 +08:00
parent 5a6e5c6820
commit cec4fb1469
2 changed files with 55 additions and 26 deletions

View File

@ -153,7 +153,7 @@ function exitEv(id){
$(`${id}`).remove(); $(`${id}`).remove();
} }
// 进入广场 // 进入广场
function peopleObj(name,uid,say,action){ function peopleObj(name,uid,say,action,active_time){
let yspHtml = ''; let yspHtml = '';
let yspData = [ let yspData = [
{ {
@ -166,11 +166,12 @@ function peopleObj(name,uid,say,action){
peopleImg:`people-img0${Math.floor(Math.random()*6+1)}`,//人物图片 peopleImg:`people-img0${Math.floor(Math.random()*6+1)}`,//人物图片
ying_guang:`stick-0${Math.floor(Math.random()*5+1)}`,//荧光棒 ying_guang:`stick-0${Math.floor(Math.random()*5+1)}`,//荧光棒
dancin:action, dancin:action,
active_time: active_time
} }
] ]
$.each(yspData, function (commentIndex, comment) { $.each(yspData, function (commentIndex, comment) {
yspHtml += ` yspHtml += `
<div id="${comment.uid}" class="dance-people data${peopleId}" style="top: ${comment.top}; left: ${comment.left};"> <div id="${comment.uid}" data-time="${comment.active_time}" class="dance-people data${peopleId}" style="top: ${comment.top}; left: ${comment.left};">
<div class="speak ">${comment.say}</div> <div class="speak ">${comment.say}</div>
<div class="people-img ${comment.peopleImg} ${comment.dancin}"> <div class="people-img ${comment.peopleImg} ${comment.dancin}">
<div class="stick ${comment.ying_guang}"></div> <div class="stick ${comment.ying_guang}"></div>
@ -227,6 +228,12 @@ $(function(){
changeMusic() changeMusic()
}, false); }, false);
} }
// 60s检测一次 十分钟没发言的删除
setInterval(function () {
delExpireDiv()
}, 60000)
//烟花 //烟花
// setInterval(()=>{ // setInterval(()=>{
// setTimeout(function() { // setTimeout(function() {

View File

@ -1,4 +1,13 @@
// 对象uid=>最近弹幕时间
let uidObj = {} let uidObj = {}
// 歌曲库地址
let musicUrl = 'https://bili.scdxtc.cn'
// 自动删除不说话用户
let autoDel = true
// 多少秒不说话删除
let speakExpireTime = 10*60
// 歌曲列表 // 歌曲列表
var musicList = [] var musicList = []
@ -79,22 +88,22 @@ function getLeader() {
} }
function music() { function music() {
$.get('https://bili.scdxtc.cn', function (res) { $.get(musicUrl, function (res) {
musicList = res musicList = res
if (musicList.length > 0) { if (musicList.length > 0) {
$('#music source').attr('src', 'https://bili.scdxtc.cn/music/'+musicList[0]) $('#music source').attr('src', musicUrl+'/music/'+musicList[0])
} }
}) })
} }
// 切歌 // 切歌
function changeMusic() { function changeMusic() {
$.get('https://bili.scdxtc.cn', function (res) { $.get(musicUrl, function (res) {
musicList = res musicList = res
if (musicList.length > 0) { if (musicList.length > 0) {
let index = Math.floor(Math.random()*(musicList.length-1)) let index = Math.floor(Math.random()*(musicList.length-1))
$('#music').data('song', musicList[index]) $('#music').data('song', musicList[index])
$('#music source').attr('src', 'https://bili.scdxtc.cn/music/'+musicList[index]) $('#music source').attr('src', musicUrl+'/music/'+musicList[index])
$('#music')[0].load() $('#music')[0].load()
} }
}) })
@ -107,10 +116,24 @@ function peopleHan(val){
function dancer(val){ function dancer(val){
return allEventList.includes(val); return allEventList.includes(val);
} }
// 删除久未说话的人
function delExpireDiv() {
if (!autoDel) {
return false
}
let timestamp = parseInt(new Date().getTime()/1000)
let delList = $(".dance-people").filter(function() {
return $(this).attr("data-time") < timestamp - speakExpireTime;
})
console.log(delList.length, speakExpireTime+'秒未说话人数')
delList.remove();
}
// 接受消息处理 // 接受消息处理
function receiveMessage(event) function receiveMessage(event)
{ {
// console.log(event.data, '接受弹幕') // console.log(event.data, '接受弹幕')
// 我们能信任信息来源吗? // 我们能信任信息来源吗?
if (event.origin !== "https://live.bilibili.com") { if (event.origin !== "https://live.bilibili.com") {
@ -119,7 +142,9 @@ function receiveMessage(event)
let dataList = JSON.parse(event.data) let dataList = JSON.parse(event.data)
let data = dataList.dm let data = dataList.dm
let adminList = dataList.admin // 目前硬编码大航海列表
// let adminList = dataList.admin
adminList = ['内有猛犬小心','热心市民阿狄呐','流域_墨绿绿'];
if (data.length <= 0) { if (data.length <= 0) {
return false return false
@ -129,7 +154,6 @@ function receiveMessage(event)
if (data.ct === '') { if (data.ct === '') {
return false return false
} }
adminList = ['内有猛犬小心','热心市民阿狄呐','流域_墨绿绿'];
// 大航海列表 // 大航海列表
if (adminList.length > 0) { if (adminList.length > 0) {
@ -164,10 +188,15 @@ function receiveMessage(event)
// uid是否存在 不存在则存入uidObj // uid是否存在 不存在则存入uidObj
let isNew = 0 let isNew = 0
// console.log(uidObj[data.uid],'uidObj[data.uid]'); // console.log(uidObj[data.uid],'uidObj[data.uid]');
if (!uidObj[data.uid]) { let speakTime = uidObj[data.uid];
if (!speakTime) {
isNew = 1 isNew = 1
uidObj[data.uid] = data.uname } else if (autoDel && speakTime < parseInt(new Date().getTime()/1000) - speakExpireTime){
//存在 但是最近弹幕时间已在过期时间外。
isNew = 1;
} }
// 记录uid最近弹幕时间
uidObj[data.uid] = data.ts
// console.log(isNew, data.uname + ' 是否存在') // console.log(isNew, data.uname + ' 是否存在')
@ -180,7 +209,7 @@ function receiveMessage(event)
let isLeader = data.uname == leaderInfo ? 1 : 0 let isLeader = data.uname == leaderInfo ? 1 : 0
let dm = {text: data.danmaku, uid: data.uid, uname: data.uname, let dm = {text: data.danmaku, uid: data.uid, uname: data.uname,
event: eventName, event: eventName,
is_new: isNew, is_admin: 0, is_leader: isLeader} is_new: isNew, is_admin: 0, is_leader: isLeader,active_time: data.ts}
let leader = { let leader = {
uid: 0, uname: leaderInfo, text: '', event: '' uid: 0, uname: leaderInfo, text: '', event: ''
} }
@ -196,11 +225,13 @@ function receiveMessage(event)
// 新用户 // 新用户
if(dm.is_new==1){ if(dm.is_new==1){
// if(dm.uname!=leader.uname){//如果弹幕的人的名字不等于领舞者的名字,就创建一个人物 // if(dm.uname!=leader.uname){//如果弹幕的人的名字不等于领舞者的名字,就创建一个人物
peopleObj(dm.uname,dm.uid,dm.text,dm.event); peopleObj(dm.uname,dm.uid,dm.text,dm.event,dm.active_time);
// } // }
} else { } else {
// 老用户 // 老用户
$(`#${dm.uid} .speak`).html(dm.text); $(`#${dm.uid} .speak`).html(dm.text);
//更新最近时间
$(`#${dm.uid}`).attr('data-time', dm.active_time);
$(`#${dm.uid} .speak`).removeClass("dn"); $(`#${dm.uid} .speak`).removeClass("dn");
setTimeout(()=>{ setTimeout(()=>{
$(`#${dm.uid} .speak`).addClass("dn"); $(`#${dm.uid} .speak`).addClass("dn");
@ -211,6 +242,10 @@ function receiveMessage(event)
} }
} }
num++; num++;
// console.log(Object.keys(uidObj).length, 'uid 长度')
// console.log(uidObj, 'uid')
// console.log(num, '人物渲染个数')
// 显示领舞的昵称 // 显示领舞的昵称
$('.lingname').text(leader.uname); $('.lingname').text(leader.uname);
if (!isLeader) { if (!isLeader) {
@ -264,19 +299,6 @@ function receiveMessage(event)
} }
} }
// -------------------- 每条弹幕处理 end ----------------------- // -------------------- 每条弹幕处理 end -----------------------
// event.source 就当前弹出页的来源页面
// event.data 是 "hello there!"
// 假设你已经验证了所受到信息的origin (任何时候你都应该这样做), 一个很方便的方式就是把event.source
// 作为回信的对象并且把event.origin作为targetOrigin
// event.source.postMessage("hi there yourself! the secret response " +
// "is: rheeeeet!",
// event.origin);
// 数据是否为空
// 弹幕类型判断 事件弹幕、内容弹幕
} }
music(); music();