Skip to content

Commit 3af4b6c

Browse files
committed
Merge branch 'main' into seal-on-main
# Conflicts: # acidify-milky/src/commonMain/kotlin/org/ntqqrev/acidify/milky/event/WebSocket.kt # yogurt/src/commonMain/kotlin/org/ntqqrev/yogurt/scripting/Configure.kt
2 parents f7a101a + 70412a6 commit 3af4b6c

9 files changed

Lines changed: 27 additions & 35 deletions

File tree

acidify-core/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ plugins {
1515
}
1616

1717
group = "org.ntqqrev"
18-
version = "1.6.0"
18+
version = "1.6.1"
1919

2020
kotlin {
2121
js(IR) {

acidify-core/src/commonMain/kotlin/org/ntqqrev/acidify/message/BotIncomingSegment.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,12 @@ sealed class BotIncomingSegment {
2020
/**
2121
* 提及(At)消息段
2222
* @property uin 被提及的用户的 QQ 号,为 `null` 表示提及了所有人(`@全体成员`)
23+
* @property uid 被提及的用户的 UID,为 `null` 表示提及了所有人(`@全体成员`)
2324
* @property name 被提及的用户的名称,视情况有可能是昵称 / 备注 / 群名片 / `@全体成员`
2425
*/
2526
data class Mention internal constructor(
2627
val uin: Long? = null,
28+
val uid: String? = null,
2729
val name: String,
2830
) : BotIncomingSegment() {
2931
override fun toString(): String = name // already prefixed with '@'

acidify-core/src/commonMain/kotlin/org/ntqqrev/acidify/message/internal/IncomingSegmentFactory.kt

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -66,10 +66,21 @@ internal interface IncomingSegmentFactory<T : BotIncomingSegment> {
6666
?: return null
6767
ctx.consume()
6868
val attr = at.pbReserve.pbDecode<TextResvAttr>()
69-
return BotIncomingSegment.Mention(
70-
uin = attr.atMemberUin,
71-
name = at.textMsg
72-
)
69+
return when (attr.atType) {
70+
1 -> BotIncomingSegment.Mention( // Mention all
71+
uin = null,
72+
uid = null,
73+
name = at.textMsg
74+
)
75+
76+
2 -> BotIncomingSegment.Mention( // specific user
77+
uin = attr.atMemberUin,
78+
uid = attr.atMemberUid,
79+
name = at.textMsg
80+
)
81+
82+
else -> null
83+
}
7384
}
7485
}
7586

acidify-milky/src/commonMain/kotlin/org/ntqqrev/acidify/milky/api/HttpRoutes.kt

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
11
package org.ntqqrev.acidify.milky.api
22

33
import io.ktor.server.plugins.*
4-
import io.ktor.server.plugins.di.*
54
import io.ktor.server.request.*
65
import io.ktor.server.response.*
76
import io.ktor.server.routing.*
87
import kotlinx.serialization.json.JsonElement
98
import kotlinx.serialization.json.decodeFromJsonElement
109
import kotlinx.serialization.json.encodeToJsonElement
11-
import org.ntqqrev.acidify.AbstractBot
1210
import org.ntqqrev.acidify.exception.OidbException
1311
import org.ntqqrev.acidify.exception.ServiceException
1412
import org.ntqqrev.acidify.milky.MediaSourceScope
@@ -32,8 +30,7 @@ inline fun <reified T : Any, reified R : Any> ApiEndpoint<T, R>.define(
3230

3331
context(ctx: MilkyContext)
3432
private fun <T : Any, R : Any> Route.serve(handler: MilkyApiHandler<T, R>) = post(handler.path) {
35-
val bot = application.dependencies.resolve<AbstractBot>()
36-
val logger = bot.createLogger("HttpModule")
33+
val logger = ctx.bot.createLogger("HttpModule")
3734
try {
3835
val rawPayload = call.receive<JsonElement>()
3936
call.respond(

acidify-milky/src/commonMain/kotlin/org/ntqqrev/acidify/milky/event/SSE.kt

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,14 @@
11
package org.ntqqrev.acidify.milky.event
22

3-
import io.ktor.server.plugins.di.*
43
import io.ktor.server.routing.*
54
import io.ktor.server.sse.*
65
import kotlinx.coroutines.launch
7-
import org.ntqqrev.acidify.AbstractBot
86
import org.ntqqrev.acidify.milky.MilkyContext
97
import org.ntqqrev.milky.milkyJsonModule
108

119
context(ctx: MilkyContext)
1210
fun Route.eventSse() = sse {
13-
val bot = application.dependencies.resolve<AbstractBot>()
14-
val logger = bot.createLogger("SseModule")
11+
val logger = ctx.bot.createLogger("SseModule")
1512
logger.i { "${call.request.local.remoteAddress} 通过 SSE 连接" }
1613
launch {
1714
ctx.eventFlow.collect {

acidify-milky/src/commonMain/kotlin/org/ntqqrev/acidify/milky/event/WebSocket.kt

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,15 @@
11
package org.ntqqrev.acidify.milky.event
22

3-
import io.ktor.server.plugins.di.*
43
import io.ktor.server.routing.*
5-
import io.ktor.server.routing.application
6-
import io.ktor.server.websocket.sendSerialized
4+
import io.ktor.server.websocket.*
75
import io.ktor.websocket.*
86
import kotlinx.coroutines.launch
9-
import org.ntqqrev.acidify.AbstractBot
107
import org.ntqqrev.acidify.milky.MilkyContext
118
import org.ntqqrev.acidify.milky.internal.webSocketPolyfill
129

1310
context(ctx: MilkyContext)
1411
fun Route.eventWebSocket() = webSocketPolyfill {
15-
val bot = application.dependencies.resolve<AbstractBot>()
16-
val logger = bot.createLogger("WebSocketModule")
12+
val logger = ctx.bot.createLogger("WebSocketModule")
1713
logger.i { "${call.request.local.remoteAddress} 通过 WebSocket 连接" }
1814
launch {
1915
ctx.eventFlow.collect(::sendSerialized)

acidify-milky/src/commonMain/kotlin/org/ntqqrev/acidify/milky/event/Webhook.kt

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,7 @@ import io.ktor.client.request.*
66
import io.ktor.http.*
77
import io.ktor.serialization.kotlinx.json.*
88
import io.ktor.server.application.*
9-
import io.ktor.server.plugins.di.*
109
import kotlinx.coroutines.launch
11-
import org.ntqqrev.acidify.AbstractBot
1210
import org.ntqqrev.acidify.milky.MilkyContext
1311
import org.ntqqrev.milky.milkyJsonModule
1412

@@ -21,8 +19,7 @@ val webhookClient = HttpClient {
2119
context(ctx: MilkyContext)
2220
fun Application.eventWebhook() = monitor.subscribe(ApplicationStarted) {
2321
this.launch {
24-
val bot = dependencies.resolve<AbstractBot>()
25-
val logger = bot.createLogger("WebhookModule")
22+
val logger = ctx.bot.createLogger("WebhookModule")
2623
ctx.eventFlow.collect {
2724
ctx.webhookEndpoints.forEach { webhook ->
2825
launch {

acidify-milky/src/commonMain/kotlin/org/ntqqrev/acidify/milky/transform/EventTransform.kt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,12 @@
11
package org.ntqqrev.acidify.milky.transform
22

3-
import io.ktor.server.plugins.di.*
4-
import org.ntqqrev.acidify.AbstractBot
53
import org.ntqqrev.acidify.event.*
64
import org.ntqqrev.acidify.message.MessageScene
75
import org.ntqqrev.acidify.milky.MilkyContext
86
import org.ntqqrev.milky.Event
97
import kotlin.time.Clock
108

119
suspend fun MilkyContext.transformAcidifyEvent(event: AcidifyEvent): Event? {
12-
val bot = application.dependencies.resolve<AbstractBot>()
1310
return when (event) {
1411
is BotOfflineEvent -> Event.BotOffline(
1512
time = Clock.System.now().epochSeconds,

acidify-milky/src/commonMain/kotlin/org/ntqqrev/acidify/milky/transform/MessageTransform.kt

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,8 @@ package org.ntqqrev.acidify.milky.transform
33
import io.ktor.server.plugins.di.*
44
import kotlinx.coroutines.async
55
import kotlinx.coroutines.awaitAll
6-
import org.ntqqrev.acidify.AbstractBot
6+
import org.ntqqrev.acidify.*
77
import org.ntqqrev.acidify.common.MediaSource.Companion.toMediaSource
8-
import org.ntqqrev.acidify.getDownloadUrl
9-
import org.ntqqrev.acidify.getFriend
10-
import org.ntqqrev.acidify.getGroup
118
import org.ntqqrev.acidify.message.*
129
import org.ntqqrev.acidify.milky.ImageInfo
1310
import org.ntqqrev.acidify.milky.MediaSourceScope
@@ -17,7 +14,6 @@ import org.ntqqrev.milky.*
1714
import kotlin.time.Clock
1815

1916
suspend fun MilkyContext.transformIncomingMessage(msg: BotIncomingMessage): IncomingMessage? {
20-
val bot = application.dependencies.resolve<AbstractBot>()
2117
return when (msg.scene) {
2218
MessageScene.FRIEND -> {
2319
val friend = bot.getFriend(msg.peerUin) ?: return null
@@ -66,7 +62,6 @@ suspend fun MilkyContext.transformForwardedMessage(msg: BotForwardedMessage): In
6662
}
6763

6864
suspend fun MilkyContext.transformIncomingSegment(segment: BotIncomingSegment): IncomingSegment {
69-
val bot = application.dependencies.resolve<AbstractBot>()
7065
return when (segment) {
7166
is BotIncomingSegment.Text -> IncomingSegment.Text(
7267
data = IncomingSegment.Text.Data(
@@ -77,7 +72,9 @@ suspend fun MilkyContext.transformIncomingSegment(segment: BotIncomingSegment):
7772
is BotIncomingSegment.Mention -> if (segment.uin != null) {
7873
IncomingSegment.Mention(
7974
data = IncomingSegment.Mention.Data(
80-
userId = segment.uin!!,
75+
userId = if (segment.uin == 0L) {
76+
bot.getUinByUid(segment.uid!!)
77+
} else segment.uin!!,
8178
name = segment.name,
8279
)
8380
)
@@ -184,7 +181,6 @@ suspend fun MilkyContext.transformOutgoingSegment(
184181
peerUin: Long,
185182
segment: OutgoingSegment,
186183
): BotOutgoingSegment {
187-
val bot = application.dependencies.resolve<AbstractBot>()
188184
val logger = bot.createLogger("MessageTransform")
189185
return when (segment) {
190186
is OutgoingSegment.Text -> BotOutgoingSegment.Text(
@@ -323,7 +319,6 @@ suspend fun MilkyContext.transformEssenceMessage(msg: BotEssenceMessage): GroupE
323319

324320
context(scope: MediaSourceScope)
325321
suspend fun MilkyContext.transformEssenceSegment(segment: BotEssenceSegment): IncomingSegment {
326-
val bot = application.dependencies.resolve<AbstractBot>()
327322
val logger = bot.createLogger("MessageTransform")
328323
return when (segment) {
329324
is BotEssenceSegment.Text -> IncomingSegment.Text(

0 commit comments

Comments
 (0)