8000 GitHub - SakuraTown/SakuraMail: 一个发送系统邮件的解决方案,适用于各种复杂情况
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

SakuraTown/SakuraMail

Repository files navigation

SakuraMail

这是一个发送系统邮件的解决方案,适用于各种复杂情况

插件特点

模拟情景

  • 给 2022/08/25 14点 ~ 16点 在线时长满1小时的玩家发送邮件
  • 给超过30天未登录且总游戏时间超过50小时的老玩家发送邮件
  • 每周周一晚上8点给在线的玩家发送邮件
  • 给今天在线超过10小时的玩家发送邮件
  • 给当前在线/离线的玩家发送邮件
  • 给服务器新人发送邮件
  • 按权限发送邮件
  • ......

其他特点

  • 插件全程异步操作,主线程0卡顿
  • 支持 MySQL、MariaDB、SQLite、H2、Oracle、PostgreSQL、SQLServer 数据库
  • 高度自定义的ui、消息

基本信息

  • 插件使用 Kotlin 语言 8000 编写,开源地址 https://github.com/SakuraTown/SakuraMail

  • 兼容的MC版本: 1.7.10 ~ 1.19.2 (仅测试1.19.2)

  • 软依赖 PlaceholderAPI

  • 运行环境: jre8 及以上

  • 依赖(在第一次插件启用时将自动下载)

    • org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.7.10

    • org.jetbrains.exposed:exposed-core:0.39.2

    • org.jetbrains.exposed:exposed-dao:0.39.2

    • org.jetbrains.exposed:exposed-jdbc:0.39.2

    • org.jetbrains.exposed:exposed-java-time:0.39.2

    • com.zaxxer:HikariCP:4.0.3

    • org.quartz-scheduler:quartz:2.3.2

    • com.github.cryptomorin:XSeries:9.0.0


安装

安装方式一

将服务端关闭,将插件复制到服务端下的 plugins 文件夹中,启动服务端

安装方式二

将插件复制到服务端下的 plugins 文件夹中,使用 pluginman yum serverutils 等插件不停服载入插件

出现以下信息说明插件正常启动

image-20220825221511845


配置

插件的邮件系统分为3个部分:邮件、邮件接收者、邮件发送者

邮件配置

一封邮件的所有接收者的附件与标题都是一样的,邮件可以被重复发送,当一封邮件被删除时,所有人的该邮件将被删除

plugins\SakuraMail文件夹中, mails.yml 为储存本地邮件的配置文件。

邮件分为 idexpire(有效时间) 、icon(显示的图标)、title(邮件标题)、items(附件物品)、fakeItems(虚拟物品的位置) 、commands(命令) 其中只有 id 是必须的

你有2种方式来创建邮件:

  1. 使用命令 sakuramail systemMail create [id] 其ID为任意唯一的字符串,如果手上拿着物品,则这个物品为 icon ,之后会打开一个物品栏,放入附件物品(会记录位置),当关闭物品栏时邮件完成创建。expire fakeItems commands无法通过命令创建。

  2. 通过配置修改 mails.yml

    如下

    mails:
      test: # 随便取名,建议与ID一致
        id: test # 唯一ID
        expire: P30D # 过期时间,格式见下文 #时间格式
        icon: #图标,格式遵循XItemStack的格式https://github.com/CryptoMorin/XSeries/wiki/XItemStack
          material: STONE 
        title: aaa  # 标题(箱子界面的标题)
        items: ...(省略)
        fakeItems: '47' # 虚拟物品的位置,该位置的物品将不会发给玩家
        commands: 
          - spawn                     # 以玩家省份运行命令
          - CMD:eco give %player% 200 # 以控制台省份运行命令 %player% 将转为领取的玩家名字
          - OP:fly                    # 以玩家为OP运行命令

** 需要注意的是,以下选项建议为true,将支持所有物品,为false虽然能编辑附件,但是有可能不兼容一些特殊物品,比如拥有自定义附魔的物品**

# 是否对邮件的 items 加密压缩 
# 如果为true,只能使用命令/sakuramail systemMail edit 命令在游戏内修改物品
# 请注意,设置为 false 可能不支持某些非原版物品!
isEncrypted: true

如果你装了 ItemsAdder

mails.yml 中的

icon 项可以为 item: namespacedId

否则为

icon:
  material: PAPER

相关命令

sakuramail systemMail 为邮件命令的根节点

