mirror of
https://github.com/lkeme/BiliHelper-personal.git
synced 2025-12-19 09:30:10 +08:00
[add] ActivityLottery fixed #41
This commit is contained in:
parent
100b1adc6c
commit
2918c9a52e
1
.gitignore
vendored
1
.gitignore
vendored
@ -22,5 +22,6 @@ Traits/
|
||||
README1.md
|
||||
conf/user.conf
|
||||
/conf/user.conf
|
||||
/conf/test.conf
|
||||
/log/
|
||||
/src/backup/
|
||||
15
CHANGELOG.md
15
CHANGELOG.md
@ -1,6 +1,21 @@
|
||||
# Release Notes
|
||||
# 本项目Log
|
||||
|
||||
## v0.6.5.200808 alpha (2020-08-08)
|
||||
|
||||
### Added
|
||||
- 添加小心心支持
|
||||
- 添加活动抽奖
|
||||
-
|
||||
|
||||
### Changed
|
||||
- 去掉无效双端观看
|
||||
- 过期小心心赠送
|
||||
|
||||
### Fixed
|
||||
- 修复小心心心跳错误
|
||||
-
|
||||
|
||||
## v0.6.0.200730 alpha (2020-07-30)
|
||||
|
||||
### Added
|
||||
|
||||
59
DOC.md
59
DOC.md
@ -2,7 +2,7 @@
|
||||
<p align="center"><img width="300px" src="https://i.loli.net/2018/04/20/5ad97bd395912.jpeg"></p>
|
||||
|
||||
<p align="center">
|
||||
<img src="https://img.shields.io/badge/version-0.6.0.200730 alpha-green.svg?longCache=true&style=for-the-badge">
|
||||
<img src="https://img.shields.io/badge/version-0.6.5.200808 alpha-green.svg?longCache=true&style=for-the-badge">
|
||||
<img src="https://img.shields.io/badge/license-mit-blue.svg?longCache=true&style=for-the-badge">
|
||||
</p>
|
||||
|
||||
@ -15,34 +15,35 @@ B 站直播实用脚本
|
||||
|
||||
|plugin |version |description |
|
||||
|--------------------|--------------------|--------------------|
|
||||
|Login |20.07.30 |账号登录 |
|
||||
|Schedule |20.07.30 |休眠控制 |
|
||||
|MasterSite |20.07.30 |主站助手 |
|
||||
|Daily |20.07.30 |每日礼包 |
|
||||
|Heart |20.07.30 |双端心跳 |
|
||||
|Task |20.07.30 |每日任务 |
|
||||
|Silver |20.07.30 |银瓜子宝箱 |
|
||||
|Barrage |20.07.30 |活跃弹幕 |
|
||||
|Silver2Coin |20.07.30 |银瓜子换硬币 |
|
||||
|GiftSend |20.07.30 |礼物赠送 |
|
||||
|Judge |20.07.30 |风纪 |
|
||||
|GroupSignIn |20.07.30 |友爱社签到 |
|
||||
|ManGa |20.07.30 |漫画签到分享 |
|
||||
|Match |20.07.30 |赛事签到分享 |
|
||||
|GiftHeart |20.07.30 |心跳礼物 |
|
||||
|MaterialObject |20.07.30 |实物抽奖 |
|
||||
|AloneTcpClient |20.07.30 |独立监控 |
|
||||
|ZoneTcpClient |20.07.30 |分区监控 |
|
||||
|StormRaffle |20.07.30 |节奏风暴 |
|
||||
|GiftRaffle |20.07.30 |活动礼物 |
|
||||
|PkRaffle |20.07.30 |大乱斗 |
|
||||
|GuardRaffle |20.07.30 |舰长总督 |
|
||||
|AnchorRaffle |20.07.30 |天选时刻 |
|
||||
|AwardRecord |20.07.30 |获奖通知 |
|
||||
|Statistics |20.07.30 |数据统计 |
|
||||
|Competition |20.07.30 |赛事竞猜 |
|
||||
|SmallHeart |20.07.30 |小心心 |
|
||||
|
||||
|Login |20.08.08 |账号登录 |
|
||||
|Schedule |20.08.08 |休眠控制 |
|
||||
|MasterSite |20.08.08 |主站助手 |
|
||||
|Daily |20.08.08 |每日礼包 |
|
||||
|Heart |20.08.08 |双端心跳 |
|
||||
|Task |20.08.08 |每日任务 |
|
||||
|Silver |20.08.08 |银瓜子宝箱 |
|
||||
|Barrage |20.08.08 |活跃弹幕 |
|
||||
|Silver2Coin |20.08.08 |银瓜子换硬币 |
|
||||
|GiftSend |20.08.08 |礼物赠送 |
|
||||
|Judge |20.08.08 |风纪 |
|
||||
|GroupSignIn |20.08.08 |友爱社签到 |
|
||||
|ManGa |20.08.08 |漫画签到分享 |
|
||||
|Match |20.08.08 |赛事签到分享 |
|
||||
|GiftHeart |20.08.08 |心跳礼物 |
|
||||
|MaterialObject |20.08.08 |实物抽奖 |
|
||||
|AloneTcpClient |20.08.08 |独立监控 |
|
||||
|ZoneTcpClient |20.08.08 |分区监控 |
|
||||
|StormRaffle |20.08.08 |节奏风暴 |
|
||||
|GiftRaffle |20.08.08 |活动礼物 |
|
||||
|PkRaffle |20.08.08 |大乱斗 |
|
||||
|GuardRaffle |20.08.08 |舰长总督 |
|
||||
|AnchorRaffle |20.08.08 |天选时刻 |
|
||||
|AwardRecord |20.08.08 |获奖通知 |
|
||||
|Statistics |20.08.08 |数据统计 |
|
||||
|Competition |20.08.08 |赛事竞猜 |
|
||||
|SmallHeart |20.08.08 |小心心 |
|
||||
|ActivityLottery |20.08.08 |主站活动 |
|
||||
|
||||
## 打赏赞助
|
||||
|
||||

