Suite

概览

Mail 邮件系统功能概览

Mail 邮件系统

模块简介

Mail 是 Suite 的全功能邮件系统模块,提供 收件箱玩家写信预设邮件CDK 兑换 四合一邮件服务。模块通过 ArcartX UI 实现全图形化交互,支持物品附件、多货币附件、领取条件、内容审核、跨服同步等高级功能,并可被其他模块通过 MailDispatchable Capability 调用发送奖励邮件。

如果你只需要收件箱,可以前往 ArcartX 官方购买高级会员获取插件 SystemMail

Suite 支持将 SystemMail 作为邮件后端:未启用本模块时,其他模块的邮件发送请求会自动降级转发给 SystemMail 投递,详见下方「SystemMail 降级模式」。

属性
模块 IDmail
版本1.4.4
主类xuanmo.arcartxsuite.mail.MailModule
配置文件config.yml
消息文件messages.yml
外部依赖PlaceholderAPI(必需,缺失时模块跳过加载)
模块依赖无(本体内置 API 即可运行)
配置版本2
数据库表前缀mail_(共享模式无前缀)

SystemMail 降级模式

当服务器未启用本模块(mail)但安装了 SystemMail 插件时,宿主会自动注册一个降级适配器(SystemMailMailDispatchable),把 MailDispatchable Capability 指向 SystemMail——所有依赖邮件发送能力的模块会无感知地改用 SystemMail 投递邮件,收件、查看、领取由 SystemMail 自身的收件箱提供。