有以下子节点

create <id> [title]    创建系统邮件,手上的是图标
edit <id>              编辑系统邮件的物品,其他操作请从yml修改
upload                 上传邮件数据至数据库
download               从数据库下载邮件数据至本地
remove <id>            删除邮件

邮件接收者设置

plugins\SakuraMail文件夹中, receivers.yml 为储存邮件接收者的配置文件。

你有2种方式来创建邮件接收者:

  1. 使用命令 sakuramail receiver add <id> <parms> 为某个id的接收者添加参数,如果不存在则将创建新的。

  2. 通过配置修改 receivers.yml

    如下是一个最简单的选择在线玩家的选择器,id为 在线玩家 参数为 online

    # 邮件目标选择器节点
    receivers: 
      在线玩家: # 邮件目标选择器的ID
       - online # 参数
       - ...

参数说明

邮件接收者拥有丰富的参数选择,可以适应大多数情况

每条参数都会匹配所有符合情况的人

参数的解析自上而下,但是有一类参数的解析优先—— 一次游戏sql参数

所有一次游戏sql参数将合并为一条sql语句以节省查询次数

sql参数将会从数据库查询匹配的接收者,请尽量少用以节省性能消耗

[time]、[duartion]的格式见下 ## 时间格式

一次游戏sql参数

玩家从进服退服将被记录,以下参数就是对这一次游戏的选择

参数 说明
loginTime before 登陆时间 在 之前
loginTime after 登陆时间 在 之后
loginTime between 登陆时间 在 和 之间
quitTime before 退出时间 在 之前
quitTime after 退出时间 在 之后
quitTime between 退出时间 在 和 之间
playtime greater 一次游戏时间大于
playtime less 一次游戏时间小于
playtime between 一次游戏时间在 之间

其他sql参数

totaltime 专用可选参数,分别为 统计时间起始终点不选则默认所有时间范围 格式与 相同

start需要以S开头,end需要以E开头,顺序随意

比如

totaltime greater PT5H SDPT0S 表示今天0点开始在线超过5小时 totaltime greater PT5H SDP-1D EPT0S 表示昨天0点到现在在线超过5小时

参数 说明
totaltime greater [start] [end] 游戏时间大于
totaltime less [start] [end] 游戏时间小于
totaltime between 游戏时间在 之间
hasmail 拥有 ID 为 的邮件
all 所有记录过的玩家(在安装本插件之后)

其他参数 (范围在触发的那个服务器里)

参数 说明
online 所有在线玩家
offline 所有离线玩家
permission 所有拥有 权限的在线玩家
gamemode 所有 游戏模式为 的在线玩家
uuids ;[uuid2];[uuid3].... 一组uuid的玩家
names ;[name2];[name3].... 一组name的玩家(从登录过的玩家里找)
limit 限制集合最多 个

参数集合操作

参数的解析自上而下,彼此为独立的集合,而集合之间的关系也可以指定

比如

  • online
  • permission xxx

表示既是在线玩家 又是 拥有 xxx 权限的玩家 所有参数默认为集合的的关系,也就是交集

集合关系的声明位于参数之前 格式为: 关系,参数 以英文逗号分隔

集合关系有如下

关系 说明
and 2个集合取交集
andNot 在所有接收者(对应all参数)的集合中减去本行参数的玩家组成的集合再取交集
or 2个集合的并集,也就是相加 与add一致
orNot 在所有接收者(对应all参数)的集合中减去本行参数的玩家组成的集合再取并集
add 2个集合相加,也就是并集 与or一致
remove 从上面参数的集合中减去本集合的接收者

比如

  • online
  • or,offline

=> 效果与 localAll 相同

  • online

  • remove,permission xxx

=> 在线玩家中没有xxx权限的玩家

相关命令

sakuramail receiver 为邮件接收者命令的根节点

有以下子节点

set <id> <index> <parms>  设置邮件接收者参数
add <id> <parms>          设置邮件接收者参数
remove <id>               删除邮件接收者
test <id>                 测试邮件接收者
upload <id>               上传邮件接收者数据
download <id>             下载邮件接收者数据
export <id> <type>        导出符合邮件接收者的玩家

邮件发送者设置

plugins\SakuraMail文件夹中, senders.yml 为储存邮件发送者的配置文件。

