Closed yjqiang closed 6 years ago
正常现象,我过滤了重复抽奖
分析应该是弹幕会把每次的抽奖提示都打出来,而本代码中似乎是一次进入,多次尝试,导致提前抽完了奖
话说代码里的 while num != 0: 后面就跑一次,然后就break了?
不是这个原因,是因为当一个房间一次性送出多个高能时,房间内的check url 已经有了多个的raffleid,但是弹幕服务器推送较慢,所以有了这个情况
重复抽奖是b站搞的什么鬼?钓鱼?
后面不是有for 循环嘛,有多个抽奖的时候就不会只跑一次了
重复抽奖是我写的代码问题,比如一个房间刚刚送出了一个小电视,30s后他又送了一个,就会导致我获取到到raffleid是两个值,但是这时第一个一个抽过了,如果不过滤的话就会又参与一次
可是break与for循环不是平行的么?这样的话while里面就一个for循环和一个break吧。我查看了空格对齐啊
我先打比赛。。。。代码晚上看
一个解决方案是按照弹幕顺序,一次只抽一个,保证了一一对应。 另一方案是不要提示弹幕的信息(“检测到房间n的活动抽奖”)
当前时间: 2018-03-24 13:27:03 检测到房间 36979 的活动抽奖 23829 移动端活动抽奖结果: 辣条X1 网页端活动抽奖状态: 加入成功 当前时间: 2018-03-24 13:27:04 检测到房间 36979 的活动抽奖 23830 移动端活动抽奖结果: 辣条X1 网页端活动抽奖状态: 加入成功 23829 23831 移动端活动抽奖结果: 辣条X1 网页端活动抽奖状态: 加入成功 当前时间: 2018-03-24 13:27:06 检测到房间 36979 的活动抽奖 23830 23829 23831
我把礼物id打印出来了,b站居然不按顺序来,这就难办了
茬个话题 https://github.com/lkeme/BiliHelper/blob/master/includes/Traits/activityLottery.php#L100
这个代码,判断是否重复抽奖,借助了['data']['status'],这个比list遍历要高效。
或者这么干,弹幕和抽奖参加提示分开,完全不干扰,在原有的参加提示那里添加个房间号就可以了。 (建议输出改成log形式的)
2018-03-24 13:27:03 检测到房间 36979 的活动抽奖 2018-03-24 13:27:03 参加了房间 36979 的活动抽奖
我应该是少写了一个break,这样就正常了
按正常情况下来说,raffleId肯定是按顺序的,但是最近b站在查脚本挂机,所以不好判断现在的情况,用['data']['status']的确是一个不错的方法,会考虑一下改成这个
你是指如果发现一个重复抽奖就break?还是怎么判断break
emmmmmm,我都快看不懂我写的什么了,刚才又看了一眼,感觉又不用加break了,if raffleid not in bilibili.activity_raffleid_list 这一层就能很好的限制了吧
获得成就,自己写的代码读不懂2333 个人不太理解while的作用,我试着调一下这个问题吧
写了就忘.....又懒得写注释
api杂用~
log显示这样 检测到房间 36979 的活动抽奖 移动端活动抽奖结果: 辣条X1 网页端活动抽奖状态: 加入成功 移动端活动抽奖结果: 辣条X1 网页端活动抽奖状态: 加入成功 当前时间: 2018-03-24 11:11:29 检测到房间 36979 的活动抽奖 移动端活动抽奖结果: 辣条X1 网页端活动抽奖状态: 加入成功 当前时间: 2018-03-24 11:11:31 检测到房间 36979 的活动抽奖