Exemple #1
0
    if other_control['substance_raffle']:
        _danmu_monitors.append(SubstanceRaffleMonitor())
    if other_control['dyn_raffle']:
        _danmu_monitors.append(
            DynRaffleMonitor(should_join_immediately=other_control[
                'join_dyn_raffle_at_once']))
    return _danmu_printer, _danmu_monitors


danmu_printer, monitors = loop.run_until_complete(init_monitors())
bili_sched.init(monitors=monitors,
                sleep_ranges=dict_ctrl['other_control']['sleep_ranges'])

# 初始化控制台
if sys.platform != 'linux' or signal.getsignal(
        signal.SIGHUP) == signal.SIG_DFL:
    console_thread = threading.Thread(
        target=BiliConsole(loop, default_roomid, danmu_printer).cmdloop)
    console_thread.start()
else:
    console_thread = None

tasks = [monitor.run() for monitor in monitors]
other_tasks = [bili_sched.run(), raffle_handler.run(), danmu_printer.run()]
if other_tasks:
    loop.run_until_complete(asyncio.wait(tasks + other_tasks))
loop.run_forever()
if console_thread is not None:
    console_thread.join()
Exemple #2
0
            }
        })
    except json_req_exceptions.JsonReqError as e:
        return web.json_response(e.RSP_SUGGESTED)
    except:
        return web.json_response(json_req_exceptions.DataError.RSP_SUGGESTED)


if sys.platform != 'linux' or signal.getsignal(
        signal.SIGHUP) == signal.SIG_DFL:
    console_thread = threading.Thread(target=BiliConsole(loop).cmdloop)
    console_thread.start()
else:
    console_thread = None

loop.create_task(raffle_handler.run())
loop.create_task(monitors_ctrl_center.run())

app = web.Application()
setup(app)
app.router.add_route('GET', '/check', check_handler)
app.router.add_route('POST', '/add_new_roomids', add_new_roomids_handler)

with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s:
    s.connect(("114.114.114.114", 80))
    print('本机 IP 为', s.getsockname()[0])

web.run_app(app, port=9001)
loop.run_forever()
if console_thread is not None:
    console_thread.join()
Exemple #3
0
    if other_control['substance_raffle']:
        _danmu_monitors.append(SubstanceRaffleMonitor())
    if other_control['dyn_raffle']:
        _danmu_monitors.append(DynRaffleMonitor(
            should_join_immediately=other_control['join_dyn_raffle_at_once']))
    return _danmu_printer, _danmu_monitors
danmu_printer, monitors = loop.run_until_complete(init_monitors())
bili_sched.init(monitors=monitors, sleep_ranges=dict_ctrl['other_control']['sleep_ranges'])


# 初始化控制台
if sys.platform != 'linux' or signal.getsignal(signal.SIGHUP) == signal.SIG_DFL:
    console_thread = threading.Thread(
        target=BiliConsole(loop, default_roomid, danmu_printer).cmdloop)
    console_thread.start()
else:
    console_thread = None

tasks = [monitor.run() for monitor in monitors]
other_tasks = [
    bili_sched.run(),
    raffle_handler.run(),
    danmu_printer.run()
]
if other_tasks:
    loop.run_until_complete(asyncio.wait(tasks+other_tasks))
loop.run_forever()
if console_thread is not None:
    console_thread.join()
