NGA的骰子工具没有显示结果。
- 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
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