# 消息拦截
> 核心版本`1.5.0`增加。
> 注:核心`1.5.0` 之后最近的一次更新中(`1.6.0`)修改了拦截器相关类的包路径,会造成`1.5.0`版本与`1.6.0及其后续版本`不兼容,还请注意。
消息拦截发生在接收并获取到了有效的 **MsgGet** 对象,且尚未进行监听函数分配、执行的阶段。
此时,你可以对这个消息对象进行拦截,并进行一系列操作。
## **使用**
首先,写一个类,使其实现`MsgIntercept`接口,并且标注`@Beans`注解。
> ※ 注意 此实现类在使用的时候,无论@Beans是否标记为单例,均只会实例化**一次**。
```java
/**
* 示例
**/
@Beans
public class TestIntercept implements MsgIntercept {
/**
* 可以使用部分依赖注入功能。
*/
@Depend
private TestBean bean;
/**
* 唯一必须实现的方法。
* @param context 上下文对象
* @return
*/
@Override
public boolean intercept(MsgGetContext context) {
if(context.getMsgGet() instanceof GroupMsg){
System.out.println("是群消息!");
}
// 上下文对象可以set、get上下文值
context.set("name", "context!");
System.out.println("拦截: " + context.getMsgGet());
TestGroupMsg testGroupMsg = new TestGroupMsg();
testGroupMsg.setMsg("nmsl");
// 用一个新的GroupMsg对象来覆盖原本的GroupMsg对象
context.setMsgGet(testGroupMsg);
// 放行
return true;
}
/**
* 排序值,没有特殊需求不需要实现此方法。
*/
@Override
public int sort(){
return 0;
}
}
```
此接口唯一一个抽象方法:
```java
/**
* 拦截执行函数
* @param context 上下文对象
* @return 是否放行
*/
boolean intercept(MsgGetContext context);
```
其中, 参数`MsgGetContext`提供了部分API以共使用:
| API | 类型 | 描述 |
| --- | --- | --- | --- |
| `SENDER` | 公共常量 | 消息发送器,使用方法同MsgSender.SENDER |
| `SETTER` | 公共常量 | 消息设置器,使用方法同MsgSender.SETTER |
| `GETTER` | 公共常量 | 信息获取器,使用方法同MsgSender.GETTER |
| `getMsgGet()` | 方法 | 获取此次监听到的MsgGet消息对象 |
| `setMsgGet(MsgGet)` | 方法 | 覆盖当前监听到的MsgGet消息对象 |
| `getTypes()` | 方法 | 获取当前监听到的消息类型 |
| `setTypes(MsgGetTypes)` | 方法 | 设置当前监听到的消息类型,但是只会影响上下文对象的值,不会对监听发生影响 |
- 前言
- 简单介绍
- 我该如何阅读文档
- 视频教程
- 安装与使用
- 开源协议
- 免责&捐助
- 注意事项
- 版本命名规则简介
- 主要功能版本历史
- 功能指引
- 通用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反馈
- 更新计划总览