Esempio n. 1
0
 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
Esempio n. 2
0
 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
Esempio n. 3
0
 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
Esempio n. 4
0
 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
Esempio n. 5
0
    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
Esempio n. 6
0
    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
Esempio n. 8
0
    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