跳至主要內容

项目进度


项目进度

项目的进度、计划、以及协议无法实现的说明与平替等内容将在本文档中呈现。

已实现消息类型

top.mrxiaom.overflow.internal.message.dataopen in new window

✅ - 支持
❌ - 不支持
❔ - 未知

消息类型miraiOnebot接收发送
纯文本PlainTexttext
自带表情Faceface
图片Imageimage
闪照FlashImageimage
语音Audiorecord
短视频ShortVideovideo
@Atat
@全体成员AtAllat
猜拳RockPaperScissorsrps
骰子Dicedice
戳一戳(手指动画)PokeMessagepoke
音乐分享MusicSharemusic
引用回复QuoteReplyquote
小程序LightAppjson
XML消息ServiceMessagexml
转发消息ForwardMessageforward
文件消息FileMessagefile-

扩展消息类型
top.mrxiaom.overflow.message.dataopen in new window

消息类型Overflowonebot接收发送
推荐联系人ContactRecommendcontact
位置分享Locationlocation
Markdown(官方机器人)Markdownmarkdown

不支持消息相关说明

  • 猜拳 类型无法获取其数值(石头、剪刀、布),接收消息没有意义
  • 骰子 同上,当连接实例为 OpenShamrock 时,将会使用 new_dice 消息类型收发消息。
  • 音乐分享 返回的消息有可能没有音乐链接,与 mirai 相差较大,目前仅支持网易云和QQ音乐
  • 转发消息 无法使用转发消息ID从Shamrock正常下载转发消息,暂未测试
  • 文件消息 在 mirai 的定义中是只接收不发送。目前群文件支持暂未完成,接收的意义不大
  • Markdown 消息接收由 OpenShamrock 支持,暂不确定普通用户是否可发送

MiraiCode 相关说明

与 CQ 码类似的 mirai 消息序列化反序列化机制 MiraiCode 在 Overflow 中不受支持。如有序列化相关需要,请使用 json。

资源相关消息说明

任何需要上传的消息 (图片、语音、视频),由于 Onebot 没有资源上传概念,
上传行为将会变成使用base64进行编码保存到消息实例中,发送消息时直接调用。
这是目前我能想到的最容易兼容所有 Onebot 实现的方法,
但是这有一个很明显的缺点,资源以Base64字符串形式存在变量里,难以释放。

若使用 OpenShamrock,另请参见 overflow-shamrock-extopen in new window

开发者上传资源解决方案

已实现事件

top.mrxiaom.overflow.internal.listeneropen in new window

由于 onebot 事件有子类型,此表中 onebot 事件格式为 事件类型 -> 子类型

事件类型miraionebot是否支持
群消息GroupMessageEventmessage -> group -> normal
群匿名消息GroupMessageEventmessage -> group -> anonymous
群系统提示-message -> group -> notice
好友消息FriendMessageEventmessage -> private -> friend
群临时会话消息GroupTempMessageEventmessage -> private -> group
陌生人消息StrangerMessageEventmessage -> private -> other
群戳一戳NudgeEventnotice -> notify -> poke
群撤回消息MessageRecallEvent.GroupRecallnotice -> group_recall
好友撤回消息MessageRecallEvent.FriendRecallnotice -> friend_recall
群名片更改MemberCardChangeEventnotice -> group_card
管理员更改MemberPermissionChangeEventnotice -> group_admin
加群验证消息MemberJoinRequestEventrequest -> group -> add
被邀请加群BotInvitedJoinGroupRequestEventrequest -> group -> invite
加好友验证NewFriendRequestEventrequest -> friend
群头衔变更MemberSpecialTitleChangeEventNot Found
群员被禁言MemberMuteEventnotice -> group_ban -> ban
机器人被禁言BotMuteEventnotice -> group_ban -> ban
群员被解除禁言MemberUnmuteEventnotice -> group_ban -> lift_ban
机器人被解除禁言BotUnmuteEventnotice -> group_ban -> lift_ban
群群员禁言状态更改GroupAllMuteEventnotice -> group_ban
主动入群被同意MemberJoinEvent.Activenotice -> group_increase -> approve
被邀请入群被同意MemberJoinEvent.Activenotice -> group_increase -> invite
群成员主动退群MemberLeaveEvent.Quitnotice -> group_decrease -> leave
群成员被踢出群聊MemberLeaveEvent.Kicknotice -> group_decrease -> kick
Coming soon...--

扩展事件类型
top.mrxiaom.overflow.eventopen in new window

事件类型Overflowonebot是否支持
频道消息事件(临时)LegacyGuildMessageEventmessage -> guild -> channel
群精华消息添加事件MemberEssenceNoticeEvent.Addnotice -> essence -> add
群精华消息移除事件MemberEssenceNoticeEvent.Deletenotice -> essence -> delete
未处理的 Onebot 事件UnsolvedOnebotEvent*

支持/扩展的 SPI

  • (已弃用)签名服务 net.mamoe.mirai.internal.spi.EncryptService
  • 语音转silk服务 net.mamoe.mirai.spi.AudioToSilkService
  • Onebot文件服务 top.mrxiaom.overflow.spi.FileService
  • 媒体消息下载链接服务 top.mrxiaom.overflow.spi.MediaURLService
  • 额外的Onebot消息序列化器服务 top.mrxiaom.overflow.spi.ExtendedMessageSerializerService

现阶段发送频道消息方法

val onebot = bot as RemoteBot
val params = Json.encodeToString(buildJsonObject {
    put("guild_id", guildId)
    put("channel_id", channelId)
    put("message", Json.decodeFromString(OverflowAPI.get().serializeMessage(message)))
})
// go-cqhttp
onebot.executeAction("send_guild_channel_msg", params)