feat: ai过滤过期抽奖

This commit is contained in:
shanmite 2026-06-01 11:24:03 +08:00
parent a14af8e710
commit fe0258a84a
4 changed files with 44 additions and 4 deletions

View File

@ -10,7 +10,7 @@ module.exports = Object.freeze({
* ## 高级功能
* - `ENABLE_CHAT_CAPTCHA_OCR` 开启评论验证码识别 使用方法见README
* - `CHAT_CAPTCHA_OCR_URL` 验证码识别接口 POST `url`->`code`
* - `ENABLE_AI_JUDGE` 是否启用AI判断抽奖
* - `ENABLE_AI_JUDGE` 是否启用AI判断抽奖过滤过期抽奖
* - `ENABLE_AI_COMMENTS` 是否启用AI评论
*
* ## 调试相关

View File

@ -127,6 +127,13 @@ class Monitor extends Searcher {
continue;
}
if (hasEnv('ENABLE_AI_JUDGE') && lottery.drawtime !== -1 && lottery.drawtime < Date.now() / 1000) {
log.info('AI过滤', '已过开奖时间');
d_storage.updateDyid(lottery.dyid);
await delay(filter_wait);
continue;
}
if (lottery.isOfficialLottery) {
let { ts } = await bili.getLotteryNotice(lottery.dyid);
const ts_10 = Date.now() / 1000;
@ -250,6 +257,7 @@ class Monitor extends Searcher {
* @property {number[]} uid 用户标识
* @property {string} dyid 动态标识
* @property {boolean} isOfficialLottery 是否官方抽奖
* @property {number} drawtime 开奖时间t10
* @property {string} relay_chat 转发词
* @property {string} ctrl 定位@
* @property {string} [rid] 评论标识
@ -406,6 +414,7 @@ class Monitor extends Searcher {
isSendChat =
(hasOfficialLottery && chatmodel[0] === '1')
|| (!hasOfficialLottery && chatmodel[1] === '1'),
drawtime = -1,
keys = [dyid, m_uid, ori_uid];
log.debug('筛选动态', { real_uid, mIsFollowed, oriIsFollowed, realIsFollowed, needAt, needTopic, type, isRelayDynamic, key_words, has_key_words, blockword, isBlock, isLottery, isSendChat });
@ -465,10 +474,12 @@ class Monitor extends Searcher {
let msg_json = JSON.parse(msg);
has_key_words = msg_json.has_key_words;
needAt = msg_json.needAt;
needTopic = msg_json.needTopic;
drawtime = msg_json.drawtime;
isLottery = has_key_words;
log.info('ai判断抽奖', msg_json.more);
} catch (_) {
log.error('ai判断抽奖', '未返回JSON格式');
log.error('ai判断抽奖', `未返回JSON格式${msg}`);
}
}
if (!has_key_words && description) {
@ -489,6 +500,8 @@ class Monitor extends Searcher {
onelotteryinfo.isOfficialLottery = hasOfficialLottery;
onelotteryinfo.drawtime = drawtime;
/**初始化待关注列表 */
onelotteryinfo.uid = [];

View File

@ -515,7 +515,7 @@ module.exports = Object.freeze({
'model': 'Qwen/Qwen3-32B',
'enable_thinking': true,
},
prompt: '你是一个B站用户需要判断动态内容是否是抽奖动态以及参与条件以json格式输出仅需包含key:has_key_words(bool 是否是抽奖动态),needAt(bool 是否需要@自己的好友),more(string 总结参与抽奖的条件).回答不要包含markdown标记文本,输出纯json文本'
prompt: '你是一个B站用户需要判断动态内容是否是抽奖动态以及参与条件以json格式输出仅需包含key:has_key_words(bool 是否是抽奖动态),needAt(bool 参与抽奖是否需要@自己的好友),needTopic(string 参与抽奖需要带的话题,返回话题需要用#号括起来),drawtime(number 开奖时间的10位数时间戳未获取到返回-1),more(string 总结参与抽奖的条件).回答不要包含markdown标记文本,输出纯json文本'
},
ai_comments_parm: {

View File

@ -20,7 +20,34 @@ const config = require('../lib/data/config');
'#胜利女神新的希望# #nikke# \n【一周年评论盖楼挑战③】拿来吧妮……的表情包\n\n指挥官的手机里\n一定存着几张出场率超高的妮姬表情包吧\n和妮姬们相遇的一周年已至这些也成了旅途中的一段快乐印记~是时候公开自己的库存了yo\n\n无论是新收新做的趣味表情还是珍藏一年的经典老图——\n现在让它们登场吧\n\n评论区交出您的表情包库存看看这一年谁的“收藏”最cool\n🎁我们将在6月9日于本条评论区随机抽选\n▶1位指挥官赠送【周边大礼盒】× 1\n▶10位指挥官赠送【Q版印章小立牌】× 1\n\n💝盖楼目标达成奖励\n5月20日~22日期间参与【一周年评论盖楼挑战】系列话题活动 当全平台评论数累计达成 【2026】 楼时我们将从本平台参与系列话题活动的用户中额外抽取2位幸运指挥官每人送出【哈曼卡顿音响】× 1\n\n————————————\n✦《胜利女神新的希望》一周年庆典版本「OLD TALES 尘封童话」现已上线游戏多端互通前往Bilibili游戏中心搜索《胜利女神新的希望》即可下载。'
);
console.log(msg);
msg = await utils.getAiContent(
config.ai_judge_parm.url,
config.ai_judge_parm.body,
config.ai_judge_parm.prompt,
'#全民掉线行动#今日启动参与活动领GT7、X1心动优惠 2022年助你去线去烦恼乐享焕新声活活动规则见下图。 #供电局福利社# #互动抽奖##抽奖# 【关注】@Haylou嘿喽 ,带话题#全民掉线行动#,【转发+评论+赞】本动态小嘿将随机抽4个欧皇送出以下福利 一等奖Haylou X1 双降噪蓝牙耳机 1台 二等奖Haylou GT7 真无线蓝牙耳机1台 三等奖50元京东卡*2 并且小嘿特意又申请了意外惊喜,加码福利送上,大家冲鸭: 截至抽奖结束: 【转发超1w】再抽一位小可爱送50元京东卡*1 【粉丝超1.5w】再抽一位小可爱送Haylou T17运动蓝牙耳机*1台 开奖时间1月27日中奖名单将通过第三方抽奖工具选出。冲冲冲 *一定要时刻关注@Haylou嘿喽 哦开奖后的3天内未回复小嘿私信领奖的粉丝按照自动弃奖处理哦 '
);
console.log(JSON.parse(msg));
msg = await utils.getAiContent(
config.ai_comments_parm.url,
config.ai_comments_parm.body,
config.ai_comments_parm.prompt,
'#全民掉线行动#今日启动参与活动领GT7、X1心动优惠 2022年助你去线去烦恼乐享焕新声活活动规则见下图。 #供电局福利社# #互动抽奖##抽奖# 【关注】@Haylou嘿喽 ,带话题#全民掉线行动#,【转发+评论+赞】本动态小嘿将随机抽4个欧皇送出以下福利 一等奖Haylou X1 双降噪蓝牙耳机 1台 二等奖Haylou GT7 真无线蓝牙耳机1台 三等奖50元京东卡*2 并且小嘿特意又申请了意外惊喜,加码福利送上,大家冲鸭: 截至抽奖结束: 【转发超1w】再抽一位小可爱送50元京东卡*1 【粉丝超1.5w】再抽一位小可爱送Haylou T17运动蓝牙耳机*1台 开奖时间1月27日中奖名单将通过第三方抽奖工具选出。冲冲冲 *一定要时刻关注@Haylou嘿喽 哦开奖后的3天内未回复小嘿私信领奖的粉丝按照自动弃奖处理哦 '
);
console.log(msg);
msg = await utils.getAiContent(
config.ai_judge_parm.url,
config.ai_judge_parm.body,
config.ai_judge_parm.prompt,
'#全民掉线行动#今日启动参与活动领GT7、X1心动优惠 2022年助你去线去烦恼乐享焕新声活活动规则见下图。 #供电局福利社# #互动抽奖##抽奖# 【关注】@Haylou嘿喽 ,带话题#全民掉线行动#,【转发+评论+赞】本动态小嘿将随机抽4个欧皇送出以下福利 一等奖Haylou X1 双降噪蓝牙耳机 1台 二等奖Haylou GT7 真无线蓝牙耳机1台 三等奖50元京东卡*2 并且小嘿特意又申请了意外惊喜,加码福利送上,大家冲鸭: 截至抽奖结束: 【转发超1w】再抽一位小可爱送50元京东卡*1 【粉丝超1.5w】再抽一位小可爱送Haylou T17运动蓝牙耳机*1台中奖名单将通过第三方抽奖工具选出。冲冲冲 *一定要时刻关注@Haylou嘿喽 哦开奖后的3天内未回复小嘿私信领奖的粉丝按照自动弃奖处理哦 '
);
console.log(JSON.parse(msg));
msg = await utils.getAiContent(
config.ai_comments_parm.url,
config.ai_comments_parm.body,
config.ai_comments_parm.prompt,
'#全民掉线行动#今日启动参与活动领GT7、X1心动优惠 2022年助你去线去烦恼乐享焕新声活活动规则见下图。 #供电局福利社# #互动抽奖##抽奖# 【关注】@Haylou嘿喽 ,带话题#全民掉线行动#,【转发+评论+赞】本动态小嘿将随机抽4个欧皇送出以下福利 一等奖Haylou X1 双降噪蓝牙耳机 1台 二等奖Haylou GT7 真无线蓝牙耳机1台 三等奖50元京东卡*2 并且小嘿特意又申请了意外惊喜,加码福利送上,大家冲鸭: 截至抽奖结束: 【转发超1w】再抽一位小可爱送50元京东卡*1 【粉丝超1.5w】再抽一位小可爱送Haylou T17运动蓝牙耳机*1台 开奖时间1月27日中奖名单将通过第三方抽奖工具选出。冲冲冲 *一定要时刻关注@Haylou嘿喽 哦开奖后的3天内未回复小嘿私信领奖的粉丝按照自动弃奖处理哦 '
);
console.log(msg);
},
]);
console.log('ai.test ... ok!');