跳到主要内容

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