mirai

高效率 QQ 机器人支持库

AGPL-3.0 License

Stars
14K
Committers
131

Bot releases are visible (Hide)

mirai -

Published by Him188 over 4 years ago

二进制不兼容的修改: Bot.instances 现在返回 List<Bot>, 而不是 List<WeakRef<Bot>> 由于他们在 JVM 签名相同, 无法做兼容.

Contact 架构改变

原有 Member 继承 QQ, QQ 继承 Contact 架构改变.

新架构为:

  • 弃用 QQ 命名 (二进制兼容到 1.0.0)
  • 新增 User 继承 Contact, 作为 MemberFriend 的父类
  • Member 继承 User
  • Friend 继承 User

迁移

由于 Member 不再是 QQ 子类, 而原本表示 '好友' 意义的 QQ 删除,
需要根据实际情况替换 QQ 的引用为 FriendGroup

因修改, 新增以下 API:

  • fun Member.asFriend(): Friend: 得到此成员作为好友的对象或抛出异常
  • fun Member.asFriendOrNull(): Friend: 得到此成员作为好友的对象或返回 null
  • inline val Member.isFriend: Boolean: 判断此成员是否为好友

同时有以下修改:

  • val User.nameCardOrNick: 获取非空群名片 (如果是群员) 或昵称
  • 弃用 fun Member.isMuted() 而改为属性 val Member.isMuted

图片

  • 构造所有类型图片时只接受唯一一个参数 imageId: String.
  • 所有类型图片只能获取唯一一个属性 imageId: String (以前可以获取长宽等数据)
  • 提高发送图片的性能
  • 优化 BufferedImage.toExternalImage 的性能
  • 统一图片后缀: { ... }.mirai

