mirror of
https://github.com/mamoe/mirai.git
synced 2025-01-08 09:10:11 +08:00
Rename MessageSource.senderId
to MessageSource.fromId
This commit is contained in:
parent
039b3d7517
commit
19bc7b80c5
@ -200,7 +200,7 @@ internal abstract class QQAndroidBotBase constructor(
|
||||
group.checkBotPermissionOperator()
|
||||
MessageRecallEvent.GroupRecall(
|
||||
this,
|
||||
source.senderId,
|
||||
source.fromId,
|
||||
source.id,
|
||||
source.time,
|
||||
null,
|
||||
@ -222,7 +222,7 @@ internal abstract class QQAndroidBotBase constructor(
|
||||
-> network.run {
|
||||
PbMessageSvc.PbMsgWithDraw.createForFriendMessage(
|
||||
bot.client,
|
||||
source.senderId,
|
||||
source.fromId,
|
||||
source.sequenceId,
|
||||
source.id,
|
||||
source.time
|
||||
@ -231,6 +231,8 @@ internal abstract class QQAndroidBotBase constructor(
|
||||
else -> error("stub!")
|
||||
}
|
||||
|
||||
|
||||
// 1001: No message meets the requirements (实际上是没权限, 管理员在尝试撤回群主的消息)
|
||||
check(response is PbMessageSvc.PbMsgWithDraw.Response.Success) { "Failed to recall message #${source.id}: $response" }
|
||||
}
|
||||
|
||||
|
@ -30,7 +30,6 @@ import net.mamoe.mirai.qqandroid.network.protocol.data.proto.SourceMsg
|
||||
import net.mamoe.mirai.qqandroid.network.protocol.packet.EMPTY_BYTE_ARRAY
|
||||
import net.mamoe.mirai.qqandroid.network.protocol.packet.chat.receive.OnlinePush
|
||||
import net.mamoe.mirai.qqandroid.utils._miraiContentToString
|
||||
import net.mamoe.mirai.qqandroid.utils.coerceAtMostOrFail
|
||||
import net.mamoe.mirai.qqandroid.utils.io.serialization.loadAs
|
||||
import net.mamoe.mirai.qqandroid.utils.io.serialization.toByteArray
|
||||
import net.mamoe.mirai.utils.MiraiExperimentalAPI
|
||||
@ -146,6 +145,11 @@ internal class MessageSourceFromGroupImpl(
|
||||
internal class OfflineMessageSourceImpl( // from others' quotation
|
||||
val delegate: ImMsgBody.SourceMsg, override val bot: Bot
|
||||
) : OfflineMessageSource(), MessageSourceImpl {
|
||||
|
||||
init {
|
||||
println(delegate._miraiContentToString())
|
||||
}
|
||||
|
||||
private val isRecalled: AtomicBoolean = atomic(false)
|
||||
override var isRecalledOrPlanned: Boolean
|
||||
get() = isRecalled.value
|
||||
@ -164,11 +168,10 @@ internal class OfflineMessageSourceImpl( // from others' quotation
|
||||
*/
|
||||
|
||||
override val id: Int
|
||||
get() = delegate.pbReserve.loadAs(SourceMsg.ResvAttr.serializer()).origUids!!
|
||||
.coerceAtMostOrFail(Int.MAX_VALUE.toLong()).toInt()
|
||||
get() = delegate.pbReserve.loadAs(SourceMsg.ResvAttr.serializer()).origUids!!.toInt()
|
||||
|
||||
// override val sourceMessage: MessageChain get() = delegate.toMessageChain()
|
||||
override val senderId: Long get() = delegate.senderUin
|
||||
override val fromId: Long get() = delegate.senderUin
|
||||
override val targetId: Long get() = Group.calculateGroupCodeByGroupUin(delegate.toUin)
|
||||
}
|
||||
|
||||
@ -196,7 +199,7 @@ internal class MessageSourceToFriendImpl(
|
||||
val messageUid: Long = sequenceId.toLong().shl(32) or id.toLong().and(0xffFFffFF)
|
||||
return ImMsgBody.SourceMsg(
|
||||
origSeqs = listOf(sequenceId),
|
||||
senderUin = senderId,
|
||||
senderUin = fromId,
|
||||
toUin = targetId,
|
||||
flag = 1,
|
||||
elems = elems,
|
||||
@ -207,7 +210,7 @@ internal class MessageSourceToFriendImpl(
|
||||
).toByteArray(SourceMsg.ResvAttr.serializer()),
|
||||
srcMsg = MsgComm.Msg(
|
||||
msgHead = MsgComm.MsgHead(
|
||||
fromUin = senderId, // qq
|
||||
fromUin = fromId, // qq
|
||||
toUin = targetId, // group
|
||||
msgType = 9, // 82?
|
||||
c2cCmd = 11,
|
||||
@ -271,7 +274,7 @@ internal class MessageSourceToGroupImpl(
|
||||
fun toJceDataImplForGroup(): ImMsgBody.SourceMsg {
|
||||
return ImMsgBody.SourceMsg(
|
||||
origSeqs = listOf(sequenceId),
|
||||
senderUin = senderId,
|
||||
senderUin = fromId,
|
||||
toUin = Group.calculateGroupUinByGroupCode(targetId),
|
||||
flag = 1,
|
||||
elems = elems,
|
||||
@ -282,7 +285,7 @@ internal class MessageSourceToGroupImpl(
|
||||
).toByteArray(SourceMsg.ResvAttr.serializer()),
|
||||
srcMsg = MsgComm.Msg(
|
||||
msgHead = MsgComm.MsgHead(
|
||||
fromUin = senderId, // qq
|
||||
fromUin = fromId, // qq
|
||||
toUin = Group.calculateGroupUinByGroupCode(targetId), // group
|
||||
msgType = 82, // 82?
|
||||
c2cCmd = 1,
|
||||
|
@ -241,7 +241,7 @@ internal inline fun <reified R> Iterable<*>.firstIsInstance(): R {
|
||||
return it
|
||||
}
|
||||
}
|
||||
throw NoSuchElementException("Collection contains no element matching the predicate.")
|
||||
throw NoSuchElementException("Collection contains no element is ${R::class}")
|
||||
}
|
||||
|
||||
internal inline fun <reified R> Iterable<*>.firstIsInstanceOrNull(): R? {
|
||||
|
@ -38,10 +38,10 @@ internal fun Long.coerceAtLeastOrFail(min: Long): Long {
|
||||
*/
|
||||
@PublishedApi
|
||||
internal fun Int.coerceAtMostOrFail(max: Int): Int =
|
||||
if (this >= max) error("value is greater than its expected maximum value $max")
|
||||
if (this >= max) error("value $this is greater than its expected maximum value $max")
|
||||
else this
|
||||
|
||||
@PublishedApi
|
||||
internal fun Long.coerceAtMostOrFail(max: Long): Long =
|
||||
if (this >= max) error("value is greater than its expected maximum value $max")
|
||||
if (this >= max) error("value $this is greater than its expected maximum value $max")
|
||||
else this
|
@ -34,8 +34,6 @@ import net.mamoe.mirai.event.subscribingGetOrNull
|
||||
import net.mamoe.mirai.event.whileSelectMessages
|
||||
import net.mamoe.mirai.message.data.*
|
||||
import net.mamoe.mirai.qqandroid.network.Packet
|
||||
import net.mamoe.mirai.recall
|
||||
import net.mamoe.mirai.recallIn
|
||||
import net.mamoe.mirai.utils.*
|
||||
import kotlin.coroutines.CoroutineContext
|
||||
import kotlin.coroutines.EmptyCoroutineContext
|
||||
@ -124,23 +122,7 @@ abstract class MessagePacketBase<out TSender : QQ, out TSubject : Contact> : Pac
|
||||
// endregion
|
||||
|
||||
// region 撤回
|
||||
suspend inline fun MessageChain.recall() = bot.recall(this)
|
||||
suspend inline fun MessageSource.recall() = bot.recall(this)
|
||||
suspend inline fun QuoteReply.recall() = bot.recall(this.source)
|
||||
inline fun MessageChain.recallIn(
|
||||
millis: Long,
|
||||
coroutineContext: CoroutineContext = EmptyCoroutineContext
|
||||
) = bot.recallIn(this, millis, coroutineContext)
|
||||
|
||||
inline fun MessageSource.recallIn(
|
||||
millis: Long,
|
||||
coroutineContext: CoroutineContext = EmptyCoroutineContext
|
||||
) = bot.recallIn(this, millis, coroutineContext)
|
||||
|
||||
inline fun QuoteReply.recallIn(
|
||||
millis: Long,
|
||||
coroutineContext: CoroutineContext = EmptyCoroutineContext
|
||||
) = bot.recallIn(this.source, millis, coroutineContext)
|
||||
// endregion
|
||||
|
||||
// region 上传图片
|
||||
|
@ -63,7 +63,7 @@ sealed class MessageSource : Message, MessageMetadata {
|
||||
/**
|
||||
* 发送人. 可能为机器人自己, 好友的 id, 或群 id
|
||||
*/
|
||||
abstract val senderId: Long
|
||||
abstract val fromId: Long
|
||||
|
||||
/**
|
||||
* 发送目标. 可能为机器人自己, 好友的 id, 或群 id
|
||||
@ -126,7 +126,7 @@ sealed class OnlineMessageSource : MessageSource() {
|
||||
abstract override val sender: Bot
|
||||
abstract override val target: Contact
|
||||
|
||||
final override val senderId: Long get() = sender.id
|
||||
final override val fromId: Long get() = sender.id
|
||||
final override val targetId: Long get() = target.id
|
||||
|
||||
abstract class ToFriend : Outgoing() {
|
||||
@ -155,7 +155,7 @@ sealed class OnlineMessageSource : MessageSource() {
|
||||
abstract override val sender: QQ // out QQ
|
||||
abstract override val target: Bot
|
||||
|
||||
final override val senderId: Long get() = sender.id
|
||||
final override val fromId: Long get() = sender.id
|
||||
final override val targetId: Long get() = target.id
|
||||
|
||||
abstract class FromFriend : Incoming() {
|
||||
@ -190,13 +190,10 @@ fun OnlineMessageSource.quote(): QuoteReply {
|
||||
*/
|
||||
fun MessageChain.quote(): QuoteReply {
|
||||
@OptIn(MiraiInternalAPI::class)
|
||||
return QuoteReply(this.source)
|
||||
return QuoteReply(this.source as? OnlineMessageSource ?: error("only online messages can be quoted"))
|
||||
}
|
||||
|
||||
/**
|
||||
* 撤回这条消息
|
||||
*/
|
||||
suspend inline fun OnlineMessageSource.recall() = bot.recall(this)
|
||||
suspend inline fun MessageSource.recall() = bot.recall(this)
|
||||
|
||||
/**
|
||||
* 撤回这条消息
|
||||
@ -237,4 +234,11 @@ inline val MessageChain.id: Int
|
||||
*/
|
||||
@get:JvmSynthetic
|
||||
inline val MessageChain.source: MessageSource
|
||||
get() = this[MessageSource]
|
||||
get() = this[MessageSource]
|
||||
|
||||
suspend inline fun MessageChain.recall() = this.source.recall()
|
||||
|
||||
inline fun MessageChain.recallIn(
|
||||
millis: Long,
|
||||
coroutineContext: CoroutineContext = EmptyCoroutineContext
|
||||
): Job = source.recallIn(millis, coroutineContext)
|
||||
|
@ -9,11 +9,15 @@
|
||||
|
||||
@file:JvmMultifileClass
|
||||
@file:JvmName("MessageUtils")
|
||||
@file:Suppress("NOTHING_TO_INLINE")
|
||||
|
||||
package net.mamoe.mirai.message.data
|
||||
|
||||
import kotlinx.coroutines.Job
|
||||
import net.mamoe.mirai.message.MessageReceipt
|
||||
import net.mamoe.mirai.utils.SinceMirai
|
||||
import kotlin.coroutines.CoroutineContext
|
||||
import kotlin.coroutines.EmptyCoroutineContext
|
||||
import kotlin.jvm.JvmMultifileClass
|
||||
import kotlin.jvm.JvmName
|
||||
|
||||
@ -27,9 +31,16 @@ import kotlin.jvm.JvmName
|
||||
* @see MessageSource 获取更多信息
|
||||
*/
|
||||
@SinceMirai("0.33.0")
|
||||
class QuoteReply(val source: MessageSource) : Message, MessageMetadata {
|
||||
class QuoteReply(val source: OnlineMessageSource) : Message, MessageMetadata {
|
||||
// TODO: 2020/4/4 Metadata or Content?
|
||||
companion object Key : Message.Key<QuoteReply>
|
||||
|
||||
override fun toString(): String = "[mirai:quote]"
|
||||
}
|
||||
}
|
||||
|
||||
suspend inline fun QuoteReply.recall() = this.source.recall()
|
||||
|
||||
inline fun QuoteReply.recallIn(
|
||||
millis: Long,
|
||||
coroutineContext: CoroutineContext = EmptyCoroutineContext
|
||||
): Job = this.source.recallIn(millis, coroutineContext)
|
Loading…
Reference in New Issue
Block a user