// // KBChatMessage.h // CustomKeyboard // #import #import NS_ASSUME_NONNULL_BEGIN @interface KBChatMessage : NSObject @property (nonatomic, copy) NSString *text; @property (nonatomic, assign) BOOL outgoing; @property (nonatomic, copy, nullable) NSString *audioFilePath; @property (nonatomic, copy, nullable) NSString *avatarURL; @property (nonatomic, copy, nullable) NSString *displayName; @property (nonatomic, strong, nullable) UIImage *avatarImage; /// 是否处于加载状态 @property (nonatomic, assign) BOOL isLoading; /// 是否完成(用于打字机效果) @property (nonatomic, assign) BOOL isComplete; /// 是否需要打字机效果 @property (nonatomic, assign) BOOL needsTypewriterEffect; /// 音频 ID(用于异步加载音频) @property (nonatomic, copy, nullable) NSString *audioId; /// 音频数据(缓存) @property (nonatomic, strong, nullable) NSData *audioData; /// 音频时长(秒) @property (nonatomic, assign) NSTimeInterval audioDuration; + (instancetype)messageWithText:(NSString *)text outgoing:(BOOL)outgoing audioFilePath:(nullable NSString *)audioFilePath; /// 创建用户消息 + (instancetype)userMessageWithText:(NSString *)text; /// 创建 AI 消息(带 audioId) + (instancetype)assistantMessageWithText:(NSString *)text audioId:(nullable NSString *)audioId; /// 创建加载中的 AI 消息 + (instancetype)loadingAssistantMessage; @end NS_ASSUME_NONNULL_END