Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

【小心心】自动获取和赠送功能 #6

Closed
4266464 opened this issue Jul 15, 2020 · 9 comments
Closed

【小心心】自动获取和赠送功能 #6

4266464 opened this issue Jul 15, 2020 · 9 comments

Comments

@4266464
Copy link

4266464 commented Jul 15, 2020

开启【自动跳转房间获取小心心】后,如果目标直播间为短号,则会一直循环跳转。
(我之前为了保证挂脚本的房间一直开播就花了20硬币开了3号直播间的勋章,直播间地址live.bilibili.com/3)
当开启自动跳转后刷新,会提示“[小心心]3秒后跳转至房间3”,并在3秒后重载页面,并且不断循环,一直重复刷新
并且在刷新后还会概率出现0-2条“[B站直播自动抢辣条]请先登陆”提示。
同时通过读取控制台日志发现,脚本读取的room_id是原本的长房间号:
[IGIFTMSG] Live_info: {room_id: 23058, ruid: 11153765, ...}
而手动进入live.bilibili.com/23058后B站会自动跳转至live.bilibili.com/3(与脚本无关)
同类型的短号直播间号我还测试了共青团中央:910884->54;二次元的中科院物理所:21319143->1928

基于以上我个人猜测可能有2种原因导致了一直重复跳转:
1.刷新后登陆状态出现问题影响脚本的某些功能
2.房间room_id的长短号在脚本中未统一,读取到的是长号23058,跳转到的目标房间是短号3,无法达到所在房间与目标房间相一致,从而导致一直重复跳转重载。

