基础已经好了。剩下功能都很简单。数据分析下就行了。
先是签到模块。
判断分钟如果是00 or 30就打出签到两字就行。为防止重复弹幕,所以在签到后加上当前时间。
def sign():
while 1:
time = time.strftime('%M', time.localtime())
if time == '00':
try:
dm = '#签到 '+ time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
send_dm(dm)
except:
driver.refresh()
if time == '30':
try:
dm = '#签到 '+ time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
send_dm(dm)
except:
driver.refresh()
time.sleep(50)
签到不受弹幕影响,所以添加一个线程给他。
def main():
init()
t1 = Thread(target=get_dm)
t2 = Thread(target=keep_live)
t3 = Thread(target=sign)
t1.start()
t2.start()
t3.start()
if __name__ == '__main__':
main()
抢分解决有两个方法,第一用wireshark抓包,知道送礼物发送的数据代码。一收到礼物数据就发送#抢分。(但直播结束时散分无用)
第二,有人弹幕打出#抢分,说明有人送礼物。发送#抢分。
我比较懒(连看直播都懒得打字)所以选择第二种。(有弊端,比如‘wsyjz100’这位仁兄的劣质脚本,不断的打#抢分,导致我的脚本也被带偏,跟这他一起傻瓜式的发#抢分。所以果断屏蔽他)
还有个问题就是频率问题,大家集中发一种弹幕,说明正在干相应的事。但零星的发,就说明是对方延迟问题。可以忽略。所以以10秒内出现弹幕的次数来判断。
def get_dm():
pattern = re.compile(b'type@=chatmsg/.+?/nn@=(.+?)/txt@=(.+?)/.+?/level@=(.+?)/')
Grab_points_1 = Grab_points_2 = Grab_points_ALL = frequency =0
while 1:
buffer = b''
while 1:
recv_data = sk_client.recv(4096)
buffer += recv_data
if recv_data.endswith(b'\x00'):
break
for nn, txt, level in pattern.findall(buffer):
min = time.strftime('%M', time.localtime())
sec = time.strftime('%S', time.localtime())
try:
print("[lv.{:0<2}][{}]: {}".format(level.decode(), nn.decode(), txt.decode().strip()))
print("[lv.{:0<2}][{}]: {}".format(level.decode(), nn.decode(), txt.decode().strip()))
if nn.decode() == 'wsyjz100':
continue
if '9' in sec: #每10秒清零一次
Grab_points_1 = 0
Grab_points_2 = 0
Grab_points_ALL = 0
frequency = 0
if '#抢分' in txt.decode().strip():
frequency += 1
if frequency == 10:
for i in range(0, 3):
dm