跳到主要内容

草稿 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​

字段类型必填说明
draftIdString?❌草稿 ID,null 时创建新草稿,否则更新已有草稿
ownerIdUUID✅草稿所有者 UUID
senderSenderSnapshot✅发送者快照
recipientRecipient?❌收件人信息,编辑中可为 null
titleString❌邮件标题,默认空字符串
bodyString❌邮件正文,默认空字符串
attachmentsList<MailAttachment>❌附件列表
summaryString?❌邮件摘要
sourceServerString?❌源服务器名称
targetServerString?❌目标服务器名称
relationTypeRelationType❌邮件关系类型,默认 NONE
rootMailIdString?❌会话根邮件 ID
parentMailIdString?❌父邮件 ID
remarksString?❌草稿备注
receiveConditionString?❌Kether 接收条件脚本
claimConditionString?❌Kether 领取条件脚本
claimConditionMessageString?❌领取条件不满足时的提示消息
autoSaveBoolean❌是否为自动保存触发,默认 false

DraftResult​

字段类型说明
successBoolean操作是否成功
draftMailDraft?保存操作时返回草稿对象,删除时为 null
failureMailFailure?失败时的错误信息

使用示例​

保存草稿​

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。