修改建议:

  1. 统一room_id的长短号
  2. 适当增加自动跳转延时,3秒有点太短了,来不及修改脚本设置或者查看控制台日志
  3. 跳转前检测当前房间是否符合获取小心心的条件(即检测是否有当前房间是否正在开播且拥有粉丝勋章),若当前房间可以获得小心心则不跳转。
    (因为我有粉丝勋章的主播大都是短号,长号的未开播。我开启自动跳转后无法稳定在任何一个直播间,所以实际上我暂时无法测试脚本中是否本来就是这个实现逻辑。
    (只是希望不会每次都只能跳到同一个(3号)直播间(除非他下播),打扰用户正常挂脚本看直播(虽然可以临时关掉自动跳转来实现不跳转(建议2.))
  4. 【跳转房间后移除直播画面并静音】功能很棒,但是我现在由于循环跳转bug无法测试。
    想问一下是直接不获取直播流了还是仅仅不播放而已,这对于宽带占用甚至付费的流量会有一定影响。
    但同时我又担心直接不获取直播流的话会不会被B站判为未在直播间观看而无法获得小心心。
  5. 如果4中无法直接不获取直播流的话,希望可以增加一个【小心心获得达到上限后自动跳转至未开播直播间】(最好也是粉丝勋章里找房间,可开关)的功能,从而可以节省挂机成本。
@andywang425
Copy link
Owner

感谢反馈,以下是我针对你提出的问题做出的改进和一些看法:
1.简化判断逻辑,无论房间长短号是否相同都不影响判断。
2.因为加载脚本6秒后会检查小时榜,在6秒后跳转会影响抽奖,所以暂时改为5.5秒。
3.修复了相关bug,现在若当前房间可以获得小心心不跳转。
4.【跳转房间后移除直播画面并静音】不过只是不播放而已,做不到不获取直播流。而且如果网络环境很差还会失败,也许以后会改进。我打算把这个功能整合到移除页面元素里,再搞个设置框供用户选择移除哪些元素。
5.因为没法判断什么时候小心心达到上限,所以有点难实现。暂时不做这个功能。

@4266464
Copy link
Author

4266464 commented Jul 15, 2020

感谢回复,关于5.我的一点看法:
【小心心达到上限】的充分必要条件确实不好判断,但是可以使用充分条件【包裹中时长为7天的小心心的数量是24个】来进行判断,达到这个条件就肯定是达到上限了。
但是达到上限时并不一定会有24个,可能已经送出去了,因此不是必要条件。也就是说有可能无法跳转到未开播房间,但这也并不会造成比原来更坏的结果。

当然这只是我的个人意愿,想要减少挂机的内存和网络占用。至于判断【包裹中时长为7天的小心心的数量是24个】是否容易实现我也不是很清楚(但我感觉跟判断剩1天的辣条差不多),所以如果比较麻烦或者你不想做也完全没问题啦。

作为一个只会提要求的伸手党我真的已经非常感谢你这么高的互动和更新频率了。

@andywang425
Copy link
Owner

感谢回复,关于5.我的一点看法:
【小心心达到上限】的充分必要条件确实不好判断,但是可以使用充分条件【包裹中时长为7天的小心心的数量是24个】来进行判断,达到这个条件就肯定是达到上限了。
但是达到上限时并不一定会有24个,可能已经送出去了,因此不是必要条件。也就是说有可能无法跳转到未开播房间,但这也并不会造成比原来更坏的结果。

当然这只是我的个人意愿,想要减少挂机的内存和网络占用。至于判断【包裹中时长为7天的小心心的数量是24个】是否容易实现我也不是很清楚(但我感觉跟判断剩1天的辣条差不多),所以如果比较麻烦或者你不想做也完全没问题啦。

作为一个只会提要求的伸手党我真的已经非常感谢你这么高的互动和更新频率了。

我也很感谢你能提出这些建议,你每次提issue都把问题描述得很详细,也挺辛苦的。
我刚刚又想到一种思路,就是通过挂机的时间是否到了120分钟来判断。不过由于页面刷新会影响判断,做这功能得稍微花点时间。我个人认为这种方法比判断【包裹中时长为7天的小心心的数量是24个】要好,因为只要时间到了脚本就一定会跳转到不开播房间。

@4266464
Copy link
Author

4266464 commented Jul 16, 2020

但需要注意的是,120分钟是个必要不充分条件,区别是:
24个一定满上限,但上限满不一定有24个。
上限满一定要120分钟,但120分钟不一定满上限。

原因是B站发放小心心的观看时长由于网络等原因好像并不严格是5分钟,尤其是第一个五分钟,可能会有一定延后。其次是刷新房间好像会重置当前计时,类似于银瓜子宝箱,也就是假如看了4分钟时刷新,会需要再看5分钟才会发放一个小心心,但实际用了9分钟。所以实际上达到上限所需的时间可能要大于120分钟(除非网络非常好且是连续挂满120分钟)

采用必要不充分条件的风险是 可能脚本计时已经达到了120分钟但小心心并没有满,跳到未开播房间后今天就无法获得剩余小心心了。相比于无法跳出直播间,我认为无法获得全部小心心损失更大一些。

结合以上我提出一个双重判定:

  1. 时长7天的小心心达到24个 -> 必定跳出
  2. 当前直播间连续挂机130分钟 -> 也跳出
    (要求脚本自动刷新时间大于2小时,因为非连续挂机状态120分钟是有很大可能不满的,同时这个方式也避开了页面刷新影响计时的困难)
  3. 复杂一点的话可以将前两点结合起来:加载脚本时检测当前包裹中7天小心心的数量为x,当连续挂机达到(24-x)*5分钟后延时几分钟跳出直播间,或再次检测7天小心心数量为24也跳出。
    (其实这种方法就一定程度避免了刷新对计时的影响,与其费力去记录刷新前到底挂了几分钟,不如直接看获得了几个小心心,当然这还是要求用户没有手动送出。这只是降低了判断失败的损失而已,相当于一个双保险)

P.S.
我还是坚持认为7天小心心24个判断成功率挺高的。
想要触发上限满了不一定有24个,就必须要在挂脚本的前两个小时内手动送出刚获得的小心心。
然而在实际实践中对于长期(非首次)使用脚本的用户来说,这就意味着要在凌晨去送;而且一般情况下7天的小心心不会当天全部送完(不会被脚本自动送出),即使凌晨要送也可以送前几天获得的小心心。

@andywang425
Copy link
Owner

andywang425 commented Jul 16, 2020

挺好的建议,但是等级礼包会送小心心,所以以小心心为判断标准可能会提早结束。
我打算先把这个模块的基础功能做好,确定没bug后再进一步完善。一下子更新太多内容我压力也挺大的。

听群友说现在小心心到上限后b站会有一个浮动条提示,我明天或者后天抓包看看能不能通过调用api的方式来判断小心心数量是否到达上限。这应该比我们之前讨论的方式都要靠谱。

@4266464 4266464 changed the title 短号房间循环跳转刷新bug【自动跳转房间获取小心心】 【小心心】自动获取和赠送功能 Jul 23, 2020
@4266464
Copy link
Author

4266464 commented Jul 23, 2020

听群友说现在小心心到上限后b站会有一个浮动条提示,我明天或者后天抓包看看能不能通过调用api的方式来判断小心心数量是否到达上限。这应该比我们之前讨论的方式都要靠谱。

请问3.7.3版本中是否已经加入了小心心满上限后自动跳出开播房间的功能?
还有一个我没有实测,但是想问一下:包裹中若有剩余1天的小心心,自动送礼时会随辣条一同送出吗?
若会,不知道程序中对于1小心心=50辣条这一点有没有处理好,以免只按数量赠送造成亲密度上限溢出

另外想问一下3.7.3版本中新加入的自动点亮勋章功能的一些细节:

  1. 关于点亮频率:A.每天点亮一次;B.熄灭时(7天后)才会触发点亮;C.其他
  2. 关于点亮时间:A.凌晨与每日任务一起进行;B.夜晚在自动送礼时优先进行;C.其他
  3. 关于点亮方式:A.每房赠送一个小心心,多余的保留,若不足则略过;B.剩余的小心心(无论几天)也会一并送出;C.不足的房间会赠送金瓜子道具(若有金瓜子)

我个人希望的是BAA,多余小心心由自动送礼送出(因为不想每天给不常用主播送一个小心心浪费礼物,但又不想让粉丝勋章熄灭)

@andywang425
Copy link
Owner

现在是BBA。
小心心亲密度问题在点亮时和送礼时都有做处理。

@4266464
Copy link
Author

4266464 commented Jul 24, 2020

现在是BBA。
小心心亲密度问题在点亮时和送礼时都有做处理。

好的,谢谢回答。另外求每天多次自动送礼的功能。
网络断断续续的,经常在0点时没网,好多礼物就白白过期了。
希望可以加一个每隔多长时间就自动送一次的功能,比如每次自动刷新直播间之前送一次(这样都不需要额外写计时模块了),谢谢
虽然我也有手动点立即送礼,但是到快凌晨那会儿经常记不起来

@andywang425
Copy link
Owner

现在是BBA。
小心心亲密度问题在点亮时和送礼时都有做处理。

好的,谢谢回答。另外求每天多次自动送礼的功能。
网络断断续续的,经常在0点时没网,好多礼物就白白过期了。
希望可以加一个每隔多长时间就自动送一次的功能,比如每次自动刷新直播间之前送一次(这样都不需要额外写计时模块了),谢谢
虽然我也有手动点立即送礼,但是到快凌晨那会儿经常记不起来

3.8.2更新了间隔时间送礼的功能,你可以试试看

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants