草稿 API
Assiah 提供草稿管理功能,允许玩家保存未完成的邮件并在之后继续编辑或发送。
方法一览
| 方法 | 返回值 | 说明 |
|---|---|---|
saveDraft(request: SaveDraftRequest) | CompletableFuture<DraftResult> | 保存草稿 |
getDraft(ownerId: UUID, draftId: String) | CompletableFuture<MailDraft?> | 获取单个草稿 |
queryDrafts(ownerId: UUID, page: Int, pageSize: Int) | CompletableFuture<MailboxPage<MailDraft>> | 分页查询草稿列表 |
deleteDraft(ownerId: UUID, draftId: String) | CompletableFuture<DraftResult> | 删除草稿 |
sendDraft(ownerId: UUID, draftId: String) | CompletableFuture<SendResult> | 发送草稿 |
SaveDraftRequest
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
draftId | String? | ❌ | 草稿 ID,null 时创建新草稿,否则更新已有草稿 |
ownerId | UUID | ✅ | 草稿所有者 UUID |
sender | SenderSnapshot | ✅ | 发送者快照 |
recipient | Recipient? | ❌ | 收件人信息,编辑中可为 null |
title | String | ❌ | 邮件标题,默认空字符串 |
body | String | ❌ | 邮件正文,默认空字符串 |
attachments | List<MailAttachment> | ❌ | 附件列表 |
summary | String? | ❌ | 邮件摘要 |
sourceServer | String? | ❌ | 源服务器名称 |
targetServer | String? | ❌ | 目标服务器名称 |
relationType | RelationType | ❌ | 邮件关系类型,默认 NONE |
rootMailId | String? | ❌ | 会话根邮件 ID |
parentMailId | String? | ❌ | 父邮件 ID |
remarks | String? | ❌ | 草稿备注 |
receiveCondition | String? | ❌ | Kether 接收条件脚本 |
claimCondition | String? | ❌ | Kether 领取条件脚本 |
claimConditionMessage | String? | ❌ | 领取条件不满足时的提示消息 |
autoSave | Boolean | ❌ | 是否为自动保存触发,默认 false |
DraftResult
| 字段 | 类型 | 说明 |
|---|---|---|
success | Boolean | 操作是否成功 |
draft | MailDraft? | 保存操作时返回草稿对象,删除时为 null |
failure | MailFailure? | 失败时的错误信息 |
使用示例
保存草稿
import kim.hhhhhy.assiah.api.AssiahAPI
import kim.hhhhhy.assiah.api.request.SaveDraftRequest
import kim.hhhhhy.assiah.api.mail.SenderSnapshot
import kim.hhhhhy.assiah.api.mail.Recipient
val request = SaveDraftRequest(
ownerId = playerUUID,
sender = SenderSnapshot.player(playerUUID, "Steve"),
recipient = Recipient(targetUUID, "Alex"),
title = "未完成的邮件",
body = "这封邮件还没写完..."
)
AssiahAPI.saveDraft(request).thenAccept { result ->
if (result.success) {
println("草稿已保存,ID: ${result.draft?.draftId}")
}
}
分页查询草稿列表
AssiahAPI.queryDrafts(playerUUID, page = 1, pageSize = 21).thenAccept { page ->
page.items.forEach { draft ->
println("草稿: ${draft.title} (ID: ${draft.draftId})")
}
}
编辑并发送草稿
// 获取草稿
AssiahAPI.getDraft(playerUUID, draftId).thenCompose { draft ->
if (draft != null) {
// 直接发送草稿
AssiahAPI.sendDraft(playerUUID, draftId)
} else {
CompletableFuture.completedFuture(null)
}
}.thenAccept { result ->
if (result?.success == true) {
println("草稿已发送")
}
}
删除草稿
AssiahAPI.deleteDraft(playerUUID, draftId).thenAccept { result ->
if (result.success) {
println("草稿已删除")
}
}
备注
草稿发送后会自动从草稿箱中移除。草稿保存时触发 MailDraftSaveEvent,发送草稿时才会触发 MailSendEvent。