mirror of
https://github.com/NapNeko/NapCatQQ.git
synced 2026-02-05 15:11:15 +00:00
Moved action example files into a new 'example' directory and updated all imports accordingly. Removed the monolithic 'examples.ts' and redefined ActionExamples in OneBotAction.ts to only include common error codes. This improves code organization and maintainability.
54 lines
2.0 KiB
TypeScript
54 lines
2.0 KiB
TypeScript
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<typeof PayloadSchema>;
|
|
|
|
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<typeof ReturnSchema>;
|
|
|
|
export class GetAiCharacters extends GetPacketStatusDepends<PayloadType, ReturnType> {
|
|
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,
|
|
})),
|
|
})) ?? [];
|
|
}
|
|
}
|