# 配置
>[danger] 当前文档为 `1.x` 版本的文档。simple-robot 1.x 版本已经被认定为过时且停止维护,请前往 `2.x` 版本文档:https://www.yuque.com/simpler-robot/simpler-robot-doc
每一个组件基于框架开发的时候,配置类中的可配置参数应当都**会或多或少的存在差异**。但是在所有的组件的配置类中的可配置项**存在一些通用参数**,本章节将会对这些通用的参数进行介绍。
>[info] 组件自身增加的额外参数请参照对应组件的相关文档。
>[danger] 核心`1.8.0`之后已经不再建议使用繁杂且不够灵活的代码配置,推荐使用文件配置并配合注解配置。
* 注册监听器
```java
// 注册监听器
// void registerListeners(Object... listeners);
// void registerListeners(Class<?>... listeners);
//注册初始化监听器
// void registerInitListeners(InitListener... listeners);
// 使用包扫描的方式扫描并加载初始化监听器
// scannerInitListener(String packageName);
// !! 此条注释以上的配置均在核心版本 1.3-BETA 之后移除。!!
//使用包扫描的方式扫描并加载监听器
scannerListener(String packageName);
```
>[warning] 以上的监听器注册方法全部都可以不进行配置,且推荐不进行配置。
>[info] 假如你没有进行配置,会默认对你的启动类所在的包进行扫描。
>[success] 以下的配置,如果没有特殊说明的话也都**不是必要的**。
* **需要进行的包扫描路径。默认为启动器及其以下包路径**
```java
scanner(String packageName);
setScannerPackage(String... packages);
```
* **~~配置酷Q端的IP地址,默认为127.0.0.1~~**
>[danger] 核心`1.8.0`后标注过时并弃用,请参考下文 **账号注册**
```java
setIp(String ip);
```
* **配置编码格式,默认为UTF-8。**
```java
//配置编码格式,如果不配置默认为UTF-8格式
setEncode(String encode);
```
* **配置酷Q根路径**
```java
//配置酷Q的根路径地址,建议使用绝对路径,假如不配置则会导致部分功能无法使用。例如扩展image对象。
setCqPath(String cqPath);
```
* **~~配置机器人QQ号~~**
>[danger] 核心`1.8.0`后标注过时并弃用,请参考下文 **账号注册**
```java
//配置机器人的QQ号。
//如果组件无法获取QQ自身信息,则必须配置,否则@Filter注解将无法正常获取at信息
//组件是否支持自动获取请参照对应组件文档。
setLocalQQCode(String localQQCode);
```
* **~~配置机器人昵称~~**
>[danger] 核心`1.8.0`后标注过时并弃用,请参考下文 **账号注册**
```java
//配置机器人的QQ昵称
//注意事项同上,是否需要配置具体请参照对应组件功能
setLocalQQNick(String localQQNick);
```
* **配置自定义依赖获取函数**
> `DependGetter`接口的介绍将会在`高级内容-依赖注入`章节
```java
// 通过对象实例注册额外的依赖获取
setDependGetter(DependGetter dependGetter);
// 通过全类路径加载来配置额外的依赖获取
setDependGetter(String packPath) throws ... ;
```
* **配置自定义线程池参数(显示的是字段,配置方法为对应的setter方法,值为默认情况下的值)**
```java
/** 如果这个不是null,则优先使用此配置 */
private BaseLocalThreadPool.PoolConfig poolConfig = null;
/** 核心池的大小。默认为null,当为null的时候,默认通过cpu核心数计算最佳线程数量 */
private Integer corePoolSize;
/** 线程池最大线程数,这个参数也是一个非常重要的参数,它表示在线程池中最多能创建多少个线程;
* 默认为corePoolSize的2倍
*/
private Integer maximumPoolSize;
/**
* 线程池初始化的阻塞系数,用来决定最终的线程池线程数量。
* 默认为0.2, 即认为你的每个监听器在执行的时候,有20%的时间是处于线程阻塞状态。
* @see CoreSystem#getBestPoolSize(double)
* @see <a href='https://www.cnblogs.com/jpfss/p/11016180.html'>参考文章</a>
*/
private Double blockingFactor = 0.2;
/**
* 表示线程没有任务执行时最多保持多久时间会终止。
* 默认情况下,只有当线程池中的线程数大于corePoolSize时,keepAliveTime才会起作用,
* 直到线程池中的线程数不大于corePoolSize,即当线程池中的线程数大于corePoolSize时,
* 如果一个线程空闲的时间达到keepAliveTime,则会终止,直到线程池中的线程数不超过corePoolSize。
* 但是如果调用了allowCoreThreadTimeOut(boolean)方法,在线程池中的线程数不大于corePoolSize时,keepAliveTime参数也会起作用,
* 直到线程池中的线程数为0;
*/
private Long keepAliveTime = 5L;
/**
* unit:参数keepAliveTime的时间单位,有7种取值,在TimeUnit类中有7种静态属性:
* TimeUnit.DAYS; //天
* TimeUnit.HOURS; //小时
* TimeUnit.MINUTES; //分钟
* TimeUnit.SECONDS; //秒
* TimeUnit.MILLISECONDS; //毫秒
* TimeUnit.MICROSECONDS; //微妙
* TimeUnit.NANOSECONDS; //纳秒
*/
private TimeUnit timeUnit = TimeUnit.MILLISECONDS;
/**
* 使用类路径进行实例化(文件配置的情况下)
* 一个阻塞队列,用来存储等待执行的任务,这个参数的选择也很重要,
* 会对线程池的运行过程产生重大影响,一般来说,这里的阻塞队列有以下几种选择:
* ArrayBlockingQueue;
* LinkedBlockingQueue;
* SynchronousQueue;
* ArrayBlockingQueue和PriorityBlockingQueue使用较少,一般使用LinkedBlockingQueue和Synchronous。
* 线程池的排队策略与BlockingQueue有关。
*/
private String workQueueFrom = "java.util.concurrent.LinkedBlockingQueue";
/**
* 当此参数为null的时候,通过workQueueFrom参数来反射获取实例
*/
private BlockingQueue<Runnable> workQueue = null;
/**
* 线程工厂
*/
private ThreadFactory defaultThreadFactory = Thread::new;
```
## **日志等级**
```java
/** 设置日志等级,默认为info级别 */
setLogLevel(LogLevel level);
```
## **信息语言**
>[success] 核心`1.7.0`更新内容
```java
/** 设置使用语言。默认为系统当前使用语言。 */
setLanguage(Locale language);
```
## **账号注册**
>[success] 核心`1.8.0`增加,并取代原来的`IP`、`localQQCode`、`localQQNick`等参数。
```java
/**
* 注册一个机器人的信息。
*
* @param botCode bot账号
* @param path 上报地址,为一个完整的请求路径,例如:http://127.0.0.1:12345
*/
public void registerBot(String botCode, String path);
/**
* 注册一个机器人的信息。
一般来讲最终拼接为:http://{ip}:{port}{path}
* @param botCode bot账号
* @param ip 上报地址的ip
* @param port 上报地址的端口
* @param path 如果存在,上报地址的路径
*/
public void registerBot(String botCode, String ip, int port, String path);
/**
* 仅仅注册一个路径信息,需要是一个完整路径,例如一个http路径或者一个ws的连接路径。
* 在启动后需要通过此路径来验证或者连接。
* 一般来说直接使用这个就行了。
*
* @param path 上报路径
*/
public void registerBot(String path);
/**
* 仅注册一个路径信息,信息分为ip、端口、一个可能存在的额外路径。
* 开发者如果需要实现对于ip、端口、额外路径的转化规则,尝试重写{@link #toHttpPath(String, int, String)}方法。默认情况下为转化为http协议路径。
* @param ip ip地址
* @param port 端口
* @param path nullable
*/
public void registerBot(String ip, int port, String path);
/**
* 注册一个机器人的信息。与普通的registerBot不同,此处注册的机器人会直接覆盖当前的默认机器人信息
*
* @param botCode bot账号
* @param path 上报地址,为一个完整的请求路径
*/
public void registerBotAsDefault(String botCode, String path);
/**
* 注册一个机器人的信息。
* @param botCode bot账号
* @param ip 上报地址的ip
* @param port 上报地址的端口
* @param path 如果存在,上报地址的路径
*/
public void registerBotAsDefault(String botCode, String ip, int port, String path);
/**
* 仅仅注册一个路径信息,需要是一个完整路径,例如一个http路径或者一个ws的连接路径。
* 在启动后需要通过此路径来验证或者连接
*
* @param path 上报路径
*/
public void registerBotAsDefault(String path);
/**
* <pre> 仅注册一个路径信息,信息分为ip、端口、一个可能存在的额外路径。
* <pre> 开发者如果需要实现对于ip、端口、额外路径的转化规则,尝试重写{@link #toHttpPath(String, int, String)}方法。默认情况下为转化为http协议路径。
* @param ip ip地址
* @param port 端口
* @param path nullable
*/
public void registerBotAsDefault(String ip, int port, String path);
```
由上述方法可见,主要存在两个注册方法:`registerBot` 和 `registerBotAsDefault`。
唯一的区别就是是否是**默认账号**的区别了。那默认账号是什么呢?在以前的启动器中,总会有一个`after`方法,`after`方法中存在一个`MsgSender`送信器,这个送信器并不属于任何监听函数,因此所谓**默认账号**就是这个公共送信器的默认使用账号了。
如果不手动配置默认账号的话,在注册时候会默认将**第一个**注册的账号设置为默认账号。
## **版本检测**
> 核心`1.8.1`后增加
```java
/** 是否启用版本检测*/
setCheckVersion(boolean enable);
```
## **配置监听函数返回值选择器**
>[info] 此类型为枚举类型,具体含义可以查阅枚举章节
```java
// 配置监听函数的返回值选择器。
// 在触发监听事件的时候,你很有可能会有多个监听函数被执行,而所有的监听函数都会有一个自己的监听返回值,即监听相应(具体可查阅文档相关章节)。
// 但是一般来讲,以HTTP接口为例,其仅需要一个相应参数(如果需要的话),那么这种情况下就需要配置一个选择器来决定,多个监听相应中,我应该选择哪一个作为HTTP的响应值。
public void setResultSelectType(ResultSelectType resultSelectType) ;
```
<br>
## **账号注册验证**
```java
// 如果为true,监听到消息后将会验证当前上报消息的bot账号。如果此账号为未注册账号,将不会处理此监听消息。默认为true
public void setBotCheck(Boolean botCheck);
```
- 前言
- 简单介绍
- 我该如何阅读文档
- 视频教程
- 安装与使用
- 开源协议
- 免责&捐助
- 注意事项
- 版本命名规则简介
- 主要功能版本历史
- 功能指引
- 通用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反馈
- 更新计划总览