# 监听消息API >[info] 本章节将会对所有可以监听的消息类型中的API进行介绍。 <br> ***** <br> # 信息携带者API 首先值得一提的是,在`监听消息`章节中的 `1.2.3-BETA` 版本追加更新中我提到了`参数携带者` 的概念,简单来讲,参数携带者就是指携带了部分有具体含义的数据,其原理即接口的实现,十分好理解。因此我将会在介绍监听消息中的API之前,先介绍一下截至到`1.3.5-BETA`版本的所有消息携带者API及其API含义,并在介绍监听消息的时候使用消息携带者标识来标识这个监听消息中携带了哪些参数。 <br> ## **账号信息携带者** QQCodeAble >[success] 此接口规定方法以获取那些存在 **账号** </code>的信息,例如QQ号 > 用于接收的消息或事件中 ```java /** * 获取QQ号信息。 ※ 高版本核心中此方法也可能叫做getCode() * 假如一个消息封装中存在多个QQ号信息,例如同时存在处理者与被处理者,一般情况下我们认为其返回值为被处理者。 */ String getQQCode(); /** * 将{@link #getQQCode()} ()} 获取到的值转化为long类型 * @return long类型的qq号 * @throws NumberFormatException 存在数字转化隐患 */ long getQQCodeNumber(); ``` ## **群号信息携携带者** GroupCodeAble >[success] 此接口定义那些存在群号的消息类型的获取群号的方法 ```java /** * 获取消息中存在的群号信息 */ String getGroupCode(); /** * 将{@link #getGroupCode()} 获取到的值转化为long类型 * @return long类型的群号 * @throws NumberFormatException 存在数字转化隐患 */ long getGroupCodeNumber(); ``` ## **号码携带者 ** CodesAble >[success] 同时存在 `QQCodeAble` 的特性与 `GroupCodeAble` 的特性 ## **唯一标识携带者** FlagAble >[success] 存在可以获取标识的信息中的标识获取接口 ```java /** 获取标识 */ String getFlag(); ``` ## **原始数据携带者** OriginalAble >[success] 用于获取原生数据字符串的接口 > 一般来讲,所有可获取到的消息都应实现此接口 ```java /** 获取原本的数据 originalData */ @JSONField(serialize = false) String getOriginalData(); ``` ## **时间信息携带者** TimeAble >[success] 此接口定义对象可以获取到时间值,并对时间值进行一些转化 > TODO 尚未投入使用 ```java /** 获取时间, 一般为秒类型的时间戳 */ Long getTime(); /** * 将时间视为秒值时间戳来获取{@link LocalDateTime}对象 */ LocalDateTime getTimeBySec(); /** * 将时间视为秒值时间戳来获取{@link LocalDateTime}对象 */ LocalDateTime getTimeBySec(Long nanoOfSec); /** * 将时间视为毫秒值时间戳来获取{@link LocalDateTime}对象 */ LocalDateTime getTimeByMilli(); /** * 将时间时为秒值时间戳来获取{@link Instant}对象 */ Instant getInstantBySec(); /** * 将时间视为秒值时间戳来获取{@link Instant}对象 */ Instant getInstantBySec(Long nanoOfSec); /** * 将时间视为毫秒值时间戳来获取{@link Instant}对象 * @return */ Instant getInstantByMilli(); ``` >[info] 核心`1.7.0`后添加: ## **接收者信息携带者** ThisCodeAble >[success] 可以获取到“**当前消息是哪个BOT接收到的**” ```java /** * 此消息获取的时候,代表的是哪个账号获取到的消息。 * @return 接收到此消息的账号。 */ String getThisCode(); /** * 允许重新定义Code以实现在存在多个机器人的时候切换处理。 * @param code code */ void setThisCode(String code); ``` 以上为目前所有`消息携带者`的接口API,而`消息携带者`之后,我将会简单介绍一下监听消息中的几个小分类。 <br> ## **父统一接口API** >[success] 首先,所有的监听消息均实现了一个统一接口 **`MsgGet`** ,而 **`MsgGet`** 又继承了 **`OriginalAble`** 与 **`ThisCodeAble`** 的特性。 此接口的API如下: ```java /** 获取ID, 一般用于消息类型判断 */ String getId(); /** * 消息接收类型定义接口获取接收到的消息类型<br> * 如果没有消息推荐使用空字符串来代替 */ String getMsg(); /** * 重新设置消息 * @param newMsg msg * @since 1.7.x */ void setMsg(String newMsg); /** * 根据当前的msg来更新msg信息。 * oldMsg -> newMsg * @param updateMsg msg更新函数 * @since 1.7.x */ void setMsg(Function<String, String> updateMsg); /** 获取消息的字体 */ String getFont(); /** 获取到的时间, 代表某一时间的秒值。一般情况下是秒值。如果类型不对请自行转化 */ long getTime(); /** * 将时间作为秒值之间戳转化为LocalDateTime */ default LocalDateTime getTimeToLocalDateTime(); ``` <br> 而监听消息中存在一部分比较特殊的消息:事件消息,故此所有的事件消息便全部实现接口`EventGet`,且`EventGet`接口继承了`MsgGet`接口,EventGet中的API如下: ```java /** * 事件中获取消息默认内容为空且无法设置 */ @Override default String getMsg(){ return ""; } default void setMsg(String msg){} /** * 事件中字体的获取默认为空且无法设置 */ @Override default String getFont(){ return ""; } default void setFont(String font){} ``` >[warning] `EventGet`中并没有增加新的API,而是对一般事件类中可能不会出现的消息进行了一步处理。 <br> # 监听消息API 介绍完了以上的消息携带者API与父接口API,接下来我便会对监听消息封装中的API进行介绍,并且对消息所携带的内容进行简单标识。在标识后如果没用什么特殊规则,将不会对信息携带者内的API进行再次介绍。 ## **讨论组消息 DiscussMsg** >[success] **`CodesAble` `FlagAble` `MsgGet`** ```java /** 获取讨论组号 */ String getGroup(); /** 获取发消息的人的QQ */ String getQQ(); ``` ## **群消息 GroupMsg** >[success] **`CodesAble` `FlagAble` `MsgGet`** ```java /** 获取群消息发送人的qq号 */ String getQQ(); /** 获取群消息的群号 */ String getGroup(); /** 获取消息类型 , 枚举类型*/ GroupMsgType getType(); ``` ## **私信消息 PrivateMsg** >[success] **`CodesAble` `FlagAble` `MsgGet`** ```java /** 获取私聊消息类型 */ PrivateMsgType getType(); /** 获取发送人的QQ号 */ String getQQ(); ``` ## **好友添加申请事件 FriendAddRequest** >[success] **`QQCodeAble` `FlagAble` `EventGet`** ```java /** 请求人QQ */ String getQQ(); /** 请求消息 */ @Override String getMsg(); ``` ## **好友已经添加事件 FriendAdd** >[success] `QQCodeAble` `EventGet`** ```java /** 添加人的QQ */ String getQQ(); ``` ## **群添加请求事件 GroupAddRequest** >[success] **`EventGet` `CodesAble` `FlagAble`** ```java /** 获取群号 */ String getGroup(); /** 获取QQ号 */ String getQQ(); /** 获取消息 */ @Override String getMsg(); /** 加群类型 */ GroupAddRequestType getRequestType(); ``` ## **群成员增加 GroupMemberIncrease** >[success] **`EventGet` `CodesAble`** ```java /** 获取类型 */ IncreaseType getType(); /** 群号 */ String getGroup(); /** 操作者的QQ号 */ String getOperatorQQ(); /** 被操作者的QQ号 */ String getBeOperatedQQ(); /** 使用的是被操作者的QQ */ @Override default String getQQCode(){ return getBeOperatedQQ(); } ``` ## **群成员减少事件 GroupMemberReduce** >[success] **`EventGet` `CodesAble`** ```java /** 获取类型 */ ReduceType getType(); /** 群号 */ String getGroup(); /** 操作者的QQ号 */ String getOperatorQQ(); /** 被操作者的QQ号 */ String getBeOperatedQQ(); /** 使用的是被操作者的QQ */ @Override default String getQQCode(){ return getBeOperatedQQ(); } ``` ## **群管理员变动事件 GroupAdminChange** >[success] **`EventGet` `CodesAble`** ```java /** 来自的群 */ String getGroup(); /** 操作者的QQ号 */ String getOperatorQQ(); /** 被操作者的QQ号 */ String getBeOperatedQQ(); /** 使用的是被操作者的QQ */ default String getQQCode(){ return getBeOperatedQQ(); } /** 获取管理员变动类型 */ GroupAdminChangeType getType(); ``` ## **群文件上传事件 GroupFileUpload** >[success] **`EventGet` `CodesAble`** ```java /** 群号 */ String getGroup(); /** 发信人QQ */ String getQQ(); /** 文件名 */ String getFileName(); /** 文件大小 Long类型,字节 */ Long getFileSize(); /** 获取文件Busid */ String getFileBusid(); ```