mirai

高效率 QQ 机器人支持库

AGPL-3.0 License

Stars
14K
Committers
131

Bot releases are visible (Hide)

mirai -

Published by Him188 over 4 years ago

此版本为二进制不兼容更新, 全部使用者都需要重新编译.

源码兼容的改变:

  • 删除全部 @Depreacted 兼容
  • 删除全部多余的 @JvmName 以兼容将来的改变 (新 MPP 模块等级制架构)
  • 调整部分函数的 JVM 可见性
  • 内联部分 MessageChain 工具函数
  • 更新到 Kotlin 1.4-M1

源码不兼容的改变:

  • 群设置由 Group 移动到独立的 GroupSettings
  • 调整 API 可见性: 将除 BotFactorymirai-core-qqandroid 中全部 API 改为 internal

消息部分:

  • SingleMessage 实现接口 CharSequenceComparable<String>
  • FriendImage, GroupImage, OnlineImage, OfflineImage 增加 companion object Key
  • 调整 RichMessage, 将所有子类聚合到一个文件
  • 移动 XmlMessageHelperRichMessage.Compation
  • 命名调整: buildXMLMessage 改为 buildXmlMessage
  • 修复 CombinedMessage 中错误的 leftelement

事件部分:

  • 加强 selectMessages, 增加回复, 引用回复, 默认值, 超时支持:
    原处理方式:
val message = nextMessageOrNull(10.secondsToMillis) ?: kotlin.run {
    quoteReply("请在 10 秒内发送一张图片")
    return@case
}
val image = message.getOrNull(OnlineImage) ?: kotlin.run {
    reply(message.quote() + "请发送一张图片")
    return@case
}
reply(message.quote() + image.originUrl)

使用 selectMessages DSL:

selectMessagesUnit {
    has<OnlineImage>() quoteReply {
        message[OnlineImage].originUrl
    }
    timeout(10.secondsToMillis) quoteReply {
        "请在 10 秒内发送图片以获取链接"
    }
    defaultQuoteReply {
        "请发送一张图片"
    }
}
mirai -

Published by Him188 over 4 years ago

  • 确保二进制兼容, #155
  • 修复 Android 上 ECDH init 失败问题, #154
mirai -

Published by Him188 over 4 years ago

  • 引入新消息监听 DSL: whileSelectMessages, 简化连续监听过程
bot.subscribeMessages {
    "开启复读模式" `->` {
        reply("成功开启")
        whileSelectMessages {
            "stop" `->` {
                reply("已关闭复读")
                false // 停止循环
            }
            default {
                reply(message)
                true // 继续循环
            }
        }
        reply("复读模式结束")
    }
}
  • 引入新消息监听 DSL: selectMessages, 简化筛选监听过程
