Commit cadbd7ff authored by Him188's avatar Him188

Deprecate `Bot.qq`, `Bot.get`, `Bot.contains`

parent 28c05302
......@@ -57,7 +57,14 @@ internal abstract class QQAndroidBotBase constructor(
)
internal var firstLoginSucceed: Boolean = false
override val uin: Long get() = client.uin
override val qqs: ContactList<QQ> = ContactList(LockFreeLinkedList())
@Deprecated(
"use friends instead",
level = DeprecationLevel.ERROR,
replaceWith = ReplaceWith("this.friends")
)
override val qqs: ContactList<QQ>
get() = friends
override val friends: ContactList<QQ> = ContactList(LockFreeLinkedList())
override val selfQQ: QQ by lazy {
QQ(object : FriendInfo {
......
......@@ -183,7 +183,7 @@ internal class QQAndroidBotNetworkHandler(bot: QQAndroidBot) : BotNetworkHandler
check(bot.isActive) { "bot is dead therefore network can't init" }
check(this@QQAndroidBotNetworkHandler.isActive) { "network is dead therefore can't init" }
bot.qqs.delegate.clear()
bot.friends.delegate.clear()
bot.groups.delegate.clear()
val friendListJob = launch {
......@@ -211,7 +211,14 @@ internal class QQAndroidBotNetworkHandler(bot: QQAndroidBot) : BotNetworkHandler
totalFriendCount = data.totalFriendCount
data.friendList.forEach {
// atomic add
bot.qqs.delegate.addLast(QQImpl(bot, bot.coroutineContext, it.friendUin, FriendInfoImpl(it))).also {
bot.friends.delegate.addLast(
QQImpl(
bot,
bot.coroutineContext,
it.friendUin,
FriendInfoImpl(it)
)
).also {
currentFriendCount++
}
}
......
......@@ -86,14 +86,28 @@ actual abstract class Bot actual constructor() : CoroutineScope, LowLevelBotAPIA
/**
* 机器人的好友列表. 它将与服务器同步更新
*/
@Deprecated(
"use friends instead",
level = DeprecationLevel.ERROR,
replaceWith = ReplaceWith("this.friends")
)
actual abstract val qqs: ContactList<QQ>
/**
* 机器人的好友列表. 它将与服务器同步更新
*/
actual abstract val friends: ContactList<QQ>
/**
* 获取一个好友或一个群.
* 在一些情况下这可能会造成歧义. 请考虑后使用.
*/
@Deprecated(
"use getFriend or getGroup instead",
level = DeprecationLevel.ERROR,
replaceWith = ReplaceWith("this.qqs.getOrNull(id) ?: this.groups.getOrNull(id) ?: throw NoSuchElementException(\"contact id \$id\")")
)
actual operator fun get(id: Long): Contact {
return this.qqs.getOrNull(id) ?: this.groups.getOrNull(id) ?: throw NoSuchElementException("contact id $id")
return this.friends.getOrNull(id) ?: this.groups.getOrNull(id) ?: throw NoSuchElementException("contact id $id")
}
/**
......@@ -101,7 +115,7 @@ actual abstract class Bot actual constructor() : CoroutineScope, LowLevelBotAPIA
* 在一些情况下这可能会造成歧义. 请考虑后使用.
*/
actual operator fun contains(id: Long): Boolean {
return this.qqs.contains(id) || this.groups.contains(id)
return this.friends.contains(id) || this.groups.contains(id)
}
/**
......@@ -109,7 +123,7 @@ actual abstract class Bot actual constructor() : CoroutineScope, LowLevelBotAPIA
*/
actual fun getFriend(id: Long): QQ {
if (id == uin) return selfQQ
return qqs.delegate.getOrNull(id)
return friends.delegate.getOrNull(id)
?: throw NoSuchElementException("No such friend $id for bot ${this.uin}")
}
......
......@@ -95,22 +95,39 @@ expect abstract class Bot() : CoroutineScope, LowLevelBotAPIAccessor {
// region contacts
/**
* [QQ.id] 与 [Bot.uin] 相同的 [QQ] 实例
*/
abstract val selfQQ: QQ
/**
* 机器人的好友列表. 它将与服务器同步更新
*/
@Deprecated(
"use friends instead",
level = DeprecationLevel.ERROR,
replaceWith = ReplaceWith("this.friends")
)
abstract val qqs: ContactList<QQ>
/**
* 机器人的好友列表. 它将与服务器同步更新
*/
abstract val friends: ContactList<QQ>
/**
* 获取一个好友或一个群.
* 在一些情况下这可能会造成歧义. 请考虑后使用.
*/
@Deprecated(
"use getFriend or getGroup instead",
level = DeprecationLevel.ERROR,
replaceWith = ReplaceWith("this.qqs.getOrNull(id) ?: this.groups.getOrNull(id) ?: throw NoSuchElementException(\"contact id \$id\")")
)
operator fun get(id: Long): Contact
/**
* 判断是否有这个 id 的好友或群.
* 在一些情况下这可能会造成歧义. 请考虑后使用.
*/
operator fun contains(id: Long): Boolean
......@@ -294,10 +311,10 @@ suspend inline fun Bot.closeAndJoin(cause: Throwable? = null) {
coroutineContext[Job]?.join()
}
inline fun Bot.containsFriend(id: Long): Boolean = this.qqs.contains(id)
inline fun Bot.containsFriend(id: Long): Boolean = this.friends.contains(id)
inline fun Bot.containsGroup(id: Long): Boolean = this.groups.contains(id)
inline fun Bot.getFriendOrNull(id: Long): QQ? = this.qqs.getOrNull(id)
inline fun Bot.getFriendOrNull(id: Long): QQ? = this.friends.getOrNull(id)
inline fun Bot.getGroupOrNull(id: Long): Group? = this.groups.getOrNull(id)
\ No newline at end of file
......@@ -189,7 +189,7 @@ abstract class BotImpl<N : BotNetworkHandler> constructor(
}
}
groups.delegate.clear()
qqs.delegate.clear()
friends.delegate.clear()
instances.removeIf { it.get()?.uin == this.uin }
}
}
......@@ -96,14 +96,28 @@ actual abstract class Bot actual constructor() : CoroutineScope, LowLevelBotAPIA
/**
* 机器人的好友列表. 它将与服务器同步更新
*/
@Deprecated(
"use friends instead",
level = DeprecationLevel.ERROR,
replaceWith = ReplaceWith("this.friends")
)
actual abstract val qqs: ContactList<QQ>
/**
* 机器人的好友列表. 它将与服务器同步更新
*/
actual abstract val friends: ContactList<QQ>
/**
* 获取一个好友或一个群.
* 在一些情况下这可能会造成歧义. 请考虑后使用.
*/
@Deprecated(
"use getFriend or getGroup instead",
level = DeprecationLevel.ERROR,
replaceWith = ReplaceWith("this.qqs.getOrNull(id) ?: this.groups.getOrNull(id) ?: throw NoSuchElementException(\"contact id \$id\")")
)
actual operator fun get(id: Long): Contact {
return this.qqs.getOrNull(id) ?: this.groups.getOrNull(id) ?: throw NoSuchElementException("contact id $id")
return this.friends.getOrNull(id) ?: this.groups.getOrNull(id) ?: throw NoSuchElementException("contact id $id")
}
/**
......@@ -111,7 +125,7 @@ actual abstract class Bot actual constructor() : CoroutineScope, LowLevelBotAPIA
* 在一些情况下这可能会造成歧义. 请考虑后使用.
*/
actual operator fun contains(id: Long): Boolean {
return this.qqs.contains(id) || this.groups.contains(id)
return this.friends.contains(id) || this.groups.contains(id)
}
/**
......@@ -119,7 +133,7 @@ actual abstract class Bot actual constructor() : CoroutineScope, LowLevelBotAPIA
*/
actual fun getFriend(id: Long): QQ {
if (id == uin) return selfQQ
return qqs.delegate.getOrNull(id)
return friends.delegate.getOrNull(id)
?: throw NoSuchElementException("No such friend $id for bot ${this.uin}")
}
......
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