修改hanjutv点赞显示,先去重再拼接点赞标记,点赞数缩写显示(1200 -> 1.2k),例如 ❤️ 2.9k。增加“超高赞高亮样式”规则(hanjutv 中 >=100 用 🔥,普通点赞仍用 ❤️),≥5 才显示,避免低赞干扰 (#199)
This commit is contained in:
1 parent
0153ebc929
commit
13fc3a11ab
3 files changed
+59
-7
No files matched your search
@@ -13,7 +13,7 @@ export const Globals = {
|
||||
accessedEnvVars: {},
|
||||
|
||||
// 静态常量
|
||||
VERSION: '1.15.0',
|
||||
VERSION: '1.15.1',
|
||||
MAX_LOGS: 1000, // 日志存储,最多保存 1000 行
|
||||
MAX_ANIMES: 100,
|
||||
MAX_RECORDS: 100, // 请求记录最大数量
|
||||
|
||||
@@ -253,8 +253,9 @@ export default class HanjutvSource extends BaseSource {
|
||||
return comments.map(c => ({
|
||||
cid: Number(c.did),
|
||||
p: `${(c.t / 1000).toFixed(2)},${c.tp === 2 ? 5 : c.tp},${Number(c.sc)},[hanjutv]`,
|
||||
m: c.lc ? `${c.con} 👍${c.lc}` : c.con,
|
||||
t: Math.round(c.t / 1000)
|
||||
m: c.con,
|
||||
t: Math.round(c.t / 1000),
|
||||
like: c.lc
|
||||
}));
|
||||
}
|
||||
}
|
||||
@@ -70,12 +70,15 @@ export function groupDanmusByMinute(filteredDanmus, n) {
|
||||
count: 0,
|
||||
earliestT: danmu.t,
|
||||
cid: danmu.cid,
|
||||
p: danmu.p
|
||||
p: danmu.p,
|
||||
like: 0 // 初始化like字段
|
||||
};
|
||||
}
|
||||
acc[message].count += 1;
|
||||
// 更新最早时间
|
||||
acc[message].earliestT = Math.min(acc[message].earliestT, danmu.t);
|
||||
// 合并like字段,如果是undefined则视为0
|
||||
acc[message].like += (danmu.like !== undefined ? danmu.like : 0);
|
||||
return acc;
|
||||
}, {});
|
||||
|
||||
@@ -93,7 +96,8 @@ export function groupDanmusByMinute(filteredDanmus, n) {
|
||||
p: data.p,
|
||||
// 仅当计算后的逻辑计数大于1时才显示 "x N"
|
||||
m: displayCount > 1 ? `${message} x ${displayCount}` : message,
|
||||
t: data.earliestT
|
||||
t: data.earliestT,
|
||||
like: data.like // 包含合并后的like字段
|
||||
};
|
||||
});
|
||||
});
|
||||
@@ -102,6 +106,50 @@ export function groupDanmusByMinute(filteredDanmus, n) {
|
||||
return result.flat().sort((a, b) => a.t - b.t);
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理弹幕的点赞数显示
|
||||
* @param {Array} groupedDanmus 弹幕列表
|
||||
* @returns {Array} 处理后的弹幕列表
|
||||
*/
|
||||
export function handleDanmusLike(groupedDanmus) {
|
||||
return groupedDanmus.map(item => {
|
||||
// 如果item没有like字段或者like值小于5,则不处理
|
||||
if (!item.like || item.like < 5) {
|
||||
return item;
|
||||
}
|
||||
|
||||
// 获取弹幕来源信息,判断是否为hanjutv
|
||||
const isHanjutv = item.p.includes('[hanjutv]');
|
||||
|
||||
// 确定阈值:hanjutv中>=100用🔥,其他>=1000用🔥
|
||||
const threshold = isHanjutv ? 100 : 1000;
|
||||
const icon = item.like >= threshold ? '🔥' : '❤️';
|
||||
|
||||
// 格式化点赞数,缩写显示
|
||||
let formattedLike;
|
||||
if (item.like >= 10000) {
|
||||
// 万级别,如 1.2w
|
||||
formattedLike = (item.like / 10000).toFixed(1) + 'w';
|
||||
} else if (item.like >= 1000) {
|
||||
// 千级别,如 1.2k
|
||||
formattedLike = (item.like / 1000).toFixed(1) + 'k';
|
||||
} else {
|
||||
// 百级别及以下,直接显示数字
|
||||
formattedLike = item.like.toString();
|
||||
}
|
||||
|
||||
// 在弹幕内容m字段后面添加点赞信息
|
||||
const likeText = ` ${icon} ${formattedLike}`;
|
||||
const newM = item.m + likeText;
|
||||
|
||||
// 创建新对象,复制原属性,更新m字段,并删除like字段
|
||||
const { like, ...rest } = item;
|
||||
return {
|
||||
...rest,
|
||||
m: newM
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
export function limitDanmusByCount(filteredDanmus, danmuLimit) {
|
||||
// 如果 danmuLimit 为 0,直接返回原始数据
|
||||
@@ -215,7 +263,7 @@ export function convertToDanmakuJson(contents, platform) {
|
||||
`[${platform}]`
|
||||
].join(",");
|
||||
|
||||
danmus.push({ p: attributes, m, cid: cidCounter++ });
|
||||
danmus.push({ p: attributes, m, cid: cidCounter++, like: item?.like });
|
||||
}
|
||||
|
||||
// 切割字符串成正则表达式数组
|
||||
@@ -247,8 +295,11 @@ export function convertToDanmakuJson(contents, platform) {
|
||||
log("info", `去重分钟数: ${globals.groupMinute}`);
|
||||
const groupedDanmus = groupDanmusByMinute(filteredDanmus, globals.groupMinute);
|
||||
|
||||
// 处理点赞数
|
||||
const likeDanmus = handleDanmusLike(groupedDanmus);
|
||||
|
||||
// 应用弹幕转换规则(在去重和限制弹幕数之后)
|
||||
let convertedDanmus = limitDanmusByCount(groupedDanmus, globals.danmuLimit);
|
||||
let convertedDanmus = limitDanmusByCount(likeDanmus, globals.danmuLimit);
|
||||
if (globals.convertTopBottomToScroll || globals.convertColor === 'white' || globals.convertColor === 'color') {
|
||||
let topBottomCount = 0;
|
||||
let colorCount = 0;
|
||||
|
||||
Reference in new issue
Block a user