[add] ActivityLottery fixed #41

This commit is contained in:
Lkeme 2020-08-08 16:19:06 +08:00
parent 100b1adc6c
commit 2918c9a52e
11 changed files with 220 additions and 40 deletions

1
.gitignore vendored
View File

@ -22,5 +22,6 @@ Traits/
README1.md
conf/user.conf
/conf/user.conf
/conf/test.conf
/log/
/src/backup/

View File

@ -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
View File

@ -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 |主站活动 |
## 打赏赞助
![](https://i.loli.net/2019/07/13/5d2963e5cc1eb22973.png)

View File

@ -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
---- 免费的东西总是得不到人的珍惜。

View File

@ -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

View File

@ -70,6 +70,7 @@ class App
'Daily',
'ManGa',
'Match',
'ActivityLottery',
'Competition',
'Heart',
'Task',

View File

@ -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.

View 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;
}
}

View File

@ -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':
// 服务端心跳推送

View File

@ -138,6 +138,7 @@ class SmallHeart
$x_data = self::xHeartBeat(self::$hb_count);
if (!$x_data['status']) {
// 错误级别
self::resetVar();
return;
}
self::$hb_count += 1;

View File

@ -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']);
}