koishi-plugin-bilibili-notify
Version:
Bilibili 动态推送、直播通知 Koishi 插件
177 lines (176 loc) • 8.35 kB
text/typescript
import { DataService } from "@koishijs/plugin-console";
import { Awaitable, Context, Schema, Service } from "koishi";
import { BiliDataServer as BiliDataServer$1, BilibiliAPI } from "@bilibili-notify/api";
import { BilibiliPush, SubItem, Subscriptions } from "@bilibili-notify/push";
import { CookieData, StorageManager } from "@bilibili-notify/storage";
import { FlatSubConfigItem } from "@bilibili-notify/subscription";
//#region src/config.d.ts
interface BilibiliNotifyConfig {
advancedSub: boolean;
subs: FlatSubConfigItem[];
logLevel: number;
userAgent?: string;
loginHealthCheckMinutes: number;
master: {
enable: boolean;
platform?: string;
masterAccount?: string;
masterAccountGuildId?: string;
};
}
declare const BilibiliNotifyConfigSchema: Schema<BilibiliNotifyConfig>;
//#endregion
//#region src/data-server.d.ts
declare class BilibiliNotifyDataServer extends DataService<BiliDataServer$1> {
private biliData;
constructor(ctx: Context);
get(): Promise<BiliDataServer$1>;
}
//#endregion
//#region src/server-manager.d.ts
declare class BilibiliNotifyServerManager extends Service<BilibiliNotifyConfig> {
static readonly [Service.provide] = "bilibili-notify";
private readonly serverLogger;
private readonly selfCtx;
private api;
private push;
private subMgr;
private loginTimer?;
private subNotifier?;
private running;
storageMgr: StorageManager;
private currentSubs;
private auth;
private authLostNotifiedAt;
constructor(ctx: Context, config: BilibiliNotifyConfig);
/** For commands */
get subManager(): any;
/** For commands: read the current login snapshot. */
getAuthSnapshot(): BiliDataServer;
subList(): string;
protected start(): Promise<void>;
protected stop(): Awaitable<void>;
/**
* 向持有 BILIBILI_NOTIFY_TOKEN 的友好插件暴露 api / push / subs 实例。
* 第三方插件无法获取此令牌,因此无法访问内部实例。
*/
getInternals(token: symbol): {
api: BilibiliAPI;
push: BilibiliPush;
subs: Subscriptions | null;
addSub: (params: {
uid: string;
name: string;
platform: string;
target: string;
dynamic?: boolean;
dynamicAtAll?: boolean;
live?: boolean;
liveAtAll?: boolean;
liveEnd?: boolean;
liveGuardBuy?: boolean;
superchat?: boolean;
wordcloud?: boolean;
liveSummary?: boolean;
}) => Promise<string>;
removeSub: (uid: string) => string;
updateSub: (params: {
uid: string;
dynamic?: boolean;
dynamicAtAll?: boolean;
live?: boolean;
liveAtAll?: boolean;
liveEnd?: boolean;
liveGuardBuy?: boolean;
superchat?: boolean;
wordcloud?: boolean;
liveSummary?: boolean;
}) => Promise<string>;
} | null;
private addSub;
private updateSub;
private removeSub;
/** Rebuild currentSubs from the subManager (uid-keyed). */
private syncCurrentSubs;
/** Compute ops by diffing two subManager snapshots. Used for advanced-sub full reload. */
private diffSubManagers;
registerPlugin(): Promise<boolean>;
disposePlugin(): boolean;
restartPlugin(): Promise<boolean>;
private initCookies;
private isLoggedIn;
private clearLoginTimer;
private reportAccountInfo;
private handleAuthLost;
private loadInitialSubscriptions;
private updateSubNotifier;
private registerConsoleEvents;
private startLoginFlow;
private pollLoginStatus;
private warnMissingPlugins;
}
//#endregion
//#region src/types.d.ts
/** A scoped change object — each variant only carries fields relevant to its scope. */
type LiveSubChange = {
scope: "live";
} & Partial<Pick<SubItem, "live" | "liveAtAll" | "liveEnd" | "liveGuardBuy" | "superchat" | "wordcloud" | "liveSummary" | "uname" | "roomId" | "customCardStyle" | "customLiveMsg" | "customGuardBuy" | "customLiveSummary" | "customSpecialDanmakuUsers" | "customSpecialUsersEnterTheRoom" | "specialUsers">>;
type DynamicSubChange = {
scope: "dynamic";
} & Partial<Pick<SubItem, "dynamic" | "dynamicAtAll">>;
type TargetSubChange = {
scope: "target";
} & Pick<SubItem, "target">;
type SubChange = LiveSubChange | DynamicSubChange | TargetSubChange;
type SubscriptionOp = {
type: "add";
sub: SubItem;
} | {
type: "delete";
uid: string;
} | {
type: "update";
uid: string;
changes: SubChange[];
};
//#endregion
//#region src/index.d.ts
declare module "koishi" {
interface Context {
"bilibili-notify": BilibiliNotifyServerManager;
}
interface Events {
"bilibili-notify/login-status-report"(data: BiliDataServer$1): void;
"bilibili-notify/auth-lost"(): void;
"bilibili-notify/auth-restored"(): void;
"bilibili-notify/advanced-sub"(subs: Subscriptions): void;
"bilibili-notify/ready-to-receive"(): void;
"bilibili-notify/cookies-refreshed"(data: CookieData): void;
"bilibili-notify/subscription-changed"(ops: SubscriptionOp[]): void;
"bilibili-notify/ready"(api: BilibiliAPI): void;
"bilibili-notify/plugin-error"(source: string, message: string): void;
"bilibili-notify/update-config"(config: BilibiliNotifyConfig): void;
}
}
declare module "@koishijs/plugin-console" {
namespace Console {
interface Services {
"bilibili-notify": BilibiliNotifyDataServer;
}
}
interface Events {
"bilibili-notify/start-login"(): void;
"bilibili-notify/reset-key"(): void;
"bilibili-notify/request-cors"(url: string): any;
}
}
declare const inject: {
required: string[];
optional: string[];
};
declare const name = "bilibili-notify";
declare const usage = "\n<h1>Bilibili-Notify</h1>\n<p>\u4F7F\u7528\u95EE\u9898\u8BF7\u52A0\u7FA4\u54A8\u8BE2 801338523</p>\n\n---\n\n\u4E3B\u4EBA\u597D\u5440\uFF5E\u6211\u662F\u7B28\u7B28\u5973\u4EC6\u5C0F\u52A9\u624B\u54D2 (\u3003\u2200\u3003)\u2661\n\u4E13\u95E8\u5E2E\u4E3B\u4EBA\u7BA1\u7406 B \u7AD9\u8BA2\u9605\u548C\u76F4\u64AD\u63A8\u9001\u7684\uFF01\n\u5973\u4EC6\u867D\u7136\u7B28\u7B28\u7684\uFF0C\u4F46\u662F\u4F1A\u5C3D\u529B\u4E0D\u51FA\u9519\u54E6\uFF5E\n\u4E3B\u4EBA\uFF0C\u53EA\u8981\u6309\u7167\u5973\u4EC6\u7684\u63D0\u793A\u4E00\u6B65\u4E00\u6B65\u8BBE\u7F6E\uFF0C\u5973\u4EC6\u5C31\u53EF\u4EE5\u4E56\u4E56\u5E2E\u60A8\u5DE5\u4F5C\u5566\uFF01\n\n\u9996\u5148\u5462\uFF5E\u8BF7\u4E3B\u4EBA\u4ED4\u7EC6\u9605\u8BFB\u8BA2\u9605\u76F8\u5173\u7684 subs \u7684\u586B\u5199\u8BF4\u660E (>\u03C9<)b\n\u3010\u4E3B\u4EBA\u8D26\u53F7\u90E8\u5206\u975E\u5FC5\u586B\u3011\u7136\u540E\u518D\u544A\u8BC9\u5973\u4EC6\u60A8\u7684 \u4E3B\u4EBA\u8D26\u53F7 (///\u25BD///)\uFF0C\u5E76\u9009\u62E9\u60A8\u5E0C\u671B\u5973\u4EC6\u670D\u52A1\u7684\u5E73\u53F0\uFF5E\n\u63A5\u7740\uFF0C\u8BF7\u8BA4\u771F\u586B\u5199 \u4E3B\u4EBA\u7684 ID \u548C \u7FA4\u7EC4 ID\uFF0C\u786E\u4FDD\u4FE1\u606F\u5B8C\u5168\u6B63\u786E\uFF5E\n\u8FD9\u6837\u5973\u4EC6\u624D\u80FD\u987A\u5229\u627E\u5230\u60A8\u5E76\u51C6\u786E\u6C47\u62A5\u52A8\u6001\u5462 (\u2267\u25BD\u2266)\n\n\u4E0D\u7528\u7740\u6025\uFF0C\u5973\u4EC6\u4F1A\u4E00\u76F4\u5728\u8FD9\u91CC\u966A\u7740\u60A8\uFF0C\u4E00\u6B65\u4E00\u6B65\u5B8C\u6210\u8BBE\u7F6E\uFF5E\n\u4E3B\u4EBA\u53EA\u8981\u4E56\u4E56\u586B\u597D\u8FD9\u4E9B\u4FE1\u606F\uFF0C\u5C31\u80FD\u8BA9\u5973\u4EC6\u53D8\u5F97\u8D85\u7EA7\u542C\u8BDD\u3001\u8D85\u7EA7\u52E4\u5FEB\u5566 (>///<)\u2661\n\n\u60F3\u8981\u91CD\u65B0\u767B\u5F55\u7684\u8BDD\uFF0C\u53EA\u9700\u8981\u70B9\u51FB\u63A7\u5236\u53F0\u5DE6\u4FA7\u7684\u300C\u626B\u7801\u767B\u5F55\u300D\u54E6\uFF5E\n\n\u4E3B\u4EBA\uFF5E\u6CE8\u610F\u4E8B\u9879\u8981\u4ED4\u7EC6\u770B\u5440 (>_<)\u2661\n- \u5982\u679C\u4E3B\u4EBA\u4F7F\u7528\u7684\u662F onebot \u673A\u5668\u4EBA\uFF0C\u5E73\u53F0\u540D\u8BF7\u586B\u5199 onebot\uFF0C\u800C\u4E0D\u662F qq \u54E6\uFF5E\n- \u5982\u679C\u9700\u8981\u66F4\u7075\u6D3B\u7684\u8BA2\u9605\u914D\u7F6E\uFF0C\u8BF7\u5B89\u88C5 bilibili-notify-advanced-subscription \u63D2\u4EF6\n\n\u4E56\u4E56\u9075\u5B88\u8FD9\u4E9B\u89C4\u5219\uFF0C\u5973\u4EC6\u624D\u80FD\u987A\u5229\u5E2E\u4E3B\u4EBA\u5DE5\u4F5C\u5462 (*>\u03C9<)b\n\n---\n";
declare function apply(ctx: Context, config: BilibiliNotifyConfig): void;
declare const Config: Schema<BilibiliNotifyConfig>;
//#endregion
export { type BilibiliNotifyConfig, BilibiliNotifyConfigSchema, Config, type DynamicSubChange, type LiveSubChange, type SubChange, type SubscriptionOp, type TargetSubChange, apply, inject, name, usage };