mirror of
https://github.com/mamoe/mirai.git
synced 2025-02-09 09:47:15 +08:00
Make Group.get, Bot.getFriend, Bot.getGroup return nullable. Add getOrFail for migration
This commit is contained in:
parent
c6eef9f68e
commit
6c0b6473ed
@ -130,30 +130,43 @@ public abstract class Bot internal constructor(
|
||||
@MiraiExperimentalApi
|
||||
public abstract val asFriend: Friend
|
||||
|
||||
@Deprecated("Use asFriend instead", ReplaceWith("asFriend"))
|
||||
@PlannedRemoval("2.0-M2")
|
||||
public inline val selfQQ: Friend
|
||||
get() = asFriend
|
||||
|
||||
|
||||
/**
|
||||
* 机器人的好友列表. 与服务器同步更新
|
||||
* 好友列表. 与服务器同步更新.
|
||||
*/
|
||||
public abstract val friends: ContactList<Friend>
|
||||
|
||||
/**
|
||||
* 获取一个好友对象.
|
||||
* @throws [NoSuchElementException] 当不存在这个好友时抛出
|
||||
* 以 [对方 QQ 号码][id] 获取一个好友对象, 在获取失败时返回 `null`.
|
||||
*/
|
||||
public fun getFriend(id: Long): Friend =
|
||||
friends.firstOrNull { it.id == id } ?: throw NoSuchElementException("friend $id")
|
||||
public fun getFriend(id: Long): Friend? =
|
||||
friends.firstOrNull { it.id == id }
|
||||
|
||||
/**
|
||||
* 机器人加入的群列表. 与服务器同步更新
|
||||
* 以 [对方 QQ 号码][id] 获取一个好友对象, 在获取失败时抛出 [NoSuchElementException].
|
||||
*/
|
||||
public fun getFriendOrFail(id: Long): Friend = getFriend(id) ?: throw NoSuchElementException("friend $id")
|
||||
|
||||
/**
|
||||
* 加入的群列表. 与服务器同步更新.
|
||||
*/
|
||||
public abstract val groups: ContactList<Group>
|
||||
|
||||
/**
|
||||
* 获取一个机器人加入的群.
|
||||
* @throws NoSuchElementException 当不存在这个群时抛出
|
||||
* 以 [群号码][id] 获取一个群对象, 在获取失败时返回 `null`.
|
||||
*/
|
||||
public fun getGroup(id: Long): Group =
|
||||
groups.firstOrNull { it.id == id } ?: throw NoSuchElementException("group $id")
|
||||
public fun getGroup(id: Long): Group? =
|
||||
groups.firstOrNull { it.id == id }
|
||||
|
||||
/**
|
||||
* 以 [群号码][id] 获取一个群对象, 在获取失败时抛出 [NoSuchElementException].
|
||||
*/
|
||||
public fun getGroupOrFail(id: Long): Group = getGroup(id) ?: throw NoSuchElementException("group $id")
|
||||
|
||||
// endregion
|
||||
|
||||
@ -225,8 +238,12 @@ public inline fun Bot.containsFriend(id: Long): Boolean = this.friends.contains(
|
||||
@JvmSynthetic
|
||||
public inline fun Bot.containsGroup(id: Long): Boolean = this.groups.contains(id)
|
||||
|
||||
@Deprecated("Use getFriend", ReplaceWith("this.getFriend(id)"))
|
||||
@PlannedRemoval("2.0-M2")
|
||||
@JvmSynthetic
|
||||
public inline fun Bot.getFriendOrNull(id: Long): Friend? = this.friends.getOrNull(id)
|
||||
public inline fun Bot.getFriendOrNull(id: Long): Friend? = this.getFriend(id)
|
||||
|
||||
@Deprecated("Use getGroup", ReplaceWith("this.getGroup(id)"))
|
||||
@PlannedRemoval("2.0-M2")
|
||||
@JvmSynthetic
|
||||
public inline fun Bot.getGroupOrNull(id: Long): Group? = this.groups.getOrNull(id)
|
||||
public inline fun Bot.getGroupOrNull(id: Long): Group? = this.getGroup(id)
|
||||
|
@ -20,10 +20,7 @@ import net.mamoe.mirai.event.events.*
|
||||
import net.mamoe.mirai.message.MessageReceipt
|
||||
import net.mamoe.mirai.message.MessageReceipt.Companion.recall
|
||||
import net.mamoe.mirai.message.data.*
|
||||
import net.mamoe.mirai.utils.ExternalImage
|
||||
import net.mamoe.mirai.utils.MiraiExperimentalApi
|
||||
import net.mamoe.mirai.utils.OverFileSizeMaxException
|
||||
import net.mamoe.mirai.utils.get
|
||||
import net.mamoe.mirai.utils.*
|
||||
import java.io.InputStream
|
||||
|
||||
/**
|
||||
@ -89,22 +86,34 @@ public interface Group : Contact, CoroutineScope {
|
||||
|
||||
/**
|
||||
* 群成员列表, 不含机器人自己, 含群主.
|
||||
* 在 [Group] 实例创建的时候查询一次. 并与事件同步事件更新
|
||||
*
|
||||
* 在 [Group] 实例创建的时候查询一次. 并与事件同步事件更新.
|
||||
*/
|
||||
public val members: ContactList<Member>
|
||||
|
||||
/**
|
||||
* 获取群成员实例. 不存在时抛出 [kotlin.NoSuchElementException]
|
||||
* 当 [id] 为 [Bot.id] 时返回 [botAsMember]
|
||||
* 获取群成员实例. 不存在时返回 `null`.
|
||||
*
|
||||
* 当 [id] 为 [Bot.id] 时返回 [botAsMember].
|
||||
*/
|
||||
@Throws(NoSuchElementException::class)
|
||||
public operator fun get(id: Long): Member
|
||||
public operator fun get(id: Long): Member?
|
||||
|
||||
@Deprecated("Use get", ReplaceWith("get(id)"))
|
||||
@PlannedRemoval("2.0-M2")
|
||||
/**
|
||||
* 获取群成员实例, 不存在则 null
|
||||
* 当 [id] 为 [Bot.id] 时返回 [botAsMember]
|
||||
*/
|
||||
public fun getOrNull(id: Long): Member?
|
||||
public fun getOrNull(id: Long): Member? = get(id)
|
||||
|
||||
/**
|
||||
* 获取群成员实例. 不存在时抛出 [kotlin.NoSuchElementException].
|
||||
*
|
||||
* 当 [id] 为 [Bot.id] 时返回 [botAsMember].
|
||||
*/
|
||||
public fun getOrFail(id: Long): Member =
|
||||
get(id) ?: throw NoSuchElementException("member $id not found in group ${this.id}")
|
||||
|
||||
|
||||
/**
|
||||
* 检查此 id 的群成员是否存在
|
||||
|
@ -15,7 +15,6 @@ import net.mamoe.kjbb.JvmBlockingBridge
|
||||
import net.mamoe.mirai.Bot
|
||||
import net.mamoe.mirai.JavaFriendlyAPI
|
||||
import net.mamoe.mirai.event.events.*
|
||||
import net.mamoe.mirai.getFriendOrNull
|
||||
import net.mamoe.mirai.message.MessageReceipt
|
||||
import net.mamoe.mirai.message.MessageReceipt.Companion.recall
|
||||
import net.mamoe.mirai.message.action.MemberNudge
|
||||
@ -182,12 +181,12 @@ public interface Member : User {
|
||||
*
|
||||
* @throws IllegalStateException 当此成员不是好友时抛出
|
||||
*/
|
||||
public fun Member.asFriend(): Friend = this.bot.getFriendOrNull(this.id) ?: error("$this is not a friend")
|
||||
public fun Member.asFriend(): Friend = this.bot.getFriend(this.id) ?: error("$this is not a friend")
|
||||
|
||||
/**
|
||||
* 得到此成员作为好友的对象, 当此成员不是好友时返回 `null`
|
||||
*/
|
||||
public fun Member.asFriendOrNull(): Friend? = this.bot.getFriendOrNull(this.id)
|
||||
public fun Member.asFriendOrNull(): Friend? = this.bot.getFriend(this.id)
|
||||
|
||||
/**
|
||||
* 判断此成员是否为好友
|
||||
|
@ -325,7 +325,10 @@ public data class BotInvitedJoinGroupRequestEvent internal constructor(
|
||||
*/
|
||||
public val invitorNick: String
|
||||
) : BotEvent, Packet, AbstractEvent() {
|
||||
public val invitor: Friend get() = this.bot.getFriend(invitorId)
|
||||
/**
|
||||
* 邀请人. 若在事件发生后邀请人已经被删除好友, [invitor] 为 `null`.
|
||||
*/
|
||||
public val invitor: Friend? get() = this.bot.getFriend(invitorId)
|
||||
|
||||
@JvmField
|
||||
internal val responded: AtomicBoolean = AtomicBoolean(false)
|
||||
@ -362,20 +365,32 @@ public data class MemberJoinRequestEvent internal constructor(
|
||||
*/
|
||||
val fromNick: String
|
||||
) : BotEvent, Packet, AbstractEvent() {
|
||||
public val group: Group get() = this.bot.getGroup(groupId)
|
||||
/**
|
||||
* 相关群. 若在事件发生后机器人退出这个群, [group] 为 `null`.
|
||||
*/
|
||||
public val group: Group? get() = this.bot.getGroup(groupId)
|
||||
|
||||
@JvmField
|
||||
@PublishedApi
|
||||
internal val responded: AtomicBoolean = AtomicBoolean(false)
|
||||
|
||||
/**
|
||||
* 同意这个请求
|
||||
*/
|
||||
@JvmBlockingBridge
|
||||
public suspend fun accept(): Unit = Mirai.acceptMemberJoinRequest(this)
|
||||
|
||||
/**
|
||||
* 拒绝这个请求
|
||||
*/
|
||||
@JvmBlockingBridge
|
||||
@JvmOverloads
|
||||
public suspend fun reject(blackList: Boolean = false, message: String = ""): Unit =
|
||||
Mirai.rejectMemberJoinRequest(this, blackList, message)
|
||||
|
||||
/**
|
||||
* 忽略这个请求.
|
||||
*/
|
||||
@JvmBlockingBridge
|
||||
public suspend fun ignore(blackList: Boolean = false): Unit = Mirai.ignoreMemberJoinRequest(this, blackList)
|
||||
}
|
||||
|
@ -366,7 +366,7 @@ public sealed class MessageRecallEvent : BotEvent, AbstractEvent() {
|
||||
}
|
||||
|
||||
public val MessageRecallEvent.GroupRecall.author: Member
|
||||
get() = if (authorId == bot.id) group.botAsMember else group[authorId]
|
||||
get() = if (authorId == bot.id) group.botAsMember else group.getOrFail(authorId)
|
||||
|
||||
public val MessageRecallEvent.FriendRecall.isByBot: Boolean get() = this.operator == bot.id
|
||||
// val MessageRecallEvent.GroupRecall.isByBot: Boolean get() = (this as GroupOperableEvent).isByBot
|
||||
@ -491,7 +491,13 @@ public class GroupMessageEvent(
|
||||
public override val subject: Group get() = group
|
||||
public override val source: OnlineMessageSource.Incoming.FromGroup get() = message.source as OnlineMessageSource.Incoming.FromGroup
|
||||
|
||||
public inline fun At.asMember(): Member = group[this.target]
|
||||
@Deprecated("Use targetMember", ReplaceWith("this.targetMember"))
|
||||
@Suppress("NOTHING_TO_INLINE")
|
||||
public inline fun At.asMember(): Member = group.getOrFail(target)
|
||||
|
||||
@get:JvmSynthetic // TODO: 2020/12/16 move to extensions by 2.0-M2
|
||||
public inline val At.targetMember: Member?
|
||||
get(): Member? = group[this.target]
|
||||
|
||||
public override fun toString(): String =
|
||||
"GroupMessageEvent(group=${group.id}, senderName=$senderName, sender=${sender.id}, permission=${permission.name}, message=$message)"
|
||||
|
@ -108,15 +108,13 @@ internal open class MiraiImpl : IMirai, LowLevelApiAccessor {
|
||||
|
||||
override suspend fun acceptMemberJoinRequest(event: MemberJoinRequestEvent) {
|
||||
@Suppress("DuplicatedCode")
|
||||
checkGroupPermission(event.bot, event.group) { event::class.simpleName ?: "<anonymous class>" }
|
||||
checkGroupPermission(event.bot, event.groupId) { event::class.simpleName ?: "<anonymous class>" }
|
||||
@Suppress("INVISIBLE_REFERENCE", "INVISIBLE_MEMBER")
|
||||
check(event.responded.compareAndSet(false, true)) {
|
||||
"the request $this has already been responded"
|
||||
}
|
||||
|
||||
check(!event.group.members.contains(event.fromId)) {
|
||||
"the request $this is outdated: Another operator has already responded it."
|
||||
}
|
||||
if (event.group?.contains(event.fromId) == true) return
|
||||
|
||||
_lowLevelSolveMemberJoinRequestEvent(
|
||||
bot = event.bot,
|
||||
@ -131,15 +129,13 @@ internal open class MiraiImpl : IMirai, LowLevelApiAccessor {
|
||||
|
||||
@Suppress("DuplicatedCode")
|
||||
override suspend fun rejectMemberJoinRequest(event: MemberJoinRequestEvent, blackList: Boolean, message: String) {
|
||||
checkGroupPermission(event.bot, event.group) { event::class.simpleName ?: "<anonymous class>" }
|
||||
checkGroupPermission(event.bot, event.groupId) { event::class.simpleName ?: "<anonymous class>" }
|
||||
@Suppress("INVISIBLE_REFERENCE", "INVISIBLE_MEMBER")
|
||||
check(event.responded.compareAndSet(false, true)) {
|
||||
"the request $this has already been responded"
|
||||
}
|
||||
|
||||
check(!event.group.members.contains(event.fromId)) {
|
||||
"the request $this is outdated: Another operator has already responded it."
|
||||
}
|
||||
if (event.group?.contains(event.fromId) == true) return
|
||||
|
||||
_lowLevelSolveMemberJoinRequestEvent(
|
||||
bot = event.bot,
|
||||
@ -153,11 +149,11 @@ internal open class MiraiImpl : IMirai, LowLevelApiAccessor {
|
||||
)
|
||||
}
|
||||
|
||||
private inline fun checkGroupPermission(eventBot: Bot, eventGroup: Group, eventName: () -> String) {
|
||||
val group = eventBot.getGroupOrNull(eventGroup.id)
|
||||
private inline fun checkGroupPermission(eventBot: Bot, groupId: Long, eventName: () -> String) {
|
||||
val group = eventBot.getGroup(groupId)
|
||||
?: kotlin.run {
|
||||
error(
|
||||
"A ${eventName()} is outdated. Group ${eventGroup.id} not found for bot ${eventBot.id}. " +
|
||||
"A ${eventName()} is outdated. Group $groupId not found for bot ${eventBot.id}. " +
|
||||
"This is because bot isn't in the group anymore"
|
||||
)
|
||||
|
||||
@ -167,7 +163,7 @@ internal open class MiraiImpl : IMirai, LowLevelApiAccessor {
|
||||
}
|
||||
|
||||
override suspend fun ignoreMemberJoinRequest(event: MemberJoinRequestEvent, blackList: Boolean) {
|
||||
checkGroupPermission(event.bot, event.group) { event::class.simpleName ?: "<anonymous class>" }
|
||||
checkGroupPermission(event.bot, event.groupId) { event::class.simpleName ?: "<anonymous class>" }
|
||||
@Suppress("INVISIBLE_REFERENCE", "INVISIBLE_MEMBER")
|
||||
check(event.responded.compareAndSet(false, true)) {
|
||||
"the request $this has already been responded"
|
||||
@ -568,7 +564,7 @@ internal open class MiraiImpl : IMirai, LowLevelApiAccessor {
|
||||
it.message.ensureSequenceIdAvailable()
|
||||
}
|
||||
|
||||
val group = getGroup(groupCode)
|
||||
val group = getGroupOrFail(groupCode)
|
||||
|
||||
val time = currentTimeSeconds()
|
||||
val sequenceId = client.atomicNextMessageSequenceId()
|
||||
|
@ -250,25 +250,17 @@ internal class GroupImpl(
|
||||
}
|
||||
)
|
||||
|
||||
override operator fun get(id: Long): Member {
|
||||
override operator fun get(id: Long): Member? {
|
||||
if (id == bot.id) {
|
||||
return botAsMember
|
||||
}
|
||||
return members.firstOrNull { it.id == id }
|
||||
?: throw NoSuchElementException("member $id not found in group $uin")
|
||||
}
|
||||
|
||||
override fun contains(id: Long): Boolean {
|
||||
return bot.id == id || members.firstOrNull { it.id == id } != null
|
||||
}
|
||||
|
||||
override fun getOrNull(id: Long): Member? {
|
||||
if (id == bot.id) {
|
||||
return botAsMember
|
||||
}
|
||||
return members.firstOrNull { it.id == id }
|
||||
}
|
||||
|
||||
override suspend fun sendMessage(message: Message): MessageReceipt<Group> {
|
||||
require(message.isContentNotEmpty()) { "message is empty" }
|
||||
check(!isBotMuted) { throw BotIsBeingMutedException(this) }
|
||||
|
@ -72,7 +72,7 @@ internal class MessageSourceFromFriendImpl(
|
||||
override val internalIds: IntArray get() = intArrayOf(msg.msgBody.richText.attr!!.random)
|
||||
override val time: Int get() = msg.msgHead.msgTime
|
||||
override val originalMessage: MessageChain by lazy { msg.toMessageChain(bot, bot.id, 0, false) }
|
||||
override val sender: Friend get() = bot.getFriend(msg.msgHead.fromUin)
|
||||
override val sender: Friend get() = bot.getFriendOrFail(msg.msgHead.fromUin)
|
||||
|
||||
private val jceData by lazy { msg.toJceDataFriendOrTemp(internalIds) }
|
||||
|
||||
@ -125,7 +125,10 @@ internal class MessageSourceFromTempImpl(
|
||||
override val ids: IntArray get() = sequenceIds//
|
||||
override val time: Int get() = msg.msgHead.msgTime
|
||||
override val originalMessage: MessageChain by lazy { msg.toMessageChain(bot, 0, false) }
|
||||
override val sender: Member get() = with(msg.msgHead) { bot.getGroup(c2cTmpMsgHead!!.groupUin)[fromUin] }
|
||||
override val sender: Member
|
||||
get() = with(msg.msgHead) {
|
||||
bot.getGroupOrFail(c2cTmpMsgHead!!.groupUin).getOrFail(fromUin)
|
||||
}
|
||||
|
||||
private val jceData by lazy { msg.toJceDataFriendOrTemp(internalIds) }
|
||||
override fun toJceData(): ImMsgBody.SourceMsg = jceData
|
||||
@ -149,7 +152,7 @@ internal data class MessageSourceFromGroupImpl(
|
||||
msg.msgHead.groupInfo?.groupCode
|
||||
?: error("cannot find groupCode for MessageSourceFromGroupImpl. msg=${msg._miraiContentToString()}")
|
||||
) as GroupImpl).run {
|
||||
getOrNull(msg.msgHead.fromUin)
|
||||
get(msg.msgHead.fromUin)
|
||||
?: msg.msgBody.richText.elems.firstOrNull { it.anonGroupMsg != null }?.run {
|
||||
newAnonymous(anonGroupMsg!!.anonNick.encodeToString())
|
||||
}
|
||||
|
@ -17,7 +17,6 @@ import net.mamoe.mirai.event.events.BotInvitedJoinGroupRequestEvent
|
||||
import net.mamoe.mirai.event.events.BotLeaveEvent
|
||||
import net.mamoe.mirai.event.events.MemberJoinRequestEvent
|
||||
import net.mamoe.mirai.event.events.NewFriendRequestEvent
|
||||
import net.mamoe.mirai.getGroupOrNull
|
||||
import net.mamoe.mirai.internal.QQAndroidBot
|
||||
import net.mamoe.mirai.internal.message.contextualBugReportException
|
||||
import net.mamoe.mirai.internal.network.Packet
|
||||
@ -192,14 +191,14 @@ internal class NewContact {
|
||||
null
|
||||
}
|
||||
5 -> {
|
||||
val group = bot.getGroupOrNull(groupCode) ?: return null
|
||||
val group = bot.getGroup(groupCode) ?: return null
|
||||
when (groupMsgType) {
|
||||
13 -> { // 成员主动退出, 机器人是管理员, 接到通知
|
||||
// 但无法获取是哪个成员.
|
||||
null
|
||||
}
|
||||
7 -> { // 机器人被踢
|
||||
val operator = group[actionUin]
|
||||
val operator = group[actionUin] ?: return null
|
||||
BotLeaveEvent.Kick(operator)
|
||||
}
|
||||
else -> {
|
||||
|
@ -29,7 +29,6 @@ import net.mamoe.mirai.event.events.BotJoinGroupEvent
|
||||
import net.mamoe.mirai.event.events.FriendMessageEvent
|
||||
import net.mamoe.mirai.event.events.MemberJoinEvent
|
||||
import net.mamoe.mirai.event.events.TempMessageEvent
|
||||
import net.mamoe.mirai.getFriendOrNull
|
||||
import net.mamoe.mirai.internal.QQAndroidBot
|
||||
import net.mamoe.mirai.internal.contact.GroupImpl
|
||||
import net.mamoe.mirai.internal.contact.checkIsFriendImpl
|
||||
@ -206,11 +205,12 @@ internal object MessageSvcPbGetMsg : OutgoingPacketFactory<MessageSvcPbGetMsg.Re
|
||||
|
||||
if (msg.msgHead.authUin == bot.id) {
|
||||
// 邀请入群
|
||||
return@mapNotNull bot.createGroupForBot(msg.msgHead.fromUin)?.let {
|
||||
return@mapNotNull bot.createGroupForBot(msg.msgHead.fromUin)?.let { group ->
|
||||
// package: 27 0B 60 E7 01 CA CC 69 8B 83 44 71 47 90 06 B9 DC C0 ED D4 B1 00 30 33 44 30 42 38 46 30 39 37 32 38 35 43 34 31 38 30 33 36 41 34 36 31 36 31 35 32 37 38 46 46 43 30 41 38 30 36 30 36 45 38 31 43 39 41 34 38 37
|
||||
// package: groupUin + 01 CA CC 69 8B 83 + invitorUin + length(06) + string + magicKey
|
||||
val invitorUin = msg.msgBody.msgContent.sliceArray(10..13).toInt().toLongUnsigned()
|
||||
BotJoinGroupEvent.Invite(it[invitorUin])
|
||||
val invitor = group[invitorUin] ?: return@let null
|
||||
BotJoinGroupEvent.Invite(invitor)
|
||||
}
|
||||
} else {
|
||||
|
||||
@ -322,7 +322,7 @@ internal object MessageSvcPbGetMsg : OutgoingPacketFactory<MessageSvcPbGetMsg.Re
|
||||
}
|
||||
return@mapNotNull null
|
||||
}
|
||||
val friend = bot.getFriendOrNull(msg.msgHead.fromUin) ?: return@mapNotNull null
|
||||
val friend = bot.getFriend(msg.msgHead.fromUin) ?: return@mapNotNull null
|
||||
friend.checkIsFriendImpl()
|
||||
|
||||
if (!bot.firstLoginSucceed) {
|
||||
@ -352,7 +352,7 @@ internal object MessageSvcPbGetMsg : OutgoingPacketFactory<MessageSvcPbGetMsg.Re
|
||||
}
|
||||
141 -> {
|
||||
val tmpHead = msg.msgHead.c2cTmpMsgHead ?: return@mapNotNull null
|
||||
val member = bot.getGroupByUinOrNull(tmpHead.groupUin)?.getOrNull(msg.msgHead.fromUin)
|
||||
val member = bot.getGroupByUinOrNull(tmpHead.groupUin)?.get(msg.msgHead.fromUin)
|
||||
?: return@mapNotNull null
|
||||
|
||||
member.checkIsMemberImpl()
|
||||
|
@ -19,7 +19,6 @@ import net.mamoe.mirai.event.Event
|
||||
import net.mamoe.mirai.event.broadcast
|
||||
import net.mamoe.mirai.event.events.GroupMessageEvent
|
||||
import net.mamoe.mirai.event.events.MemberCardChangeEvent
|
||||
import net.mamoe.mirai.getGroupOrNull
|
||||
import net.mamoe.mirai.internal.QQAndroidBot
|
||||
import net.mamoe.mirai.internal.contact.GroupImpl
|
||||
import net.mamoe.mirai.internal.contact.MemberImpl
|
||||
@ -73,7 +72,7 @@ internal object OnlinePushPbPushGroupMsg : IncomingPacketFactory<Packet?>("Onlin
|
||||
}
|
||||
|
||||
val group =
|
||||
bot.getGroupOrNull(pbPushMsg.msg.msgHead.groupInfo!!.groupCode) as GroupImpl? ?: return null // 机器人还正在进群
|
||||
bot.getGroup(pbPushMsg.msg.msgHead.groupInfo!!.groupCode) as GroupImpl? ?: return null // 机器人还正在进群
|
||||
val sender = if (anonymous != null) {
|
||||
group.newAnonymous(anonymous.anonNick.encodeToString())
|
||||
} else {
|
||||
|
@ -125,7 +125,7 @@ internal object OnlinePushPbPushTransMsg :
|
||||
)
|
||||
}
|
||||
} else {
|
||||
val newOwner = group.getOrNull(to) ?: group.newMember(object : MemberInfo {
|
||||
val newOwner = group.get(to) ?: group.newMember(object : MemberInfo {
|
||||
override val nameCard: String
|
||||
get() = ""
|
||||
override val permission: MemberPermission
|
||||
@ -230,7 +230,7 @@ internal object OnlinePushPbPushTransMsg :
|
||||
bot.groups.delegate.remove(group)
|
||||
}
|
||||
} else {
|
||||
val member = group.getOrNull(target) as? MemberImpl ?: return null
|
||||
val member = group.get(target) as? MemberImpl ?: return null
|
||||
return MemberLeaveEvent.Quit(member.also {
|
||||
member.cancel(CancellationException("Leaved actively"))
|
||||
group.members.delegate.remove(member)
|
||||
@ -245,7 +245,7 @@ internal object OnlinePushPbPushTransMsg :
|
||||
bot.groups.delegate.remove(group)
|
||||
}
|
||||
} else {
|
||||
val member = group.getOrNull(target) as? MemberImpl ?: return null
|
||||
val member = group.get(target) as? MemberImpl ?: return null
|
||||
return MemberLeaveEvent.Kick(member.also {
|
||||
member.cancel(CancellationException("Being kicked"))
|
||||
group.members.delegate.remove(member)
|
||||
|
@ -26,8 +26,6 @@ import net.mamoe.mirai.contact.Friend
|
||||
import net.mamoe.mirai.contact.Member
|
||||
import net.mamoe.mirai.data.FriendInfo
|
||||
import net.mamoe.mirai.event.events.*
|
||||
import net.mamoe.mirai.getFriendOrNull
|
||||
import net.mamoe.mirai.getGroupOrNull
|
||||
import net.mamoe.mirai.internal.QQAndroidBot
|
||||
import net.mamoe.mirai.internal.contact.*
|
||||
import net.mamoe.mirai.internal.network.MultiPacketBySequence
|
||||
@ -86,7 +84,7 @@ internal object OnlinePushReqPush : IncomingPacketFactory<OnlinePushReqPush.ReqP
|
||||
val packets: Sequence<Packet> = reqPushMsg.vMsgInfos.deco(bot.client) { msgInfo ->
|
||||
when (msgInfo.shMsgType.toInt()) {
|
||||
732 -> {
|
||||
val group = bot.getGroupOrNull(readUInt().toLong())
|
||||
val group = bot.getGroup(readUInt().toLong())
|
||||
?: return@deco emptySequence() // group has not been initialized
|
||||
|
||||
GroupImpl.checkIsInstance(group)
|
||||
@ -183,7 +181,7 @@ private object Transformers732 : Map<Int, Lambda732> by mapOf(
|
||||
if (operatorUin == bot.id) {
|
||||
return@lambda732 emptySequence()
|
||||
}
|
||||
val operator = group.getOrNull(operatorUin) ?: return@lambda732 emptySequence()
|
||||
val operator = group[operatorUin] ?: return@lambda732 emptySequence()
|
||||
readUInt().toLong() // time
|
||||
this.discardExact(2)
|
||||
val target = readUInt().toLong()
|
||||
@ -213,7 +211,7 @@ private object Transformers732 : Map<Int, Lambda732> by mapOf(
|
||||
}
|
||||
}
|
||||
|
||||
val member = group.getOrNull(target) ?: return@lambda732 emptySequence()
|
||||
val member = group[target] ?: return@lambda732 emptySequence()
|
||||
member.checkIsMemberImpl()
|
||||
|
||||
if (member.muteTimeRemaining == timeSeconds) {
|
||||
@ -228,7 +226,7 @@ private object Transformers732 : Map<Int, Lambda732> by mapOf(
|
||||
// anonymous
|
||||
0x0e to lambda732 { group: GroupImpl, _: QQAndroidBot ->
|
||||
// 匿名
|
||||
val operator = group.getOrNull(readUInt().toLong()) ?: return@lambda732 emptySequence()
|
||||
val operator = group[readUInt().toLong()] ?: return@lambda732 emptySequence()
|
||||
val new = readInt() == 0
|
||||
if (group.settings.isAnonymousChatEnabled == new) {
|
||||
return@lambda732 emptySequence()
|
||||
@ -257,8 +255,8 @@ private object Transformers732 : Map<Int, Lambda732> by mapOf(
|
||||
run {
|
||||
when (key) {
|
||||
"action_str" -> action = value
|
||||
"uin_str1" -> from = group[value.toLong()]
|
||||
"uin_str2" -> target = group[value.toLong()]
|
||||
"uin_str1" -> from = group[value.toLong()] ?: return@lambda732 emptySequence()
|
||||
"uin_str2" -> target = group[value.toLong()] ?: return@lambda732 emptySequence()
|
||||
"suffix_str" -> suffix = value
|
||||
}
|
||||
}
|
||||
@ -358,7 +356,7 @@ private object Transformers732 : Map<Int, Lambda732> by mapOf(
|
||||
|
||||
val operator =
|
||||
if (recallReminder.uin == bot.id) group.botAsMember
|
||||
else group.getOrNull(recallReminder.uin) ?: return@lambda732 emptySequence()
|
||||
else group[recallReminder.uin] ?: return@lambda732 emptySequence()
|
||||
|
||||
return@lambda732 recallReminder.recalledMsgList.asSequence().mapNotNull { pkg ->
|
||||
when {
|
||||
@ -522,8 +520,8 @@ internal object Transformers528 : Map<Long, Lambda528> by mapOf(
|
||||
}.forEach { (key, value) ->
|
||||
when (key) {
|
||||
"action_str" -> action = value
|
||||
"uin_str1" -> from = bot.getFriend(value.toLong())
|
||||
"uin_str2" -> target = bot.getFriend(value.toLong())
|
||||
"uin_str1" -> from = bot.getFriend(value.toLong()) ?: return@lambda528 emptySequence()
|
||||
"uin_str2" -> target = bot.getFriend(value.toLong()) ?: return@lambda528 emptySequence()
|
||||
"suffix_str" -> suffix = value
|
||||
}
|
||||
}
|
||||
@ -553,7 +551,7 @@ internal object Transformers528 : Map<Long, Lambda528> by mapOf(
|
||||
//好友输入状态
|
||||
0x115L to lambda528 { bot ->
|
||||
val body = vProtobuf.loadAs(Submsgtype0x115.SubMsgType0x115.MsgBody.serializer())
|
||||
val friend = bot.getFriendOrNull(body.fromUin)
|
||||
val friend = bot.getFriend(body.fromUin)
|
||||
val item = body.msgNotifyItem
|
||||
return@lambda528 if (friend != null && item != null) {
|
||||
sequenceOf(FriendInputStatusChangedEvent(friend, item.eventType == 1))
|
||||
@ -565,7 +563,7 @@ internal object Transformers528 : Map<Long, Lambda528> by mapOf(
|
||||
0x27L to lambda528 { bot ->
|
||||
fun ModFriendRemark.transform(bot: QQAndroidBot): Sequence<Packet> {
|
||||
return this.msgFrdRmk.asSequence().mapNotNull {
|
||||
val friend = bot.getFriendOrNull(it.fuin) ?: return@mapNotNull null
|
||||
val friend = bot.getFriend(it.fuin) ?: return@mapNotNull null
|
||||
val old: String
|
||||
friend.checkIsFriendImpl().friendInfo.checkIsInfoImpl()
|
||||
.also { info -> old = info.remark }
|
||||
@ -577,7 +575,7 @@ internal object Transformers528 : Map<Long, Lambda528> by mapOf(
|
||||
|
||||
fun DelFriend.transform(bot: QQAndroidBot): Sequence<Packet> {
|
||||
return this.uint64Uins.asSequence().mapNotNull {
|
||||
val friend = bot.getFriendOrNull(it) ?: return@mapNotNull null
|
||||
val friend = bot.getFriend(it) ?: return@mapNotNull null
|
||||
if (bot.friends.delegate.remove(friend)) {
|
||||
FriendDeleteEvent(friend)
|
||||
} else null
|
||||
@ -591,14 +589,14 @@ internal object Transformers528 : Map<Long, Lambda528> by mapOf(
|
||||
// 群名
|
||||
val new = info.value.encodeToString()
|
||||
|
||||
val group = bot.getGroupOrNull(this.groupCode) ?: return@mapNotNull null
|
||||
val group = bot.getGroup(this.groupCode) ?: return@mapNotNull null
|
||||
group.checkIsGroupImpl()
|
||||
val old = group.name
|
||||
|
||||
if (new == old) return@mapNotNull null
|
||||
|
||||
val operator = if (this.cmdUin == bot.id) null
|
||||
else group.getOrNull(this.cmdUin) ?: return@mapNotNull null
|
||||
else group[this.cmdUin] ?: return@mapNotNull null
|
||||
|
||||
group._name = new
|
||||
|
||||
@ -644,9 +642,9 @@ internal object Transformers528 : Map<Long, Lambda528> by mapOf(
|
||||
when (info.field) {
|
||||
1 -> { // name card
|
||||
val new = info.value
|
||||
val group = bot.getGroupOrNull(this.groupCode) ?: return@mapNotNull null
|
||||
val group = bot.getGroup(this.groupCode) ?: return@mapNotNull null
|
||||
group.checkIsGroupImpl()
|
||||
val member = group.getOrNull(this.uin) ?: return@mapNotNull null
|
||||
val member = group[this.uin] ?: return@mapNotNull null
|
||||
member.checkIsMemberImpl()
|
||||
|
||||
val old = member.nameCard
|
||||
@ -678,7 +676,7 @@ internal object Transformers528 : Map<Long, Lambda528> by mapOf(
|
||||
if (uin == bot.id) {
|
||||
return sequenceOf(BotAvatarChangedEvent(bot))
|
||||
}
|
||||
val friend = bot.getFriendOrNull(uin) ?: return emptySequence()
|
||||
val friend = bot.getFriend(uin) ?: return emptySequence()
|
||||
return sequenceOf(FriendAvatarChangedEvent(friend))
|
||||
}
|
||||
|
||||
@ -697,7 +695,7 @@ internal object Transformers528 : Map<Long, Lambda528> by mapOf(
|
||||
add(BotNickChangedEvent(bot, from, to))
|
||||
}
|
||||
} else {
|
||||
val friend = (bot.getFriendOrNull(uin) ?: return@forEach) as FriendImpl
|
||||
val friend = (bot.getFriend(uin) ?: return@forEach) as FriendImpl
|
||||
val info = friend.friendInfo
|
||||
val from = info.nick
|
||||
when (info) {
|
||||
|
Loading…
Reference in New Issue
Block a user