# 送信接口-getter
`setter`是在`MsgSender`送信器中的常量:`GETTER`。`getter`的真实包路径和接口类型为`com.forte.qqrobot.sender.senderlist.SenderGetList`。
它在与接口的主要作用是获取一些信息,例如群成员列表等等。
>[warning] ***所有返回值为布尔类型的方法均代表消息是否发送成功***
>[warning] ***因为是获取信息,则必然会有返回值,而关于返回值的内容我将会写在本章节的子章节'返回值'中。***
## **API方法**
以下为各个API以及其参数的类型、含义:
* **取匿名成员信息**
`AnonInfo getAnonInfo(String flag);`
| 参数 | 类型 | 含义 |
| --- | --- | --- |
| `flag` | `String` | 匿名标识 |
>[success] 返回值:AnonInfo 匿名成员信息
<br>
* **获取权限信息**
`AuthInfo getAuthInfo();`
| 参数 | 类型 | 含义 |
| --- | --- | --- |
| 无 | | |
>[success] 返回值:AuthInfo 权限信息
<br>
* **获取封禁成员列表**
`BanList getBanList(String group);`
| 参数 | 类型 | 含义 |
| --- | --- | --- |
| `group` | `String` | 群号 |
>[success] 返回值:BanList 封禁列表
<br>
* **获取群文件信息**
`FileInfo getFileInfo(String flag);`
| 参数 | 类型 | 含义 |
| --- | --- | --- |
| `flag` | `String` | 文件标识 |
>[success] 返回值:FileInfo 群文件信息
<br>
* **获取好友列表**
`FriendList getFriendList();`
| 参数 | 类型 | 含义 |
| --- | --- | --- |
| 无 | | |
>[success] 返回值:FriendList 好友列表
<br>
* **取群作业列表**
`GroupHomeworkList getGroupHomeworkList(String group);`
| 参数 | 类型 | 含义 |
| --- | --- | --- |
| `group` | `String` | 群号 |
>[success] 返回值:GroupHomeworkList 群作业列表
<br>
* **取群信息**
`GroupInfo getGroupInfo(String group);`
| 参数 | 类型 | 含义 |
| --- | --- | --- |
| `group` | `String` | 群号 |
>[success] 返回值:GroupInfo 群信息
<br>
* **取群链接列表**
`GroupLinkList getGroupLinkList(String group);`
| 参数 | 类型 | 含义 |
| --- | --- | --- |
| `group` | `String` | 群号 |
>[success] 返回值:GroupLinkList群链接列表
<br>
* **取群列表**
`GroupList getGroupList();`
| 参数 | 类型 | 含义 |
| --- | --- | --- |
| 无 | | |
>[success] 返回值:GroupList 群列表
<br>
* **取群成员信息**
`GroupMemberInfo getGroupMemberInfo(String group, String QQ);`
| 参数 | 类型 | 含义 |
| --- | --- | --- |
| `group` | `String` | 群号 |
| `QQ` | `String` | QQ号 |
>[success] 返回值:GroupMemberInfo 群成员信息
<br>
* **取群成员列表**
`GroupMemberList getGroupMemberList(String group);`
| 参数 | 类型 | 含义 |
| --- | --- | --- |
| `group` | `String` | 群号 |
>[success] 返回值:GroupMemberList 群成员列表
<br>
* **取群公告列表**
`GroupNoteList getGroupNoteList(String group);`
| 参数 | 类型 | 含义 |
| --- | --- | --- |
| `group` | `String` | 群号 |
>[success] 返回值:GroupNoteList 群公告列表
<br>
* **取置顶群公告**
`GroupTopNote getGroupTopNote(String group);`
| 参数 | 类型 | 含义 |
| --- | --- | --- |
| `group` | `String` | 群号 |
>[success] 返回值:GroupTopNote 置顶群公告
<br>
* **获取图片信息**
`ImageInfo getImageInfo(String flag);`
| 参数 | 类型 | 含义 |
| --- | --- | --- |
| `flag` | `String` | 图片文件名或标识 |
>[success] 返回值:ImageInfo 图片信息
<br>
* **获取登录的QQ的信息**
`LoginQQInfo getLoginQQInfo();`
| 参数 | 类型 | 含义 |
| --- | --- | --- |
| 无 | | |
>[success] 返回值:LoginQQInfo 登录的QQ的信息
<br>
* **获取群共享文件列表**
`ShareList getShareList(String group);`
| 参数 | 类型 | 含义 |
| --- | --- | --- |
| `group` | `String` | 群号 |
>[success] 返回值:ShareList 群共享文件列表
<br>
* **取陌生人信息**
`StrangerInfo getStrangerInfo(String QQ);`
| 参数 | 类型 | 含义 |
| --- | --- | --- |
| `QQ` | `String` | 陌生人的QQ号 |
>[success] 返回值:StrangerInfo 陌生人信息
<br>
## **缓存转化**
在一次测试中发现,这部分获取各种信息的API如果在高频获取的情况下(例如说for循环连续获取100次)会腾讯暂时屏蔽,也就是说假如你获取的频率过高则将会有一段时间无法获取信息。
同时我也发现,为了避免这种情况,很多插件提供的接口都可以选择是否使用缓存( 例如HTTP API ),但是每次获取的时候都要填入额外的参数着实令人有些不爽。
于是在适配插件提供的缓存方法之外,我对`MsgSender`中的`GETTER`做了一些小小的修改,并提供了部分API来使得`GETTER`可以支持缓存。
>[info] 缓存的底层原理是通过`LocalDateTime`和动态代理来实现方法的返回值暂存。
在列举缓存API之前,我先提供一个最简单的实例代码:
```java
//获取某个群的信息
GroupInfo groupInfo = sender.GETTER.cache().getGroupInfo("123456789");
```
通过以上代码可以发现,相对于以前对于`GETTER`的使用,这段代码在获取所需内容之前多了一个`cache()`方法。这个`cache`方法便是获取一个缓存GETTER。
***以下为获取缓存GETTER的全部API:***
>[success] 所有的缓存API的返回值均为`GETTER`自身
* `**cache()`**
| 参数 | 类型 | 含义 |
| --- | --- | --- |
| 无 | 无 | 无 |
>[success] 当不存在参数时候,默认缓存时长为 缓存1小时
* `**cache(long time)`**
| 参数 | 类型 | 含义 |
| --- | --- | --- |
| `time` | `long` | 缓存保存的秒时长 |
>[success] 当仅存在一个long类型的time时,将默认认为此时间为秒值
* `**cache(long time, CacheTypes cacheTypes)`**
| 参数 | 类型 | 含义 |
| --- | --- | --- |
| `time` | `long` | 缓存保存的时长 |
| `cacheTypes` | `CacheTypes` | 指定缓存时长的时间类型,枚举类型,详情请查阅枚举章节 |
>[success] 同时置顶时间长度和时间类型,是最完整的参数API,也推荐有时间需求的时候使用此API
* `**cache(LocalDateTime to)`**
| 参数 | 类型 | 含义 |
| --- | --- | --- |
| `to` | `LocalDateTime` | 一个指定的过期时间 |
>[success] 使用LocalDateTime对象指定一个具体的过期时间。关于LocalDateTime的使用方式请百度`java8 LocalDateTime` 或使用其他方式查阅相关资料
### **注意事项**
>[danger] #### ※1. 缓存转化存在一个弊端,即假如某个getxxxxx方法是需要使用参数的,当你变更参数的时候缓存的内容并不会改变。也就是说,你第一次获取了QQ号为123456的信息,然后第二次获取666666的信息,由于缓存的影响将依旧获取到123456的信息。
> 这个问题将会在后续中修复,但是由于影响不是很大所以可能并不会立即修复。
>[danger] #### ※2. 由于缓存转化机制的原理限制,当你想要进行缓存转化的时候,请尽可能使这个GETTER始终使用在**同一个线程内**。
>[danger] #### ※3. 因为了解到了\`LocalThread\`的漏洞,目前暂时为以上缓存方法标注了过时,暂时**弃用**。并非不可使用,但是可能会造成**严重的资源浪费**。
- 前言
- 简单介绍
- 我该如何阅读文档
- 视频教程
- 安装与使用
- 开源协议
- 免责&捐助
- 注意事项
- 版本命名规则简介
- 主要功能版本历史
- 功能指引
- 通用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反馈
- 更新计划总览