|
||||
|
||||
@ -7,7 +7,7 @@ Group: [55308141](https://jq.qq.com/?_wv=1027&k=5AIDaJg) | **仅用于BUG提交
|
||||
|
||||
## 公告
|
||||
|
||||
> Currently for Personal Edition **0.6.0.200730 alpha**
|
||||
> Currently for Personal Edition **0.6.5.200808 alpha**
|
||||
|
||||
```notice
|
||||
---- 免费的东西总是得不到人的珍惜。
|
||||
|
||||
@ -67,6 +67,9 @@ USE_MANGA=false
|
||||
# 赛事助手
|
||||
USE_MATCH=false
|
||||
|
||||
# 活动助手
|
||||
USE_ACTIVITY=false
|
||||
|
||||
# 破产机|每日竞猜次数|每次竞猜硬币(1-10)|下注(1.压大,2.压小,3.随机)
|
||||
USE_COMPETITION=false
|
||||
COMPET_MAX_NUM=20
|
||||
|
||||
@ -70,6 +70,7 @@ class App
|
||||
'Daily',
|
||||
'ManGa',
|
||||
'Match',
|
||||
'ActivityLottery',
|
||||
'Competition',
|
||||
'Heart',
|
||||
'Task',
|
||||
|
||||
@ -13,7 +13,7 @@ namespace BiliHelper\Core;
|
||||
class Env
|
||||
{
|
||||
private $app_name = 'BiliHelper Personal';
|
||||
private $app_version = '0.6.0.*';
|
||||
private $app_version = '0.6.5.*';
|
||||
|
||||
/**
|
||||
* Env constructor.
|
||||
|
||||
153
src/plugin/ActivityLottery.php
Normal file
153
src/plugin/ActivityLottery.php
Normal file
@ -0,0 +1,153 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Website: https://mudew.com/
|
||||
* Author: Lkeme
|
||||
* License: The MIT License
|
||||
* Email: Useri@live.cn
|
||||
* Updated: 2020 ~ 2021
|
||||
*/
|
||||
|
||||
namespace BiliHelper\Plugin;
|
||||
|
||||
use BiliHelper\Core\Log;
|
||||
use BiliHelper\Core\Curl;
|
||||
use BiliHelper\Util\TimeLock;
|
||||
|
||||
class ActivityLottery
|
||||
{
|
||||
use TimeLock;
|
||||
|
||||
private static $activity_infos = [
|
||||
'2020SummerMusic' => [
|
||||
'sid' => 'dd83a687-c800-11ea-8597-246e966235d8',
|
||||
'action_types' => [3, 4], // 4 关注 3 分享
|
||||
'referer' => 'https://www.bilibili.com/blackboard/2020SummerMusic.html',
|
||||
'expired_time' => 1599318000, // 2020-09-05 23:00:00
|
||||
'draw_times' => 3,
|
||||
],
|
||||
];
|
||||
|
||||
public static function run()
|
||||
{
|
||||
if (self::getLock() > time() || getenv('USE_ACTIVITY') == 'false') {
|
||||
return;
|
||||
}
|
||||
self::workTask();
|
||||
self::setLock(self::timing(5));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @use 运行任务
|
||||
*/
|
||||
private static function workTask()
|
||||
{
|
||||
foreach (self::$activity_infos as $title => $activity) {
|
||||
// 过期
|
||||
if ($activity['expired_time'] < time()) {
|
||||
Log::info('跳过');
|
||||
continue;
|
||||
}
|
||||
Log::info("启动 {$title} 抽奖任务");
|
||||
self::initTimes($activity['sid'], $activity['referer']);
|
||||
foreach ($activity['action_types'] as $action_type) {
|
||||
sleep(1);
|
||||
self::addTimes($activity['sid'], $activity['referer'], $action_type);
|
||||
}
|
||||
foreach (range(1, $activity['draw_times']) as $num) {
|
||||
sleep(5);
|
||||
self::doLottery($activity['sid'], $activity['referer'], $num);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @use 获取抽奖机会
|
||||
* @param string $sid
|
||||
* @param string $referer
|
||||
* @return bool
|
||||
*/
|
||||
private static function initTimes(string $sid, string $referer): bool
|
||||
{
|
||||
$url = 'https://api.bilibili.com/x/activity/lottery/mytimes';
|
||||
$headers = [
|
||||
'origin' => 'https://www.bilibili.com',
|
||||
'referer' => $referer
|
||||
];
|
||||
$payload = [
|
||||
'sid' => $sid,
|
||||
];
|
||||
$raw = Curl::get('pc', $url, $payload, $headers);
|
||||
$de_raw = json_decode($raw, true);
|
||||
Log::info("获取抽奖机会 {$raw}");
|
||||
// {"code":0,"message":"0","ttl":1,"data":{"times":2}}
|
||||
if ($de_raw['code'] == 0) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @use 增加抽奖机会
|
||||
* @param string $sid
|
||||
* @param string $referer
|
||||
* @param int $action_type
|
||||
* @return bool
|
||||
*/
|
||||
private static function addTimes(string $sid, string $referer, int $action_type): bool
|
||||
{
|
||||
$url = 'https://api.bilibili.com/x/activity/lottery/addtimes';
|
||||
$headers = [
|
||||
'origin' => 'https://www.bilibili.com',
|
||||
'referer' => $referer
|
||||
];
|
||||
$user_info = User::parseCookies();
|
||||
$payload = [
|
||||
'sid' => $sid,
|
||||
'action_type' => $action_type,
|
||||
'csrf' => $user_info['token']
|
||||
];
|
||||
$raw = Curl::post('pc', $url, $payload, $headers);
|
||||
$de_raw = json_decode($raw, true);
|
||||
Log::info("增加抽奖机会#{$action_type} {$raw}");
|
||||
// {"code":0,"message":"0","ttl":1}
|
||||
if ($de_raw['code'] == 0) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @use 开始抽奖
|
||||
* @param string $sid
|
||||
* @param string $referer
|
||||
* @param int $num
|
||||
* @return bool
|
||||
*/
|
||||
private static function doLottery(string $sid, string $referer, int $num): bool
|
||||
{
|
||||
$url = 'https://api.bilibili.com/x/activity/lottery/do';
|
||||
$headers = [
|
||||
'origin' => 'https://www.bilibili.com',
|
||||
'referer' => $referer
|
||||
];
|
||||
$user_info = User::parseCookies();
|
||||
$payload = [
|
||||
'sid' => $sid,
|
||||
'type' => 1,
|
||||
'csrf' => $user_info['token']
|
||||
];
|
||||
$raw = Curl::post('pc', $url, $payload, $headers);
|
||||
$de_raw = json_decode($raw, true);
|
||||
Log::notice("开始抽奖#{$num} {$raw}");
|
||||
// {"code":0,"message":"0","ttl":1,"data":[{"id":0,"mid":4133274,"num":1,"gift_id":1152,"gift_name":"硬币x6","gift_type":0,"img_url":"https://i0.hdslb.com/bfs/activity-plat/static/b6e956937ee4aefd1e19c01283145fc0/JQ9Y9-KCm_w96_h102.png","type":5,"ctime":1596255796,"cid":0}]}
|
||||
if ($de_raw['code'] == 0) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@ -25,6 +25,7 @@ class AloneTcpClient
|
||||
private static $server_addr = null;
|
||||
private static $server_key = null;
|
||||
private static $socket_timeout = 0;
|
||||
private static $max_errors_num = 0; // 最大连续错误5次
|
||||
|
||||
/**
|
||||
* @use 入口
|
||||
@ -226,15 +227,19 @@ class AloneTcpClient
|
||||
case 'entered':
|
||||
// 握手确认
|
||||
Log::info("确认到推送服务器 {$raw_data['type']}");
|
||||
self::$max_errors_num = 0;
|
||||
break;
|
||||
case 'error':
|
||||
// 产生错误
|
||||
Log::error("推送服务器异常 {$raw_data['data']['msg']}, 程序挂起请手动关闭!");
|
||||
// KEY到期推送提醒
|
||||
Notice::push('key_expired', '');
|
||||
// 程序挂起 防止systemd无限重启导致触发过多推送提醒
|
||||
sleep(86400);
|
||||
exit();
|
||||
Log::error("推送服务器异常 {$raw_data['data']['msg']}, 程序错误5次后将挂起, 请手动关闭!");
|
||||
if (self::$max_errors_num == 5) {
|
||||
// KEY到期推送提醒
|
||||
Notice::push('key_expired', '');
|
||||
// 程序挂起 防止systemd无限重启导致触发过多推送提醒
|
||||
sleep(86400);
|
||||
exit();
|
||||
}
|
||||
self::$max_errors_num += 1;
|
||||
break;
|
||||
case 'heartbeat':
|
||||
// 服务端心跳推送
|
||||
|
||||
@ -138,6 +138,7 @@ class SmallHeart
|
||||
$x_data = self::xHeartBeat(self::$hb_count);
|
||||
if (!$x_data['status']) {
|
||||
// 错误级别
|
||||
self::resetVar();
|
||||
return;
|
||||
}
|
||||
self::$hb_count += 1;
|
||||
|
||||
@ -25,9 +25,9 @@ class Task
|
||||
}
|
||||
|
||||
$data = self::check();
|
||||
if (isset($data['data']['double_watch_info'])) {
|
||||
self::double_watch_info($data['data']['double_watch_info']);
|
||||
}
|
||||
// if (isset($data['data']['double_watch_info'])) {
|
||||
// self::double_watch_info($data['data']['double_watch_info']);
|
||||
// }
|
||||
if (isset($data['data']['sign_info'])) {
|
||||
self::sign_info($data['data']['sign_info']);
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user