Esempio n. 1
0
 async def _check_area(self):
     try:
         await asyncio.sleep(300)
         while await asyncio.shield(
                 notifier.exec_func(UtilsTask.is_ok_as_monitor, self._room_id, self._area_id)):
             await asyncio.sleep(300)
         print(f'{self._room_id} 不再适合作为监控房间,即将切换')
     except asyncio.CancelledError:
         return
Esempio n. 2
0
 async def check_area(self):
     try:
         while True:
             is_ok = await asyncio.shield(notifier.exec_func(-1, UtilsTask.is_ok_as_monitor, self._room_id, self._area_id))
             if not is_ok:
                 printer.info([f'{self._room_id}不再适合作为监控房间,即将切换'], True)
                 return
             await asyncio.sleep(300)
     except asyncio.CancelledError:
         pass
Esempio n. 3
0
dict_user = conf_loader.read_user()
dict_bili = conf_loader.read_bili()
dict_color = conf_loader.read_color()
printer.init_config(dict_color, dict_user['print_control']['danmu'])
area_ids = dict_user['other_control']['area_ids']

users = []
task_control = dict_user['task_control']
for i, user_info in enumerate(dict_user['users']):
    users.append(User(i, user_info, task_control, dict_bili))

notifier.set_values(loop)
notifier.set_users(users)
bili_statistics.init_area_num(len(area_ids))

loop.run_until_complete(notifier.exec_func(-2, LoginTask.handle_login_status))

# users[1].fall_in_jail()

console_thread = threading.Thread(target=Biliconsole(loop).cmdloop)
console_thread.start()

danmu_tasks = [connect.RaffleConnect(i).run() for i in area_ids]

yj_danmu_roomid = dict_user['other_control']['raffle_minitor_roomid']
danmu_tasks.append(connect.YjConnection(yj_danmu_roomid).run())

default_monitor_roomid = dict_user['other_control']['default_monitor_roomid']
connect.init_danmu_roomid(default_monitor_roomid)
danmu_tasks.append(connect.run_danmu())
Esempio n. 4
0
bili_sched.add_daily_jobs(RecvHeartGiftTask, 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)

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']


# aiohttp sb session
async def init_monitors():
    yjmonitor_tcp_addr = other_control['yjmonitor_tcp_addr']
    yjmonitor_tcp_key = other_control['yjmonitor_tcp_key']

    raffle_danmu_areaids = area_ids
    printer_danmu_roomid = default_roomid
    yjmonitor_tcp_addr = yjmonitor_tcp_addr
Esempio n. 5
0
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)

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']


# aiohttp sb session
async def init_monitors():
    yjmonitor_tcp_addr = other_control['yjmonitor_tcp_addr']
    yjmonitor_tcp_key = other_control['yjmonitor_tcp_key']

    raffle_danmu_areaids = area_ids
    printer_danmu_roomid = default_roomid
    yjmonitor_tcp_addr = yjmonitor_tcp_addr
Esempio n. 6
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()