你有2种方式来创建邮件发送者:

  1. 使用命令 sakuramail sender create <id> <type> [param]

    其中 为唯一id 为发送者的类型,目前有 onTime period login manual register 5种 [parma] 为对应类型的参数

  2. 通过配置修改 senders.yml

    手动: # 邮件发送者ID
      type: manual 
      receivers:
        - online
      mails:
        - test
      
    准时: # 邮件发送者ID
      type: onTime 
      param: 2022-08-20T20:00:00 ## 只有这种格式
      receivers:
        - online
      mails:
        - test
      
    周期: # 邮件发送者ID
      type: period
      param: 0 0 * * * ?  ## cron 表达式 生成器 https://cron.qqe2.com/
      receivers:
        - online
      mails:
        - test
      
    登录: # 邮件发送者ID
      type: login # 该类型在玩家登录时触发
      receivers:
        - player
      mails:
        - test
    注册: # 邮件发送者ID,仅支持Authme时有效
      type: register # 该类型在玩家注册时触发
      receivers:
        - pl
    8558
    ayer
      mails:
        - test

    特别的: login 类型的发送者中的接收者的参数中如果有 %uuid% 将被替换为哦该登录玩家的uuid

    一个发给新人的邮件应该这么写

    receivers.yml

    receivers:
      login_player:
        - uuids %uuid%
      logined_before:
        - logintime before -PT1S

    senders.yml

    登录:
      type: login
      receivers:
        - login_player
        - remove,logined_before
      mails:
        - test

    如上,你会发现 邮件发送者的 receivers 也接受 集合操作 这样可以有更多的组合以满足不同情况

    登录的玩家(login_player)中 减去 以前登录过的玩家(logined_before),剩下的就是新玩家


其他设置

lang.yml 中为玩家能看到的消息

database.yml为数据库设置,默认使用 H2 数据库,生成的默认文件名为 database.mv.db

ui目录下为邮箱界面的设置,可以通过修改文件来修改邮箱界面

如果你装了 ItemsAdder

UI配置中的

item 项可以为 item: namespacedId

否则为

item:
  material: PAPER

quartz.properties为 quartz 库的设置,不懂可以不管

相关信息在文件中都有注释

变量

以下只能用于 mailbox.ymltitle

变量 意义
%sakura_mail_current_page% 当前邮箱的页码
%sakura_mail_total_page% 邮箱的总行数

以下只能用于 mails.ymlicon 选项

变量 意义
%sakura_mail_id% 当前邮件的id
%sakura_mail_sendtime% 当前邮件的发送时间
%sakura_mail_accepttime% 当前邮件的领取时间
%sakura_mail_expire% 当前邮件的剩余有效时间

其他的变量由PlaceHolderAPI提供,有效范围为 邮箱界面、邮件title

邮箱界面可看到的所有物品(除了附件物品)

时间格式

瞬时时间 支持的格式有

第一种

例子 说明
2022-08-24 2022-08-24 当天0点0分0秒
2022-08-24T12:00:00 2022-08-24 的 12:00:00

**第二种 **

例如:P10DT2H30M15.03S 相对时间,默认以当前时间为参考系,正为当前之后负当前之前

P:开始标记,必须有

10D:十天

T:日期和时间的分割标记

2H:两个小时

30M:三十分钟

15.02S:15.02秒

**以上格式也支持<duartion> P1D 表示一天的时间 PT1H表示1小时的时间,但是以下仅支持 **

可在在P之前声明参考系 如DPT1D 表示明天的0点 D-PT1D 或 DPT-1D 表示昨天的0点

参考系 说明
H 以当前小时的起始为参考系
D 以当天0点的起始为参考系
W 以当周周日的起始为参考系
M 以当月一号的起始为参考系

命令

插件主命令根节点为 sakuramail 别名 smail mail

输入根节点可查看所有子节点的信息

命令的权限为 sakuramail.节点名称 可嵌套

玩家默认可用的命令只有一个 sakuramail open 打开自己的邮箱

跨服

如果你想要跨服,请先设置好数据库

邮件、邮件发送者、邮件接收者 的信息使用 upload 命令上传到数据库

请使用一台服务器作为配置服务器和发送服务器,以免重复发送邮件

其他说明

所有 yml 配置都会自动重载 无需命令

构建插件

推荐在IDEA中通过 gralde 的 build 构建

或者控制台运行./gradlew build

About

一个发送系统邮件的解决方案,适用于各种复杂情况

Resources

Stars

Watchers

Forks

Packages

No packages published
0