import { ActionName } from '@/napcat-onebot/action/router'; import { GetPacketStatusDepends } from '@/napcat-onebot/action/packet/GetPacketStatus'; import { Type, Static } from '@sinclair/typebox'; import { ExtendsActionsExamples } from '../example/ExtendsActionsExamples'; const PayloadSchema = Type.Object({ group_id: Type.String({ description: '群号' }), chat_type: Type.Union([Type.Number(), Type.String()], { default: 1, description: '聊天类型' }), }); type PayloadType = Static; const ReturnSchema = Type.Array( Type.Object({ type: Type.String({ description: '角色类型' }), characters: Type.Array( Type.Object({ character_id: Type.String({ description: '角色ID' }), character_name: Type.String({ description: '角色名称' }), preview_url: Type.String({ description: '预览URL' }), }), { description: '角色列表' } ), }), { description: 'AI角色列表' } ); type ReturnType = Static; export class GetAiCharacters extends GetPacketStatusDepends { override actionName = ActionName.GetAiCharacters; override payloadSchema = PayloadSchema; override returnSchema = ReturnSchema; override actionSummary = '获取AI角色列表'; override actionDescription = '获取群聊中的AI角色列表'; override actionTags = ['扩展接口']; override payloadExample = ExtendsActionsExamples.GetAiCharacters.payload; override returnExample = ExtendsActionsExamples.GetAiCharacters.response; async _handle (payload: PayloadType) { const chatTypeNum = Number(payload.chat_type); const rawList = await this.core.apis.PacketApi.pkt.operation.FetchAiVoiceList(+payload.group_id, chatTypeNum); return rawList?.map((item) => ({ type: item.category, characters: item.voices.map((voice) => ({ character_id: voice.voiceId, character_name: voice.voiceDisplayName, preview_url: voice.voiceExampleUrl, })), })) ?? []; } }