bot.subscribeMessages {
    "test" `->` {
        reply("choose option: 'hello', 'hi'")
        val value: String = selectMessages {
            "hello" `->` { "123" }
            "hi" `->` { "222" }
            default { "default value" }
        }
        reply(value)
    }
}
  • 监听消息的 DSL 新增 infix fun String.->(block)
  • 处理 StatSvc.ReqMSFOffline (#150)
  • Contact.sendMessage 现在接受 Message 参数, 而不是 MessageChain 以兼容 CombinedMessage
  • Member.sendMessage 现在返回 MessageReceipt<Member> 而不是 QQ 泛型
  • 调整 JVM MessageUtils 中一些方法的可见性 (@JvmSynthetic)
  • 调整命名: OfflineImage.queryOriginUrl 改为 OfflineImage.queryUrl
  • 允许手动重新初始化 Bot (BotNetworkHandler.init), 确保重初始化资源释放
mirai -

Published by Him188 over 4 years ago

  • 修复 Jce 反序列化在部分情况下出错的问题, 修复 #145
  • 新增群公告低级 API
  • 新增群活跃数据低级 API
  • 修复 #141, #143, #131
  • 更多原生表情 (Face)
mirai -

Published by Him188 over 4 years ago

  • 支持 XML, Json, LightAppRichMessage
mirai -

Published by Him188 over 4 years ago

  • 重写 Jce 序列化, 提升反序列性能
  • 更新 Kotlin 版本到 1.3.70
  • 更新 kotlinx.coroutines, atomicfu, kotlinx.coroutines 依赖版本
mirai -

Published by Him188 over 4 years ago

  • 使用 kotlinx.io 而不是 ktor.io
  • 修复 #111, #108, #116, #112
mirai -

Published by Him188 over 4 years ago

  • 适配 8.2.7 版本(2020 年 3 月)协议
  • 全面的 Image 类型: Online/Offline Image, Friend/Group Image
  • 修复查询图片链接时好友图片链接错误的问题
  • 修复 bugs: #105, #106, #107
mirai -

Published by Him188 over 4 years ago

  • 修复 Member 的委托 QQ 弱引用被释放的问题
  • Bot.friends 替代 Bot.qqs
  • Bot.containsFriend, Bot.containsGroup 替代 Bot.contains
  • 新增 BotFactory.Bot(String, ByteArray) 用 md5 密码登录
  • BotFactory 等类型的一些扩展指定 JvmName
  • 移动 Bot.QQ 到低级 API
mirai -

Published by Him188 over 4 years ago

  • Java 完全友好: Java 使用者可以同 Kotlin 方式直接阻塞式或异步(Future)调用 API

  • 新增 MessegaSource.originalMessage: MessageChain 以获取源消息内容

  • 群消息的撤回现在已稳定 (Bot.recall)

  • 现在可以引用回复机器人自己发送的消息: MessageReceipt.quoteReply

  • 新增 MessageRecallEvent

  • 整理 MessageChain 的构造, 优化性能

  • 整理所有网络层代码, 弃用 kotlinx.io 而使用 io.ktor.utils.io

  • 其他杂项优化

mirai -

Published by Him188 over 4 years ago

mirai-core

  • 修复上传图片
  • 一些问题修复
  • 大量杂项优化

mirai-core-qqandroid

  • MessageReceipt.source 现在为 public. 可获取源消息 id
  • 修复上传好友图片失败的问题
  • 上传群图片现在分包缓存, 优化性能
mirai -

Published by Him188 over 4 years ago

mirai-core

  • 重构 MessageChain, 引入 CombinedMessage. (兼容大部分原 API)
  • 新增 MessageChainBuilder, buildMessageChain
  • ExternalImage 现在接收多种输入参数

mirai-core-qqandroid

  • 修复访问好友消息回执 .sequenceId 时抛出异常的问题
mirai -

Published by Him188 over 4 years ago

  • 支持好友消息的引用回复
  • 更加结构化的 QuoteReply 架构, 支持引用任意群/好友消息回复给任意群/好友.
mirai -

Published by Him188 over 4 years ago

mirai-core

  • 支持图片下载: image.channel(): ByteReadChannel, image.url()

  • 添加 LockFreeLinkedList<E>.iterator

  • 添加 LockFreeLinkedList<E>.forEachNode

  • 并行处理事件监听

  • 添加 nextMessageContaining 和相关可空版本

  • '撤回' 从 Contact 移动到 Bot

  • 删除 MessageSource.sourceMessage

  • 让 MessageSource 拥有唯一的 long 类型 id, 删除原 uidsequence 结构.

  • 修复 Message.eq 歧义

mirai -

Published by Him188 over 4 years ago

mirai-core

  • 支持机器人撤回群消息 (含自己发送的消息): Group.recall, MessageReceipt.recall
  • 支持一定时间后自动撤回: Group.recallIn, MessageReceipt.recallIn
  • sendMessage 返回 MessageReceipt 以实现撤回功能
  • 添加 MessageChain.addOrRemove
  • 添加 ContactList.firstOrNull, ContactList.first
  • 新的异步事件监听方式: subscribingGetAsync 启动一个协程并从一个事件从获取返回值到 Deferred.
  • 新的线性事件监听方式: subscribingGet 挂起当前协程并从一个事件从获取返回值.
新的线性消息连续处理: nextMessage 挂起当前协程并等待下一条消息:

使用该示例, 发送两条消息, 一条为 "禁言", 另一条包含一个 At

case("禁言") {
    val value: At = nextMessage { message.any(At) }[At]
    value.member().mute(10)
}

示例 2:

case("复读下一条") {
    reply(nextMessage().message)
}

mirai-core-qqandroid

  • 修复一些情况下 At 无法发送的问题
  • 统一 ImageId: 群消息收到的 ImageId 均为 {xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxx}.jpg 形式(固定长度 37)
  • 支持成员主动离开事件的解析 (#51)
mirai -

Published by Him188 over 4 years ago

mirai-core

  • 添加 MessageSource.time
  • 添加事件监听时额外的 coroutineContext
  • 为一些带有 operator 的事件添加 .isByBot 的属性扩展
  • 优化事件广播逻辑, 修复可能无法触发监听的问题
  • 为所有 Contact 添加 toString() (#80)

mirai-core-qqandroid

  • 支持成员禁言状态和时间查询 Member.muteTimeRemaining
  • 修复 Atdisplay (#73), 同时修复 QuoteReply 无法显示问题 (#54).
  • 广播 BotReloginEvent (#78)
  • 支持机器人自身禁言时间的更新和查询 (#82)
mirai -

Published by Him188 over 4 years ago

mirai-core

  • 支持原生表情 Face
  • 修正 groupCardOrNicknameCardOrNick
  • 增加 MessageChain.foreachContent(lambda)Message.hasContent(): Boolean

mirai-core-qqandroid

  • 提高重连速度
  • 修复重连后某些情况不会心跳
  • 修复收包时可能产生异常
mirai -

Published by Him188 over 4 years ago

mirai-core

  • 添加 Bot.subscribe 等筛选 Bot 实例的监听方法
  • 其他一些小问题修复

mirai-core-qqandroid

  • 优化重连处理逻辑
  • 确保好友消息和历史事件在初始化结束前同步完成
  • 同步好友消息记录时不广播
mirai -

Published by Him188 over 4 years ago

mirai-core

  • MiraiLogger 添加 common property val isEnabled: Boolean
  • 修复 #62: 掉线重连后无 heartbeat
  • 修复 #65: Bot close 后仍会重连
  • 修复 #70: ECDH is not available on Android platform

mirai-core-qqandroid

  • 从服务器收到的事件将会额外使用 bot.logger 记录 (verbose).
  • 降低包记录的等级: info -> verbose
  • 改善 Bot 的 log 记录
  • 加载好友列表失败时会重试
  • 改善 BotNetworkHandler 关闭时取消 job 的逻辑
  • 修复初始化(init)时同步历史好友消息时出错的问题
mirai -

Published by Him188 over 4 years ago

  • 放弃使用 atomicfu 以解决其编译错误的问题. (#60)