mirai/docs/Bots.md
2020-12-25 21:58:46 +08:00

4.4 KiB
Raw Blame History

Mirai - Bots

目录

1. 创建和配置 Bot

一个机器人被以 Bot 对象描述。mirai 的交互入口点是 BotBot 只可通过 BotFactory 内的 newBot 方法获得:

interface BotFactory {
    fun newBot(qq: Long, password: String, configuration: BotConfiguration): Bot
    fun newBot(qq: Long, password: String): Bot
    fun newBot(qq: Long, passwordMd5: ByteArray, configuration: BotConfiguration): Bot
    fun newBot(qq: Long, passwordMd5: ByteArray): Bot
    
    companion object : BotFactory by BotFactoryImpl
}

通常的调用方法为:

// Kotlin
val bot = BotFactory.newBot(    )

// Java
Bot bot = BotFactory.INSTANCE.newBot(    );

配置 Bot

可以切换使用的协议、控制日志输出等。

仅能在构造 Bot 时修改其配置:

// Kotlin
val bot = BotFactory.newBot(qq, password) {
    // 配置,例如:
    fileBasedDeviceInfo()
}

// Java
Bot bot = BotFactory.INSTANCE.newBot(qq, password, new BotConfiguration() {{
    // 配置,例如:
    fileBasedDeviceInfo()
}})

下文示例代码都要放入 // config 中。

常用配置

可在 BotConfiguration.kt 查看完整配置列表

设备信息

Bot 默认使用全随机的设备信息。在更换账号地点时候使用随机设备信息可能会导致无法登录。

要使用 deviceInfo.json 存储设备信息:

fileBasedDeviceInfo() // "myDeviceInfo.json" 
fileBasedDeviceInfo("myDeviceInfo.json") // "myDeviceInfo.json"

要自定义设备信息:

// Kotlin
deviceInfo = { bot ->  /* create device info */   }

// Java
setDeviceInfo(bot -> /* create device info */)

在线生成自定义设备信息的 device.json: https://ryoii.github.io/mirai-devicejs-generator/

切换登录协议

Mirai 支持多种登录协议:ANDROID_PHONEANDROID_PADANDROID_WATCH,默认使用 ANDROID_PHONE

若登录失败,可尝试切换协议。但注意,部分功能在部分协议上不受支持,详见源码内注释。

要切换协议:

// Kotlin
protocol = BotConfiguration.MiraiProtocol.ANDROID_PAD

// Java
setProtocol(MiraiProtocol.ANDROID_PAD)

重定向日志

Bot 有两个日志类别,BotNetBot 为通常日志,如收到事件。Net 为网络日志,包含收到和发出的每一个包和网络层解析时遇到的错误。

重定向日志到文件:

redirectBotLogToFile()
redirectNetworkLogToFile()

手动覆盖日志:

// Kotlin
networkLoggerSupplier = { bot -> /* create logger */ }
botLoggerSupplier = { bot -> /* create logger */ }

// Java
setNetworkLoggerSupplier(bot -> /* create logger */)
setBotLoggerSupplier(bot -> /* create logger */)

覆盖登录解决器

在遇到验证码时Mirai 会寻找 LoginSolver 以解决验证码。

  • 在 Android 需要手动提供 LoginSolver
  • 在 JVM, Mirai 会根据环境支持情况选择 Swing/CLI 实现

覆盖默认的 LoginSolver

// Kotlin
loginSolver = YourLoginSolver

// Java
setLoginSolver(new YourLoginSolver())

要获取更多有关验证码解决器的信息,查看 LoginSolver.kt

获取当前所有 Bot 实例

在登录后,Bot 实例会被自动记录。可在 Bot.instances 获取到当前在线的所有 Bot 列表。当 Bot 离线,其实例就会被删除。

2. 登录

创建 Bot 后不会自动登录,需要手动调用其 login() 方法。在 Kotlin 还可以使用 Bot.alsoLogin() 扩展,相当于 bot.apply { login() }

常见登录失败原因

错误信息 可能的原因 可能的解决方案
当前版本过低 密码错误 检查密码
当前上网环境异常 设备锁 开启或关闭设备锁后重试登录

若以上方案无法解决问题,请尝试切换登录协议

重新登录

可以再次调用 Bot.login() 以重新登录 Bot。这一般没有必要——Bot 运行时会自动与服务器同步事件(如群成员变化,好友数量变化)。

下一步,Contacts

回到 Mirai 文档索引