Exemple #4
0
def run(user_info: dict, pipe: connection.Connection):
    """
    :param user_info: 用户信息
    :param pipe:进程间通信管道
    :return:
    """
    notifier.register_pipe(pipe)
    user_info['password'] = rsa_long_decrypt(eval(user_info['password']))
    user_info_copy = deepcopy(user_info)
    # print(user_info['password'])
    loop = asyncio.get_event_loop()
    dict_bili = conf_loader.read_bili()
    dict_color = conf_loader.read_color()
    dict_ctrl = conf_loader.read_ctrl()
    dict_task = conf_loader.read_task()
    printer.init_config(dict_color, dict_ctrl['print_control']['danmu'])

    ############################################################################
    ############################################################################
    # 👇users 录入程序
    async def init_users():
        global_task_control = dict_task['global_task_control']
        custom_task_control = dict_task['custom_task_control']
        global_task_arrangement = dict_task['global_task_arrangement']
        custom_task_arrangement = dict_task['custom_task_arrangement']
        users = notifier.Users(global_task_control=global_task_control,
                               global_task_arrangement=global_task_arrangement,
                               dict_bili=dict_bili,
                               force_sleep=bili_sched.force_sleep)
        notifier.init(users=users)
        username = user_info['username']
        await notifier.add_user(
            user_info=user_info_copy,
            custom_task_control=custom_task_control.get(username, {}),
            custom_task_arrangement=custom_task_arrangement.get(username, {}))

    loop.run_until_complete(init_users())

    ############################################################################
    ############################################################################
    # 👇重复任务录入程序

    # 时间间隔为小时,同时每次休眠结束都会计时归零,重新从当前时间计算时间间隔
    # 下面表示每隔多少小时执行一次
    def add_daily_jobs(tasks):
        for task in tasks:
            if task['status']:
                if task['frequency_unit'] == 2:
                    fre = 1
                elif task['frequency_unit'] == 1:
                    fre = 60
                elif task['frequency_unit'] == 3:
                    fre = 1 / 24
                elif task['frequency_unit'] == 0:
                    fre = 3600
                else:
                    raise Exception("fre不能为空!")
                    # fre = 1
                bili_sched.add_daily_jobs(globals()[task['task']],
                                          every_hours=task['frequency_num'] /
                                          fre)  # 心跳
                print("成功添加任务:", task['task'])
        bili_sched.add_daily_jobs(HeartBeatTask, every_hours=6)  # 心跳
        # bili_sched.add_daily_jobs(OpenSilverBoxTask, every_hours=6)  # 每日开宝箱任务
        bili_sched.add_daily_jobs(RecvDailyBagTask, every_hours=3)  #
        # bili_sched.add_daily_jobs(SignTask, every_hours=6)  # 直播签到
        # bili_sched.add_daily_jobs(WatchTvTask, every_hours=6)  # 双端观看任务
        # bili_sched.add_daily_jobs(SignFansGroupsTask, every_hours=6)  # 签名粉丝组任务
        # bili_sched.add_daily_jobs(SendGiftTask, every_hours=2)  # 送礼物的任务
        # bili_sched.add_daily_jobs(ExchangeSilverCoinTask, every_hours=6)  # 硬币兑换
        bili_sched.add_daily_jobs(JudgeCaseTask, every_hours=0.75)  # 风纪委员任务
        bili_sched.add_daily_jobs(BiliMainTask, every_hours=4)  # 主任务
        # bili_sched.add_daily_jobs(MangaSignTask, every_hours=6)  # 漫画签到
        # bili_sched.add_daily_jobs(ShareComicTask, every_hours=6)  # 漫画分享任务
        bili_sched.add_daily_jobs(DahuiyuanTask, every_hours=6)

    if user_info.get('tasks'):
        tasks = user_info.get('tasks')
    else:
        tasks = []
    add_daily_jobs(tasks)
    ############################################################################
    ############################################################################
    # 登录
    loop.run_until_complete(notifier.exec_task(LoginTask))
    other_control = dict_ctrl['other_control']
    area_ids = loop.run_until_complete(
        notifier.exec_func(UtilsTask.fetch_blive_areas))
    area_duplicated = other_control['area_duplicated']
    if area_duplicated:
        area_ids *= 2
    bili_statistics.init(area_num=len(area_ids),
                         area_duplicated=area_duplicated)
    default_roomid = other_control['default_monitor_roomid']

    ############################################################################
    ############################################################################
    # 👇录入 monitors
    # aiohttp sb session
    async def init_monitors():
        session = aiohttp.ClientSession()
        monitors_ = []
        # 弹幕打印功能
        danmu_printer_ = DanmuPrinter(room_id=default_roomid,
                                      area_id=-1,
                                      session=session)

        # 弹幕抽奖监控
        for area_id in area_ids:
            monitor = DanmuRaffleMonitor(room_id=0,
                                         area_id=area_id,
                                         session=session)
            monitors_.append(monitor)

        # yjmonitor 弹幕监控
        yjmonitor_tcp_addr = other_control['yjmonitor_tcp_addr']
        yjmonitor_tcp_key = other_control['yjmonitor_tcp_key']
        if yjmonitor_tcp_key:
            monitor = TcpYjMonitorClient(key=yjmonitor_tcp_key,
                                         url=yjmonitor_tcp_addr,
                                         area_id=0)
            monitors_.append(monitor)
        if other_control['substance_raffle']:
            monitors_.append(SubstanceRaffleMonitor())
        if other_control['dyn_raffle']:
            monitors_.append(
                DynRaffleMonitor(should_join_immediately=other_control[
                    'join_dyn_raffle_at_once']))
        return danmu_printer_, monitors_

    danmu_printer, monitors = loop.run_until_complete(init_monitors())
    ############################################################################
    ############################################################################

    bili_sched.init(monitors=monitors,
                    sleep_ranges=dict_ctrl['other_control']['sleep_ranges'])

    # 初始化控制台
    if sys.platform != 'linux' or signal.getsignal(
            signal.SIGHUP) == signal.SIG_DFL:
        console_thread = threading.Thread(
            target=ConsoleCmd(loop, default_roomid, danmu_printer).cmdloop)
        console_thread.start()
    else:
        console_thread = None

    tasks = [monitor.run() for monitor in monitors]
    other_tasks = [bili_sched.run(), raffle_handler.run(), danmu_printer.run()]
    if other_tasks:
        loop.run_until_complete(asyncio.wait(tasks + other_tasks))
    loop.run_forever()
    if console_thread is not None:
        console_thread.join()
