@dan-uni/dan-any
Version:
A danmaku transformer lib, supporting danmaku from different platforms.
205 lines (204 loc) • 6.45 kB
TypeScript
import 'reflect-metadata/lite';
import type { Options as AssGenOptions, CanvasCtx } from './ass-gen';
import type { CommandDm as DM_JSON_BiliCommandGrpc } from './proto/gen/bili/dm_pb';
import { UniDM } from './utils/dm-gen';
import * as UniDMTools from './utils/dm-gen';
import * as UniIDTools from './utils/id-gen';
import * as platform from './utils/platform';
interface DanUniConvertTip {
meassage: string;
version: string;
data?: string;
}
export interface DM_XML_Bili {
i: {
chatserver: string;
chatid: number;
mission: number;
maxlimit: number;
state: number;
real_name: number;
source: string;
d: {
'#text': string;
'@_p': string;
}[];
};
}
export interface DM_JSON_Dplayer {
code: 0;
/**
* progress,mode,color,midHash,content
*/
data: [number, number, number, string, string][];
}
export interface DM_JSON_Artplayer {
danmuku: {
text: string;
time?: number;
mode?: number;
color?: string;
border?: boolean;
style?: {};
}[];
}
export interface DM_JSON_DDPlay {
count: number | string;
comments: {
cid: number;
p: string;
m: string;
}[];
}
export type DM_format = 'danuni.json' | 'danuni.pb.bin' | 'bili.xml' | 'bili.pb.bin' | 'bili.cmd.pb.bin' | 'dplayer.json' | 'artplayer.json' | 'ddplay.json' | 'common.ass';
type shareItems = Partial<Pick<UniDMTools.UniDMObj, 'SOID' | 'senderID' | 'platform' | 'SOID' | 'pool' | 'mode' | 'color'>>;
type UniPoolPipe = (that: UniPool) => Promise<UniPool>;
type UniPoolPipeSync = (that: UniPool) => UniPool;
export interface Options {
dedupe?: boolean;
dmid?: boolean | number | UniIDTools.DMIDGenerator;
}
export declare class UniPool {
dans: UniDM[];
options: Options;
info: {
/**
* 是否从已被转换过的第三方格式弹幕再次转换而来
*/
fromConverted: boolean;
};
constructor(dans: UniDM[], options?: Options, info?: {
/**
* 是否从已被转换过的第三方格式弹幕再次转换而来
*/
fromConverted: boolean;
});
pipe(fn: UniPoolPipe): Promise<UniPool>;
pipeSync(fn: UniPoolPipeSync): UniPool;
get shared(): shareItems;
get stat(): {
SOID: {
val: string;
count: number;
}[];
mode: {
val: UniDMTools.Modes;
count: number;
}[];
fontsize: {
val: number;
count: number;
}[];
color: {
val: number;
count: number;
}[];
senderID: {
val: string;
count: number;
}[];
content: {
val: string;
count: number;
}[];
weight: {
val: number;
count: number;
}[];
pool: {
val: UniDMTools.Pools;
count: number;
}[];
platform: {
val?: string;
count: number;
}[];
};
get most(): {
mode: UniDMTools.Modes;
fontsize: number;
color: number;
senderID: string;
content: string;
weight: number;
pool: UniDMTools.Pools;
platform: string | undefined;
};
static create(options?: Options): UniPool;
/**
* 合并弹幕/弹幕库
*/
assign(dans: UniPool | UniDM | UniDM[]): UniPool;
/**
* 按共通属性拆分弹幕库
*/
split(key: keyof shareItems): UniPool[];
/**
* 基于DMID的基本去重功能,用于解决该class下dans为array而非Set的问题
*/
private dedupe;
/**
* 合并一定时间段内的重复弹幕,防止同屏出现过多
* @param lifetime 查重时间区段,单位秒 (默认为 0,表示不查重)
*/
merge(lifetime?: number): UniPool;
minify(): (Partial<UniDMTools.UniDMObj> & Pick<UniDMTools.UniDMObj, "SOID">)[];
static import(file: unknown, options?: Options): {
pool: UniPool;
fmt: DM_format;
};
convert2(format: DM_format, continue_on_error?: boolean): string | Uint8Array<ArrayBufferLike> | UniDM[] | (DM_JSON_Dplayer & {
danuni?: DanUniConvertTip;
}) | (DM_JSON_Artplayer & {
danuni?: DanUniConvertTip;
}) | (DM_JSON_DDPlay & {
danuni?: DanUniConvertTip;
});
static fromPb(bin: Uint8Array | ArrayBuffer, options?: Options): UniPool;
/**
* 转为 protobuf 二进制
*/
toPb(): Uint8Array<ArrayBufferLike>;
static fromBiliXML(xml: string, options?: Options): UniPool;
toBiliXML(options?: {
/**
* 当SOID非来源bili时,若此处指定则使用该值为cid,否则使用SOID
*/
cid?: bigint;
/**
* 当仅含有来自bili的弹幕时,启用将保持发送者标识不含`@`
* @description
* bili的弹幕含midHash(crc),不启用该处使用senderID填充,启用则去除`@bili`部分,提高兼容性
*/
avoidSenderIDWithAt?: boolean;
}): string;
static fromBiliGrpc(bin: Uint8Array | ArrayBuffer, options?: Options): UniPool;
/**
* @param bin 符合`DmWebViewReplySchema`(bili视频meta)的protobuf二进制
*/
static fromBiliCommandGrpc(bin: Uint8Array | ArrayBuffer, options?: Options): UniPool;
static fromDplayer(json: DM_JSON_Dplayer & {
danuni?: DanUniConvertTip;
}, playerID: string, domain?: string, options?: Options): UniPool;
toDplayer(): DM_JSON_Dplayer & {
danuni?: DanUniConvertTip;
};
static fromArtplayer(json: DM_JSON_Artplayer & {
danuni?: DanUniConvertTip;
}, playerID: string, domain?: string, options?: Options): UniPool;
toArtplayer(): DM_JSON_Artplayer & {
danuni?: DanUniConvertTip;
};
static fromDDPlay(json: DM_JSON_DDPlay & {
danuni?: DanUniConvertTip;
}, episodeId: string, options?: Options): UniPool;
toDDplay(): DM_JSON_DDPlay & {
danuni?: DanUniConvertTip;
};
static fromASS(ass: string, options?: Options): UniPool;
/**
* 转换为ASS字幕格式的弹幕,需播放器支持多行ASS渲染
*/
toASS(canvasCtx: CanvasCtx, options?: AssGenOptions): string;
}
export { platform, UniDM, UniDMTools, UniIDTools, type DM_JSON_BiliCommandGrpc, };