# 送信器
>[info] 送信器是与插件进行消息交互的重要对象。如果没有送信器,那么你就只能接收消息而无法响应消息。
>[warning] **各种方法内容以实际代码内容为准。**
## **前排预警**
在你研究送信器之前,有一件事情你首先需要了解。
三个送信器`SENDER`、`SETTER`、`GETTER`内的所有方法都是**接口形式**,而真正去实现接口的,是你所使用的**组件**。每一个组件都会去针对一个插件做通讯,并封装消息,然后以接口类型交给使用者。
为什么要提这个呢,主要是想要表达以下观点:
>[danger] (**尤其是非平台所提供的功能中**)并非所有API都可用,也并非所有API中返回的数据的所有方法都能获取到数据。
举个例子,酷Q中其实并没有提供**获取群详细信息**这么一个功能,那么不同的插件之间,对于此功能的实现就可能有所不同,比如A插件不存在群等级,B插件获取不到管理员列表,而C插件压根就不支持之类的。
其次,有时候我可能会偷偷的更新一些api但是忘了更新文档,所以一切内容以实际代码为准。你可以通过maven下载源代码查看各个方法的注释。
## **消息交互**
核心框架提供了三种类型的送信接口: SENDER、GETTER 、SETTER,并将这三个送信接口整合于送信器对象`MsgSender`中。
(关于这三个送信接口的API请查阅送信器章节下的对应章节)
这三个送信接口在送信器`MsgSender`中均作为公共常量(`public final`)使用,所以你可以直接使用而不用调方法获取。
举个例子,假如你要发送一个私信消息 '你好' 到QQ号:123456789,那么代码是这样的:
```java
msgSender.SENDER.sendPrivateMsg("123456789", "你好");
```
很简单,不是吗?
*关于这三个送信器的API这里不做过多介绍,请查询对应章节。*
>[danger] **注①:** 核心框架所提供的这三个送信接口仅作为规范,具体API是否可以实现或使用请参照对应支持组件的文档介绍。
> 例如LEMOC插件本身并不存在获取群成员列表这样的API。
>[danger] **注②:** 有时候插件也有可能会提供一些核心框架中没有的API,此类API可简称为扩展API,而此类扩展API的使用方式均由组件框架所定义,所以如果有,则其具体使用方式参照对应的组件框架。
## **内容判断**
送信器提供了一些方法以对送信器中存在的元素状态进行判断:
```java
/**
* 是否存在监听器函数
*/
boolean hasMethod();
/**
* 是否存在send消息器
*/
boolean isSendAble();
/**
* 是否存在set消息器
*/
boolean isSetAble();
/**
* 是否存在Get消息器
*/
boolean isGetAble();
```
## **执行阻断**
送信器除了于插件交互以外,还有一个重要的功能就是使用阻断机制来对监听函数进行控制了。
关于阻断机制相关内容、讲解请详见 阻断机制 章节。
## **增强方法**
>[info] 从`v1.1-BETA`开始增加
伴随着HttpApi插件对接组件的基础功能开发,我发现正常的接口不会存在类似于群名称、qq好友昵称这样的信息。于是乎,我调整了部分内部消息封装类的接口(对使用无影响),并在MsgSender中增加了部分方法来便捷获取对应的信息。
* 通过QQ号获取陌生人信息
```java
/**
* 通过QQ号获取陌生人信息
* @param code qq号
* @return qq号的信息
*/
public StrangerInfo getPersonInfoByCode(String code);
```
* 通过携带QQ号信息的对象来获取信息
>[success] 只要能从对象中获取到QQ号信息的监听对象,都可以直接作为参数在此方法中使用。
> 例如:**`PrivateMsg(私信消息的发信人)`、`GroupMsg(群消息的发信人)`**。
> 假如对象中存在多个账号信息,例如两种QQ号(操作者和被操作者),例如 **`GroupMemberReduce(群成员减少事件)`**,则默认获取的为被操作者的QQ号
```java
/**
* 通过携带QQ号信息的对象来获取信息
* @param codeAble 携带QQ号信息的对象
* @return
*/
public StrangerInfo getPersonInfo(QQCodeAble codeAble);
```
* 通过群号获取群详细信息
```java
/**
* 通过群号获取群详细信息
* @param groupCode 群号
* @return 群详细信息
*/
public GroupInfo getGroupInfoByCode(String groupCode);
```
* 通过携带群号的对象获取群详细信息
> 原理同上,只要能获取到QQ号的监听消息都可以放进去当参数,例如`GroupMsg`
```java
/**
* 通过携带群号的对象获取群详细信息
* @param groupCodeAble 携带群号的对象
* @return 群详细信息
*/
public GroupInfo getGroupInfo(GroupCodeAble groupCodeAble);
```
## 简化方法
>[info] 从`v1.2.3-BETA`开始增加
在版本迭代的过程中,我在一点点的优化框架中的结构与接口,并且得益于此,我在`v1.2.3-BETA`版本之后在三种送信器中都增加了一部分可以简化操作的API。这些API与原来的方法功能一致,仅仅是参数的填入更加简便了。
在三个送信器中,假如你获取到了一个私信消息(`PrivateMsg`),想要通过这个消息中的QQ号信息来获取一个陌生人信息(`StrangerInfo`),以前是需要先获取QQ号,然后QQ号再作为参数来获取,就像这样:
```java
@Listen(MsgGetTypes.privateMsg)
public void hello(PrivateMsg privateMsg, MsgSender sender){
String qq = privateMsg.getQQ();
StrangerInfo strangerInfo = sender.GETTER.getStrangerInfo(qq);
}
```
在结构优化之后,只要是携带了QQ号信息的信息对象(例如私信消息`PrivateMsg`、群消息`GroupMsg`),都可以直接作为参数放入。就像这样:
```java
@Listen(MsgGetTypes.privateMsg)
public void hello(PrivateMsg privateMsg, MsgSender sender){
StrangerInfo strangerInfo = sender.GETTER.getStrangerInfo(privateMsg);
}
```
- 前言
- 简单介绍
- 我该如何阅读文档
- 视频教程
- 安装与使用
- 开源协议
- 免责&捐助
- 注意事项
- 版本命名规则简介
- 主要功能版本历史
- 功能指引
- 通用API与功能
- 国际化语言
- 异常
- 消息监听
- @Listen
- @OnListen模板
- @Filter
- 消息参数截取
- @Spare
- @Constr
- @Ignore
- @ListenBreak
- @ListenBreakPlugin
- @ListenBody
- 监听响应
- 成功判定与返回值
- 监听上下文
- 动态参数
- 监听消息API
- 异步监听 @Async
- 限流监听 @Limit
- 自定义Http送信器
- 枚举与类型
- 送信器
- SENDER
- SETTER
- GETTER
- 返回值
- 其他位置
- 日志与日志拦截
- 异常处理
- 依赖注入
- 自定义依赖获取
- 批量依赖载入
- 注意事项
- 常量
- 定时任务
- 自定义过滤
- 拦截器
- 拦截器总定义
- 上下文对象总定义
- 监听消息拦截
- 送信器拦截
- 监听函数拦截
- CAT码
- CQ码
- CQCode
- CQ码工具类
- CQ扩展工具类
- AppendList拼接链
- 高级内容
- 阻断机制
- 截断机制
- 自定义枚举类型
- 枚举工厂
- byName注解
- 自定义注解
- 配置
- 文件配置
- 注解配置
- 参数配置
- 多配置
- 多账号
- 自定义账号管理器
- 小心!
- 核心版本与组件如何升级核心
- 核心版本迭代指南
- 核心
- 更新日志
- jar包与依赖
- 监听消息类结构图
- 快速启动
- 模组与扩展
- 模组开发
- 现有模组
- 通用模组-延时任务
- 通用模组-CQ码工具
- 转义器
- CQ码操作工具类
- CQ码模板-CodeTemplate
- CQ码载体-KQCode
- CQ码构建器
- MQ码工具类
- 通用模组-redis-bot管理器
- 通用模组-Debugger
- Debugger-common模块
- Debugger-server模块
- Debugger-client模块
- 通用模组-钉钉机器人
- 组件-Mirai(JVM)
- 快速开始(1.13+)
- springboot-starter
- 注意事项
- 配置
- 额外的内容
- 快速回复
- 额外监听
- CQ码解析
- 组件-酷Q(QQ)-CQ HTTP API(基本失效)
- 快速开始(推荐)
- 快速开始(1.7.x以下,不推荐)
- 快速开始(Springboot启动器)
- 启动器、启动接口与配置类
- 配置
- 文件配置
- 注意事项
- 更新日志
- 额外的内容
- 自定义额外监听
- CQ送信器
- 元事件
- 监听消息类结构图
- 组件-酷Q(QQ)-JCQ(失效)
- 快速开始
- 更新日志
- 额外的内容
- JCQ日志
- 配置
- 注意事项
- 监听消息类结构图
- 组件-酷Q(QQ)-HTTP TO CQ(失效)
- 快速开始(核心1.7.x及以下)
- 启动器、启动接口与配置类
- 配置
- 文件配置
- 注意事项
- 更新日志
- 监听消息类结构图
- 组件-酷Q(QQ)-LEMOC (失效)
- 快速开始(核心1.7.x及以下)
- 配置
- 注意事项
- 更新日志
- 监听消息类结构图
- Springboot快速启动器
- 常见问题汇总
- BUG反馈
- 更新计划总览