Exemple #5
0
                if new_roomid is None:
                    if monitor.room_id:  # 只操作非0即可
                        monitor.pause()
                        await monitor.reset_roomid(0)
                else:
                    await monitor.reset_roomid(new_roomid)
                    monitor.resume()

            assert set(monitor.room_id for monitor in monitors
                       if monitor.room_id) == set_new_rooms
            tasks.utils.update(latest_update_rooms_time=utils.curr_time())
            await asyncio.sleep(60)

        await asyncio.sleep(30)


# 初始化控制台
if sys.platform != 'linux' or signal.getsignal(
        signal.SIGHUP) == signal.SIG_DFL:
    console_thread = threading.Thread(target=BiliConsole(loop).cmdloop)
    console_thread.start()
else:
    console_thread = None

other_tasks = [raffle_handler.run(), fetch_roomid_periodic()]
if other_tasks:
    loop.run_until_complete(asyncio.wait(other_tasks))
loop.run_forever()
if console_thread is not None:
    console_thread.join()
Exemple #6
0
                else:
                    await monitor.reset_roomid(new_roomid)
                    monitor.resume()
            else:  # 新房间很多,老房间不够用,需要扩充
                # list_unique_old_index先到了头,那么set_unique_new_rooms一定还有多余,一定非 None
                monitor = DanmuRaffleMonitor(new_roomid, area_id)
                loop.create_task(monitor.run())
                if not area_id % 20:
                    await asyncio.sleep(0.2)
                area_id += 1
                monitors.append(monitor)
        bili_statistics.max_room_num(area_id)
        if set_unique_new_rooms:
            await asyncio.sleep(7)


# 初始化控制台
if sys.platform != 'linux' or signal.getsignal(
        signal.SIGHUP) == signal.SIG_DFL:
    console_thread = threading.Thread(target=BiliConsole(loop).cmdloop)
    console_thread.start()
else:
    console_thread = None

other_tasks = [raffle_handler.run(), add_onlinerooms_monitor()]
if other_tasks:
    loop.run_until_complete(asyncio.wait(other_tasks))
loop.run_forever()
if console_thread is not None:
    console_thread.join()