def handle_danmu(self, body): dic = json.loads(body.decode('utf-8')) cmd = dic['cmd'] # print(cmd) if cmd == 'DANMU_MSG': info = dic['info'] ori = info[1] uid = info[2][0] # print('测试', self.__read, ori) try: msg = self.__reverse(ori) if msg is not None: msg_id, type, id = msg if type == '~' and not msg_id % 2: raffle_id = id printer.info([ f'{self._area_id}号弹幕监控检测到{"0":^9}的节奏风暴(id: {raffle_id})' ], True) # raffle_handler.exec_at_once(StormRaffleHandlerTask, 0, raffle_id) bili_statistics.add2pushed_raffles('Yj协同节奏风暴', 2) result = self.__combine_piece(uid, msg) if result is None: return True type, raffle_id, real_roomid = result if type == '+': printer.info([ f'{self._area_id}号弹幕监控检测到{real_roomid:^9}的大航海(id: {raffle_id})' ], True) raffle_handler.push2queue(GuardRaffleHandlerTask, real_roomid, raffle_id) bili_statistics.add2pushed_raffles('Yj协同大航海', 2) except Exception: printer.warn(f'Yj监控房间内可能有恶意干扰{uid}: {ori}') return True
def handle_danmu(self, data: dict): raffle_type = data['raffle_type'] if raffle_type == 'GUARD': raffle_id = data['raffle_id'] raffle_roomid = data['room_id'] print( f'{self._area_id}号弹幕监控检测到{raffle_roomid:^9}的大航海(id: {raffle_id})' ) raffle_handler.exec_at_once(GuardYjLoadPollTask, raffle_roomid, raffle_id) bili_statistics.add2pushed_raffles('Yj协同大航海', 2) return True
def handle_danmu(self, data: dict) -> bool: raffle_type = data['raffle_type'] raffle_id = data['raffle_id'] raffle_roomid = data['room_id'] if raffle_type == 'STORM': print( f'{self._area_id} 号数据连接检测到{raffle_roomid:^9}的节奏风暴(id: {raffle_id})' ) raffle_handler.exec_at_once(StormRaffleJoinTask, 0, raffle_id) bili_statistics.add2pushed_raffles('Yj协同节奏风暴', 2) elif raffle_type == 'GUARD': print( f'{self._area_id} 号数据连接检测到{raffle_roomid:^9}的大航海(id: {raffle_id})' ) json_rsp = {'data': {'guard': [data['other_raffle_data']]}} # dict 不可以用于 raffle_handler.py 的 set 机制 raffle_handler.exec_at_once(GuardRafflJoinTask, raffle_roomid, json_rsp) bili_statistics.add2pushed_raffles('Yj协同大航海', 2) elif raffle_type == 'PK': print( f'{self._area_id} 号数据连接检测到{raffle_roomid:^9}的大乱斗(id: {raffle_id})' ) raffle_handler.push2queue(PkRaffleJoinTask, raffle_roomid) bili_statistics.add2pushed_raffles('Yj协同大乱斗', 2) elif raffle_type == 'TV': print( f'{self._area_id} 号数据连接检测到{raffle_roomid:^9}的小电视(id: {raffle_id})' ) json_rsp = {'data': {'gift': [data['other_raffle_data']]}} # dict 不可以用于 raffle_handler.py 的 set 机制 raffle_handler.exec_at_once(TvRaffleJoinTask, raffle_roomid, json_rsp) bili_statistics.add2pushed_raffles('Yj协同小电视', 2) return True
def handle_danmu(self, data: dict): raffle_type = data['raffle_type'] if raffle_type == 'STORM': raffle_id = data['raffle_id'] raffle_roomid = 0 print(f'{self._area_id}号弹幕监控检测到{raffle_roomid:^9}的节奏风暴(id: {raffle_id})') raffle_handler.exec_at_once(StormRaffleJoinTask, 0, raffle_id) bili_statistics.add2pushed_raffles('Yj协同节奏风暴', 2) elif raffle_type == 'GUARD': raffle_id = data['raffle_id'] raffle_roomid = data['room_id'] print(f'{self._area_id}号弹幕监控检测到{raffle_roomid:^9}的大航海(id: {raffle_id})') raffle_handler.push2queue(GuardRafflJoinTask, raffle_roomid, raffle_id) bili_statistics.add2pushed_raffles('Yj协同大航海', 2) return True
def handle_danmu(self, data: dict): cmd = data['cmd'] if cmd == 'SPECIAL_GIFT': if 'data' in data and '39' in data['data'] and data['data']['39'][ 'action'] == 'start': print(f'{self._area_id}号数据连接检测到{self._room_id:^9}的节奏风暴') raffle_handler.exec_at_once(StormRaffleJoinTask, self._room_id, data['data']['39']['id']) bili_statistics.add2pushed_raffles('节奏风暴', broadcast_type=2) elif cmd == 'NOTICE_MSG': msg_type = data['msg_type'] real_roomid = data['real_roomid'] msg_common = data['msg_common'].replace(' ', '') msg_common = msg_common.replace('”', '') msg_common = msg_common.replace('“', '') if msg_type == 3: raffle_name = msg_common.split('开通了')[-1][:2] if raffle_name != '总督': print( f'{self._area_id}号数据连接检测到{real_roomid:^9}的提督/舰长(API0)') raffle_handler.push2queue(GuardRafflJoinTask, real_roomid) bili_statistics.add2pushed_raffles('提督/舰长(API0)', broadcast_type=2) elif cmd == 'GUARD_MSG': if 'buy_type' in data and data['buy_type'] != 1: print(f'{self._area_id}号数据连接检测到{self._room_id:^9}的提督/舰长(API1)') raffle_handler.push2queue(GuardRafflJoinTask, self._room_id) bili_statistics.add2pushed_raffles('提督/舰长(API1)', broadcast_type=2) elif cmd == "USER_TOAST_MSG": if data['data']['guard_level'] != 1: print(f'{self._area_id}号数据连接检测到{self._room_id:^9}的提督/舰长(API2)') raffle_handler.push2queue(GuardRafflJoinTask, self._room_id) bili_statistics.add2pushed_raffles('提督/舰长(API2)', broadcast_type=2) elif cmd == "GUARD_BUY": if data['data']['guard_level'] != 1: print(f'{self._area_id}号数据连接检测到{self._room_id:^9}的提督/舰长(API3)') raffle_handler.push2queue(GuardRafflJoinTask, self._room_id) bili_statistics.add2pushed_raffles('提督/舰长(API3)', broadcast_type=2) return True
def handle_danmu(self, body): dic = json.loads(body.decode('utf-8')) cmd = dic['cmd'] if cmd == 'PREPARING': printer.info([f'{self._area_id}号弹幕监控房间下播({self._room_id})'], True) return False elif cmd == 'NOTICE_MSG': # 1 《第五人格》哔哩哔哩直播预选赛六强诞生! # 2 全区广播:<%user_name%>送给<%user_name%>1个嗨翻全城,快来抽奖吧 # 3 <%user_name%> 在 <%user_name%> 的房间开通了总督并触发了抽奖,点击前往TA的房间去抽奖吧 # 4 欢迎 <%总督 user_name%> 登船 # 5 恭喜 <%user_name%> 获得大奖 <%23333x银瓜子%>, 感谢 <%user_name%> 的赠送 # 6 <%user_name%> 在直播间 <%529%> 使用了 <%20%> 倍节奏风暴,大家快去跟风领取奖励吧!(只报20的) msg_type = dic['msg_type'] msg_common = dic['msg_common'] real_roomid = dic['real_roomid'] msg_common = dic['msg_common'].replace(' ', '') msg_common = msg_common.replace('”', '') msg_common = msg_common.replace('“', '') if msg_type == 2 or msg_type == 8: str_gift = msg_common.split('%>')[-1].split(',')[0] if '个' in str_gift: raffle_num, raffle_name = str_gift.split('个') elif '了' in str_gift: raffle_num = 1 raffle_name = str_gift.split('了')[-1] else: raffle_num = 1 raffle_name = str_gift broadcast = msg_common.split('广播')[0] printer.info( [f'{self._area_id}号弹幕监控检测到{real_roomid:^9}的{raffle_name}'], True) raffle_handler.push2queue(TvRaffleHandlerTask, real_roomid) broadcast_type = 0 if broadcast == '全区' else 1 bili_statistics.add2pushed_raffles(raffle_name, broadcast_type, raffle_num) elif msg_type == 3: raffle_name = msg_common.split('开通了')[-1][:2] printer.info( [f'{self._area_id}号弹幕监控检测到{real_roomid:^9}的{raffle_name}'], True) raffle_handler.push2queue(GuardRaffleHandlerTask, real_roomid) broadcast_type = 0 if raffle_name == '总督' else 2 bili_statistics.add2pushed_raffles(raffle_name, broadcast_type) elif msg_type == 6: raffle_name = '二十倍节奏风暴' printer.info( [f'{self._area_id}号弹幕监控检测到{real_roomid:^9}的{raffle_name}'], True) # raffle_handler.push2queue(StormRaffleHandlerTask, real_roomid) bili_statistics.add2pushed_raffles(raffle_name) return True
def handle_danmu(self, data: dict) -> bool: if 'cmd' in data: cmd = data['cmd'] elif 'msg' in data: data = data['msg'] cmd = data['cmd'] else: return True # 预防未来sbb站 if cmd == 'PREPARING': print(f'{self._area_id} 号数据连接房间下播({self._room_id})') return False elif cmd == 'NOTICE_MSG': # 1 《第五人格》哔哩哔哩直播预选赛六强诞生! # 2 全区广播:<%user_name%>送给<%user_name%>1个嗨翻全城,快来抽奖吧 # 3 <%user_name%> 在 <%user_name%> 的房间开通了总督并触发了抽奖,点击前往TA的房间去抽奖吧 # 4 欢迎 <%总督 user_name%> 登船 # 5 恭喜 <%user_name%> 获得大奖 <%23333x银瓜子%>, 感谢 <%user_name%> 的赠送 # 6 <%user_name%> 在直播间 <%529%> 使用了 <%20%> 倍节奏风暴,大家快去跟风领取奖励吧!(只报20的) msg_type = data['msg_type'] real_roomid = data['real_roomid'] msg_common = clear_whitespace(data['msg_common'], '“”') if msg_type == 2 or msg_type == 8: if data['msg_common']: # description0, raffle_name = self.NOTICE_MSG_TV_PATTERN.match(msg_common).group(1, 2) broadcast = 'nmb' raffle_num = 1 raffle_name = '小电视' print( f'{self._area_id} 号数据连接检测到{real_roomid:^9}的{raffle_name}' ) raffle_handler.push2queue(TvRaffleJoinTask, real_roomid) broadcast_type = 0 if broadcast == '全区' else 1 bili_statistics.add2pushed_raffles(raffle_name, broadcast_type, raffle_num) elif msg_type == 3: raffle_name = self.NOTICE_MSG_GUARD_PATTERN.match( msg_common).group(1) print( f'{self._area_id} 号数据连接检测到{real_roomid:^9}的{raffle_name}') raffle_handler.push2queue(GuardRafflJoinTask, real_roomid) broadcast_type = 0 if raffle_name == '总督' else 2 bili_statistics.add2pushed_raffles(raffle_name, broadcast_type) elif msg_type == 6: raffle_name = '二十倍节奏风暴' print( f'{self._area_id} 号数据连接检测到{real_roomid:^9}的{raffle_name}') raffle_handler.push2queue(StormRaffleJoinTask, real_roomid) bili_statistics.add2pushed_raffles(raffle_name) return True
def handle_danmu(self, data: dict): if 'cmd' in data: cmd = data['cmd'] elif 'msg' in data: data = data['msg'] cmd = data['cmd'] else: return True # 预防未来sbb站 if cmd == 'SPECIAL_GIFT': if 'data' in data and '39' in data['data'] and data['data']['39'][ 'action'] == 'start': data = data['data']['39'] print(f'{self._area_id}号数据连接检测到{self._room_id:^9}的节奏风暴') raffle_handler.exec_at_once(StormRaffleJoinNoReqTask, self._room_id, data) bili_statistics.add2pushed_raffles('节奏风暴', broadcast_type=2) print(data) elif cmd == 'PK_LOTTERY_START': data = data['data'] print(f'{self._area_id}号数据连接检测到{self._room_id:^9}的大乱斗') raffle_handler.exec_at_once(PkRaffleJoinNoReqTask, self._room_id, data) bili_statistics.add2pushed_raffles('大乱斗', broadcast_type=2) elif cmd == 'GUARD_LOTTERY_START': data = data['data']['lottery'] print(f'{self._area_id}号数据连接检测到{self._room_id:^9}的大航海(API4)') raffle_handler.exec_at_once(GuardRaffleJoinNoReqTask, self._room_id, data) bili_statistics.add2pushed_raffles('大航海(API4)', broadcast_type=2) elif cmd == 'ANCHOR_LOT_START': data = data['data'] print(f'{self._area_id}号数据连接检测到{self._room_id:^9}的天选抽奖') raffle_handler.exec_at_once(AnchorRaffleJoinNoReqTask, self._room_id, data) bili_statistics.add2pushed_raffles('天选抽奖', broadcast_type=2) elif cmd == 'RAFFLE_START': data = data['data'] # 33地图-GIFT_30405 . # 小电视图-GIFT_30406 . # 蘑菇别跑-GIFT_30448 . tv_type = data['type'] if tv_type in ('GIFT_30405', 'GIFT_30406', 'GIFT_30448'): print( f'{self._area_id}号数据连接检测到{self._room_id:^9}的小电视({tv_type})' ) raffle_handler.exec_at_once(TVRaffleJoinNoReqTask, self._room_id, data) bili_statistics.add2pushed_raffles('小电视', broadcast_type=2) ''' elif cmd == 'NOTICE_MSG': msg_type = data['msg_type'] real_roomid = data['real_roomid'] msg_common = data['msg_common'].replace(' ', '') msg_common = msg_common.replace('”', '') msg_common = msg_common.replace('“', '') if msg_type == 3: raffle_name = msg_common.split('开通了')[-1][:2] if raffle_name != '总督': print(f'{self._area_id}号数据连接检测到{real_roomid:^9}的提督/舰长(API0)') # raffle_handler.push2queue(LotteriesRaffleJoinTask, real_roomid, 5) bili_statistics.add2pushed_raffles('提督/舰长(API0)', broadcast_type=2) elif cmd == 'GUARD_MSG': if 'buy_type' in data and data['buy_type'] != 1: print(f'{self._area_id}号数据连接检测到{self._room_id:^9}的提督/舰长(API1)') # raffle_handler.push2queue(LotteriesRaffleJoinTask, self._room_id, 5) bili_statistics.add2pushed_raffles('提督/舰长(API1)', broadcast_type=2) ''' return True