DIYgod / DIYgod/RSSHub

NGA的骰子工具没有显示结果。

Open
#13,350 0 comments 0 reactions 0 assignees View on GitHub
RSS enhancement
Dominant language
TypeScript
Stars
46.2k
Forks
10.2k
Avg merge
18h 40m
Merged PRs (30d)
172

Description

### 这是一个什么样的功能?

现在RSS抓到的正文是这样:
```
1-3.接受伊吕波的提案
4-6.该去一趟古圣堂看看日奈她们的情况了
7-9.和渚谈一谈你的发现。
10-12.大成功/大失败
ROLL : d12
```
而NGA网页显示如下:
```
1-3.接受伊吕波的提案
4-6.该去一趟古圣堂看看日奈她们的情况了
7-9.和渚谈一谈你的发现。
10-12.大成功/大失败
ROLL : d12=d12(12)=12
```
上面对应的地址:https://nga.178.com/read.php?&tid=35515609&pid=716493428&to=1
后面翻了下源码,发现骰点结果是网页实时计算的,相关代码位于`js_bbscode_core.js`中:
```js
arg.txt = arg.txt.replace(/\[dice\]([\dd+\s]+?)\[\/dice\]/gi,function($0,$1){
var sum = 0;
var rr = $1;
$1 = '+'+$1;
$1 = $1.replace(/(\+)(\d{0,10})(?:(d)(\d{1,10}))?/gi,function($0,$1,$2,$3,$4){
if($2)$2 = parseInt($2,10); else if($3)$2=1; else $2=0;
$4 = parseInt($4,10);
var r = '';
if(!$3){if(typeof(sum)!='string')sum+=$2;return '+'+$2}
if($2>10 || $4>100000){sum='ERROR';return'+OUT OF LIMIT'};
for (var i=0; i<$2; i++)
{
var rand = Math.floor(self.sRand.rnd(argsId)*$4)+1
r+='+d'+$4+'('+rand+')';
if(typeof(sum)!='string')sum+=rand;
}
return r;
});
return "ROLL : "+rr+'='+$1.substr(1)+'='+sum+"";
});//[dice]

//=============================
//随机数
//=============================
ubbcode.sRand={
seed:2110032,
rnd:function(argsId){
if (argsId){
var arg = ubbcode.bbscodeConvArgsSave[argsId]
if(!arg.rndseed){
arg.rndseed = arg.authorId+arg.tId+arg.pId+(arg.tId>10246184 || arg.pId>200188932 ? (arg.seedOffset|0) : 0)
if(!arg.rndseed)
arg.rndseed = Math.floor(Math.random()*10000)
}
arg.rndseed = (arg.rndseed*9301+49297) % 233280
return arg.rndseed/(233280.0)
}
return (this.seed = (this.seed*9301+49297) % 233280)/(233280.0);
},
rand:function(argsId){
return this.rnd();
},
seeds:{}

}
```
目前来看要么得手动用对应逻辑处理并替换,要么得用headless chrome抓渲染完的网页了。

### 这个功能可以解决什么问题?

修复RSS正文中的骰子没有结果的问题。

### 额外描述

_No response_

### 这不是重复的功能请求和 RSS 提案

- [X] 我已经搜索了 [现有 issue](https://github.com/DIYgod/RSSHub/issues),以确保这项功能尚未被请求及不是 [新的 RSS 提案](https://github.com/DIYgod/RSSHub/issues/new?assignees=&labels=RSS+proposal&template=rss_request_zh.yml)。

Contributor guide

Open the contributing guide

Research direction

Start with the NGA example URL and inspect js_bbscode_core.js, especially the [dice] replacement and ubbcode.sRand logic. Trace how RSSHub obtains and renders the NGA post body. Done means the RSS正文 includes the computed dice expression and result, matching the web page rather than only showing ROLL : d12.

Written by the indexing model from the issue text.

Assessment

Tech stack
javascript
Domain
backend
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
30/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.