github mamoe/mirai 0.39.0

latest releases: v2.16.0, v2.16.0-RC, v2.15.0...
pre-release4 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 的问题

Don't miss a new mirai release

NewReleases is sending notifications on new releases.