mirror of
https://github.com/mamoe/mirai.git
synced 2025-03-07 17:50:11 +08:00
Convert sendMessage to inline extension
This commit is contained in:
parent
c2d89b611a
commit
6ea11c9ac3
mirai-api-http/src/main/kotlin/net.mamoe.mirai.api.http
mirai-core/src/commonMain/kotlin/net.mamoe.mirai
mirai-demos
mirai-demo-1/src/main/java/demo/subscribe
mirai-demo-android/src/main/kotlin/net/mamoe/mirai/demo
@ -18,6 +18,7 @@ import io.ktor.util.pipeline.PipelineContext
|
||||
import io.ktor.util.pipeline.PipelineInterceptor
|
||||
import net.mamoe.mirai.Bot
|
||||
import net.mamoe.mirai.addFriend
|
||||
import net.mamoe.mirai.contact.sendMessage
|
||||
import net.mamoe.mirai.getGroup
|
||||
import net.mamoe.mirai.getQQ
|
||||
import net.mamoe.mirai.utils.io.hexToBytes
|
||||
|
@ -15,6 +15,7 @@ import net.mamoe.mirai.network.protocol.tim.packet.login.LoginResult
|
||||
import net.mamoe.mirai.network.protocol.tim.packet.login.isSuccess
|
||||
import net.mamoe.mirai.utils.BotConfiguration
|
||||
import net.mamoe.mirai.utils.DefaultLogger
|
||||
import net.mamoe.mirai.utils.MiraiInternalAPI
|
||||
import net.mamoe.mirai.utils.MiraiLogger
|
||||
import net.mamoe.mirai.utils.internal.coerceAtLeastOrFail
|
||||
import net.mamoe.mirai.utils.io.logStacktrace
|
||||
@ -153,6 +154,7 @@ class Bot(val account: BotAccount, val logger: MiraiLogger, context: CoroutineCo
|
||||
inner class ContactSystem internal constructor() {
|
||||
val bot: Bot get() = this@Bot
|
||||
|
||||
@UseExperimental(MiraiInternalAPI::class)
|
||||
@Suppress("PropertyName")
|
||||
internal val _groups = MutableContactList<Group>()
|
||||
internal lateinit var groupsUpdater: Job
|
||||
@ -161,6 +163,7 @@ class Bot(val account: BotAccount, val logger: MiraiLogger, context: CoroutineCo
|
||||
val groups: ContactList<Group> = ContactList(_groups)
|
||||
|
||||
@Suppress("PropertyName")
|
||||
@UseExperimental(MiraiInternalAPI::class)
|
||||
internal val _qqs = MutableContactList<QQ>() //todo 实现群列表和好友列表获取
|
||||
internal lateinit var qqUpdaterJob: Job
|
||||
private val qqsLock = Mutex()
|
||||
@ -172,6 +175,7 @@ class Bot(val account: BotAccount, val logger: MiraiLogger, context: CoroutineCo
|
||||
*
|
||||
* 注: 这个方法是线程安全的
|
||||
*/
|
||||
@UseExperimental(MiraiInternalAPI::class)
|
||||
suspend fun getQQ(id: UInt): QQ =
|
||||
if (_qqs.containsKey(id)) _qqs[id]!!
|
||||
else qqsLock.withLock {
|
||||
@ -190,6 +194,7 @@ class Bot(val account: BotAccount, val logger: MiraiLogger, context: CoroutineCo
|
||||
*
|
||||
* 注: 这个方法是线程安全的
|
||||
*/
|
||||
@UseExperimental(MiraiInternalAPI::class)
|
||||
suspend fun getGroup(id: GroupId): Group = id.value.let {
|
||||
if (_groups.containsKey(it)) _groups[it]!!
|
||||
else groupsLock.withLock {
|
||||
@ -208,6 +213,7 @@ class Bot(val account: BotAccount, val logger: MiraiLogger, context: CoroutineCo
|
||||
suspend inline fun GroupId.group(): Group = getGroup(this)
|
||||
suspend inline fun GroupInternalId.group(): Group = getGroup(this)
|
||||
|
||||
@UseExperimental(MiraiInternalAPI::class)
|
||||
suspend fun close() {
|
||||
network.close()
|
||||
this.coroutineContext.cancelChildren()
|
||||
|
@ -8,6 +8,7 @@ import net.mamoe.mirai.message.MessageChain
|
||||
import net.mamoe.mirai.message.chain
|
||||
import net.mamoe.mirai.message.singleChain
|
||||
import net.mamoe.mirai.network.BotSession
|
||||
import net.mamoe.mirai.utils.MiraiInternalAPI
|
||||
import net.mamoe.mirai.withSession
|
||||
import kotlin.contracts.ExperimentalContracts
|
||||
import kotlin.contracts.InvocationKind
|
||||
@ -36,14 +37,12 @@ interface Contact {
|
||||
* 速度太快会被服务器屏蔽(无响应). 在测试中不延迟地发送 6 条消息就会被屏蔽之后的数据包 1 秒左右.
|
||||
*/
|
||||
suspend fun sendMessage(message: MessageChain)
|
||||
|
||||
|
||||
//这两个方法应写为扩展函数, 但为方便 import 还是写在这里
|
||||
suspend fun sendMessage(plain: String) = sendMessage(plain.singleChain())
|
||||
|
||||
suspend fun sendMessage(message: Message) = sendMessage(message.chain())
|
||||
}
|
||||
|
||||
suspend inline fun Contact.sendMessage(message: Message) = sendMessage(message.chain())
|
||||
|
||||
suspend inline fun Contact.sendMessage(plain: String) = sendMessage(plain.singleChain())
|
||||
|
||||
/**
|
||||
* 以 [BotSession] 作为接收器 (receiver) 并调用 [block], 返回 [block] 的返回值.
|
||||
* 这个方法将能帮助使用在 [BotSession] 中定义的一些扩展方法, 如 [BotSession.sendAndExpectAsync]
|
||||
@ -59,7 +58,8 @@ inline fun <R> Contact.withSession(block: BotSession.() -> R): R {
|
||||
/**
|
||||
* 只读联系人列表
|
||||
*/
|
||||
class ContactList<C : Contact> @PublishedApi internal constructor(internal val mutable: MutableContactList<C>) : Map<UInt, C> {
|
||||
@UseExperimental(MiraiInternalAPI::class)
|
||||
inline class ContactList<C : Contact>(internal val mutable: MutableContactList<C>) : Map<UInt, C> {
|
||||
/**
|
||||
* ID 列表的字符串表示.
|
||||
* 如:
|
||||
@ -87,13 +87,11 @@ class ContactList<C : Contact> @PublishedApi internal constructor(internal val m
|
||||
/**
|
||||
* 可修改联系人列表. 只会在内部使用.
|
||||
*/
|
||||
@PublishedApi
|
||||
internal class MutableContactList<C : Contact> : MutableMap<UInt, C> {
|
||||
@MiraiInternalAPI
|
||||
inline class MutableContactList<C : Contact>(private val delegate: MutableMap<UInt, C> = linkedMapOf()) : MutableMap<UInt, C> {
|
||||
override fun toString(): String = asIterable().joinToString(separator = ", ", prefix = "ContactList(", postfix = ")") { it.value.toString() }
|
||||
|
||||
|
||||
// TODO: 2019/12/2 应该使用属性代理, 但属性代理会导致 UInt 内联错误. 等待 kotlin 修复后替换
|
||||
private val delegate = linkedMapOf<UInt, C>()
|
||||
|
||||
override val size: Int get() = delegate.size
|
||||
override fun containsKey(key: UInt): Boolean = delegate.containsKey(key)
|
||||
|
@ -3,6 +3,7 @@
|
||||
package net.mamoe.mirai.message
|
||||
|
||||
import net.mamoe.mirai.contact.Contact
|
||||
import net.mamoe.mirai.contact.sendMessage
|
||||
import net.mamoe.mirai.network.protocol.tim.packet.action.FriendImagePacket
|
||||
import net.mamoe.mirai.utils.ExternalImage
|
||||
|
||||
|
@ -3,6 +3,7 @@
|
||||
package net.mamoe.mirai.message
|
||||
|
||||
import net.mamoe.mirai.contact.Contact
|
||||
import net.mamoe.mirai.contact.sendMessage
|
||||
|
||||
/**
|
||||
* 可发送的或从服务器接收的消息.
|
||||
|
@ -10,6 +10,7 @@ import net.mamoe.mirai.message.internal.toPacket
|
||||
import net.mamoe.mirai.network.BotNetworkHandler
|
||||
import net.mamoe.mirai.network.protocol.tim.TIMProtocol
|
||||
import net.mamoe.mirai.network.protocol.tim.packet.*
|
||||
import net.mamoe.mirai.utils.MiraiInternalAPI
|
||||
import net.mamoe.mirai.utils.io.*
|
||||
import net.mamoe.mirai.withSession
|
||||
|
||||
@ -44,6 +45,7 @@ data class RawGroupInfo(
|
||||
*/
|
||||
val members: Map<UInt, MemberPermission>
|
||||
) : GroupPacket.GroupPacketResponse {
|
||||
@UseExperimental(MiraiInternalAPI::class)
|
||||
suspend inline fun parseBy(group: Group): GroupInfo = group.bot.withSession {
|
||||
return GroupInfo(
|
||||
group,
|
||||
|
@ -8,6 +8,7 @@ import net.mamoe.mirai.Bot
|
||||
import net.mamoe.mirai.BotAccount
|
||||
import net.mamoe.mirai.alsoLogin
|
||||
import net.mamoe.mirai.contact.QQ
|
||||
import net.mamoe.mirai.contact.sendMessage
|
||||
import net.mamoe.mirai.event.*
|
||||
import net.mamoe.mirai.message.*
|
||||
import net.mamoe.mirai.network.protocol.tim.packet.action.uploadImage
|
||||
|
@ -13,6 +13,7 @@ import kotlinx.coroutines.launch
|
||||
import kotlinx.io.core.readBytes
|
||||
import net.mamoe.mirai.Bot
|
||||
import net.mamoe.mirai.contact.QQ
|
||||
import net.mamoe.mirai.contact.sendMessage
|
||||
import net.mamoe.mirai.event.subscribeMessages
|
||||
import net.mamoe.mirai.login
|
||||
import net.mamoe.mirai.message.Image
|
||||
|
Loading…
Reference in New Issue
Block a user