Commit eb48af2c authored by Him188's avatar Him188

Image download support

parent 6c2b4357
...@@ -8,6 +8,7 @@ import net.mamoe.mirai.data.ImageLink ...@@ -8,6 +8,7 @@ import net.mamoe.mirai.data.ImageLink
import net.mamoe.mirai.message.data.Image import net.mamoe.mirai.message.data.Image
import net.mamoe.mirai.qqandroid.network.QQAndroidBotNetworkHandler import net.mamoe.mirai.qqandroid.network.QQAndroidBotNetworkHandler
import net.mamoe.mirai.qqandroid.network.QQAndroidClient import net.mamoe.mirai.qqandroid.network.QQAndroidClient
import net.mamoe.mirai.qqandroid.network.protocol.packet.chat.receive.ImageIdQQA
import net.mamoe.mirai.qqandroid.utils.Context import net.mamoe.mirai.qqandroid.utils.Context
import net.mamoe.mirai.utils.BotConfiguration import net.mamoe.mirai.utils.BotConfiguration
import net.mamoe.mirai.utils.LockFreeLinkedList import net.mamoe.mirai.utils.LockFreeLinkedList
...@@ -55,7 +56,8 @@ internal abstract class QQAndroidBotBase constructor( ...@@ -55,7 +56,8 @@ internal abstract class QQAndroidBotBase constructor(
} }
override suspend fun Image.getLink(): ImageLink { override suspend fun Image.getLink(): ImageLink {
TODO("not implemented") require(this.id is ImageIdQQA) { "image.id must be ImageIdQQA" }
return (this.id as ImageIdQQA).link
} }
override suspend fun addFriend(id: Long, message: String?, remark: String?): AddFriendResult { override suspend fun addFriend(id: Long, message: String?, remark: String?): AddFriendResult {
......
@file:Suppress("EXPERIMENTAL_UNSIGNED_LITERALS")
package net.mamoe.mirai.qqandroid.network.protocol.packet.chat.receive package net.mamoe.mirai.qqandroid.network.protocol.packet.chat.receive
import kotlinx.io.core.ByteReadPacket import kotlinx.io.core.ByteReadPacket
...@@ -5,8 +7,10 @@ import kotlinx.io.core.discardExact ...@@ -5,8 +7,10 @@ import kotlinx.io.core.discardExact
import kotlinx.io.core.readBytes import kotlinx.io.core.readBytes
import kotlinx.serialization.protobuf.ProtoBuf import kotlinx.serialization.protobuf.ProtoBuf
import net.mamoe.mirai.contact.MemberPermission import net.mamoe.mirai.contact.MemberPermission
import net.mamoe.mirai.data.ImageLink
import net.mamoe.mirai.message.GroupMessage import net.mamoe.mirai.message.GroupMessage
import net.mamoe.mirai.message.data.Image import net.mamoe.mirai.message.data.Image
import net.mamoe.mirai.message.data.ImageId
import net.mamoe.mirai.message.data.MessageChain import net.mamoe.mirai.message.data.MessageChain
import net.mamoe.mirai.message.data.toMessage import net.mamoe.mirai.message.data.toMessage
import net.mamoe.mirai.qqandroid.QQAndroidBot import net.mamoe.mirai.qqandroid.QQAndroidBot
...@@ -15,6 +19,15 @@ import net.mamoe.mirai.qqandroid.network.protocol.packet.chat.data.ImMsgBody ...@@ -15,6 +19,15 @@ import net.mamoe.mirai.qqandroid.network.protocol.packet.chat.data.ImMsgBody
import net.mamoe.mirai.qqandroid.network.protocol.packet.chat.data.MsgOnlinePush import net.mamoe.mirai.qqandroid.network.protocol.packet.chat.data.MsgOnlinePush
import net.mamoe.mirai.utils.io.encodeToString import net.mamoe.mirai.utils.io.encodeToString
internal class ImageIdQQA(
override val value: String,
originalLink: String
) : ImageId {
val link: ImageLink = ImageLinkQQA(originalLink)
}
internal inline class ImageLinkQQA(override val original: String) : ImageLink
internal class OnlinePush { internal class OnlinePush {
internal object PbPushGroupMsg : PacketFactory<GroupMessage>("OnlinePush.PbPushGroupMsg") { internal object PbPushGroupMsg : PacketFactory<GroupMessage>("OnlinePush.PbPushGroupMsg") {
@UseExperimental(ExperimentalStdlibApi::class) @UseExperimental(ExperimentalStdlibApi::class)
...@@ -28,7 +41,7 @@ internal class OnlinePush { ...@@ -28,7 +41,7 @@ internal class OnlinePush {
pbPushMsg.msg.msgBody!!.richText!!.elems!!.forEach { pbPushMsg.msg.msgBody!!.richText!!.elems!!.forEach {
when { when {
it.customFace != null -> message.add(Image(it.customFace.filePath)) it.customFace != null -> message.add(Image(ImageIdQQA(it.customFace.filePath, it.customFace.origUrl)))
it.text != null -> message.add(it.text.str.encodeToString().toMessage()) it.text != null -> message.add(it.text.str.encodeToString().toMessage())
it.extraInfo != null -> extraInfo = it.extraInfo it.extraInfo != null -> extraInfo = it.extraInfo
} }
...@@ -36,14 +49,14 @@ internal class OnlinePush { ...@@ -36,14 +49,14 @@ internal class OnlinePush {
val group = bot.getGroup(pbPushMsg.msg.msgHead!!.groupInfo!!.groupCode) val group = bot.getGroup(pbPushMsg.msg.msgHead!!.groupInfo!!.groupCode)
val flags = extraInfo?.flags?:0 val flags = extraInfo?.flags ?: 0
return GroupMessage( return GroupMessage(
bot = bot, bot = bot,
group = group, group = group,
senderName = pbPushMsg.msg.msgHead.groupInfo!!.groupCard.encodeToString(), senderName = pbPushMsg.msg.msgHead.groupInfo!!.groupCard.encodeToString(),
sender = group.getMember(pbPushMsg.msg.msgHead.fromUin), sender = group.getMember(pbPushMsg.msg.msgHead.fromUin),
message = message, message = message,
permission = when{ permission = when {
flags and 16 != 0 -> MemberPermission.ADMINISTRATOR flags and 16 != 0 -> MemberPermission.ADMINISTRATOR
flags and 8 != 0 -> MemberPermission.OWNER flags and 8 != 0 -> MemberPermission.OWNER
flags and 0 != 0 -> MemberPermission.MEMBER flags and 0 != 0 -> MemberPermission.MEMBER
......
...@@ -14,6 +14,5 @@ interface ImageLink { ...@@ -14,6 +14,5 @@ interface ImageLink {
suspend fun downloadAsByteArray(): ByteArray = download().readBytes() suspend fun downloadAsByteArray(): ByteArray = download().readBytes()
@UseExperimental(KtorExperimentalAPI::class)
suspend fun download(): ByteReadPacket = Http.get(original) suspend fun download(): ByteReadPacket = Http.get(original)
} }
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment