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 { return await this.provider.getAsset(this.getImagePath(source, server)); } } export const itemResourceRepository = new ItemResourceRepository();