diff --git a/CHANGELOG.md b/CHANGELOG.md index a7ca49a..8ae1fb5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -28,6 +28,7 @@ - 修复部分已知BUG - 修复获奖推送通知 - 修复休眠中心异常 +- 修复礼物赠送异常 - ## v0.0.5.191223 alpha (2019-12-23) diff --git a/src/plugin/GiftSend.php b/src/plugin/GiftSend.php index 4165766..ee1aeb1 100644 --- a/src/plugin/GiftSend.php +++ b/src/plugin/GiftSend.php @@ -10,8 +10,8 @@ namespace BiliHelper\Plugin; -use BiliHelper\Core\Log; use BiliHelper\Core\Curl; +use BiliHelper\Core\Log; use BiliHelper\Util\TimeLock; class GiftSend @@ -55,13 +55,13 @@ class GiftSend self::getMedalList(); foreach (self::$medal_list as $key => $val) { $bag_list = self::fetchBagList(); - array_multisort(array_column($bag_list, "expire_at"), SORT_ASC, $bag_list); if (getenv('FEED_FILL') == 'false') { $bag_list = self::checkExpireGift($bag_list); } if (count($bag_list)) { self::$tid = $key; self::getRoomInfo(); + array_multisort(array_column($bag_list, "expire_at"), SORT_ASC, $bag_list); } else { break; } @@ -119,26 +119,28 @@ class GiftSend */ protected static function fetchBagList(): array { - $bag_list = []; + $new_bag_list = []; $payload = []; $data = Curl::get('https://api.live.bilibili.com/gift/v2/gift/bag_list', Sign::api($payload)); $data = json_decode($data, true); if (isset($data['code']) && $data['code']) { Log::warning('背包查看失败!', ['msg' => $data['message']]); - return $bag_list; + return $new_bag_list; } if (isset($data['data']['list'])) { $bag_list = $data['data']['list']; - array_multisort(array_column($bag_list, "gift_id"), SORT_DESC, $bag_list); + if (count($bag_list)) { + array_multisort(array_column($bag_list, "gift_id"), SORT_DESC, $bag_list); + } foreach ($bag_list as $vo) { // 去除永久礼物 if ($vo['corner_mark'] == '永久') { continue; } - array_push($bag_list, $vo); + array_push($new_bag_list, $vo); } } - return $bag_list; + return $new_bag_list; } diff --git a/src/plugin/Sleep.php b/src/plugin/Sleep.php index 132b41a..9bc6203 100644 --- a/src/plugin/Sleep.php +++ b/src/plugin/Sleep.php @@ -18,7 +18,9 @@ use BiliHelper\Util\TimeLock; class Sleep { use TimeLock; - // TODO 黑白名单 考虑添加到每个插件内部自动添加 + // TODO 黑白名单|考虑添加到每个插件内部自动添加|优化RUN逻辑代码 + private static $unlock_hour = 24; + private static $unlock_time = 0; private static $fillable = ['Login', 'Sleep', 'Daily', 'MasterSite', 'GiftSend', 'Task', 'Silver2Coin', 'GroupSignIn', 'GiftHeart', 'AwardRecord', 'Statistics']; private static $guarded = ['Barrage', 'Heart', 'Silver', 'MaterialObject', 'AloneTcpClient', 'ZoneTcpClient', 'StormRaffle', 'GuardRaffle', 'PkRaffle', 'GiftRaffle', 'AnchorRaffle']; private static $sleep_section = []; @@ -26,12 +28,29 @@ class Sleep public static function run() { - if (getenv('USE_SLEEP') == 'false' || self::getLock() > time()) { + if (self::getLock() > time()) { return; - }; - if (!self::isPause() && !self::isRefuse()) { - self::setLock(5 * 60); + } else { + self::setLock(1 * 60); } + // 封禁逻辑 + if (self::$unlock_time < time()) { + if (!self::isRefuse()) { + self::setLock(5 * 60); + } else { + self::setLock(1 * 60); + return; + } + } + // 休眠逻辑 + if (getenv('USE_SLEEP') != 'false' && self::$unlock_time < time() && self::$unlock_hour != date('H')) { + if (!self::isPause()) { + self::setLock(5 * 60); + } else { + self::setLock(1 * 60); + return; + } + }; } /** @@ -76,15 +95,14 @@ class Sleep */ private static function stopProc(int $unlock_time) { - $unlock_time = $unlock_time + 1 * 60; - // 检测时间提前5分钟 - self::setLock($unlock_time - 5 * 60); + self::$unlock_time = time() + $unlock_time; + self::$unlock_hour = date('H'); foreach (self::$fillable as $classname) { Log::info("插件 {$classname} 白名单,保持当前状态继续"); } foreach (self::$guarded as $classname) { Log::info("插件 {$classname} 黑名单,锁定状态将于" . date("Y-m-d H:i", time() + $unlock_time) . "解除"); - call_user_func(array(__NAMESPACE__ . '\\' . $classname, 'setLock'), $unlock_time); + call_user_func(array(__NAMESPACE__ . '\\' . $classname, 'setLock'), $unlock_time + 3 * 60); } } } \ No newline at end of file