koishi-plugin-beatsaber-bot
Version:
一个 用于 BeatSaber 的 koishi Bot 插件
33 lines (32 loc) • 1.66 kB
TypeScript
import { Context } from "koishi";
import { Config } from "../../config";
import { BeatLeaderService } from "./composed/beatleader";
import { BeatSaverService } from "./composed/beatsaver";
import { ScoreSaberService } from "./composed/scoresaber";
import { AIOSaberService } from "./composed/aiosaber";
import { NetReqResult } from "./netResult";
type ServiceWithAPIHelper<API, Wrap extends boolean = false> = Wrapped<API, Wrap> & APIHelper<API, Wrap>;
type Wrapping<T, I extends boolean = false> = T extends ((...args: infer Args) => infer R) ? <Wrap extends boolean = false>(...args: Args) => (R extends Promise<infer R1> ? (I extends true ? Promise<NetReqResult<R1>> : (Wrap extends true ? Promise<NetReqResult<R1>> : Promise<R1>)) : R) : T;
type Wrapped<T, Wrap extends boolean = false> = {
[K in keyof T]: Wrapping<T[K], Wrap>;
};
export declare class APIService {
BeatLeader: ServiceWithAPIHelper<BeatLeaderService>;
ScoreSaber: ServiceWithAPIHelper<ScoreSaberService>;
BeatSaver: ServiceWithAPIHelper<BeatSaverService>;
AIOSaber: ServiceWithAPIHelper<AIOSaberService>;
private constructor();
static create(ctx: Context, cfg: Config): APIService;
}
type Res<Base, T> = Base extends true ? NetReqResult<T> : T;
declare class APIHelper<API, Base extends boolean = false> {
constructor();
private retryTime;
private _wrapper;
private _onRetry;
withRetry(times?: number, onRetry?: (retryTime: number, e?: any) => void): this;
onRetry(func: (times: number, e: any) => void): this;
call<T>(block: () => Promise<T>): Promise<Res<Base, T>>;
wrapperResult(): ServiceWithAPIHelper<API, true>;
}
export {};