2020-12-24 17:02:33 +08:00
|
|
|
|
# Mirai - Bots
|
2020-12-19 11:15:57 +08:00
|
|
|
|
|
2020-12-24 15:38:02 +08:00
|
|
|
|
**目录**
|
|
|
|
|
|
|
|
|
|
- [1. 创建和配置 `Bot`](#1-创建和配置-bot)
|
|
|
|
|
- [2. 登录](#2-登录)
|
|
|
|
|
|
|
|
|
|
## 1. 创建和配置 `Bot`
|
2020-12-19 11:15:57 +08:00
|
|
|
|
|
|
|
|
|
一个机器人被以 `Bot` 对象描述。mirai 的交互入口点是 `Bot`。`Bot` 只可通过 [`BotFactory`](../mirai-core-api/src/commonMain/kotlin/BotFactory.kt#L22-L87) 内的 `newBot` 方法获得:
|
|
|
|
|
|
2021-01-11 22:05:04 +08:00
|
|
|
|
> 你现在还不需要知道 `Bot` 可以干什么。
|
|
|
|
|
|
2020-12-19 11:15:57 +08:00
|
|
|
|
```kotlin
|
|
|
|
|
interface BotFactory {
|
|
|
|
|
fun newBot(qq: Long, password: String, configuration: BotConfiguration): Bot
|
2020-12-19 11:45:40 +08:00
|
|
|
|
fun newBot(qq: Long, password: String): Bot
|
2020-12-19 11:15:57 +08:00
|
|
|
|
fun newBot(qq: Long, passwordMd5: ByteArray, configuration: BotConfiguration): Bot
|
2020-12-19 11:45:40 +08:00
|
|
|
|
fun newBot(qq: Long, passwordMd5: ByteArray): Bot
|
2020-12-19 11:15:57 +08:00
|
|
|
|
|
|
|
|
|
companion object : BotFactory by BotFactoryImpl
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
通常的调用方法为:
|
|
|
|
|
```
|
|
|
|
|
// Kotlin
|
|
|
|
|
val bot = BotFactory.newBot( )
|
|
|
|
|
|
|
|
|
|
// Java
|
|
|
|
|
Bot bot = BotFactory.INSTANCE.newBot( );
|
|
|
|
|
```
|
|
|
|
|
|
2021-01-11 22:05:04 +08:00
|
|
|
|
> Scala 使用者请查看 [#834](https://github.com/mamoe/mirai/issues/834)
|
|
|
|
|
|
2020-12-24 15:38:02 +08:00
|
|
|
|
### 配置 Bot
|
|
|
|
|
可以切换使用的协议、控制日志输出等。
|
|
|
|
|
|
|
|
|
|
仅能在构造 Bot 时修改其配置:
|
|
|
|
|
```
|
|
|
|
|
// Kotlin
|
|
|
|
|
val bot = BotFactory.newBot(qq, password) {
|
|
|
|
|
// 配置,例如:
|
|
|
|
|
fileBasedDeviceInfo()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Java
|
|
|
|
|
Bot bot = BotFactory.INSTANCE.newBot(qq, password, new BotConfiguration() {{
|
|
|
|
|
// 配置,例如:
|
|
|
|
|
fileBasedDeviceInfo()
|
|
|
|
|
}})
|
|
|
|
|
```
|
|
|
|
|
|
2021-01-11 22:05:04 +08:00
|
|
|
|
下文示例代码都要放入 `// 配置` 中。
|
2020-12-24 15:38:02 +08:00
|
|
|
|
|
2021-01-11 22:05:04 +08:00
|
|
|
|
> 可在 [BotConfiguration.kt](../mirai-core-api/src/commonMain/kotlin/utils/BotConfiguration.kt#L23) 查看完整配置列表
|
2020-12-24 15:38:02 +08:00
|
|
|
|
|
|
|
|
|
### 常用配置
|
2021-01-11 22:05:04 +08:00
|
|
|
|
|
|
|
|
|
#### 修改运行目录
|
|
|
|
|
默认为 `File(".")`
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
// Kotlin
|
|
|
|
|
workingDir = File("C:/mirai")
|
|
|
|
|
|
|
|
|
|
// Java
|
|
|
|
|
setWorkingDir(File("C:/mirai"))
|
|
|
|
|
```
|
2020-12-24 15:38:02 +08:00
|
|
|
|
|
|
|
|
|
#### 设备信息
|
2021-01-11 22:05:04 +08:00
|
|
|
|
Bot 默认使用全随机的设备信息。**在更换账号地点时候使用随机设备信息可能会导致无法登录**,当然,**成功登录时使用的设备信息也可以保存后在新的设备使用**。
|
2020-12-24 15:38:02 +08:00
|
|
|
|
|
2021-01-11 22:05:04 +08:00
|
|
|
|
要使用 `device.json` 存储设备信息:
|
2020-12-24 15:38:02 +08:00
|
|
|
|
```
|
2021-01-11 22:05:04 +08:00
|
|
|
|
fileBasedDeviceInfo() // 存储为 "device.json"
|
|
|
|
|
// 或
|
|
|
|
|
fileBasedDeviceInfo("myDeviceInfo.json") // 存储为 "myDeviceInfo.json"
|
2020-12-24 15:38:02 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
要自定义设备信息:
|
|
|
|
|
```
|
|
|
|
|
// Kotlin
|
|
|
|
|
deviceInfo = { bot -> /* create device info */ }
|
|
|
|
|
|
|
|
|
|
// Java
|
|
|
|
|
setDeviceInfo(bot -> /* create device info */)
|
|
|
|
|
```
|
|
|
|
|
|
2020-12-24 19:46:04 +08:00
|
|
|
|
在线生成自定义设备信息的 `device.json`: https://ryoii.github.io/mirai-devicejs-generator/
|
|
|
|
|
|
2020-12-24 15:38:02 +08:00
|
|
|
|
#### 切换登录协议
|
|
|
|
|
Mirai 支持多种登录协议:`ANDROID_PHONE`,`ANDROID_PAD`,`ANDROID_WATCH`,默认使用 `ANDROID_PHONE`。
|
|
|
|
|
|
2021-01-11 22:05:04 +08:00
|
|
|
|
若登录失败,可尝试切换协议。**但注意部分功能在部分协议上不受支持**,详见源码内注释。
|
2020-12-24 15:38:02 +08:00
|
|
|
|
|
|
|
|
|
要切换协议:
|
|
|
|
|
```
|
|
|
|
|
// Kotlin
|
|
|
|
|
protocol = BotConfiguration.MiraiProtocol.ANDROID_PAD
|
|
|
|
|
|
|
|
|
|
// Java
|
|
|
|
|
setProtocol(MiraiProtocol.ANDROID_PAD)
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
#### 重定向日志
|
|
|
|
|
Bot 有两个日志类别,`Bot` 或 `Net`。`Bot` 为通常日志,如收到事件。`Net` 为网络日志,包含收到和发出的每一个包和网络层解析时遇到的错误。
|
|
|
|
|
|
|
|
|
|
重定向日志到文件:
|
|
|
|
|
```
|
|
|
|
|
redirectBotLogToFile()
|
2021-01-11 22:05:04 +08:00
|
|
|
|
redirectBotLogToDirectory()
|
|
|
|
|
|
2020-12-24 15:38:02 +08:00
|
|
|
|
redirectNetworkLogToFile()
|
2021-01-11 22:05:04 +08:00
|
|
|
|
redirectNetworkLogToDirectory()
|
2020-12-24 15:38:02 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
手动覆盖日志:
|
|
|
|
|
```
|
|
|
|
|
// Kotlin
|
|
|
|
|
networkLoggerSupplier = { bot -> /* create logger */ }
|
|
|
|
|
botLoggerSupplier = { bot -> /* create logger */ }
|
|
|
|
|
|
|
|
|
|
// Java
|
|
|
|
|
setNetworkLoggerSupplier(bot -> /* create logger */)
|
|
|
|
|
setBotLoggerSupplier(bot -> /* create logger */)
|
|
|
|
|
```
|
|
|
|
|
|
2021-01-11 22:05:04 +08:00
|
|
|
|
关闭日志:
|
|
|
|
|
```
|
|
|
|
|
noNetworkLog()
|
|
|
|
|
noBotLog()
|
|
|
|
|
```
|
|
|
|
|
|
2020-12-24 15:38:02 +08:00
|
|
|
|
#### 覆盖登录解决器
|
2021-01-11 22:05:04 +08:00
|
|
|
|
Mirai 会使用 `LoginSolver` 解决验证码。
|
2020-12-24 15:38:02 +08:00
|
|
|
|
|
|
|
|
|
- 在 Android 需要手动提供 `LoginSolver`
|
2021-01-11 22:05:04 +08:00
|
|
|
|
- 在 JVM, Mirai 会根据环境支持情况选择 Swing/CLI 实现,通常不需要手动提供
|
2020-12-24 15:38:02 +08:00
|
|
|
|
|
|
|
|
|
覆盖默认的 `LoginSolver`:
|
|
|
|
|
```
|
|
|
|
|
// Kotlin
|
|
|
|
|
loginSolver = YourLoginSolver
|
|
|
|
|
|
|
|
|
|
// Java
|
|
|
|
|
setLoginSolver(new YourLoginSolver())
|
|
|
|
|
```
|
|
|
|
|
|
2021-01-11 22:05:04 +08:00
|
|
|
|
> 要获取更多有关 `LoginSolver` 的信息,查看 [LoginSolver.kt](../mirai-core-api/src/commonMain/kotlin/utils/LoginSolver.kt#L32)
|
2020-12-24 15:38:02 +08:00
|
|
|
|
|
2020-12-19 11:15:57 +08:00
|
|
|
|
### 获取当前所有 `Bot` 实例
|
2020-12-28 17:40:17 +08:00
|
|
|
|
|
2021-01-11 22:05:04 +08:00
|
|
|
|
在登录后 `Bot` 实例会被自动记录。可在 `Bot.instances` 获取到当前**在线**的所有 `Bot` 列表。
|
2020-12-19 11:15:57 +08:00
|
|
|
|
|
2020-12-24 15:38:02 +08:00
|
|
|
|
## 2. 登录
|
|
|
|
|
|
2021-01-11 22:05:04 +08:00
|
|
|
|
创建 `Bot` 后不会自动登录,需要手动调用其 `login()` 方法。只需要调用一次 `login()` 即可,`Bot` 掉线时会自动重连。
|
2020-12-24 15:38:02 +08:00
|
|
|
|
|
2020-12-28 17:40:17 +08:00
|
|
|
|
### 处理滑动验证码
|
|
|
|
|
|
2021-01-11 22:05:04 +08:00
|
|
|
|
[project-mirai/mirai-login-solver-selenium]: https://github.com/project-mirai/mirai-login-solver-selenium
|
|
|
|
|
|
|
|
|
|
服务器正在大力推广滑块验证码。
|
2020-12-28 17:40:17 +08:00
|
|
|
|
|
2021-01-11 22:05:04 +08:00
|
|
|
|
部分账号可以跳过滑块验证码,Mirai 会自动尝试。
|
|
|
|
|
若你的账号无法跳过验证,可在 [project-mirai/mirai-login-solver-selenium] 查看处理方案。
|
2020-12-28 17:40:17 +08:00
|
|
|
|
|
2020-12-24 15:38:02 +08:00
|
|
|
|
### 常见登录失败原因
|
|
|
|
|
|
2021-01-11 22:05:04 +08:00
|
|
|
|
| 错误信息 | 可能的原因 | 可能的解决方案 |
|
|
|
|
|
|:--------------|:---------------|:----------------------|
|
|
|
|
|
| 当前版本过低 | 密码错误 | 检查密码 |
|
|
|
|
|
| 当前上网环境异常 | 设备锁 | 开启或关闭设备锁后重试登录 |
|
|
|
|
|
| 禁止登录 | 需要处理滑块验证码 | [project-mirai/mirai-login-solver-selenium] |
|
2020-12-19 11:15:57 +08:00
|
|
|
|
|
2020-12-28 17:40:17 +08:00
|
|
|
|
若以上方案无法解决问题,请尝试 [切换登录协议](#切换登录协议) 和 **[处理滑动验证码](#处理滑动验证码)**。
|
2020-12-19 11:15:57 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
> 下一步,[Contacts](Contacts.md)
|
2020-12-19 16:01:58 +08:00
|
|
|
|
>
|
2021-01-13 16:07:02 +08:00
|
|
|
|
> [回到 Mirai 文档索引](README.md#mirai-core-api-文档)
|