Showing preview only (1,697K chars total). Download the full file or copy to clipboard to get everything.
Repository: RayWangQvQ/BiliBiliToolPro
Branch: main
Commit: d552d69817cf
Files: 597
Total size: 1.5 MB
Directory structure:
gitextract__of0gs4z/
├── .config/
│ └── dotnet-tools.json
├── .dockerignore
├── .editorconfig
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug-report----.md
│ │ ├── bug-report-qinglong----.md
│ │ ├── feature-request----.md
│ │ └── other----.md
│ ├── PULL_REQUEST_TEMPLATE.md
│ ├── pull.yml
│ └── workflows/
│ ├── auto-deploy-tencent-scf.yml
│ ├── codeql-analysis.yml
│ ├── no-toxic-comments.yml
│ ├── publish-image.yml
│ ├── publish-release.yml
│ ├── repo-sync.yml
│ ├── stale-issues.yml
│ ├── tag.yml
│ └── verify-pr.yml
├── .gitignore
├── .husky/
│ ├── pre-commit
│ └── task-runner.json
├── CHANGELOG.md
├── Directory.Packages.props
├── Dockerfile
├── LICENSE
├── README.md
├── Ray.BiliBiliTool.sln
├── bruno/
│ ├── api.bilibili.com/
│ │ └── x/
│ │ ├── space/
│ │ │ ├── folder.bru
│ │ │ └── wbi-acc-info.bru
│ │ └── vip/
│ │ ├── folder.bru
│ │ ├── vip_center/
│ │ │ ├── folder.bru
│ │ │ └── sign_in/
│ │ │ ├── folder.bru
│ │ │ └── three_days_sign.bru
│ │ └── web/
│ │ ├── folder.bru
│ │ └── vip_center/
│ │ ├── folder.bru
│ │ ├── modules.bru
│ │ └── v2.bru
│ ├── app.bilibili.com/
│ │ ├── folder.bru
│ │ ├── pgc/
│ │ │ └── activity/
│ │ │ ├── deliver/
│ │ │ │ ├── material/
│ │ │ │ │ └── receive.bru
│ │ │ │ └── task/
│ │ │ │ ├── complete-ogv.bru
│ │ │ │ └── complete.bru
│ │ │ └── score/
│ │ │ └── task/
│ │ │ └── receive/
│ │ │ └── v2/
│ │ │ ├── dressbuyamount.bru
│ │ │ ├── ogvwatchnew.bru
│ │ │ ├── tvodbuy.bru
│ │ │ └── vipmallbuy.bru
│ │ └── x/
│ │ └── report/
│ │ └── heartbeat/
│ │ └── mobile/
│ │ ├── end.bru
│ │ └── start.bru
│ ├── big.bilibili.com/
│ │ ├── pgc/
│ │ │ └── activity/
│ │ │ └── score/
│ │ │ └── task/
│ │ │ └── sign.bru
│ │ └── x/
│ │ └── vip/
│ │ └── experience/
│ │ └── add.bru
│ ├── bruno.json
│ ├── environments/
│ │ └── default.bru
│ ├── mall.bilibili.com/
│ │ ├── combine.bru
│ │ ├── folder.bru
│ │ └── sign2.bru
│ └── passport.bilibili.com/
│ └── x/
│ ├── passport-login/
│ │ ├── oauth2/
│ │ │ └── login.bru
│ │ └── web/
│ │ └── key.bru
│ ├── relation/
│ │ ├── followings/
│ │ │ └── simple.bru
│ │ └── tag/
│ │ └── special.bru
│ ├── v2/
│ │ ├── account/
│ │ │ └── myinfo.bru
│ │ └── feed/
│ │ └── index.bru
│ └── vip/
│ └── web/
│ └── vip_center/
│ └── v2.bru
├── common.props
├── docker/
│ ├── README.md
│ ├── build/
│ │ ├── buildAndPushImage_multiArch.ps1
│ │ ├── buildImage.cmd
│ │ ├── buildImage_amd64.cmd
│ │ └── buildImage_arm64.cmd
│ ├── entrypoint.sh
│ ├── install.sh
│ └── sample/
│ ├── config/
│ │ └── cookies.json
│ └── docker-compose.yml
├── docs/
│ ├── claw-cloud.md
│ ├── configuration.md
│ ├── donate-list.md
│ ├── questions.md
│ └── runInLocal.md
├── gitHubActions/
│ ├── README.md
│ └── bak/
│ ├── bilibili-daily-task.yml
│ ├── empty-task.yml
│ ├── live-lottery-task.yml
│ └── unfollow-batched-task.yml
├── helm/
│ ├── README.md
│ └── bilibili-tool/
│ ├── Chart.yaml
│ ├── templates/
│ │ ├── NOTES.txt
│ │ ├── _helpers.tpl
│ │ ├── configmap.yaml
│ │ └── deployment.yaml
│ └── values.yaml
├── krew/
│ ├── .gitignore
│ ├── Makefile
│ ├── README.md
│ ├── cmd/
│ │ └── kubectl-bilipro.go
│ ├── config.yaml
│ ├── go.mod
│ ├── go.sum
│ └── pkg/
│ ├── cmd/
│ │ ├── cmd.go
│ │ ├── delete.go
│ │ ├── get.go
│ │ ├── init.go
│ │ └── version.go
│ ├── options/
│ │ └── deployment.go
│ ├── resources/
│ │ ├── asset.go
│ │ └── base/
│ │ ├── bilibiliPro/
│ │ │ └── deployment.yaml
│ │ └── ns/
│ │ └── namespace.yaml
│ └── utils/
│ ├── client.go
│ ├── client_test.go
│ ├── cmd.go
│ ├── cmd_test.go
│ ├── error.go
│ ├── error_test.go
│ ├── fileSys.go
│ └── fileSys_test.go
├── podman/
│ ├── README.md
│ └── build/
│ └── buildImage.cmd
├── qinglong/
│ ├── DefaultTasks/
│ │ ├── bili_task_base.sh
│ │ ├── bili_task_charge.sh
│ │ ├── bili_task_daily.sh
│ │ ├── bili_task_liveFansMedal.sh
│ │ ├── bili_task_liveLottery.sh
│ │ ├── bili_task_login.sh
│ │ ├── bili_task_manga.sh
│ │ ├── bili_task_manga_privilege.sh
│ │ ├── bili_task_silver2coin.sh
│ │ ├── bili_task_test.sh
│ │ ├── bili_task_tryFix.sh
│ │ ├── bili_task_unfollowBatched.sh
│ │ ├── bili_task_vipBigPoint.sh
│ │ ├── bili_task_vip_privilege.sh
│ │ └── dev/
│ │ ├── bili_dev_task_base.sh
│ │ ├── bili_dev_task_charge.sh
│ │ ├── bili_dev_task_daily.sh
│ │ ├── bili_dev_task_liveFansMedal.sh
│ │ ├── bili_dev_task_liveLottery.sh
│ │ ├── bili_dev_task_login.sh
│ │ ├── bili_dev_task_manga.sh
│ │ ├── bili_dev_task_manga_privilege.sh
│ │ ├── bili_dev_task_silver2coin.sh
│ │ ├── bili_dev_task_test.sh
│ │ ├── bili_dev_task_tryFix.sh
│ │ ├── bili_dev_task_unfollowBatched.sh
│ │ ├── bili_dev_task_vipBigPoint.sh
│ │ └── bili_dev_task_vip_privilege.sh
│ ├── README.md
│ ├── bak/
│ │ ├── bili_dev_task_get_cookie.py.bak
│ │ └── bili_task_get_cookie.py.bak
│ ├── dotnet-install.sh
│ ├── extra.sh
│ └── ray-dotnet-install.sh
├── scripts/
│ ├── clean.cmd
│ ├── publish.bat
│ ├── publish.ps1
│ ├── publish.sh
│ └── ut.ps1
├── src/
│ ├── BlazingQuartz.Core/
│ │ ├── BlazingQuartz.Core.csproj
│ │ ├── BlazingQuartzCoreOptions.cs
│ │ ├── Constants.cs
│ │ ├── Events/
│ │ │ ├── EventArgs.cs
│ │ │ ├── JobWasExecutedEventArgs.cs
│ │ │ ├── SchedulerErrorEventArgs.cs
│ │ │ └── TriggerEventArgs.cs
│ │ ├── Extensions/
│ │ │ └── ModelExtensions.cs
│ │ ├── Helpers/
│ │ │ └── CronExpressionHelper.cs
│ │ ├── History/
│ │ │ ├── BaseExecutionLogRawSqlProvider.cs
│ │ │ ├── ExecutionLogStore.cs
│ │ │ ├── IExecutionLogRawSqlProvider.cs
│ │ │ ├── IExecutionLogStore.cs
│ │ │ ├── ISchedulerEventLoggingService.cs
│ │ │ └── SchedulerEventLoggingService.cs
│ │ ├── Jobs/
│ │ │ └── HousekeepExecutionLogsJob.cs
│ │ ├── Models/
│ │ │ ├── ExecutionLogFilter.cs
│ │ │ ├── JobDetailModel.cs
│ │ │ ├── JobExecutionStatusSummaryModel.cs
│ │ │ ├── Key.cs
│ │ │ ├── PagedList.cs
│ │ │ ├── ScheduleJobFilter.cs
│ │ │ ├── ScheduleModel.cs
│ │ │ └── TriggerDetailModel.cs
│ │ ├── ServiceCollectionExtensions.cs
│ │ └── Services/
│ │ ├── ExecutionLogService.cs
│ │ ├── IExecutionLogService.cs
│ │ ├── ISchedulerDefinitionService.cs
│ │ ├── ISchedulerListenerService.cs
│ │ ├── ISchedulerService.cs
│ │ ├── SchedulerDefinitionService.cs
│ │ ├── SchedulerListenerService.cs
│ │ └── SchedulerService.cs
│ ├── BlazingQuartz.Jobs/
│ │ ├── BlazingQuartz.Jobs.csproj
│ │ ├── Constants.cs
│ │ ├── HttpAction.cs
│ │ ├── HttpJob.cs
│ │ └── ServiceCollectionExtensions.cs
│ ├── BlazingQuartz.Jobs.Abstractions/
│ │ ├── BlazingQuartz.Jobs.Abstractions.csproj
│ │ ├── DataMapValue.cs
│ │ ├── DataMapValueResolver.cs
│ │ ├── DataMapValueType.cs
│ │ ├── IDataMapValueResolver.cs
│ │ ├── IJobUI.cs
│ │ ├── JobDataMapKeys.cs
│ │ ├── JobExecutionContextExtensions.cs
│ │ ├── Processors/
│ │ │ ├── InterpolatedStringV1Processor.cs
│ │ │ └── SystemVariableV1Provider.cs
│ │ ├── Resolvers/
│ │ │ ├── IResolver.cs
│ │ │ └── V1/
│ │ │ ├── DateTimeVariableResolver.cs
│ │ │ ├── GuidVariableResolver.cs
│ │ │ └── LocalDateTimeVariableResolver.cs
│ │ ├── ServiceCollectionExtensions.cs
│ │ └── VariableNameContants.cs
│ ├── Ray.BiliBiliTool.Agent/
│ │ ├── Attributes/
│ │ │ ├── AppendHeaderAttribute.cs
│ │ │ ├── AppendHeaderType.cs
│ │ │ └── LogFilterAttribute.cs
│ │ ├── BiliBiliAgent/
│ │ │ ├── Attributes/
│ │ │ │ └── WbiParameterAttribute.cs
│ │ │ ├── Dtos/
│ │ │ │ ├── AddCoinRequest.cs
│ │ │ │ ├── Article/
│ │ │ │ │ ├── AddCoinForArticleRequest.cs
│ │ │ │ │ ├── SearchArticleInfoResponse.cs
│ │ │ │ │ ├── SearchArticlesByUpIdFullFto.cs
│ │ │ │ │ └── SearchUpArticlesResponse.cs
│ │ │ │ ├── BaseAppRequest.cs
│ │ │ │ ├── BiliApiResponse.cs
│ │ │ │ ├── BiliPageResult.cs
│ │ │ │ ├── ChargeCommentRequest.cs
│ │ │ │ ├── ChargeRequest.cs
│ │ │ │ ├── ChargeResponse.cs
│ │ │ │ ├── CoinBalance.cs
│ │ │ │ ├── DailyTaskInfo.cs
│ │ │ │ ├── DonatedCoinsForVideo.cs
│ │ │ │ ├── GetAlreadyDonatedCoinsRequest.cs
│ │ │ │ ├── GetSpaceInfoFullDto.cs
│ │ │ │ ├── GetSpaceInfoResponse.cs
│ │ │ │ ├── GetSpecialFollowingsRequest.cs
│ │ │ │ ├── GetVideosResponse.cs
│ │ │ │ ├── Live/
│ │ │ │ │ ├── AreaDto.cs
│ │ │ │ │ ├── CheckTianXuanDto.cs
│ │ │ │ │ ├── EnterRoomRequest.cs
│ │ │ │ │ ├── ExchangeSilverStatusResponse.cs
│ │ │ │ │ ├── GetListRequest.cs
│ │ │ │ │ ├── GetLiveRoomInfoResponse.cs
│ │ │ │ │ ├── HeartBeatRequest.cs
│ │ │ │ │ ├── HeartBeatResponse.cs
│ │ │ │ │ ├── JoinTianXuanRequest.cs
│ │ │ │ │ ├── JoinTianXuanResponse.cs
│ │ │ │ │ ├── LikeLiveRoomRequest.cs
│ │ │ │ │ ├── ListItemDto.cs
│ │ │ │ │ ├── LiveSignResponse.cs
│ │ │ │ │ ├── LiveWalletStatusResponse.cs
│ │ │ │ │ ├── MedalWallDto.cs
│ │ │ │ │ ├── SendLiveDanmukuRequest.cs
│ │ │ │ │ ├── Silver2CoinRequest.cs
│ │ │ │ │ ├── Silver2CoinResponse.cs
│ │ │ │ │ ├── WearMedalWallRequest.cs
│ │ │ │ │ ├── WebHeartBeatRequest.cs
│ │ │ │ │ └── WebHeartBeatResponse.cs
│ │ │ │ ├── Mall/
│ │ │ │ │ ├── GetCombineRequest.cs
│ │ │ │ │ ├── PointInfo.cs
│ │ │ │ │ ├── Sign2Request.cs
│ │ │ │ │ ├── Sign2RequestPath.cs
│ │ │ │ │ ├── Sign2Response.cs
│ │ │ │ │ ├── TaskInfo.cs
│ │ │ │ │ └── VipBigPointCombine.cs
│ │ │ │ ├── MangaVipRewardResponse.cs
│ │ │ │ ├── Passport/
│ │ │ │ │ ├── GetSsoListResponse.cs
│ │ │ │ │ ├── QrCodeDto.cs
│ │ │ │ │ └── TokenDto.cs
│ │ │ │ ├── RankingInfo.cs
│ │ │ │ ├── Relation/
│ │ │ │ │ ├── CopyUserToGroupRequest.cs
│ │ │ │ │ ├── CreateTagRequest.cs
│ │ │ │ │ ├── CreateTagResponse.cs
│ │ │ │ │ ├── GetFollowingsRequest.cs
│ │ │ │ │ ├── GetFollowingsResponse.cs
│ │ │ │ │ ├── ModifyRelationRequest.cs
│ │ │ │ │ └── TagDto.cs
│ │ │ │ ├── SearchUpVideosResponse.cs
│ │ │ │ ├── ShareVideoRequest.cs
│ │ │ │ ├── UpInfo.cs
│ │ │ │ ├── UploadVideoHeartbeatRequest.cs
│ │ │ │ ├── UserInfo.cs
│ │ │ │ ├── Video/
│ │ │ │ │ ├── GetBangumiBySsidResponse.cs
│ │ │ │ │ └── SearchVideosByUpIdFullDto.cs
│ │ │ │ ├── VideoDetail.cs
│ │ │ │ ├── VideoInfo.cs
│ │ │ │ ├── ViewMall/
│ │ │ │ │ └── ViewvipMallRequest.cs
│ │ │ │ ├── VipPrivilegeType.cs
│ │ │ │ ├── VipStatus.cs
│ │ │ │ ├── VipTask/
│ │ │ │ │ ├── CompleteOgvWatchRequest.cs
│ │ │ │ │ ├── ReceiveOrCompleteTaskRequest.cs
│ │ │ │ │ ├── SignRequest.cs
│ │ │ │ │ ├── StartOgvWatchRequest.cs
│ │ │ │ │ ├── StartOgvWatchResponse.cs
│ │ │ │ │ ├── ThreeDaysSign/
│ │ │ │ │ │ ├── BigPointDto.cs
│ │ │ │ │ │ ├── ThreeDaySignDto.cs
│ │ │ │ │ │ ├── ThreeDaySignRequest.cs
│ │ │ │ │ │ └── ThreeDaySignResponse.cs
│ │ │ │ │ ├── ViewRequest.cs
│ │ │ │ │ ├── VipExperienceRequest.cs
│ │ │ │ │ └── VouchersInfoResponse.cs
│ │ │ │ └── VipType.cs
│ │ │ ├── Interfaces/
│ │ │ │ ├── IAccountApi.cs
│ │ │ │ ├── IArticleApi.cs
│ │ │ │ ├── IBiliBiliApi.cs
│ │ │ │ ├── IChargeApi.cs
│ │ │ │ ├── IDailyTaskApi.cs
│ │ │ │ ├── IHomeApi.cs
│ │ │ │ ├── ILiveApi.cs
│ │ │ │ ├── ILiveTraceApi.cs
│ │ │ │ ├── IMallApi.cs
│ │ │ │ ├── IMangaApi.cs
│ │ │ │ ├── IPassportApi.cs
│ │ │ │ ├── IRelationApi.cs
│ │ │ │ ├── IUpInfoApi.cs
│ │ │ │ ├── IUserInfoApi.cs
│ │ │ │ ├── IVideoApi.cs
│ │ │ │ ├── IVipBigPointApi.cs
│ │ │ │ └── IVipMallApi.cs
│ │ │ ├── Services/
│ │ │ │ ├── IWbiService.cs
│ │ │ │ └── WbiService.cs
│ │ │ ├── Utils/
│ │ │ │ └── LiveHeartBeatCrypto.cs
│ │ │ └── WridEncryptionDelegatingHandler.cs
│ │ ├── BiliCookie.cs
│ │ ├── BiliHosts.cs
│ │ ├── Constants.cs
│ │ ├── Extensions/
│ │ │ └── ServiceCollectionExtension.cs
│ │ ├── HttpClientDelegatingHandlers/
│ │ │ ├── IntervalDelegatingHandler.cs
│ │ │ └── LogDelegatingHandler.cs
│ │ ├── QingLong/
│ │ │ ├── Dtos/
│ │ │ │ ├── AddQingLongEnv.cs
│ │ │ │ ├── QingLongEnv.cs
│ │ │ │ ├── QingLongGenericResponse.cs
│ │ │ │ ├── TokenResponse.cs
│ │ │ │ └── UpdateQingLongEnv.cs
│ │ │ └── IQingLongApi.cs
│ │ └── Ray.BiliBiliTool.Agent.csproj
│ ├── Ray.BiliBiliTool.Application/
│ │ ├── AppService.cs
│ │ ├── Attributes/
│ │ │ ├── TaskInterceptorAttribute.cs
│ │ │ └── TaskLevel.cs
│ │ ├── BaseMultiAccountsAppService.cs
│ │ ├── ChargeTaskAppService.cs
│ │ ├── DailyTaskAppService.cs
│ │ ├── Extensions/
│ │ │ └── ServiceCollectionExtension.cs
│ │ ├── FodyWeavers.xml
│ │ ├── FodyWeavers.xsd
│ │ ├── LiveFansMedalAppService.cs
│ │ ├── LiveLotteryTaskAppService.cs
│ │ ├── LoginTaskAppService.cs
│ │ ├── MangaPrivilegeTaskAppService.cs
│ │ ├── MangaTaskAppService.cs
│ │ ├── Ray.BiliBiliTool.Application.csproj
│ │ ├── Silver2CoinTaskAppService.cs
│ │ ├── TestAppService.cs
│ │ ├── UnfollowBatchedTaskAppService.cs
│ │ ├── VipBigPointAppService.cs
│ │ └── VipPrivilegeTaskAppService.cs
│ ├── Ray.BiliBiliTool.Application.Contracts/
│ │ ├── IAppService.cs
│ │ ├── IChargeTaskAppService.cs
│ │ ├── IDailyTaskAppService.cs
│ │ ├── ILiveFansMedalAppService.cs
│ │ ├── ILiveLotteryTaskAppService.cs
│ │ ├── ILoginTaskAppService.cs
│ │ ├── IMangaPrivilegeTaskAppService.cs
│ │ ├── IMangaTaskAppService.cs
│ │ ├── ISilver2CoinTaskAppService.cs
│ │ ├── ITestAppService.cs
│ │ ├── IUnfollowBatchedTaskAppService.cs
│ │ ├── IVipBigPointAppService.cs
│ │ ├── IVipPrivilegeTaskAppService.cs
│ │ ├── Ray.BiliBiliTool.Application.Contracts.csproj
│ │ └── TaskTypeFactory.cs
│ ├── Ray.BiliBiliTool.Config/
│ │ ├── Constants.cs
│ │ ├── Extensions/
│ │ │ └── ServiceCollectionExtension.cs
│ │ ├── IHasCron.cs
│ │ ├── Options/
│ │ │ ├── BaseConfigOptions.cs
│ │ │ ├── BiliBiliCookieOptions.cs
│ │ │ ├── ChargeTaskOptions.cs
│ │ │ ├── DailyTaskOptions.cs
│ │ │ ├── IConfigOptions.cs
│ │ │ ├── LiveFansMedalTaskOptions.cs
│ │ │ ├── LiveLotteryTaskOptions.cs
│ │ │ ├── MangaPrivilegeTaskOptions.cs
│ │ │ ├── MangaTaskOptions.cs
│ │ │ ├── QingLongOptions.cs
│ │ │ ├── SecurityOptions.cs
│ │ │ ├── Silver2CoinTaskOptions.cs
│ │ │ ├── UnfollowBatchedTaskOptions.cs
│ │ │ ├── VipBigPointOptions.cs
│ │ │ └── VipPrivilegeOptions.cs
│ │ ├── Ray.BiliBiliTool.Config.csproj
│ │ └── SQLite/
│ │ ├── SqliteConfigurationExtensions.cs
│ │ ├── SqliteConfigurationProvider.cs
│ │ └── SqliteConfigurationSource.cs
│ ├── Ray.BiliBiliTool.Console/
│ │ ├── BiliBiliToolHostedService.cs
│ │ ├── Program.cs
│ │ ├── Properties/
│ │ │ └── launchSettings.json
│ │ ├── Ray.BiliBiliTool.Console.csproj
│ │ ├── appsettings.Development.json
│ │ ├── appsettings.Production.json
│ │ └── appsettings.json
│ ├── Ray.BiliBiliTool.Domain/
│ │ ├── BiliLogs.cs
│ │ ├── ExecutionLog.cs
│ │ ├── ExecutionLogDetail.cs
│ │ ├── LogType.cs
│ │ ├── Ray.BiliBiliTool.Domain.csproj
│ │ └── User.cs
│ ├── Ray.BiliBiliTool.DomainService/
│ │ ├── AccountDomainService.cs
│ │ ├── ArticleDomainService.cs
│ │ ├── ChargeDomainService.cs
│ │ ├── CoinDomainService.cs
│ │ ├── DonateCoinDomainService.cs
│ │ ├── Dtos/
│ │ │ ├── FansMedalInfoDto.cs
│ │ │ ├── HeartBeatIterationInfoDto.cs
│ │ │ └── VideoInfoDto.cs
│ │ ├── Extensions/
│ │ │ └── ServiceCollectionExtensions.cs
│ │ ├── Interfaces/
│ │ │ ├── IAccountDomainService.cs
│ │ │ ├── IArticleDomainService.cs
│ │ │ ├── IChargeDomainService.cs
│ │ │ ├── ICoinDomainService.cs
│ │ │ ├── IDomainService.cs
│ │ │ ├── IDonateCoinDomainService.cs
│ │ │ ├── ILiveDomainService.cs
│ │ │ ├── ILoginDomainService.cs
│ │ │ ├── IMangaDomainService.cs
│ │ │ ├── IVideoDomainService.cs
│ │ │ ├── IVipBigPointDomainService.cs
│ │ │ └── IVipPrivilegeDomainService.cs
│ │ ├── LiveDomainService.cs
│ │ ├── LoginDomainService.cs
│ │ ├── MangaDomainService.cs
│ │ ├── Ray.BiliBiliTool.DomainService.csproj
│ │ ├── VideoDomainService.cs
│ │ ├── VipBigPointDomainService.cs
│ │ └── VipPrivilegeDomainService.cs
│ ├── Ray.BiliBiliTool.Infrastructure/
│ │ ├── Cookie/
│ │ │ ├── CookieInfo.cs
│ │ │ └── CookieStrFactory.cs
│ │ ├── Enums/
│ │ │ └── PlatformType.cs
│ │ ├── Extensions/
│ │ │ ├── ICollectionExtensions.cs
│ │ │ ├── KeyValuePairExtensions.cs
│ │ │ └── TypeExtensions.cs
│ │ ├── Global.cs
│ │ ├── Helpers/
│ │ │ ├── IpHelper.cs
│ │ │ ├── ObjectHelper.cs
│ │ │ ├── PasswordHelper.cs
│ │ │ ├── RandomHelper.cs
│ │ │ ├── RegexHelper.cs
│ │ │ └── ZipHelper.cs
│ │ ├── JsonSerializerOptionsBuilder.cs
│ │ ├── JsonSerializerOptionsBuilderExtensions.cs
│ │ └── Ray.BiliBiliTool.Infrastructure.csproj
│ ├── Ray.BiliBiliTool.Infrastructure.EF/
│ │ ├── BiliDbContext.cs
│ │ ├── DbInitializer.cs
│ │ ├── Extensions/
│ │ │ └── ServiceCollectionExtension.cs
│ │ ├── Migrations/
│ │ │ ├── 20250503105406_InitQuartz.Designer.cs
│ │ │ ├── 20250503105406_InitQuartz.cs
│ │ │ ├── 20250503164108_Update.Designer.cs
│ │ │ ├── 20250503164108_Update.cs
│ │ │ ├── 20250510130427_AddBiliLogs.Designer.cs
│ │ │ ├── 20250510130427_AddBiliLogs.cs
│ │ │ ├── 20250615100041_AddUser.Designer.cs
│ │ │ ├── 20250615100041_AddUser.cs
│ │ │ └── BiliDbContextModelSnapshot.cs
│ │ ├── README.md
│ │ └── Ray.BiliBiliTool.Infrastructure.EF.csproj
│ ├── Ray.BiliBiliTool.Web/
│ │ ├── Auth/
│ │ │ └── CustomAuthStateProvider.cs
│ │ ├── Components/
│ │ │ ├── App.razor
│ │ │ ├── Comps/
│ │ │ │ ├── BlazingJob.razor
│ │ │ │ ├── BlazingJob.razor.cs
│ │ │ │ ├── BlazingJob.razor.css
│ │ │ │ ├── BlazingJob.razor.js
│ │ │ │ ├── BlazingTrigger.razor
│ │ │ │ ├── BlazingTrigger.razor.cs
│ │ │ │ ├── BlazingTrigger.razor.css
│ │ │ │ ├── BlazingTrigger.razor.js
│ │ │ │ ├── DefaultJobUI.razor
│ │ │ │ ├── DefaultJobUI.razor.cs
│ │ │ │ └── ScheduleDialog.razor
│ │ │ ├── Layout/
│ │ │ │ ├── MainLayout.razor
│ │ │ │ ├── MainLayout.razor.css
│ │ │ │ ├── NavMenu.razor
│ │ │ │ └── NavMenu.razor.css
│ │ │ ├── Pages/
│ │ │ │ ├── Admin.razor
│ │ │ │ ├── Admin.razor.cs
│ │ │ │ ├── Admin.razor.css
│ │ │ │ ├── Admin.razor.js
│ │ │ │ ├── Configs/
│ │ │ │ │ ├── BaseConfigComponent.cs
│ │ │ │ │ ├── ChargeTaskConfig.razor
│ │ │ │ │ ├── ChargeTaskConfig.razor.cs
│ │ │ │ │ ├── DailyJobConfig.razor
│ │ │ │ │ ├── DailyJobConfig.razor.cs
│ │ │ │ │ ├── DailyJobConfig.razor.css
│ │ │ │ │ ├── DailyJobConfig.razor.js
│ │ │ │ │ ├── LiveFansMedalTaskConfig.razor
│ │ │ │ │ ├── LiveFansMedalTaskConfig.razor.cs
│ │ │ │ │ ├── LiveLotteryTaskConfig.razor
│ │ │ │ │ ├── LiveLotteryTaskConfig.razor.cs
│ │ │ │ │ ├── MangaPrivilegeTaskConfig.razor
│ │ │ │ │ ├── MangaPrivilegeTaskConfig.razor.cs
│ │ │ │ │ ├── MangaTaskConfig.razor
│ │ │ │ │ ├── MangaTaskConfig.razor.cs
│ │ │ │ │ ├── Silver2CoinTaskConfig.razor
│ │ │ │ │ ├── Silver2CoinTaskConfig.razor.cs
│ │ │ │ │ ├── UnfollowBatchedTaskConfig.razor
│ │ │ │ │ ├── UnfollowBatchedTaskConfig.razor.cs
│ │ │ │ │ ├── VipBigPointConfig.razor
│ │ │ │ │ ├── VipBigPointConfig.razor.cs
│ │ │ │ │ ├── VipPrivilegeConfig.razor
│ │ │ │ │ └── VipPrivilegeConfig.razor.cs
│ │ │ │ ├── Error.razor
│ │ │ │ ├── Home.razor
│ │ │ │ ├── Login.razor
│ │ │ │ ├── Login.razor.cs
│ │ │ │ ├── Login.razor.css
│ │ │ │ ├── Login.razor.js
│ │ │ │ └── Schedules/
│ │ │ │ ├── HistoryDialog.razor
│ │ │ │ ├── HistoryDialog.razor.cs
│ │ │ │ ├── LogsDialog.razor
│ │ │ │ ├── LogsDialog.razor.cs
│ │ │ │ ├── LogsDialog.razor.css
│ │ │ │ ├── Schedules.razor
│ │ │ │ ├── Schedules.razor.cs
│ │ │ │ ├── Schedules.razor.css
│ │ │ │ └── Schedules.razor.js
│ │ │ ├── Routes.razor
│ │ │ └── _Imports.razor
│ │ ├── Constants.cs
│ │ ├── Controllers/
│ │ │ ├── AuthController.cs
│ │ │ └── TestController.cs
│ │ ├── Extensions/
│ │ │ ├── ExecutionLogExtensions.cs
│ │ │ ├── ModelExtensions.cs
│ │ │ ├── ServiceCollectionExtension.cs
│ │ │ └── ServiceCollectionQuartzConfiguratorExtensions.cs
│ │ ├── Jobs/
│ │ │ ├── BaseJob.cs
│ │ │ ├── ChargeJob.cs
│ │ │ ├── DailyJob.cs
│ │ │ ├── LiveFansMedalJob.cs
│ │ │ ├── LiveLotteryJob.cs
│ │ │ ├── LoginJob.cs
│ │ │ ├── MangaJob.cs
│ │ │ ├── MangaPrivilegeJob.cs
│ │ │ ├── Silver2CoinJob.cs
│ │ │ ├── TestBiliJob.cs
│ │ │ ├── UnfollowBatchedJob.cs
│ │ │ ├── VipBigPointJob.cs
│ │ │ └── VipPrivilegeJob.cs
│ │ ├── Program.cs
│ │ ├── Properties/
│ │ │ └── launchSettings.json
│ │ ├── Ray.BiliBiliTool.Web.csproj
│ │ ├── Services/
│ │ │ ├── AuthService.cs
│ │ │ └── IJobUIProvider.cs
│ │ ├── appsettings.Development.json
│ │ ├── appsettings.json
│ │ └── wwwroot/
│ │ └── app.css
│ └── Ray.BiliBiliTool.Web.Client/
│ ├── Pages/
│ │ └── Counter.razor
│ ├── Program.cs
│ ├── Ray.BiliBiliTool.Web.Client.csproj
│ ├── _Imports.razor
│ └── wwwroot/
│ ├── appsettings.Development.json
│ └── appsettings.json
├── tencentScf/
│ ├── README.md
│ ├── bootstrap
│ ├── index.sh
│ ├── publish.bat
│ ├── publish.sh
│ └── serverless.yml
└── test/
├── AppServiceTest/
│ ├── AppServiceTest.csproj
│ ├── DailyTask/
│ │ └── DonateCoinsTest.cs
│ ├── Usings.cs
│ └── VipServiceTest.cs
├── BiliAgentTest/
│ ├── BiliAgentTest.csproj
│ ├── LiveTraceApiTest.cs
│ └── VideoApiTest.cs
├── ConfigTest/
│ ├── ConfigTest.csproj
│ ├── TestDefaultValue.cs
│ └── UnitTest1.cs
├── DomainServiceTest/
│ ├── ArticleDomainServiceTest.cs
│ ├── CalculateUpgradeTimeTest.cs
│ ├── DomainServiceTest.csproj
│ ├── DonateCoinDomainServiceTest.cs
│ ├── Usings.cs
│ └── VideoDomainServiceTest.cs
├── InfrastructureTest/
│ ├── InfrastructureTest.csproj
│ ├── Usings.cs
│ └── WbiHelperTest.cs
├── LogTest/
│ ├── LogConstants.cs
│ ├── LogTest.csproj
│ ├── TestCoolPush.cs
│ ├── TestDingTalk.cs
│ ├── TestMicrosoftTeams.cs
│ ├── TestPushPlus.cs
│ ├── TestServerChan.cs
│ ├── TestTelegram.cs
│ ├── TestWorkWeiXin.cs
│ └── TestWorkWeiXinApp.cs
└── Ray.BiliBiliTool.Agent.FunctionalTests/
├── AccountApiTests.cs
├── ArticleApiTests.cs
├── ChargeApiTest.cs
├── DailyTaskApiTests.cs
├── HomeApiTests.cs
├── LiveApiTest.cs
├── Ray.BiliBiliTool.Agent.FunctionalTests.csproj
├── VipBigPointApiTest.cs
├── VipMallApiTests.cs
└── WbiServiceTest.cs
================================================
FILE CONTENTS
================================================
================================================
FILE: .config/dotnet-tools.json
================================================
{
"version": 1,
"isRoot": true,
"tools": {
"csharpier": {
"version": "1.0.3",
"commands": [
"csharpier"
]
},
"husky": {
"version": "0.7.2",
"commands": [
"husky"
]
}
}
}
================================================
FILE: .dockerignore
================================================
# .dockerignore
.git
.gitattributes
.gitignore
.github
.editorconfig
README.md
Dockerfile
[b|B]in
[O|o]bj
================================================
FILE: .editorconfig
================================================
# EditorConfig is awesome: https://EditorConfig.org
# top-most EditorConfig file
root = true
# Default settings:
# A newline ending every file
# Use CRLF line break
# Use 4 spaces as indentation
[*]
end_of_line = lf
trim_trailing_whitespace = true
insert_final_newline = true
indent_style = space
indent_size = 4
# Json config files
[*.json]
indent_size = 2
# Yaml config files
[*.{yml,yaml}]
indent_size = 2
# Xml project files
[*.{csproj,vcxproj,vcxproj.filters,proj,nativeproj,locproj}]
indent_size = 2
# Xml config files
[*.{props,targets,config,nuspec}]
indent_size = 2
# c# 文件
[*.cs]
#### Core EditorConfig 选项 ####
# 缩进和间距
indent_size = 4
indent_style = space
tab_width = 4
# 新行首选项
end_of_line = lf
insert_final_newline = false
#### .NET 编码约定 ####
# 组织 Using
dotnet_separate_import_directive_groups = false
dotnet_sort_system_directives_first = false
file_header_template = unset
# this. 和 Me. 首选项
dotnet_style_qualification_for_event = false
dotnet_style_qualification_for_field = false
dotnet_style_qualification_for_method = false
dotnet_style_qualification_for_property = false
# 语言关键字与 bcl 类型首选项
dotnet_style_predefined_type_for_locals_parameters_members = true
dotnet_style_predefined_type_for_member_access = true
# 括号首选项
dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity
dotnet_style_parentheses_in_other_binary_operators = always_for_clarity
dotnet_style_parentheses_in_other_operators = never_if_unnecessary
dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity
# 修饰符首选项
dotnet_style_require_accessibility_modifiers = for_non_interface_members
# 表达式级首选项
dotnet_style_coalesce_expression = true
dotnet_style_collection_initializer = true
dotnet_style_explicit_tuple_names = true
dotnet_style_namespace_match_folder = true
dotnet_style_null_propagation = true
dotnet_style_object_initializer = true
dotnet_style_operator_placement_when_wrapping = beginning_of_line
dotnet_style_prefer_auto_properties = true
dotnet_style_prefer_collection_expression = when_types_loosely_match
dotnet_style_prefer_compound_assignment = true
dotnet_style_prefer_conditional_expression_over_assignment = true
dotnet_style_prefer_conditional_expression_over_return = true
dotnet_style_prefer_foreach_explicit_cast_in_source = when_strongly_typed
dotnet_style_prefer_inferred_anonymous_type_member_names = true
dotnet_style_prefer_inferred_tuple_names = true
dotnet_style_prefer_is_null_check_over_reference_equality_method = true
dotnet_style_prefer_simplified_boolean_expressions = true
dotnet_style_prefer_simplified_interpolation = true
# 字段首选项
dotnet_style_readonly_field = true
# 参数首选项
dotnet_code_quality_unused_parameters = all
# 禁止显示首选项
dotnet_remove_unnecessary_suppression_exclusions = none
# 新行首选项
dotnet_style_allow_multiple_blank_lines_experimental = true
dotnet_style_allow_statement_immediately_after_block_experimental = true
#### c# 编码约定 ####
# var 首选项
csharp_style_var_elsewhere = false
csharp_style_var_for_built_in_types = false
csharp_style_var_when_type_is_apparent = true
# Expression-bodied 成员
csharp_style_expression_bodied_accessors = true
csharp_style_expression_bodied_constructors = false
csharp_style_expression_bodied_indexers = true
csharp_style_expression_bodied_lambdas = true
csharp_style_expression_bodied_local_functions = false
csharp_style_expression_bodied_methods = true
csharp_style_expression_bodied_operators = false
csharp_style_expression_bodied_properties = true
# 模式匹配首选项
csharp_style_pattern_matching_over_as_with_null_check = true
csharp_style_pattern_matching_over_is_with_cast_check = true
csharp_style_prefer_extended_property_pattern = true
csharp_style_prefer_not_pattern = true
csharp_style_prefer_pattern_matching = true
csharp_style_prefer_switch_expression = true
# Null 检查首选项
csharp_style_conditional_delegate_call = true
# 修饰符首选项
csharp_prefer_static_local_function = true
csharp_preferred_modifier_order = public,private,protected,internal,file,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,required,volatile,async
csharp_style_prefer_readonly_struct = true
csharp_style_prefer_readonly_struct_member = true
# 代码块首选项
csharp_prefer_braces = when_multiline
csharp_prefer_simple_using_statement = true
csharp_style_namespace_declarations = file_scoped
csharp_style_prefer_method_group_conversion = true
csharp_style_prefer_primary_constructors = true
csharp_style_prefer_top_level_statements = true
# 表达式级首选项
csharp_prefer_simple_default_expression = true
csharp_style_deconstructed_variable_declaration = true
csharp_style_implicit_object_creation_when_type_is_apparent = true
csharp_style_inlined_variable_declaration = true
csharp_style_prefer_index_operator = true
csharp_style_prefer_local_over_anonymous_function = true
csharp_style_prefer_null_check_over_type_check = true
csharp_style_prefer_range_operator = true
csharp_style_prefer_tuple_swap = true
csharp_style_prefer_utf8_string_literals = true
csharp_style_throw_expression = true
csharp_style_unused_value_assignment_preference = discard_variable
csharp_style_unused_value_expression_statement_preference = discard_variable
# "using" 指令首选项
csharp_using_directive_placement = outside_namespace
# 新行首选项
csharp_style_allow_blank_line_after_colon_in_constructor_initializer_experimental = true
csharp_style_allow_blank_line_after_token_in_arrow_expression_clause_experimental = true
csharp_style_allow_blank_line_after_token_in_conditional_expression_experimental = true
csharp_style_allow_blank_lines_between_consecutive_braces_experimental = true
csharp_style_allow_embedded_statements_on_same_line_experimental = true
#### C# 格式规则 ####
# 新行首选项
csharp_new_line_before_catch = true
csharp_new_line_before_else = true
csharp_new_line_before_finally = true
csharp_new_line_before_members_in_anonymous_types = true
csharp_new_line_before_members_in_object_initializers = true
csharp_new_line_before_open_brace = all
csharp_new_line_between_query_expression_clauses = true
# 缩进首选项
csharp_indent_block_contents = true
csharp_indent_braces = false
csharp_indent_case_contents = true
csharp_indent_case_contents_when_block = true
csharp_indent_labels = one_less_than_current
csharp_indent_switch_labels = true
# 空格键首选项
csharp_space_after_cast = false
csharp_space_after_colon_in_inheritance_clause = true
csharp_space_after_comma = true
csharp_space_after_dot = false
csharp_space_after_keywords_in_control_flow_statements = true
csharp_space_after_semicolon_in_for_statement = true
csharp_space_around_binary_operators = before_and_after
csharp_space_around_declaration_statements = false
csharp_space_before_colon_in_inheritance_clause = true
csharp_space_before_comma = false
csharp_space_before_dot = false
csharp_space_before_open_square_brackets = false
csharp_space_before_semicolon_in_for_statement = false
csharp_space_between_empty_square_brackets = false
csharp_space_between_method_call_empty_parameter_list_parentheses = false
csharp_space_between_method_call_name_and_opening_parenthesis = false
csharp_space_between_method_call_parameter_list_parentheses = false
csharp_space_between_method_declaration_empty_parameter_list_parentheses = false
csharp_space_between_method_declaration_name_and_open_parenthesis = false
csharp_space_between_method_declaration_parameter_list_parentheses = false
csharp_space_between_parentheses = false
csharp_space_between_square_brackets = false
# 包装首选项
csharp_preserve_single_line_blocks = true
csharp_preserve_single_line_statements = true
#### 命名样式 ####
# 命名规则
dotnet_naming_rule.interface_should_be_begins_with_i.severity = suggestion
dotnet_naming_rule.interface_should_be_begins_with_i.symbols = interface
dotnet_naming_rule.interface_should_be_begins_with_i.style = begins_with_i
dotnet_naming_rule.types_should_be_pascal_case.severity = suggestion
dotnet_naming_rule.types_should_be_pascal_case.symbols = types
dotnet_naming_rule.types_should_be_pascal_case.style = pascal_case
dotnet_naming_rule.non_field_members_should_be_pascal_case.severity = suggestion
dotnet_naming_rule.non_field_members_should_be_pascal_case.symbols = non_field_members
dotnet_naming_rule.non_field_members_should_be_pascal_case.style = pascal_case
# 符号规范
dotnet_naming_symbols.interface.applicable_kinds = interface
dotnet_naming_symbols.interface.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
dotnet_naming_symbols.interface.required_modifiers =
dotnet_naming_symbols.types.applicable_kinds = class, struct, interface, enum
dotnet_naming_symbols.types.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
dotnet_naming_symbols.types.required_modifiers =
dotnet_naming_symbols.non_field_members.applicable_kinds = property, event, method
dotnet_naming_symbols.non_field_members.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
dotnet_naming_symbols.non_field_members.required_modifiers =
# 命名样式
dotnet_naming_style.pascal_case.required_prefix =
dotnet_naming_style.pascal_case.required_suffix =
dotnet_naming_style.pascal_case.word_separator =
dotnet_naming_style.pascal_case.capitalization = pascal_case
dotnet_naming_style.begins_with_i.required_prefix = I
dotnet_naming_style.begins_with_i.required_suffix =
dotnet_naming_style.begins_with_i.word_separator =
dotnet_naming_style.begins_with_i.capitalization = pascal_case
================================================
FILE: .github/ISSUE_TEMPLATE/bug-report----.md
================================================
---
name: Bug report(缺陷)
about: 缺陷或异常
title: "【Bug】<请在标题中清晰地概述你要反馈的异常或缺陷>"
labels: ''
assignees: ''
---
<!-- 请完整填写如下信息 -->
<!-- 勾选项可以在提交之后,进行勾选 -->
### 版本
BiliTool版本号:`x.x.x`
### 确认
- [ ] 是的,我已搜索并确认,没有其他相同的议题
- [ ] 是的,我确认,已尝试升级到最新版,但未解决
### 服务器架构
- [ ] x64
- [ ] arm64
- [ ] arm
- [ ] 其他(请在下面补充)
### 服务器系统
- [ ] Windows
- [ ] macOS
- [ ] Linux
- [ ] Debian
- [ ] Ubuntu
- [ ] Windows
- [ ] Alpine
- [ ] Centos
- [ ] 其他(请在下面补充)
### 选择的BiliTool运行模式
- [ ] docker
- [ ] podman
- [ ] 下载的Release包
- [ ] 其他(请在下面补充)
### 问题描述
<!-- 请在下方清晰的描述所您所遇到的问题 -->
<这里>
### 日志信息
<!-- 请在下方贴出Debug级别的日志信息,以便更高效的确定和解决问题 -->
<details>
```
<这里>
```
</details>
================================================
FILE: .github/ISSUE_TEMPLATE/bug-report-qinglong----.md
================================================
---
name: 【QingLong】Bug report(缺陷)
about: 缺陷或异常(青龙专属)
title: "【Bug】【青龙】<请在标题中清晰地概述你要反馈的异常或缺陷>"
labels: ''
assignees: ''
---
<!-- 请完整填写如下信息 -->
<!-- 勾选项可以在提交之后,进行勾选 -->
### 版本
BiliTool版本号:`x.x.x`
青龙版本号:`x.x.x`
### 确认
- [ ] 是的,我已搜索并确认,没有其他相同的议题
- [ ] 是的,我确认,已尝试升级bilitool到最新版,但未解决
- [ ] 是的,我确认,已尝试升级青龙到最新版,但未解决
### 服务器架构
- [ ] x64
- [ ] arm64
- [ ] arm
- [ ] 其他(请在下面补充)
### 服务器系统
- [ ] Windows
- [ ] macOS
- [ ] Linux
- [ ] Debian
- [ ] Ubuntu
- [ ] Windows
- [ ] Alpine
- [ ] Centos
- [ ] 其他(请在下面补充)
### 青龙容器类型
- [ ] Docker
- [ ] Podman
- [ ] 其他(请在下面补充)
### 青龙镜像
- [ ] whyour/qinglong:latest(Alpine)
- [ ] whyour/qinglong:debian(Debian)
### 选择的BiliTool运行模式
- [ ] dotnet
- [ ] bilitool
### 如果是青龙拉库相关bug,请贴出拉库方式截图
- [ ] 否
- [ ] 是,截图如下
### 如果是缺失文件相关bug,请贴出容器内文件路径信息
- [ ] 否
- [ ] 是,信息如下
查看方式参考文档:[提示文件不存在或路径异常怎么排查](https://github.com/RayWangQvQ/BiliBiliToolPro/blob/main/qinglong/README.md#43-提示文件不存在或路径异常怎么排查)
BiliTool仓库文件路径:`<粘贴路径>`
脚本文件路径:`<粘贴路径>`
<这里贴截图>
### 问题描述
<!-- 请在下方清晰的描述所您所遇到的问题 -->
<这里>
### 日志信息
<!-- 请在下方贴出Debug级别的日志信息,以便更高效的确定和解决问题 -->
<details>
```
<这里>
```
</details>
================================================
FILE: .github/ISSUE_TEMPLATE/feature-request----.md
================================================
---
name: Feature request(建议)
about: 建议或需求
title: "【建议】<请在标题中清晰地概述你的建议>"
labels: 建议/enhancement
assignees: ''
---
<!-- 请完整填写如下信息 -->
<!-- 勾选项可以在提交之后,进行勾选 -->
### 确认
- [ ] 是的,我已搜索并确认,没有其他相同的议题
### 建议内容
<!-- 请清晰的描述您的需求或建议 -->
<!-- 如果可以,请描述您认为可行的解决方案 -->
<这里>
================================================
FILE: .github/ISSUE_TEMPLATE/other----.md
================================================
---
name: Other(其他)
about: 既不是Bug也不是建议的或不能确定的其他议题
title: "【其他】<请在标题中清晰地概述内容>"
labels: ''
assignees: ''
---
### 确认
- [ ] 是的,我确认要选Other,因为我的内容既不是Bug,也不是Feature
- [ ] 是的,我已搜索并确认,没有其他相同的议题
### 描述
<!-- 请在下方清晰的描述您的内容 -->
<这里>
================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
<!-- 请详细描述你要PR的内容 -->
### 内容
<请描述您将贡献的内容>
================================================
FILE: .github/pull.yml
================================================
version: "1"
rules: # Array of rules
- base: main # Required. Target branch
upstream: RayWangQvQ:main # Required. Must be in the same fork network.
mergeMethod: hardreset # Optional, one of [none, merge, squash, rebase, hardreset], Default: hardreset.
mergeUnstable: true # Optional, merge pull request even when the mergeable_state is not clean. Default: true
================================================
FILE: .github/workflows/auto-deploy-tencent-scf.yml
================================================
# https://github.com/June1991/serverless-express
name: auto-deploy-tencent-scf
on:
workflow_dispatch:
schedule:
- cron: "0 2 * * 1,3,5" # 每周一、三、五的10点
env:
IsAutoDeployTencentScf: ${{ secrets.IS_AUTO_DEPLOY_TENCENT_SCF }} # 是否开启自动部署云函数
jobs:
pre-check:
runs-on: ubuntu-latest
outputs:
result: ${{ steps.check.outputs.result }} # 不能直接传递secrets的值,否则会被skip,需要转一下
steps:
- id: check
run: |
[ ${{ github.event_name }} == 'workflow_dispatch' -o true == "${{ env.IsAutoDeployTencentScf }}" ] && echo "result=开启" >> $GITHUB_OUTPUT || echo "result=关闭" >> $GITHUB_OUTPUT
deploy:
name: deploy serverless
runs-on: ubuntu-latest
needs: pre-check
# if: env.IsAutoDeployTencentScf=='true' # 这里job.if读取不到env或secrets,很坑...但是发现可以读到needs的outputs值
if: needs.pre-check.outputs.result=='开启'
steps:
- name: clone local repository
uses: actions/checkout@v3
- name: Use Node.js
uses: actions/setup-node@v3
with:
node-version: 16.x
- name: install serverless
run: npm i -g serverless-cloud-framework
- name: deploy serverless
run: |
cd ./tencentScf
echo "开始配置云函数:"
echo "$Tencent_Serverless_Yml"
[ -z "$Tencent_Serverless_Yml" ] && echo "未配置serverless.yml,使用默认值" || echo "$Tencent_Serverless_Yml" > serverless.yml
echo "开始发布项目"
chmod +x publish.sh
./publish.sh
echo "开始部署到云函数"
scf deploy
env: # 环境变量
STAGE: dev #您的部署环境
SERVERLESS_PLATFORM_VENDOR: tencent # serverless海外默认为aws部署,配置为腾讯部署
TENCENT_SECRET_ID: ${{ secrets.TENCENT_SECRET_ID }} # 您的腾讯云账号sercret ID
TENCENT_SECRET_KEY: ${{ secrets.TENCENT_SECRET_KEY }} # 您的腾讯云账号sercret key
Tencent_Serverless_Yml: ${{ secrets.TENCENT_SERVERLESS_YML }} # 云函数配置(区域、环境变量、触发器等)
================================================
FILE: .github/workflows/codeql-analysis.yml
================================================
# For most projects, this workflow file will not need changing; you simply need
# to commit it to your repository.
#
# You may wish to alter this file to override the set of languages analyzed,
# or to provide custom queries or build logic.
#
# ******** NOTE ********
# We have attempted to detect the languages in your repository. Please check
# the `language` matrix defined below to confirm you have the correct set of
# supported CodeQL languages.
#
name: "CodeQL"
on:
push:
branches: [ main, develop, release/* ]
paths:
- '**/*.js'
- '**/*.cs'
- '**/*.cshtml'
- '**/*.csproj'
pull_request:
# The branches below must be a subset of the branches above
branches: [ main, develop ]
paths:
- '**/*.js'
- '**/*.cs'
- '**/*.cshtml'
- '**/*.csproj'
jobs:
analyze:
name: Analyze
runs-on: ubuntu-latest
permissions:
actions: read
contents: read
security-events: write
strategy:
fail-fast: false
matrix:
language: [ 'csharp' ]
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
# Learn more about CodeQL language support at https://git.io/codeql-language-support
steps:
- name: Checkout repository
uses: actions/checkout@v3
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v2
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.
# queries: ./path/to/local/query, your-org/your-repo/queries@main
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
uses: github/codeql-action/autobuild@v2
# ℹ️ Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl
# ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
# and modify them (or add more) to build your code if your project
# uses a compiled language
#- run: |
# make bootstrap
# make release
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v2
================================================
FILE: .github/workflows/no-toxic-comments.yml
================================================
name: Check Toxic Comments
on: [issue_comment, pull_request_review]
jobs:
toxic_check:
runs-on: ubuntu-latest
name: Safe space
steps:
- uses: actions/checkout@v2
- name: Safe space - action step
uses: charliegerard/safe-space@master
with:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
================================================
FILE: .github/workflows/publish-image.yml
================================================
name: Publish image
on:
workflow_dispatch:
inputs:
autoWithLatestTag:
description: 'Auto Add Latest Tag'
required: true
default: true
type: boolean
release:
types: [created]
env:
DOCKERHUB_USERNAME : ${{ secrets.DOCKERHUB_USERNAME }}
DOCKERHUB_PASSWORD : ${{ secrets.DOCKERHUB_PASSWORD }}
GHCR_USERNAME: ${{ github.repository_owner }}
GHCR_PASSWORD: ${{ secrets.GITHUB_TOKEN }}
DOCKER_IMG_NAME: "zai7lou/bili_tool_web"
GHC_IMG_NAME: "ghcr.io/raywangqvq/bili_tool_web"
jobs:
PublishImage:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: GetTargetVersion
id: getTargetVersion
run: |
TargetVersion=""
if [ "${{ github.event.release.tag_name }}" ] ; then
TargetVersion=${{ github.event.release.tag_name }}
else
TargetVersion=$(grep -oP '(?<=<Version>).*?(?=<\/Version>)' ./common.props)
fi
echo "TargetVersion: $TargetVersion"
echo "TargetVersion=$TargetVersion" >> $GITHUB_OUTPUT
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Login to DockerHub
uses: docker/login-action@v2
with:
username: ${{ env.DOCKERHUB_USERNAME }}
password: ${{ env.DOCKERHUB_PASSWORD }}
- name: Log in to ghcr
uses: docker/login-action@v2
with:
registry: ghcr.io
username: ${{ env.GHCR_USERNAME }}
password: ${{ env.GHCR_PASSWORD }}
- name: Generate tags
id: tags
run: |
targetVersion="${{ steps.getTargetVersion.outputs.TargetVersion }}"
dockerTagWithVersion="${{ env.DOCKER_IMG_NAME }}:$targetVersion"
ghcrTagWithVersion="${{ env.GHC_IMG_NAME }}:$targetVersion"
dockerTagWithLatest=""
ghcrTagWithLatest=""
if [ "${{ github.event.inputs.autoWithLatestTag }}" == "true" ] || [ ${{ github.event.release.created_at }} ]; then
dockerTagWithLatest="${{ env.DOCKER_IMG_NAME }}:latest"
ghcrTagWithLatest="${{ env.GHC_IMG_NAME }}:latest"
fi
echo "dockerTagWithVersion=$dockerTagWithVersion" >> $GITHUB_OUTPUT
echo "ghcrTagWithVersion=$ghcrTagWithVersion" >> $GITHUB_OUTPUT
echo "dockerTagWithLatest=$dockerTagWithLatest" >> $GITHUB_OUTPUT
echo "ghcrTagWithLatest=$ghcrTagWithLatest" >> $GITHUB_OUTPUT
- name: Build and push
uses: docker/build-push-action@v4
with:
context: .
platforms: linux/amd64,linux/arm64
push: true
tags: |
${{ steps.tags.outputs.dockerTagWithVersion }}
${{ steps.tags.outputs.ghcrTagWithVersion }}
${{ steps.tags.outputs.dockerTagWithLatest }}
${{ steps.tags.outputs.ghcrTagWithLatest }}
================================================
FILE: .github/workflows/publish-release.yml
================================================
name: Publish release
on:
workflow_dispatch:
permissions:
contents: write
discussions: write
jobs:
build:
name: Publish Release
if: ${{ github.repository == 'RayWangQvQ/BiliBiliToolPro' }}
runs-on: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@v3
- name: Setup .NET Core
uses: actions/setup-dotnet@v3
with:
dotnet-version: '8.0.x'
- name: Publish and Zip Release
run: |
cd ./scripts
chmod +x ./publish.sh
./publish.sh --runtime all
- name: Read Version
id: version
run: echo "version=$(cat ./src/Ray.BiliBiliTool.Console/bin/Publish/version.txt)" >> $GITHUB_OUTPUT
- name: Create Release
uses: softprops/action-gh-release@v2
with:
files: './src/Ray.BiliBiliTool.Console/bin/Publish/*.zip'
token: ${{ secrets.GITHUB_TOKEN }}
name: "BiliBiliToolPro-V${{ steps.version.outputs.version }}"
tag_name: ${{ steps.version.outputs.version }}
body_path: './src/Ray.BiliBiliTool.Console/bin/Publish/release_notes.md'
discussion_category_name: Announcements
generate_release_notes: true
fail_on_unmatched_files: true
================================================
FILE: .github/workflows/repo-sync.yml
================================================
# 自动同步上游仓库
name: repo-sync
on:
workflow_dispatch:
schedule:
- cron: '0 1 * * 1,3,5'
# UTC时区,比我们东八区早8小时,上面示例为:每周一、三、五的9点。
jobs:
repo-sync:
if: ${{ github.repository != 'RayWangQvQ/BiliBiliToolPro' }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
persist-credentials: false
- name: repo-sync
uses: repo-sync/github-sync@v2
with:
source_repo: "https://github.com/RayWangQvQ/BiliBiliToolPro.git"
source_branch: "main"
destination_branch: "main"
sync_tags: "true"
github_token: ${{ secrets.PAT }}
================================================
FILE: .github/workflows/stale-issues.yml
================================================
name: Close Stale Issues
on:
schedule:
- cron: "0 8 * * *" # 每天的 00:00 运行
workflow_dispatch:
permissions:
contents: read
issues: write
pull-requests: write
jobs:
close_stale_issues:
runs-on: ubuntu-latest
steps:
- name: Close Stale Issues
uses: actions/stale@v5
with:
days-before-stale: 3 # 3 天不活跃后标记Stale
days-before-close: 3 # 标记Stale后3天不活跃则关闭问题
stale-issue-label: "Stale" # 标记为 "Stale" 的问题
stale-issue-message: "🕸️ This has been inactive for 3 days, please confirm if it still needs attention~~" # Comment added
close-issue-message: "🚫 This has been inactive for too long and is now closed, feel free to reopen it if needed!" # Comment added
only-labels: "needs-more-info" # 只处理标签为 "help wanted" 的问题
repo-token: ${{ secrets.GITHUB_TOKEN }}
================================================
FILE: .github/workflows/tag.yml
================================================
name: Tag
on:
pull_request:
types:
- closed
branches:
- main
jobs:
tag:
name: add tag
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Get current version
id: current_version
run: |
version=$(grep -oP '(?<=<Version>).*?(?=<\/Version>)' ./common.props)
echo "Curent version: $version"
echo "current_version=$version" >> $GITHUB_OUTPUT
- name: Tag and push
run: |
new_tag="${{ steps.current_version.outputs.current_version }}"
git tag -f "$new_tag"
git push -f origin "$new_tag"
================================================
FILE: .github/workflows/verify-pr.yml
================================================
name: VerifyPR
on:
pull_request_target:
types: [opened, edited]
jobs:
checkTargetBranch:
runs-on: ubuntu-latest
steps:
- uses: Vankka/pr-target-branch-action@v3
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
target: main
change-to: develop
exclude: RayWangQvQ/BiliBiliToolPro:develop
comment: |
Your PR was set to `main`, but PRs should be sent to `develop`
The base branch of this PR has been automatically changed to `develop`, please check that there are no merge conflicts.
================================================
FILE: .gitignore
================================================
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
# User-specific files
*.rsuser
*.suo
*.user
*.userosscache
*.sln.docstates
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
# Mono auto generated files
mono_crash.*
# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
[Aa][Rr][Mm]/
[Aa][Rr][Mm]64/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/
[Ll]ogs/
# Visual Studio 2015/2017 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/
# Visual Studio 2017 auto generated files
Generated\ Files/
# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
# NUnit
*.VisualState.xml
TestResult.xml
nunit-*.xml
# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c
# Benchmark Results
BenchmarkDotNet.Artifacts/
# .NET Core
project.lock.json
project.fragment.lock.json
artifacts/
# StyleCop
StyleCopReport.xml
# Files built by Visual Studio
*_i.c
*_p.c
*_h.h
*.ilk
*.meta
*.obj
*.iobj
*.pch
*.pdb
*.ipdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*_wpftmp.csproj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc
# Chutzpah Test files
_Chutzpah*
# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb
# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap
# Visual Studio Trace Files
*.e2e
# TFS 2012 Local Workspace
$tf/
# Guidance Automation Toolkit
*.gpState
# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user
# JustCode is a .NET coding add-in
.JustCode
# TeamCity is a build add-in
_TeamCity*
# DotCover is a Code Coverage Tool
*.dotCover
# AxoCover is a Code Coverage Tool
.axoCover/*
!.axoCover/settings.json
# Visual Studio code coverage results
*.coverage
*.coveragexml
# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*
# MightyMoose
*.mm.*
AutoTest.Net/
# Web workbench (sass)
.sass-cache/
# Installshield output folder
[Ee]xpress/
# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html
# Click-Once directory
publish/
# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# Note: Comment the next line if you want to checkin your web deploy settings,
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj
# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/
# NuGet Packages
*.nupkg
# NuGet Symbol Packages
*.snupkg
# The packages folder can be ignored because of Package Restore
**/[Pp]ackages/*
# except build/, which is used as an MSBuild target.
!**/[Pp]ackages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/[Pp]ackages/repositories.config
# NuGet v3's project.json files produces more ignorable files
*.nuget.props
*.nuget.targets
# Microsoft Azure Build Output
csx/
*.build.csdef
# Microsoft Azure Emulator
ecf/
rcf/
# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt
*.appx
*.appxbundle
*.appxupload
# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!?*.[Cc]ache/
# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.jfm
*.pfx
*.publishsettings
orleans.codegen.cs
# Including strong name files can present a security risk
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
#*.snk
# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/
# RIA/Silverlight projects
Generated_Code/
# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
ServiceFabricBackup/
*.rptproj.bak
# SQL Server files
*.mdf
*.ldf
*.ndf
# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
*.rptproj.rsuser
*- [Bb]ackup.rdl
*- [Bb]ackup ([0-9]).rdl
*- [Bb]ackup ([0-9][0-9]).rdl
# Microsoft Fakes
FakesAssemblies/
# GhostDoc plugin setting file
*.GhostDoc.xml
# Node.js Tools for Visual Studio
.ntvs_analysis.dat
node_modules/
# Visual Studio 6 build log
*.plg
# Visual Studio 6 workspace options file
*.opt
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
*.vbw
# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions
# Paket dependency manager
.paket/paket.exe
paket-files/
# FAKE - F# Make
.fake/
# CodeRush personal settings
.cr/personal
# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc
# Cake - Uncomment if you are using it
# tools/**
# !tools/packages.config
# Tabs Studio
*.tss
# Telerik's JustMock configuration file
*.jmconfig
# BizTalk build output
*.btp.cs
*.btm.cs
*.odx.cs
*.xsd.cs
# OpenCover UI analysis results
OpenCover/
# Azure Stream Analytics local run output
ASALocalRun/
# MSBuild Binary and Structured Log
*.binlog
# NVidia Nsight GPU debugger configuration file
*.nvuser
# MFractors (Xamarin productivity tool) working folder
.mfractor/
# Local History for Visual Studio
.localhistory/
# BeatPulse healthcheck temp database
healthchecksdb
# Backup folder for Package Reference Convert tool in Visual Studio 2017
MigrationBackup/
# Ionide (cross platform F# VS Code tools) working folder
.ionide/
#
.idea/
tencentScf/.env
.obsidian
# vs code
.vscode
# krew
krew/bilipro
krew/cmd/kubectl-bilipro
krew/kustomization.yaml
bilipro
krew/pkg/utils/fixtures
kustomization.yaml
# cookie config
**/Ray.BiliBiliTool.Console/cookies.json
**/Ray.BiliBiliTool.Web/config/cookies.json
# ut
coveragereport
# bruno
bruno/.env
# db
src/**/BiliBiliTool.db*
================================================
FILE: .husky/pre-commit
================================================
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
echo "This is pre commit"
dotnet husky run --group pre-commit
================================================
FILE: .husky/task-runner.json
================================================
{
"$schema": "https://alirezanet.github.io/Husky.Net/schema.json",
"tasks": [
{
"name": "welcome-message-example",
"command": "bash",
"args": [ "-c", "echo Husky.Net is awesome!" ],
"windows": {
"command": "cmd",
"args": ["/c", "echo Husky.Net is awesome!" ]
}
},
{
"name": "csharpier-install",
"group": "pre-commit",
"command": "dotnet",
"args": [ "tool", "install", "csharpier" ]
},
{
"name": "csharpier-fotmat",
"group": "pre-commit",
"command": "dotnet",
"args": [ "csharpier", "format", "${staged}" ],
"include": [ "**/*.cs" ]
}
]
}
================================================
FILE: CHANGELOG.md
================================================
## 3.8.2
- Fix[#1026]: 更新文档
## 3.8.1
- Fix[#1005]: 更新文档
## 3.8.0
- Feature: 使推送的更版本号信息更简洁
- Fix[#998]: 修复企业微信 App 推送缺少 access_token 问题
- Fix[#996]: 修复 Server 酱推送标题不能为空的问题
- Fix[#669]: 企业微信默认消息类型从 markdown 改为 text
## 3.7.0
- Fix[#989]: 修复钉钉推送标题不能为空的问题
## 3.6.0
- Feature[#961]: Web 项目新增推送功能
- Feature[#961]: 升级 Serilog Pkg
- Feature: 使用中心化包管理
## 3.5.0
- Feature[#924]: 新增 Sqlite 配置源
- Feature[#924]: 新增在线配置页
- Feature[#924]: 根据任务拆分配置
- Feature[#924]: 实现开启、关闭任务功能
- Feature[#924]: 实现修改 Cron 定时时间功能
- Feature: 定时任务页改为默认50条
- Feature: 更新配置文档
## 3.4.0
- Feature: 优化登录失败时的提示信息
- Feature: 更新推送的文档说明
## 3.3.0
- Feature[#935]: Web 新增登录功能
- Feature[#935]: Web 新增修改密码功能
- Feature[#935]: 更新文档
- Feature: 更新开源协议为 GNU GPLv3
- Feature: 拆分原本的 Daily 任务
- Doc: 更新文档
- Feature: 升级 csharpier
- Feature: 变更默认数据库文件位置到 /app/config 下
## 3.2.0
- Fix: 修复大会员大积分签到任务
- Fix: 修复大会员大积分的签到和浏览追番频道任务
- Feature[#901]: 实现大会员大积分的浏览影视频道页任务
- Feature[#921]: 新增大会员大积分的观看剧集 bruno 信息
- Feature: 鉴权不再兼容老版本青龙(老版本需要手动添加 bili cookie)
- Feature: 修复 warnings
- Feature: 移除无用的using
- Fix: 修复 VerifyPR CI/CD 流水线
- Feature: README 添加 Trending 信息
## 3.1.0
- Feature[#842]: 对接青龙新的 OpenAPI,实现青龙版 Bili 登录后自动存储 Cookie
- Feature[#842]: 兼容老版本青龙的文件鉴权方式
- Feature[#842]: 新增新版青龙添加鉴权的说明文档
- Feature[#820]: 更新文档解决配置文件边缘场景下的刷新问题
- Fix[#863]: 修复青龙尝试修复异常任务
- Fix[#879]: 移除文档内过期的加速器地址
- Feature: 开启 Nullable 特性,在编译阶段检查潜在的 NullReferenceException 问题
- Feature: 临时取消 Null warning
- Fix: Bruno 脚本错误
- Fix: 尝试修复发布包时 CI/CD 丢失 change log 问题
## 3.0.0
- Feature[#884]: 上线 bili_tool_web
- Fix[#875]: 青龙检测 dotnet 版本只需要大于等于 8.0
- Fix[#876]: 升级 VipBigPoint 接口,解决风控
- Fix[#881]: 升级 LiveLottery 接口,解决风控
## 2.2.2
- Code refactor
- Integration Husky.Net and CSharpier
## 2.2.1
- Fix[#847]: DefaultRequestHeaders can not be null or empty with dotnet 8
- Fix[#849]: Temporary disable PublishTrimmed
## 2.2.0
- Migrate from dotnet 6.0 to dotnet 8.0
- Add Bruno to document the APIs
- Fix[#824]: Log cookie when qinglong save env failed
- Fix[#648]: Set DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=1 in qinglong to ignore random "Couldn't find a valid ICU package" issue
## 2.1.3
- Code refactor
- Fix[#791]:修复VipBigPoint任务异常导致终止的问题
## 2.1.2
- Feature: enhancement CICD scripts
- Fix[#728]: compatible with qinglong history versions
## 2.1.1
- Feature: listen ctrl+c at the very beginning
- Fix: fix qinglong read cron error
## 2.1.0
- Feature[#691]: 重构并优化基于qinglong的部署方式,尝试解决偶发的安装失败的问题
- Feature[#670]: 新增针对App的AppUserAgent配置项,用于解决大会员大积分异常问题
- Fix: 修复CICD发布脚本错误
## 2.0.5
- Fix[#260]: 再次尝试修复大会员大积分“账号风险”异常
## 2.0.4
- Fix: 尝试修复大会员大积分“账号风险”异常
- Feature:为agent api创建集成测试
## 2.0.3
- PR[#641]:实现浏览会员购页面与观看正片内容功能
- PR[#685]:部分修复大积分功能
- Fix:更新过于老旧的UserAgent
- Fix:更新排行榜api
## 2.0.2
- PR[#617]:增加专栏投币功能与领取大会员经验的功能
## 2.0.1
- PR[#539]:更新文档
- PR[#557]:修复直播接口权限不足问题
## 2.0.0
- Feature[#513]:将基础组件和抽象迁移到nuget包中
- Fix[#543]:修复部分Api调用报“访问权限不足”
## 1.0.3
- Fix #486 : fix release zip error
## 1.0.2
- Fix #484 : fix read dic config error
- Merge PR #472 : add reverse proxy host for telegram notification
- Merge PR #483 : update login field for entrypoint
## 1.0.1
- Fix #463 : do not trust user's ck config
- Feature #460 : publish single file when release
- Feature: use new scripts for gh actions's release
- Feature #473 : let user input when there is no target task in configs
## 1.0.0
- Feature: Enable asynchronous
- Fix #344 : Support `Ctrl + C` to trigger exit event
- Fix #451 : Rebuild cookie factory pattern and fix bug of donating coin
- Featur: Replace AOP from MethodBoundaryAspect.Fody to Rougamo.Fody, to fix async exception
- Merge PR #448 : Fix typo
- Fix #446 : Change id type from int to long
## 0.4.6
- Fix: ck list init empty error
- Feature #440 : use 'apk add' to install dotnet in qinglong
## 0.4.5
- Fix #423 : Change int to string to avoid overflow exception
## 0.4.4
- Fix #228 : Try to fix sharing video error
- Feature: Change default docker image from dockerhub to github
## 0.4.3
- Feature #419 : Add a auto shell script for installing with docker
- Feature #396 : Publish docker image to GitHub pkg
## 0.4.2
- Merfe PRs #425 #426 #427 : Enhancement docker things, thx @zclkkk
## 0.4.1
- Merge PR #418 : Fix search video api's error, thx @catlair
## 0.4.0
- 合并PR( #381 #383 ),新增直播间挂机功能,感谢@bakapiano
## 0.3.2
- Fix( #358 ),获取auth时兼容老版青龙文件路径
- Fix( #364 ),兼容青龙异形response数据类型
- Fix( #366 #361 ),修复一些低级bug
- Feature( #359 ),兼容读取不到`$QL_DIR`的情况
## 0.3.1
- Fix( #260 ),在需要的时候encode cookie
- 更新文档
## 0.3.0
- hotfix docker build error
- 合并PR(#341),新增krew部署,感谢@chenliu1993
- 合并PR(##348),更新文档,感谢@jexjws
- 合并PR(#350),修改请求header错误的bug,感谢@catlair
- 合并PR(#353),新增python扫码登录的feature(仅针对青龙),感谢@AFUL1991
- Feature(#351):重构并新增了扫码登录功能,使之适用于各种部署平台
## 0.2.2
- 新增`podman`部署教程
- 合并PR(#264),腾讯云定时任务补充新增的大会员大积分任务,感谢@layui0320
- 合并PR(#262),更新docker的entry.sh,感谢@syrinka
- 合并PR(#308 #312),新增Chart部署,感谢@chenliu1993
- 合并PR(#309)新增lv6后开启白嫖模式的配置(多账号时可以实现不足lv6的继续投币,达到lv6的开始白嫖),感谢@cluom
- 优化青龙安装dotnet的脚本,改为使用官方`dotnet-install.sh`脚本安装(之前测试网络不通,后发现--no-cdn可以)
- 优化青龙的执行脚本,提取公共部分,并且在执行前会尝试安装一次dotnet,会清理一次缓存
## 0.2.1
- 合并PR(#253、#257),更新文档(@layui0320)
- 合并PR(#256),重构docker运行是cron构建方式,并优化读取环境变量的方式(@syrinka)
- Feature(#65):新增TG推送配置并使用代理功能
- Feature(#240):新增gotify推送
- Feature(#259):大会员状态改为枚举类型,当非会员时自动跳过大积分任务
- Feature:更新、优化docker部署文档
## 0.2.0
- 新增大会员大积分任务
## 0.1.2
- 修复`auto-close-pr.yml`分支错误的bug
- 【#107】新增自动检测并关闭长时无状态issues的actions:no-response.yml
- 【#73】【#105】【#108】更新、纠正文档内容
- HostConfiguration,删除了CommandLine配置源,推荐只使用环境变量,同时更新青龙shell脚本内配置
- 【#169】领取大会员福利任务更改为每日都尝试执行
- 青龙拉库兼容大小写问题
- 【#197】合并PR,新增了阅读漫画功能到每日任务中(@ChanceLuo)
## 0.1.1
- 【#54】优化青龙shell脚本读取仓库目录方式,解决青龙新老版本切换导致出现多个repo目录的bug
- 【#82】【#85】合并外部PR,更新了文档
- 感谢`JetBrain`提供免费的证书支持
## 0.1.0
- 【#62】`codeql-analysis.yml`可以指定检查的文件类型
- 【#61】`publish-image.yml`手动打镜像时支持指定是否打latest的tag
- 【#32】新增企业微信的应用推送,实现微信接受推送消息
- 优化日志格式
## 0.0.9
- 【#47】青龙安装`dotnet`环境,支持arm架构服务器
## 0.0.8
- 【#55】新增日志推送端:`Microsoft Teams`
- 【#27】更新README
## 0.0.7
- 【#44】兼容青龙最新版本(v2.12.0),修复因青龙调整目录结构导致的bug
- 更新`publish-image.yml`,只有`release`时才打`latest tag`,手动运行时不打`latest tag`
## 0.0.6
- 更新docker镜像的构建
- 【#12】新增配置`Notification:IsSingleAccountSingleNotify`,支持开启每个账号单独推送消息
- publish-release.yml新增手动输入tag功能
## 0.0.5
- 优化推送日志,在标题中显示运行的任务名称
- 新增`CodeQL`workflows,用于检测代码
- 新增`Publish image`workflows,用于发布镜像
- 新增`no-toxic-comments.yml`,用于检测评论
- 更新`auto-close-pr.yml`,用于修正PR的目标到`develop`
## 0.0.4
- 【#15】修复`Actions`部署到腾讯云函数时的偶发异常
## 0.0.3
- 【#16】修复银瓜子兑换硬币bug
- 【#18】修改[青龙面板](https://github.com/whyour/qinglong)以`Production`环境运行
- [青龙面板](https://github.com/whyour/qinglong)新增拉取dev先行版功能
## 0.0.2
- 更新文档
- 天选抽奖新增黑名单功能
- 批量取关新增白名单功能
## 0.0.1
- 重启项目
- 支持[青龙面板](https://github.com/whyour/qinglong)部署
================================================
FILE: Directory.Packages.props
================================================
<Project>
<PropertyGroup>
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
</PropertyGroup>
<ItemGroup>
<!-- Microsoft Extensions -->
<PackageVersion Include="Microsoft.Extensions.Configuration" Version="8.0.0" />
<PackageVersion Include="Microsoft.Extensions.Configuration.Abstractions" Version="8.0.0" />
<PackageVersion Include="Microsoft.Extensions.Configuration.Binder" Version="8.0.2" />
<PackageVersion Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="8.0.0" />
<PackageVersion Include="Microsoft.Extensions.Configuration.UserSecrets" Version="8.0.1" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="8.0.1" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="8.0.2" />
<PackageVersion Include="Microsoft.Extensions.FileProviders.Physical" Version="8.0.0" />
<PackageVersion Include="Microsoft.Extensions.Hosting" Version="8.0.0" />
<PackageVersion Include="Microsoft.Extensions.Hosting.Abstractions" Version="8.0.1" />
<PackageVersion Include="Microsoft.Extensions.Http" Version="8.0.1" />
<PackageVersion Include="Microsoft.Extensions.Http.Polly" Version="8.0.18" />
<PackageVersion Include="Microsoft.Extensions.Logging" Version="8.0.1" />
<PackageVersion Include="Microsoft.Extensions.Logging.Abstractions" Version="8.0.3" />
<PackageVersion Include="Microsoft.Extensions.Logging.Console" Version="8.0.1" />
<PackageVersion Include="Microsoft.Extensions.Options" Version="8.0.2" />
<PackageVersion Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="8.0.0" />
<!-- Entity Framework -->
<PackageVersion Include="Microsoft.EntityFrameworkCore" Version="8.0.18" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Abstractions" Version="8.0.18" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.18" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.InMemory" Version="8.0.18" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Relational" Version="8.0.18" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Sqlite" Version="8.0.18" />
<PackageVersion Include="Microsoft.Data.Sqlite" Version="8.0.18" />
<PackageVersion Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="8.0.2" />
<PackageVersion Include="EFCore.NamingConventions" Version="8.0.3" />
<!-- ASP.NET Core -->
<PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly" Version="8.0.18" />
<PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly.Server" Version="8.0.18" />
<!-- Serilog -->
<PackageVersion Include="Serilog" Version="4.3.0" />
<PackageVersion Include="Serilog.AspNetCore" Version="8.0.3" />
<PackageVersion Include="Serilog.Extensions.Hosting" Version="8.0.0" />
<PackageVersion Include="Serilog.Extensions.Logging" Version="8.0.0" />
<PackageVersion Include="Serilog.Settings.Configuration" Version="8.0.4" />
<PackageVersion Include="Serilog.Sinks.Console" Version="6.0.0" />
<PackageVersion Include="Serilog.Sinks.Debug" Version="3.0.0" />
<PackageVersion Include="Serilog.Sinks.File" Version="6.0.0" />
<PackageVersion Include="Serilog.Sinks.SQLite.Microsoft" Version="1.0.0" />
<!-- Ray Serilog Sinks -->
<PackageVersion Include="Ray.Serilog.Sinks.CoolPushBatched" Version="0.1.5" />
<PackageVersion Include="Ray.Serilog.Sinks.DingTalkBatched" Version="0.1.5" />
<PackageVersion Include="Ray.Serilog.Sinks.GotifyBatched" Version="0.1.5" />
<PackageVersion Include="Ray.Serilog.Sinks.MicrosoftTeamsBatched" Version="0.1.5" />
<PackageVersion Include="Ray.Serilog.Sinks.OtherApiBatched" Version="0.1.5" />
<PackageVersion Include="Ray.Serilog.Sinks.PushPlusBatched" Version="0.1.5" />
<PackageVersion Include="Ray.Serilog.Sinks.ServerChanBatched" Version="0.1.5" />
<PackageVersion Include="Ray.Serilog.Sinks.TelegramBatched" Version="0.1.5" />
<PackageVersion Include="Ray.Serilog.Sinks.WorkWeiXinAppBatched" Version="0.1.5" />
<PackageVersion Include="Ray.Serilog.Sinks.WorkWeiXinBatched" Version="0.1.5" />
<!-- Quartz -->
<PackageVersion Include="Quartz" Version="3.14.0" />
<PackageVersion Include="Quartz.AspNetCore" Version="3.14.0" />
<PackageVersion Include="Quartz.Serialization.SystemTextJson" Version="3.14.0" />
<PackageVersion Include="AppAny.Quartz.EntityFrameworkCore.Migrations.SQLite" Version="0.5.1" />
<PackageVersion Include="CronExpressionDescriptor" Version="2.44.0" />
<!-- Other packages - 修复版本兼容性问题 -->
<PackageVersion Include="Ray.Infrastructure" Version="0.0.26" />
<PackageVersion Include="Scrutor" Version="6.1.0" />
<PackageVersion Include="WebApiClientCore" Version="2.1.5" />
<PackageVersion Include="QRCoder" Version="1.6.0" />
<PackageVersion Include="MudBlazor" Version="8.6.0" />
<PackageVersion Include="Swashbuckle.AspNetCore" Version="8.1.4" />
<PackageVersion Include="Rougamo.Fody" Version="5.0.1" />
<PackageVersion Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.21.0" />
<!-- Test packages -->
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.12.0" />
<PackageVersion Include="xunit" Version="2.9.3" />
<PackageVersion Include="xunit.runner.visualstudio" Version="3.0.1" />
<PackageVersion Include="coverlet.collector" Version="6.0.4" />
<PackageVersion Include="FluentAssertions" Version="8.5.0" />
</ItemGroup>
</Project>
================================================
FILE: Dockerfile
================================================
#See https://learn.microsoft.com/en-us/aspnet/core/host-and-deploy/docker/building-net-docker-images
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
WORKDIR /app
EXPOSE 8080
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /code
COPY ["Directory.Packages.props", "./"]
COPY ["src/Ray.BiliBiliTool.Web/Ray.BiliBiliTool.Web.csproj", "src/Ray.BiliBiliTool.Web/"]
COPY ["src/Ray.BiliBiliTool.Web.Client/Ray.BiliBiliTool.Web.Client.csproj", "src/Ray.BiliBiliTool.Web.Client/"]
COPY ["src/Ray.BiliBiliTool.Application/Ray.BiliBiliTool.Application.csproj", "src/Ray.BiliBiliTool.Application/"]
COPY ["src/Ray.BiliBiliTool.Application.Contracts/Ray.BiliBiliTool.Application.Contracts.csproj", "src/Ray.BiliBiliTool.Application.Contracts/"]
COPY ["src/Ray.BiliBiliTool.Domain/Ray.BiliBiliTool.Domain.csproj", "src/Ray.BiliBiliTool.Domain/"]
COPY ["src/Ray.BiliBiliTool.DomainService/Ray.BiliBiliTool.DomainService.csproj", "src/Ray.BiliBiliTool.DomainService/"]
COPY ["src/Ray.BiliBiliTool.Config/Ray.BiliBiliTool.Config.csproj", "src/Ray.BiliBiliTool.Config/"]
COPY ["src/Ray.BiliBiliTool.Agent/Ray.BiliBiliTool.Agent.csproj", "src/Ray.BiliBiliTool.Agent/"]
COPY ["src/Ray.BiliBiliTool.Infrastructure/Ray.BiliBiliTool.Infrastructure.csproj", "src/Ray.BiliBiliTool.Infrastructure/"]
COPY ["src/Ray.BiliBiliTool.Infrastructure.EF/Ray.BiliBiliTool.Infrastructure.EF.csproj", "src/Ray.BiliBiliTool.Infrastructure.EF/"]
COPY ["src/BlazingQuartz.Core/BlazingQuartz.Core.csproj", "src/BlazingQuartz.Core/"]
COPY ["src/BlazingQuartz.Jobs/BlazingQuartz.Jobs.csproj", "src/BlazingQuartz.Jobs/"]
COPY ["src/BlazingQuartz.Jobs.Abstractions/BlazingQuartz.Jobs.Abstractions.csproj", "src/BlazingQuartz.Jobs.Abstractions/"]
RUN dotnet restore "src/Ray.BiliBiliTool.Web/Ray.BiliBiliTool.Web.csproj"
COPY . .
WORKDIR "/code/src/Ray.BiliBiliTool.Web"
RUN dotnet build "Ray.BiliBiliTool.Web.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "Ray.BiliBiliTool.Web.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
COPY docker/entrypoint.sh /app/entrypoint.sh
RUN rm -rf /var/lib/apt/lists/* \
&& chmod +x /app/entrypoint.sh
ENTRYPOINT ["/app/entrypoint.sh"]
================================================
FILE: LICENSE
================================================
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<https://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<https://www.gnu.org/licenses/why-not-lgpl.html>.
================================================
FILE: README.md
================================================

<div align="center">
<h1 align="center">
BiliTool
</h1>
[](https://github.com/RayWangQvQ/BiliBiliToolPro/stargazers)
[](https://github.com/RayWangQvQ/BiliBiliToolPro/network)
[](https://github.com/RayWangQvQ/BiliBiliToolPro/issues)
[](https://github.com/RayWangQvQ/BiliBiliToolPro/graphs/contributors)
[](https://github.com/RayWangQvQ/BiliBiliToolPro/releases)
[](https://github.com/RayWangQvQ/BiliBiliToolPro/releases)
[](https://github.com/RayWangQvQ/BiliBiliToolPro/blob/main/LICENSE)
<a href="https://trendshift.io/repositories/3329" target="_blank">
<img src="https://trendshift.io/api/badge/repositories/3329" alt="RayWangQvQ%2FBiliBiliToolPro | Trendshift" style="width: 250px; height: 55px;" width="250" height="55"/>
</a>
</div>
**BiliTool 是一个自动执行任务的工具,当我们忘记做某项任务时,它会像一个贴心小助手,按照我们预先吩咐它的命令,在指定频率、时间范围内帮助我们完成计划的任务。**
**BiliTool is an automated task execution tool that acts as a helpful assistant, following pre-configured commands to complete planned tasks within specified frequencies and timeframes when we forget to do them.**
主要功能如下:
- **扫码登录,自动更新cookie**
- **每日获取满额升级经验(登录、投币、点赞、分享视频)(支持指定up主)**
- **直播间挂机**
- **每天漫画签到**
- **每天直播签到**
- **直播中心银瓜子兑换为硬币**
- **每月领取大会员赠送的 5 张 B 币券和福利(忘记或者不领就浪费了哦)**
- **每月领取大会员漫画福利**
- **月底在 B 币券过期前进行充电(支持指定想要支持的up主,如果没有喜欢的up,也可以为自己充个电啊,做个用爱为自己发电的人~)**
- **直播中心天选时刻自动参与抽奖**
- **批量取关**
- **大会员大积分任务**
- **支持多账号**
- **理论上支持所有远端的日志推送(默认支持推送到Telegram、企业微信、钉钉、PushPlus、Server酱、酷推,另外也支持自定义推送到任意api)**
---
[目录]
<!-- TOC depthFrom:2 -->
- [1. 如何使用](#1-如何使用)
- [1.1. 部署 BiliTool](#11-部署-bilitool)
- [1.1.1. 方案一:免费在线容器](#111-方案一免费在线容器)
- [1.1.2. 方式二:青龙](#112-方式二青龙)
- [1.1.3. 方式三:Docker 或 Podman 运行](#113-方式三docker-或-podman-运行)
- [1.1.4. 方式四:下载程序包到本地或服务器运行](#114-方式四下载程序包到本地或服务器运行)
- [1.1.5. 方式五:Chart部署](#115-方式五chart部署)
- [1.2. 消息推送(可选)](#12-消息推送可选)
- [2. 功能任务说明](#2-功能任务说明)
- [3. 个性化自定义配置](#3-个性化自定义配置)
- [4. 多账号支持](#4-多账号支持)
- [5. 常见问题](#5-常见问题)
- [6. 版本发布及更新](#6-版本发布及更新)
- [7. 成为开源贡献成员](#7-成为开源贡献成员)
- [7.1. 贡献代码](#71-贡献代码)
- [7.2. 贡献文档](#72-贡献文档)
- [8. 捐赠支持](#8-捐赠支持)
- [9. 其他](#9-其他)
<!-- /TOC -->
---
**Github 仓库地址:[RayWangQvQ/BiliBiliToolPro](https://github.com/RayWangQvQ/BiliBiliToolPro)**
**注意:**
- **本应用仅用于学习和测试,作者本人并不对其负责,请于运行测试完成后自行删除,请勿滥用!**
- **所有代码都是开源且透明的,任何人均可查看,程序不会保存或滥用任何用户的个人信息**
- **应用内几乎所有功能都开放了配置(如任务开关、日期、id等),详细信息可阅读配置文档**
运行图示:
<p align="center">
<img src="docs/imgs/web-schedules.png" alt="运行图示" width="800" />
<br/>
<img src="docs/imgs/web-schedules-log.png" alt="运行日志" width="800" />
<br/>
<img src="docs/imgs/web-configs.png" alt="运行日志" width="800" />
<br/>
</p>
## 1. 如何使用
BiliTool 实现自动完成任务的原理,是通过调用一系列开放的api实现的。
**要使用 BiliTool,很简单,按照下面教程部署完成,运行后扫码登录即可。**
### 1.1. 部署 BiliTool
支持多种部署方式,以下选择任一适合自己的方式即可。
#### 1.1.1. 方案一:免费在线容器
有很多平台会提供一定免费额度的在线容器,基于官方镜像,部署 BiliTool 很容易。
以下以 ClawCloud 为例,其他平台操作类似:
[>>ClawCloud 部署教程](docs/claw-cloud.md)
#### 1.1.2. 方式二:青龙
[>>青龙部署教程](qinglong/README.md)
#### 1.1.3. 方式三:Docker 或 Podman 运行
[>>Docker 部署说明](docker/README.md)
[>>Podman 部署说明](podman/README.md)
#### 1.1.4. 方式四:下载程序包到本地或服务器运行
[>>本地部署说明](docs/runInLocal.md)
#### 1.1.5. 方式五:Chart部署
[>>Chart部署说明](helm/README.md)
### 1.2. 消息推送(可选)
如果配置了推送,执行成功后,指定的接收端会收到推送消息,推送效果如下所示:
<p align="center">
<img src="docs/imgs/push-tg.png" alt="Telegram推送图示" width="300">
</p>
目前默认支持**Telegram推送、PushPlus推送、企业微信应用推送、企业微信推送、钉钉推送、Microsoft Teams推送、Server酱推送和酷推QQ推送**(以上顺序即为个人推荐的排序),如果需要推送到其他端,也可以配置为任意的可以接受消息的Api地址,关于如何配置推送请详见下面的**个性化自定义配置**章节。
推送配置见:[confifuration](/docs/configuration.md)
## 2. 功能任务说明
这里的**任务**是指一组功能的集合,是工具每次运行的最小单位。
任务列表如下:
| 任务名 | Code | 功能 | 推荐运行频率 |
| :--------: | :-------------: | :-----------------------------------------------------------------------------------------------: | :--------------: |
| 扫码登录 | Login | 使用app扫码登录,用于第一次运行时初始化cookie,或cookie过期时的更新。不同平台会将cookie存储到不同地方 | 手动 |
| 每日任务 | Daily | 完成每日任务获取满额65点经验(登录、观看视频、分享视频、投币),快速升级Lv6 | 每天一次 |
| 天选时刻抽奖 | LiveLottery | 直播中心天选时刻抽奖,大部分抽奖都需要关注主播,介意的不要开启 | 每天0-4次 |
| 批量取关 | UnfollowBatched | 批量取关指定分组下的所有关注(主要用于清理天选抽奖而产生的关注) | 手动运行 |
| 大会员大积分 | VipBigPoint | 大会员大积分任务(签到、浏览、观看) | 每天一次,建议凌晨 |
| 直播间挂机 | LiveFansMedal | 直播间挂机 | 每天一次 |
| 漫画任务 | Manga | 漫画签到、阅读 | 每天一次 |
| 领取大会员漫画权益 | MangaPrivilege | 领取大会员的漫画权益 | 每天一次 |
| 银瓜子兑换硬币 | Silver2Coin | 使用银瓜子换取硬币 | 每天一次 |
| 免费B币券充电 | Charge | 大会员每31天可免费领取一张5B币券,可用于给除自己以外的UP充电 | 每天一次 |
| 领取大会员福利 | VipPrivilege | 领取大会员福利 | 每天一次 |
| 测试Cookie | Test | 测试Cookie是否正常 | 手动运行 |
## 3. 个性化自定义配置
[>>点击查看配置说明文档](docs/configuration.md)
## 4. 多账号支持
部署成功后,直接去运行扫码登录任务,扫码成功后,应用会自动更新或添加cookie。
青龙平台会添加环境变量里,Key 为 `Ray_BiliBiliCookies__0`、`Ray_BiliBiliCookies__1`、`Ray_BiliBiliCookies__2`...
其他平台默认会添加到名为cookies.json的账号配置文件中:
```
{
"BiliBiliCookies": [
"cookie1",
"cookie2",
"...",
],
}
```
## 5. 常见问题
[>>点击查看常见问题文档](docs/questions.md)
[Issues(议题)](https://github.com/RayWangQvQ/BiliBiliToolPro/issues)板块可以用来提交**Bug**和**建议**;
[Discussions(讨论)](https://github.com/RayWangQvQ/BiliBiliToolPro/discussions)板块可以用来**提问**和**讨论**。
大部分问题其实都可以在文档、议题和讨论中找到答案。
所以如果你有疑问,
* 请先确认是否可以通过升级到最新版本解决
* 然后搜索文档(特别是配置说明文档和常见问题文档)、议题和讨论,查看是否已有其他人遇到相同问题、是否已有解决方案
如果确认还未解决,可以自己提交 Issue,或发布 Discussions 与大家一起探讨,我会尽快确认并解决。
(关于如何正确的提交Issue,请详见**常见问题文档**)。
## 6. 版本发布及更新
当前正处于稳定的迭代开发中,详细待更新和计划内容可参见 [Projects](https://github.com/RayWangQvQ/BiliBiliToolPro/projects) 和 [Issues](https://github.com/RayWangQvQ/BiliBiliToolPro/issues) 。
想要有重要更新时收到通知的话,可以把仓库右上角的`Star`按钮点亮。
## 7. 成为开源贡献成员
### 7.1. 贡献代码
如果你有好的想法,欢迎向仓库贡献你的代码,贡献步骤:
* 搜索查看 Issue,确定是否已有人提过同类问题
* 对于不确定的主题,为避免code结束后PR不被接受,可以先新建 Issue,描述问题或建议,讨论清楚后再动手编码
* 如果确认自己可以解决,请 Fork 仓库后,在**develop 分支**进行编码开发,完成后**提交 PR 到 develop 分支**
我会尽快进行代码审核,测试成功后会合并入 main 主分支,提前感谢您的贡献。
### 7.2. 贡献文档
文档部分由于我个人精力有限(写文档比写代码累多了),所以有些地方写的很简略,甚至有遗漏和错别字,不能贡献代码的朋友也欢迎来一起维护文档,欢迎 PR 来纠正我,一样都算是对开源做贡献了。
## 8. 捐赠支持
个人维护开源不易
如果觉得我写的程序对你小有帮助
或者,就是单纯的想集资给我买瓶霸王增发液
那么下面的赞赏码可以扫一扫啦
(赞赏时记得留下【昵称】和【留言】~ 另外我发现很多留言想要进群或者加好友的,一定一定要记得留下微信号哈,微信赞赏页面是看不到微信号的)
**☟☟☟ 扫码自动赞赏 1 元:☟☟☟**

> 项目中的优先支持的UP主的配置项,默认是作者的 UpId (只是作为了 JSON 配置文件的默认值,代码是干净的),需要更改的话,直接修改相应配置即可(secrets或环境变量等各种方式都行)。
当然,不改的话,也算是另一种捐赠支持作者的方式啦。
感谢支持~
## 9. 其他
`API`参考:
- [www.bilibili.com](https://www.bilibili.com/)
- [SocialSisterYi/bilibili-API-collect](https://github.com/SocialSisterYi/bilibili-API-collect)
- [JunzhouLiu/BILIBILI-HELPER](https://github.com/JunzhouLiu/BILIBILI-HELPER)
❤️Thanks to `JetBrains` for the free certificate support:
<p align="center">
<img src="https://resources.jetbrains.com/storage/products/company/brand/logos/ReSharper.svg" alt="ReSharper logo" width="200">
</p>
❤️Thanks to [YxVM](https://yxvm.com/aff.php?aff=668) & [NodeSeekDev](https://github.com/NodeSeekDev/NodeSupport) for sponsoring the server for testing support:
<p align="center">
<a href="https://yxvm.com/aff.php?aff=668">
<img src="docs/imgs/node-support.png" alt="YxVm logo" width="200">
</a>
</p>
❤️Thanks to [DartNode](https://dartnode.com?aff=FriskyGopher833) for sponsoring the server for testing support:
[](https://dartnode.com "Powered by DartNode - Free VPS for Open Source")
❤️Thank you for your star to this project:
[](https://www.star-history.com/#RayWangQvQ/BiliBiliToolPro&Date)
================================================
FILE: Ray.BiliBiliTool.sln
================================================
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.0.32112.339
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "UI", "UI", "{38736647-2196-417E-8519-C48A012A63D9}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Application", "Application", "{98051127-2868-4F5C-9B2C-2150975E05F3}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Domain", "Domain", "{120917DC-474C-448B-9EBB-1B3BA3A20B9D}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{AF21E067-3307-4E7F-8CE8-C695E6B61876}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{E9BDDCBE-A57D-4E3B-8252-708088386ADF}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ray.BiliBiliTool.Console", "src\Ray.BiliBiliTool.Console\Ray.BiliBiliTool.Console.csproj", "{DB227D60-0737-45C2-8CEA-F55FDA711301}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ConfigTest", "test\ConfigTest\ConfigTest.csproj", "{114D45C8-E4BB-47EE-89AC-BD1DC6FA3BAD}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LogTest", "test\LogTest\LogTest.csproj", "{2039BF6A-5EC4-439C-8D2E-77313075843A}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Infrastructure", "Infrastructure", "{110D3D21-8E9B-45AB-9667-6DA1DB3862AC}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ray.BiliBiliTool.Infrastructure", "src\Ray.BiliBiliTool.Infrastructure\Ray.BiliBiliTool.Infrastructure.csproj", "{7188698C-0A9A-43B2-B3E2-5136B14FDE13}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ray.BiliBiliTool.Application", "src\Ray.BiliBiliTool.Application\Ray.BiliBiliTool.Application.csproj", "{3388A58D-91CC-4875-A29F-3E6FC3B44BF5}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ray.BiliBiliTool.Application.Contracts", "src\Ray.BiliBiliTool.Application.Contracts\Ray.BiliBiliTool.Application.Contracts.csproj", "{B6AEDD60-9C06-4391-9171-65EBD5E9D77A}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ray.BiliBiliTool.Agent", "src\Ray.BiliBiliTool.Agent\Ray.BiliBiliTool.Agent.csproj", "{D5F9FBCE-31BE-4E80-93E2-183CF029431F}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ray.BiliBiliTool.Config", "src\Ray.BiliBiliTool.Config\Ray.BiliBiliTool.Config.csproj", "{191C48BD-5CB5-42CA-B394-7A4A9BFA6275}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ray.BiliBiliTool.DomainService", "src\Ray.BiliBiliTool.DomainService\Ray.BiliBiliTool.DomainService.csproj", "{7105652A-B1C1-4F9E-BA38-8034BC8B26B4}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{F3DE0D72-426B-4AD9-B3ED-3343CF4223F1}"
ProjectSection(SolutionItems) = preProject
.dockerignore = .dockerignore
.editorconfig = .editorconfig
.gitignore = .gitignore
CHANGELOG.md = CHANGELOG.md
common.props = common.props
Dockerfile = Dockerfile
LICENSE = LICENSE
README.md = README.md
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".github", ".github", "{73DD457B-E06E-45ED-A6BA-7E3C02F8BDF1}"
ProjectSection(SolutionItems) = preProject
.github\pull.yml = .github\pull.yml
.github\PULL_REQUEST_TEMPLATE.md = .github\PULL_REQUEST_TEMPLATE.md
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "workflows", "workflows", "{61613EF4-3644-42D4-A620-70547291FB38}"
ProjectSection(SolutionItems) = preProject
.github\workflows\auto-close-pr.yml = .github\workflows\auto-close-pr.yml
.github\workflows\auto-deploy-tencent-scf.yml = .github\workflows\auto-deploy-tencent-scf.yml
.github\workflows\codeql-analysis.yml = .github\workflows\codeql-analysis.yml
.github\workflows\publish-image.yml = .github\workflows\publish-image.yml
.github\workflows\publish-release.yml = .github\workflows\publish-release.yml
.github\workflows\repo-sync.yml = .github\workflows\repo-sync.yml
.github\workflows\tag.yml = .github\workflows\tag.yml
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "docker", "docker", "{A93210FD-27B6-40E4-B08D-391F96CA2754}"
ProjectSection(SolutionItems) = preProject
docker\README.md = docker\README.md
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "sample", "sample", "{2F1CB892-336C-4672-8A0A-FBAEB4B9EA8A}"
ProjectSection(SolutionItems) = preProject
docker\sample\docker-compose.yml = docker\sample\docker-compose.yml
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "docs", "docs", "{C0173851-1515-4BE1-A018-84E0B64A6877}"
ProjectSection(SolutionItems) = preProject
docs\configuration.md = docs\configuration.md
docs\donate-list.md = docs\donate-list.md
docs\questions.md = docs\questions.md
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tencentScf", "tencentScf", "{DD86F293-AE70-46CF-837C-8870D8F51237}"
ProjectSection(SolutionItems) = preProject
tencentScf\bootstrap = tencentScf\bootstrap
tencentScf\index.sh = tencentScf\index.sh
tencentScf\publish.bat = tencentScf\publish.bat
tencentScf\publish.sh = tencentScf\publish.sh
tencentScf\README.md = tencentScf\README.md
tencentScf\serverless.yml = tencentScf\serverless.yml
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "qinglong", "qinglong", "{1C6CC38A-A5D5-41EF-9072-70AEEEA211F7}"
ProjectSection(SolutionItems) = preProject
qinglong\dotnet-install.sh = qinglong\dotnet-install.sh
qinglong\extra.sh = qinglong\extra.sh
qinglong\ray-dotnet-install.sh = qinglong\ray-dotnet-install.sh
qinglong\README.md = qinglong\README.md
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DefaultTasks", "DefaultTasks", "{DE60A16C-CA3B-45E9-8A9D-0E91ACEBDEE0}"
ProjectSection(SolutionItems) = preProject
qinglong\DefaultTasks\bili_dev_task_daily.sh = qinglong\DefaultTasks\bili_dev_task_daily.sh
qinglong\DefaultTasks\bili_dev_task_liveLottery.sh = qinglong\DefaultTasks\bili_dev_task_liveLottery.sh
qinglong\DefaultTasks\bili_dev_task_test.sh = qinglong\DefaultTasks\bili_dev_task_test.sh
qinglong\DefaultTasks\bili_dev_task_unfollowBatched.sh = qinglong\DefaultTasks\bili_dev_task_unfollowBatched.sh
qinglong\DefaultTasks\bili_task_daily.sh = qinglong\DefaultTasks\bili_task_daily.sh
qinglong\DefaultTasks\bili_task_liveLottery.sh = qinglong\DefaultTasks\bili_task_liveLottery.sh
qinglong\DefaultTasks\bili_task_test.sh = qinglong\DefaultTasks\bili_task_test.sh
qinglong\DefaultTasks\bili_task_unfollowBatched.sh = qinglong\DefaultTasks\bili_task_unfollowBatched.sh
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ISSUE_TEMPLATE", "ISSUE_TEMPLATE", "{830361B7-BCC1-4853-879A-761B0FD86826}"
ProjectSection(SolutionItems) = preProject
.github\ISSUE_TEMPLATE\bug-report----.md = .github\ISSUE_TEMPLATE\bug-report----.md
.github\ISSUE_TEMPLATE\bug-report-qinglong----.md = .github\ISSUE_TEMPLATE\bug-report-qinglong----.md
.github\ISSUE_TEMPLATE\feature-request----.md = .github\ISSUE_TEMPLATE\feature-request----.md
.github\ISSUE_TEMPLATE\other----.md = .github\ISSUE_TEMPLATE\other----.md
EndProjectSection
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BiliAgentTest", "test\BiliAgentTest\BiliAgentTest.csproj", "{F6B8ED3A-5428-4D26-8172-8B41FBF0C4CF}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "build", "build", "{75A9CC5C-DF92-4D72-A14C-625AA902855B}"
ProjectSection(SolutionItems) = preProject
docker\build\buildImage.cmd = docker\build\buildImage.cmd
docker\build\buildImage_amd64.cmd = docker\build\buildImage_amd64.cmd
docker\build\buildImage_arm64.cmd = docker\build\buildImage_arm64.cmd
EndProjectSection
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AppServiceTest", "test\AppServiceTest\AppServiceTest.csproj", "{1D9DFF34-71EA-44AE-85B0-1F10C9BA0D81}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DomainServiceTest", "test\DomainServiceTest\DomainServiceTest.csproj", "{26B21C30-7358-4E7B-A73E-2272F10A6CA8}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "InfrastructureTest", "test\InfrastructureTest\InfrastructureTest.csproj", "{90C1DB73-B3DB-4BE5-AD1A-5248FE47860E}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ray.BiliBiliTool.Agent.FunctionalTests", "test\Ray.BiliBiliTool.Agent.FunctionalTests\Ray.BiliBiliTool.Agent.FunctionalTests.csproj", "{16F315CF-056A-4B08-8C3C-A3177EA3CBB9}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "scripts", "scripts", "{2B5FD099-CC28-4FBC-9F20-F20300C5DFD2}"
ProjectSection(SolutionItems) = preProject
scripts\clean.cmd = scripts\clean.cmd
scripts\publish.bat = scripts\publish.bat
scripts\publish.ps1 = scripts\publish.ps1
scripts\publish.sh = scripts\publish.sh
scripts\ut.ps1 = scripts\ut.ps1
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ray.BiliBiliTool.Web.Client", "src\Ray.BiliBiliTool.Web.Client\Ray.BiliBiliTool.Web.Client.csproj", "{5772E00F-271F-4B25-8B10-A3C24D8D3E10}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ray.BiliBiliTool.Web", "src\Ray.BiliBiliTool.Web\Ray.BiliBiliTool.Web.csproj", "{189F1FF4-2BFA-4F91-A6B2-00D00AC2910C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BlazingQuartz.Core", "src\BlazingQuartz.Core\BlazingQuartz.Core.csproj", "{C947CA59-157C-47F0-A842-7912FACDADA7}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BlazingQuartz.Jobs.Abstractions", "src\BlazingQuartz.Jobs.Abstractions\BlazingQuartz.Jobs.Abstractions.csproj", "{5792B0A0-A3F5-461D-AD44-8E8778298BE4}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BlazingQuartz.Jobs", "src\BlazingQuartz.Jobs\BlazingQuartz.Jobs.csproj", "{1F93A755-60A6-4B14-A522-633A732F3B91}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ray.BiliBiliTool.Domain", "src\Ray.BiliBiliTool.Domain\Ray.BiliBiliTool.Domain.csproj", "{C1334E67-CCF9-4F5B-9C1F-B9516A8270AB}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ray.BiliBiliTool.Infrastructure.EF", "src\Ray.BiliBiliTool.Infrastructure.EF\Ray.BiliBiliTool.Infrastructure.EF.csproj", "{59583288-CE93-42A4-AC9F-67DE347A02A1}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{DB227D60-0737-45C2-8CEA-F55FDA711301}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DB227D60-0737-45C2-8CEA-F55FDA711301}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DB227D60-0737-45C2-8CEA-F55FDA711301}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DB227D60-0737-45C2-8CEA-F55FDA711301}.Release|Any CPU.Build.0 = Release|Any CPU
{114D45C8-E4BB-47EE-89AC-BD1DC6FA3BAD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{114D45C8-E4BB-47EE-89AC-BD1DC6FA3BAD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{114D45C8-E4BB-47EE-89AC-BD1DC6FA3BAD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{114D45C8-E4BB-47EE-89AC-BD1DC6FA3BAD}.Release|Any CPU.Build.0 = Release|Any CPU
{2039BF6A-5EC4-439C-8D2E-77313075843A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2039BF6A-5EC4-439C-8D2E-77313075843A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2039BF6A-5EC4-439C-8D2E-77313075843A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2039BF6A-5EC4-439C-8D2E-77313075843A}.Release|Any CPU.Build.0 = Release|Any CPU
{7188698C-0A9A-43B2-B3E2-5136B14FDE13}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7188698C-0A9A-43B2-B3E2-5136B14FDE13}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7188698C-0A9A-43B2-B3E2-5136B14FDE13}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7188698C-0A9A-43B2-B3E2-5136B14FDE13}.Release|Any CPU.Build.0 = Release|Any CPU
{3388A58D-91CC-4875-A29F-3E6FC3B44BF5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3388A58D-91CC-4875-A29F-3E6FC3B44BF5}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3388A58D-91CC-4875-A29F-3E6FC3B44BF5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3388A58D-91CC-4875-A29F-3E6FC3B44BF5}.Release|Any CPU.Build.0 = Release|Any CPU
{B6AEDD60-9C06-4391-9171-65EBD5E9D77A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B6AEDD60-9C06-4391-9171-65EBD5E9D77A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B6AEDD60-9C06-4391-9171-65EBD5E9D77A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B6AEDD60-9C06-4391-9171-65EBD5E9D77A}.Release|Any CPU.Build.0 = Release|Any CPU
{D5F9FBCE-31BE-4E80-93E2-183CF029431F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D5F9FBCE-31BE-4E80-93E2-183CF029431F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D5F9FBCE-31BE-4E80-93E2-183CF029431F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D5F9FBCE-31BE-4E80-93E2-183CF029431F}.Release|Any CPU.Build.0 = Release|Any CPU
{191C48BD-5CB5-42CA-B394-7A4A9BFA6275}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{191C48BD-5CB5-42CA-B394-7A4A9BFA6275}.Debug|Any CPU.Build.0 = Debug|Any CPU
{191C48BD-5CB5-42CA-B394-7A4A9BFA6275}.Release|Any CPU.ActiveCfg = Release|Any CPU
{191C48BD-5CB5-42CA-B394-7A4A9BFA6275}.Release|Any CPU.Build.0 = Release|Any CPU
{7105652A-B1C1-4F9E-BA38-8034BC8B26B4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7105652A-B1C1-4F9E-BA38-8034BC8B26B4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7105652A-B1C1-4F9E-BA38-8034BC8B26B4}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7105652A-B1C1-4F9E-BA38-8034BC8B26B4}.Release|Any CPU.Build.0 = Release|Any CPU
{F6B8ED3A-5428-4D26-8172-8B41FBF0C4CF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F6B8ED3A-5428-4D26-8172-8B41FBF0C4CF}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F6B8ED3A-5428-4D26-8172-8B41FBF0C4CF}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F6B8ED3A-5428-4D26-8172-8B41FBF0C4CF}.Release|Any CPU.Build.0 = Release|Any CPU
{1D9DFF34-71EA-44AE-85B0-1F10C9BA0D81}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1D9DFF34-71EA-44AE-85B0-1F10C9BA0D81}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1D9DFF34-71EA-44AE-85B0-1F10C9BA0D81}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1D9DFF34-71EA-44AE-85B0-1F10C9BA0D81}.Release|Any CPU.Build.0 = Release|Any CPU
{26B21C30-7358-4E7B-A73E-2272F10A6CA8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{26B21C30-7358-4E7B-A73E-2272F10A6CA8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{26B21C30-7358-4E7B-A73E-2272F10A6CA8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{26B21C30-7358-4E7B-A73E-2272F10A6CA8}.Release|Any CPU.Build.0 = Release|Any CPU
{90C1DB73-B3DB-4BE5-AD1A-5248FE47860E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{90C1DB73-B3DB-4BE5-AD1A-5248FE47860E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{90C1DB73-B3DB-4BE5-AD1A-5248FE47860E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{90C1DB73-B3DB-4BE5-AD1A-5248FE47860E}.Release|Any CPU.Build.0 = Release|Any CPU
{16F315CF-056A-4B08-8C3C-A3177EA3CBB9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{16F315CF-056A-4B08-8C3C-A3177EA3CBB9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{16F315CF-056A-4B08-8C3C-A3177EA3CBB9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{16F315CF-056A-4B08-8C3C-A3177EA3CBB9}.Release|Any CPU.Build.0 = Release|Any CPU
{5772E00F-271F-4B25-8B10-A3C24D8D3E10}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5772E00F-271F-4B25-8B10-A3C24D8D3E10}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5772E00F-271F-4B25-8B10-A3C24D8D3E10}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5772E00F-271F-4B25-8B10-A3C24D8D3E10}.Release|Any CPU.Build.0 = Release|Any CPU
{189F1FF4-2BFA-4F91-A6B2-00D00AC2910C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{189F1FF4-2BFA-4F91-A6B2-00D00AC2910C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{189F1FF4-2BFA-4F91-A6B2-00D00AC2910C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{189F1FF4-2BFA-4F91-A6B2-00D00AC2910C}.Release|Any CPU.Build.0 = Release|Any CPU
{C947CA59-157C-47F0-A842-7912FACDADA7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C947CA59-157C-47F0-A842-7912FACDADA7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C947CA59-157C-47F0-A842-7912FACDADA7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C947CA59-157C-47F0-A842-7912FACDADA7}.Release|Any CPU.Build.0 = Release|Any CPU
{5792B0A0-A3F5-461D-AD44-8E8778298BE4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5792B0A0-A3F5-461D-AD44-8E8778298BE4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5792B0A0-A3F5-461D-AD44-8E8778298BE4}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5792B0A0-A3F5-461D-AD44-8E8778298BE4}.Release|Any CPU.Build.0 = Release|Any CPU
{1F93A755-60A6-4B14-A522-633A732F3B91}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1F93A755-60A6-4B14-A522-633A732F3B91}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1F93A755-60A6-4B14-A522-633A732F3B91}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1F93A755-60A6-4B14-A522-633A732F3B91}.Release|Any CPU.Build.0 = Release|Any CPU
{C1334E67-CCF9-4F5B-9C1F-B9516A8270AB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C1334E67-CCF9-4F5B-9C1F-B9516A8270AB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C1334E67-CCF9-4F5B-9C1F-B9516A8270AB}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C1334E67-CCF9-4F5B-9C1F-B9516A8270AB}.Release|Any CPU.Build.0 = Release|Any CPU
{59583288-CE93-42A4-AC9F-67DE347A02A1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{59583288-CE93-42A4-AC9F-67DE347A02A1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{59583288-CE93-42A4-AC9F-67DE347A02A1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{59583288-CE93-42A4-AC9F-67DE347A02A1}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{38736647-2196-417E-8519-C48A012A63D9} = {AF21E067-3307-4E7F-8CE8-C695E6B61876}
{98051127-2868-4F5C-9B2C-2150975E05F3} = {AF21E067-3307-4E7F-8CE8-C695E6B61876}
{120917DC-474C-448B-9EBB-1B3BA3A20B9D} = {AF21E067-3307-4E7F-8CE8-C695E6B61876}
{DB227D60-0737-45C2-8CEA-F55FDA711301} = {38736647-2196-417E-8519-C48A012A63D9}
{114D45C8-E4BB-47EE-89AC-BD1DC6FA3BAD} = {E9BDDCBE-A57D-4E3B-8252-708088386ADF}
{2039BF6A-5EC4-439C-8D2E-77313075843A} = {E9BDDCBE-A57D-4E3B-8252-708088386ADF}
{110D3D21-8E9B-45AB-9667-6DA1DB3862AC} = {AF21E067-3307-4E7F-8CE8-C695E6B61876}
{7188698C-0A9A-43B2-B3E2-5136B14FDE13} = {110D3D21-8E9B-45AB-9667-6DA1DB3862AC}
{3388A58D-91CC-4875-A29F-3E6FC3B44BF5} = {98051127-2868-4F5C-9B2C-2150975E05F3}
{B6AEDD60-9C06-4391-9171-65EBD5E9D77A} = {98051127-2868-4F5C-9B2C-2150975E05F3}
{D5F9FBCE-31BE-4E80-93E2-183CF029431F} = {120917DC-474C-448B-9EBB-1B3BA3A20B9D}
{191C48BD-5CB5-42CA-B394-7A4A9BFA6275} = {120917DC-474C-448B-9EBB-1B3BA3A20B9D}
{7105652A-B1C1-4F9E-BA38-8034BC8B26B4} = {120917DC-474C-448B-9EBB-1B3BA3A20B9D}
{73DD457B-E06E-45ED-A6BA-7E3C02F8BDF1} = {F3DE0D72-426B-4AD9-B3ED-3343CF4223F1}
{61613EF4-3644-42D4-A620-70547291FB38} = {73DD457B-E06E-45ED-A6BA-7E3C02F8BDF1}
{A93210FD-27B6-40E4-B08D-391F96CA2754} = {F3DE0D72-426B-4AD9-B3ED-3343CF4223F1}
{2F1CB892-336C-4672-8A0A-FBAEB4B9EA8A} = {A93210FD-27B6-40E4-B08D-391F96CA2754}
{DD86F293-AE70-46CF-837C-8870D8F51237} = {F3DE0D72-426B-4AD9-B3ED-3343CF4223F1}
{1C6CC38A-A5D5-41EF-9072-70AEEEA211F7} = {F3DE0D72-426B-4AD9-B3ED-3343CF4223F1}
{DE60A16C-CA3B-45E9-8A9D-0E91ACEBDEE0} = {1C6CC38A-A5D5-41EF-9072-70AEEEA211F7}
{830361B7-BCC1-4853-879A-761B0FD86826} = {73DD457B-E06E-45ED-A6BA-7E3C02F8BDF1}
{F6B8ED3A-5428-4D26-8172-8B41FBF0C4CF} = {E9BDDCBE-A57D-4E3B-8252-708088386ADF}
{75A9CC5C-DF92-4D72-A14C-625AA902855B} = {A93210FD-27B6-40E4-B08D-391F96CA2754}
{1D9DFF34-71EA-44AE-85B0-1F10C9BA0D81} = {E9BDDCBE-A57D-4E3B-8252-708088386ADF}
{26B21C30-7358-4E7B-A73E-2272F10A6CA8} = {E9BDDCBE-A57D-4E3B-8252-708088386ADF}
{90C1DB73-B3DB-4BE5-AD1A-5248FE47860E} = {E9BDDCBE-A57D-4E3B-8252-708088386ADF}
{16F315CF-056A-4B08-8C3C-A3177EA3CBB9} = {E9BDDCBE-A57D-4E3B-8252-708088386ADF}
{2B5FD099-CC28-4FBC-9F20-F20300C5DFD2} = {F3DE0D72-426B-4AD9-B3ED-3343CF4223F1}
{5772E00F-271F-4B25-8B10-A3C24D8D3E10} = {38736647-2196-417E-8519-C48A012A63D9}
{189F1FF4-2BFA-4F91-A6B2-00D00AC2910C} = {38736647-2196-417E-8519-C48A012A63D9}
{C947CA59-157C-47F0-A842-7912FACDADA7} = {98051127-2868-4F5C-9B2C-2150975E05F3}
{5792B0A0-A3F5-461D-AD44-8E8778298BE4} = {98051127-2868-4F5C-9B2C-2150975E05F3}
{1F93A755-60A6-4B14-A522-633A732F3B91} = {98051127-2868-4F5C-9B2C-2150975E05F3}
{C1334E67-CCF9-4F5B-9C1F-B9516A8270AB} = {120917DC-474C-448B-9EBB-1B3BA3A20B9D}
{59583288-CE93-42A4-AC9F-67DE347A02A1} = {110D3D21-8E9B-45AB-9667-6DA1DB3862AC}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {197319DA-1148-4A99-847C-8B270B6A29AB}
EndGlobalSection
EndGlobal
================================================
FILE: bruno/api.bilibili.com/x/space/folder.bru
================================================
meta {
name: space
}
================================================
FILE: bruno/api.bilibili.com/x/space/wbi-acc-info.bru
================================================
meta {
name: wbi-acc-info
type: http
seq: 1
}
get {
url: https://api.bilibili.com/x/space/wbi/acc/info?mid=23947287&token&platform=web&web_location=1550101&dm_img_list=[]&dm_img_str=V2ViR0wgMS4wIChPcGVuR0wgRVMgMi4wIENocm9taXVtKQ&dm_cover_img_str=QU5HTEUgKEFNRCwgQU1EIFJhZGVvbihUTSkgR3JhcGhpY3MgKDB4MDAwMDE2MzgpIERpcmVjdDNEMTEgdnNfNV8wIHBzXzVfMCwgRDNEMTEpR29vZ2xlIEluYy4gKEFNRC&dm_img_inter={"ds":[],"wh":[5563,4171,107],"of":[66,132,66]}&w_webid=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzcG1faWQiOiIzMzMuMTM4NyIsImJ1dmlkIjoiQ0VGODNDQjAtMzY2NC0zNDU4LTI5RTctRTJFOENCQjY0NzlCNjU2MjFpbmZvYyIsInVzZXJfYWdlbnQiOiJNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTM3LjAuMC4wIFNhZmFyaS81MzcuMzYgRWRnLzEzNy4wLjAuMCIsImJ1dmlkX2ZwIjoiMDNjNGYyNWQyZTlmMDZkNjU4NzJlMmVhNTdiMjJmMzkiLCJiaWxpX3RpY2tldCI6ImV5SmhiR2NpT2lKSVV6STFOaUlzSW10cFpDSTZJbk13TXlJc0luUjVjQ0k2SWtwWFZDSjkuZXlKbGVIQWlPakUzTkRjM01qYzVORGdzSW1saGRDSTZNVGMwTnpRMk9EWTRPQ3dpY0d4MElqb3RNWDAuQmVkeFFPX3VZMllldFVFb0FvWE5hellBNzFTTkdhc0JtSkNnaFFsVy1iTSIsImNyZWF0ZWRfYXQiOjE3NDc0Njg4NDEsInR0bCI6ODY0MDAsInVybCI6Ii8yMzk0NzI4NyIsInJlc3VsdCI6MCwiaXNzIjoiZ2FpYSIsImlhdCI6MTc0NzQ2ODg0MX0.IhLw1v9Auwys4SFZ7PFaTXgkVqodmz67ZdVPORbnmcw3rxirilDqngVFpr3AYjUQ8hx-gmGTrMgeus12QE4zn9ql-wjTRKzbi9G2WEzDKEwHMNBKVIepaSZqHYIbKBwWsjqdEL9paDeRDpPiZ37YJ4YMKNsFfEP2yC_4ke2_KS2cgfSaaOhaXtXfEZortr_KvKWhY3gtJKC77HqEerZEID5hda8oqCTxZbb7gV7DDuncJ803K9H5ezWn-8a-y3eSdpbBB8Td5-u8At9mhHVgrKcODM7gi-Lhbnb86m7p4yyBoPs_iucDQJSGvs9Lijio57bL60Qm6_mIz0p49rzFWA&w_rid=160dcf0623b0733688e8940d2f6763e3&wts=1747468845
body: none
auth: inherit
}
params:query {
mid: 23947287
token:
platform: web
web_location: 1550101
dm_img_list: []
dm_img_str: V2ViR0wgMS4wIChPcGVuR0wgRVMgMi4wIENocm9taXVtKQ
dm_cover_img_str: QU5HTEUgKEFNRCwgQU1EIFJhZGVvbihUTSkgR3JhcGhpY3MgKDB4MDAwMDE2MzgpIERpcmVjdDNEMTEgdnNfNV8wIHBzXzVfMCwgRDNEMTEpR29vZ2xlIEluYy4gKEFNRC
dm_img_inter: {"ds":[],"wh":[5563,4171,107],"of":[66,132,66]}
w_webid: eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzcG1faWQiOiIzMzMuMTM4NyIsImJ1dmlkIjoiQ0VGODNDQjAtMzY2NC0zNDU4LTI5RTctRTJFOENCQjY0NzlCNjU2MjFpbmZvYyIsInVzZXJfYWdlbnQiOiJNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTM3LjAuMC4wIFNhZmFyaS81MzcuMzYgRWRnLzEzNy4wLjAuMCIsImJ1dmlkX2ZwIjoiMDNjNGYyNWQyZTlmMDZkNjU4NzJlMmVhNTdiMjJmMzkiLCJiaWxpX3RpY2tldCI6ImV5SmhiR2NpT2lKSVV6STFOaUlzSW10cFpDSTZJbk13TXlJc0luUjVjQ0k2SWtwWFZDSjkuZXlKbGVIQWlPakUzTkRjM01qYzVORGdzSW1saGRDSTZNVGMwTnpRMk9EWTRPQ3dpY0d4MElqb3RNWDAuQmVkeFFPX3VZMllldFVFb0FvWE5hellBNzFTTkdhc0JtSkNnaFFsVy1iTSIsImNyZWF0ZWRfYXQiOjE3NDc0Njg4NDEsInR0bCI6ODY0MDAsInVybCI6Ii8yMzk0NzI4NyIsInJlc3VsdCI6MCwiaXNzIjoiZ2FpYSIsImlhdCI6MTc0NzQ2ODg0MX0.IhLw1v9Auwys4SFZ7PFaTXgkVqodmz67ZdVPORbnmcw3rxirilDqngVFpr3AYjUQ8hx-gmGTrMgeus12QE4zn9ql-wjTRKzbi9G2WEzDKEwHMNBKVIepaSZqHYIbKBwWsjqdEL9paDeRDpPiZ37YJ4YMKNsFfEP2yC_4ke2_KS2cgfSaaOhaXtXfEZortr_KvKWhY3gtJKC77HqEerZEID5hda8oqCTxZbb7gV7DDuncJ803K9H5ezWn-8a-y3eSdpbBB8Td5-u8At9mhHVgrKcODM7gi-Lhbnb86m7p4yyBoPs_iucDQJSGvs9Lijio57bL60Qm6_mIz0p49rzFWA
w_rid: 160dcf0623b0733688e8940d2f6763e3
wts: 1747468845
}
headers {
accept: */*
accept-language: en
dnt: 1
origin: https://space.bilibili.com
priority: u=1, i
referer: https://space.bilibili.com/23947287
sec-ch-ua: "Microsoft Edge";v="137", "Chromium";v="137", "Not/A)Brand";v="24"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
sec-fetch-dest: empty
sec-fetch-mode: cors
sec-fetch-site: same-site
user-agent: {{user-agent}}
Cookie: {{cookieStr}}
}
================================================
FILE: bruno/api.bilibili.com/x/vip/folder.bru
================================================
meta {
name: vip
}
================================================
FILE: bruno/api.bilibili.com/x/vip/vip_center/folder.bru
================================================
meta {
name: vip_center
}
================================================
FILE: bruno/api.bilibili.com/x/vip/vip_center/sign_in/folder.bru
================================================
meta {
name: sign_in
}
================================================
FILE: bruno/api.bilibili.com/x/vip/vip_center/sign_in/three_days_sign.bru
================================================
meta {
name: three_days_sign
type: http
seq: 1
}
get {
url: https://api.bilibili.com/x/vip/vip_center/sign_in/three_days_sign?access_key={{access_key}}&appkey={{appKey}}&build=8451100&csrf={{csrf}}&device=phone&disable_rcmd=0&mobi_app=android&platform=android&statistics={"appId":1,"platform":3,"version":"8.45.1","abtest":""}&t=1748747431084&ts=1748747431&web_location=666.146&sign=e95c76f976aed346f84cdc7098f8c35e
body: none
auth: inherit
}
params:query {
access_key: {{access_key}}
appkey: {{appKey}}
build: 8451100
csrf: {{csrf}}
device: phone
disable_rcmd: 0
mobi_app: android
platform: android
statistics: {"appId":1,"platform":3,"version":"8.45.1","abtest":""}
t: 1748747431084
ts: 1748747431
web_location: 666.146
sign: e95c76f976aed346f84cdc7098f8c35e
}
headers {
Host: api.bilibili.com
Cookie: {{cookieStr}}
accept: application/json, text/plain, */*
bili-http-engine: ignet
buvid: {{buvid}}
native_api_from: h5
referer: https://big.bilibili.com/mobile/index
user-agent: {{user-agent}}
x-bili-aurora-eid: UlAAQFkMBVkH
x-bili-metadata-legal-region: CN
x-bili-mid: {{mid}}
x-bili-net-bin: DQAAgL8gAQ
x-bili-ticket: eyJhbGciOiJIUzI1NiIsImtpZCI6InMwMyIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3NDg3NzU1OTksImlhdCI6MTc0ODc0NjQ5OSwiYnV2aWQiOiJYVUE1NjUxQTlFREY3Mzg3MTUzQTk0NUNERTk2Q0FEQ0I2MDAwIn0.k0x2o3e2Q3W-6Wzc56IhbLgSjDKTaAuUV9om7K213fI
x-bili-trace-id: 25ad3d0de58f794c18d1a884fc683bc4:18d1a884fc683bc4:0:0
}
docs {
Response sample:
```json
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {
"big_point": {
"point": 405,
"expire_point": 0,
"expire_time": 0,
"expire_days": 0
},
"three_day_sign": {
"previous_vip_status": 0,
"vip_status": 1,
"day": 5,
"signed": false,
"count": 2,
"has_coupon": false,
"countdown": 0,
"icon": "",
"score": 5,
"vip_score": 5,
"explain": "",
"exp_value": 3,
"received_coupon": false,
"day1_icon": "https://i0.hdslb.com/bfs/activity-plat/static/4cefecc6742f8995a6bd22402a6d0b8b/day1_icon.png",
"day2_icon": "https://i0.hdslb.com/bfs/activity-plat/static/4cefecc6742f8995a6bd22402a6d0b8b/day2_icon.png",
"day3_icon": "https://i0.hdslb.com/bfs/activity-plat/static/4cefecc6742f8995a6bd22402a6d0b8b/day3_icon.png",
"day3_icon_vip": "https://i0.hdslb.com/bfs/activity-plat/static/4cefecc6742f8995a6bd22402a6d0b8b/day3_icon_vip.png",
"day3_win_img": "https://i0.hdslb.com/bfs/activity-plat/static/4cefecc6742f8995a6bd22402a6d0b8b/day3_win_img.png",
"day3_win_img_vip": "https://i0.hdslb.com/bfs/activity-plat/static/4cefecc6742f8995a6bd22402a6d0b8b/day3_win_img_vip.png",
"day3_icon_received": "https://i0.hdslb.com/bfs/activity-plat/static/4cefecc6742f8995a6bd22402a6d0b8b/day3_icon_received.png",
"day3_icon_vip_received": "https://i0.hdslb.com/bfs/activity-plat/static/4cefecc6742f8995a6bd22402a6d0b8b/day3_icon_vip_received.png",
"duration": 7
}
}
}
```
}
================================================
FILE: bruno/api.bilibili.com/x/vip/web/folder.bru
================================================
meta {
name: web
}
================================================
FILE: bruno/api.bilibili.com/x/vip/web/vip_center/folder.bru
================================================
meta {
name: vip_center
}
================================================
FILE: bruno/api.bilibili.com/x/vip/web/vip_center/modules.bru
================================================
meta {
name: modules
type: http
seq: 2
}
get {
url: https://api.bilibili.com/x/vip/web/vip_center/modules?access_key={{access_key}}&act_id=872&appkey={{appKey}}&build=8451100&csrf={{csrf}}&device=phone&disable_rcmd=0&is_selected=true&mobi_app=android&platform=android&select_modules=VipExclusive,BigPoint&statistics={"appId":1,"platform":3,"version":"8.45.1","abtest":""}&ts=1748751549&web_location=666.146&sign=4b1610076d36f3eaf400307591fce0d0
body: none
auth: inherit
}
params:query {
access_key: {{access_key}}
act_id: 872
appkey: {{appKey}}
build: 8451100
csrf: {{csrf}}
device: phone
disable_rcmd: 0
is_selected: true
mobi_app: android
platform: android
select_modules: VipExclusive,BigPoint
statistics: {"appId":1,"platform":3,"version":"8.45.1","abtest":""}
ts: 1748751549
web_location: 666.146
sign: 4b1610076d36f3eaf400307591fce0d0
}
headers {
Host: api.bilibili.com
Cookie: {{cookieStr}}
accept: application/json, text/plain, */*
bili-http-engine: ignet
buvid: {{buvid}}
native_api_from: h5
referer: https://big.bilibili.com/mobile/index
user-agent: {{user-agent}}
x-bili-aurora-eid: UlAAQFkMBVkH
x-bili-metadata-legal-region: CN
x-bili-mid: {{mid}}
x-bili-net-bin: DQAAgL8gAQ
x-bili-ticket: eyJhbGciOiJIUzI1NiIsImtpZCI6InMwMyIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3NDg3NzU1OTksImlhdCI6MTc0ODc0NjQ5OSwiYnV2aWQiOiJYVUE1NjUxQTlFREY3Mzg3MTUzQTk0NUNERTk2Q0FEQ0I2MDAwIn0.k0x2o3e2Q3W-6Wzc56IhbLgSjDKTaAuUV9om7K213fI
x-bili-trace-id: 32b84b9079d40a0946714475fc683bd4:46714475fc683bd4:0:0
}
docs {
Response sample:
```json
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {
"privileges": {
"list": [],
"privileges_covers": [],
"num": 0
},
"banner": [],
"union_vip": {
"union_vips": []
},
"other_open_info": {
"open_infos": []
},
"benefits": [],
"big_point": {
"point_info": {
"point": 405,
"expire_point": 0,
"expire_time": 0,
"expire_days": 0
},
"sign_info": {
"sign_remind": true,
"benefit": 10,
"bonus_benefit": 0,
"normal_remind": true,
"muggle_task": false,
"exp_value": 3
},
"sku_info": {
"skus": [{
"base": {
"token": "1216669149548369495",
"title": "东航国内机票立减50元优惠券",
"picture": "https://i0.hdslb.com/bfs/activity-plat/58e67cefd0a194b6380d09749ea6a9b6bbd18a84.png",
"rotation_pictures": ["https://i0.hdslb.com/bfs/activity-plat/58e67cefd0a194b6380d09749ea6a9b6bbd18a84.png"],
"price": {
"origin": 12999,
"promotion": {
"price": 399,
"type": 2,
"discount": 0,
"label": "秒杀"
},
"sale": 12999
},
"inventory": {
"available_num": 2980,
"used_num": 2150,
"surplus_num": 830,
"total_num": 5980,
"is_sold_out": false,
"next_sold_time": 1748836800,
"status": 1
},
"user_type": 2,
"exchange_limit_type": 2,
"exchange_limit_num": 1,
"start_time": 1748593800,
"end_time": 1750262400,
"state": 2,
"priority": 97
}
}, {
"base": {
"token": "1214802504886365529",
"title": "BEMOE 初音未来 樱花未来 可爱体UWA系列 毛绒4wa",
"picture": "https://i0.hdslb.com/bfs/activity-plat/b782d7228e8a58d2562d26f33448a50519ce4ec5.png",
"rotation_pictures": ["https://i0.hdslb.com/bfs/activity-plat/b782d7228e8a58d2562d26f33448a50519ce4ec5.png"],
"price": {
"origin": 33600,
"promotion": null,
"sale": 33600
},
"inventory": {
"available_num": 1,
"used_num": 0,
"surplus_num": 1,
"total_num": 20,
"is_sold_out": false,
"next_sold_time": -62135596800,
"status": 1
},
"user_type": 2,
"exchange_limit_type": 2,
"exchange_limit_num": 1,
"start_time": 1748404800,
"end_time": 1751256000,
"state": 2,
"priority": 96
}
}, {
"base": {
"token": "1214800503834258777",
"title": "BEMOE 初音未来 UWA可爱体系列 亚克力立牌 呜哇满足",
"picture": "https://i0.hdslb.com/bfs/activity-plat/186fa29b28e671422010bf9d8bd0f5e6b46556b9.png",
"rotation_pictures": ["https://i0.hdslb.com/bfs/activity-plat/186fa29b28e671422010bf9d8bd0f5e6b46556b9.png"],
"price": {
"origin": 23333,
"promotion": null,
"sale": 23333
},
"inventory": {
"available_num": 3,
"used_num": 2,
"surplus_num": 1,
"total_num": 35,
"is_sold_out": false,
"next_sold_time": -62135596800,
"status": 1
},
"user_type": 2,
"exchange_limit_type": 2,
"exchange_limit_num": 1,
"start_time": 1748404800,
"end_time": 1751256000,
"state": 2,
"priority": 96
}
}, {
"base": {
"token": "1214791752167304537",
"title": "暴蒙《蓝色监狱》烫金KV徽章洁世一",
"picture": "https://i0.hdslb.com/bfs/activity-plat/a23b188dcc430c4348b8cccb7ab056bc5527a67d.png",
"rotation_pictures": ["https://i0.hdslb.com/bfs/activity-plat/a23b188dcc430c4348b8cccb7ab056bc5527a67d.png"],
"price": {
"origin": 3900,
"promotion": null,
"sale": 3900
},
"inventory": {
"available_num": 5,
"used_num": 4,
"surplus_num": 1,
"total_num": 10,
"is_sold_out": false,
"next_sold_time": -62135596800,
"status": 1
},
"user_type": 2,
"exchange_limit_type": 2,
"exchange_limit_num": 1,
"start_time": 1748404800,
"end_time": 1751256000,
"state": 2,
"priority": 96
}
}]
},
"point_switch_off": false,
"tips": [{
"content": "今日签到10大积分"
}, {
"content": "今天的任务还没有做完哦"
}],
"button_text": "赚大积分",
"sku_price_hidden": false
},
"welfare": {},
"experience": {
"level": 0,
"cur_exp": 0,
"next_exp": 0,
"is_senior_member": 0,
"is_get_exp": false,
"is_task_complete": false,
"state": 0
},
"vip_exclusive": [{
"tap_title": "猜你喜欢",
"tap_type": 7,
"seasons": [{
"season_id": 48006,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "",
"left_subscript": "电影",
"title": "逆行人生",
"sub_title": "徐峥现实主义喜剧",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/9d2e5c77a7f9a665ca8349d45d283d1bc68d805b.png",
"link": "https://www.bilibili.com/bangumi/play/ss48006?theme=movie",
"track_params": null
}, {
"season_id": 39533,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "8.3",
"left_subscript": "电影",
"title": "007:大破量子危机",
"sub_title": "邦德为爱复仇",
"cover": "http://i0.hdslb.com/bfs/bangumi/image/742a56d34b61e5d29ea413a78d0540d32681ac73.png",
"link": "https://www.bilibili.com/bangumi/play/ss39533?theme=movie",
"track_params": null
}, {
"season_id": 43361,
"right_superscript": "http://i0.hdslb.com/bfs/bangumi/image/e31027bd41fb1cec4cbd1477f09799d0749bdf88.png",
"right_subscript": "9.8",
"left_subscript": "纪录片",
"title": "挤痘大师 第2季",
"sub_title": "皮肤疑难杂症的解决",
"cover": "http://i0.hdslb.com/bfs/bangumi/image/1d6fe011a5d474a32eeb1ddb250e17de3b69c459.png",
"link": "https://www.bilibili.com/bangumi/play/ss43361",
"track_params": null
}, {
"season_id": 44560,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "9.8",
"left_subscript": "电影",
"title": "太极张三丰",
"sub_title": "少年练就武林奇功",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/e8e77dc7bbc716a5159358d311cde5c2cdfddba9.png",
"link": "https://www.bilibili.com/bangumi/play/ss44560?theme=movie",
"track_params": null
}, {
"season_id": 44175,
"right_superscript": "http://i0.hdslb.com/bfs/bangumi/image/e31027bd41fb1cec4cbd1477f09799d0749bdf88.png",
"right_subscript": "9.5",
"left_subscript": "纪录片",
"title": "挤痘大师 第3季",
"sub_title": "皮肤疑难杂症的解决",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/f8df75ad1d7553a4fd26c1b0d4548053c4d3e617.png",
"link": "https://www.bilibili.com/bangumi/play/ss44175",
"track_params": null
}, {
"season_id": 39247,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "9.9",
"left_subscript": "纪录片",
"title": "人间世 第一季",
"sub_title": "生死考验,人间世态",
"cover": "http://i0.hdslb.com/bfs/bangumi/image/32575c2a7feef1a94c3ec1b0d229cfcfd0f01549.png",
"link": "https://www.bilibili.com/bangumi/play/ss39247",
"track_params": null
}, {
"season_id": 47463,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "9.4",
"left_subscript": "电影",
"title": "恶世之子",
"sub_title": "美国无差别狙击案件",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/5a18f11ddecbde05d3cba47502d3102dc1eda995.png",
"link": "https://www.bilibili.com/bangumi/play/ss47463?theme=movie",
"track_params": null
}, {
"season_id": 48826,
"right_superscript": "http://i0.hdslb.com/bfs/bangumi/image/e31027bd41fb1cec4cbd1477f09799d0749bdf88.png",
"right_subscript": "9.9",
"left_subscript": "纪录片",
"title": "生命奇观",
"sub_title": "无穷小亮自然纪录片",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/0ea69fe30f7f1f9637d42e354a0a4fa96078be4f.jpg",
"link": "https://www.bilibili.com/bangumi/play/ss48826",
"track_params": null
}, {
"season_id": 45789,
"right_superscript": "http://i0.hdslb.com/bfs/bangumi/image/403e4e8492f9c275490bf11fcf0f0ca68bbe0bbf.png",
"right_subscript": "9.1",
"left_subscript": "电视剧",
"title": "抓马侦探2",
"sub_title": "脑洞反转不停歇!",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/4edf685280fba5d957ad57a3b15a5ebc3190fbbb.png",
"link": "https://www.bilibili.com/bangumi/play/ss45789",
"track_params": null
}, {
"season_id": 39866,
"right_superscript": "http://i0.hdslb.com/bfs/bangumi/image/e31027bd41fb1cec4cbd1477f09799d0749bdf88.png",
"right_subscript": "9.3",
"left_subscript": "纪录片",
"title": "生活如沸2",
"sub_title": "煮沸背后的人生百味",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/5f48c27c848a01c1de468fa42bb46f1c011632c8.jpg",
"link": "https://www.bilibili.com/bangumi/play/ss39866",
"track_params": null
}, {
"season_id": 48762,
"right_superscript": "http://i0.hdslb.com/bfs/bangumi/image/e31027bd41fb1cec4cbd1477f09799d0749bdf88.png",
"right_subscript": "9.1",
"left_subscript": "电影",
"title": "勿言推理 电影版",
"sub_title": "菅田将晖硬核破案",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/32004bfaeabca5198803f9497e8b22313336d982.png",
"link": "https://www.bilibili.com/bangumi/play/ss48762?theme=movie",
"track_params": null
}, {
"season_id": 68491,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "8.5",
"left_subscript": "电影",
"title": "解除好友2:暗网",
"sub_title": "捡电脑惹出暗网危机",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/a6f88553ffa9c5f4701e74963e6a280609e49bc7.png",
"link": "https://www.bilibili.com/bangumi/play/ss68491?theme=movie",
"track_params": null
}, {
"season_id": 87199,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "9.8",
"left_subscript": "电影",
"title": "不说话的爱",
"sub_title": "张艺兴演绎无声父爱",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/ff7d6574e4a48e16c2b9a69dc4af7485b57ee5a7.png",
"link": "https://www.bilibili.com/bangumi/play/ss87199?theme=movie",
"track_params": null
}, {
"season_id": 45936,
"right_superscript": "http://i0.hdslb.com/bfs/bangumi/image/403e4e8492f9c275490bf11fcf0f0ca68bbe0bbf.png",
"right_subscript": "9.8",
"left_subscript": "电视剧",
"title": "片场日记2",
"sub_title": "高分爆梗喜剧续作",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/4bda3d5e37b354946c0a866a20e7fffc495ce627.png",
"link": "https://www.bilibili.com/bangumi/play/ss45936",
"track_params": null
}, {
"season_id": 33623,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "9.8",
"left_subscript": "电视剧",
"title": "西游记续集",
"sub_title": "师傅被妖怪抓走啦!",
"cover": "http://i0.hdslb.com/bfs/bangumi/image/2a4782407b25733fbef641595214aa004247ae19.jpg",
"link": "https://www.bilibili.com/bangumi/play/ss33623",
"track_params": null
}, {
"season_id": 48014,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "9.2",
"left_subscript": "电影",
"title": "野孩子",
"sub_title": "流浪兄弟相互救赎!",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/94be52c8ad4ed1a4ec74c118bf2260d0fc1df03f.png",
"link": "https://www.bilibili.com/bangumi/play/ss48014?theme=movie",
"track_params": null
}, {
"season_id": 47703,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "9.5",
"left_subscript": "电影",
"title": "宝贝老板",
"sub_title": "宝贝总裁来袭!",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/5a79d2e49059f4e4f3f3977994ae334ea7fad32a.png",
"link": "https://www.bilibili.com/bangumi/play/ss47703?theme=movie",
"track_params": null
}, {
"season_id": 45582,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "9.7",
"left_subscript": "电影",
"title": "蜡笔小新:新婚旅行飓风之遗失的野原广志",
"sub_title": "广志争夺战开启",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/ebebac20774747787cb01521e1165e97e47d4b6b.png",
"link": "https://www.bilibili.com/bangumi/play/ss45582?theme=movie",
"track_params": null
}, {
"season_id": 45579,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "9.6",
"left_subscript": "电影",
"title": "蜡笔小新:我的搬家物语 仙人掌大袭击",
"sub_title": "小新洒泪告别风间",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/d772a242b74b9ccc18b622a61a13e4f0005791e4.png",
"link": "https://www.bilibili.com/bangumi/play/ss45579?theme=movie",
"track_params": null
}, {
"season_id": 46350,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "9.7",
"left_subscript": "纪录片",
"title": "何以中国",
"sub_title": "百年中国考古",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/81910f6dc47e499929d2e4c234531e1b46285cb0.png",
"link": "https://www.bilibili.com/bangumi/play/ss46350",
"track_params": null
}, {
"season_id": 39358,
"right_superscript": "http://i0.hdslb.com/bfs/bangumi/image/e31027bd41fb1cec4cbd1477f09799d0749bdf88.png",
"right_subscript": "8.4",
"left_subscript": "电视剧",
"title": "六神无主",
"sub_title": "一个身体五个“魂”",
"cover": "http://i0.hdslb.com/bfs/bangumi/image/d4e3e965ce95d3ea21d73fe8d84594f75770f46a.png",
"link": "https://www.bilibili.com/bangumi/play/ss39358",
"track_params": null
}, {
"season_id": 46178,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "9.9",
"left_subscript": "纪录片",
"title": "地球脉动 第三季",
"sub_title": "口碑系列重磅回归",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/571c98fe1d9b532c98cb5aa23b9b875ced8dcae0.jpg",
"link": "https://www.bilibili.com/bangumi/play/ss46178",
"track_params": null
}, {
"season_id": 37677,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "9.6",
"left_subscript": "电影",
"title": "笑破铁幕",
"sub_title": "无厘头搞笑电影先驱",
"cover": "http://i0.hdslb.com/bfs/bangumi/image/6d8ea4a7cc81eb72e51fc68bef346f1f41904778.png",
"link": "https://www.bilibili.com/bangumi/play/ss37677?theme=movie",
"track_params": null
}, {
"season_id": 47750,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "8.2",
"left_subscript": "电影",
"title": "名侦探柯南:百万美元的五棱星",
"sub_title": "柯南与基德的对决",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/aa71c6cc991b3c60d8a7b5557e025de5ca422799.png",
"link": "https://www.bilibili.com/bangumi/play/ss47750?theme=movie",
"track_params": null
}, {
"season_id": 33628,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "9.5",
"left_subscript": "纪录片",
"title": "体内怪物 第八季",
"sub_title": "致命寄生虫",
"cover": "http://i0.hdslb.com/bfs/bangumi/image/0afbcdf68628459419b095911e6cc2b5531063b2.png",
"link": "https://www.bilibili.com/bangumi/play/ss33628",
"track_params": null
}, {
"season_id": 47860,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "9.8",
"left_subscript": "综艺",
"title": "此生要去的100个地方",
"sub_title": "共赴祖国大好河山!",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/a9f0c60f74a21b9bd3f1451f61912d4df5dd403c.png",
"link": "https://www.bilibili.com/bangumi/play/ss47860",
"track_params": null
}, {
"season_id": 31800,
"right_superscript": "http://i0.hdslb.com/bfs/bangumi/image/403e4e8492f9c275490bf11fcf0f0ca68bbe0bbf.png",
"right_subscript": "9.7",
"left_subscript": "综艺",
"title": "非正式会谈 第6季",
"sub_title": "发现新世界的入口",
"cover": "http://i0.hdslb.com/bfs/bangumi/image/83fd62f43b83f2e3916c5c112aa853e6133318f0.jpg",
"link": "https://www.bilibili.com/bangumi/play/ss31800",
"track_params": null
}, {
"season_id": 45660,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "9.5",
"left_subscript": "电视剧",
"title": "西部世界 第一季",
"sub_title": "HBO科幻神剧",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/6befebb8e6390b1f496938c08ac43c0a7cf4fe3f.png",
"link": "https://www.bilibili.com/bangumi/play/ss45660",
"track_params": null
}, {
"season_id": 35874,
"right_superscript": "http://i0.hdslb.com/bfs/bangumi/image/403e4e8492f9c275490bf11fcf0f0ca68bbe0bbf.png",
"right_subscript": "9.5",
"left_subscript": "综艺",
"title": "2020最美的夜 bilibili晚会",
"sub_title": "来B站一起跨年",
"cover": "http://i0.hdslb.com/bfs/bangumi/image/72cb12d4fd380865529ed16603c1001436977589.jpg",
"link": "https://www.bilibili.com/bangumi/play/ss35874",
"track_params": null
}, {
"season_id": 41716,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "9.7",
"left_subscript": "电视剧",
"title": "笑傲江湖",
"sub_title": "快意江湖,情仇难断",
"cover": "http://i0.hdslb.com/bfs/bangumi/image/e82f485783df97ba0907576f29b9e6219769f1e4.png",
"link": "https://www.bilibili.com/bangumi/play/ss41716",
"track_params": null
}, {
"season_id": 90926,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "5.1",
"left_subscript": "电影",
"title": "老狗",
"sub_title": "戏骨上演全员恶人",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/9d7495085282c939491652ddd23d7fef3e116742.png",
"link": "https://www.bilibili.com/bangumi/play/ss90926?theme=movie",
"track_params": null
}, {
"season_id": 47684,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "4.4",
"left_subscript": "电影",
"title": "海关战线",
"sub_title": "激燃海战与人性深渊",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/1d2585639d6b4ff47e2f18706e075f7663752089.png",
"link": "https://www.bilibili.com/bangumi/play/ss47684?theme=movie",
"track_params": null
}, {
"season_id": 47918,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "8.8",
"left_subscript": "电影",
"title": "加菲猫家族",
"sub_title": "经典重启 笑中带泪",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/f4dbf78f0819771d12422bb61fd8874ec2b68b22.png",
"link": "https://www.bilibili.com/bangumi/play/ss47918?theme=movie",
"track_params": null
}, {
"season_id": 95645,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "9.5",
"left_subscript": "纪录片",
"title": "舌尖上的中国4",
"sub_title": "博大精深的中国饮食",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/d9be392c25addb449de9760cae48233ac1a1daf7.jpg",
"link": "https://www.bilibili.com/bangumi/play/ss95645",
"track_params": null
}, {
"season_id": 48311,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "8.5",
"left_subscript": "电影",
"title": "重生",
"sub_title": "害必除 仇必报",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/ff7257c083d6684e4e5d178d8e553c89f6d79a42.png",
"link": "https://www.bilibili.com/bangumi/play/ss48311?theme=movie",
"track_params": null
}, {
"season_id": 48603,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "",
"left_subscript": "电影",
"title": "乔妍的心事",
"sub_title": "姐妹花双陷身份疑云",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/0d9dc6e9855b16260305cdc323fd7e7b94ad2484.png",
"link": "https://www.bilibili.com/bangumi/play/ss48603?theme=movie",
"track_params": null
}]
}, {
"tap_title": "电影",
"tap_type": 2,
"seasons": [{
"season_id": 48415,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "8.9",
"left_subscript": "喜剧",
"title": "唐探1900",
"sub_title": "神探CP携手破悬案",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/07574ea9959f75d89b3c7f0f8e125188b7fadb0a.png",
"link": "https://www.bilibili.com/bangumi/play/ss48415?theme=movie",
"track_params": null
}, {
"season_id": 99873,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "9.3",
"left_subscript": "喜剧",
"title": "黄沙漫天",
"sub_title": "小沈阳伪装骗巨款",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/16f93b5398f4473fb1c202a60519d8bb91035af7.png",
"link": "https://www.bilibili.com/bangumi/play/ss99873?theme=movie",
"track_params": null
}, {
"season_id": 90102,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "",
"left_subscript": "剧情",
"title": "向阳·花",
"sub_title": "诠释女性绝境逆袭",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/c3d8516d035853f0cb3193e0b04c53e3ac0512ae.png",
"link": "https://www.bilibili.com/bangumi/play/ss90102?theme=movie",
"track_params": null
}, {
"season_id": 32419,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "9.7",
"left_subscript": "动作",
"title": "碟中谍4",
"sub_title": "阿汤哥飞跃迪拜塔?",
"cover": "http://i0.hdslb.com/bfs/bangumi/image/9f823b8936176c2de9f8a09094198013abe7eb0d.jpg",
"link": "https://www.bilibili.com/bangumi/play/ss32419?theme=movie",
"track_params": null
}, {
"season_id": 48413,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "",
"left_subscript": "剧情",
"title": "误杀3",
"sub_title": "肖央再演绝望父亲",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/2d16c9853e9845b7aef9a9129e53a63fefb551ba.png",
"link": "https://www.bilibili.com/bangumi/play/ss48413?theme=movie",
"track_params": null
}, {
"season_id": 48548,
"right_superscript": "http://i0.hdslb.com/bfs/vip/a41bd3a088b9d869806406acb28ac7f2a1150a88.png",
"right_subscript": "",
"left_subscript": "动作",
"title": "毒液:最后一舞",
"sub_title": "“毒液”系列终章",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/22d871c521f6bfae45a990628c61fb4f87f4ee06.png",
"link": "https://www.bilibili.com/bangumi/play/ss48548?theme=movie",
"track_params": null
}, {
"season_id": 48894,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "",
"left_subscript": "冒险",
"title": "根本停不下来",
"sub_title": "刹车失灵全家狂飙!",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/30e0887dba817b3b701a2bbe3f4f0cab1f0c6155.png",
"link": "https://www.bilibili.com/bangumi/play/ss48894?theme=movie",
"track_params": null
}, {
"season_id": 87199,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "9.8",
"left_subscript": "剧情",
"title": "不说话的爱",
"sub_title": "张艺兴演绎无声父爱",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/ff7d6574e4a48e16c2b9a69dc4af7485b57ee5a7.png",
"link": "https://www.bilibili.com/bangumi/play/ss87199?theme=movie",
"track_params": null
}, {
"season_id": 68561,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "9.3",
"left_subscript": "剧情",
"title": "胜券在握",
"sub_title": "邓超智斗黑心公司",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/2d325939328078ade57877955602ba508807d70b.png",
"link": "https://www.bilibili.com/bangumi/play/ss68561?theme=movie",
"track_params": null
}, {
"season_id": 48234,
"right_superscript": "http://i0.hdslb.com/bfs/vip/a41bd3a088b9d869806406acb28ac7f2a1150a88.png",
"right_subscript": "",
"left_subscript": "科幻",
"title": "美国队长4",
"sub_title": "美队大战红浩克",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/1c4d71a0f5084098d124b9b6ea8c6e6bb80293cb.png",
"link": "https://www.bilibili.com/bangumi/play/ss48234?theme=movie",
"track_params": null
}, {
"season_id": 32436,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "9.7",
"left_subscript": "动作",
"title": "环太平洋",
"sub_title": "巨型机甲对抗巨兽",
"cover": "http://i0.hdslb.com/bfs/bangumi/image/5d2547fccd75717eab7426cb94b021ec71473b76.png",
"link": "https://www.bilibili.com/bangumi/play/ss32436?theme=movie",
"track_params": null
}, {
"season_id": 73302,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "9.8",
"left_subscript": "剧情",
"title": "破·地狱",
"sub_title": "破心魔,解生死!",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/d8309a399890ee5ab1245d45352ab19ebb9e996f.png",
"link": "https://www.bilibili.com/bangumi/play/ss73302?theme=movie",
"track_params": null
}, {
"season_id": 28281,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "9.8",
"left_subscript": "剧情",
"title": "哈利·波特与魔法石",
"sub_title": "霍格沃茨开学了!",
"cover": "http://i0.hdslb.com/bfs/bangumi/dd9a113e724e3c60dc2da31562e45d57e3c2d707.jpg",
"link": "https://www.bilibili.com/bangumi/play/ss28281?theme=movie",
"track_params": null
}, {
"season_id": 76849,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "",
"left_subscript": "科幻",
"title": "穿越时空的少女",
"sub_title": "细田守巅峰之作!",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/dd195431e5d3985ff8391683b79ddeaf400c10de.png",
"link": "https://www.bilibili.com/bangumi/play/ss76849?theme=movie",
"track_params": null
}, {
"season_id": 47468,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "9.7",
"left_subscript": "喜剧",
"title": "间谍过家家 代号:白",
"sub_title": "全家拯救阿尼亚",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/295c0441df86fb8ce6627db92edbc9e7bb453de0.png",
"link": "https://www.bilibili.com/bangumi/play/ss47468?theme=movie",
"track_params": null
}, {
"season_id": 33354,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "9.5",
"left_subscript": "喜剧",
"title": "夏洛特烦恼",
"sub_title": "马冬梅的排列组合",
"cover": "http://i0.hdslb.com/bfs/bangumi/image/136d1616456e60732d3c84e40e0f925e5e119003.jpg",
"link": "https://www.bilibili.com/bangumi/play/ss33354?theme=movie",
"track_params": null
}, {
"season_id": 46054,
"right_superscript": "http://i0.hdslb.com/bfs/vip/a41bd3a088b9d869806406acb28ac7f2a1150a88.png",
"right_subscript": "9.9",
"left_subscript": "喜剧",
"title": "疯狂动物城",
"sub_title": "成人世界乌托邦",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/d250b5bde3c6556894684d4b0818841190df5743.png",
"link": "https://www.bilibili.com/bangumi/play/ss46054?theme=movie",
"track_params": null
}, {
"season_id": 32314,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "9.6",
"left_subscript": "动作",
"title": "碟中谍",
"sub_title": "阿汤哥经典特工系列",
"cover": "http://i0.hdslb.com/bfs/bangumi/image/dbe606a3b5b6f7ff50fc8637e23ff71b6693eb1b.jpg",
"link": "https://www.bilibili.com/bangumi/play/ss32314?theme=movie",
"track_params": null
}, {
"season_id": 48590,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "9.8",
"left_subscript": "奇幻",
"title": "哈尔的移动城堡",
"sub_title": "魔法之下的爱与勇气",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/156dfe963b71dc62dbf4315f3985a070844d0593.png",
"link": "https://www.bilibili.com/bangumi/play/ss48590?theme=movie",
"track_params": null
}, {
"season_id": 96607,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "",
"left_subscript": "剧情",
"title": "瘦身大作战",
"sub_title": "失恋女孩的蜕变计划",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/b097f0584d5424892145e62518609af3215c09fd.png",
"link": "https://www.bilibili.com/bangumi/play/ss96607?theme=movie",
"track_params": null
}, {
"season_id": 44847,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "9.8",
"left_subscript": "科幻",
"title": "流浪地球2",
"sub_title": "国产科幻巨制",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/4ee5e1cea45fb742c77d17c1b2d115f09508a878.png",
"link": "https://www.bilibili.com/bangumi/play/ss44847?theme=movie",
"track_params": null
}, {
"season_id": 42715,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "9.6",
"left_subscript": "喜剧",
"title": "坏蛋联盟",
"sub_title": "天生“坏蛋”想从良",
"cover": "http://i0.hdslb.com/bfs/bangumi/image/7d63615d0749d8fe2ce161d155ac1c8198869591.png",
"link": "https://www.bilibili.com/bangumi/play/ss42715?theme=movie",
"track_params": null
}, {
"season_id": 41179,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "9.6",
"left_subscript": "喜剧",
"title": "史密斯夫妇",
"sub_title": "杀手夫妻甜蜜交锋",
"cover": "http://i0.hdslb.com/bfs/bangumi/image/bc434e10efbfa7ab0efb3741b0be80fbf2bdef3b.png",
"link": "https://www.bilibili.com/bangumi/play/ss41179?theme=movie",
"track_params": null
}, {
"season_id": 42384,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "9.7",
"left_subscript": "动作",
"title": "头号玩家",
"sub_title": "斯皮尔伯格科幻大片",
"cover": "http://i0.hdslb.com/bfs/bangumi/image/d1baef273cc7862431978b2e63fc04ccdd353556.png",
"link": "https://www.bilibili.com/bangumi/play/ss42384?theme=movie",
"track_params": null
}, {
"season_id": 32523,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "9.9",
"left_subscript": "喜剧",
"title": "功夫",
"sub_title": "周星驰经典动作喜剧",
"cover": "http://i0.hdslb.com/bfs/bangumi/image/0c65b23a92ea20115147df841cdfaa3e4b1170df.png",
"link": "https://www.bilibili.com/bangumi/play/ss32523?theme=movie",
"track_params": null
}, {
"season_id": 45140,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "9.5",
"left_subscript": "剧情",
"title": "沙丘2",
"sub_title": "沙虫来袭 圣战将至",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/fb57cbefc33ed173e40299e243ef89fda151c9f4.png",
"link": "https://www.bilibili.com/bangumi/play/ss45140?theme=movie",
"track_params": null
}, {
"season_id": 47065,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "7.4",
"left_subscript": "剧情",
"title": "坚如磐石",
"sub_title": "权钱交叠破解杀机",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/e00f39c55ac9a89318144d1a5dd23d33b536cf9e.png",
"link": "https://www.bilibili.com/bangumi/play/ss47065?theme=movie",
"track_params": null
}, {
"season_id": 68514,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "9.8",
"left_subscript": "动作",
"title": "因果报应",
"sub_title": "极限反转,恶有恶报",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/c570d4131545158f69623a0f0f6103e8994e1874.png",
"link": "https://www.bilibili.com/bangumi/play/ss68514?theme=movie",
"track_params": null
}, {
"season_id": 28585,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "9.9",
"left_subscript": "科幻",
"title": "星际穿越",
"sub_title": "不要温和地走进良夜",
"cover": "http://i0.hdslb.com/bfs/bangumi/3b8acd7a69aa3462297b0b1f206e7093e4961914.jpg",
"link": "https://www.bilibili.com/bangumi/play/ss28585?theme=movie",
"track_params": null
}, {
"season_id": 38552,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "9.8",
"left_subscript": "动作",
"title": "正义联盟:扎克·施奈德版",
"sub_title": "最全DC宇宙阵容集结!",
"cover": "http://i0.hdslb.com/bfs/bangumi/image/32a08ede8cdcf941b0a2d2ceddd6c1b991c64699.png",
"link": "https://www.bilibili.com/bangumi/play/ss38552?theme=movie",
"track_params": null
}, {
"season_id": 47750,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "8.2",
"left_subscript": "犯罪",
"title": "名侦探柯南:百万美元的五棱星",
"sub_title": "柯南与基德的对决",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/aa71c6cc991b3c60d8a7b5557e025de5ca422799.png",
"link": "https://www.bilibili.com/bangumi/play/ss47750?theme=movie",
"track_params": null
}, {
"season_id": 48013,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "9.2",
"left_subscript": "喜剧",
"title": "抓娃娃",
"sub_title": "沈马组合爆笑养娃",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/57f8d498302dddf7b197e3d3c9b0bccde9b80406.png",
"link": "https://www.bilibili.com/bangumi/play/ss48013?theme=movie",
"track_params": null
}, {
"season_id": 68640,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "9.6",
"left_subscript": "奇幻",
"title": "火影忍者剧场版:忍者之路",
"sub_title": "鸣人,欢迎回家!",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/5fbf4380fd163b3817b9d6d595eb8875253b4e79.png",
"link": "https://www.bilibili.com/bangumi/play/ss68640?theme=movie",
"track_params": null
}, {
"season_id": 46319,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "9.6",
"left_subscript": "科幻",
"title": "后天",
"sub_title": "人类重回冰川时代",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/839683656c9eaabe48c5d84a06b47e52a613f422.png",
"link": "https://www.bilibili.com/bangumi/play/ss46319?theme=movie",
"track_params": null
}, {
"season_id": 33615,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "9.8",
"left_subscript": "剧情",
"title": "绿皮书",
"sub_title": "黑白配公路片",
"cover": "http://i0.hdslb.com/bfs/bangumi/image/99e62fe75cda9d99450df0460307a73d65cf1578.jpg",
"link": "https://www.bilibili.com/bangumi/play/ss33615?theme=movie",
"track_params": null
}, {
"season_id": 39558,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "9.7",
"left_subscript": "动作",
"title": "碟中谍6:全面瓦解",
"sub_title": "阿汤哥招牌系列新作",
"cover": "http://i0.hdslb.com/bfs/bangumi/image/4bfe927ed1254de55d32dabc6237630b10d8e1d9.png",
"link": "https://www.bilibili.com/bangumi/play/ss39558?theme=movie",
"track_params": null
}]
}, {
"tap_title": "电视剧",
"tap_type": 5,
"seasons": [{
"season_id": 33626,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "9.9",
"left_subscript": "战争",
"title": "三国演义",
"sub_title": "正所谓乱世出英雄",
"cover": "http://i0.hdslb.com/bfs/bangumi/image/1d2eb8d863e3d0aa9d6557ae5b32764159953d8b.jpg",
"link": "https://www.bilibili.com/bangumi/play/ss33626",
"track_params": null
}, {
"season_id": 21020,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "9.2",
"left_subscript": "历史",
"title": "康熙王朝",
"sub_title": "康熙帝传奇的一生",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/4f6c371428b8679b3e84406437fde071aae3927b.png",
"link": "https://www.bilibili.com/bangumi/play/ss21020",
"track_params": null
}, {
"season_id": 44480,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "9.9",
"left_subscript": "剧情",
"title": "雍正王朝",
"sub_title": "古装历史剧巅峰之作",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/308cb2bb99bbbbf507e2898460918689a514ac26.png",
"link": "https://www.bilibili.com/bangumi/play/ss44480",
"track_params": null
}, {
"season_id": 96905,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "9.9",
"left_subscript": "喜剧",
"title": "我爱我家",
"sub_title": "中国首部情景喜剧",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/a600d1778e570fae87bbedb62ed724cfd04626d5.png",
"link": "https://www.bilibili.com/bangumi/play/ss96905",
"track_params": null
}, {
"season_id": 24053,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "9.9",
"left_subscript": "悬疑",
"title": "非自然死亡",
"sub_title": "不自然死因研究所",
"cover": "http://i0.hdslb.com/bfs/bangumi/72f01ec71e4e8cb1a765f875b7a26fb78b9ae6eb.jpg",
"link": "https://www.bilibili.com/bangumi/play/ss24053",
"track_params": null
}, {
"season_id": 33622,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "9.9",
"left_subscript": "奇幻",
"title": "西游记",
"sub_title": "俺老孙来也!",
"cover": "http://i0.hdslb.com/bfs/bangumi/image/f9b7d89acb62d2ed385381ebcf5ac80b65fadd73.jpg",
"link": "https://www.bilibili.com/bangumi/play/ss33622",
"track_params": null
}, {
"season_id": 68632,
"right_superscript": "http://i0.hdslb.com/bfs/bangumi/image/e31027bd41fb1cec4cbd1477f09799d0749bdf88.png",
"right_subscript": "9.6",
"left_subscript": "剧情",
"title": "影后",
"sub_title": "娱乐圈抓马大戏",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/d8943e9a8682b7ec3a9c744e2d8aca40643cfba1.png",
"link": "https://www.bilibili.com/bangumi/play/ss68632",
"track_params": null
}, {
"season_id": 20117,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "9.9",
"left_subscript": "搞笑",
"title": "家有儿女",
"sub_title": "童年回忆杀",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/ffd860e68feeccd2e14531ac5c7d12c683e0924c.png",
"link": "https://www.bilibili.com/bangumi/play/ss20117",
"track_params": null
}, {
"season_id": 96519,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "8.5",
"left_subscript": "剧情",
"title": "姜颂",
"sub_title": "高能反转虐恋爽剧",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/9871644abfdefeb026d2833312eedfdba3721d3b.jpg",
"link": "https://www.bilibili.com/bangumi/play/ss96519",
"track_params": null
}, {
"season_id": 33625,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "9",
"left_subscript": "古装",
"title": "水浒传",
"sub_title": "大郎,该吃药了",
"cover": "http://i0.hdslb.com/bfs/bangumi/image/78241bf67ee92b92ca4e8d1b8006b939f602aad6.jpg",
"link": "https://www.bilibili.com/bangumi/play/ss33625",
"track_params": null
}, {
"season_id": 33624,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "9.9",
"left_subscript": "古装",
"title": "红楼梦",
"sub_title": "这个妹妹我见过",
"cover": "http://i0.hdslb.com/bfs/bangumi/image/7e52b373f9522884d4c878c042d46dd532774057.jpg",
"link": "https://www.bilibili.com/bangumi/play/ss33624",
"track_params": null
}, {
"season_id": 96622,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "",
"left_subscript": "搞笑",
"title": "粉红女郎",
"sub_title": "千禧回忆杀!",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/47b9e608859127d57728911c0dd30517e74850da.png",
"link": "https://www.bilibili.com/bangumi/play/ss96622",
"track_params": null
}, {
"season_id": 38729,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "9.9",
"left_subscript": "搞笑",
"title": "老友记 第一季",
"sub_title": "经典美剧六人行",
"cover": "http://i0.hdslb.com/bfs/bangumi/image/28f4634e43c3b8def94218101622b9ae69a20d56.png",
"link": "https://www.bilibili.com/bangumi/play/ss38729",
"track_params": null
}, {
"season_id": 42962,
"right_superscript": "http://i0.hdslb.com/bfs/bangumi/image/403e4e8492f9c275490bf11fcf0f0ca68bbe0bbf.png",
"right_subscript": "9.3",
"left_subscript": "青春",
"title": "三悦有了新工作",
"sub_title": "废柴95后打工日记",
"cover": "http://i0.hdslb.com/bfs/bangumi/image/a4070f48d2f2e2d482523a4df1f64ded626e010c.png",
"link": "https://www.bilibili.com/bangumi/play/ss42962",
"track_params": null
}, {
"season_id": 41349,
"right_superscript": "http://i0.hdslb.com/bfs/bangumi/image/e31027bd41fb1cec4cbd1477f09799d0749bdf88.png",
"right_subscript": "9.8",
"left_subscript": "剧情",
"title": "机智的医生生活 第二季",
"sub_title": "还是医院五人组",
"cover": "http://i0.hdslb.com/bfs/bangumi/image/367b0470947cab63c0ca8a5227c72688d6ea2be3.png",
"link": "https://www.bilibili.com/bangumi/play/ss41349",
"track_params": null
}, {
"season_id": 47841,
"right_superscript": "http://i0.hdslb.com/bfs/bangumi/image/403e4e8492f9c275490bf11fcf0f0ca68bbe0bbf.png",
"right_subscript": "8.8",
"left_subscript": "奇幻",
"title": "时光代理人",
"sub_title": "新的穿越委托请查收",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/f833064b3ba7777bd33c8ca75fe1499f38ae5b22.jpg",
"link": "https://www.bilibili.com/bangumi/play/ss47841",
"track_params": null
}, {
"season_id": 43891,
"right_superscript": "http://i0.hdslb.com/bfs/bangumi/image/e31027bd41fb1cec4cbd1477f09799d0749bdf88.png",
"right_subscript": "9.8",
"left_subscript": "剧情",
"title": "机智的医生生活",
"sub_title": "医院五人组",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/5cc912b5ecb8dbb82f8478e3db055c604675c8e3.png",
"link": "https://www.bilibili.com/bangumi/play/ss43891",
"track_params": null
}, {
"season_id": 85532,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "9.9",
"left_subscript": "剧情",
"title": "神探夏洛克 第一季",
"sub_title": "天才侦探的推理奇旅",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/41c268584969ed952ac3c771855d705c912b0eee.png",
"link": "https://www.bilibili.com/bangumi/play/ss85532",
"track_params": null
}, {
"season_id": 33981,
"right_superscript": "http://i0.hdslb.com/bfs/bangumi/image/403e4e8492f9c275490bf11fcf0f0ca68bbe0bbf.png",
"right_subscript": "8.1",
"left_subscript": "青春",
"title": "风犬少年的天空",
"sub_title": "彭昱畅喊你来追剧",
"cover": "http://i0.hdslb.com/bfs/bangumi/image/874d8d77ffd1e08c6706cd9a8358eaba27d5e36e.png",
"link": "https://www.bilibili.com/bangumi/play/ss33981",
"track_params": null
}, {
"season_id": 47710,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "9.8",
"left_subscript": "剧情",
"title": "铠甲勇士刑天",
"sub_title": "难以超越的童年经典",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/ef0b9764b79c769f9ca698f40e1a7fffdb0d2a89.jpg",
"link": "https://www.bilibili.com/bangumi/play/ss47710",
"track_params": null
}, {
"season_id": 73355,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "9.9",
"left_subscript": "喜剧",
"title": "生活大爆炸 第一季",
"sub_title": "怪咖初聚开启新奇缘",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/c516741a0eda05c8fc33b7fad0c3ad8d473bb409.png",
"link": "https://www.bilibili.com/bangumi/play/ss73355",
"track_params": null
}, {
"season_id": 45658,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "9.6",
"left_subscript": "剧情",
"title": "白莲花",
"sub_title": "全员自私,人性博弈",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/42b40e255eeb2df7c562f15ce48d1840f03bf58e.jpg",
"link": "https://www.bilibili.com/bangumi/play/ss45658",
"track_params": null
}, {
"season_id": 45419,
"right_superscript": "http://i0.hdslb.com/bfs/bangumi/image/403e4e8492f9c275490bf11fcf0f0ca68bbe0bbf.png",
"right_subscript": "9.9",
"left_subscript": "奇幻",
"title": "古相思曲",
"sub_title": "逆向时空,甜虐来袭",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/6dc69dcab662e0d35e36c8429ecba40ff8938507.jpg",
"link": "https://www.bilibili.com/bangumi/play/ss45419",
"track_params": null
}, {
"season_id": 46356,
"right_superscript": "http://i0.hdslb.com/bfs/bangumi/image/e31027bd41fb1cec4cbd1477f09799d0749bdf88.png",
"right_subscript": "9.9",
"left_subscript": "搞笑",
"title": "重启人生",
"sub_title": "高口碑治愈系日剧",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/905806209c3d1b1d69e83866b53ea0a16a344586.png",
"link": "https://www.bilibili.com/bangumi/play/ss46356",
"track_params": null
}, {
"season_id": 43551,
"right_superscript": "http://i0.hdslb.com/bfs/bangumi/image/e31027bd41fb1cec4cbd1477f09799d0749bdf88.png",
"right_subscript": "9.3",
"left_subscript": "剧情",
"title": "学校2015",
"sub_title": "双胞胎姐妹命运错置",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/47ab568509ccee7794b257c53cb2bfe2bd56a189.png",
"link": "https://www.bilibili.com/bangumi/play/ss43551",
"track_params": null
}, {
"season_id": 46681,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "9.7",
"left_subscript": "奇幻",
"title": "权力的游戏 第一季",
"sub_title": "经典史诗奇幻神剧",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/13e892349ff97970340eef24c20e163fe7aad842.png",
"link": "https://www.bilibili.com/bangumi/play/ss46681",
"track_params": null
}, {
"season_id": 41453,
"right_superscript": "http://i0.hdslb.com/bfs/bangumi/image/403e4e8492f9c275490bf11fcf0f0ca68bbe0bbf.png",
"right_subscript": "8.1",
"left_subscript": "古装",
"title": "珍馐记",
"sub_title": "暖胃珍馐,吃笑人间",
"cover": "http://i0.hdslb.com/bfs/bangumi/image/736891730e6160b0d26897905b3b3f797df211cf.png",
"link": "https://www.bilibili.com/bangumi/play/ss41453",
"track_params": null
}, {
"season_id": 33623,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "9.8",
"left_subscript": "奇幻",
"title": "西游记续集",
"sub_title": "师傅被妖怪抓走啦!",
"cover": "http://i0.hdslb.com/bfs/bangumi/image/2a4782407b25733fbef641595214aa004247ae19.jpg",
"link": "https://www.bilibili.com/bangumi/play/ss33623",
"track_params": null
}, {
"season_id": 41716,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "9.7",
"left_subscript": "武侠",
"title": "笑傲江湖",
"sub_title": "快意江湖,情仇难断",
"cover": "http://i0.hdslb.com/bfs/bangumi/image/e82f485783df97ba0907576f29b9e6219769f1e4.png",
"link": "https://www.bilibili.com/bangumi/play/ss41716",
"track_params": null
}, {
"season_id": 46138,
"right_superscript": "http://i0.hdslb.com/bfs/bangumi/image/e31027bd41fb1cec4cbd1477f09799d0749bdf88.png",
"right_subscript": "9.8",
"left_subscript": "搞笑",
"title": "法律至上1",
"sub_title": "日本幽默律政片",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/b68bd5e65a9f8e140ae912a8941871aff436a25a.png",
"link": "https://www.bilibili.com/bangumi/play/ss46138",
"track_params": null
}, {
"season_id": 43894,
"right_superscript": "http://i0.hdslb.com/bfs/bangumi/image/e31027bd41fb1cec4cbd1477f09799d0749bdf88.png",
"right_subscript": "9.5",
"left_subscript": "剧情",
"title": "海岸村恰恰恰",
"sub_title": "社畜与咸鱼温情碰撞",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/46b2d1a1088214b314956b07a4ccd2aa05b0b154.png",
"link": "https://www.bilibili.com/bangumi/play/ss43894",
"track_params": null
}, {
"season_id": 38629,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "9.9",
"left_subscript": "剧情",
"title": "白色巨塔",
"sub_title": "超经典医疗剧",
"cover": "http://i0.hdslb.com/bfs/bangumi/image/b70a6a12cdab2bcb9f81677446ebf52f367ca7bd.jpg",
"link": "https://www.bilibili.com/bangumi/play/ss38629",
"track_params": null
}, {
"season_id": 68652,
"right_superscript": "http://i0.hdslb.com/bfs/bangumi/image/e31027bd41fb1cec4cbd1477f09799d0749bdf88.png",
"right_subscript": "",
"left_subscript": "搞笑",
"title": "孤独的美食家 番外篇",
"sub_title": "电子榨菜 下饭必看",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/5f4e236634b4d8caacc37b6cc3d161fe6020d1aa.png",
"link": "https://www.bilibili.com/bangumi/play/ss68652",
"track_params": null
}, {
"season_id": 20115,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "9.8",
"left_subscript": "搞笑",
"title": "家有儿女2",
"sub_title": "经典大型情景喜剧",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/dabe19fe246c0422cb419237d78891fe4b2afe28.png",
"link": "https://www.bilibili.com/bangumi/play/ss20115",
"track_params": null
}, {
"season_id": 21288,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "9.8",
"left_subscript": "家庭",
"title": "外来媳妇本地郎",
"sub_title": "最长寿的电视剧之一",
"cover": "http://i0.hdslb.com/bfs/bangumi/25cb9e09f1a7aa2f3575bacef6dadd1df3208881.jpg",
"link": "https://www.bilibili.com/bangumi/play/ss21288",
"track_params": null
}, {
"season_id": 85911,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "9.9",
"left_subscript": "剧情",
"title": "悠长假期",
"sub_title": "与木村拓哉的恋爱假",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/70577dcf598beb0663e028745835ae0f9b93ea0c.png",
"link": "https://www.bilibili.com/bangumi/play/ss85911",
"track_params": null
}]
}, {
"tap_title": "番剧",
"tap_type": 1,
"seasons": [{
"season_id": 42176,
"right_superscript": "http://i0.hdslb.com/bfs/bangumi/image/e31027bd41fb1cec4cbd1477f09799d0749bdf88.png",
"right_subscript": "9.2",
"left_subscript": "日常",
"title": "莉可丽丝",
"sub_title": "虚假的咖啡厅日常",
"cover": "http://i0.hdslb.com/bfs/bangumi/image/53e6a08505b5a889feb14d2f5ee8a7f22b961847.png",
"link": "https://www.bilibili.com/bangumi/play/ss42176",
"track_params": null
}, {
"season_id": 91776,
"right_superscript": "http://i0.hdslb.com/bfs/bangumi/image/e31027bd41fb1cec4cbd1477f09799d0749bdf88.png",
"right_subscript": "9.7",
"left_subscript": "漫画改",
"title": "摇滚乃是淑女的爱好",
"sub_title": "硬核摇滚,就好这个",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/9dc89cedb3d03174de8bfd24cceab74ce6b4ce0b.png",
"link": "https://www.bilibili.com/bangumi/play/ss91776",
"track_params": null
}, {
"season_id": 99688,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "",
"left_subscript": "漫画改",
"title": "丁丁历险记 第一季",
"sub_title": "一人一狗闯世界",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/1e0db7c64755ced8ad7a9615f692500cc2db9898.jpg",
"link": "https://www.bilibili.com/bangumi/play/ss99688",
"track_params": null
}, {
"season_id": 91812,
"right_superscript": "http://i0.hdslb.com/bfs/bangumi/image/e31027bd41fb1cec4cbd1477f09799d0749bdf88.png",
"right_subscript": "9.9",
"left_subscript": "漫画改",
"title": "赛马娘 芦毛灰姑娘",
"sub_title": "一马当先,万马无光",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/c72d6ee8b3cba39355af14bebd4857935b4fb083.png",
"link": "https://www.bilibili.com/bangumi/play/ss91812",
"track_params": null
}, {
"season_id": 90684,
"right_superscript": "http://i0.hdslb.com/bfs/bangumi/image/e31027bd41fb1cec4cbd1477f09799d0749bdf88.png",
"right_subscript": "9.9",
"left_subscript": "原创",
"title": "末日后酒店",
"sub_title": "让AI顺应你的心",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/2f5946880c07914d1cccd112702884f232b647e0.png",
"link": "https://www.bilibili.com/bangumi/play/ss90684",
"track_params": null
}, {
"season_id": 96969,
"right_superscript": "http://i0.hdslb.com/bfs/bangumi/image/e31027bd41fb1cec4cbd1477f09799d0749bdf88.png",
"right_subscript": "",
"left_subscript": "漫画改",
"title": "九龙大众浪漫",
"sub_title": "金鱼游弋的谎言盛宴",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/bf7a2acd78fffc9d0eb8887f92de681924afb73d.png",
"link": "https://www.bilibili.com/bangumi/play/ss96969",
"track_params": null
}, {
"season_id": 99644,
"right_superscript": "http://i0.hdslb.com/bfs/bangumi/image/e31027bd41fb1cec4cbd1477f09799d0749bdf88.png",
"right_subscript": "",
"left_subscript": "漫画改",
"title": "小城日常",
"sub_title": "《日常》精神续作",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/6694a18852af6eeea804e604376bc014d1a84441.png",
"link": "https://www.bilibili.com/bangumi/play/ss99644",
"track_params": null
}, {
"season_id": 91513,
"right_superscript": "http://i0.hdslb.com/bfs/bangumi/image/e31027bd41fb1cec4cbd1477f09799d0749bdf88.png",
"right_subscript": "8.2",
"left_subscript": "小说改",
"title": "天才治疗师退队作为无照治疗师快乐过活",
"sub_title": "真乃妙手回春啊大夫",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/75d7c9d18faa0b792d8bfab181f1608184c32b8b.jpg",
"link": "https://www.bilibili.com/bangumi/play/ss91513",
"track_params": null
}, {
"season_id": 91498,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "9.5",
"left_subscript": "小说改",
"title": "打了300年的史莱姆,不知不觉就练到了满级 第二季",
"sub_title": "满级魔女只想养老",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/d9727717ee6b507225b26ae367a43a444a6157ca.png",
"link": "https://www.bilibili.com/bangumi/play/ss91498",
"track_params": null
}, {
"season_id": 33415,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "9.8",
"left_subscript": "智斗",
"title": "名侦探柯南(中配)",
"sub_title": "小学生的侦探生活",
"cover": "http://i0.hdslb.com/bfs/bangumi/image/38e2a273f528fd01c34f1fc4df0f69c64487efad.png",
"link": "https://www.bilibili.com/bangumi/play/ss33415",
"track_params": null
}, {
"season_id": 91894,
"right_superscript": "http://i0.hdslb.com/bfs/bangumi/image/e31027bd41fb1cec4cbd1477f09799d0749bdf88.png",
"right_subscript": "5.8",
"left_subscript": "漫画改",
"title": "最强王者的第二人生",
"sub_title": "三岁开始当卷王",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/ff55e211d6ab08f063ef2df0bcb064854d08f221.png",
"link": "https://www.bilibili.com/bangumi/play/ss91894",
"track_params": null
}, {
"season_id": 99693,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "",
"left_subscript": "漫画改",
"title": "丁丁历险记 第三季",
"sub_title": "一人一狗闯世界",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/5a314ae3c28f1e7819c77672bbeeb99f7cda346b.jpg",
"link": "https://www.bilibili.com/bangumi/play/ss99693",
"track_params": null
}, {
"season_id": 98687,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "",
"left_subscript": "原创",
"title": "少年骇客 第一季",
"sub_title": "少年获得神奇手表",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/7cf7938af567ceb370a72ac57433f346d6bd9b87.png",
"link": "https://www.bilibili.com/bangumi/play/ss98687",
"track_params": null
}, {
"season_id": 48810,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "9.7",
"left_subscript": "热血",
"title": "假面骑士加布",
"sub_title": "令和第六作假面骑士",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/8f3bf6b461ad4dfae2a221e5b194415d5f7ca697.png",
"link": "https://www.bilibili.com/bangumi/play/ss48810",
"track_params": null
}, {
"season_id": 91577,
"right_superscript": "http://i0.hdslb.com/bfs/bangumi/image/e31027bd41fb1cec4cbd1477f09799d0749bdf88.png",
"right_subscript": "8.9",
"left_subscript": "漫画改",
"title": "炎炎消防队 叁之章",
"sub_title": "焰人谜团步入最终章",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/efb0bfbcd060f1b2280bad5f40c8b75db64de442.png",
"link": "https://www.bilibili.com/bangumi/play/ss91577",
"track_params": null
}, {
"season_id": 91305,
"right_superscript": "http://i0.hdslb.com/bfs/bangumi/image/403e4e8492f9c275490bf11fcf0f0ca68bbe0bbf.png",
"right_subscript": "9.8",
"left_subscript": "漫画改",
"title": "测不准的阿波连同学 第二季",
"sub_title": "猜不中的来堂同学",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/f56b2c9938b981bc6e029ce4d7b2bb0bd29948c4.png",
"link": "https://www.bilibili.com/bangumi/play/ss91305",
"track_params": null
}, {
"season_id": 33378,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "9.7",
"left_subscript": "智斗",
"title": "名侦探柯南",
"sub_title": "真相永远只有一个",
"cover": "http://i0.hdslb.com/bfs/bangumi/image/38e2a273f528fd01c34f1fc4df0f69c64487efad.png",
"link": "https://www.bilibili.com/bangumi/play/ss33378",
"track_params": null
}, {
"season_id": 98696,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "9.9",
"left_subscript": "原创",
"title": "少年骇客 第二季 中文配音",
"sub_title": "少年获得神奇手表",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/3ae6f63e48d295abb3f637ba71c007ca2c61f153.png",
"link": "https://www.bilibili.com/bangumi/play/ss98696",
"track_params": null
}, {
"season_id": 91466,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "9.7",
"left_subscript": "漫画改",
"title": "魔女与使魔",
"sub_title": "魔女的魔法有副作用",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/d7337f0b197da961d57b4321011048db6b518bb8.png",
"link": "https://www.bilibili.com/bangumi/play/ss91466",
"track_params": null
}, {
"season_id": 100274,
"right_superscript": "http://i0.hdslb.com/bfs/bangumi/image/403e4e8492f9c275490bf11fcf0f0ca68bbe0bbf.png",
"right_subscript": "",
"left_subscript": "小说改",
"title": "肥宅勇者",
"sub_title": "牺牲颜值的强者之路",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/1e90562eb0a76cb48f1558ee73e2560104057ff0.png",
"link": "https://www.bilibili.com/bangumi/play/ss100274",
"track_params": null
}, {
"season_id": 92458,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "8.9",
"left_subscript": "原创",
"title": "宝可梦 地平线(中配)",
"sub_title": "与全新角色开始冒险",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/c82293ce7fadd7188be20c0487869a187f2ba0eb.jpg",
"link": "https://www.bilibili.com/bangumi/play/ss92458",
"track_params": null
}, {
"season_id": 48297,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "",
"left_subscript": "日常",
"title": "小猪佩奇 第十季 中文配音",
"sub_title": "你好!我是佩奇!",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/0ea83a1ab2ed156fd4b6ce2a29e0f209d0d43927.png",
"link": "https://www.bilibili.com/bangumi/play/ss48297",
"track_params": null
}, {
"season_id": 91755,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "9.8",
"left_subscript": "漫画改",
"title": "哆啦A梦 第五季",
"sub_title": "哆啦A梦帮帮我!!",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/5b05e7f5892b9cd1d8b41610114583e124f3c85a.jpg",
"link": "https://www.bilibili.com/bangumi/play/ss91755",
"track_params": null
}, {
"season_id": 98694,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "9.9",
"left_subscript": "原创",
"title": "少年骇客 第一季 中文配音",
"sub_title": "少年获得神奇手表",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/f72fac0118e212e577ee4a3a0b0b0e3021c90e58.png",
"link": "https://www.bilibili.com/bangumi/play/ss98694",
"track_params": null
}, {
"season_id": 48034,
"right_superscript": "http://i0.hdslb.com/bfs/bangumi/image/e31027bd41fb1cec4cbd1477f09799d0749bdf88.png",
"right_subscript": "6.4",
"left_subscript": "小说改",
"title": "你与我最后的战场,亦或是世界起始的圣战 第二季",
"sub_title": "夫妻同心 其利断金",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/d4974b6f095f9362493f1ae79b36da8c96552f66.png",
"link": "https://www.bilibili.com/bangumi/play/ss48034",
"track_params": null
}, {
"season_id": 91777,
"right_superscript": "http://i0.hdslb.com/bfs/bangumi/image/e31027bd41fb1cec4cbd1477f09799d0749bdf88.png",
"right_subscript": "9.4",
"left_subscript": "小说改",
"title": "直至魔女消逝",
"sub_title": "见习魔女生命倒计时",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/588cc1e9f43b57b1e8ec4fcb0f16bfc3f743de00.png",
"link": "https://www.bilibili.com/bangumi/play/ss91777",
"track_params": null
}, {
"season_id": 98698,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "9.9",
"left_subscript": "原创",
"title": "少年骇客 第三季 中文配音",
"sub_title": "少年获得神奇手表",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/0ec2ec57520cff4ae813f51b633988fd37d7c00d.png",
"link": "https://www.bilibili.com/bangumi/play/ss98698",
"track_params": null
}, {
"season_id": 96971,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "4.3",
"left_subscript": "原创",
"title": "假面骑士利维斯",
"sub_title": "英雄与恶魔搭档最强",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/ffdea4aaa6324fc47f8cb89d540cebed25ee28fa.png",
"link": "https://www.bilibili.com/bangumi/play/ss96971",
"track_params": null
}, {
"season_id": 6262,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "9.8",
"left_subscript": "搞笑",
"title": "蜡笔小新 第二季(中文)",
"sub_title": "不想来笑一下吗?",
"cover": "http://i0.hdslb.com/bfs/bangumi/6d8bd12e0e1ab2d4d5e8567bdba18240e75d7a1b.jpg",
"link": "https://www.bilibili.com/bangumi/play/ss6262",
"track_params": null
}, {
"season_id": 5398,
"right_superscript": "http://i0.hdslb.com/bfs/bangumi/image/e31027bd41fb1cec4cbd1477f09799d0749bdf88.png",
"right_subscript": "9.8",
"left_subscript": "热血",
"title": "JOJO的奇妙冒险 不灭钻石",
"sub_title": "不一样的热血动画",
"cover": "http://i0.hdslb.com/bfs/bangumi/6a04c87e990ab74cd8d555ef45a863de0993b161.png",
"link": "https://www.bilibili.com/bangumi/play/ss5398",
"track_params": null
}, {
"season_id": 91510,
"right_superscript": "http://i0.hdslb.com/bfs/bangumi/image/e31027bd41fb1cec4cbd1477f09799d0749bdf88.png",
"right_subscript": "8",
"left_subscript": "小说改",
"title": "乡下大叔成为剑圣",
"sub_title": "剑术老师桃李满天下",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/0f5be9db05e5bc60c1ba6cee80debe02c5f73f56.png",
"link": "https://www.bilibili.com/bangumi/play/ss91510",
"track_params": null
}, {
"season_id": 48922,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "9.4",
"left_subscript": "原创",
"title": "假面骑士加布(中配)",
"sub_title": "令和第六作假面骑士",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/8f3bf6b461ad4dfae2a221e5b194415d5f7ca697.png",
"link": "https://www.bilibili.com/bangumi/play/ss48922",
"track_params": null
}, {
"season_id": 91814,
"right_superscript": "http://i0.hdslb.com/bfs/bangumi/image/e31027bd41fb1cec4cbd1477f09799d0749bdf88.png",
"right_subscript": "",
"left_subscript": "漫画改",
"title": "战队大失格 第二季",
"sub_title": "五个人都是战队英雄",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/17cc74e662b3fb3c8fd35d0983c046f6b7e38700.png",
"link": "https://www.bilibili.com/bangumi/play/ss91814",
"track_params": null
}, {
"season_id": 25681,
"right_superscript": "http://i0.hdslb.com/bfs/bangumi/image/e31027bd41fb1cec4cbd1477f09799d0749bdf88.png",
"right_subscript": "9.8",
"left_subscript": "热血",
"title": "JOJO的奇妙冒险 黄金之风",
"sub_title": "这就是黄金体验",
"cover": "http://i0.hdslb.com/bfs/bangumi/f34ff3975c39913af936c133ae60a5891babba08.png",
"link": "https://www.bilibili.com/bangumi/play/ss25681",
"track_params": null
}, {
"season_id": 38157,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "9.9",
"left_subscript": "热血",
"title": "银魂",
"sub_title": "最无厘头的热血动画",
"cover": "http://i0.hdslb.com/bfs/bangumi/image/087b862b772ee4e644478a36c757a26db476193d.png",
"link": "https://www.bilibili.com/bangumi/play/ss38157",
"track_params": null
}, {
"season_id": 92889,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "",
"left_subscript": "漫画改",
"title": "胆大党 中配版",
"sub_title": "妖怪vs外星人",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/0a681472cb6ccfcd7f18094433ea9b750d9c0849.png",
"link": "https://www.bilibili.com/bangumi/play/ss92889",
"track_params": null
}]
}, {
"tap_title": "纪录片",
"tap_type": 3,
"seasons": [{
"season_id": 96695,
"right_superscript": "http://i0.hdslb.com/bfs/bangumi/image/403e4e8492f9c275490bf11fcf0f0ca68bbe0bbf.png",
"right_subscript": "",
"left_subscript": "人文",
"title": "人生海海",
"sub_title": "火锅江湖,人生沉浮",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/d3faa4f109b93f3c03a4ba6e8ec9cea02252fb31.jpg",
"link": "https://www.bilibili.com/bangumi/play/ss96695",
"track_params": null
}, {
"season_id": 95645,
"right_superscript": "http://i0.hdslb.com/bfs/vip/7a099c1d698eeb9036a4f1c4716c25d3cc1fb3ec.png",
"right_subscript": "9.5",
"left_subscript": "美食",
"title": "舌尖上的中国4",
"sub_title": "博大精深的中国饮食",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/d9be392c25addb449de9760cae48233ac1a1daf7.jpg",
"link": "https://www.bilibili.com/bangumi/play/ss95645",
"track_params": null
}, {
"season_id": 88835,
"right_superscript": "http://i0.hdslb.com/bfs/bangumi/image/403e4e8492f9c275490bf11fcf0f0ca68bbe0bbf.png",
"right_subscript": "9.9",
"left_subscript": "社会",
"title": "你好,12315",
"sub_title": "12315打假实录",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/3c1a01ed28c60ac04b0f6edf2f0707ae1afa100f.png",
"link": "https://www.bilibili.com/bangumi/play/ss88835",
"track_params": null
}, {
"season_id": 48055,
"right_superscript": "http://i0.hdslb.com/bfs/bangumi/image/403e4e8492f9c275490bf11fcf0f0ca68bbe0bbf.png",
"right_subscript": "9.6",
"left_subscript": "社会",
"title": "守护解放西5",
"sub_title": "守护新篇章",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/dc62303faa9882065fe0d1ce3e7226f3eaad17fa.png",
"link": "https://www.bilibili.com/bangumi/play/ss48055",
"track_params": null
}, {
"season_id": 48056,
"right_superscript": "http://i0.hdslb.com/bfs/bangumi/image/403e4e8492f9c275490bf11fcf0f0ca68bbe0bbf.png",
"right_subscript": "9.9",
"left_subscript": "社会",
"title": "闪闪的儿科医生2",
"sub_title": "爆款医疗节目回归!",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/8d5ffd3bacd836778474fa719a321f9f2a4948b6.jpg",
"link": "https://www.bilibili.com/bangumi/play/ss48056",
"track_params": null
}, {
"season_id": 48826,
"right_superscript": "http://i0.hdslb.com/bfs/bangumi/image/e31027bd41fb1cec4cbd1477f09799d0749bdf88.png",
"right_subscript": "9.9",
"left_subscript": "自然",
"title": "生命奇观",
"sub_title": "无穷小亮自然纪录片",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/0ea69fe30f7f1f9637d42e354a0a4fa96078be4f.jpg",
"link": "https://www.bilibili.com/bangumi/play/ss48826",
"track_params": null
}, {
"season_id": 48800,
"right_superscript": "http://i0.hdslb.com/bfs/bangumi/image/403e4e8492f9c275490bf11fcf0f0ca68bbe0bbf.png",
"right_subscript": "9.9",
"left_subscript": "探险",
"title": "单挑荒野:水之章",
"sub_title": "德爷开启单挑新副本",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/29f33feb30d440aae93ac060377e29b61742c07f.png",
"link": "https://www.bilibili.com/bangumi/play/ss48800",
"track_params": null
}, {
"season_id": 44473,
"right_superscript": "http://i0.hdslb.com/bfs/bangumi/image/403e4e8492f9c275490bf11fcf0f0ca68bbe0bbf.png",
"right_subscript": "9.6",
"left_subscript": "社会",
"title": "守护解放西4",
"sub_title": "全新的守护者联盟",
"cover": "https://i0.hdslb.com/bfs/bangumi/image/6dd3cd3b6105071f0c2e22032c3196175117333f.jpg",
"link": "https://www.bilibili.com/bangumi/play/ss44473",
"track_params": null
}, {
"season_id": 33585,
"right_superscript": "https://i0.hdslb.com/bfs/bangumi/image/c264551547b8d7bf55d047002c27635bc180821e.png",
"right_subscript": "9.8",
"left_subscript": "人文",
"title": "中国通史",
"sub_title": "浩瀚历史图景",
"cover": "http://i0.hdslb.com/bfs/bangumi/image/48fdb
gitextract__of0gs4z/
├── .config/
│ └── dotnet-tools.json
├── .dockerignore
├── .editorconfig
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug-report----.md
│ │ ├── bug-report-qinglong----.md
│ │ ├── feature-request----.md
│ │ └── other----.md
│ ├── PULL_REQUEST_TEMPLATE.md
│ ├── pull.yml
│ └── workflows/
│ ├── auto-deploy-tencent-scf.yml
│ ├── codeql-analysis.yml
│ ├── no-toxic-comments.yml
│ ├── publish-image.yml
│ ├── publish-release.yml
│ ├── repo-sync.yml
│ ├── stale-issues.yml
│ ├── tag.yml
│ └── verify-pr.yml
├── .gitignore
├── .husky/
│ ├── pre-commit
│ └── task-runner.json
├── CHANGELOG.md
├── Directory.Packages.props
├── Dockerfile
├── LICENSE
├── README.md
├── Ray.BiliBiliTool.sln
├── bruno/
│ ├── api.bilibili.com/
│ │ └── x/
│ │ ├── space/
│ │ │ ├── folder.bru
│ │ │ └── wbi-acc-info.bru
│ │ └── vip/
│ │ ├── folder.bru
│ │ ├── vip_center/
│ │ │ ├── folder.bru
│ │ │ └── sign_in/
│ │ │ ├── folder.bru
│ │ │ └── three_days_sign.bru
│ │ └── web/
│ │ ├── folder.bru
│ │ └── vip_center/
│ │ ├── folder.bru
│ │ ├── modules.bru
│ │ └── v2.bru
│ ├── app.bilibili.com/
│ │ ├── folder.bru
│ │ ├── pgc/
│ │ │ └── activity/
│ │ │ ├── deliver/
│ │ │ │ ├── material/
│ │ │ │ │ └── receive.bru
│ │ │ │ └── task/
│ │ │ │ ├── complete-ogv.bru
│ │ │ │ └── complete.bru
│ │ │ └── score/
│ │ │ └── task/
│ │ │ └── receive/
│ │ │ └── v2/
│ │ │ ├── dressbuyamount.bru
│ │ │ ├── ogvwatchnew.bru
│ │ │ ├── tvodbuy.bru
│ │ │ └── vipmallbuy.bru
│ │ └── x/
│ │ └── report/
│ │ └── heartbeat/
│ │ └── mobile/
│ │ ├── end.bru
│ │ └── start.bru
│ ├── big.bilibili.com/
│ │ ├── pgc/
│ │ │ └── activity/
│ │ │ └── score/
│ │ │ └── task/
│ │ │ └── sign.bru
│ │ └── x/
│ │ └── vip/
│ │ └── experience/
│ │ └── add.bru
│ ├── bruno.json
│ ├── environments/
│ │ └── default.bru
│ ├── mall.bilibili.com/
│ │ ├── combine.bru
│ │ ├── folder.bru
│ │ └── sign2.bru
│ └── passport.bilibili.com/
│ └── x/
│ ├── passport-login/
│ │ ├── oauth2/
│ │ │ └── login.bru
│ │ └── web/
│ │ └── key.bru
│ ├── relation/
│ │ ├── followings/
│ │ │ └── simple.bru
│ │ └── tag/
│ │ └── special.bru
│ ├── v2/
│ │ ├── account/
│ │ │ └── myinfo.bru
│ │ └── feed/
│ │ └── index.bru
│ └── vip/
│ └── web/
│ └── vip_center/
│ └── v2.bru
├── common.props
├── docker/
│ ├── README.md
│ ├── build/
│ │ ├── buildAndPushImage_multiArch.ps1
│ │ ├── buildImage.cmd
│ │ ├── buildImage_amd64.cmd
│ │ └── buildImage_arm64.cmd
│ ├── entrypoint.sh
│ ├── install.sh
│ └── sample/
│ ├── config/
│ │ └── cookies.json
│ └── docker-compose.yml
├── docs/
│ ├── claw-cloud.md
│ ├── configuration.md
│ ├── donate-list.md
│ ├── questions.md
│ └── runInLocal.md
├── gitHubActions/
│ ├── README.md
│ └── bak/
│ ├── bilibili-daily-task.yml
│ ├── empty-task.yml
│ ├── live-lottery-task.yml
│ └── unfollow-batched-task.yml
├── helm/
│ ├── README.md
│ └── bilibili-tool/
│ ├── Chart.yaml
│ ├── templates/
│ │ ├── NOTES.txt
│ │ ├── _helpers.tpl
│ │ ├── configmap.yaml
│ │ └── deployment.yaml
│ └── values.yaml
├── krew/
│ ├── .gitignore
│ ├── Makefile
│ ├── README.md
│ ├── cmd/
│ │ └── kubectl-bilipro.go
│ ├── config.yaml
│ ├── go.mod
│ ├── go.sum
│ └── pkg/
│ ├── cmd/
│ │ ├── cmd.go
│ │ ├── delete.go
│ │ ├── get.go
│ │ ├── init.go
│ │ └── version.go
│ ├── options/
│ │ └── deployment.go
│ ├── resources/
│ │ ├── asset.go
│ │ └── base/
│ │ ├── bilibiliPro/
│ │ │ └── deployment.yaml
│ │ └── ns/
│ │ └── namespace.yaml
│ └── utils/
│ ├── client.go
│ ├── client_test.go
│ ├── cmd.go
│ ├── cmd_test.go
│ ├── error.go
│ ├── error_test.go
│ ├── fileSys.go
│ └── fileSys_test.go
├── podman/
│ ├── README.md
│ └── build/
│ └── buildImage.cmd
├── qinglong/
│ ├── DefaultTasks/
│ │ ├── bili_task_base.sh
│ │ ├── bili_task_charge.sh
│ │ ├── bili_task_daily.sh
│ │ ├── bili_task_liveFansMedal.sh
│ │ ├── bili_task_liveLottery.sh
│ │ ├── bili_task_login.sh
│ │ ├── bili_task_manga.sh
│ │ ├── bili_task_manga_privilege.sh
│ │ ├── bili_task_silver2coin.sh
│ │ ├── bili_task_test.sh
│ │ ├── bili_task_tryFix.sh
│ │ ├── bili_task_unfollowBatched.sh
│ │ ├── bili_task_vipBigPoint.sh
│ │ ├── bili_task_vip_privilege.sh
│ │ └── dev/
│ │ ├── bili_dev_task_base.sh
│ │ ├── bili_dev_task_charge.sh
│ │ ├── bili_dev_task_daily.sh
│ │ ├── bili_dev_task_liveFansMedal.sh
│ │ ├── bili_dev_task_liveLottery.sh
│ │ ├── bili_dev_task_login.sh
│ │ ├── bili_dev_task_manga.sh
│ │ ├── bili_dev_task_manga_privilege.sh
│ │ ├── bili_dev_task_silver2coin.sh
│ │ ├── bili_dev_task_test.sh
│ │ ├── bili_dev_task_tryFix.sh
│ │ ├── bili_dev_task_unfollowBatched.sh
│ │ ├── bili_dev_task_vipBigPoint.sh
│ │ └── bili_dev_task_vip_privilege.sh
│ ├── README.md
│ ├── bak/
│ │ ├── bili_dev_task_get_cookie.py.bak
│ │ └── bili_task_get_cookie.py.bak
│ ├── dotnet-install.sh
│ ├── extra.sh
│ └── ray-dotnet-install.sh
├── scripts/
│ ├── clean.cmd
│ ├── publish.bat
│ ├── publish.ps1
│ ├── publish.sh
│ └── ut.ps1
├── src/
│ ├── BlazingQuartz.Core/
│ │ ├── BlazingQuartz.Core.csproj
│ │ ├── BlazingQuartzCoreOptions.cs
│ │ ├── Constants.cs
│ │ ├── Events/
│ │ │ ├── EventArgs.cs
│ │ │ ├── JobWasExecutedEventArgs.cs
│ │ │ ├── SchedulerErrorEventArgs.cs
│ │ │ └── TriggerEventArgs.cs
│ │ ├── Extensions/
│ │ │ └── ModelExtensions.cs
│ │ ├── Helpers/
│ │ │ └── CronExpressionHelper.cs
│ │ ├── History/
│ │ │ ├── BaseExecutionLogRawSqlProvider.cs
│ │ │ ├── ExecutionLogStore.cs
│ │ │ ├── IExecutionLogRawSqlProvider.cs
│ │ │ ├── IExecutionLogStore.cs
│ │ │ ├── ISchedulerEventLoggingService.cs
│ │ │ └── SchedulerEventLoggingService.cs
│ │ ├── Jobs/
│ │ │ └── HousekeepExecutionLogsJob.cs
│ │ ├── Models/
│ │ │ ├── ExecutionLogFilter.cs
│ │ │ ├── JobDetailModel.cs
│ │ │ ├── JobExecutionStatusSummaryModel.cs
│ │ │ ├── Key.cs
│ │ │ ├── PagedList.cs
│ │ │ ├── ScheduleJobFilter.cs
│ │ │ ├── ScheduleModel.cs
│ │ │ └── TriggerDetailModel.cs
│ │ ├── ServiceCollectionExtensions.cs
│ │ └── Services/
│ │ ├── ExecutionLogService.cs
│ │ ├── IExecutionLogService.cs
│ │ ├── ISchedulerDefinitionService.cs
│ │ ├── ISchedulerListenerService.cs
│ │ ├── ISchedulerService.cs
│ │ ├── SchedulerDefinitionService.cs
│ │ ├── SchedulerListenerService.cs
│ │ └── SchedulerService.cs
│ ├── BlazingQuartz.Jobs/
│ │ ├── BlazingQuartz.Jobs.csproj
│ │ ├── Constants.cs
│ │ ├── HttpAction.cs
│ │ ├── HttpJob.cs
│ │ └── ServiceCollectionExtensions.cs
│ ├── BlazingQuartz.Jobs.Abstractions/
│ │ ├── BlazingQuartz.Jobs.Abstractions.csproj
│ │ ├── DataMapValue.cs
│ │ ├── DataMapValueResolver.cs
│ │ ├── DataMapValueType.cs
│ │ ├── IDataMapValueResolver.cs
│ │ ├── IJobUI.cs
│ │ ├── JobDataMapKeys.cs
│ │ ├── JobExecutionContextExtensions.cs
│ │ ├── Processors/
│ │ │ ├── InterpolatedStringV1Processor.cs
│ │ │ └── SystemVariableV1Provider.cs
│ │ ├── Resolvers/
│ │ │ ├── IResolver.cs
│ │ │ └── V1/
│ │ │ ├── DateTimeVariableResolver.cs
│ │ │ ├── GuidVariableResolver.cs
│ │ │ └── LocalDateTimeVariableResolver.cs
│ │ ├── ServiceCollectionExtensions.cs
│ │ └── VariableNameContants.cs
│ ├── Ray.BiliBiliTool.Agent/
│ │ ├── Attributes/
│ │ │ ├── AppendHeaderAttribute.cs
│ │ │ ├── AppendHeaderType.cs
│ │ │ └── LogFilterAttribute.cs
│ │ ├── BiliBiliAgent/
│ │ │ ├── Attributes/
│ │ │ │ └── WbiParameterAttribute.cs
│ │ │ ├── Dtos/
│ │ │ │ ├── AddCoinRequest.cs
│ │ │ │ ├── Article/
│ │ │ │ │ ├── AddCoinForArticleRequest.cs
│ │ │ │ │ ├── SearchArticleInfoResponse.cs
│ │ │ │ │ ├── SearchArticlesByUpIdFullFto.cs
│ │ │ │ │ └── SearchUpArticlesResponse.cs
│ │ │ │ ├── BaseAppRequest.cs
│ │ │ │ ├── BiliApiResponse.cs
│ │ │ │ ├── BiliPageResult.cs
│ │ │ │ ├── ChargeCommentRequest.cs
│ │ │ │ ├── ChargeRequest.cs
│ │ │ │ ├── ChargeResponse.cs
│ │ │ │ ├── CoinBalance.cs
│ │ │ │ ├── DailyTaskInfo.cs
│ │ │ │ ├── DonatedCoinsForVideo.cs
│ │ │ │ ├── GetAlreadyDonatedCoinsRequest.cs
│ │ │ │ ├── GetSpaceInfoFullDto.cs
│ │ │ │ ├── GetSpaceInfoResponse.cs
│ │ │ │ ├── GetSpecialFollowingsRequest.cs
│ │ │ │ ├── GetVideosResponse.cs
│ │ │ │ ├── Live/
│ │ │ │ │ ├── AreaDto.cs
│ │ │ │ │ ├── CheckTianXuanDto.cs
│ │ │ │ │ ├── EnterRoomRequest.cs
│ │ │ │ │ ├── ExchangeSilverStatusResponse.cs
│ │ │ │ │ ├── GetListRequest.cs
│ │ │ │ │ ├── GetLiveRoomInfoResponse.cs
│ │ │ │ │ ├── HeartBeatRequest.cs
│ │ │ │ │ ├── HeartBeatResponse.cs
│ │ │ │ │ ├── JoinTianXuanRequest.cs
│ │ │ │ │ ├── JoinTianXuanResponse.cs
│ │ │ │ │ ├── LikeLiveRoomRequest.cs
│ │ │ │ │ ├── ListItemDto.cs
│ │ │ │ │ ├── LiveSignResponse.cs
│ │ │ │ │ ├── LiveWalletStatusResponse.cs
│ │ │ │ │ ├── MedalWallDto.cs
│ │ │ │ │ ├── SendLiveDanmukuRequest.cs
│ │ │ │ │ ├── Silver2CoinRequest.cs
│ │ │ │ │ ├── Silver2CoinResponse.cs
│ │ │ │ │ ├── WearMedalWallRequest.cs
│ │ │ │ │ ├── WebHeartBeatRequest.cs
│ │ │ │ │ └── WebHeartBeatResponse.cs
│ │ │ │ ├── Mall/
│ │ │ │ │ ├── GetCombineRequest.cs
│ │ │ │ │ ├── PointInfo.cs
│ │ │ │ │ ├── Sign2Request.cs
│ │ │ │ │ ├── Sign2RequestPath.cs
│ │ │ │ │ ├── Sign2Response.cs
│ │ │ │ │ ├── TaskInfo.cs
│ │ │ │ │ └── VipBigPointCombine.cs
│ │ │ │ ├── MangaVipRewardResponse.cs
│ │ │ │ ├── Passport/
│ │ │ │ │ ├── GetSsoListResponse.cs
│ │ │ │ │ ├── QrCodeDto.cs
│ │ │ │ │ └── TokenDto.cs
│ │ │ │ ├── RankingInfo.cs
│ │ │ │ ├── Relation/
│ │ │ │ │ ├── CopyUserToGroupRequest.cs
│ │ │ │ │ ├── CreateTagRequest.cs
│ │ │ │ │ ├── CreateTagResponse.cs
│ │ │ │ │ ├── GetFollowingsRequest.cs
│ │ │ │ │ ├── GetFollowingsResponse.cs
│ │ │ │ │ ├── ModifyRelationRequest.cs
│ │ │ │ │ └── TagDto.cs
│ │ │ │ ├── SearchUpVideosResponse.cs
│ │ │ │ ├── ShareVideoRequest.cs
│ │ │ │ ├── UpInfo.cs
│ │ │ │ ├── UploadVideoHeartbeatRequest.cs
│ │ │ │ ├── UserInfo.cs
│ │ │ │ ├── Video/
│ │ │ │ │ ├── GetBangumiBySsidResponse.cs
│ │ │ │ │ └── SearchVideosByUpIdFullDto.cs
│ │ │ │ ├── VideoDetail.cs
│ │ │ │ ├── VideoInfo.cs
│ │ │ │ ├── ViewMall/
│ │ │ │ │ └── ViewvipMallRequest.cs
│ │ │ │ ├── VipPrivilegeType.cs
│ │ │ │ ├── VipStatus.cs
│ │ │ │ ├── VipTask/
│ │ │ │ │ ├── CompleteOgvWatchRequest.cs
│ │ │ │ │ ├── ReceiveOrCompleteTaskRequest.cs
│ │ │ │ │ ├── SignRequest.cs
│ │ │ │ │ ├── StartOgvWatchRequest.cs
│ │ │ │ │ ├── StartOgvWatchResponse.cs
│ │ │ │ │ ├── ThreeDaysSign/
│ │ │ │ │ │ ├── BigPointDto.cs
│ │ │ │ │ │ ├── ThreeDaySignDto.cs
│ │ │ │ │ │ ├── ThreeDaySignRequest.cs
│ │ │ │ │ │ └── ThreeDaySignResponse.cs
│ │ │ │ │ ├── ViewRequest.cs
│ │ │ │ │ ├── VipExperienceRequest.cs
│ │ │ │ │ └── VouchersInfoResponse.cs
│ │ │ │ └── VipType.cs
│ │ │ ├── Interfaces/
│ │ │ │ ├── IAccountApi.cs
│ │ │ │ ├── IArticleApi.cs
│ │ │ │ ├── IBiliBiliApi.cs
│ │ │ │ ├── IChargeApi.cs
│ │ │ │ ├── IDailyTaskApi.cs
│ │ │ │ ├── IHomeApi.cs
│ │ │ │ ├── ILiveApi.cs
│ │ │ │ ├── ILiveTraceApi.cs
│ │ │ │ ├── IMallApi.cs
│ │ │ │ ├── IMangaApi.cs
│ │ │ │ ├── IPassportApi.cs
│ │ │ │ ├── IRelationApi.cs
│ │ │ │ ├── IUpInfoApi.cs
│ │ │ │ ├── IUserInfoApi.cs
│ │ │ │ ├── IVideoApi.cs
│ │ │ │ ├── IVipBigPointApi.cs
│ │ │ │ └── IVipMallApi.cs
│ │ │ ├── Services/
│ │ │ │ ├── IWbiService.cs
│ │ │ │ └── WbiService.cs
│ │ │ ├── Utils/
│ │ │ │ └── LiveHeartBeatCrypto.cs
│ │ │ └── WridEncryptionDelegatingHandler.cs
│ │ ├── BiliCookie.cs
│ │ ├── BiliHosts.cs
│ │ ├── Constants.cs
│ │ ├── Extensions/
│ │ │ └── ServiceCollectionExtension.cs
│ │ ├── HttpClientDelegatingHandlers/
│ │ │ ├── IntervalDelegatingHandler.cs
│ │ │ └── LogDelegatingHandler.cs
│ │ ├── QingLong/
│ │ │ ├── Dtos/
│ │ │ │ ├── AddQingLongEnv.cs
│ │ │ │ ├── QingLongEnv.cs
│ │ │ │ ├── QingLongGenericResponse.cs
│ │ │ │ ├── TokenResponse.cs
│ │ │ │ └── UpdateQingLongEnv.cs
│ │ │ └── IQingLongApi.cs
│ │ └── Ray.BiliBiliTool.Agent.csproj
│ ├── Ray.BiliBiliTool.Application/
│ │ ├── AppService.cs
│ │ ├── Attributes/
│ │ │ ├── TaskInterceptorAttribute.cs
│ │ │ └── TaskLevel.cs
│ │ ├── BaseMultiAccountsAppService.cs
│ │ ├── ChargeTaskAppService.cs
│ │ ├── DailyTaskAppService.cs
│ │ ├── Extensions/
│ │ │ └── ServiceCollectionExtension.cs
│ │ ├── FodyWeavers.xml
│ │ ├── FodyWeavers.xsd
│ │ ├── LiveFansMedalAppService.cs
│ │ ├── LiveLotteryTaskAppService.cs
│ │ ├── LoginTaskAppService.cs
│ │ ├── MangaPrivilegeTaskAppService.cs
│ │ ├── MangaTaskAppService.cs
│ │ ├── Ray.BiliBiliTool.Application.csproj
│ │ ├── Silver2CoinTaskAppService.cs
│ │ ├── TestAppService.cs
│ │ ├── UnfollowBatchedTaskAppService.cs
│ │ ├── VipBigPointAppService.cs
│ │ └── VipPrivilegeTaskAppService.cs
│ ├── Ray.BiliBiliTool.Application.Contracts/
│ │ ├── IAppService.cs
│ │ ├── IChargeTaskAppService.cs
│ │ ├── IDailyTaskAppService.cs
│ │ ├── ILiveFansMedalAppService.cs
│ │ ├── ILiveLotteryTaskAppService.cs
│ │ ├── ILoginTaskAppService.cs
│ │ ├── IMangaPrivilegeTaskAppService.cs
│ │ ├── IMangaTaskAppService.cs
│ │ ├── ISilver2CoinTaskAppService.cs
│ │ ├── ITestAppService.cs
│ │ ├── IUnfollowBatchedTaskAppService.cs
│ │ ├── IVipBigPointAppService.cs
│ │ ├── IVipPrivilegeTaskAppService.cs
│ │ ├── Ray.BiliBiliTool.Application.Contracts.csproj
│ │ └── TaskTypeFactory.cs
│ ├── Ray.BiliBiliTool.Config/
│ │ ├── Constants.cs
│ │ ├── Extensions/
│ │ │ └── ServiceCollectionExtension.cs
│ │ ├── IHasCron.cs
│ │ ├── Options/
│ │ │ ├── BaseConfigOptions.cs
│ │ │ ├── BiliBiliCookieOptions.cs
│ │ │ ├── ChargeTaskOptions.cs
│ │ │ ├── DailyTaskOptions.cs
│ │ │ ├── IConfigOptions.cs
│ │ │ ├── LiveFansMedalTaskOptions.cs
│ │ │ ├── LiveLotteryTaskOptions.cs
│ │ │ ├── MangaPrivilegeTaskOptions.cs
│ │ │ ├── MangaTaskOptions.cs
│ │ │ ├── QingLongOptions.cs
│ │ │ ├── SecurityOptions.cs
│ │ │ ├── Silver2CoinTaskOptions.cs
│ │ │ ├── UnfollowBatchedTaskOptions.cs
│ │ │ ├── VipBigPointOptions.cs
│ │ │ └── VipPrivilegeOptions.cs
│ │ ├── Ray.BiliBiliTool.Config.csproj
│ │ └── SQLite/
│ │ ├── SqliteConfigurationExtensions.cs
│ │ ├── SqliteConfigurationProvider.cs
│ │ └── SqliteConfigurationSource.cs
│ ├── Ray.BiliBiliTool.Console/
│ │ ├── BiliBiliToolHostedService.cs
│ │ ├── Program.cs
│ │ ├── Properties/
│ │ │ └── launchSettings.json
│ │ ├── Ray.BiliBiliTool.Console.csproj
│ │ ├── appsettings.Development.json
│ │ ├── appsettings.Production.json
│ │ └── appsettings.json
│ ├── Ray.BiliBiliTool.Domain/
│ │ ├── BiliLogs.cs
│ │ ├── ExecutionLog.cs
│ │ ├── ExecutionLogDetail.cs
│ │ ├── LogType.cs
│ │ ├── Ray.BiliBiliTool.Domain.csproj
│ │ └── User.cs
│ ├── Ray.BiliBiliTool.DomainService/
│ │ ├── AccountDomainService.cs
│ │ ├── ArticleDomainService.cs
│ │ ├── ChargeDomainService.cs
│ │ ├── CoinDomainService.cs
│ │ ├── DonateCoinDomainService.cs
│ │ ├── Dtos/
│ │ │ ├── FansMedalInfoDto.cs
│ │ │ ├── HeartBeatIterationInfoDto.cs
│ │ │ └── VideoInfoDto.cs
│ │ ├── Extensions/
│ │ │ └── ServiceCollectionExtensions.cs
│ │ ├── Interfaces/
│ │ │ ├── IAccountDomainService.cs
│ │ │ ├── IArticleDomainService.cs
│ │ │ ├── IChargeDomainService.cs
│ │ │ ├── ICoinDomainService.cs
│ │ │ ├── IDomainService.cs
│ │ │ ├── IDonateCoinDomainService.cs
│ │ │ ├── ILiveDomainService.cs
│ │ │ ├── ILoginDomainService.cs
│ │ │ ├── IMangaDomainService.cs
│ │ │ ├── IVideoDomainService.cs
│ │ │ ├── IVipBigPointDomainService.cs
│ │ │ └── IVipPrivilegeDomainService.cs
│ │ ├── LiveDomainService.cs
│ │ ├── LoginDomainService.cs
│ │ ├── MangaDomainService.cs
│ │ ├── Ray.BiliBiliTool.DomainService.csproj
│ │ ├── VideoDomainService.cs
│ │ ├── VipBigPointDomainService.cs
│ │ └── VipPrivilegeDomainService.cs
│ ├── Ray.BiliBiliTool.Infrastructure/
│ │ ├── Cookie/
│ │ │ ├── CookieInfo.cs
│ │ │ └── CookieStrFactory.cs
│ │ ├── Enums/
│ │ │ └── PlatformType.cs
│ │ ├── Extensions/
│ │ │ ├── ICollectionExtensions.cs
│ │ │ ├── KeyValuePairExtensions.cs
│ │ │ └── TypeExtensions.cs
│ │ ├── Global.cs
│ │ ├── Helpers/
│ │ │ ├── IpHelper.cs
│ │ │ ├── ObjectHelper.cs
│ │ │ ├── PasswordHelper.cs
│ │ │ ├── RandomHelper.cs
│ │ │ ├── RegexHelper.cs
│ │ │ └── ZipHelper.cs
│ │ ├── JsonSerializerOptionsBuilder.cs
│ │ ├── JsonSerializerOptionsBuilderExtensions.cs
│ │ └── Ray.BiliBiliTool.Infrastructure.csproj
│ ├── Ray.BiliBiliTool.Infrastructure.EF/
│ │ ├── BiliDbContext.cs
│ │ ├── DbInitializer.cs
│ │ ├── Extensions/
│ │ │ └── ServiceCollectionExtension.cs
│ │ ├── Migrations/
│ │ │ ├── 20250503105406_InitQuartz.Designer.cs
│ │ │ ├── 20250503105406_InitQuartz.cs
│ │ │ ├── 20250503164108_Update.Designer.cs
│ │ │ ├── 20250503164108_Update.cs
│ │ │ ├── 20250510130427_AddBiliLogs.Designer.cs
│ │ │ ├── 20250510130427_AddBiliLogs.cs
│ │ │ ├── 20250615100041_AddUser.Designer.cs
│ │ │ ├── 20250615100041_AddUser.cs
│ │ │ └── BiliDbContextModelSnapshot.cs
│ │ ├── README.md
│ │ └── Ray.BiliBiliTool.Infrastructure.EF.csproj
│ ├── Ray.BiliBiliTool.Web/
│ │ ├── Auth/
│ │ │ └── CustomAuthStateProvider.cs
│ │ ├── Components/
│ │ │ ├── App.razor
│ │ │ ├── Comps/
│ │ │ │ ├── BlazingJob.razor
│ │ │ │ ├── BlazingJob.razor.cs
│ │ │ │ ├── BlazingJob.razor.css
│ │ │ │ ├── BlazingJob.razor.js
│ │ │ │ ├── BlazingTrigger.razor
│ │ │ │ ├── BlazingTrigger.razor.cs
│ │ │ │ ├── BlazingTrigger.razor.css
│ │ │ │ ├── BlazingTrigger.razor.js
│ │ │ │ ├── DefaultJobUI.razor
│ │ │ │ ├── DefaultJobUI.razor.cs
│ │ │ │ └── ScheduleDialog.razor
│ │ │ ├── Layout/
│ │ │ │ ├── MainLayout.razor
│ │ │ │ ├── MainLayout.razor.css
│ │ │ │ ├── NavMenu.razor
│ │ │ │ └── NavMenu.razor.css
│ │ │ ├── Pages/
│ │ │ │ ├── Admin.razor
│ │ │ │ ├── Admin.razor.cs
│ │ │ │ ├── Admin.razor.css
│ │ │ │ ├── Admin.razor.js
│ │ │ │ ├── Configs/
│ │ │ │ │ ├── BaseConfigComponent.cs
│ │ │ │ │ ├── ChargeTaskConfig.razor
│ │ │ │ │ ├── ChargeTaskConfig.razor.cs
│ │ │ │ │ ├── DailyJobConfig.razor
│ │ │ │ │ ├── DailyJobConfig.razor.cs
│ │ │ │ │ ├── DailyJobConfig.razor.css
│ │ │ │ │ ├── DailyJobConfig.razor.js
│ │ │ │ │ ├── LiveFansMedalTaskConfig.razor
│ │ │ │ │ ├── LiveFansMedalTaskConfig.razor.cs
│ │ │ │ │ ├── LiveLotteryTaskConfig.razor
│ │ │ │ │ ├── LiveLotteryTaskConfig.razor.cs
│ │ │ │ │ ├── MangaPrivilegeTaskConfig.razor
│ │ │ │ │ ├── MangaPrivilegeTaskConfig.razor.cs
│ │ │ │ │ ├── MangaTaskConfig.razor
│ │ │ │ │ ├── MangaTaskConfig.razor.cs
│ │ │ │ │ ├── Silver2CoinTaskConfig.razor
│ │ │ │ │ ├── Silver2CoinTaskConfig.razor.cs
│ │ │ │ │ ├── UnfollowBatchedTaskConfig.razor
│ │ │ │ │ ├── UnfollowBatchedTaskConfig.razor.cs
│ │ │ │ │ ├── VipBigPointConfig.razor
│ │ │ │ │ ├── VipBigPointConfig.razor.cs
│ │ │ │ │ ├── VipPrivilegeConfig.razor
│ │ │ │ │ └── VipPrivilegeConfig.razor.cs
│ │ │ │ ├── Error.razor
│ │ │ │ ├── Home.razor
│ │ │ │ ├── Login.razor
│ │ │ │ ├── Login.razor.cs
│ │ │ │ ├── Login.razor.css
│ │ │ │ ├── Login.razor.js
│ │ │ │ └── Schedules/
│ │ │ │ ├── HistoryDialog.razor
│ │ │ │ ├── HistoryDialog.razor.cs
│ │ │ │ ├── LogsDialog.razor
│ │ │ │ ├── LogsDialog.razor.cs
│ │ │ │ ├── LogsDialog.razor.css
│ │ │ │ ├── Schedules.razor
│ │ │ │ ├── Schedules.razor.cs
│ │ │ │ ├── Schedules.razor.css
│ │ │ │ └── Schedules.razor.js
│ │ │ ├── Routes.razor
│ │ │ └── _Imports.razor
│ │ ├── Constants.cs
│ │ ├── Controllers/
│ │ │ ├── AuthController.cs
│ │ │ └── TestController.cs
│ │ ├── Extensions/
│ │ │ ├── ExecutionLogExtensions.cs
│ │ │ ├── ModelExtensions.cs
│ │ │ ├── ServiceCollectionExtension.cs
│ │ │ └── ServiceCollectionQuartzConfiguratorExtensions.cs
│ │ ├── Jobs/
│ │ │ ├── BaseJob.cs
│ │ │ ├── ChargeJob.cs
│ │ │ ├── DailyJob.cs
│ │ │ ├── LiveFansMedalJob.cs
│ │ │ ├── LiveLotteryJob.cs
│ │ │ ├── LoginJob.cs
│ │ │ ├── MangaJob.cs
│ │ │ ├── MangaPrivilegeJob.cs
│ │ │ ├── Silver2CoinJob.cs
│ │ │ ├── TestBiliJob.cs
│ │ │ ├── UnfollowBatchedJob.cs
│ │ │ ├── VipBigPointJob.cs
│ │ │ └── VipPrivilegeJob.cs
│ │ ├── Program.cs
│ │ ├── Properties/
│ │ │ └── launchSettings.json
│ │ ├── Ray.BiliBiliTool.Web.csproj
│ │ ├── Services/
│ │ │ ├── AuthService.cs
│ │ │ └── IJobUIProvider.cs
│ │ ├── appsettings.Development.json
│ │ ├── appsettings.json
│ │ └── wwwroot/
│ │ └── app.css
│ └── Ray.BiliBiliTool.Web.Client/
│ ├── Pages/
│ │ └── Counter.razor
│ ├── Program.cs
│ ├── Ray.BiliBiliTool.Web.Client.csproj
│ ├── _Imports.razor
│ └── wwwroot/
│ ├── appsettings.Development.json
│ └── appsettings.json
├── tencentScf/
│ ├── README.md
│ ├── bootstrap
│ ├── index.sh
│ ├── publish.bat
│ ├── publish.sh
│ └── serverless.yml
└── test/
├── AppServiceTest/
│ ├── AppServiceTest.csproj
│ ├── DailyTask/
│ │ └── DonateCoinsTest.cs
│ ├── Usings.cs
│ └── VipServiceTest.cs
├── BiliAgentTest/
│ ├── BiliAgentTest.csproj
│ ├── LiveTraceApiTest.cs
│ └── VideoApiTest.cs
├── ConfigTest/
│ ├── ConfigTest.csproj
│ ├── TestDefaultValue.cs
│ └── UnitTest1.cs
├── DomainServiceTest/
│ ├── ArticleDomainServiceTest.cs
│ ├── CalculateUpgradeTimeTest.cs
│ ├── DomainServiceTest.csproj
│ ├── DonateCoinDomainServiceTest.cs
│ ├── Usings.cs
│ └── VideoDomainServiceTest.cs
├── InfrastructureTest/
│ ├── InfrastructureTest.csproj
│ ├── Usings.cs
│ └── WbiHelperTest.cs
├── LogTest/
│ ├── LogConstants.cs
│ ├── LogTest.csproj
│ ├── TestCoolPush.cs
│ ├── TestDingTalk.cs
│ ├── TestMicrosoftTeams.cs
│ ├── TestPushPlus.cs
│ ├── TestServerChan.cs
│ ├── TestTelegram.cs
│ ├── TestWorkWeiXin.cs
│ └── TestWorkWeiXinApp.cs
└── Ray.BiliBiliTool.Agent.FunctionalTests/
├── AccountApiTests.cs
├── ArticleApiTests.cs
├── ChargeApiTest.cs
├── DailyTaskApiTests.cs
├── HomeApiTests.cs
├── LiveApiTest.cs
├── Ray.BiliBiliTool.Agent.FunctionalTests.csproj
├── VipBigPointApiTest.cs
├── VipMallApiTests.cs
└── WbiServiceTest.cs
SYMBOL INDEX (1297 symbols across 365 files)
FILE: krew/cmd/kubectl-bilipro.go
function main (line 14) | func main() {
FILE: krew/pkg/cmd/cmd.go
constant biliproDesc (line 11) | biliproDesc = `Manage and deploy bilibili pro tools on k8s`
constant kubeconfig (line 12) | kubeconfig = "kubeconfig"
function init (line 24) | func init() {
function NewExecutor (line 31) | func NewExecutor(streams genericclioptions.IOStreams) *cobra.Command {
FILE: krew/pkg/cmd/delete.go
constant deleteDesc (line 19) | deleteDesc = `
constant deleteExample (line 21) | deleteExample = ` kubectl bilipro delete <--name deployment_name>`
type deleteCmd (line 24) | type deleteCmd struct
method run (line 58) | func (o *deleteCmd) run(writer io.Writer) error {
function newDeleteCmd (line 31) | func newDeleteCmd(out io.Writer, errOut io.Writer) *cobra.Command {
FILE: krew/pkg/cmd/get.go
constant getDesc (line 14) | getDesc = `
constant getExample (line 16) | getExample = ` kubectl bilipro get <--name deployment_name --namespace ...
type getCmd (line 19) | type getCmd struct
method run (line 52) | func (o *getCmd) run(writer io.Writer) error {
function newGetCmd (line 26) | func newGetCmd(out io.Writer, errOut io.Writer) *cobra.Command {
FILE: krew/pkg/cmd/init.go
constant initDesc (line 27) | initDesc = `
constant initExample (line 29) | initExample = ` kubectl bilipro init --config <config-file>`
type initCmd (line 32) | type initCmd struct
method run (line 87) | func (o *initCmd) run(writer io.Writer) error {
method serializeJSONPatchOps (line 283) | func (o *initCmd) serializeJSONPatchOps(jp []interface{}) string {
function newInitCmd (line 40) | func newInitCmd(out io.Writer, errOut io.Writer) *cobra.Command {
type opStr (line 69) | type opStr struct
type opInterface (line 75) | type opInterface struct
type normalEnvVars (line 81) | type normalEnvVars struct
FILE: krew/pkg/cmd/version.go
constant versionDesc (line 14) | versionDesc = `
constant versionExample (line 16) | versionExample = ` kubectl bilipro version`
type versionCmd (line 19) | type versionCmd struct
method run (line 47) | func (o *versionCmd) run() error {
function newVersionCmd (line 24) | func newVersionCmd(out io.Writer, errOut io.Writer) *cobra.Command {
FILE: krew/pkg/options/deployment.go
type DeployOptions (line 4) | type DeployOptions struct
FILE: krew/pkg/resources/asset.go
function GetStaticResources (line 11) | func GetStaticResources() embed.FS {
FILE: krew/pkg/utils/client.go
function GetK8sClient (line 17) | func GetK8sClient() (*kubernetes.Clientset, *rest.Config, error) {
function GetBiliName (line 47) | func GetBiliName(client *kubernetes.Clientset, namespace, deploymentName...
FILE: krew/pkg/utils/client_test.go
function TestGetK8sClient (line 7) | func TestGetK8sClient(t *testing.T) {
FILE: krew/pkg/utils/cmd.go
function Run (line 10) | func Run(cmd *exec.Cmd, in io.Reader) error {
FILE: krew/pkg/utils/cmd_test.go
function TestRun (line 8) | func TestRun(t *testing.T) {
FILE: krew/pkg/utils/error.go
constant TEMPLATE_ERROR (line 10) | TEMPLATE_ERROR = "template error"
constant FILE_ERROR (line 12) | FILE_ERROR = "file system error"
constant SERVER_ERROR (line 14) | SERVER_ERROR = "cluster operation error"
constant EXEC_ERROR (line 16) | EXEC_ERROR = "exec error"
function GenErrorMsg (line 19) | func GenErrorMsg(errType, customMsg string) error {
FILE: krew/pkg/utils/error_test.go
function TestServerGenErrorMsg (line 8) | func TestServerGenErrorMsg(t *testing.T) {
function TestTemplateGenErrorMsg (line 16) | func TestTemplateGenErrorMsg(t *testing.T) {
function TestExecGenErrorMsg (line 24) | func TestExecGenErrorMsg(t *testing.T) {
function TestFileGenErrorMsg (line 32) | func TestFileGenErrorMsg(t *testing.T) {
FILE: krew/pkg/utils/fileSys.go
function GetResourceFileSys (line 16) | func GetResourceFileSys() (filesys.FileSystem, error) {
function copyFileToDiskFS (line 25) | func copyFileToDiskFS(src, dst string, diskFS filesys.FileSystem) error {
function copyDirtoDiskFS (line 57) | func copyDirtoDiskFS(src string, dst string, diskFS filesys.FileSystem) ...
FILE: krew/pkg/utils/fileSys_test.go
function TestCopyFiletoDiskFS (line 12) | func TestCopyFiletoDiskFS(t *testing.T) {
function TestCopyDirtoDiskFS (line 51) | func TestCopyDirtoDiskFS(t *testing.T) {
FILE: src/BlazingQuartz.Core/BlazingQuartzCoreOptions.cs
class BlazingQuartzCoreOptions (line 5) | public class BlazingQuartzCoreOptions
FILE: src/BlazingQuartz.Core/Constants.cs
class Constants (line 6) | public static class Constants
type DataStoreProvider (line 12) | public enum DataStoreProvider
type JobStatus (line 21) | public enum JobStatus
type TriggerType (line 39) | public enum TriggerType
type MisfireAction (line 48) | public enum MisfireAction
type IntervalUnit (line 95) | public enum IntervalUnit
type DataMapType (line 107) | public enum DataMapType
type JobExecutionStatus (line 121) | public enum JobExecutionStatus
class BlazingQuartzCoreOptions (line 129) | public class BlazingQuartzCoreOptions
class BlazingQuartzUIOptions (line 153) | public class BlazingQuartzUIOptions : BlazingQuartzCoreOptions { }
FILE: src/BlazingQuartz.Core/Events/EventArgs.cs
class EventArgs (line 5) | public class EventArgs<TArgs> : EventArgs
method EventArgs (line 10) | public EventArgs(TArgs args, CancellationToken cancelToken = default(C...
FILE: src/BlazingQuartz.Core/Events/JobWasExecutedEventArgs.cs
class JobWasExecutedEventArgs (line 6) | public class JobWasExecutedEventArgs : EventArgs
method JobWasExecutedEventArgs (line 12) | public JobWasExecutedEventArgs(
FILE: src/BlazingQuartz.Core/Events/SchedulerErrorEventArgs.cs
class SchedulerErrorEventArgs (line 6) | public class SchedulerErrorEventArgs : EventArgs
FILE: src/BlazingQuartz.Core/Events/TriggerEventArgs.cs
class TriggerEventArgs (line 6) | public class TriggerEventArgs : EventArgs
method TriggerEventArgs (line 12) | public TriggerEventArgs(
FILE: src/BlazingQuartz.Core/Extensions/ModelExtensions.cs
class ModelExtensions (line 7) | public static class ModelExtensions
method EqualsTriggerKey (line 9) | public static bool EqualsTriggerKey(this ScheduleModel model, TriggerK...
method Equals (line 14) | public static bool Equals(this ScheduleModel model, JobKey? jobKey, Tr...
method GetTriggerType (line 38) | public static TriggerType GetTriggerType(this ITrigger trigger)
method ToTimeOfDay (line 52) | public static TimeOfDay ToTimeOfDay(this TimeSpan timeSpan)
method ToQuartzIntervalUnit (line 57) | public static Quartz.IntervalUnit ToQuartzIntervalUnit(this IntervalUn...
method ToBlazingQuartzIntervalUnit (line 62) | public static IntervalUnit ToBlazingQuartzIntervalUnit(this Quartz.Int...
method ToJobKey (line 67) | public static JobKey ToJobKey(this Key key)
method ToTriggerKey (line 72) | public static TriggerKey ToTriggerKey(this Key key)
method NonNullStackTrace (line 85) | public static string? NonNullStackTrace(this Exception exception)
FILE: src/BlazingQuartz.Core/Helpers/CronExpressionHelper.cs
class CronExpressionHelper (line 6) | public static class CronExpressionHelper
method IsValidExpression (line 8) | public static bool IsValidExpression(string cronExpression)
FILE: src/BlazingQuartz.Core/History/BaseExecutionLogRawSqlProvider.cs
class BaseExecutionLogRawSqlProvider (line 5) | public class BaseExecutionLogRawSqlProvider : IExecutionLogRawSqlProvider
FILE: src/BlazingQuartz.Core/History/ExecutionLogStore.cs
class ExecutionLogStore (line 8) | public class ExecutionLogStore : IExecutionLogStore
method ExecutionLogStore (line 14) | public ExecutionLogStore(
method AddExecutionLog (line 25) | public async Task AddExecutionLog(ExecutionLog log, CancellationToken ...
method Exists (line 30) | public bool Exists(ExecutionLog log)
method DeleteLogsByDays (line 35) | public async Task<int> DeleteLogsByDays(
method SaveChangesAsync (line 50) | public async Task SaveChangesAsync(CancellationToken cancelToken = def...
method UpdateExecutionLog (line 55) | public ValueTask UpdateExecutionLog(ExecutionLog log)
method MarkExecutingJobAsIncomplete (line 86) | public async Task MarkExecutingJobAsIncomplete(CancellationToken cance...
FILE: src/BlazingQuartz.Core/History/IExecutionLogRawSqlProvider.cs
type IExecutionLogRawSqlProvider (line 3) | public interface IExecutionLogRawSqlProvider
FILE: src/BlazingQuartz.Core/History/IExecutionLogStore.cs
type IExecutionLogStore (line 6) | public interface IExecutionLogStore
method Exists (line 8) | bool Exists(ExecutionLog log);
method DeleteLogsByDays (line 9) | Task<int> DeleteLogsByDays(int daysToKeep, CancellationToken cancelTok...
method AddExecutionLog (line 10) | Task AddExecutionLog(ExecutionLog log, CancellationToken cancelToken =...
method UpdateExecutionLog (line 11) | ValueTask UpdateExecutionLog(ExecutionLog log);
method SaveChangesAsync (line 12) | Task SaveChangesAsync(CancellationToken cancelToken = default);
method MarkExecutingJobAsIncomplete (line 13) | Task MarkExecutingJobAsIncomplete(CancellationToken cancellToken = def...
FILE: src/BlazingQuartz.Core/History/ISchedulerEventLoggingService.cs
type ISchedulerEventLoggingService (line 5) | internal interface ISchedulerEventLoggingService { }
FILE: src/BlazingQuartz.Core/History/SchedulerEventLoggingService.cs
class SchedulerEventLoggingService (line 16) | internal class SchedulerEventLoggingService : BackgroundService, ISchedu...
method SchedulerEventLoggingService (line 28) | public SchedulerEventLoggingService(
method Dispose (line 48) | public override void Dispose()
method Init (line 64) | void Init()
method _schLisSvc_OnJobScheduled (line 79) | private void _schLisSvc_OnJobScheduled(object? sender, Events.EventArg...
method _schLisSvc_OnTriggerFinalized (line 95) | private void _schLisSvc_OnTriggerFinalized(object? sender, Events.Even...
method _schLisSvc_OnTriggerResumed (line 111) | private void _schLisSvc_OnTriggerResumed(object? sender, Events.EventA...
method _schLisSvc_OnTriggerPaused (line 124) | private void _schLisSvc_OnTriggerPaused(object? sender, Events.EventAr...
method _schLisSvc_OnTriggerMisfired (line 137) | private void _schLisSvc_OnTriggerMisfired(object? sender, Events.Event...
method _schLisSvc_OnSchedulerError (line 153) | private void _schLisSvc_OnSchedulerError(object? sender, Events.Schedu...
method _schLisSvc_OnJobInterrupted (line 165) | private void _schLisSvc_OnJobInterrupted(object? sender, Events.EventA...
method _schLisSvc_OnJobDeleted (line 178) | private void _schLisSvc_OnJobDeleted(object? sender, Events.EventArgs<...
method _schLisSvc_OnJobExecutionVetoed (line 191) | internal void _schLisSvc_OnJobExecutionVetoed(
method _schLisSvc_OnJobWasExecuted (line 201) | internal void _schLisSvc_OnJobWasExecuted(object? sender, Events.JobWa...
method _schLisSvc_OnJobToBeExecuted (line 206) | internal void _schLisSvc_OnJobToBeExecuted(
method AddHousekeepingSchedule (line 214) | private async Task AddHousekeepingSchedule(IScheduler scheduler)
method StartAsync (line 273) | public override async Task StartAsync(CancellationToken cancellationTo...
method ExecuteAsync (line 282) | protected override async Task ExecuteAsync(CancellationToken stoppingT...
method MarkIncompleteExecution (line 292) | internal async Task MarkIncompleteExecution(CancellationToken stopping...
method ProcessTaskAsync (line 316) | internal async Task ProcessTaskAsync(CancellationToken stoppingToken =...
method CreateScheduleJobLogEntry (line 356) | private ExecutionLog CreateScheduleJobLogEntry(
method GetBatch (line 416) | private async Task<List<Func<IExecutionLogStore, CancellationToken, Va...
method QueueUpdateTask (line 432) | void QueueUpdateTask(ExecutionLog log)
method QueueGetJobKeyAndInsertTask (line 475) | void QueueGetJobKeyAndInsertTask(ExecutionLog log)
method QueueInsertTask (line 531) | void QueueInsertTask(ExecutionLog log)
method QueueTask (line 571) | void QueueTask(Func<IExecutionLogStore, CancellationToken, ValueTask> ...
FILE: src/BlazingQuartz.Core/Jobs/HousekeepExecutionLogsJob.cs
class HousekeepExecutionLogsJob (line 9) | public class HousekeepExecutionLogsJob : IJob
method HousekeepExecutionLogsJob (line 14) | public HousekeepExecutionLogsJob(
method Execute (line 23) | public async Task Execute(IJobExecutionContext context)
FILE: src/BlazingQuartz.Core/Models/ExecutionLogFilter.cs
class ExecutionLogFilter (line 6) | public class ExecutionLogFilter : ICloneable
method Clone (line 29) | public object Clone()
FILE: src/BlazingQuartz.Core/Models/JobDetailModel.cs
class JobDetailModel (line 5) | public class JobDetailModel
FILE: src/BlazingQuartz.Core/Models/JobExecutionStatusSummaryModel.cs
class JobExecutionStatusSummaryModel (line 5) | public class JobExecutionStatusSummaryModel
FILE: src/BlazingQuartz.Core/Models/Key.cs
class Key (line 5) | public class Key
method Key (line 10) | public Key(string name)
method Key (line 15) | public Key(string name, string group)
method Key (line 21) | public Key(Key key)
method Equals (line 27) | public bool Equals(string name, string? group)
FILE: src/BlazingQuartz.Core/Models/PagedList.cs
class PagedList (line 5) | public class PagedList<T> : List<T>
method PagedList (line 9) | public PagedList(IEnumerable<T> collection)
method PagedList (line 12) | public PagedList(IEnumerable<T> collection, PageMetadata? metadata)
type PageMetadata (line 19) | public record PageMetadata
FILE: src/BlazingQuartz.Core/Models/ScheduleJobFilter.cs
class ScheduleJobFilter (line 5) | public class ScheduleJobFilter : ICloneable
method Clone (line 9) | public object Clone()
FILE: src/BlazingQuartz.Core/Models/ScheduleModel.cs
class ScheduleModel (line 5) | public class ScheduleModel
method ClearTrigger (line 25) | public void ClearTrigger()
method GetJobTypeShortName (line 37) | public string? GetJobTypeShortName(int suggestedMaxLength = SHORT_JOBT...
FILE: src/BlazingQuartz.Core/Models/TriggerDetailModel.cs
class TriggerDetailModel (line 7) | public class TriggerDetailModel
method GetDailyOnDaysOfWeek (line 101) | public IReadOnlyCollection<DayOfWeek> GetDailyOnDaysOfWeek()
method ToSummaryString (line 116) | public string ToSummaryString()
FILE: src/BlazingQuartz.Core/ServiceCollectionExtensions.cs
class ServiceCollectionExtensions (line 17) | public static class ServiceCollectionExtensions
method AddBlazingQuartz (line 19) | public static IServiceCollection AddBlazingQuartz(this IServiceCollect...
FILE: src/BlazingQuartz.Core/Services/ExecutionLogService.cs
class ExecutionLogService (line 9) | public class ExecutionLogService : IExecutionLogService
method ExecutionLogService (line 13) | public ExecutionLogService(IDbContextFactory<BiliDbContext> contextFac...
method GetLatestExecutionLog (line 18) | public async Task<PagedList<ExecutionLog>> GetLatestExecutionLog(
method GetExecutionLogs (line 75) | public async Task<PagedList<ExecutionLog>> GetExecutionLogs(
method GetJobNames (line 205) | public async Task<IList<string>> GetJobNames()
method GetJobGroups (line 218) | public async Task<IList<string>> GetJobGroups()
method GetTriggerNames (line 231) | public async Task<IList<string>> GetTriggerNames()
method GetTriggerGroups (line 244) | public async Task<IList<string>> GetTriggerGroups()
method GetJobExecutionStatusSummary (line 257) | public async Task<JobExecutionStatusSummaryModel> GetJobExecutionStatu...
FILE: src/BlazingQuartz.Core/Services/IExecutionLogService.cs
type IExecutionLogService (line 6) | public interface IExecutionLogService
method GetLatestExecutionLog (line 8) | Task<PagedList<ExecutionLog>> GetLatestExecutionLog(
method GetExecutionLogs (line 17) | Task<PagedList<ExecutionLog>> GetExecutionLogs(
method GetJobNames (line 22) | Task<IList<string>> GetJobNames();
method GetJobGroups (line 23) | Task<IList<string>> GetJobGroups();
method GetTriggerNames (line 24) | Task<IList<string>> GetTriggerNames();
method GetTriggerGroups (line 25) | Task<IList<string>> GetTriggerGroups();
method GetJobExecutionStatusSummary (line 34) | Task<JobExecutionStatusSummaryModel> GetJobExecutionStatusSummary(
FILE: src/BlazingQuartz.Core/Services/ISchedulerDefinitionService.cs
type ISchedulerDefinitionService (line 5) | public interface ISchedulerDefinitionService
method GetTriggerIntervalUnits (line 7) | IEnumerable<IntervalUnit> GetTriggerIntervalUnits(TriggerType triggerT...
method GetMisfireActions (line 8) | IEnumerable<MisfireAction> GetMisfireActions(TriggerType triggerType);
method GetJobTypes (line 15) | IEnumerable<Type> GetJobTypes(bool reload = false);
FILE: src/BlazingQuartz.Core/Services/ISchedulerListenerService.cs
type ISchedulerListenerService (line 7) | public interface ISchedulerListenerService
FILE: src/BlazingQuartz.Core/Services/ISchedulerService.cs
type ISchedulerService (line 6) | public interface ISchedulerService
method GetScheduleModelAsync (line 8) | Task<ScheduleModel> GetScheduleModelAsync(ITrigger trigger);
method GetAllJobsAsync (line 9) | IAsyncEnumerable<ScheduleModel> GetAllJobsAsync(ScheduleJobFilter? fil...
method CreateSchedule (line 10) | Task CreateSchedule(JobDetailModel jobDetailModel, TriggerDetailModel ...
method GetJobGroups (line 11) | Task<IReadOnlyCollection<string>> GetJobGroups();
method GetTriggerGroups (line 12) | Task<IReadOnlyCollection<string>> GetTriggerGroups();
method GetJobDetail (line 13) | Task<JobDetailModel?> GetJobDetail(string jobName, string groupName);
method GetTriggerDetail (line 14) | Task<TriggerDetailModel?> GetTriggerDetail(string triggerName, string ...
method ContainsTriggerKey (line 15) | Task<bool> ContainsTriggerKey(string triggerName, string triggerGroup);
method ContainsJobKey (line 16) | Task<bool> ContainsJobKey(string jobName, string jobGroup);
method GetCalendarNames (line 17) | Task<IReadOnlyCollection<string>> GetCalendarNames(CancellationToken c...
method PauseTrigger (line 18) | Task PauseTrigger(string triggerName, string? triggerGroup);
method ResumeTrigger (line 19) | Task ResumeTrigger(string triggerName, string? triggerGroup);
method TriggerJob (line 20) | Task TriggerJob(string jobName, string jobGroup);
method DeleteSchedule (line 21) | Task<bool> DeleteSchedule(ScheduleModel model);
method UpdateSchedule (line 22) | Task UpdateSchedule(
method GetMetadataAsync (line 28) | Task<SchedulerMetaData> GetMetadataAsync();
method GetScheduledJobSummary (line 29) | Task<IList<KeyValuePair<string, int>>> GetScheduledJobSummary();
method PauseAllSchedules (line 30) | Task PauseAllSchedules();
method ResumeAllSchedules (line 31) | Task ResumeAllSchedules();
method ShutdownScheduler (line 32) | Task ShutdownScheduler();
method StartScheduler (line 33) | Task StartScheduler();
method StandbyScheduler (line 34) | Task StandbyScheduler();
FILE: src/BlazingQuartz.Core/Services/SchedulerDefinitionService.cs
class SchedulerDefinitionService (line 10) | internal class SchedulerDefinitionService : ISchedulerDefinitionService
method SchedulerDefinitionService (line 21) | public SchedulerDefinitionService(
method Init (line 33) | [MemberNotNull(nameof(_calendarIntervalUnits))]
method GetTriggerIntervalUnits (line 55) | public IEnumerable<IntervalUnit> GetTriggerIntervalUnits(TriggerType t...
method GetMisfireActions (line 69) | public IEnumerable<MisfireAction> GetMisfireActions(TriggerType trigge...
method GetJobTypes (line 107) | public IEnumerable<Type> GetJobTypes(bool reload = false)
FILE: src/BlazingQuartz.Core/Services/SchedulerListenerService.cs
class SchedulerListenerService (line 7) | public class SchedulerListenerService
method JobAdded (line 43) | public Task JobAdded(IJobDetail jobDetail, CancellationToken cancellat...
method JobDeleted (line 49) | public Task JobDeleted(JobKey jobKey, CancellationToken cancellationTo...
method JobExecutionVetoed (line 55) | public Task JobExecutionVetoed(
method JobInterrupted (line 67) | public Task JobInterrupted(JobKey jobKey, CancellationToken cancellati...
method JobPaused (line 73) | public Task JobPaused(JobKey jobKey, CancellationToken cancellationTok...
method JobResumed (line 79) | public Task JobResumed(JobKey jobKey, CancellationToken cancellationTo...
method JobScheduled (line 85) | public Task JobScheduled(ITrigger trigger, CancellationToken cancellat...
method JobsPaused (line 91) | public Task JobsPaused(string jobGroup, CancellationToken cancellation...
method JobsResumed (line 97) | public Task JobsResumed(string jobGroup, CancellationToken cancellatio...
method JobToBeExecuted (line 103) | public Task JobToBeExecuted(
method JobUnscheduled (line 115) | public Task JobUnscheduled(
method JobWasExecuted (line 127) | public Task JobWasExecuted(
method SchedulerError (line 143) | public Task SchedulerError(
method SchedulerInStandbyMode (line 161) | public Task SchedulerInStandbyMode(CancellationToken cancellationToken...
method SchedulerShutdown (line 167) | public Task SchedulerShutdown(CancellationToken cancellationToken = de...
method SchedulerShuttingdown (line 173) | public Task SchedulerShuttingdown(CancellationToken cancellationToken ...
method SchedulerStarted (line 179) | public Task SchedulerStarted(CancellationToken cancellationToken = def...
method SchedulerStarting (line 185) | public Task SchedulerStarting(CancellationToken cancellationToken = de...
method SchedulingDataCleared (line 191) | public Task SchedulingDataCleared(CancellationToken cancellationToken ...
method TriggerComplete (line 197) | public Task TriggerComplete(
method TriggerFinalized (line 211) | public Task TriggerFinalized(
method TriggerFired (line 220) | public Task TriggerFired(
method TriggerMisfired (line 230) | public Task TriggerMisfired(ITrigger trigger, CancellationToken cancel...
method TriggerPaused (line 236) | public Task TriggerPaused(
method TriggerResumed (line 245) | public Task TriggerResumed(
method TriggersPaused (line 257) | public Task TriggersPaused(
method TriggersResumed (line 269) | public Task TriggersResumed(
method VetoJobExecution (line 281) | public Task<bool> VetoJobExecution(
FILE: src/BlazingQuartz.Core/Services/SchedulerService.cs
class SchedulerService (line 10) | public class SchedulerService(ILogger<SchedulerService> logger, ISchedul...
method GetAllJobsAsync (line 13) | public async IAsyncEnumerable<ScheduleModel> GetAllJobsAsync(ScheduleJ...
method GetScheduleModelAsync (line 35) | public async Task<ScheduleModel> GetScheduleModelAsync(ITrigger trigger)
method GetJobGroups (line 44) | public async Task<IReadOnlyCollection<string>> GetJobGroups()
method GetTriggerGroups (line 52) | public async Task<IReadOnlyCollection<string>> GetTriggerGroups()
method GetScheduledJobSummary (line 60) | public async Task<IList<KeyValuePair<string, int>>> GetScheduledJobSum...
method GetMetadataAsync (line 87) | public async Task<SchedulerMetaData> GetMetadataAsync()
method CreateScheduleModel (line 93) | private async Task<ScheduleModel> CreateScheduleModel(
method CreateSchedule (line 132) | public async Task CreateSchedule(
method UpdateSchedule (line 163) | public async Task UpdateSchedule(
method GetJobDetail (line 205) | public async Task<JobDetailModel?> GetJobDetail(string jobName, string...
method GetTriggerDetail (line 224) | public async Task<TriggerDetailModel?> GetTriggerDetail(string trigger...
method ContainsTriggerKey (line 235) | public async Task<bool> ContainsTriggerKey(string triggerName, string ...
method ContainsJobKey (line 241) | public async Task<bool> ContainsJobKey(string jobName, string jobGroup)
method GetCalendarNames (line 247) | public async Task<IReadOnlyCollection<string>> GetCalendarNames(
method PauseTrigger (line 256) | public async Task PauseTrigger(string triggerName, string? triggerGroup)
method ResumeTrigger (line 266) | public async Task ResumeTrigger(string triggerName, string? triggerGroup)
method DeleteSchedule (line 276) | public async Task<bool> DeleteSchedule(ScheduleModel model)
method TriggerJob (line 353) | public async Task TriggerJob(string jobName, string jobGroup)
method GetScheduleModelsAsync (line 361) | private async IAsyncEnumerable<ScheduleModel> GetScheduleModelsAsync(J...
method CreateTriggerDetailModel (line 430) | private TriggerDetailModel CreateTriggerDetailModel(ITrigger trigger)
method CreateJobDetail (line 535) | private IJobDetail CreateJobDetail(JobDetailModel jobDetailModel)
method BuildTrigger (line 548) | private ITrigger BuildTrigger(TriggerDetailModel triggerDetailModel, J...
method PopulateSimpleTrigger (line 736) | private TriggerDetailModel PopulateSimpleTrigger(
method PauseAllSchedules (line 801) | public async Task PauseAllSchedules()
method ResumeAllSchedules (line 807) | public async Task ResumeAllSchedules()
method ShutdownScheduler (line 813) | public async Task ShutdownScheduler()
method StartScheduler (line 819) | public async Task StartScheduler()
method StandbyScheduler (line 825) | public async Task StandbyScheduler()
FILE: src/BlazingQuartz.Jobs.Abstractions/DataMapValue.cs
class DataMapValue (line 7) | public class DataMapValue
method DataMapValue (line 13) | public DataMapValue()
method DataMapValue (line 16) | public DataMapValue(DataMapValueType type, int version)
method DataMapValue (line 19) | public DataMapValue(DataMapValueType type, string? value = null, int v...
method ToString (line 26) | public override string ToString()
method Create (line 36) | public static DataMapValue? Create(object? dataMapValue)
method Create (line 50) | public static DataMapValue? Create(string? dataMapValue)
method Create (line 58) | public static DataMapValue Create(
FILE: src/BlazingQuartz.Jobs.Abstractions/DataMapValueResolver.cs
class DataMapValueResolver (line 7) | public class DataMapValueResolver : IDataMapValueResolver
method DataMapValueResolver (line 11) | public DataMapValueResolver(IServiceProvider? svcProvider)
method Resolve (line 16) | public string? Resolve(DataMapValue? dmv)
FILE: src/BlazingQuartz.Jobs.Abstractions/DataMapValueType.cs
type DataMapValueType (line 5) | public enum DataMapValueType
FILE: src/BlazingQuartz.Jobs.Abstractions/IDataMapValueResolver.cs
type IDataMapValueResolver (line 3) | public interface IDataMapValueResolver
method Resolve (line 5) | string? Resolve(DataMapValue? dmv);
FILE: src/BlazingQuartz.Jobs.Abstractions/IJobUI.cs
type IJobUI (line 5) | public interface IJobUI
method ClearChanges (line 17) | Task ClearChanges();
method ApplyChanges (line 23) | Task<bool> ApplyChanges();
FILE: src/BlazingQuartz.Jobs.Abstractions/JobDataMapKeys.cs
class JobDataMapKeys (line 5) | public static class JobDataMapKeys
FILE: src/BlazingQuartz.Jobs.Abstractions/JobExecutionContextExtensions.cs
class JobExecutionContextExtensions (line 9) | public static class JobExecutionContextExtensions
method SetReturnCode (line 11) | public static IJobExecutionContext SetReturnCode(
method SetReturnCode (line 20) | public static IJobExecutionContext SetReturnCode(
method SetExecutionDetails (line 29) | public static IJobExecutionContext SetExecutionDetails(
method SetIsSuccess (line 38) | public static IJobExecutionContext SetIsSuccess(
method GetReturnCode (line 47) | public static string? GetReturnCode(this IJobExecutionContext context)
method GetExecutionDetails (line 55) | public static string? GetExecutionDetails(this IJobExecutionContext co...
method GetIsSuccess (line 64) | public static bool? GetIsSuccess(this IJobExecutionContext context)
method GetDataMapValue (line 72) | public static DataMapValue? GetDataMapValue(this IJobExecutionContext ...
method GetDataMapValue (line 78) | public static DataMapValue? GetDataMapValue(this JobDataMap dataMap, s...
method GetReturnCodeAndResult (line 88) | public static string? GetReturnCodeAndResult(this IJobExecutionContext...
FILE: src/BlazingQuartz.Jobs.Abstractions/Processors/InterpolatedStringV1Processor.cs
class InterpolatedStringV1Processor (line 8) | public class InterpolatedStringV1Processor
method InterpolatedStringV1Processor (line 14) | public InterpolatedStringV1Processor(ILogger<InterpolatedStringV1Proce...
method Process (line 19) | public string? Process(DataMapValue interpolatedString)
FILE: src/BlazingQuartz.Jobs.Abstractions/Processors/SystemVariableV1Provider.cs
class SystemVariableV1Provider (line 8) | internal class SystemVariableV1Provider
method SystemVariableV1Provider (line 14) | static SystemVariableV1Provider()
method Resolve (line 24) | public string Resolve(string varBlock)
method AddResolver (line 43) | public static bool AddResolver(string key, IResolver resolver)
FILE: src/BlazingQuartz.Jobs.Abstractions/Resolvers/IResolver.cs
type IResolver (line 5) | public interface IResolver
method Resolve (line 7) | string Resolve(string varBlock);
FILE: src/BlazingQuartz.Jobs.Abstractions/Resolvers/V1/DateTimeVariableResolver.cs
class DateTimeVariableResolver (line 6) | internal class DateTimeVariableResolver : IResolver
method Resolve (line 11) | public string Resolve(string varBlock)
method GetVariableRegex (line 78) | internal virtual string GetVariableRegex()
method GetVariableName (line 83) | internal virtual string GetVariableName()
method GetDateTimeOffset (line 88) | internal virtual DateTimeOffset GetDateTimeOffset()
FILE: src/BlazingQuartz.Jobs.Abstractions/Resolvers/V1/GuidVariableResolver.cs
class GuidVariableResolver (line 5) | internal class GuidVariableResolver : IResolver
method GuidVariableResolver (line 9) | public GuidVariableResolver() { }
method Resolve (line 11) | public string Resolve(string varBlock)
FILE: src/BlazingQuartz.Jobs.Abstractions/Resolvers/V1/LocalDateTimeVariableResolver.cs
class LocalDateTimeVariableResolver (line 5) | internal class LocalDateTimeVariableResolver : DateTimeVariableResolver
method GetVariableName (line 10) | internal override string GetVariableName()
method GetVariableRegex (line 15) | internal override string GetVariableRegex()
method GetDateTimeOffset (line 20) | internal override DateTimeOffset GetDateTimeOffset()
FILE: src/BlazingQuartz.Jobs.Abstractions/ServiceCollectionExtensions.cs
class ServiceCollectionExtensions (line 7) | public static class ServiceCollectionExtensions
method AddBlazingQuartzJobs (line 9) | public static IServiceCollection AddBlazingQuartzJobs(this IServiceCol...
FILE: src/BlazingQuartz.Jobs.Abstractions/VariableNameContants.cs
class VariableNameContants (line 5) | public static class VariableNameContants
FILE: src/BlazingQuartz.Jobs/Constants.cs
class Constants (line 5) | public abstract class Constants
FILE: src/BlazingQuartz.Jobs/HttpAction.cs
type HttpAction (line 5) | public enum HttpAction
FILE: src/BlazingQuartz.Jobs/HttpJob.cs
class HttpJob (line 11) | public class HttpJob : IJob
method HttpJob (line 28) | public HttpJob(
method Execute (line 39) | public async Task Execute(IJobExecutionContext context)
FILE: src/BlazingQuartz.Jobs/ServiceCollectionExtensions.cs
class ServiceCollectionExtensions (line 7) | public static class ServiceCollectionExtensions
method AddBlazingQuartzJobs (line 9) | public static IServiceCollection AddBlazingQuartzJobs(this IServiceCol...
FILE: src/Ray.BiliBiliTool.Agent/Attributes/AppendHeaderAttribute.cs
class AppendHeaderAttribute (line 8) | [DebuggerDisplay("{name} = {value}")]
method AppendHeaderAttribute (line 23) | public AppendHeaderAttribute(
method OnRequestAsync (line 32) | public override Task OnRequestAsync(ApiRequestContext context)
method OnRequestAsync (line 38) | public Task OnRequestAsync(ApiParameterContext context)
method AddByAppendType (line 55) | private void AddByAppendType(HttpRequestHeaders headers, string key, s...
FILE: src/Ray.BiliBiliTool.Agent/Attributes/AppendHeaderType.cs
type AppendHeaderType (line 3) | public enum AppendHeaderType
FILE: src/Ray.BiliBiliTool.Agent/Attributes/LogFilterAttribute.cs
class LogFilterAttribute (line 9) | public class LogFilterAttribute(bool logError = true) : LoggingFilterAtt...
method WriteLogAsync (line 11) | protected override Task WriteLogAsync(ApiResponseContext context, LogM...
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Attributes/WbiParameterAttribute.cs
class WbiParameterAttribute (line 9) | [AttributeUsage(AttributeTargets.Parameter)]
method OnRequestAsync (line 12) | public async Task OnRequestAsync(ApiParameterContext context)
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/AddCoinRequest.cs
class AddCoinRequest (line 3) | public class AddCoinRequest
method AddCoinRequest (line 5) | public AddCoinRequest(long aid, string csrf)
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/Article/AddCoinForArticleRequest.cs
class AddCoinForArticleRequest (line 3) | public class AddCoinForArticleRequest
method AddCoinForArticleRequest (line 5) | public AddCoinForArticleRequest(long cvid, long mid, string csrf)
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/Article/SearchArticleInfoResponse.cs
class SearchArticleInfoResponse (line 3) | public class SearchArticleInfoResponse
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/Article/SearchArticlesByUpIdFullFto.cs
class SearchArticlesByUpIdDto (line 5) | public class SearchArticlesByUpIdDto : IWrid
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/Article/SearchUpArticlesResponse.cs
class SearchUpArticlesResponse (line 3) | public class SearchUpArticlesResponse
class ArticleInfo (line 9) | public class ArticleInfo
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/BaseAppRequest.cs
class BaseAppRequest (line 3) | public class BaseAppRequest
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/BiliApiResponse.cs
class BiliApiResponse (line 3) | public class BiliApiResponse
class BiliApiResponse (line 10) | public class BiliApiResponse<TData> : BiliApiResponse
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/BiliPageResult.cs
class BiliPageResult (line 3) | public class BiliPageResult
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/ChargeCommentRequest.cs
class ChargeCommentRequest (line 3) | public class ChargeCommentRequest
method ChargeCommentRequest (line 5) | public ChargeCommentRequest(string order_id, string message, string csrf)
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/ChargeRequest.cs
class ChargeRequest (line 3) | public class ChargeRequest
method ChargeRequest (line 5) | public ChargeRequest(decimal bp_num, long upId, string csrf)
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/ChargeResponse.cs
class ChargeResponse (line 3) | public class ChargeResponse
class ChargeV2Response (line 10) | public class ChargeV2Response
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/CoinBalance.cs
class CoinBalance (line 6) | public class CoinBalance
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/DailyTaskInfo.cs
class DailyTaskInfo (line 3) | public class DailyTaskInfo
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/DonatedCoinsForVideo.cs
class DonatedCoinsForVideo (line 3) | public class DonatedCoinsForVideo
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/GetAlreadyDonatedCoinsRequest.cs
class GetAlreadyDonatedCoinsRequest (line 3) | public class GetAlreadyDonatedCoinsRequest
method GetAlreadyDonatedCoinsRequest (line 5) | public GetAlreadyDonatedCoinsRequest(long aid)
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/GetSpaceInfoFullDto.cs
class GetSpaceInfoDto (line 5) | public class GetSpaceInfoDto : IWrid
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/GetSpaceInfoResponse.cs
class GetSpaceInfoResponse (line 3) | public class GetSpaceInfoResponse
class SpaceLiveRoomInfoDto (line 12) | public class SpaceLiveRoomInfoDto
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/GetSpecialFollowingsRequest.cs
class GetSpecialFollowingsRequest (line 3) | public class GetSpecialFollowingsRequest
method GetSpecialFollowingsRequest (line 5) | public GetSpecialFollowingsRequest(long userId)
method GetSpecialFollowingsRequest (line 10) | public GetSpecialFollowingsRequest(long userId, long tagId)
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/GetVideosResponse.cs
class GetVideosResponse (line 3) | public class GetVideosResponse
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/Live/AreaDto.cs
class GetArteaListResponse (line 3) | public class GetArteaListResponse
class AreaDto (line 8) | public class AreaDto
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/Live/CheckTianXuanDto.cs
class CheckTianXuanDto (line 3) | public class CheckTianXuanDto
method AwardNameIsSatisfied (line 62) | public bool AwardNameIsSatisfied(List<string> includeKeys, List<string...
type TianXuanStatus (line 96) | public enum TianXuanStatus
type RequireType (line 112) | public enum RequireType
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/Live/EnterRoomRequest.cs
class EnterRoomRequest (line 5) | public class EnterRoomRequest
method EnterRoomRequest (line 7) | public EnterRoomRequest(
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/Live/ExchangeSilverStatusResponse.cs
class ExchangeSilverStatusResponse (line 3) | public class ExchangeSilverStatusResponse
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/Live/GetListRequest.cs
class GetListRequest (line 5) | public class GetListRequest : IWrid
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/Live/GetLiveRoomInfoResponse.cs
class GetLiveRoomInfoResponse (line 3) | public class GetLiveRoomInfoResponse
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/Live/HeartBeatRequest.cs
class HeartBeatRequest (line 6) | public class HeartBeatRequest
method HeartBeatRequest (line 8) | public HeartBeatRequest(
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/Live/HeartBeatResponse.cs
class HeartBeatResponse (line 3) | public class HeartBeatResponse
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/Live/JoinTianXuanRequest.cs
class JoinTianXuanRequest (line 5) | public class JoinTianXuanRequest
method GetRandomVisitId (line 41) | public static string GetRandomVisitId()
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/Live/JoinTianXuanResponse.cs
class JoinTianXuanResponse (line 3) | public class JoinTianXuanResponse
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/Live/LikeLiveRoomRequest.cs
class LikeLiveRoomRequest (line 3) | public class LikeLiveRoomRequest
method LikeLiveRoomRequest (line 5) | public LikeLiveRoomRequest(long roomid, string csrf, int clickTime, lo...
method RawTextBuild (line 26) | public string RawTextBuild()
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/Live/ListItemDto.cs
class GetListResponse (line 3) | public class GetListResponse
class LiveSortTag (line 12) | public class LiveSortTag
class ListItemDto (line 21) | public class ListItemDto
class PendantInfo (line 58) | public class PendantInfo
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/Live/LiveSignResponse.cs
class LiveSignResponse (line 3) | public class LiveSignResponse
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/Live/LiveWalletStatusResponse.cs
class LiveWalletStatusResponse (line 3) | public class LiveWalletStatusResponse
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/Live/MedalWallDto.cs
class MedalWallResponse (line 3) | public class MedalWallResponse
class MedalWallDto (line 8) | public class MedalWallDto
class MedalInfoDto (line 19) | public class MedalInfoDto
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/Live/SendLiveDanmukuRequest.cs
class SendLiveDanmukuRequest (line 3) | public class SendLiveDanmukuRequest
method SendLiveDanmukuRequest (line 5) | public SendLiveDanmukuRequest(string csrf, long room_id, string message)
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/Live/Silver2CoinRequest.cs
class Silver2CoinRequest (line 5) | public class Silver2CoinRequest
method Silver2CoinRequest (line 7) | public Silver2CoinRequest(string csrf)
method GetRandomVisitId (line 26) | public static string GetRandomVisitId()
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/Live/Silver2CoinResponse.cs
class Silver2CoinResponse (line 3) | public class Silver2CoinResponse
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/Live/WearMedalWallRequest.cs
class WearMedalWallRequest (line 5) | public class WearMedalWallRequest
method WearMedalWallRequest (line 7) | public WearMedalWallRequest(string csrf, int medal_id)
method GetRandomVisitId (line 29) | public static string GetRandomVisitId()
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/Live/WebHeartBeatRequest.cs
class WebHeartBeatRequest (line 5) | public class WebHeartBeatRequest
method WebHeartBeatRequest (line 7) | public WebHeartBeatRequest(int room_id, int next_interval)
method ToString (line 17) | public override string ToString()
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/Live/WebHeartBeatResponse.cs
class WebHeartBeatResponse (line 3) | public class WebHeartBeatResponse
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/Mall/GetCombineRequest.cs
class GetCombineRequest (line 3) | public class GetCombineRequest : BaseAppRequest
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/Mall/PointInfo.cs
type PointInfo (line 3) | public record PointInfo(int point, int expire_point, int expire_time, in...
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/Mall/Sign2Request.cs
class Sign2Request (line 3) | public class Sign2Request
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/Mall/Sign2RequestPath.cs
class Sign2RequestPath (line 3) | public class Sign2RequestPath(string csrf)
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/Mall/Sign2Response.cs
class Sign2Response (line 5) | public class Sign2Response
method ToString (line 15) | public override string ToString()
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/Mall/TaskInfo.cs
class TaskInfo (line 3) | public class TaskInfo
class SingTaskItem (line 17) | public class SingTaskItem
class ModuleItem (line 30) | public class ModuleItem
class CommonTaskItem (line 37) | public class CommonTaskItem
class Histtory (line 58) | public class Histtory
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/Mall/VipBigPointCombine.cs
class VipBigPointCombine (line 5) | public class VipBigPointCombine
method LogFullInfo (line 10) | public void LogFullInfo(ILogger logger)
method LogPointInfo (line 28) | public void LogPointInfo(ILogger logger)
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/MangaVipRewardResponse.cs
class MangaVipRewardResponse (line 3) | public class MangaVipRewardResponse
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/Passport/GetSsoListResponse.cs
class GetSsoListResponse (line 3) | public class GetSsoListResponse
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/Passport/QrCodeDto.cs
class QrCodeDto (line 3) | public class QrCodeDto
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/Passport/TokenDto.cs
class TokenDto (line 3) | public class TokenDto
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/RankingInfo.cs
class Ranking (line 3) | public class Ranking
class RankingInfo (line 11) | public class RankingInfo
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/Relation/CopyUserToGroupRequest.cs
class CopyUserToGroupRequest (line 3) | public class CopyUserToGroupRequest
method CopyUserToGroupRequest (line 5) | public CopyUserToGroupRequest(List<long> fids, string tagid, string csrf)
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/Relation/CreateTagRequest.cs
class CreateTagRequest (line 3) | public class CreateTagRequest
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/Relation/CreateTagResponse.cs
class CreateTagResponse (line 3) | public class CreateTagResponse
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/Relation/GetFollowingsRequest.cs
class GetFollowingsRequest (line 5) | public class GetFollowingsRequest
method GetFollowingsRequest (line 7) | public GetFollowingsRequest(
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/Relation/GetFollowingsResponse.cs
class GetFollowingsResponse (line 3) | public class GetFollowingsResponse
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/Relation/ModifyRelationRequest.cs
class ModifyRelationRequest (line 3) | public class ModifyRelationRequest
method ModifyRelationRequest (line 5) | public ModifyRelationRequest(long fid, string csrf)
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/Relation/TagDto.cs
class TagDto (line 3) | public class TagDto
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/SearchUpVideosResponse.cs
class SearchUpVideosResponse (line 3) | public class SearchUpVideosResponse
class UpContent (line 10) | public class UpContent
class UpVideoInfo (line 15) | public class UpVideoInfo
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/ShareVideoRequest.cs
class ShareVideoRequest (line 3) | public class ShareVideoRequest
method ShareVideoRequest (line 5) | public ShareVideoRequest(long aid, string csrf)
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/UpInfo.cs
class UpInfo (line 3) | public class UpInfo
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/UploadVideoHeartbeatRequest.cs
class UploadVideoHeartbeatRequest (line 3) | public class UploadVideoHeartbeatRequest
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/UserInfo.cs
class UserInfo (line 8) | public class UserInfo
method GetFuzzyUname (line 43) | public string GetFuzzyUname()
method GetVipType (line 72) | public VipType GetVipType()
class LevelInfo (line 94) | public class LevelInfo
method GetNext_expLong (line 132) | public long GetNext_expLong()
class Wallet (line 144) | public class Wallet
class WbiImg (line 155) | public class WbiImg
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/Video/GetBangumiBySsidResponse.cs
class GetBangumiBySsidResponse (line 3) | public class GetBangumiBySsidResponse
class Result (line 12) | public class Result
class Episode (line 17) | public class Episode
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/Video/SearchVideosByUpIdFullDto.cs
class SearchVideosByUpIdDto (line 5) | public class SearchVideosByUpIdDto : IWrid
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/VideoDetail.cs
class VideoDetail (line 3) | public class VideoDetail
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/VideoInfo.cs
class VideoInfo (line 3) | public class VideoInfo
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/ViewMall/ViewvipMallRequest.cs
class ViewVipMallRequest (line 3) | public class ViewVipMallRequest
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/VipPrivilegeType.cs
type VipPrivilegeType (line 3) | public enum VipPrivilegeType
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/VipStatus.cs
type VipStatus (line 5) | public enum VipStatus
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/VipTask/CompleteOgvWatchRequest.cs
class CompleteOgvWatchRequest (line 3) | public class CompleteOgvWatchRequest : BaseAppRequest
method CompleteOgvWatchRequest (line 5) | public CompleteOgvWatchRequest(long taskId, string token)
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/VipTask/ReceiveOrCompleteTaskRequest.cs
class ReceiveOrCompleteTaskRequest (line 3) | public class ReceiveOrCompleteTaskRequest
method ReceiveOrCompleteTaskRequest (line 5) | public ReceiveOrCompleteTaskRequest(string taskCode)
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/VipTask/SignRequest.cs
class SignRequest (line 3) | public class SignRequest
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/VipTask/StartOgvWatchRequest.cs
class StartOgvWatchRequest (line 3) | public class StartOgvWatchRequest : BaseAppRequest
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/VipTask/StartOgvWatchResponse.cs
class StartOgvWatchResponse (line 3) | public class StartOgvWatchResponse
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/VipTask/ThreeDaysSign/BigPointDto.cs
type BigPointDto (line 3) | public record BigPointDto(int point, int expire_point, int expire_time, ...
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/VipTask/ThreeDaysSign/ThreeDaySignDto.cs
type ThreeDaySignDto (line 19) | public record ThreeDaySignDto(
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/VipTask/ThreeDaysSign/ThreeDaySignRequest.cs
class ThreeDaySignRequest (line 3) | public class ThreeDaySignRequest : BaseAppRequest
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/VipTask/ThreeDaysSign/ThreeDaySignResponse.cs
class ThreeDaySignResponse (line 6) | public class ThreeDaySignResponse
method ToString (line 12) | public override string ToString()
method LogPointInfo (line 32) | public void LogPointInfo(ILogger logger)
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/VipTask/ViewRequest.cs
class ViewRequest (line 3) | public class ViewRequest : BaseAppRequest
method ViewRequest (line 5) | public ViewRequest(string position)
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/VipTask/VipExperienceRequest.cs
class VipExperienceRequest (line 3) | public class VipExperienceRequest
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/VipTask/VouchersInfoResponse.cs
class VouchersInfoResponse (line 3) | public class VouchersInfoResponse
class List (line 16) | public class List
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/VipType.cs
type VipType (line 5) | public enum VipType
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Interfaces/IAccountApi.cs
type IAccountApi (line 6) | [Header("Host", "account.bilibili.com")]
method GetCoinBalanceAsync (line 13) | [Header("Referer", "https://account.bilibili.com/account/coin")]
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Interfaces/IArticleApi.cs
type IArticleApi (line 7) | [Header("Host", "api.bilibili.com")]
method SearchUpArticlesByUpIdAsync (line 10) | [Header("Referer", "https://www.bilibili.com/")]
method SearchArticleInfoAsync (line 22) | [HttpGet("/x/article/viewinfo?id={cvid}")]
method AddCoinForArticleAsync (line 31) | [Header("Content-Type", "application/x-www-form-urlencoded")]
method LikeAsync (line 48) | [Header("Content-Type", "application/x-www-form-urlencoded")]
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Interfaces/IChargeApi.cs
type IChargeApi (line 9) | [Header("Host", "api.bilibili.com")]
method Charge (line 20) | [HttpPost(
method ChargeV2Async (line 40) | [Header("Content-Type", "application/x-www-form-urlencoded")]
method ChargeCommentAsync (line 57) | [Header("Content-Type", "application/x-www-form-urlencoded")]
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Interfaces/IDailyTaskApi.cs
type IDailyTaskApi (line 9) | [Header("Host", "api.bilibili.com")]
method GetDailyTaskRewardInfoAsync (line 16) | [Header("Referer", "https://account.bilibili.com/account/home")]
method GetDonateCoinExpAsync (line 25) | [Header("Referer", "https://www.bilibili.com/")]
method ReceiveVipPrivilegeAsync (line 36) | [HttpPost("/x/vip/privilege/receive?type={type}&csrf={csrf}")]
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Interfaces/IHomeApi.cs
type IHomeApi (line 8) | public interface IHomeApi : IBiliBiliApi
method GetHomePageAsync (line 10) | [HttpGet("")]
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Interfaces/ILiveApi.cs
type ILiveApi (line 10) | [Header("Host", "api.live.bilibili.com")]
method Sign (line 17) | [Header("Referer", "https://link.bilibili.com/")]
method ExchangeSilver2Coin (line 26) | [Header("Referer", "https://link.bilibili.com/")]
method GetExchangeSilverStatus (line 37) | [Header("Referer", "https://link.bilibili.com/")]
method Silver2Coin (line 51) | [Header("Content-Type", "application/x-www-form-urlencoded")]
method GetLiveWalletStatus (line 64) | [Header("Origin", "https://link.bilibili.com")]
method GetAreaList (line 70) | [HttpGet("/xlive/web-interface/v1/index/getWebAreaList?source_id=2")]
method GetList (line 79) | [Header("Referer", "https://live.bilibili.com/")]
method CheckTianXuan (line 92) | [Header("Referer", "https://live.bilibili.com/")]
method Join (line 105) | [HttpPost("/xlive/lottery-interface/v1/Anchor/Join")]
method GetMedalWall (line 116) | [Header("Referer", "https://live.bilibili.com/")]
method WearMedalWall (line 129) | [Header("Referer", "https://live.bilibili.com/")]
method SendLiveDanmuku (line 142) | [HttpPost("/msg/send")]
method GetLiveRoomInfo (line 153) | [HttpGet("/room/v1/Room/get_info?room_id={roomId}&from=room")]
method GetLiveHome (line 159) | [HttpGet("/news/v1/notice/recom?product=live")]
method LikeLiveRoom (line 165) | [HttpPost("/xlive/app-ucenter/v1/like_info_v3/like/likeReportV3")]
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Interfaces/ILiveTraceApi.cs
type ILiveTraceApi (line 7) | [Header("Host", "live-trace.bilibili.com")]
method WebHeartBeat (line 10) | [HttpGet("/xlive/rdata-interface/v1/heartbeat/webHeartBeat?hb={request...
method EnterRoom (line 16) | [HttpPost("/xlive/data-interface/v1/x25Kn/E")]
method HeartBeat (line 22) | [HttpPost("/xlive/data-interface/v1/x25Kn/X")]
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Interfaces/IMallApi.cs
type IMallApi (line 11) | [LogFilter]
method Sign2Async (line 22) | [Header("Referer", "https://big.bilibili.com/mobile/index")]
method GetCombineAsync (line 35) | [Header("Referer", "https://big.bilibili.com/mobile/bigPoint/task")]
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Interfaces/IMangaApi.cs
type IMangaApi (line 10) | [Header("Origin", "https://manga.bilibili.com")]
method ClockIn (line 19) | [LogFilter(false)]
method ReadManga (line 28) | [HttpPost(
method ReceiveMangaVipReward (line 43) | [HttpPost("/twirp/user.v1.User/GetVipReward?reason_id={reason_id}")]
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Interfaces/IPassportApi.cs
type IPassportApi (line 7) | [Header("Host", "passport.bilibili.com")]
method GenerateQrCode (line 10) | [HttpGet("/x/passport-login/web/qrcode/generate")]
method CheckQrCodeHasScaned (line 13) | [HttpGet("/x/passport-login/web/qrcode/poll?qrcode_key={qrcode_key}&so...
method GetSsoListAsync (line 17) | [HttpGet("/x/passport-login/web/sso/list?biliCSRF={csrf}")]
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Interfaces/IRelationApi.cs
type IRelationApi (line 12) | [AppendHeader("Host", "api.bilibili.com", AppendHeaderType.AddIfNotExist)]
method GetFollowings (line 20) | [HttpGet("/x/relation/followings")]
method GetFollowingsByTag (line 30) | [Header("Cache-Control", "no-cache")]
method GetTags (line 43) | [AppendHeader("Sec-Fetch-Mode", "no-cors")]
method CreateTag (line 56) | [AppendHeader("Origin", "https://space.bilibili.com")]
method CopyUpsToGroup (line 69) | [AppendHeader("Origin", "https://space.bilibili.com")]
method ModifyRelation (line 81) | [AppendHeader("Origin", "https://space.bilibili.com")]
type FollowingsOrderType (line 90) | public enum FollowingsOrderType
class RelationApiConstant (line 105) | public class RelationApiConstant
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Interfaces/IUpInfoApi.cs
type IUpInfoApi (line 9) | [Header("Referer", "https://www.bilibili.com/")]
method GetSpaceInfo (line 19) | [HttpGet("/x/space/wbi/acc/info")]
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Interfaces/IUserInfoApi.cs
type IUserInfoApi (line 9) | [Header("Referer", "https://www.bilibili.com/")]
method LoginByCookie (line 18) | [HttpGet("/x/web-interface/nav")]
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Interfaces/IVideoApi.cs
type IVideoApi (line 10) | [Header("Host", "api.bilibili.com")]
method ShareVideo (line 19) | [Header("Origin", "https://www.bilibili.com")]
method UploadVideoHeartbeat (line 32) | [Header("Content-Type", "application/x-www-form-urlencoded; charset=UT...
method AddCoinForVideo (line 50) | [Header("Content-Type", "application/x-www-form-urlencoded")]
method GetDonatedCoinsForVideo (line 67) | [Header("Referer", "https://www.bilibili.com/")]
method SearchVideosByUpId (line 83) | [Header("Referer", "https://www.bilibili.com/")]
method GetBangumiBySsid (line 97) | [HttpGet("/pgc/view/web/season?season_id={ssid}")]
type IVideoWithoutCookieApi (line 104) | public interface IVideoWithoutCookieApi : IVideoApi
method GetVideoDetail (line 111) | [HttpGet("/x/web-interface/view?aid={aid}")]
method GetRegionRankingVideos (line 120) | [Header("Referer", "https://www.bilibili.com/")]
method GetRegionRankingVideosV2 (line 130) | [Header("Referer", "https://www.bilibili.com/")]
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Interfaces/IVipBigPointApi.cs
type IVipBigPointApi (line 13) | [Header("Host", "api.bilibili.com")]
method GetThreeDaySignAsync (line 24) | [HttpGet("/x/vip/vip_center/sign_in/three_days_sign")]
method GetCombineAsync (line 35) | [Obsolete("Using IMallApi.GetCombineAsync instead.")]
method SignAsync (line 44) | [Obsolete("Using IMallApi.Sign2Async instead.")]
method Receive (line 56) | [Obsolete]
method ReceiveV2 (line 68) | [HttpPost("/pgc/activity/score/task/receive/v2")]
method CompleteAsync (line 79) | [HttpPost("/pgc/activity/score/task/complete")]
method CompleteV2 (line 90) | [HttpPost("/pgc/activity/score/task/complete/v2")]
method ViewComplete (line 102) | [HttpPost("/pgc/activity/deliver/task/complete")]
method GetVouchersInfoAsync (line 108) | [HttpGet("/x/vip/privilege/my")]
method ObtainVipExperienceAsync (line 116) | [HttpPost("/x/vip/experience/add")]
method StartOgvWatchAsync (line 127) | Task<BiliApiResponse<StartOgvWatchResponse>> StartOgvWatchAsync(
method CompleteOgvWatchAsync (line 137) | Task<BiliApiResponse> CompleteOgvWatchAsync(
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Interfaces/IVipMallApi.cs
type IVipMallApi (line 8) | [Header("Host", "show.bilibili.com")]
method ViewVipMallAsync (line 12) | [HttpPost("/api/activity/fire/common/event/dispatch")]
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Services/IWbiService.cs
type IWbiService (line 6) | public interface IWbiService
method GetWridAsync (line 8) | Task<WridDto> GetWridAsync(Dictionary<string, string> parameters, Bili...
method SetWridAsync (line 14) | Task SetWridAsync<T>(T ob, BiliCookie ck)
method EncWbi (line 17) | WridDto EncWbi(
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Services/WbiService.cs
class WbiService (line 14) | public class WbiService(ILogger<WbiService> logger, IUserInfoApi userInf...
method GetWridAsync (line 18) | public async Task<WridDto> GetWridAsync(Dictionary<string, string> par...
method SetWridAsync (line 28) | public async Task SetWridAsync<T>(T request, BiliCookie ck)
method EncWbi (line 51) | public WridDto EncWbi(
method GetWbiKeysAsync (line 104) | private async Task<WbiImg> GetWbiKeysAsync(BiliCookie ck)
method GetMixinKey (line 126) | private string GetMixinKey(string orig)
class WridDto (line 205) | public class WridDto : IWrid
type IWrid (line 212) | public interface IWrid
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Utils/LiveHeartBeatCrypto.cs
class LiveHeartBeatCrypto (line 6) | public class LiveHeartBeatCrypto
method Sypder (line 8) | public static string Sypder(string text, ICollection<int> rules, strin...
method Hash (line 40) | private static string Hash(string text, string key, string algorithmName)
FILE: src/Ray.BiliBiliTool.Agent/BiliBiliAgent/WridEncryptionDelegatingHandler.cs
class WridEncryptionDelegatingHandler (line 8) | public class WridEncryptionDelegatingHandler(IWbiService wbiService) : D...
method SendAsync (line 10) | protected override async Task<HttpResponseMessage> SendAsync(
method TrySetWridAync (line 46) | private async Task TrySetWridAync(
FILE: src/Ray.BiliBiliTool.Agent/BiliCookie.cs
class BiliCookie (line 7) | public class BiliCookie(Dictionary<string, string> cookieDic) : CookieIn...
method CkValueBuild (line 9) | protected override string CkValueBuild(string value)
method Check (line 66) | public override void Check()
method GetPropertyDescription (line 110) | private string GetPropertyDescription(string propertyName)
FILE: src/Ray.BiliBiliTool.Agent/BiliHosts.cs
class BiliHosts (line 3) | public static class BiliHosts
FILE: src/Ray.BiliBiliTool.Agent/Constants.cs
class Constants (line 3) | public static class Constants
FILE: src/Ray.BiliBiliTool.Agent/Extensions/ServiceCollectionExtension.cs
class ServiceCollectionExtension (line 17) | public static class ServiceCollectionExtension
method AddBiliBiliClientApi (line 24) | public static IServiceCollection AddBiliBiliClientApi(
method AddBiliBiliClientApi (line 114) | private static IServiceCollection AddBiliBiliClientApi<TInterface>(
method SetGlobalProxy (line 146) | private static IServiceCollection SetGlobalProxy(
method GetRetryPolicy (line 184) | static IAsyncPolicy<HttpResponseMessage> GetRetryPolicy()
FILE: src/Ray.BiliBiliTool.Agent/HttpClientDelegatingHandlers/IntervalDelegatingHandler.cs
class IntervalDelegatingHandler (line 6) | public class IntervalDelegatingHandler(IOptionsMonitor<SecurityOptions> ...
method SendAsync (line 16) | protected override async Task<HttpResponseMessage> SendAsync(
method IntervalForSecurityAsync (line 25) | private async Task IntervalForSecurityAsync(
FILE: src/Ray.BiliBiliTool.Agent/HttpClientDelegatingHandlers/LogDelegatingHandler.cs
class LogDelegatingHandler (line 5) | public class LogDelegatingHandler(ILogger<LogDelegatingHandler> logger) ...
method SendAsync (line 7) | protected override async Task<HttpResponseMessage> SendAsync(
FILE: src/Ray.BiliBiliTool.Agent/QingLong/Dtos/AddQingLongEnv.cs
class AddQingLongEnv (line 3) | public class AddQingLongEnv
FILE: src/Ray.BiliBiliTool.Agent/QingLong/Dtos/QingLongEnv.cs
class QingLongEnv (line 3) | public class QingLongEnv : UpdateQingLongEnv
FILE: src/Ray.BiliBiliTool.Agent/QingLong/Dtos/QingLongGenericResponse.cs
class QingLongGenericResponse (line 3) | public class QingLongGenericResponse<T>
FILE: src/Ray.BiliBiliTool.Agent/QingLong/Dtos/TokenResponse.cs
class TokenResponse (line 3) | public class TokenResponse
FILE: src/Ray.BiliBiliTool.Agent/QingLong/Dtos/UpdateQingLongEnv.cs
class UpdateQingLongEnv (line 3) | public class UpdateQingLongEnv : AddQingLongEnv
FILE: src/Ray.BiliBiliTool.Agent/QingLong/IQingLongApi.cs
type IQingLongApi (line 7) | [LogFilter]
method GetTokenAsync (line 10) | [HttpGet("/open/auth/token")]
method GetEnvsAsync (line 16) | [HttpGet("/open/envs")]
method AddEnvsAsync (line 22) | [HttpPost("/open/envs")]
method UpdateEnvsAsync (line 28) | [HttpPut("/open/envs")]
FILE: src/Ray.BiliBiliTool.Application.Contracts/IAppService.cs
type IAppService (line 3) | public interface IAppService
method DoTaskAsync (line 5) | Task DoTaskAsync(CancellationToken cancellationToken = default);
FILE: src/Ray.BiliBiliTool.Application.Contracts/TaskTypeFactory.cs
class TaskTypeFactory (line 7) | public static class TaskTypeFactory
method TaskTypeFactory (line 27) | static TaskTypeFactory()
method Get (line 42) | public static Type Get(string code)
method Show (line 47) | public static void Show(ILogger logger)
method GetCodeByIndex (line 55) | public static string GetCodeByIndex(int index)
class TaskTypeItem (line 61) | public class TaskTypeItem(int id, string code, Type type)
FILE: src/Ray.BiliBiliTool.Application/AppService.cs
class AppService (line 5) | public abstract class AppService : IAppService
method DoTaskAsync (line 7) | public abstract Task DoTaskAsync(CancellationToken cancellationToken =...
FILE: src/Ray.BiliBiliTool.Application/Attributes/TaskInterceptorAttribute.cs
class TaskInterceptorAttribute (line 12) | public class TaskInterceptorAttribute(
method OnEntry (line 22) | public override void OnEntry(MethodContext context)
method OnExit (line 31) | public override void OnExit(MethodContext context)
method OnException (line 44) | public override void OnException(MethodContext context)
method GetDelimiters (line 61) | private string GetDelimiters()
method GetDelimiter (line 69) | private char GetDelimiter()
FILE: src/Ray.BiliBiliTool.Application/Attributes/TaskLevel.cs
type TaskLevel (line 5) | public enum TaskLevel
FILE: src/Ray.BiliBiliTool.Application/BaseMultiAccountsAppService.cs
class BaseMultiAccountsAppService (line 7) | public abstract class BaseMultiAccountsAppService(
method DoTaskAsync (line 12) | public override async Task DoTaskAsync(CancellationToken cancellationT...
method DoTaskAccountAsync (line 34) | protected abstract Task DoTaskAccountAsync(
FILE: src/Ray.BiliBiliTool.Application/ChargeTaskAppService.cs
class ChargeTaskAppService (line 15) | public class ChargeTaskAppService(
method DoTaskAccountAsync (line 25) | [TaskInterceptor("免费B币券充电任务", TaskLevel.One)]
method SetCookiesAsync (line 42) | [TaskInterceptor("Set Cookie")]
method Login (line 65) | [TaskInterceptor("登录")]
method Charge (line 75) | [TaskInterceptor("B币券充电", rethrowWhenException: false)]
method SaveCookieAsync (line 81) | private async Task SaveCookieAsync(BiliCookie ckInfo, CancellationToke...
FILE: src/Ray.BiliBiliTool.Application/DailyTaskAppService.cs
class DailyTaskAppService (line 15) | public class DailyTaskAppService(
method DoTaskAccountAsync (line 31) | [TaskInterceptor("每日任务", TaskLevel.One)]
method SetCookiesAsync (line 56) | [TaskInterceptor("Set Cookie")]
method Login (line 79) | [TaskInterceptor("登录")]
method GetDailyTaskStatus (line 94) | [TaskInterceptor(rethrowWhenException: false)]
method WatchAndShareVideo (line 103) | [TaskInterceptor("观看、分享视频", rethrowWhenException: false)]
method AddCoins (line 118) | [TaskInterceptor("投币", rethrowWhenException: false)]
method ReceiveVipPrivilege (line 146) | [TaskInterceptor("领取大会员福利", rethrowWhenException: false)]
method SaveCookieAsync (line 165) | private async Task SaveCookieAsync(BiliCookie ckInfo, CancellationToke...
FILE: src/Ray.BiliBiliTool.Application/Extensions/ServiceCollectionExtension.cs
class ServiceCollectionExtension (line 6) | public static class ServiceCollectionExtension
method AddAppServices (line 8) | public static IServiceCollection AddAppServices(this IServiceCollectio...
FILE: src/Ray.BiliBiliTool.Application/LiveFansMedalAppService.cs
class LiveFansMedalAppService (line 12) | public class LiveFansMedalAppService(
method DoTaskAccountAsync (line 19) | [TaskInterceptor("直播间互动", TaskLevel.One)]
method SendDanmaku (line 36) | [TaskInterceptor("发送弹幕", TaskLevel.Two, false)]
method Like (line 42) | [TaskInterceptor("点赞直播间", TaskLevel.Two, false)]
method HeartBeat (line 48) | [TaskInterceptor("直播时长挂机", TaskLevel.Two, false)]
FILE: src/Ray.BiliBiliTool.Application/LiveLotteryTaskAppService.cs
class LiveLotteryTaskAppService (line 12) | public class LiveLotteryTaskAppService(
method DoTaskAccountAsync (line 23) | [TaskInterceptor("天选时刻抽奖", TaskLevel.One)]
method LogUserInfo (line 40) | [TaskInterceptor("打印用户信息")]
method LotteryTianXuan (line 46) | [TaskInterceptor("抽奖")]
method AutoGroupFollowings (line 52) | [TaskInterceptor("自动分组关注的主播")]
FILE: src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs
class LoginTaskAppService (line 11) | public class LoginTaskAppService(
method DoTaskAsync (line 17) | [TaskInterceptor("扫码登录", TaskLevel.One)]
method QrCodeLoginAsync (line 32) | [TaskInterceptor("获取二维码")]
method SetCookiesAsync (line 39) | [TaskInterceptor("Set Cookie")]
method SaveCookieAsync (line 49) | [TaskInterceptor("持久化Cookie")]
FILE: src/Ray.BiliBiliTool.Application/MangaPrivilegeTaskAppService.cs
class MangaPrivilegeTaskAppService (line 15) | public class MangaPrivilegeTaskAppService(
method DoTaskAccountAsync (line 25) | [TaskInterceptor("每月领取大会员漫画权益任务", TaskLevel.One)]
method SetCookiesAsync (line 42) | [TaskInterceptor("Set Cookie")]
method Login (line 65) | [TaskInterceptor("登录")]
method ReceiveMangaVipReward (line 76) | [TaskInterceptor("领取大会员漫画权益", rethrowWhenException: false)]
method SaveCookieAsync (line 82) | private async Task SaveCookieAsync(BiliCookie ckInfo, CancellationToke...
FILE: src/Ray.BiliBiliTool.Application/MangaTaskAppService.cs
class MangaTaskAppService (line 14) | public class MangaTaskAppService(
method DoTaskAccountAsync (line 24) | [TaskInterceptor("漫画任务", TaskLevel.One)]
method SetCookiesAsync (line 43) | [TaskInterceptor("Set Cookie")]
method Login (line 66) | [TaskInterceptor("登录")]
method MangaSign (line 75) | [TaskInterceptor("漫画签到", rethrowWhenException: false)]
method MangaRead (line 84) | [TaskInterceptor("漫画阅读", rethrowWhenException: false)]
method SaveCookieAsync (line 90) | private async Task SaveCookieAsync(BiliCookie ckInfo, CancellationToke...
FILE: src/Ray.BiliBiliTool.Application/Silver2CoinTaskAppService.cs
class Silver2CoinTaskAppService (line 14) | public class Silver2CoinTaskAppService(
method DoTaskAccountAsync (line 25) | [TaskInterceptor("银瓜子兑换硬币任务", TaskLevel.One)]
method SetCookiesAsync (line 43) | [TaskInterceptor("Set Cookie")]
method Login (line 66) | [TaskInterceptor("登录")]
method ExchangeSilver2Coin (line 75) | [TaskInterceptor("银瓜子兑换硬币", rethrowWhenException: false)]
method SaveCookieAsync (line 87) | private async Task SaveCookieAsync(BiliCookie ckInfo, CancellationToke...
FILE: src/Ray.BiliBiliTool.Application/TestAppService.cs
class TestAppService (line 10) | public class TestAppService(
method DoTaskAccountAsync (line 16) | [TaskInterceptor("测试Cookie")]
FILE: src/Ray.BiliBiliTool.Application/UnfollowBatchedTaskAppService.cs
class UnfollowBatchedTaskAppService (line 12) | public class UnfollowBatchedTaskAppService(
method DoTaskAccountAsync (line 19) | [TaskInterceptor("批量取关", TaskLevel.One)]
FILE: src/Ray.BiliBiliTool.Application/VipBigPointAppService.cs
class VipBigPointAppService (line 14) | public class VipBigPointAppService(
method DoTaskAccountAsync (line 22) | [TaskInterceptor("大会员大积分", TaskLevel.One)]
method LoginAndCheckVipStatusAsync (line 55) | [TaskInterceptor("登录并检测会员状态")]
method CheckCombineAsync (line 71) | [TaskInterceptor("查看大会员大积分状态")]
method ExpressAsync (line 87) | [TaskInterceptor("大会员经验观看任务", rethrowWhenException: false)]
method SignAsync (line 93) | [TaskInterceptor("签到任务", rethrowWhenException: false)]
method ReceiveMissionsAsync (line 99) | [TaskInterceptor("领取日常任务", rethrowWhenException: false)]
method BonusMissionAsync (line 109) | [TaskInterceptor("福利任务", rethrowWhenException: false)]
method PrivilegeMissionAsync (line 125) | [TaskInterceptor("体验任务", rethrowWhenException: false)]
method DailyMissionsAsync (line 141) | [TaskInterceptor("日常任务", rethrowWhenException: false)]
method DailyDressViewMissionAsync (line 158) | [TaskInterceptor("日常1:浏览装扮商城", TaskLevel.Three, rethrowWhenException: ...
method DailyVipMallViewMissionAsync (line 174) | [TaskInterceptor("日常2:浏览会员购", TaskLevel.Three, rethrowWhenException: f...
method DailyVipMallBuyMissionAsync (line 191) | [TaskInterceptor("日常3:购买会员购", TaskLevel.Three, rethrowWhenException: f...
method DailyAnimateTabMissionAsync (line 198) | [TaskInterceptor("日常4:浏览追番频道", TaskLevel.Three, rethrowWhenException: ...
method DailyFilmTabMissionAsync (line 214) | [TaskInterceptor("日常5:浏览影视频道", TaskLevel.Three, rethrowWhenException: ...
method DailyOgvWatchMissionAsync (line 230) | [TaskInterceptor("日常6:观看剧集", TaskLevel.Three, rethrowWhenException: fa...
method DailyTvOdBuyMissionAsync (line 246) | [TaskInterceptor("日常7:购买影片", TaskLevel.Three, rethrowWhenException: fa...
method DailyDressBuyAmountMissionAsync (line 253) | [TaskInterceptor("日常8:购买装扮", TaskLevel.Three, rethrowWhenException: fa...
FILE: src/Ray.BiliBiliTool.Application/VipPrivilegeTaskAppService.cs
class VipPrivilegeTaskAppService (line 15) | public class VipPrivilegeTaskAppService(
method DoTaskAccountAsync (line 25) | [TaskInterceptor("领取大会员福利任务", TaskLevel.One)]
method SetCookiesAsync (line 43) | [TaskInterceptor("Set Cookie")]
method Login (line 66) | [TaskInterceptor("登录")]
method ReceiveVipPrivilege (line 76) | [TaskInterceptor("领取", rethrowWhenException: false)]
method SaveCookieAsync (line 95) | private async Task SaveCookieAsync(BiliCookie ckInfo, CancellationToke...
FILE: src/Ray.BiliBiliTool.Config/Constants.cs
class Constants (line 3) | public static class Constants
FILE: src/Ray.BiliBiliTool.Config/Extensions/ServiceCollectionExtension.cs
class ServiceCollectionExtension (line 9) | public static class ServiceCollectionExtension
method AddBiliBiliConfigs (line 16) | public static IServiceCollection AddBiliBiliConfigs(
FILE: src/Ray.BiliBiliTool.Config/IHasCron.cs
type IHasCron (line 3) | public interface IHasCron
FILE: src/Ray.BiliBiliTool.Config/Options/BaseConfigOptions.cs
class BaseConfigOptions (line 6) | public abstract class BaseConfigOptions : IHasCron, IConfigOptions
method ToConfigDictionary (line 26) | public virtual Dictionary<string, string> ToConfigDictionary()
method GetBaseConfigDictionary (line 34) | protected Dictionary<string, string> GetBaseConfigDictionary()
method MergeConfigDictionary (line 46) | protected Dictionary<string, string> MergeConfigDictionary(
FILE: src/Ray.BiliBiliTool.Config/Options/BiliBiliCookieOptions.cs
class BiliBiliCookieOptions (line 6) | public class BiliBiliCookieOptions
FILE: src/Ray.BiliBiliTool.Config/Options/ChargeTaskOptions.cs
class ChargeTaskOptions (line 3) | public class ChargeTaskOptions : BaseConfigOptions
method ToConfigDictionary (line 49) | public override Dictionary<string, string> ToConfigDictionary()
FILE: src/Ray.BiliBiliTool.Config/Options/DailyTaskOptions.cs
class DailyTaskOptions (line 6) | public class DailyTaskOptions : BaseConfigOptions
method ToConfigDictionary (line 95) | public override Dictionary<string, string> ToConfigDictionary()
FILE: src/Ray.BiliBiliTool.Config/Options/IConfigOptions.cs
type IConfigOptions (line 3) | public interface IConfigOptions
method ToConfigDictionary (line 5) | Dictionary<string, string> ToConfigDictionary();
FILE: src/Ray.BiliBiliTool.Config/Options/LiveFansMedalTaskOptions.cs
class LiveFansMedalTaskOptions (line 6) | public class LiveFansMedalTaskOptions : BaseConfigOptions
method ToConfigDictionary (line 47) | public override Dictionary<string, string> ToConfigDictionary()
FILE: src/Ray.BiliBiliTool.Config/Options/LiveLotteryTaskOptions.cs
class LiveLotteryTaskOptions (line 3) | public class LiveLotteryTaskOptions : BaseConfigOptions
method ToConfigDictionary (line 30) | public override Dictionary<string, string> ToConfigDictionary()
FILE: src/Ray.BiliBiliTool.Config/Options/MangaPrivilegeTaskOptions.cs
class MangaPrivilegeTaskOptions (line 3) | public class MangaPrivilegeTaskOptions : BaseConfigOptions
FILE: src/Ray.BiliBiliTool.Config/Options/MangaTaskOptions.cs
class MangaTaskOptions (line 3) | public class MangaTaskOptions : BaseConfigOptions
method ToConfigDictionary (line 17) | public override Dictionary<string, string> ToConfigDictionary()
FILE: src/Ray.BiliBiliTool.Config/Options/QingLongOptions.cs
class QingLongOptions (line 3) | public class QingLongOptions
FILE: src/Ray.BiliBiliTool.Config/Options/SecurityOptions.cs
class SecurityOptions (line 6) | public class SecurityOptions
method GetIntervalMethods (line 30) | public List<HttpMethod> GetIntervalMethods()
FILE: src/Ray.BiliBiliTool.Config/Options/Silver2CoinTaskOptions.cs
class Silver2CoinTaskOptions (line 3) | public class Silver2CoinTaskOptions : BaseConfigOptions
FILE: src/Ray.BiliBiliTool.Config/Options/UnfollowBatchedTaskOptions.cs
class UnfollowBatchedTaskOptions (line 3) | public class UnfollowBatchedTaskOptions : BaseConfigOptions
method ToConfigDictionary (line 19) | public override Dictionary<string, string> ToConfigDictionary()
FILE: src/Ray.BiliBiliTool.Config/Options/VipBigPointOptions.cs
class VipBigPointOptions (line 3) | public class VipBigPointOptions : BaseConfigOptions
method ToConfigDictionary (line 29) | public override Dictionary<string, string> ToConfigDictionary()
FILE: src/Ray.BiliBiliTool.Config/Options/VipPrivilegeOptions.cs
class VipPrivilegeOptions (line 3) | public class VipPrivilegeOptions : BaseConfigOptions
FILE: src/Ray.BiliBiliTool.Config/SQLite/SqliteConfigurationExtensions.cs
class SqliteConfigurationExtensions (line 5) | public static class SqliteConfigurationExtensions
method AddSqlite (line 7) | public static IConfigurationBuilder AddSqlite(
FILE: src/Ray.BiliBiliTool.Config/SQLite/SqliteConfigurationProvider.cs
class SqliteConfigurationProvider (line 6) | public class SqliteConfigurationProvider(SqliteConfigurationSource sourc...
method Load (line 14) | public override void Load()
method EnsureTableExists (line 36) | private void EnsureTableExists(SqliteConnection connection)
method Set (line 48) | public override void Set(string key, string? value)
method BatchSet (line 65) | public void BatchSet(Dictionary<string, string> configValues)
FILE: src/Ray.BiliBiliTool.Config/SQLite/SqliteConfigurationSource.cs
class SqliteConfigurationSource (line 5) | public class SqliteConfigurationSource : IConfigurationSource
method Build (line 12) | public IConfigurationProvider Build(IConfigurationBuilder builder)
FILE: src/Ray.BiliBiliTool.Console/BiliBiliToolHostedService.cs
class BiliBiliToolHostedService (line 14) | public class BiliBiliToolHostedService(
method StartAsync (line 25) | public async Task StartAsync(CancellationToken cancellationToken)
method StopAsync (line 63) | public Task StopAsync(CancellationToken cancellationToken)
method PreCheckAsync (line 68) | private Task<bool> PreCheckAsync(CancellationToken cancellationToken)
method RandomSleepAsync (line 80) | private async Task RandomSleepAsync(CancellationToken cancellationToken)
method ReadTargetTasksAsync (line 101) | private Task<string[]> ReadTargetTasksAsync(CancellationToken cancella...
method DoTasksAsync (line 131) | private async Task DoTasksAsync(string[] tasks, CancellationToken canc...
method LogAppInfo (line 143) | private void LogAppInfo()
FILE: src/Ray.BiliBiliTool.Console/Program.cs
class Program (line 15) | public class Program
method Main (line 17) | public static async Task<int> Main(string[] args)
method CreateHost (line 45) | public static IHost CreateHost(string[] args)
method CreateHostBuilder (line 52) | private static HostBuilder CreateHostBuilder(string[] args)
method PrintLogo (line 134) | private static void PrintLogo()
FILE: src/Ray.BiliBiliTool.Domain/BiliLogs.cs
class BiliLogs (line 6) | [Table("bili_logs")]
FILE: src/Ray.BiliBiliTool.Domain/ExecutionLog.cs
class ExecutionLog (line 6) | [Table("bili_execution_logs")]
method ExecutionLog (line 73) | public ExecutionLog()
method GetFinishTimeUtc (line 78) | public DateTimeOffset? GetFinishTimeUtc() => FireTimeUtc?.Add(JobRunTi...
FILE: src/Ray.BiliBiliTool.Domain/ExecutionLogDetail.cs
class ExecutionLogDetail (line 5) | public class ExecutionLogDetail
FILE: src/Ray.BiliBiliTool.Domain/LogType.cs
type LogType (line 3) | public enum LogType
FILE: src/Ray.BiliBiliTool.Domain/User.cs
class User (line 6) | [Table("bili_user")]
FILE: src/Ray.BiliBiliTool.DomainService/AccountDomainService.cs
class AccountDomainService (line 15) | public class AccountDomainService(
method LoginByCookie (line 32) | public async Task<UserInfo> LoginByCookie(BiliCookie cookie)
method GetDailyTaskStatus (line 70) | public async Task<DailyTaskInfo> GetDailyTaskStatus(BiliCookie ck)
method UnfollowBatched (line 96) | public async Task UnfollowBatched(BiliCookie ck)
method GetTag (line 205) | private async Task<TagDto?> GetTag(string groupName, BiliCookie ck)
method CalculateUpgradeTime (line 218) | public int CalculateUpgradeTime(UserInfo useInfo)
FILE: src/Ray.BiliBiliTool.DomainService/ArticleDomainService.cs
class ArticleDomainService (line 12) | public class ArticleDomainService(
method LikeArticle (line 32) | public async Task LikeArticle(long cvid, BiliCookie ck)
method AddCoinForArticles (line 41) | public async Task<bool> AddCoinForArticles(BiliCookie ck)
method AddCoinForArticle (line 107) | public async Task<bool> AddCoinForArticle(long cvid, long mid, BiliCoo...
method GetRandomArticleFromUp (line 144) | private async Task<long> GetRandomArticleFromUp(long mid, BiliCookie ck)
method GetUpFromConfigUps (line 192) | private long GetUpFromConfigUps(BiliCookie ck)
method GetArticleCountOfUp (line 234) | private async Task<int> GetArticleCountOfUp(long mid, BiliCookie ck)
method CalculateDonateCoinsCounts (line 254) | private async Task<int> CalculateDonateCoinsCounts(BiliCookie ck)
method GetNeedDonateCoinCounts (line 308) | private async Task<int> GetNeedDonateCoinCounts(BiliCookie ck)
method IsCanDonate (line 337) | private async Task<bool> IsCanDonate(long cvid)
FILE: src/Ray.BiliBiliTool.DomainService/ChargeDomainService.cs
class ChargeDomainService (line 14) | public class ChargeDomainService(
method Charge (line 30) | public async Task Charge(UserInfo userInfo, BiliCookie ck)
method ChargeComments (line 97) | public async Task ChargeComments(string orderNum, BiliCookie ck)
FILE: src/Ray.BiliBiliTool.DomainService/CoinDomainService.cs
class CoinDomainService (line 10) | public class CoinDomainService(IAccountApi accountApi, IDailyTaskApi dai...
method GetCoinBalance (line 17) | public async Task<decimal> GetCoinBalance(BiliCookie ck)
method GetDonatedCoins (line 27) | public async Task<int> GetDonatedCoins(BiliCookie ck)
method GetDonateCoinExp (line 37) | private async Task<int> GetDonateCoinExp(BiliCookie ck)
FILE: src/Ray.BiliBiliTool.DomainService/DonateCoinDomainService.cs
class DonateCoinDomainService (line 15) | public class DonateCoinDomainService(
method AddCoinsForVideos (line 44) | public async Task AddCoinsForVideos(BiliCookie ck)
method TryGetCanDonatedVideo (line 124) | public async Task<UpVideoInfo?> TryGetCanDonatedVideo(BiliCookie ck)
method DoAddCoinForVideo (line 156) | public async Task<bool> DoAddCoinForVideo(UpVideoInfo video, bool sele...
method GetNeedDonateCoinNum (line 200) | private async Task<int> GetNeedDonateCoinNum(BiliCookie ck)
method TryGetCanDonateVideoByConfigUps (line 238) | private async Task<UpVideoInfo?> TryGetCanDonateVideoByConfigUps(int t...
method TryGetCanDonateVideoBySpecialUps (line 253) | private async Task<UpVideoInfo?> TryGetCanDonateVideoBySpecialUps(int ...
method TryGetCanDonateVideoByFollowingUps (line 276) | private async Task<UpVideoInfo?> TryGetCanDonateVideoByFollowingUps(in...
method TryGetCanDonateVideoByRegion (line 299) | private async Task<UpVideoInfo?> TryGetCanDonateVideoByRegion(int tryC...
method TryCanDonateVideoByUps (line 331) | private async Task<UpVideoInfo?> TryCanDonateVideoByUps(
method IsDonatedLessThenLimitCoinsForVideo (line 394) | private async Task<bool> IsDonatedLessThenLimitCoinsForVideo(string ai...
method IsCanDonate (line 439) | private async Task<bool> IsCanDonate(string aid, BiliCookie ck)
FILE: src/Ray.BiliBiliTool.DomainService/Dtos/FansMedalInfoDto.cs
class FansMedalInfoDto (line 5) | public class FansMedalInfoDto
method FansMedalInfoDto (line 7) | public FansMedalInfoDto(
FILE: src/Ray.BiliBiliTool.DomainService/Dtos/HeartBeatIterationInfoDto.cs
class HeartBeatIterationInfoDto (line 5) | public class HeartBeatIterationInfoDto(
FILE: src/Ray.BiliBiliTool.DomainService/Dtos/VideoInfoDto.cs
class VideoInfoDto (line 3) | public class VideoInfoDto
FILE: src/Ray.BiliBiliTool.DomainService/Extensions/ServiceCollectionExtensions.cs
class ServiceCollectionExtensions (line 6) | public static class ServiceCollectionExtensions
method AddDomainServices (line 8) | public static IServiceCollection AddDomainServices(this IServiceCollec...
FILE: src/Ray.BiliBiliTool.DomainService/Interfaces/IAccountDomainService.cs
type IAccountDomainService (line 9) | public interface IAccountDomainService : IDomainService
method LoginByCookie (line 15) | Task<UserInfo> LoginByCookie(BiliCookie cookie);
method GetDailyTaskStatus (line 21) | Task<DailyTaskInfo> GetDailyTaskStatus(BiliCookie ck);
method UnfollowBatched (line 26) | Task UnfollowBatched(BiliCookie ck);
method CalculateUpgradeTime (line 33) | int CalculateUpgradeTime(UserInfo useInfo);
FILE: src/Ray.BiliBiliTool.DomainService/Interfaces/IArticleDomainService.cs
type IArticleDomainService (line 5) | public interface IArticleDomainService : IDomainService
method AddCoinForArticle (line 7) | Task<bool> AddCoinForArticle(long cvid, long mid, BiliCookie ck);
method AddCoinForArticles (line 9) | Task<bool> AddCoinForArticles(BiliCookie ck);
method LikeArticle (line 11) | Task LikeArticle(long cvid, BiliCookie ck);
FILE: src/Ray.BiliBiliTool.DomainService/Interfaces/IChargeDomainService.cs
type IChargeDomainService (line 9) | public interface IChargeDomainService : IDomainService
method Charge (line 15) | Task Charge(UserInfo userInfo, BiliCookie ck);
method ChargeComments (line 21) | Task ChargeComments(string token, BiliCookie ck);
FILE: src/Ray.BiliBiliTool.DomainService/Interfaces/ICoinDomainService.cs
type ICoinDomainService (line 8) | public interface ICoinDomainService : IDomainService
method GetCoinBalance (line 14) | Task<decimal> GetCoinBalance(BiliCookie ck);
method GetDonatedCoins (line 20) | Task<int> GetDonatedCoins(BiliCookie ck);
FILE: src/Ray.BiliBiliTool.DomainService/Interfaces/IDomainService.cs
type IDomainService (line 6) | public interface IDomainService { }
FILE: src/Ray.BiliBiliTool.DomainService/Interfaces/IDonateCoinDomainService.cs
type IDonateCoinDomainService (line 9) | public interface IDonateCoinDomainService : IDomainService
method AddCoinsForVideos (line 11) | Task AddCoinsForVideos(BiliCookie ck);
method TryGetCanDonatedVideo (line 13) | Task<UpVideoInfo?> TryGetCanDonatedVideo(BiliCookie ck);
method DoAddCoinForVideo (line 15) | Task<bool> DoAddCoinForVideo(UpVideoInfo video, bool select_like, Bili...
FILE: src/Ray.BiliBiliTool.DomainService/Interfaces/ILiveDomainService.cs
type ILiveDomainService (line 9) | public interface ILiveDomainService : IDomainService
method LiveSign (line 14) | Task LiveSign(BiliCookie ck);
method ExchangeSilver2Coin (line 20) | Task<bool> ExchangeSilver2Coin(BiliCookie ck);
method TianXuan (line 25) | Task TianXuan(BiliCookie ck);
method TryJoinTianXuan (line 27) | Task TryJoinTianXuan(ListItemDto target, BiliCookie ck);
method GroupFollowing (line 29) | Task GroupFollowing(BiliCookie ck);
method SendDanmakuToFansMedalLive (line 34) | Task SendDanmakuToFansMedalLive(BiliCookie ck);
method SendHeartBeatToFansMedalLive (line 39) | Task SendHeartBeatToFansMedalLive(BiliCookie ck);
method LikeFansMedalLive (line 44) | Task LikeFansMedalLive(BiliCookie ck);
FILE: src/Ray.BiliBiliTool.DomainService/Interfaces/ILoginDomainService.cs
type ILoginDomainService (line 8) | public interface ILoginDomainService : IDomainService
method LoginByQrCodeAsync (line 14) | Task<BiliCookie> LoginByQrCodeAsync(CancellationToken cancellationToken);
method SetCookieAsync (line 21) | Task<BiliCookie> SetCookieAsync(BiliCookie cookie, CancellationToken c...
method SaveCookieToJsonFileAsync (line 27) | Task SaveCookieToJsonFileAsync(BiliCookie ckInfo, CancellationToken ca...
method SaveCookieToQinLongAsync (line 35) | Task<bool> SaveCookieToQinLongAsync(BiliCookie ckInfo, CancellationTok...
FILE: src/Ray.BiliBiliTool.DomainService/Interfaces/IMangaDomainService.cs
type IMangaDomainService (line 9) | public interface IMangaDomainService : IDomainService
method MangaSign (line 14) | Task MangaSign(BiliCookie ck);
method MangaRead (line 19) | Task MangaRead(BiliCookie ck);
method ReceiveMangaVipReward (line 26) | Task ReceiveMangaVipReward(int reason_id, UserInfo userIfo, BiliCookie...
FILE: src/Ray.BiliBiliTool.DomainService/Interfaces/IVideoDomainService.cs
type IVideoDomainService (line 11) | public interface IVideoDomainService : IDomainService
method GetVideoDetail (line 18) | Task<VideoDetail> GetVideoDetail(string aid);
method GetRandomVideoOfRanking (line 24) | Task<RankingInfo> GetRandomVideoOfRanking();
method GetRandomVideoOfUp (line 32) | Task<UpVideoInfo?> GetRandomVideoOfUp(long upId, int total, BiliCookie...
method GetVideoCountOfUp (line 34) | Task<int> GetVideoCountOfUp(long upId, BiliCookie ck);
method WatchAndShareVideo (line 40) | Task WatchAndShareVideo(DailyTaskInfo dailyTaskStatus, BiliCookie ck);
method WatchVideo (line 47) | Task WatchVideo(VideoInfoDto videoInfo, BiliCookie ck);
method ShareVideo (line 54) | Task ShareVideo(VideoInfoDto videoInfo, BiliCookie ck);
FILE: src/Ray.BiliBiliTool.DomainService/Interfaces/IVipBigPointDomainService.cs
type IVipBigPointDomainService (line 7) | public interface IVipBigPointDomainService : IDomainService
method GetCombineAsync (line 9) | Task<VipBigPointCombine> GetCombineAsync(BiliCookie ck);
method VipExpressAsync (line 11) | Task VipExpressAsync(BiliCookie ck);
method SignAsync (line 13) | Task SignAsync(BiliCookie ck);
method ReceiveDailyMissionsAsync (line 15) | Task ReceiveDailyMissionsAsync(VipBigPointCombine combine, BiliCookie ...
method ReceiveAndCompleteAsync (line 17) | Task ReceiveAndCompleteAsync(
method CompleteAsync (line 25) | Task<bool> CompleteAsync(string taskCode, BiliCookie ck);
method CompleteViewAsync (line 27) | Task<bool> CompleteViewAsync(string taskCode, BiliCookie ck);
method CompleteViewVipMallAsync (line 29) | Task<bool> CompleteViewVipMallAsync(string taskCode, BiliCookie ck);
method CompleteV2Async (line 31) | Task<bool> CompleteV2Async(string taskCode, BiliCookie ck);
FILE: src/Ray.BiliBiliTool.DomainService/Interfaces/IVipPrivilegeDomainService.cs
type IVipPrivilegeDomainService (line 9) | public interface IVipPrivilegeDomainService : IDomainService
method ReceiveVipPrivilege (line 15) | Task<bool> ReceiveVipPrivilege(UserInfo userInfo, BiliCookie ck);
FILE: src/Ray.BiliBiliTool.DomainService/LiveDomainService.cs
class LiveDomainService (line 19) | public class LiveDomainService(
method LiveSign (line 54) | public async Task LiveSign(BiliCookie ck)
method ExchangeSilver2Coin (line 78) | public async Task<bool> ExchangeSilver2Coin(BiliCookie ck)
method TianXuan (line 123) | public async Task TianXuan(BiliCookie ck)
method TryJoinTianXuan (line 186) | public async Task TryJoinTianXuan(ListItemDto target, BiliCookie ck)
method GroupFollowing (line 279) | public async Task GroupFollowing(BiliCookie ck)
method GetLastFollowUpId (line 331) | private async Task<long> GetLastFollowUpId(BiliCookie ck)
method GetNeedGroup (line 344) | private async Task<List<ListItemDto>> GetNeedGroup(BiliCookie ck)
method GetOrCreateTianXuanGroupId (line 379) | private async Task<long> GetOrCreateTianXuanGroupId(BiliCookie ck)
method SendDanmakuToFansMedalLive (line 408) | public async Task SendDanmakuToFansMedalLive(BiliCookie ck)
method SendHeartBeatToFansMedalLive (line 476) | public async Task SendHeartBeatToFansMedalLive(BiliCookie ck)
method LikeFansMedalLive (line 609) | public async Task LikeFansMedalLive(BiliCookie ck)
method GetFansMedalInfoList (line 644) | private async Task<List<FansMedalInfoDto>> GetFansMedalInfoList(BiliCo...
method CheckLiveCookie (line 711) | private async Task<bool> CheckLiveCookie(BiliCookie ck)
FILE: src/Ray.BiliBiliTool.DomainService/LoginDomainService.cs
class LoginDomainService (line 23) | public class LoginDomainService(
method LoginByQrCodeAsync (line 33) | public async Task<BiliCookie> LoginByQrCodeAsync(CancellationToken can...
method SetCookieAsync (line 108) | public async Task<BiliCookie> SetCookieAsync(
method SaveCookieToJsonFileAsync (line 145) | public async Task SaveCookieToJsonFileAsync(
method SaveCookieToQinLongAsync (line 230) | public async Task<bool> SaveCookieToQinLongAsync(
method GenerateQrCode (line 312) | private void GenerateQrCode(string str)
method Print (line 327) | private void Print(QRCodeData qrCodeData)
method PrintSmall (line 354) | private void PrintSmall(QRCodeData qrCodeData)
method GetOnlinePic (line 391) | private string GetOnlinePic(string str)
method SaveJson (line 397) | private async Task SaveJson(List<string> lines, IFileInfo fileInfo)
method GetQingLongAuthTokenAsync (line 407) | private async Task<string> GetQingLongAuthTokenAsync()
method PrintIfSaveCookieFailAsync (line 431) | private Task PrintIfSaveCookieFailAsync(BiliCookie ckInfo, Cancellatio...
FILE: src/Ray.BiliBiliTool.DomainService/MangaDomainService.cs
class MangaDomainService (line 14) | public class MangaDomainService(
method MangaSign (line 29) | public async Task MangaSign(BiliCookie ck)
method MangaRead (line 59) | public async Task MangaRead(BiliCookie ck)
method ReceiveMangaVipReward (line 86) | public async Task ReceiveMangaVipReward(int reason_id, UserInfo userIn...
FILE: src/Ray.BiliBiliTool.DomainService/VideoDomainService.cs
class VideoDomainService (line 17) | public class VideoDomainService(
method GetVideoDetail (line 33) | public async Task<VideoDetail> GetVideoDetail(string aid)
method GetRandomVideoOfRanking (line 43) | public async Task<RankingInfo> GetRandomVideoOfRanking()
method GetRandomVideoOfUp (line 51) | public async Task<UpVideoInfo?> GetRandomVideoOfUp(long upId, int tota...
method GetVideoCountOfUp (line 81) | public async Task<int> GetVideoCountOfUp(long upId, BiliCookie ck)
method WatchAndShareVideo (line 97) | public async Task WatchAndShareVideo(DailyTaskInfo dailyTaskStatus, Bi...
method WatchVideo (line 143) | public async Task WatchVideo(VideoInfoDto videoInfo, BiliCookie ck)
method ShareVideo (line 186) | public async Task ShareVideo(VideoInfoDto videoInfo, BiliCookie ck)
method OpenVideo (line 207) | private async Task<bool> OpenVideo(VideoInfoDto videoInfo, BiliCookie ck)
method GetRandomVideoForWatchAndShare (line 239) | private async Task<VideoInfoDto> GetRandomVideoForWatchAndShare(BiliCo...
method GetRandomVideoOfFollowingUps (line 259) | private async Task<VideoInfoDto?> GetRandomVideoOfFollowingUps(BiliCoo...
method GetRandomVideoOfUps (line 291) | private async Task<VideoInfoDto?> GetRandomVideoOfUps(List<long> upIds...
FILE: src/Ray.BiliBiliTool.DomainService/VipBigPointDomainService.cs
class VipBigPointDomainService (line 16) | public class VipBigPointDomainService(
method GetCombineAsync (line 29) | public async Task<VipBigPointCombine> GetCombineAsync(BiliCookie ck)
method VipExpressAsync (line 43) | public async Task VipExpressAsync(BiliCookie ck)
method SignAsync (line 98) | public async Task SignAsync(BiliCookie ck)
method ReceiveDailyMissionsAsync (line 134) | public async Task ReceiveDailyMissionsAsync(VipBigPointCombine combine...
method ReceiveAndCompleteAsync (line 153) | public async Task ReceiveAndCompleteAsync(
method CompleteAsync (line 196) | public async Task<bool> CompleteAsync(string taskCode, BiliCookie ck)
method CompleteViewAsync (line 210) | public async Task<bool> CompleteViewAsync(string taskCode, BiliCookie ck)
method CompleteViewVipMallAsync (line 237) | public async Task<bool> CompleteViewVipMallAsync(string taskCode, Bili...
method CompleteV2Async (line 248) | public async Task<bool> CompleteV2Async(string taskCode, BiliCookie ck)
method TryReceive (line 267) | private async Task TryReceive(string taskCode, BiliCookie ck)
method WatchBangumi (line 286) | private async Task<bool> WatchBangumi(BiliCookie ck)
method GetBangumi (line 336) | private async Task<(VideoInfoDto, long)?> GetBangumi(long randomSsid, ...
FILE: src/Ray.BiliBiliTool.DomainService/VipPrivilegeDomainService.cs
class VipPrivilegeDomainService (line 14) | public class VipPrivilegeDomainService(
method ReceiveVipPrivilege (line 28) | public async Task<bool> ReceiveVipPrivilege(UserInfo userInfo, BiliCoo...
method ReceiveVipPrivilege (line 75) | private async Task<bool> ReceiveVipPrivilege(VipPrivilegeType type, Bi...
method GetPrivilegeName (line 104) | private string GetPrivilegeName(VipPrivilegeType type)
FILE: src/Ray.BiliBiliTool.Infrastructure.EF/BiliDbContext.cs
class BiliDbContext (line 10) | public class BiliDbContext(IConfiguration config) : DbContext
method OnConfiguring (line 16) | protected override void OnConfiguring(DbContextOptionsBuilder optionsB...
method OnModelCreating (line 22) | protected override void OnModelCreating(ModelBuilder modelBuilder)
method AddSqliteDateTimeOffsetSupport (line 91) | private void AddSqliteDateTimeOffsetSupport(ModelBuilder builder)
FILE: src/Ray.BiliBiliTool.Infrastructure.EF/DbInitializer.cs
class DbInitializer (line 7) | public class DbInitializer(BiliDbContext context)
method InitializeAsync (line 12) | public async Task InitializeAsync()
method InitUserAsync (line 19) | private async Task InitUserAsync()
FILE: src/Ray.BiliBiliTool.Infrastructure.EF/Extensions/ServiceCollectionExtension.cs
class ServiceCollectionExtension (line 5) | public static class ServiceCollectionExtension
method AddEF (line 7) | public static IServiceCollection AddEF(this IServiceCollection services)
FILE: src/Ray.BiliBiliTool.Infrastructure.EF/Migrations/20250503105406_InitQuartz.Designer.cs
class InitQuartz (line 14) | [DbContext(typeof(BiliDbContext))]
method BuildTargetModel (line 19) | protected override void BuildTargetModel(ModelBuilder modelBuilder)
FILE: src/Ray.BiliBiliTool.Infrastructure.EF/Migrations/20250503105406_InitQuartz.cs
class InitQuartz (line 8) | public partial class InitQuartz : Migration
method Up (line 11) | protected override void Up(MigrationBuilder migrationBuilder)
method Down (line 408) | protected override void Down(MigrationBuilder migrationBuilder)
FILE: src/Ray.BiliBiliTool.Infrastructure.EF/Migrations/20250503164108_Update.Designer.cs
class Update (line 13) | [DbContext(typeof(BiliDbContext))]
method BuildTargetModel (line 18) | protected override void BuildTargetModel(ModelBuilder modelBuilder)
FILE: src/Ray.BiliBiliTool.Infrastructure.EF/Migrations/20250503164108_Update.cs
class Update (line 9) | public partial class Update : Migration
method Up (line 12) | protected override void Up(MigrationBuilder migrationBuilder)
method Down (line 116) | protected override void Down(MigrationBuilder migrationBuilder)
FILE: src/Ray.BiliBiliTool.Infrastructure.EF/Migrations/20250510130427_AddBiliLogs.Designer.cs
class AddBiliLogs (line 13) | [DbContext(typeof(BiliDbContext))]
method BuildTargetModel (line 18) | protected override void BuildTargetModel(ModelBuilder modelBuilder)
FILE: src/Ray.BiliBiliTool.Infrastructure.EF/Migrations/20250510130427_AddBiliLogs.cs
class AddBiliLogs (line 9) | public partial class AddBiliLogs : Migration
method Up (line 12) | protected override void Up(MigrationBuilder migrationBuilder)
method Down (line 55) | protected override void Down(MigrationBuilder migrationBuilder)
FILE: src/Ray.BiliBiliTool.Infrastructure.EF/Migrations/20250615100041_AddUser.Designer.cs
class AddUser (line 13) | [DbContext(typeof(BiliDbContext))]
method BuildTargetModel (line 18) | protected override void BuildTargetModel(ModelBuilder modelBuilder)
FILE: src/Ray.BiliBiliTool.Infrastructure.EF/Migrations/20250615100041_AddUser.cs
class AddUser (line 8) | public partial class AddUser : Migration
method Up (line 11) | protected override void Up(MigrationBuilder migrationBuilder)
method Down (line 40) | protected override void Down(MigrationBuilder migrationBuilder)
FILE: src/Ray.BiliBiliTool.Infrastructure.EF/Migrations/BiliDbContextModelSnapshot.cs
class BiliDbContextModelSnapshot (line 12) | [DbContext(typeof(BiliDbContext))]
method BuildModel (line 15) | protected override void BuildModel(ModelBuilder modelBuilder)
FILE: src/Ray.BiliBiliTool.Infrastructure/Cookie/CookieInfo.cs
class CookieInfo (line 3) | public class CookieInfo(Dictionary<string, string> cookieDic)
method Check (line 15) | public virtual void Check()
method CkNameBuild (line 21) | protected virtual string CkNameBuild(string name)
method CkValueBuild (line 26) | protected virtual string CkValueBuild(string value)
method ToString (line 31) | public override string ToString()
method MergeCurrentCookieBySetCookieHeaders (line 41) | public void MergeCurrentCookieBySetCookieHeaders(IEnumerable<string> s...
method MergeCurrentCookie (line 46) | public void MergeCurrentCookie(string ckStr)
method MergeCurrentCookie (line 51) | public void MergeCurrentCookie(List<string> ckItemList)
method MergeCurrentCookie (line 56) | private void MergeCurrentCookie(Dictionary<string, string> ckDic)
method ConvertSetCkHeadersToCkItemList (line 73) | private static List<string> ConvertSetCkHeadersToCkItemList(IEnumerabl...
method ConvertSetCkHeadersToCkStr (line 86) | public static string ConvertSetCkHeadersToCkStr(IEnumerable<string> se...
method ConvertCkStrToCkItemList (line 97) | private static List<string> ConvertCkStrToCkItemList(string ckStr)
method ConvertCkItemListToCkStr (line 107) | private static string ConvertCkItemListToCkStr(IEnumerable<string> ckI...
method ConvertCkItemListToCkDic (line 117) | private static Dictionary<string, string> ConvertCkItemListToCkDic(
FILE: src/Ray.BiliBiliTool.Infrastructure/Cookie/CookieStrFactory.cs
class CookieStrFactory (line 6) | public class CookieStrFactory<TCookieInfo>(IConfiguration configuration)
method GetCookie (line 13) | public TCookieInfo GetCookie(int index)
method CreateNew (line 20) | public static TCookieInfo CreateNew(string cookie)
method GetCookieDictionary (line 29) | private Dictionary<int, Dictionary<string, string>> GetCookieDictionary()
method CookeStrListToCookieDic (line 35) | private Dictionary<int, Dictionary<string, string>> CookeStrListToCook...
method CkStrToDictionary (line 48) | private static Dictionary<string, string> CkStrToDictionary(string ckStr)
method DictionaryToCkStr (line 61) | private string DictionaryToCkStr(Dictionary<string, string> dic)
FILE: src/Ray.BiliBiliTool.Infrastructure/Enums/PlatformType.cs
type PlatformType (line 3) | public enum PlatformType
FILE: src/Ray.BiliBiliTool.Infrastructure/Extensions/ICollectionExtensions.cs
class ICollectionExtensions (line 3) | public static class ICollectionExtensions
method AddIfNotExist (line 5) | public static void AddIfNotExist<T>(this ICollection<T> source, T add)
method AddIfNotExist (line 11) | public static void AddIfNotExist<T>(this ICollection<T> source, T add,...
FILE: src/Ray.BiliBiliTool.Infrastructure/Extensions/KeyValuePairExtensions.cs
class KeyValuePairExtensions (line 3) | public static class KeyValuePairExtensions
method New (line 16) | public static KeyValuePair<TNewKey, TNewValue> New<TKey, TValue, TNewK...
method NewKey (line 34) | public static KeyValuePair<TNewKey, TValue> NewKey<TKey, TValue, TNewK...
method NewKey (line 51) | public static KeyValuePair<TNewKey, TValue> NewKey<TKey, TValue, TNewK...
method NewValue (line 68) | public static KeyValuePair<TKey, TNewValue> NewValue<TKey, TValue, TNe...
method NewValue (line 85) | public static KeyValuePair<TKey, TNewValue> NewValue<TKey, TValue, TNe...
FILE: src/Ray.BiliBiliTool.Infrastructure/Extensions/TypeExtensions.cs
class TypeExtensions (line 5) | public static class TypeExtensions
method GetPropertyDescription (line 13) | public static string GetPropertyDescription(this Type type, string pro...
FILE: src/Ray.BiliBiliTool.Infrastructure/Global.cs
class Global (line 5) | public class Global
FILE: src/Ray.BiliBiliTool.Infrastructure/Helpers/IpHelper.cs
class IpHelper (line 3) | public class IpHelper
method GetIp (line 5) | public static string? GetIp()
FILE: src/Ray.BiliBiliTool.Infrastructure/Helpers/ObjectHelper.cs
class ObjectHelper (line 5) | public static class ObjectHelper
method ObjectToDictionary (line 7) | public static Dictionary<string, object?> ObjectToDictionary(object obj)
FILE: src/Ray.BiliBiliTool.Infrastructure/Helpers/PasswordHelper.cs
class PasswordHelper (line 5) | public class PasswordHelper
method HashPassword (line 7) | public static (string hash, string salt) HashPassword(string password)
method VerifyPassword (line 15) | public static bool VerifyPassword(string password, string salt, string...
method ComputeHash (line 21) | private static string ComputeHash(string password, string salt)
FILE: src/Ray.BiliBiliTool.Infrastructure/Helpers/RandomHelper.cs
class RandomHelper (line 3) | public class RandomHelper
method GenerateCode (line 7) | public string GenerateCode(int codeCount)
FILE: src/Ray.BiliBiliTool.Infrastructure/Helpers/RegexHelper.cs
class RegexHelper (line 5) | public class RegexHelper
method QuerySingle (line 7) | public static string QuerySingle(string source, string pattern)
method QueryMultiple (line 13) | public static List<string> QueryMultiple(string source, string pattern)
method SubstringSingle (line 35) | public static string SubstringSingle(string source, string startStr, s...
method SubstringMultiple (line 49) | public static List<string> SubstringMultiple(string source, string sta...
FILE: src/Ray.BiliBiliTool.Infrastructure/Helpers/ZipHelper.cs
class ZipHelper (line 9) | public class ZipHelper
method ReadGzip (line 17) | public static string ReadGzip(byte[] bytes, string encoding = "UTF-8")
FILE: src/Ray.BiliBiliTool.Infrastructure/JsonSerializerOptionsBuilder.cs
class JsonSerializerOptionsBuilder (line 8) | public sealed class JsonSerializerOptionsBuilder
method JsonSerializerOptionsBuilder (line 10) | static JsonSerializerOptionsBuilder()
method JsonSerializerOptionsBuilder (line 22) | private JsonSerializerOptionsBuilder()
method Create (line 27) | public static JsonSerializerOptionsBuilder Create()
method Build (line 32) | public JsonSerializerOptions Build()
FILE: src/Ray.BiliBiliTool.Infrastructure/JsonSerializerOptionsBuilderExtensions.cs
class JsonSerializerOptionsBuilderExtensions (line 7) | public static class JsonSerializerOptionsBuilderExtensions
method SetActionBase (line 9) | private static JsonSerializerOptionsBuilder SetActionBase(
method SetCamelCase (line 20) | public static JsonSerializerOptionsBuilder SetCamelCase(
method SetEncoderToUnicodeRangeAll (line 27) | public static JsonSerializerOptionsBuilder SetEncoderToUnicodeRangeAll(
method Configure (line 34) | public static JsonSerializerOptionsBuilder Configure(
method BuildAndSaveToDefault (line 46) | private static JsonSerializerOptions BuildAndSaveToDefault(
method GetOrBuildDefaultOptions (line 55) | public static JsonSerializerOptions GetOrBuildDefaultOptions(
FILE: src/Ray.BiliBiliTool.Web/Auth/CustomAuthStateProvider.cs
class CustomAuthStateProvider (line 6) | public class CustomAuthStateProvider(IHttpContextAccessor httpContextAcc...
method GetAuthenticationStateAsync (line 9) | public override Task<AuthenticationState> GetAuthenticationStateAsync()
method NotifyAuthenticationStateChanged (line 22) | public void NotifyAuthenticationStateChanged()
FILE: src/Ray.BiliBiliTool.Web/Components/Comps/BlazingJob.razor.cs
class BlazingJob (line 10) | public partial class BlazingJob : ComponentBase
method OnInitializedAsync (line 49) | protected override async Task OnInitializedAsync()
method SearchJobGroup (line 63) | async Task<IEnumerable<string>> SearchJobGroup(string value)
method OnSetIsValid (line 83) | private void OnSetIsValid(bool value)
method Validate (line 91) | public async Task Validate()
method ValidateJobName (line 107) | private async Task<string?> ValidateJobName(string name)
method OnJobClassValueChanged (line 130) | private async Task OnJobClassValueChanged(Type jobType)
FILE: src/Ray.BiliBiliTool.Web/Components/Comps/BlazingJob.razor.js
class BlazingJob (line 1) | class BlazingJob {
FILE: src/Ray.BiliBiliTool.Web/Components/Comps/BlazingTrigger.razor.cs
class BlazingTrigger (line 5) | public partial class BlazingTrigger : ComponentBase
method Validate (line 7) | public Task Validate()
FILE: src/Ray.BiliBiliTool.Web/Components/Comps/BlazingTrigger.razor.js
class BlazingTrigger (line 1) | class BlazingTrigger {
FILE: src/Ray.BiliBiliTool.Web/Components/Comps/DefaultJobUI.razor.cs
class DefaultJobUI (line 5) | public partial class DefaultJobUI : ComponentBase { }
FILE: src/Ray.BiliBiliTool.Web/Components/Pages/Admin.razor.cs
class Admin (line 7) | public partial class Admin : ComponentBase
method TogglePasswordVisibility (line 30) | private void TogglePasswordVisibility()
method ToggleCurrentPasswordVisibility (line 46) | private void ToggleCurrentPasswordVisibility()
method OnInitializedAsync (line 62) | protected override async Task OnInitializedAsync()
method ChangePasswordAsync (line 67) | private async Task ChangePasswordAsync()
FILE: src/Ray.BiliBiliTool.Web/Components/Pages/Admin.razor.js
class Admin (line 1) | class Admin {
FILE: src/Ray.BiliBiliTool.Web/Components/Pages/Configs/BaseConfigComponent.cs
class BaseConfigComponent (line 10) | public abstract class BaseConfigComponent<T> : ComponentBase
method GetJobKey (line 35) | protected virtual JobKey? GetJobKey() => null;
method GetTriggerName (line 40) | protected virtual string GetTriggerName(JobKey jobKey) => $"{jobKey}.C...
method OnInitializedAsync (line 42) | protected override async Task OnInitializedAsync()
method LoadConfigAsync (line 47) | protected Task LoadConfigAsync()
method HandleValidSubmitAsync (line 70) | protected virtual async Task HandleValidSubmitAsync()
method ControlScheduledJobAsyc (line 113) | private async Task ControlScheduledJobAsyc(JobKey jobKey, bool isEnable)
method UpdateJobCronAsync (line 130) | private async Task UpdateJobCronAsync(JobKey jobKey, string? cronExpre...
method GetSaveSuccessMessage (line 159) | private MarkupString GetSaveSuccessMessage()
method GetSqliteConfigurationProvider (line 173) | private SqliteConfigurationProvider? GetSqliteConfigurationProvider()
FILE: src/Ray.BiliBiliTool.Web/Components/Pages/Configs/ChargeTaskConfig.razor.cs
class ChargeTaskConfig (line 9) | public partial class ChargeTaskConfig : BaseConfigComponent<ChargeTaskOp...
method OnInitializedAsync (line 19) | protected override Task OnInitializedAsync()
method OnSpecifyUpToggled (line 28) | private void OnSpecifyUpToggled(bool isSpecified)
method SetSupportAuthor (line 34) | private Task SetSupportAuthor()
method GetJobKey (line 40) | protected override JobKey GetJobKey() => ChargeJob.Key;
FILE: src/Ray.BiliBiliTool.Web/Components/Pages/Configs/DailyJobConfig.razor.cs
class DailyJobConfig (line 9) | public partial class DailyJobConfig : BaseConfigComponent<DailyTaskOptions>
method GetJobKey (line 16) | protected override JobKey GetJobKey() => DailyJob.Key;
FILE: src/Ray.BiliBiliTool.Web/Components/Pages/Configs/DailyJobConfig.razor.js
class DailyJobConfig (line 1) | class DailyJobConfig {
FILE: src/Ray.BiliBiliTool.Web/Components/Pages/Configs/LiveFansMedalTaskConfig.razor.cs
class LiveFansMedalTaskConfig (line 9) | public partial class LiveFansMedalTaskConfig : BaseConfigComponent<LiveF...
method GetJobKey (line 18) | protected override JobKey GetJobKey() => LiveFansMedalJob.Key;
FILE: src/Ray.BiliBiliTool.Web/Components/Pages/Configs/LiveLotteryTaskConfig.razor.cs
class LiveLotteryTaskConfig (line 9) | public partial class LiveLotteryTaskConfig : BaseConfigComponent<LiveLot...
method GetJobKey (line 18) | protected override JobKey GetJobKey() => LiveLotteryJob.Key;
FILE: src/Ray.BiliBiliTool.Web/Components/Pages/Configs/MangaPrivilegeTaskConfig.razor.cs
class MangaPrivilegeTaskConfig (line 9) | public partial class MangaPrivilegeTaskConfig : BaseConfigComponent<Mang...
method GetJobKey (line 18) | protected override JobKey GetJobKey() => MangaPrivilegeJob.Key;
FILE: src/Ray.BiliBiliTool.Web/Components/Pages/Configs/MangaTaskConfig.razor.cs
class MangaTaskConfig (line 9) | public partial class MangaTaskConfig : BaseConfigComponent<MangaTaskOpti...
method GetJobKey (line 16) | protected override JobKey GetJobKey() => MangaJob.Key;
FILE: src/Ray.BiliBiliTool.Web/Components/Pages/Configs/Silver2CoinTaskConfig.razor.cs
class Silver2CoinTaskConfig (line 9) | public partial class Silver2CoinTaskConfig : BaseConfigComponent<Silver2...
method GetJobKey (line 18) | protected override JobKey GetJobKey() => Silver2CoinJob.Key;
FILE: src/Ray.BiliBiliTool.Web/Components/Pages/Configs/UnfollowBatchedTaskConfig.razor.cs
class UnfollowBatchedTaskConfig (line 9) | public partial class UnfollowBatchedTaskConfig : BaseConfigComponent<Unf...
method GetJobKey (line 18) | protected override JobKey GetJobKey() => UnfollowBatchedJob.Key;
method OnInitializedAsync (line 20) | protected override async Task OnInitializedAsync()
FILE: src/Ray.BiliBiliTool.Web/Components/Pages/Configs/VipBigPointConfig.razor.cs
class VipBigPointConfig (line 9) | public partial class VipBigPointConfig : BaseConfigComponent<VipBigPoint...
method GetJobKey (line 17) | protected override JobKey GetJobKey() => VipBigPointJob.Key;
FILE: src/Ray.BiliBiliTool.Web/Components/Pages/Configs/VipPrivilegeConfig.razor.cs
class VipPrivilegeConfig (line 9) | public partial class VipPrivilegeConfig : BaseConfigComponent<VipPrivile...
method GetJobKey (line 17) | protected override JobKey GetJobKey() => VipPrivilegeJob.Key;
FILE: src/Ray.BiliBiliTool.Web/Components/Pages/Login.razor.cs
class Login (line 7) | public partial class Login : ComponentBase
method TogglePasswordVisibility (line 19) | private void TogglePasswordVisibility()
method OnInitialized (line 38) | protected override void OnInitialized()
FILE: src/Ray.BiliBiliTool.Web/Components/Pages/Login.razor.js
class Login (line 1) | class Login {
FILE: src/Ray.BiliBiliTool.Web/Components/Pages/Schedules/HistoryDialog.razor.cs
class HistoryDialog (line 11) | public partial class HistoryDialog : ComponentBase
method Close (line 36) | void Close() => MudDialog.Cancel();
method OnInitializedAsync (line 38) | protected override async Task OnInitializedAsync()
method GetMoreLogs (line 43) | private async Task GetMoreLogs()
method OnRefreshHistory (line 75) | private async Task OnRefreshHistory()
method OnMoreDetails (line 85) | private void OnMoreDetails(ExecutionLog log, string title)
method GetExecutionTime (line 98) | private string GetExecutionTime(ExecutionLog log)
method GetTimelineDotColor (line 132) | private Color GetTimelineDotColor(ExecutionLog log)
FILE: src/Ray.BiliBiliTool.Web/Components/Pages/Schedules/LogsDialog.razor.cs
class LogsDialog (line 11) | public partial class LogsDialog : ComponentBase
method Close (line 33) | void Close() => MudDialog.Cancel();
method OnInitializedAsync (line 42) | protected override async Task OnInitializedAsync()
method OnRefreshLogs (line 74) | private async Task OnRefreshLogs()
method GetLogLevelClass (line 99) | private string GetLogLevelClass(string logLevel)
method ClearDisplay (line 110) | private void ClearDisplay()
method Dispose (line 116) | public void Dispose()
FILE: src/Ray.BiliBiliTool.Web/Components/Pages/Schedules/Schedules.razor.cs
class Schedules (line 15) | public partial class Schedules : ComponentBase, IDisposable
method OnInitializedAsync (line 50) | protected override async Task OnInitializedAsync()
method Dispose (line 56) | public void Dispose() => UnRegisterEventListeners();
method IsRunActionDisabled (line 58) | internal bool IsRunActionDisabled(ScheduleModel model) =>
method IsPauseActionDisabled (line 61) | internal bool IsPauseActionDisabled(ScheduleModel model) =>
method IsTriggerNowActionDisabled (line 66) | internal bool IsTriggerNowActionDisabled(ScheduleModel model) =>
method IsHistoryActionDisabled (line 71) | internal bool IsHistoryActionDisabled(ScheduleModel model) =>
method RegisterEventListeners (line 74) | private void RegisterEventListeners()
method RefreshJobs (line 86) | private async Task RefreshJobs()
method UnRegisterEventListeners (line 102) | private void UnRegisterEventListeners()
method SchedulerListenerSvc_OnTriggerPaused (line 114) | private async void SchedulerListenerSvc_OnTriggerPaused(object? sender...
method SchedulerListenerSvc_OnTriggerResumed (line 129) | private async void SchedulerListenerSvc_OnTriggerResumed(
method SchedulerListenerSvc_OnJobUnscheduled (line 147) | private async void SchedulerListenerSvc_OnJobUnscheduled(
method SchedulerListenerSvc_OnJobDeleted (line 156) | private async void SchedulerListenerSvc_OnJobDeleted(object? sender, E...
method SchedulerListenerSvc_OnTriggerFinalized (line 170) | private async void SchedulerListenerSvc_OnTriggerFinalized(
method OnTriggerRemoved (line 181) | private async Task OnTriggerRemoved(TriggerKey triggerKey) =>
method SchedulerListenerSvc_OnJobWasExecuted (line 245) | private async void SchedulerListenerSvc_OnJobWasExecuted(
method SchedulerListenerSvc_OnJobScheduled (line 272) | private async void SchedulerListenerSvc_OnJobScheduled(object? sender,...
method SchedulerListenerSvc_OnJobToBeExecuted (line 293) | private async void SchedulerListenerSvc_OnJobToBeExecuted(
method FindScheduleModelByTrigger (line 313) | private IEnumerable<ScheduleModel> FindScheduleModelByTrigger(TriggerK...
method FindScheduleModel (line 320) | private IEnumerable<ScheduleModel> FindScheduleModel(JobKey jobKey, Tr...
method UpdateScheduleModelsLastExecution (line 329) | private async Task UpdateScheduleModelsLastExecution()
method OnResumeScheduleJob (line 368) | private async Task OnResumeScheduleJob(ScheduleModel model)
method OnPauseScheduleJob (line 379) | private async Task OnPauseScheduleJob(ScheduleModel model)
method OnJobHistory (line 390) | private void OnJobHistory(ScheduleModel model)
method OnLogs (line 419) | private void OnLogs(ScheduleModel model)
method OnTriggerNow (line 447) | private async Task OnTriggerNow(ScheduleModel model)
FILE: src/Ray.BiliBiliTool.Web/Components/Pages/Schedules/Schedules.razor.js
class Schedules (line 1) | class Schedules {
FILE: src/Ray.BiliBiliTool.Web/Constants.cs
class Constants (line 3) | public static class Constants
type ScheduleDialogTab (line 8) | public enum ScheduleDialogTab
FILE: src/Ray.BiliBiliTool.Web/Controllers/AuthController.cs
class AuthController (line 9) | [ApiController]
method Login (line 13) | [HttpPost("login")]
method Logout (line 45) | [HttpGet("logout")]
FILE: src/Ray.BiliBiliTool.Web/Controllers/TestController.cs
class TestController (line 5) | [ApiController]
method Config (line 9) | [HttpGet("config")]
FILE: src/Ray.BiliBiliTool.Web/Extensions/ExecutionLogExtensions.cs
class ExecutionLogExtensions (line 6) | public static class ExecutionLogExtensions
method GetShortResultMessage (line 10) | public static string GetShortResultMessage(this ExecutionLog log)
method GetShortExceptionMessage (line 46) | public static string GetShortExceptionMessage(this ExecutionLog log)
method ShowExecutionDetailButton (line 69) | public static bool ShowExecutionDetailButton(this ExecutionLog log) =>
FILE: src/Ray.BiliBiliTool.Web/Extensions/ModelExtensions.cs
class ModelExtensions (line 9) | public static class ModelExtensions
method GetTriggerTypeIcon (line 11) | public static string GetTriggerTypeIcon(this TriggerType triggerType)
method GetDataMapType (line 28) | public static DataMapType GetDataMapType(this KeyValuePair<string, obj...
method GetDataMapTypeDescription (line 72) | public static string GetDataMapTypeDescription(this KeyValuePair<strin...
method ToHumanTimeString (line 89) | public static string ToHumanTimeString(this TimeSpan span, int signifi...
method EqualsTriggerKey (line 113) | public static bool EqualsTriggerKey(this ScheduleModel model, TriggerK...
method Equals (line 118) | public static bool Equals(this ScheduleModel model, JobKey? jobKey, Tr...
method GetTriggerType (line 142) | public static TriggerType GetTriggerType(this ITrigger trigger)
method ToTimeOfDay (line 156) | public static TimeOfDay ToTimeOfDay(this TimeSpan timeSpan)
method ToQuartzIntervalUnit (line 161) | public static Quartz.IntervalUnit ToQuartzIntervalUnit(this IntervalUn...
method ToBlazingQuartzIntervalUnit (line 166) | public static IntervalUnit ToBlazingQuartzIntervalUnit(this Quartz.Int...
method ToJobKey (line 171) | public static JobKey ToJobKey(this Key key)
method ToTriggerKey (line 176) | public static TriggerKey ToTriggerKey(this Key key)
method NonNullStackTrace (line 187) | public static string? NonNullStackTrace(this Exception exception)
FILE: src/Ray.BiliBiliTool.Web/Extensions/ServiceCollectionExtension.cs
class ServiceCollectionExtension (line 8) | public static class ServiceCollectionExtension
method AddWebServices (line 10) | public static IServiceCollection AddWebServices(this IServiceCollectio...
method AddAuthServices (line 17) | public static IServiceCollection AddAuthServices(this IServiceCollecti...
FILE: src/Ray.BiliBiliTool.Web/Extensions/ServiceCollectionQuartzConfiguratorExtensions.cs
class ServiceCollectionQuartzConfiguratorExtensions (line 6) | public static class ServiceCollectionQuartzConfiguratorExtensions
method AddBiliJobs (line 10) | public static IServiceCollectionQuartzConfigurator AddBiliJobs(
FILE: src/Ray.BiliBiliTool.Web/Jobs/BaseJob.cs
class BaseJob (line 8) | public abstract class BaseJob<TJob>(ILogger<TJob> logger) : IJob
method Execute (line 11) | public async Task Execute(IJobExecutionContext context)
method DoExecuteAsync (line 52) | protected abstract Task DoExecuteAsync(IJobExecutionContext context);
FILE: src/Ray.BiliBiliTool.Web/Jobs/ChargeJob.cs
class ChargeJob (line 6) | public class ChargeJob(ILogger<ChargeJob> logger, IChargeTaskAppService ...
method DoExecuteAsync (line 12) | protected override async Task DoExecuteAsync(IJobExecutionContext cont...
FILE: src/Ray.BiliBiliTool.Web/Jobs/DailyJob.cs
class DailyJob (line 6) | public class DailyJob(ILogger<DailyJob> logger, IDailyTaskAppService app...
method DoExecuteAsync (line 12) | protected override async Task DoExecuteAsync(IJobExecutionContext cont...
FILE: src/Ray.BiliBiliTool.Web/Jobs/LiveFansMedalJob.cs
class LiveFansMedalJob (line 6) | public class LiveFansMedalJob(ILogger<LiveFansMedalJob> logger, ILiveFan...
method DoExecuteAsync (line 12) | protected override async Task DoExecuteAsync(IJobExecutionContext cont...
FILE: src/Ray.BiliBiliTool.Web/Jobs/LiveLotteryJob.cs
class LiveLotteryJob (line 6) | public class LiveLotteryJob(ILogger<LiveLotteryJob> logger, ILiveLottery...
method DoExecuteAsync (line 12) | protected override async Task DoExecuteAsync(IJobExecutionContext cont...
FILE: src/Ray.BiliBiliTool.Web/Jobs/LoginJob.cs
class LoginJob (line 6) | public class LoginJob(ILogger<LoginJob> logger, ILoginTaskAppService app...
method DoExecuteAsync (line 12) | protected override async Task DoExecuteAsync(IJobExecutionContext cont...
FILE: src/Ray.BiliBiliTool.Web/Jobs/MangaJob.cs
class MangaJob (line 6) | public class MangaJob(ILogger<MangaJob> logger, IMangaTaskAppService app...
method DoExecuteAsync (line 12) | protected override async Task DoExecuteAsync(IJobExecutionContext cont...
FILE: src/Ray.BiliBiliTool.Web/Jobs/MangaPrivilegeJob.cs
class MangaPrivilegeJob (line 6) | public class MangaPrivilegeJob(
method DoExecuteAsync (line 14) | protected override async Task DoExecuteAsync(IJobExecutionContext cont...
FILE: src/Ray.BiliBiliTool.Web/Jobs/Silver2CoinJob.cs
class Silver2CoinJob (line 6) | public class Silver2CoinJob(ILogger<Silver2CoinJob> logger, ISilver2Coin...
method DoExecuteAsync (line 12) | protected override async Task DoExecuteAsync(IJobExecutionContext cont...
FILE: src/Ray.BiliBiliTool.Web/Jobs/TestBiliJob.cs
class TestBiliJob (line 6) | public class TestBiliJob(ILogger<TestBiliJob> logger, ITestAppService ap...
method DoExecuteAsync (line 12) | protected override async Task DoExecuteAsync(IJobExecutionContext cont...
FILE: src/Ray.BiliBiliTool.Web/Jobs/UnfollowBatchedJob.cs
class UnfollowBatchedJob (line 6) | public class UnfollowBatchedJob(
method DoExecuteAsync (line 14) | protected override async Task DoExecuteAsync(IJobExecutionContext cont...
FILE: src/Ray.BiliBiliTool.Web/Jobs/VipBigPointJob.cs
class VipBigPointJob (line 6) | public class VipBigPointJob(ILogger<VipBigPointJob> logger, IVipBigPoint...
method DoExecuteAsync (line 12) | protected override async Task DoExecuteAsync(IJobExecutionContext cont...
FILE: src/Ray.BiliBiliTool.Web/Jobs/VipPrivilegeJob.cs
class VipPrivilegeJob (line 6) | public class VipPrivilegeJob(
method DoExecuteAsync (line 14) | protected override async Task DoExecuteAsync(IJobExecutionContext cont...
FILE: src/Ray.BiliBiliTool.Web/Services/AuthService.cs
type IAuthService (line 9) | public interface IAuthService
method LoginAsync (line 11) | Task<ClaimsIdentity> LoginAsync(string username, string password);
method ChangePasswordAsync (line 12) | Task ChangePasswordAsync(string username, string currentPassword, stri...
method GetAdminUserNameAsync (line 13) | Task<string> GetAdminUserNameAsync();
class AuthService (line 16) | public class AuthService(IDbContextFactory<BiliDbContext> dbFactory) : I...
method LoginAsync (line 18) | public async Task<ClaimsIdentity> LoginAsync(string username, string p...
method ChangePasswordAsync (line 39) | public async Task ChangePasswordAsync(
method GetAdminUserNameAsync (line 62) | public async Task<string> GetAdminUserNameAsync()
FILE: src/Ray.BiliBiliTool.Web/Services/IJobUIProvider.cs
type IJobUIProvider (line 3) | public interface IJobUIProvider
method GetJobUIType (line 5) | Type GetJobUIType(string? jobTypeFullName);
FILE: test/AppServiceTest/DailyTask/DonateCoinsTest.cs
class DonateCoinsTest (line 8) | public class DonateCoinsTest
method DonateCoinsTest (line 10) | public DonateCoinsTest()
method Test1 (line 15) | [Fact]
FILE: test/AppServiceTest/VipServiceTest.cs
class VipServiceTest (line 10) | public class VipServiceTest
method VipServiceTest (line 12) | public VipServiceTest()
method CompleteV2Test (line 17) | [Fact]
method ReceiveV2Test (line 26) | [Fact]
FILE: test/BiliAgentTest/LiveTraceApiTest.cs
class LiveTraceApiTest (line 13) | public class LiveTraceApiTest
method LiveTraceApiTest (line 15) | public LiveTraceApiTest()
method WebHeartBeat_Normal_Success (line 20) | [Fact]
FILE: test/BiliAgentTest/VideoApiTest.cs
class VideoApiTest (line 13) | public class VideoApiTest
method VideoApiTest (line 15) | public VideoApiTest()
method GetLiveWalletStatus_Normal_Success (line 20) | [Fact]
method GetBangumiTest (line 41) | [Fact]
method GetRandomVideoOfRanking (line 53) | [Fact]
FILE: test/ConfigTest/TestDefaultValue.cs
class TestDefaultValue (line 16) | public class TestDefaultValue
method TestDefaultValue (line 18) | public TestDefaultValue()
method Test1 (line 23) | [Fact]
FILE: test/ConfigTest/UnitTest1.cs
class UnitTest1 (line 18) | public class UnitTest1
method WebProxyTest (line 20) | [Fact]
method Test1 (line 56) | [Fact]
method TestEnvKeyDelimiter (line 80) | [Fact]
method LoadPrefixConfigByEnvWithNoError (line 91) | [Fact]
method LoadPrefixConfigByEnvWhenValueIsNullWithNoError2 (line 103) | [Fact]
method CoverConfigByEnvWithNoError (line 114) | [Fact]
method TestSetConfiguration (line 129) | [Fact]
method TestHostDefaults (line 159) | [Fact]
method Test (line 165) | [Fact]
FILE: test/DomainServiceTest/ArticleDomainServiceTest.cs
class ArticleDomainServiceTest (line 5) | public class ArticleDomainServiceTest
method ArticleDomainServiceTest (line 9) | public ArticleDomainServiceTest(ITestOutputHelper output)
FILE: test/DomainServiceTest/CalculateUpgradeTimeTest.cs
class CalculateUpgradeTimeTest (line 5) | public class CalculateUpgradeTimeTest
method CalculateUpgradeTimeTest (line 7) | public CalculateUpgradeTimeTest()
method TestCalculateUpgradeTime (line 12) | [Fact]
FILE: test/DomainServiceTest/DonateCoinDomainServiceTest.cs
class DonateCoinDomainServiceTest (line 3) | public class DonateCoinDomainServiceTest
method DonateCoinDomainServiceTest (line 5) | public DonateCoinDomainServiceTest()
FILE: test/DomainServiceTest/VideoDomainServiceTest.cs
class VideoDomainServiceTest (line 6) | public class VideoDomainServiceTest
method VideoDomainServiceTest (line 8) | public VideoDomainServiceTest()
method GetVideoCountOfUp_Test (line 13) | [Fact]
method GetRandomVideoOfUp_Test (line 23) | [Fact]
FILE: test/InfrastructureTest/WbiHelperTest.cs
class WbiHelperTest (line 6) | public class WbiHelperTest
method Replace_Test (line 8) | [Fact]
FILE: test/LogTest/LogConstants.cs
class LogConstants (line 5) | public class LogConstants
FILE: test/LogTest/TestCoolPush.cs
class TestCoolPush (line 13) | public class TestCoolPush
method TestCoolPush (line 17) | public TestCoolPush()
method Test2 (line 25) | [Fact]
FILE: test/LogTest/TestDingTalk.cs
class TestDingTalk (line 11) | public class TestDingTalk
method TestDingTalk (line 15) | public TestDingTalk()
method Test2 (line 31) | [Fact]
FILE: test/LogTest/TestMicrosoftTeams.cs
class TestMicrosoftTeams (line 13) | public class TestMicrosoftTeams
method TestMicrosoftTeams (line 17) | public TestMicrosoftTeams()
method Test (line 25) | [Fact]
FILE: test/LogTest/TestPushPlus.cs
class TestPushPlus (line 13) | public class TestPushPlus
method TestPushPlus (line 19) | public TestPushPlus()
method Test2 (line 29) | [Fact]
FILE: test/LogTest/TestServerChan.cs
class TestServerChan (line 13) | public class TestServerChan
method TestServerChan (line 18) | public TestServerChan()
method Test (line 27) | [Fact]
method TestTurbo (line 42) | [Fact]
FILE: test/LogTest/TestTelegram.cs
class TestTelegram (line 11) | public class TestTelegram
method TestTelegram (line 16) | public TestTelegram()
method Test2 (line 25) | [Fact]
FILE: test/LogTest/TestWorkWeiXin.cs
class TestWorkWeiXin (line 13) | public class TestWorkWeiXin
method TestWorkWeiXin (line 17) | public TestWorkWeiXin()
method Test2 (line 25) | [Fact]
FILE: test/LogTest/TestWorkWeiXinApp.cs
class TestWorkWeiXinApp (line 11) | public class TestWorkWeiXinApp
method TestWorkWeiXinApp (line 18) | public TestWorkWeiXinApp()
method Test (line 30) | [Fact]
FILE: test/Ray.BiliBiliTool.Agent.FunctionalTests/AccountApiTests.cs
class AccountApiTests (line 10) | public class AccountApiTests
method AccountApiTests (line 14) | public AccountApiTests()
method GetCoinBalance_Normal_GetCoinBalance (line 26) | [Fact]
FILE: test/Ray.BiliBiliTool.Agent.FunctionalTests/ArticleApiTests.cs
class ArticleApiTests (line 12) | public class ArticleApiTests
method ArticleApiTests (line 19) | public ArticleApiTests()
method SearchUpArticlesByUpIdAsync_InputId_GetResultSuccess (line 35) | [Fact]
method SearchArticleInfoAsync_ValidId_GetResultSuccess (line 55) | [Fact]
method SearchArticleInfoAsync_InvalidId_NoResult (line 70) | [Fact]
method AddCoinForArticleAsync_CoinSelf_Fail (line 90) | [Fact]
method AddCoinForArticleAsync_Normal_Success (line 105) | [Fact]
method LikeAsync_AlreadyLike_GetResultSuccess (line 128) | [Fact]
FILE: test/Ray.BiliBiliTool.Agent.FunctionalTests/ChargeApiTest.cs
class ChargeApiTest (line 10) | public class ChargeApiTest
method ChargeApiTest (line 16) | public ChargeApiTest()
method ChargeV2Async_SendRequest_NotEnough (line 31) | [Fact]
FILE: test/Ray.BiliBiliTool.Agent.FunctionalTests/DailyTaskApiTests.cs
class DailyTaskApiTests (line 10) | public class DailyTaskApiTests
method DailyTaskApiTests (line 16) | public DailyTaskApiTests()
method GetDailyTaskRewardInfo_Normal_Success (line 29) | [Fact]
method GetDonateCoinExp_Normal_Success (line 42) | [Fact]
method ReceiveVipPrivilege_Normal_Success (line 55) | [Fact]
FILE: test/Ray.BiliBiliTool.Agent.FunctionalTests/HomeApiTests.cs
class HomeApiTests (line 9) | public class HomeApiTests
method HomeApiTests (line 15) | public HomeApiTests()
method GetHomePageAsync_Normal_Success (line 28) | [Fact]
FILE: test/Ray.BiliBiliTool.Agent.FunctionalTests/LiveApiTest.cs
class LiveApiTest (line 18) | public class LiveApiTest
method LiveApiTest (line 20) | public LiveApiTest()
method GetExchangeSilverStatus_Normal_Success (line 25) | [Fact]
method Silver2Coin_Normal_Success (line 48) | [Fact]
method GetLiveWalletStatus_Normal_Success (line 71) | [Fact]
method GetMedalWall_Normal_Success (line 91) | [Fact]
method WearMedalWall_Normal_Success (line 112) | [Fact]
method GetSpaceInfo_Normal_Success (line 130) | [Fact]
method SendLiveDanmuku_Normal_Success (line 156) | [Fact]
FILE: test/Ray.BiliBiliTool.Agent.FunctionalTests/VipBigPointApiTest.cs
class VipBigPointApiTest (line 13) | public class VipBigPointApiTest
method VipBigPointApiTest (line 20) | public VipBigPointApiTest(ITestOutputHelper output)
method GetTaskListAsync_Normal_Success (line 35) | [Fact]
method SignAsync_Normal_Success (line 48) | [Fact]
method GetVouchersInfoAsync_Normal_Success (line 63) | [Fact]
method GetVipExperienceAsync_Normal_Success (line 75) | [Fact]
method CompleteAsync_Normal_Success (line 96) | [Fact]
FILE: test/Ray.BiliBiliTool.Agent.FunctionalTests/VipMallApiTests.cs
class VipMallApiTests (line 11) | public class VipMallApiTests
method VipMallApiTests (line 17) | public VipMallApiTests()
method ViewVipMallAsync_Normal_Success (line 30) | [Fact]
FILE: test/Ray.BiliBiliTool.Agent.FunctionalTests/WbiServiceTest.cs
class WbiServiceTest (line 11) | public class WbiServiceTest
method WbiServiceTest (line 15) | public WbiServiceTest()
method SetWridAsync_SendRequest_SetWridSuccess (line 27) | [Fact]
method EncWbi_InputParams_GetCorrectWbiResult (line 53) | [Fact]
Condensed preview — 597 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,726K chars).
[
{
"path": ".config/dotnet-tools.json",
"chars": 245,
"preview": "{\n \"version\": 1,\n \"isRoot\": true,\n \"tools\": {\n \"csharpier\": {\n \"version\": \"1.0.3\",\n \"commands\": [\n "
},
{
"path": ".dockerignore",
"chars": 111,
"preview": "# .dockerignore\n\n.git\n.gitattributes\n.gitignore\n.github\n\n.editorconfig\n\nREADME.md\n\nDockerfile\n\n[b|B]in\n[O|o]bj\n"
},
{
"path": ".editorconfig",
"chars": 9720,
"preview": "# EditorConfig is awesome: https://EditorConfig.org\r\n\r\n# top-most EditorConfig file\r\nroot = true\r\n\r\n# Default settings:\r"
},
{
"path": ".github/ISSUE_TEMPLATE/bug-report----.md",
"chars": 677,
"preview": "---\nname: Bug report(缺陷)\nabout: 缺陷或异常\ntitle: \"【Bug】<请在标题中清晰地概述你要反馈的异常或缺陷>\"\nlabels: ''\nassignees: ''\n\n---\n\n<!-- 请完整填写如下信息"
},
{
"path": ".github/ISSUE_TEMPLATE/bug-report-qinglong----.md",
"chars": 1137,
"preview": "---\nname: 【QingLong】Bug report(缺陷)\nabout: 缺陷或异常(青龙专属)\ntitle: \"【Bug】【青龙】<请在标题中清晰地概述你要反馈的异常或缺陷>\"\nlabels: ''\nassignees: ''\n"
},
{
"path": ".github/ISSUE_TEMPLATE/feature-request----.md",
"chars": 263,
"preview": "---\nname: Feature request(建议)\nabout: 建议或需求\ntitle: \"【建议】<请在标题中清晰地概述你的建议>\"\nlabels: 建议/enhancement\nassignees: ''\n\n---\n\n<!--"
},
{
"path": ".github/ISSUE_TEMPLATE/other----.md",
"chars": 225,
"preview": "---\nname: Other(其他)\nabout: 既不是Bug也不是建议的或不能确定的其他议题\ntitle: \"【其他】<请在标题中清晰地概述内容>\"\nlabels: ''\nassignees: ''\n\n---\n\n### 确认\n\n- ["
},
{
"path": ".github/PULL_REQUEST_TEMPLATE.md",
"chars": 44,
"preview": "<!-- 请详细描述你要PR的内容 -->\n\n### 内容\n\n<请描述您将贡献的内容>\n"
},
{
"path": ".github/pull.yml",
"chars": 383,
"preview": "version: \"1\"\nrules: # Array of rules\n - base: main # Required. Target branch\n upstream: RayWangQvQ:main # Requir"
},
{
"path": ".github/workflows/auto-deploy-tencent-scf.yml",
"chars": 1897,
"preview": "# https://github.com/June1991/serverless-express\n\nname: auto-deploy-tencent-scf\n\non:\n workflow_dispatch:\n schedule:\n "
},
{
"path": ".github/workflows/codeql-analysis.yml",
"chars": 2496,
"preview": "# For most projects, this workflow file will not need changing; you simply need\n# to commit it to your repository.\n#\n# Y"
},
{
"path": ".github/workflows/no-toxic-comments.yml",
"chars": 333,
"preview": "name: Check Toxic Comments\non: [issue_comment, pull_request_review]\n\njobs:\n toxic_check:\n runs-on: ubuntu-latest\n "
},
{
"path": ".github/workflows/publish-image.yml",
"chars": 2978,
"preview": "name: Publish image\n\non:\n workflow_dispatch:\n inputs:\n autoWithLatestTag:\n description: 'Auto Add Latest"
},
{
"path": ".github/workflows/publish-release.yml",
"chars": 1271,
"preview": "name: Publish release\n\non:\n workflow_dispatch:\n\npermissions:\n contents: write\n discussions: write\n\njobs:\n build:\n "
},
{
"path": ".github/workflows/repo-sync.yml",
"chars": 639,
"preview": "# 自动同步上游仓库\n\nname: repo-sync\n\non:\n workflow_dispatch:\n schedule:\n - cron: '0 1 * * 1,3,5'\n # UTC时区,比我们东八区早8小时,上面示"
},
{
"path": ".github/workflows/stale-issues.yml",
"chars": 860,
"preview": "name: Close Stale Issues\non:\n schedule:\n - cron: \"0 8 * * *\" # 每天的 00:00 运行\n workflow_dispatch:\n\npermissions:\n con"
},
{
"path": ".github/workflows/tag.yml",
"chars": 665,
"preview": "name: Tag\n\non:\n pull_request:\n types:\n - closed\n branches:\n - main\n\njobs:\n tag:\n name: add tag\n "
},
{
"path": ".github/workflows/verify-pr.yml",
"chars": 601,
"preview": "name: VerifyPR\non:\n pull_request_target:\n types: [opened, edited]\n\njobs:\n checkTargetBranch:\n runs-on: ubuntu-la"
},
{
"path": ".gitignore",
"chars": 6397,
"preview": "## Ignore Visual Studio temporary files, build results, and\n## files generated by popular Visual Studio add-ons.\n##\n## G"
},
{
"path": ".husky/pre-commit",
"chars": 103,
"preview": "#!/bin/sh\n. \"$(dirname \"$0\")/_/husky.sh\"\n\necho \"This is pre commit\"\ndotnet husky run --group pre-commit"
},
{
"path": ".husky/task-runner.json",
"chars": 733,
"preview": "{\n \"$schema\": \"https://alirezanet.github.io/Husky.Net/schema.json\",\n \"tasks\": [\n {\n \"name\": \"welcome-me"
},
{
"path": "CHANGELOG.md",
"chars": 6599,
"preview": "## 3.8.2\n- Fix[#1026]: 更新文档\n## 3.8.1\n- Fix[#1005]: 更新文档\n## 3.8.0\n- Feature: 使推送的更版本号信息更简洁\n- Fix[#998]: 修复企业微信 App 推送缺少 a"
},
{
"path": "Directory.Packages.props",
"chars": 5624,
"preview": "<Project>\n <PropertyGroup>\n <ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>\n </PropertyGroup>"
},
{
"path": "Dockerfile",
"chars": 2222,
"preview": "#See https://learn.microsoft.com/en-us/aspnet/core/host-and-deploy/docker/building-net-docker-images\nFROM mcr.microsoft."
},
{
"path": "LICENSE",
"chars": 35149,
"preview": " GNU GENERAL PUBLIC LICENSE\n Version 3, 29 June 2007\n\n Copyright (C) 2007 Free "
},
{
"path": "README.md",
"chars": 9456,
"preview": "\n\n<div align=\"center\">\n\n<h1 align=\"center\">\n\nBiliTool\n\n</h1>\n\n[;\n \n console.log(\"start"
},
{
"path": "bruno/app.bilibili.com/pgc/activity/deliver/material/receive.bru",
"chars": 2304,
"preview": "meta {\n name: receive\n type: http\n seq: 1\n}\n\npost {\n url: https://app.bilibili.com/pgc/activity/deliver/material/rec"
},
{
"path": "bruno/app.bilibili.com/pgc/activity/deliver/task/complete-ogv.bru",
"chars": 1692,
"preview": "meta {\n name: complete-ogv\n type: http\n seq: 2\n}\n\npost {\n url: https://app.bilibili.com/pgc/activity/deliver/task/co"
},
{
"path": "bruno/app.bilibili.com/pgc/activity/deliver/task/complete.bru",
"chars": 1499,
"preview": "meta {\n name: complete\n type: http\n seq: 1\n}\n\npost {\n url: https://app.bilibili.com/pgc/activity/deliver/task/comple"
},
{
"path": "bruno/app.bilibili.com/pgc/activity/score/task/receive/v2/dressbuyamount.bru",
"chars": 1794,
"preview": "meta {\n name: dressbuyamount\n type: http\n seq: 3\n}\n\npost {\n url: https://api.bilibili.com/pgc/activity/score/task/re"
},
{
"path": "bruno/app.bilibili.com/pgc/activity/score/task/receive/v2/ogvwatchnew.bru",
"chars": 1997,
"preview": "meta {\n name: ogvwatchnew\n type: http\n seq: 4\n}\n\npost {\n url: https://app.bilibili.com/pgc/activity/score/task/recei"
},
{
"path": "bruno/app.bilibili.com/pgc/activity/score/task/receive/v2/tvodbuy.bru",
"chars": 1780,
"preview": "meta {\n name: tvodbuy\n type: http\n seq: 2\n}\n\npost {\n url: https://api.bilibili.com/pgc/activity/score/task/receive/v"
},
{
"path": "bruno/app.bilibili.com/pgc/activity/score/task/receive/v2/vipmallbuy.bru",
"chars": 1787,
"preview": "meta {\n name: vipmallbuy\n type: http\n seq: 1\n}\n\npost {\n url: https://app.bilibili.com/pgc/activity/score/task/receiv"
},
{
"path": "bruno/app.bilibili.com/x/report/heartbeat/mobile/end.bru",
"chars": 1813,
"preview": "meta {\n name: end\n type: http\n seq: 1\n}\n\npost {\n url: https://app.bilibili.com/x/report/heartbeat/mobile\n body: for"
},
{
"path": "bruno/app.bilibili.com/x/report/heartbeat/mobile/start.bru",
"chars": 1796,
"preview": "meta {\n name: start\n type: http\n seq: 2\n}\n\npost {\n url: https://app.bilibili.com/x/report/heartbeat/mobile\n body: f"
},
{
"path": "bruno/big.bilibili.com/pgc/activity/score/task/sign.bru",
"chars": 1118,
"preview": "meta {\n name: sign\n type: http\n seq: 1\n}\n\npost {\n url: https://api.bilibili.com/pgc/activity/score/task/sign\n body:"
},
{
"path": "bruno/big.bilibili.com/x/vip/experience/add.bru",
"chars": 1128,
"preview": "meta {\n name: add\n type: http\n seq: 2\n}\n\npost {\n url: https://big.bilibili.com/x/vip/experience/add\n body: formUrlE"
},
{
"path": "bruno/bruno.json",
"chars": 112,
"preview": "{\n \"version\": \"1\",\n \"name\": \"Bili\",\n \"type\": \"collection\",\n \"ignore\": [\n \"node_modules\",\n \".git\"\n ]\n}"
},
{
"path": "bruno/environments/default.bru",
"chars": 1389,
"preview": "vars {\n phone: {{process.env.phone}}\n pwd: {{process.env.pwd}}\n mid: {{process.env.mid}}\n buvid: {{process.env.buvid"
},
{
"path": "bruno/mall.bilibili.com/combine.bru",
"chars": 11566,
"preview": "meta {\n name: combine\n type: http\n seq: 2\n}\n\nget {\n url: https://mall.bilibili.com/x/vip_point/task/combine?access_k"
},
{
"path": "bruno/mall.bilibili.com/folder.bru",
"chars": 35,
"preview": "meta {\n name: mall.bilibili.com\n}\n"
},
{
"path": "bruno/mall.bilibili.com/sign2.bru",
"chars": 3626,
"preview": "meta {\n name: sign2\n type: http\n seq: 1\n}\n\npost {\n url: https://mall.bilibili.com/pgc/activity/score/task/sign2?mobi"
},
{
"path": "bruno/passport.bilibili.com/x/passport-login/oauth2/login.bru",
"chars": 18656,
"preview": "meta {\n name: login\n type: http\n seq: 1\n}\n\npost {\n url: https://passport.bilibili.com/x/passport-login/oauth2/login\n"
},
{
"path": "bruno/passport.bilibili.com/x/passport-login/web/key.bru",
"chars": 818,
"preview": "meta {\n name: key\n type: http\n seq: 1\n}\n\nget {\n url: https://passport.bilibili.com/x/passport-login/web/key\n body: "
},
{
"path": "bruno/passport.bilibili.com/x/relation/followings/simple.bru",
"chars": 1798,
"preview": "meta {\n name: simple\n type: http\n seq: 1\n}\n\nget {\n url: https://passport.bilibili.com/x/relation/followings/simple?_"
},
{
"path": "bruno/passport.bilibili.com/x/relation/tag/special.bru",
"chars": 1793,
"preview": "meta {\n name: special\n type: http\n seq: 1\n}\n\nget {\n url: https://passport.bilibili.com/x/relation/tag/special?_devic"
},
{
"path": "bruno/passport.bilibili.com/x/v2/account/myinfo.bru",
"chars": 1524,
"preview": "meta {\n name: myinfo\n type: http\n seq: 1\n}\n\nget {\n url: https://passport.bilibili.com/x/v2/account/myinfo?access_key"
},
{
"path": "bruno/passport.bilibili.com/x/v2/feed/index.bru",
"chars": 901,
"preview": "meta {\n name: index\n type: http\n seq: 1\n}\n\nget {\n url: https://passport.bilibili.com/x/v2/feed/index\n body: none\n "
},
{
"path": "bruno/passport.bilibili.com/x/vip/web/vip_center/v2.bru",
"chars": 854,
"preview": "meta {\n name: v2\n type: http\n seq: 1\n}\n\nget {\n url: https://api.bilibili.com/x/vip/web/vip_center/v2\n body: none\n "
},
{
"path": "common.props",
"chars": 159,
"preview": "<Project>\n <PropertyGroup>\n <Authors>Ray</Authors>\n <Version>3.8.2</Version>\n <NoWarn>$(NoWarn);CS1591;CS0436<"
},
{
"path": "docker/README.md",
"chars": 2898,
"preview": "# Docker 使用说明\n<!-- TOC depthFrom:2 -->\n\n- [1. 前期工作](#1-前期工作)\n- [2. 方式一:一键脚本(推荐)](#2-方式一一键脚本推荐)\n- [3. 方式二:手动 Docker Compo"
},
{
"path": "docker/build/buildAndPushImage_multiArch.ps1",
"chars": 514,
"preview": "echo \"start to build\"\n# https://www.docker.com/blog/multi-arch-build-and-images-the-simple-way/\n# https://segmentfault.c"
},
{
"path": "docker/build/buildImage.cmd",
"chars": 146,
"preview": "@echo off\n\nREM start to build\necho Start to build docker image\n@echo on\ndocker build --tag zai7lou/bilibili_tool_pro:lat"
},
{
"path": "docker/build/buildImage_amd64.cmd",
"chars": 349,
"preview": "@echo off\n\nREM start to build\nREM https://www.docker.com/blog/multi-arch-build-and-images-the-simple-way/\nREM https://se"
},
{
"path": "docker/build/buildImage_arm64.cmd",
"chars": 317,
"preview": "@echo off\n\nREM start to build\nREM https://www.docker.com/blog/multi-arch-build-and-images-the-simple-way/\nREM https://se"
},
{
"path": "docker/entrypoint.sh",
"chars": 418,
"preview": "#!/bin/bash\nset -e\nset -o pipefail\n\necho \"Starting BiliTool container...\"\nmkdir -p /app/config\n\necho \"Running maintenanc"
},
{
"path": "docker/install.sh",
"chars": 9494,
"preview": "#!/usr/bin/env bash\n###\n# @Author: Ray zai7lou@outlook.com\n# @Date: 2023-02-11 23:13:19\n # @LastEditors: Ray zai7lou@out"
},
{
"path": "docker/sample/config/cookies.json",
"chars": 30,
"preview": "{\n \"BiliBiliCookies\":[\n ]\n}\n"
},
{
"path": "docker/sample/docker-compose.yml",
"chars": 333,
"preview": "services:\n bili_tool_web:\n image: ghcr.io/raywangqvq/bili_tool_web\n container_name: bili_tool_web\n restart: un"
},
{
"path": "docs/claw-cloud.md",
"chars": 893,
"preview": "# Claw免费容器部署\n\n## 教程\n\n点击 [https://console.run.claw.cloud/signin](https://console.run.claw.cloud/signin?link=FNTTMHS056E5)"
},
{
"path": "docs/configuration.md",
"chars": 27254,
"preview": "# 配置说明\n\n**[目录]**\n\n<!-- TOC depthFrom:2 insertAnchor:true -->\n\n- [1. 配置方式](#1-配置方式)\n - [1.1. 方式一:修改配置文件](#11-方式一修改配置文件"
},
{
"path": "docs/donate-list.md",
"chars": 3739,
"preview": "# 赞赏\n\n| 赞赏人 | 时间 | 金额 | 方式 | 留言 | 回复\n| ---------- | -------------- | -------------- | -------------- | -------------- | "
},
{
"path": "docs/questions.md",
"chars": 7815,
"preview": "# 常见问题\n\n**[目录]**\n<!-- TOC depthFrom:2 -->\n\n- [1. 运行出现异常怎么办?](#1-运行出现异常怎么办)\n- [2. 如何提交issue(如何提交Bug或建议)](#2-如何提交issue如何提交"
},
{
"path": "docs/runInLocal.md",
"chars": 1385,
"preview": "# 下载程序包到本地或服务器运行\n\n<!-- TOC depthFrom:2 -->\n\n- [1. 任意系统,但已安装`.NET 8.0`](#1-任意系统但已安装net-80)\n- [2. Win](#2-win)\n- [3. Linux"
},
{
"path": "gitHubActions/README.md",
"chars": 1181,
"preview": "# GitHub Actions 部署\n\n<!-- TOC depthFrom:2 -->\n\n- [介绍](#介绍)\n- [步骤](#步骤)\n - [复刻项目](#复刻项目)\n - [添加 Secrets 配置](#添加-sec"
},
{
"path": "gitHubActions/bak/bilibili-daily-task.yml",
"chars": 4236,
"preview": "# 每日任务\n\nname: bilibili-daily-task\n\n\non:\n workflow_dispatch: # 手动触发\n schedule: # 计划任务触发\n - cron: '0 16 * * *' \n #"
},
{
"path": "gitHubActions/bak/empty-task.yml",
"chars": 4259,
"preview": "name: empty-task\n\non:\n workflow_dispatch: # 手动触发\n inputs:\n tasks:\n description: '任务Code'\n require"
},
{
"path": "gitHubActions/bak/live-lottery-task.yml",
"chars": 4176,
"preview": "# 天选时刻抽奖任务\n\nname: live-lottery-task\n\n\non:\n \n workflow_dispatch: # 手动触发\n schedule: # 计划任务触发\n - cron: '0 16 * * *' \n"
},
{
"path": "gitHubActions/bak/unfollow-batched-task.yml",
"chars": 3443,
"preview": "# 批量取关\n\nname: unfollow-batched-task\n\non:\n workflow_dispatch: # 手动触发\n inputs:\n group:\n description: '分组名称"
},
{
"path": "helm/README.md",
"chars": 5893,
"preview": "<!--- app-name: bilibili-tool -->\n\n# BiliBili Tool\n\nBiliBiliTool 是一个自动执行任务的工具,当我们忘记做某项任务时,它会像一个贴心小助手,按照我们预先吩咐它的命令,在指定频率、"
},
{
"path": "helm/bilibili-tool/Chart.yaml",
"chars": 1173,
"preview": "apiVersion: v2\nname: bilibili-tool\ndescription: A Helm chart for running bilibili tool in Kubernetes\n\n# A chart can be e"
},
{
"path": "helm/bilibili-tool/templates/NOTES.txt",
"chars": 0,
"preview": ""
},
{
"path": "helm/bilibili-tool/templates/_helpers.tpl",
"chars": 1842,
"preview": "{{/*\nExpand the name of the chart.\n*/}}\n{{- define \"bilibili_tool.name\" -}}\n{{- default .Chart.Name .Values.nameOverride"
},
{
"path": "helm/bilibili-tool/templates/configmap.yaml",
"chars": 2783,
"preview": "apiVersion: v1\nkind: ConfigMap\nmetadata:\n name: {{ .Values.configmap.name }}\n namespace: {{ .Values.namespace }}\ndata:"
},
{
"path": "helm/bilibili-tool/templates/deployment.yaml",
"chars": 2560,
"preview": "apiVersion: apps/v1\nkind: Deployment\nmetadata:\n name: {{ include \"bilibili_tool.fullname\" . }}\n namespace: {{ .Values."
},
{
"path": "helm/bilibili-tool/values.yaml",
"chars": 1404,
"preview": "# Default values for bilibili_tool.\n# This is a YAML-formatted file.\n# Declare variables to be passed into your template"
},
{
"path": "krew/.gitignore",
"chars": 11,
"preview": "bin\nbilipro"
},
{
"path": "krew/Makefile",
"chars": 2003,
"preview": ".DEFAULT_GOAL:=help\nSHELL := /usr/bin/env bash\n\nROOT_DIR := $(shell git rev-parse --show-toplevel)\nGOOS ?= $(shell go en"
},
{
"path": "krew/README.md",
"chars": 1733,
"preview": "# BiliBiliPro Kubectl Plugin\n\n## Prerequisites\n\n- Kubernetes >= v1.23.0.\n- go >= v1.18\n- kubectl installed on your local"
},
{
"path": "krew/cmd/kubectl-bilipro.go",
"chars": 570,
"preview": "package main\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\n\t\"github.com/spf13/pflag\"\n\n\t\"github.com/RayWangQvQ/BiliBiliToolPro/krew/pkg/cmd\"\n\th"
},
{
"path": "krew/config.yaml",
"chars": 133,
"preview": "- name: Ray_BiliBiliCookies__1\n value: \"cookie\"\n # DailyTrigger - required\n- name: Ray_DailyTaskConfig__Cron\n value: "
},
{
"path": "krew/go.mod",
"chars": 2913,
"preview": "module github.com/RayWangQvQ/BiliBiliToolPro/krew\n\ngo 1.20\n\nrequire (\n\tgithub.com/spf13/cobra v1.4.0\n\tgithub.com/spf13/p"
},
{
"path": "krew/go.sum",
"chars": 50846,
"preview": "cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=\ncloud.google.com/go v0.34.0/go.mod h1"
},
{
"path": "krew/pkg/cmd/cmd.go",
"chars": 1038,
"preview": "package cmd\n\nimport (\n\t\"log\"\n\n\t\"github.com/spf13/cobra\"\n\t\"k8s.io/cli-runtime/pkg/genericclioptions\"\n)\n\nconst (\n\tbiliproD"
},
{
"path": "krew/pkg/cmd/delete.go",
"chars": 3100,
"preview": "package cmd\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"os/exec\"\n\t\"strings\"\n\n\t\"sigs.k8s.io/kustomize/api/krusty\"\n\t\"sigs.k8s.io/kustomize/ap"
},
{
"path": "krew/pkg/cmd/get.go",
"chars": 1339,
"preview": "package cmd\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"os/exec\"\n\n\t\"github.com/RayWangQvQ/BiliBiliToolPro/krew/pkg/options\"\n\thelper \"github"
},
{
"path": "krew/pkg/cmd/init.go",
"chars": 7463,
"preview": "package cmd\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"os/exec\"\n\t\"strings\"\n\n\tcorev1 \"k8s.io/api/core/v1\"\n\n\t\"sigs.k8"
},
{
"path": "krew/pkg/cmd/version.go",
"chars": 946,
"preview": "package cmd\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\n\t\"github.com/spf13/cobra\"\n)\n\n// version provides the version of this plugin\nvar vers"
},
{
"path": "krew/pkg/options/deployment.go",
"chars": 231,
"preview": "package options\n\n// DeployOptions encapsulates the CLI options for a BiliBiliPro\ntype DeployOptions struct {\n\tName "
},
{
"path": "krew/pkg/resources/asset.go",
"chars": 182,
"preview": "package resources\n\nimport (\n\t\"embed\"\n)\n\n//go:embed *\nvar fs embed.FS\n\n// GetStaticResources returns the fs with the embe"
},
{
"path": "krew/pkg/resources/base/bilibiliPro/deployment.yaml",
"chars": 494,
"preview": "apiVersion: apps/v1\nkind: Deployment\nmetadata:\n name: bilibilipro\nspec:\n selector:\n matchLabels:\n app: bilibil"
},
{
"path": "krew/pkg/resources/base/ns/namespace.yaml",
"chars": 57,
"preview": "\napiVersion: v1\nkind: Namespace\nmetadata:\n name: bilipro"
},
{
"path": "krew/pkg/utils/client.go",
"chars": 2152,
"preview": "package utils\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"time\"\n\n\tmetav1 \"k8s.io/apimachinery/pkg/apis/meta/v1\""
},
{
"path": "krew/pkg/utils/client_test.go",
"chars": 309,
"preview": "package utils\n\nimport (\n\t\"testing\"\n)\n\nfunc TestGetK8sClient(t *testing.T) {\n\tclient, _, err := GetK8sClient()\n\tif err !="
},
{
"path": "krew/pkg/utils/cmd.go",
"chars": 699,
"preview": "package utils\n\nimport (\n\t\"bufio\"\n\t\"fmt\"\n\t\"io\"\n\t\"os/exec\"\n)\n\nfunc Run(cmd *exec.Cmd, in io.Reader) error {\n\tcmd.Stdin = i"
},
{
"path": "krew/pkg/utils/cmd_test.go",
"chars": 259,
"preview": "package utils\n\nimport (\n\t\"os/exec\"\n\t\"testing\"\n)\n\nfunc TestRun(t *testing.T) {\n\n\t// Just make sure there is no error...\n\t"
},
{
"path": "krew/pkg/utils/error.go",
"chars": 483,
"preview": "package utils\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n)\n\nconst (\n\t// For errors about kustomize\n\tTEMPLATE_ERROR = \"template error\"\n\t/"
},
{
"path": "krew/pkg/utils/error_test.go",
"chars": 935,
"preview": "package utils\n\nimport (\n\t\"strings\"\n\t\"testing\"\n)\n\nfunc TestServerGenErrorMsg(t *testing.T) {\n\texpectedErr := GenErrorMsg("
},
{
"path": "krew/pkg/utils/fileSys.go",
"chars": 2052,
"preview": "package utils\n\nimport (\n\t\"io\"\n\t\"io/fs\"\n\t\"path\"\n\t\"strings\"\n\n\t\"github.com/RayWangQvQ/BiliBiliToolPro/krew/pkg/resources\"\n\t"
},
{
"path": "krew/pkg/utils/fileSys_test.go",
"chars": 1970,
"preview": "package utils\n\nimport (\n\t\"io\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"testing\"\n\n\t\"sigs.k8s.io/kustomize/kyaml/filesys\"\n)\n\nfunc TestCopy"
},
{
"path": "podman/README.md",
"chars": 2126,
"preview": "# Podman 使用说明\n<!-- TOC depthFrom:2 -->\n\n- [1. 前期工作](#1-前期工作)\n - [1.1. Podman环境](#11-podman环境)\n - [1.2. 从Docker迁移]("
},
{
"path": "podman/build/buildImage.cmd",
"chars": 146,
"preview": "@echo off\n\nREM start to build\necho Start to build image\n@echo on\npodman build -t docker.io/zai7lou/bilibili_tool_pro:lat"
},
{
"path": "qinglong/DefaultTasks/bili_task_base.sh",
"chars": 12622,
"preview": "#!/usr/bin/env bash\n# cron:0 0 1 1 *\n# new Env(\"bili_base\")\n\n# Stop script on NZEC\nset -e\n# Stop script if unbound varia"
},
{
"path": "qinglong/DefaultTasks/bili_task_charge.sh",
"chars": 144,
"preview": "#!/usr/bin/env bash\n# cron:0 12 * * *\n# new Env(\"bili免费B币券充电任务\")\n\n. bili_task_base.sh\n\ntarget_task_code=\"Charge\"\nrun_tas"
},
{
"path": "qinglong/DefaultTasks/bili_task_daily.sh",
"chars": 136,
"preview": "#!/usr/bin/env bash\n# cron:0 9 * * *\n# new Env(\"bili每日任务\")\n\n. bili_task_base.sh\n\ntarget_task_code=\"Daily\"\nrun_task \"${ta"
},
{
"path": "qinglong/DefaultTasks/bili_task_liveFansMedal.sh",
"chars": 145,
"preview": "#!/usr/bin/env bash\n# cron:5 0 * * *\n# new Env(\"bili直播粉丝牌\")\n\n. bili_task_base.sh\n\ntarget_task_code=\"LiveFansMedal\"\nrun_t"
},
{
"path": "qinglong/DefaultTasks/bili_task_liveLottery.sh",
"chars": 143,
"preview": "#!/usr/bin/env bash\n# cron:0 13 * * *\n# new Env(\"bili天选时刻\")\n\n. bili_task_base.sh\n\ntarget_task_code=\"LiveLottery\"\nrun_tas"
},
{
"path": "qinglong/DefaultTasks/bili_task_login.sh",
"chars": 136,
"preview": "#!/usr/bin/env bash\n# cron:0 0 1 1 *\n# new Env(\"bili扫码登录\")\n\n. bili_task_base.sh\n\ntarget_task_code=\"Login\"\nrun_task \"${ta"
},
{
"path": "qinglong/DefaultTasks/bili_task_manga.sh",
"chars": 138,
"preview": "#!/usr/bin/env bash\n# cron:0 14 * * *\n# new Env(\"bili漫画任务\")\n\n. bili_task_base.sh\n\ntarget_task_code=\"Manga\"\nrun_task \"${t"
},
{
"path": "qinglong/DefaultTasks/bili_task_manga_privilege.sh",
"chars": 154,
"preview": "#!/usr/bin/env bash\n# cron:0 15 * * *\n# new Env(\"bili领取大会员漫画权益任务\")\n\n. bili_task_base.sh\n\ntarget_task_code=\"MangaPrivileg"
},
{
"path": "qinglong/DefaultTasks/bili_task_silver2coin.sh",
"chars": 148,
"preview": "#!/usr/bin/env bash\n# cron:0 8 * * *\n# new Env(\"bili银瓜子兑换硬币任务\")\n\n. bili_task_base.sh\n\ntarget_task_code=\"Silver2Coin\"\nrun"
},
{
"path": "qinglong/DefaultTasks/bili_task_test.sh",
"chars": 135,
"preview": "#!/usr/bin/env bash\n# cron:0 8 * * *\n# new Env(\"bili测试ck\")\n\n. bili_task_base.sh\n\ntarget_task_code=\"Test\"\nrun_task \"${tar"
},
{
"path": "qinglong/DefaultTasks/bili_task_tryFix.sh",
"chars": 903,
"preview": "#!/usr/bin/env bash\n# cron:0 0 1 1 *\n# new Env(\"bili尝试修复异常\")\n\ndir_shell=$QL_DIR/shell\n. $dir_shell/share.sh\n. /root/.bas"
},
{
"path": "qinglong/DefaultTasks/bili_task_unfollowBatched.sh",
"chars": 149,
"preview": "#!/usr/bin/env bash\n# cron:0 12 1 * *\n# new Env(\"bili批量取关主播\")\n\n. bili_task_base.sh\n\ntarget_task_code=\"UnfollowBatched\"\nr"
},
{
"path": "qinglong/DefaultTasks/bili_task_vipBigPoint.sh",
"chars": 144,
"preview": "#!/usr/bin/env bash\n# cron:7 1 * * *\n# new Env(\"bili大会员大积分\")\n\n. bili_task_base.sh\n\ntarget_task_code=\"VipBigPoint\"\nrun_ta"
},
{
"path": "qinglong/DefaultTasks/bili_task_vip_privilege.sh",
"chars": 149,
"preview": "#!/usr/bin/env bash\n# cron:0 1 * * *\n# new Env(\"bili领取大会员福利任务\")\n\n. bili_task_base.sh\n\ntarget_task_code=\"VipPrivilege\"\nru"
},
{
"path": "qinglong/DefaultTasks/dev/bili_dev_task_base.sh",
"chars": 12632,
"preview": "#!/usr/bin/env bash\n# cron:0 0 1 1 *\n# new Env(\"bili_dev_task_base\");\n\n# Stop script on NZEC\nset -e\n# Stop script if unb"
},
{
"path": "qinglong/DefaultTasks/dev/bili_dev_task_charge.sh",
"chars": 156,
"preview": "#!/usr/bin/env bash\n# cron:0 12 * * *\n# new Env(\"bili免费B币券充电任务[dev先行版]\")\n\n. bili_dev_task_base.sh\n\ntarget_task_code=\"Cha"
},
{
"path": "qinglong/DefaultTasks/dev/bili_dev_task_daily.sh",
"chars": 150,
"preview": "#!/usr/bin/env bash\n# cron:5 9 * * *\n# new Env('bili每日任务[dev先行版]');\n\n. bili_dev_task_base.sh\n\ntarget_task_code=\"Daily\"\nr"
},
{
"path": "qinglong/DefaultTasks/dev/bili_dev_task_liveFansMedal.sh",
"chars": 157,
"preview": "#!/usr/bin/env bash\n# cron:5 0 * * *\n# new Env(\"bili直播粉丝牌[dev先行版]\")\n\n. bili_dev_task_base.sh\n\ntarget_task_code=\"LiveFans"
},
{
"path": "qinglong/DefaultTasks/dev/bili_dev_task_liveLottery.sh",
"chars": 155,
"preview": "#!/usr/bin/env bash\n# cron:0 13 * * *\n# new Env(\"bili天选时刻[dev先行版]\")\n\n. bili_dev_task_base.sh\n\ntarget_task_code=\"LiveLott"
},
{
"path": "qinglong/DefaultTasks/dev/bili_dev_task_login.sh",
"chars": 148,
"preview": "#!/usr/bin/env bash\n# cron:0 0 1 1 *\n# new Env(\"bili扫码登录[dev先行版]\")\n\n. bili_dev_task_base.sh\n\ntarget_task_code=\"Login\"\nru"
},
{
"path": "qinglong/DefaultTasks/dev/bili_dev_task_manga.sh",
"chars": 150,
"preview": "#!/usr/bin/env bash\n# cron:0 14 * * *\n# new Env(\"bili漫画任务[dev先行版]\")\n\n. bili_dev_task_base.sh\n\ntarget_task_code=\"Manga\"\nr"
},
{
"path": "qinglong/DefaultTasks/dev/bili_dev_task_manga_privilege.sh",
"chars": 166,
"preview": "#!/usr/bin/env bash\n# cron:0 15 * * *\n# new Env(\"bili领取大会员漫画权益任务[dev先行版]\")\n\n. bili_dev_task_base.sh\n\ntarget_task_code=\"M"
},
{
"path": "qinglong/DefaultTasks/dev/bili_dev_task_silver2coin.sh",
"chars": 160,
"preview": "#!/usr/bin/env bash\n# cron:0 8 * * *\n# new Env(\"bili银瓜子兑换硬币任务[dev先行版]\")\n\n. bili_dev_task_base.sh\n\ntarget_task_code=\"Silv"
},
{
"path": "qinglong/DefaultTasks/dev/bili_dev_task_test.sh",
"chars": 147,
"preview": "#!/usr/bin/env bash\n# cron:0 8 * * *\n# new Env(\"bili测试ck[dev先行版]\")\n\n. bili_dev_task_base.sh\n\ntarget_task_code=\"Test\"\nrun"
},
{
"path": "qinglong/DefaultTasks/dev/bili_dev_task_tryFix.sh",
"chars": 921,
"preview": "#!/usr/bin/env bash\n# cron:0 0 1 1 *\n# new Env(\"bili尝试修复异常[dev先行版]\")\n\ndir_shell=$QL_DIR/shell\n. $dir_shell/share.sh\n. /r"
},
{
"path": "qinglong/DefaultTasks/dev/bili_dev_task_unfollowBatched.sh",
"chars": 161,
"preview": "#!/usr/bin/env bash\n# cron:0 12 1 * *\n# new Env(\"bili批量取关主播[dev先行版]\")\n\n. bili_dev_task_base.sh\n\ntarget_task_code=\"Unfoll"
},
{
"path": "qinglong/DefaultTasks/dev/bili_dev_task_vipBigPoint.sh",
"chars": 156,
"preview": "#!/usr/bin/env bash\n# cron:7 1 * * *\n# new Env(\"bili大会员大积分[dev先行版]\")\n\n. bili_dev_task_base.sh\n\ntarget_task_code=\"VipBigP"
},
{
"path": "qinglong/DefaultTasks/dev/bili_dev_task_vip_privilege.sh",
"chars": 161,
"preview": "#!/usr/bin/env bash\n# cron:0 1 * * *\n# new Env(\"bili领取大会员福利任务[dev先行版]\")\n\n. bili_dev_task_base.sh\n\ntarget_task_code=\"VipP"
},
{
"path": "qinglong/README.md",
"chars": 4261,
"preview": "# 在青龙中运行\n\n原理是,利用青龙的拉库命令,拉取本仓库源码,自动添加cron定时任务,然后在青龙容器中安装`dotnet`环境或`bilitool`的二进制包,定时运行相应的Task。\n\n开始前,请先确保你的青龙面板是运行正常的。\n\n<"
},
{
"path": "qinglong/bak/bili_dev_task_get_cookie.py.bak",
"chars": 2509,
"preview": "'''\n1 9 11 11 1 bili_dev_task_get_cookie.py\n手动运行,查看日志,并使用手机B站app扫描日志中二维码,注意,只能修改第一个cookie\n如果产生错误,重新运行并用手机扫描二维码\n有可能识别不出来二"
},
{
"path": "qinglong/bak/bili_task_get_cookie.py.bak",
"chars": 2505,
"preview": "'''\n1 9 11 11 1 bili_task_get_cookie.py\n手动运行,查看日志,并使用手机B站app扫描日志中二维码,注意,只能修改第一个cookie\n如果产生错误,重新运行并用手机扫描二维码\n有可能识别不出来二维码,我"
},
{
"path": "qinglong/dotnet-install.sh",
"chars": 55540,
"preview": "#!/usr/bin/env bash\n# Copyright (c) .NET Foundation and contributors. All rights reserved.\n# Licensed under the MIT lice"
},
{
"path": "qinglong/extra.sh",
"chars": 482,
"preview": "## 添加你需要重启自动执行的任意命令,比如 ql repo\n## 安装node依赖使用 pnpm install -g xxx xxx\n## 安装python依赖使用 pip3 install xxx\n\n# 安装 dotnet 环境\n# "
},
{
"path": "qinglong/ray-dotnet-install.sh",
"chars": 914,
"preview": "#!/usr/bin/env bash\necho -e \"\\n-------set up dot net env-------\"\n\n## 安装dotnet\n\n# 安装依赖\ninstall_dependency() {\n echo \"安"
},
{
"path": "scripts/clean.cmd",
"chars": 521,
"preview": "@echo off\ncd ..\nREM start to clean\necho Start to clean all bin and obj folder under Noodle repo\n@echo on\n@for /d /r %%c "
},
{
"path": "scripts/publish.bat",
"chars": 937,
"preview": "::https://docs.microsoft.com/zh-cn/dotnet/core/tools/dotnet-publish\n::关闭回显\n@echo off\n\ndotnet publish --configuration Rel"
},
{
"path": "scripts/publish.ps1",
"chars": 1835,
"preview": "dotnet.exe publish ../src/Ray.BiliBiliTool.Console/Ray.BiliBiliTool.Console.csproj --runtime win-x86 --no-self-contained"
},
{
"path": "scripts/publish.sh",
"chars": 4007,
"preview": "#!/usr/bin/env bash\nset -e\nset -u\nset -o pipefail\n\necho ' ____ _ _____ _ '\necho ' | __ ) _| |_|_ _|__"
},
{
"path": "scripts/ut.ps1",
"chars": 807,
"preview": "Set-Location ..\r\n\r\n# 安装 ReportGenerator 工具\r\nWrite-Output \"Installing ReportGenerator tool...\"\r\ndotnet tool install -g do"
},
{
"path": "src/BlazingQuartz.Core/BlazingQuartz.Core.csproj",
"chars": 1208,
"preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n <PropertyGroup>\n <TargetFramework>net8.0</TargetFramework>\n <ImplicitUsings>en"
},
{
"path": "src/BlazingQuartz.Core/BlazingQuartzCoreOptions.cs",
"chars": 1086,
"preview": "using System;\n\nnamespace BlazingQuartz.Core\n{\n public class BlazingQuartzCoreOptions\n {\n /// <summary>\n "
},
{
"path": "src/BlazingQuartz.Core/Constants.cs",
"chars": 4792,
"preview": "using System;\nusing System.ComponentModel;\n\nnamespace BlazingQuartz;\n\npublic static class Constants\n{\n public const "
},
{
"path": "src/BlazingQuartz.Core/Events/EventArgs.cs",
"chars": 397,
"preview": "using System;\n\nnamespace BlazingQuartz.Core.Events\n{\n public class EventArgs<TArgs> : EventArgs\n {\n public"
},
{
"path": "src/BlazingQuartz.Core/Events/JobWasExecutedEventArgs.cs",
"chars": 681,
"preview": "using System;\nusing Quartz;\n\nnamespace BlazingQuartz.Core.Events\n{\n public class JobWasExecutedEventArgs : EventArgs"
},
{
"path": "src/BlazingQuartz.Core/Events/SchedulerErrorEventArgs.cs",
"chars": 322,
"preview": "using System;\nusing Quartz;\n\nnamespace BlazingQuartz.Core.Events\n{\n public class SchedulerErrorEventArgs : EventArgs"
},
{
"path": "src/BlazingQuartz.Core/Events/TriggerEventArgs.cs",
"chars": 626,
"preview": "using System;\nusing Quartz;\n\nnamespace BlazingQuartz.Core.Events\n{\n public class TriggerEventArgs : EventArgs\n {\n"
},
{
"path": "src/BlazingQuartz.Core/Extensions/ModelExtensions.cs",
"chars": 3576,
"preview": "using System;\nusing BlazingQuartz.Core.Models;\nusing Quartz;\n\nnamespace BlazingQuartz.Core\n{\n public static class Mo"
},
{
"path": "src/BlazingQuartz.Core/Helpers/CronExpressionHelper.cs",
"chars": 285,
"preview": "using System;\nusing Quartz;\n\nnamespace BlazingQuartz.Core.Helpers\n{\n public static class CronExpressionHelper\n {\n"
},
{
"path": "src/BlazingQuartz.Core/History/BaseExecutionLogRawSqlProvider.cs",
"chars": 280,
"preview": "using System;\n\nnamespace BlazingQuartz.Core.History\n{\n public class BaseExecutionLogRawSqlProvider : IExecutionLogRa"
},
{
"path": "src/BlazingQuartz.Core/History/ExecutionLogStore.cs",
"chars": 3432,
"preview": "using Microsoft.EntityFrameworkCore;\nusing Microsoft.Extensions.Logging;\nusing Ray.BiliBiliTool.Domain;\nusing Ray.BiliB"
},
{
"path": "src/BlazingQuartz.Core/History/IExecutionLogRawSqlProvider.cs",
"chars": 144,
"preview": "namespace BlazingQuartz.Core.History\n{\n public interface IExecutionLogRawSqlProvider\n {\n string DeleteLogs"
},
{
"path": "src/BlazingQuartz.Core/History/IExecutionLogStore.cs",
"chars": 574,
"preview": "using System;\nusing Ray.BiliBiliTool.Domain;\n\nnamespace BlazingQuartz.Core.History\n{\n public interface IExecutionLog"
},
{
"path": "src/BlazingQuartz.Core/History/ISchedulerEventLoggingService.cs",
"chars": 114,
"preview": "using System;\n\nnamespace BlazingQuartz.Core.History\n{\n internal interface ISchedulerEventLoggingService { }\n}\n"
},
{
"path": "src/BlazingQuartz.Core/History/SchedulerEventLoggingService.cs",
"chars": 20182,
"preview": "using System;\nusing System.Globalization;\nusing System.Threading.Channels;\nusing BlazingQuartz.Core.Jobs;\nusing Blazing"
},
{
"path": "src/BlazingQuartz.Core/Jobs/HousekeepExecutionLogsJob.cs",
"chars": 1076,
"preview": "using System;\nusing BlazingQuartz.Core.History;\nusing BlazingQuartz.Jobs.Abstractions;\nusing Microsoft.Extensions.Optio"
},
{
"path": "src/BlazingQuartz.Core/Models/ExecutionLogFilter.cs",
"chars": 1309,
"preview": "using System;\nusing Ray.BiliBiliTool.Domain;\n\nnamespace BlazingQuartz.Core.Models\n{\n public class ExecutionLogFilter"
},
{
"path": "src/BlazingQuartz.Core/Models/JobDetailModel.cs",
"chars": 668,
"preview": "using System;\n\nnamespace BlazingQuartz.Core.Models\n{\n public class JobDetailModel\n {\n public string Name {"
},
{
"path": "src/BlazingQuartz.Core/Models/JobExecutionStatusSummaryModel.cs",
"chars": 258,
"preview": "using System;\n\nnamespace BlazingQuartz.Core.Models\n{\n public class JobExecutionStatusSummaryModel\n {\n publ"
},
{
"path": "src/BlazingQuartz.Core/Models/Key.cs",
"chars": 606,
"preview": "using System;\n\nnamespace BlazingQuartz.Core.Models\n{\n public class Key\n {\n public string Name { get; set; "
},
{
"path": "src/BlazingQuartz.Core/Models/PagedList.cs",
"chars": 999,
"preview": "using System;\n\nnamespace BlazingQuartz.Core.Models\n{\n public class PagedList<T> : List<T>\n {\n public PageM"
},
{
"path": "src/BlazingQuartz.Core/Models/ScheduleJobFilter.cs",
"chars": 290,
"preview": "using System;\n\nnamespace BlazingQuartz.Core.Models\n{\n public class ScheduleJobFilter : ICloneable\n {\n publ"
},
{
"path": "src/BlazingQuartz.Core/Models/ScheduleModel.cs",
"chars": 2098,
"preview": "using System;\n\nnamespace BlazingQuartz.Core.Models\n{\n public class ScheduleModel\n {\n const int SHORT_JOBTY"
},
{
"path": "src/BlazingQuartz.Core/Models/TriggerDetailModel.cs",
"chars": 5887,
"preview": "using System;\nusing System.Text;\nusing Quartz;\n\nnamespace BlazingQuartz.Core.Models\n{\n public class TriggerDetailMod"
},
{
"path": "src/BlazingQuartz.Core/ServiceCollectionExtensions.cs",
"chars": 1593,
"preview": "using System;\nusing System.Reflection;\nusing BlazingQuartz.Core.History;\nusing BlazingQuartz.Core.Services;\nusing Blazi"
},
{
"path": "src/BlazingQuartz.Core/Services/ExecutionLogService.cs",
"chars": 12490,
"preview": "using System;\nusing BlazingQuartz.Core.Models;\nusing Microsoft.EntityFrameworkCore;\nusing Ray.BiliBiliTool.Domain;\nusin"
},
{
"path": "src/BlazingQuartz.Core/Services/IExecutionLogService.cs",
"chars": 1348,
"preview": "using BlazingQuartz.Core.Models;\nusing Ray.BiliBiliTool.Domain;\n\nnamespace BlazingQuartz.Core.Services\n{\n public int"
},
{
"path": "src/BlazingQuartz.Core/Services/ISchedulerDefinitionService.cs",
"chars": 512,
"preview": "using System;\n\nnamespace BlazingQuartz.Core.Services\n{\n public interface ISchedulerDefinitionService\n {\n I"
},
{
"path": "src/BlazingQuartz.Core/Services/ISchedulerListenerService.cs",
"chars": 2466,
"preview": "using System;\nusing BlazingQuartz.Core.Events;\nusing Quartz;\n\nnamespace BlazingQuartz.Core.Services\n{\n public interf"
},
{
"path": "src/BlazingQuartz.Core/Services/ISchedulerService.cs",
"chars": 1672,
"preview": "using BlazingQuartz.Core.Models;\nusing Quartz;\n\nnamespace BlazingQuartz.Core.Services\n{\n public interface IScheduler"
},
{
"path": "src/BlazingQuartz.Core/Services/SchedulerDefinitionService.cs",
"chars": 6632,
"preview": "using System;\nusing System.Diagnostics.CodeAnalysis;\nusing System.Reflection;\nusing Microsoft.Extensions.Logging;\nusing"
},
{
"path": "src/BlazingQuartz.Core/Services/SchedulerListenerService.cs",
"chars": 10649,
"preview": "using System;\nusing BlazingQuartz.Core.Events;\nusing Quartz;\n\nnamespace BlazingQuartz.Core.Services\n{\n public class "
},
{
"path": "src/BlazingQuartz.Core/Services/SchedulerService.cs",
"chars": 31754,
"preview": "using System;\nusing BlazingQuartz.Core.Models;\nusing BlazingQuartz.Jobs;\nusing Microsoft.Extensions.Logging;\nusing Quar"
},
{
"path": "src/BlazingQuartz.Jobs/BlazingQuartz.Jobs.csproj",
"chars": 432,
"preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n <PropertyGroup>\n <TargetFramework>net8.0</TargetFramework>\n <ImplicitUsings>en"
},
{
"path": "src/BlazingQuartz.Jobs/Constants.cs",
"chars": 166,
"preview": "using System;\n\nnamespace BlazingQuartz.Jobs\n{\n public abstract class Constants\n {\n public const string Htt"
},
{
"path": "src/BlazingQuartz.Jobs/HttpAction.cs",
"chars": 144,
"preview": "using System;\n\nnamespace BlazingQuartz.Jobs\n{\n public enum HttpAction\n {\n Get,\n Post,\n Put,\n"
},
{
"path": "src/BlazingQuartz.Jobs/HttpJob.cs",
"chars": 7502,
"preview": "using System;\nusing System.Text;\nusing System.Text.Json;\nusing BlazingQuartz.Jobs.Abstractions;\nusing Microsoft.Extensi"
},
{
"path": "src/BlazingQuartz.Jobs/ServiceCollectionExtensions.cs",
"chars": 916,
"preview": "using System;\nusing BlazingQuartz.Jobs.Abstractions;\nusing Microsoft.Extensions.DependencyInjection;\n\nnamespace Blazing"
},
{
"path": "src/BlazingQuartz.Jobs.Abstractions/BlazingQuartz.Jobs.Abstractions.csproj",
"chars": 842,
"preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n <PropertyGroup>\n <TargetFramework>net8.0</TargetFramework>\n <ImplicitUsings>en"
},
{
"path": "src/BlazingQuartz.Jobs.Abstractions/DataMapValue.cs",
"chars": 2129,
"preview": "using System;\nusing System.Globalization;\nusing System.Text.Json;\n\nnamespace BlazingQuartz.Jobs.Abstractions\n{\n publ"
},
{
"path": "src/BlazingQuartz.Jobs.Abstractions/DataMapValueResolver.cs",
"chars": 1527,
"preview": "using BlazingQuartz.Jobs.Abstractions.Processors;\nusing Microsoft.Extensions.DependencyInjection;\nusing Microsoft.Exten"
},
{
"path": "src/BlazingQuartz.Jobs.Abstractions/DataMapValueType.cs",
"chars": 135,
"preview": "using System;\n\nnamespace BlazingQuartz.Jobs.Abstractions\n{\n public enum DataMapValueType\n {\n InterpolatedS"
},
{
"path": "src/BlazingQuartz.Jobs.Abstractions/IDataMapValueResolver.cs",
"chars": 146,
"preview": "namespace BlazingQuartz.Jobs.Abstractions\n{\n public interface IDataMapValueResolver\n {\n string? Resolve(Da"
},
{
"path": "src/BlazingQuartz.Jobs.Abstractions/IJobUI.cs",
"chars": 618,
"preview": "using System;\n\nnamespace BlazingQuartz.Jobs.Abstractions\n{\n public interface IJobUI\n {\n string JobClass { "
},
{
"path": "src/BlazingQuartz.Jobs.Abstractions/JobDataMapKeys.cs",
"chars": 289,
"preview": "using System;\n\nnamespace BlazingQuartz.Jobs.Abstractions\n{\n public static class JobDataMapKeys\n {\n public "
},
{
"path": "src/BlazingQuartz.Jobs.Abstractions/JobExecutionContextExtensions.cs",
"chars": 3157,
"preview": "using System;\nusing System.Globalization;\nusing System.Text;\nusing System.Text.Json;\nusing Quartz;\n\nnamespace BlazingQu"
},
{
"path": "src/BlazingQuartz.Jobs.Abstractions/Processors/InterpolatedStringV1Processor.cs",
"chars": 2163,
"preview": "using System;\nusing System.Text;\nusing System.Text.RegularExpressions;\nusing Microsoft.Extensions.Logging;\n\nnamespace B"
}
]
// ... and 397 more files (download for full content)
About this extraction
This page contains the full source code of the RayWangQvQ/BiliBiliToolPro GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 597 files (1.5 MB), approximately 483.6k tokens, and a symbol index with 1297 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.