2026-01-15 18:16:56 +08:00
|
|
|
|
//
|
|
|
|
|
|
// KBChatMessage.h
|
|
|
|
|
|
// CustomKeyboard
|
|
|
|
|
|
//
|
|
|
|
|
|
|
|
|
|
|
|
#import <Foundation/Foundation.h>
|
|
|
|
|
|
#import <UIKit/UIKit.h>
|
|
|
|
|
|
|
|
|
|
|
|
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;
|
|
|
|
|
|
|
2026-01-30 13:17:11 +08:00
|
|
|
|
/// 是否处于加载状态
|
|
|
|
|
|
@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;
|
|
|
|
|
|
|
2026-01-15 18:16:56 +08:00
|
|
|
|
+ (instancetype)messageWithText:(NSString *)text
|
|
|
|
|
|
outgoing:(BOOL)outgoing
|
|
|
|
|
|
audioFilePath:(nullable NSString *)audioFilePath;
|
|
|
|
|
|
|
2026-01-30 13:17:11 +08:00
|
|
|
|
/// 创建用户消息
|
|
|
|
|
|
+ (instancetype)userMessageWithText:(NSString *)text;
|
|
|
|
|
|
|
|
|
|
|
|
/// 创建 AI 消息(带 audioId)
|
|
|
|
|
|
+ (instancetype)assistantMessageWithText:(NSString *)text
|
|
|
|
|
|
audioId:(nullable NSString *)audioId;
|
|
|
|
|
|
|
|
|
|
|
|
/// 创建加载中的 AI 消息
|
|
|
|
|
|
+ (instancetype)loadingAssistantMessage;
|
|
|
|
|
|
|
2026-01-15 18:16:56 +08:00
|
|
|
|
@end
|
|
|
|
|
|
|
|
|
|
|
|
NS_ASSUME_NONNULL_END
|