消息

  • 新增合并转发及其 DSL

  • 新增 OfflineMessageSource 构造

  • 新增 MessageSource 修改: MessageSource.copyAmend(block)

  • 修复 'sequence not yet available' 问题 (#)

  • 修复好友消息的消息源 id 错误的问题 (#247)

  • 如果群成员是好友, 则发送好友消息, 而不是临时会话消息.

  • 添加 MessageSource.internalId 以便将来使用

  • 添加 OnlineMessageSource.toOffline

  • 添加 ContactMessage.time

  • 添加 ContactMessage.senderName

OfflineMessageSource 构造

可使用 DSL 构造离线消息, 修改其发送人, 发送时间, 发送内容等. 这对于跨群转发等情况十分有用.
OfflineMessageSource.kt: Line 90
DSL 总览:

val source: OfflineMessageSource = bot.buildMessageSource {
    bot sendTo target // 指定发送人和发送目标
    metadata(source) // 从另一个消息源复制 id, internalId, time

    messages { // 指定消息内容
        +"hi"
    }
}

合并转发及其 DSL

合并转发: ForwardMessage
DSL: ForwardMessageBuilder

DSL 总览:

buildForwardMessage {
    123456789 named "鸽子 A" says "咕"
    100200300 named "鸽子 C" at 1582315452 says "咕咕咕" // at 设置时间
    987654321 named "鸽子 B" says "咕"
    myFriend says "咕"
    bot says { // 构造消息链, 同 `buildMessageChain`
        +"发个图片试试"
        +Image("{90CCED1C-2D64-313B-5D66-46625CAB31D7}.jpg")
    }
}

不支持解析别人的转发.

其他

  • 支持 bot 名片被其他人修改时的同步
  • 修复登录时遇到服务器不可用时无法继续重连的问题
  • 更名 IdentifiedContactOrBot, 去掉其 '实验性' 注解
  • Bot.instances 现在返回 List<Bot>, 而不是 List<WeakRef<Bot>> (二进制兼容)
  • 更名 subscribingGetsyncFromEvent, 并将其定义为稳定 API.
  • 更名 subscribingGetAsyncasyncFromEvent, 并将其定义为稳定 API.
  • 添加接受 eventClass: KClass<Event> 参数的事件监听 subscribe
  • MessageSubscribersBuilder 添加 sentBy(User), sentFrom(Group), atAll, at DSL
  • 修复某些时候未处理 BotOfflineEvent.Force 的问题
mirai -

Published by Him188 over 4 years ago

  • 新增自定义消息 (实验性): CustomMessage
  • 新增 MessageChain.contentEquals
  • 新增 Message.isPlain, Message.isNotPlain
  • 新增 MessageChain.allContent, MessageChain.noneContent
  • 修复 CombinedMessage.toString 顺序错误, 添加缓存
  • 新增 BotConfiguration.inheritCoroutineContext
  • 将 Java API MessageChain.getOrNull 更名为 MessageChain.firstOrNull
  • 将 Java API MessageChain.get 更名为 MessageChain.first
  • 将 Java API MessageReceipt.recall(long) 更名为 MessageReceipt.recallIn(long) 以与其他 API 保持一致
  • 优化 MessageChainBuilder 构建逻辑
mirai -

Published by Him188 over 4 years ago

  • 上传长消息和图片时允许重试, 提高稳定性
  • 优化无网络时的重连逻辑
  • Message 中添加 equalshashCode, 将部分类型消息定义为 data class
  • MessageSource.id 现在返回非 0 序列号
  • 实现已撤回判断, 同一个 MessageSource 只能撤回一次
mirai -

Published by Him188 over 4 years ago

  • 修复 #220: 无法正常解析邀请机器人进群的富文本消息
  • 修复 #236: 删除无用的 getter 方法生成
  • 修复上传长消息时报错错误的问题
mirai -

Published by Him188 over 4 years ago

新增:

  • 在群名片修改事件(MemberCardChangeEvent)中支持获取操作人
  • 修复 #229, 引入 ServiceMessage 作为 JsonMessage, XmlMessage 的父类并处理所有类型富文本消息解析
  • 将所有 RichMessage 标注 MiraiExperimentalAPI 以警告将来改动

问题修复:

  • 修复潜在的长消息上传失败问题
  • 简化 MessageSubscriberBuilder DSL, 整理 linear.kt, subscribers.kt
  • 修复启动时概率解析失败 ConfigPushSvc.PushReq
  • 修复 #228: 登录时没有因 LoginFailedException 中断
  • 重构登录重连控制, 确保单一进程
  • 处理无网络连接问题, 在无网络时将不尝试登录而等待网络连接
  • 修复 #227: Android 最新版无法编译
  • 修复 #226: BotUnmuteEvent
  • 修复 #225: 重复接收到群消息撤回问题
  • 修复 #220: 无法正常解析邀请机器人进群的富文本消息
  • 修复 #217: 解析 OnlinePush confess 状态时没有覆盖全面
  • 优化遇到未知消息时的日志
mirai -

Published by Him188 over 4 years ago

  • 修复 OnlineMessageSource.Incoming.target 类型错误
  • 引入实验性 Identified 接口作为 ContactBot 的公共接口
  • 加快图片 MD5 计算过程
  • 加快图片上传过程
  • 其他小优化
mirai -

Published by Him188 over 4 years ago

0.37.1 起 JVM 平台依赖无需带 "-jvm" 模块名
即原 "mirai-core-jvm" 和 "mirai-core-qqandroid-jvm" 依赖均需去掉 "-jvm", 变为 "mirai-core" 和 "mirai-core-qqandroid"

  • 登录时尝试多个服务器, 随服务器需求切换服务器 (解决潜在的无法登录的问题) (#52)
  • 优化带有 QuoteReply 时的消息长度估算
  • 添加 MessageChainBuilder.build, 效果同 asMessageChain
  • ContactMessage 中添加 At.isBot
  • MessageSubscribersBuilder 中添加 String.invoke, atBot DSL
mirai -

Published by Him188 over 4 years ago

  • 支持主动退群: Group.quit, BotLeaveEvent.Active
  • 支持临时消息撤回
  • 支持好友消息撤回
  • 修复一个内存泄露问题
  • 修复彩色群名片读取失败的问题
  • 修复退群事件重复广播的问题 (#221)
mirai -

Published by Him188 over 4 years ago

  • 修复 botAsPermission
  • 删除一些无用的调试输出
mirai -

Published by Him188 over 4 years ago

  • 支持临时会话: TempMessage (#16 )
  • 支持群员主动加入事件 MemberJoinEvent.Active
  • 添加 subscribeTempMessages 等相关 DSL
  • 添加 FriendAddEvent, FriendDeleteEvent (#216)
  • 修复各种事件重复广播的问题 (#173, #212)
  • 修复 OfflineMessageSource.id
  • 修复 Member.kick
  • 修复彩色群名片读取, 支持群名片更改事件 (#210)
  • 增加超时 (#175)
  • 支持合并转发消息的解析, 修复部分情况下长消息解析失败的问题
  • 修复新成员加入时没有添加进成员列表的问题 (#172)
mirai -

Published by Him188 over 4 years ago

  • 新增处理加好友请求: NewFriendRequestEvent
  • 新增处理加群请求: MemberJoinRequestEvent
  • 现在 MessageSource.originalMessage 也可以获取到 MessageSource
  • 支持机器人加入了大量群时的群列表获取
  • 优化 init 过程
  • 添加更清晰的错误日志
  • 修复撤回自己发送的消息时的权限判定
  • 修复 botAsMember.nameCard 修改时需要管理员权限的问题
  • 修复 MessageSource.key
  • 修复其他一些小问题
mirai -

Published by Him188 over 4 years ago

  • 修复长消息判定.
  • selectMessages, selectMessagesUnit 添加可选筛选 context 的参数: filterContext: Boolean
  • 统一消息日志
  • 加快重连速度

Message 改动 (二进制兼容):

  • 添加 Message.contentToString 以转换为最接近官方消息的字符串
  • 添加 ConstrainSingleMessage 类型以保证一个消息链中只存在一个 QuoteReply 和一个 MessageSource
  • CombinedMessage 现在实现接口 MessageChian 并变为 internal 以降低复杂度 (使用 MessageChain 替换 CombinedMessage 的引用).
  • Message.plus 现在返回 MessageChain 而不是 CombinedMessage
  • 弃用 NullMessageChain (使用 null 替代)
  • Messageeq, contains 等函数移动至 SingleMessage 以避免歧义.
  • 更名 MessageChain.any<reified M>MessageChain.anyInInstance<reified M> 以与标准库的 Iterable.any 区分
  • 更名 MessageChain.first<reified M>MessageChain.firstIsInstance<reified M> 以与标准库的 Iterable.first 区分
  • 更名 MessageChain.firstOrNull<reified M>MessageChain.firstIsInstanceOrNull<reified M> 以与标准库的 Iterable.firstOrNull 区分
mirai -

Published by Him188 over 4 years ago

  • 重构 MessageSource, 支持直接获取相关对象, 支持所有类型的引用.
  • 简化引用回复, 现在只需要 source.quote() 即可创建引用 (而不需要 sender 参数)
  • 现在可通过 QuoteReply.source 获取源消息, 且可以撤回该消息或再次引用.
  • 支持闪照: 可通过 Image.flash() 将普通图片转为闪照.
  • 支持 Bot.nick (#93)
  • 修复消息长度判断 (#195) (实验性)
  • 修复 Android 目标上 SystemDeviceInfo.imei 可能会抛出 NPE 的问题
  • 修复 GroupNameChangeEvent 重复广播的问题
  • 修复 ContactMessage.nextMessageContaining
  • 修复 selectMessage 时无法正常完结, 和 timeout 没有被取消的问题
  • 修复 #133, #197, #187, #180, #77, #192
mirai -

Published by Him188 over 4 years ago

  • 使用 Kotlin 1.3.71, 兼容原使用 Kotlin 1.4-M1 编译的代码.
  • 优化 BotConfiguration, 去掉 DSL 操作, 使用 fileBasedDeviceInfo(filename) 等函数替代. (兼容原操作方式, 计划于 0.34.0 删除)
  • 调整长消息判定权重, 具体为: Chinese char=4, English char=1, Quote=700, Image=800, 其他消息类型转换为字符串后判断长度.
  • 添加 ContactMessage 以替代 MessagePacket<*, *> 的情况
  • 添加 MessageTooLargeException
  • 使用 Bot.id 替代 Bot.uin
  • Dispatchers.IO 协程调度器中执行 Java API 创建的事件处理.
  • 修复 Java API Member.kick 参数 message 没有正常传递的问题
  • 将部分意外定义为 public 的 API 改为 internal.
  • 将部分 internal API 从 mirai-core 移至 mirai-core-qqandroid
mirai -

Published by Him188 over 4 years ago

  • 修复 At 在手机上显示错误的问题
mirai -

Published by Him188 over 4 years ago

  • 修复无法登录的问题 (#178)
mirai -

Published by Him188 over 4 years ago

  • 修复长文本长度检测, 提高判断性能
  • 修复特殊的好友图片 ID 无法构造为消息
  • 新增 AtAll.display
  • 所有消息元素统一 toString: [mirai:image:ID], [mirai:face:ID], [mirai:at:TARGET], [mirai:poke:TYPE,ID], [mirai:quote:ID] 等 (仍为实验性)
mirai -

Published by Him188 over 4 years ago

  • 修复重复解析禁言事件的问题 (#83)
mirai -

Published by Him188 over 4 years ago

  • 支持长消息发送, 单条消息最多含 4500 字符和 50 张图片
  • 支持戳一戳消息: PokeMessage
  • 修复 重复收到好友消息 (#129), 私聊图片出错 (#165)
  • MessageChain.toString 增加缓存 (非原子), 以提升长消息处理的性能
  • 发消息失败时将抛出带提示的异常
  • 添加 MessageSource 将被重写的警告
mirai -

Published by Him188 over 4 years ago

  • 修复一些事件解析失败的问题