工作原理

  1. 自动检测:宿主在模块加载前检测 SystemMail 是否已安装且 API 就绪(SystemMailApi.isReady()
  2. 注册降级适配器:检测通过即注册为 MailDispatchable 核心 Capability,控制台输出 检测到 SystemMail 插件,已注册邮件降级适配器(MailDispatchable → SystemMail)
  3. 模块无感知接管:所有通过 MailDispatchable.sendMail() 发邮件的功能自动改走 SystemMail,模块侧零配置。涵盖 BattlePass 赛季奖励、Market 到期退回、OnlineRewards 在线奖励、EntityTracker Boss 结算、Fishing 奖励、Lottery 奖品、EventPacket 事件邮件、QQBot 通知等
  4. 本模块优先:mail 模块正常加载时会覆盖降级适配器,所有邮件回到 AXS 邮箱,SystemMail 适配器不再生效;此时 SystemMail 自身的邮件仍保留在其收件箱中,两套邮箱互不影响

发送内容映射

Suite 邮件字段SystemMail 字段说明
sourceModule + sourceDetail + 收件人idempotencyKey去重标识,同一业务动作不重复投递
收件人 UUIDrecipient离线玩家也可投递
标题 / 正文title / content直接映射
发件人名称senderName
来源模块sourcePlugin未指定时默认为 ArcartXSuite
过期时间expireAt
物品附件item✅ 完整转发
货币附件跳过不发送:SystemMail 的货币 provider 标识与 Suite 货币 ID 不一定一致,为避免错误发放直接跳过
预设派发 dispatchPreset❌ 返回失败,预设是 Mail 模块专属功能,SystemMail 无对应概念

限制与注意事项

  • 货币附件会丢失:降级模式下邮件中的货币附件(含 Vault 金币)不会发放,玩家只收到标题、正文和物品附件。依赖货币奖励的场景建议安装本模块
  • 预设派发不可用dispatchPreset 直接返回失败(SystemMail 不支持预设派发),依赖预设的模块需自行降级处理
  • 仅接管发送能力:写信界面、AXS 收件箱 UI、预设、CDK、邮件日志、领取条件等均为本模块功能,降级模式下全部不可用
  • 启动时检测一次:适配器仅在宿主启动时注册。若启动日志未出现降级适配器提示,请检查 SystemMail 是否正常启用,并保证其先于 Suite 完成启用

降级适配基于 SystemMail 1.0.0 API(priv.seventeen.artist.arcartx.systemmail.api)构建。SystemMail 的 send 为异步接口,适配器最多阻塞等待 5 秒;超时将乐观返回成功,实际投递由 SystemMail 在后台完成。

功能特性

特性说明
收件箱系统ArcartX UI 驱动的收件箱界面,支持分页浏览、来源筛选、预览、领取和删除
玩家写信玩家可向其他玩家发送邮件,支持物品附件和 Vault 货币附件,含手续费与税率
预设邮件管理员预设邮件模板,支持批量派发给在线玩家或全部注册玩家,含二次确认机制
CDK 兑换CDK 兑换码系统,支持预设内嵌固定 CDK 和命令动态创建,含冷却和锁定防刷机制
物品附件支持原版、MythicMobs、NeigeItems、Overture、MMOItems 物品库产物,含 Base64 完整序列化
货币附件支持 Vault 金币和多货币系统附件,货币附件可自定义展示图标
领取条件预设邮件支持 claim-conditions 领取条件,使用 ScriptCondition 引擎(PAPI/Aria/JS)
领取命令预设邮件支持 claim-commands 领取时执行命令,支持 <player> 等变量
内容审核敏感词、正则、物品材质、Lore 正则、物品名称正则、NBT/PDC 键值屏蔽
跨服广播多服邮件刷新通知(Redis + Proxy 双后端),收件人上线自动刷新收件箱
邮件日志记录所有邮件操作日志(寄件/领取/删除/预设/CDK),可通过 UI 查看
管理 UI管理员可通过 UI 管理预设邮件(创建/编辑/删除/派发)和查看 CDK
自动清理按保留天数自动清理过期、已领取和已删除邮件,定时任务周期可配置
通知卡片新邮件到达时在聊天栏显示 ArcartX 卡片通知,支持自动换行
二级密码写信时消费宿主二级密码能力,已设置密码的玩家需先解锁才能寄信
公开 API注册 AxsMailService 公开 capability,外部插件经 AxsCapabilities.get() 调用邮件发送/查询/领取/删除接口
数据迁移支持 DatabaseMigratable 能力,可通过 /axs migrate 跨源数据库迁移
数据清理支持 PlayerDataPurgeable 能力,可通过 /axs purge 统一清理玩家数据

依赖

依赖类型名称必需说明
模块依赖ArcartXSuite 本体提供核心 API、存储管理、货币桥接、跨服通道、物品来源注册表等基础设施
外部依赖PlaceholderAPI输出 %axsmail_*% 占位符;external-depends 硬依赖,未安装时模块不加载
外部可选Vault玩家写信货币附件和手续费;不安装时 Vault 货币附件不可用
外部可选PlayerPointsPoints 货币附件;不安装时 Points 附件不可用
外部可选Redis跨服邮件刷新通知;不安装时仅单服可用
外部可选MythicMobs预设邮件物品附件来源(source: mythic
外部可选NeigeItems预设邮件物品附件来源(source: neige
外部可选Overture预设邮件物品附件来源(source: overture
外部可选MMOItems预设邮件物品附件来源(source: mmoitems

邮件类型详解

Mail 模块通过 MailSourceType 枚举区分四种邮件来源类型:

来源类型枚举值发件人说明
系统邮件SYSTEM系统名称(默认"系统")MailDispatchable.sendMail()AxsMailService.send() 发送,其他模块调用产生
玩家邮件PLAYER玩家名称玩家通过写信界面发送,含真实物品附件和货币附件
预设邮件PRESET操作者名称管理员通过命令或 UI 派发预设模板,附件来自预设定义
CDK 邮件CDK"CDK"玩家兑换 CDK 后自动投递,附件来自 CDK 关联的预设

系统邮件

系统邮件由其他模块通过 Capability 或公开 API 发送。例如 BattlePass 发放赛季奖励、Market 退回到期物品、OnlineRewards 发放在线奖励等。系统邮件支持物品附件和货币附件混合,可自定义发件人名称和过期时间。

玩家邮件

玩家通过 /mail compose 打开写信界面,填写收件人、标题、正文,并可从背包拖入物品附件和填写 Vault 货币金额。发送时根据配置收取手续费(base-fee + item-fee)和货币附件税率(attachment-tax-rates)。玩家邮件受内容审核约束,命中敏感词/正则/物品屏蔽规则时禁止发送。

预设邮件

预设邮件是管理员预先定义的邮件模板(YAML 文件),包含固定的标题、正文、附件、领取命令和领取条件。管理员可通过命令或管理 UI 批量派发给在线玩家(all-online)或全部注册玩家(all-registered),多人派发需二次确认。预设邮件还可内嵌 CDK 兑换码,执行 /axs reload mail 后自动同步到数据库。

CDK 邮件

CDK 邮件是玩家通过 /mail cdk <code> 兑换兑换码后自动投递的邮件。CDK 关联一个预设邮件,兑换成功后预设邮件的内容(标题、正文、附件、领取命令、领取条件)会作为新邮件投递到玩家收件箱。CDK 支持全局共享领取次数(所有玩家共用,领完即止)和每玩家仅可领一次的限制。

邮件生命周期

邮件从发送到最终清理,经历以下状态流转(由 MailStatus 枚举管理):

发送 ──→ UNREAD ──→ READ ──→ CLAIMED ──→ 自动清理删除
           │                    │
           │                    └─→ DELETED ──→ 自动清理删除

           └─→ EXPIRED ──→ 自动清理删除
状态枚举值说明
未读UNREAD邮件刚投递,玩家尚未查看
已读READ玩家在收件箱中选中了该邮件
已领取CLAIMED玩家领取了邮件附件和领取命令
已删除DELETED玩家手动删除或管理员删除
已过期EXPIRED邮件超过过期时间,由定时清理任务标记

完整生命周期

  1. 发送:系统/玩家/预设/CDK 触发邮件发送,邮件以 UNREAD 状态写入 mail_entries 表,附件写入 mail_attachments
  2. 投递通知:若收件人在线,发送 ArcartX 聊天卡片通知(axs_mail_notify),并刷新收件箱 UI;若跨服启用,通过 Redis/Proxy 广播 refresh:<uuid> 消息
  3. 查看:玩家打开收件箱(/mail),选中邮件时自动标记为 READ
  4. 领取:玩家点击领取,系统检查领取条件(claim-conditions)、背包空间,原子标记为 CLAIMED,发放物品到背包、执行领取命令、存入货币
  5. 删除:玩家手动删除(受 allow-delete-with-unclaimed-attachments 配置约束),标记为 DELETED
  6. 过期:定时清理任务将超过 expires_at 的邮件标记为 EXPIRED
  7. 清理:定时清理任务删除超过保留天数的 CLAIMED/DELETED/EXPIRED 邮件及其附件记录

过期与清理

配置项默认值说明
retention.cleanup-interval-ticks1200定时清理任务执行间隔(tick,1200 = 60 秒)
retention.default-expire-after-days15玩家邮件默认过期天数(从发送时间算起)
retention.claimed-retention-days7已领取邮件保留天数(超过后物理删除)
retention.deleted-retention-days7已删除邮件保留天数(超过后物理删除)
retention.allow-delete-with-unclaimed-attachmentsfalse是否允许删除含未领取附件的邮件

预设邮件的过期时间由预设的 expires-after-days 字段控制,覆盖默认值。

本页目录