52 lines
1.7 KiB
TypeScript
52 lines
1.7 KiB
TypeScript
import { bangDreamBestdoriProvider } from '@/qqbot/plugins/bangDream/tsugu/data-clients/bestdori-provider';
|
|
import type { BangDreamDataProvider } from '@/qqbot/plugins/bangDream/tsugu/data-clients/data-provider';
|
|
import { formatNumber } from '@/qqbot/plugins/bangDream/tsugu/models/model-utils';
|
|
import { Server } from '@/qqbot/plugins/bangDream/tsugu/models/server';
|
|
|
|
export interface ItemResourceSource {
|
|
resourceId: number;
|
|
typeName: string;
|
|
}
|
|
|
|
function toServerCode(server: Server | undefined): string {
|
|
return server == null ? 'undefined' : Server[server];
|
|
}
|
|
|
|
export class ItemResourceRepository {
|
|
constructor(
|
|
private readonly provider: BangDreamDataProvider = bangDreamBestdoriProvider,
|
|
) {}
|
|
|
|
/**
|
|
* 获取道具缩略图资源路径。
|
|
*
|
|
* @param source - 道具资源来源字段。
|
|
* @param server - 目标服务器。
|
|
*/
|
|
getImagePath(source: ItemResourceSource, server: Server | undefined): string {
|
|
const serverCode = toServerCode(server);
|
|
if (source.typeName === 'material') {
|
|
return `/assets/${serverCode}/thumb/material_rip/${source.typeName}${formatNumber(source.resourceId, 3)}.png`;
|
|
}
|
|
if (source.typeName === 'star') {
|
|
return `/assets/${serverCode}/thumb/common_rip/star.png`;
|
|
}
|
|
return `/assets/${serverCode}/thumb/common_rip/${source.typeName}${source.resourceId}.png`;
|
|
}
|
|
|
|
/**
|
|
* 下载道具缩略图资源。
|
|
*
|
|
* @param source - 道具资源来源字段。
|
|
* @param server - 目标服务器。
|
|
*/
|
|
async getImageBuffer(
|
|
source: ItemResourceSource,
|
|
server: Server | undefined,
|
|
): Promise<Buffer> {
|
|
return await this.provider.getAsset(this.getImagePath(source, server));
|
|
}
|
|
}
|
|
|
|
export const itemResourceRepository = new ItemResourceRepository();
|