Dawnnnnnn / bilibili-live-tools

python实现的bilibili直播助手
MIT License
791 stars 170 forks source link

抽奖实现相关问题 #20

Closed yjqiang closed 6 years ago

yjqiang commented 6 years ago

log显示这样 检测到房间 36979 的活动抽奖 移动端活动抽奖结果: 辣条X1 网页端活动抽奖状态: 加入成功 移动端活动抽奖结果: 辣条X1 网页端活动抽奖状态: 加入成功 当前时间: 2018-03-24 11:11:29 检测到房间 36979 的活动抽奖 移动端活动抽奖结果: 辣条X1 网页端活动抽奖状态: 加入成功 当前时间: 2018-03-24 11:11:31 检测到房间 36979 的活动抽奖

Dawnnnnnn commented 6 years ago

正常现象,我过滤了重复抽奖

yjqiang commented 6 years ago

分析应该是弹幕会把每次的抽奖提示都打出来,而本代码中似乎是一次进入,多次尝试,导致提前抽完了奖

yjqiang commented 6 years ago

话说代码里的 while num != 0: 后面就跑一次,然后就break了?

Dawnnnnnn commented 6 years ago

不是这个原因,是因为当一个房间一次性送出多个高能时,房间内的check url 已经有了多个的raffleid,但是弹幕服务器推送较慢,所以有了这个情况

yjqiang commented 6 years ago

重复抽奖是b站搞的什么鬼?钓鱼?

Dawnnnnnn commented 6 years ago

后面不是有for 循环嘛,有多个抽奖的时候就不会只跑一次了

Dawnnnnnn commented 6 years ago

重复抽奖是我写的代码问题,比如一个房间刚刚送出了一个小电视,30s后他又送了一个,就会导致我获取到到raffleid是两个值,但是这时第一个一个抽过了,如果不过滤的话就会又参与一次

yjqiang commented 6 years ago

可是break与for循环不是平行的么?这样的话while里面就一个for循环和一个break吧。我查看了空格对齐啊

Dawnnnnnn commented 6 years ago

我先打比赛。。。。代码晚上看

yjqiang commented 6 years ago

一个解决方案是按照弹幕顺序,一次只抽一个,保证了一一对应。 另一方案是不要提示弹幕的信息(“检测到房间n的活动抽奖”)

yjqiang commented 6 years ago

当前时间: 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站居然不按顺序来,这就难办了

yjqiang commented 6 years ago

茬个话题 https://github.com/lkeme/BiliHelper/blob/master/includes/Traits/activityLottery.php#L100

这个代码,判断是否重复抽奖,借助了['data']['status'],这个比list遍历要高效。

yjqiang commented 6 years ago

或者这么干,弹幕和抽奖参加提示分开,完全不干扰,在原有的参加提示那里添加个房间号就可以了。 (建议输出改成log形式的)

2018-03-24 13:27:03 检测到房间 36979 的活动抽奖 2018-03-24 13:27:03 参加了房间 36979 的活动抽奖

移动端活动抽奖结果: 辣条X1

网页端活动抽奖状态: 加入成功

Dawnnnnnn commented 6 years ago

我应该是少写了一个break,这样就正常了 image

Dawnnnnnn commented 6 years ago

按正常情况下来说,raffleId肯定是按顺序的,但是最近b站在查脚本挂机,所以不好判断现在的情况,用['data']['status']的确是一个不错的方法,会考虑一下改成这个

yjqiang commented 6 years ago

你是指如果发现一个重复抽奖就break?还是怎么判断break

Dawnnnnnn commented 6 years ago

emmmmmm,我都快看不懂我写的什么了,刚才又看了一眼,感觉又不用加break了,if raffleid not in bilibili.activity_raffleid_list 这一层就能很好的限制了吧

yjqiang commented 6 years ago

获得成就,自己写的代码读不懂2333 个人不太理解while的作用,我试着调一下这个问题吧

Dawnnnnnn commented 6 years ago

写了就忘.....又懒得写注释

lovezm commented 6 years ago

api杂用~