Skip to content

Commit ce56294

Browse files
committed
mirai: update to 2.0-M1
1 parent 8d3fa8d commit ce56294

File tree

12 files changed

+87
-77
lines changed

12 files changed

+87
-77
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ Mirai Native 支持所有`stdcall`方式导出方法的`DLL`与 [mirai](https://
1717

1818
* `MCL` 支持自动更新插件,支持设置插件更新频道等功能
1919

20-
`.\mcl --update-package org.itxtech:mirai-native --set-channel stable --set-type plugins`
20+
`.\mcl --update-package org.itxtech:mirai-native --channel stable --type plugin`
2121

2222
## `Mirai Native Tray`
2323

build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ plugins {
44
id("com.jfrog.bintray") version "1.8.5"
55
`maven-publish`
66

7-
id("net.mamoe.mirai-console") version "1.0.0"
7+
id("net.mamoe.mirai-console") version "2.0-M1"
88
}
99

1010
group = "org.itxtech"

settings.gradle

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
pluginManagement {
22
repositories {
3+
jcenter()
34
maven { url 'https://dl.bintray.com/kotlin/kotlin-eap' }
4-
55
mavenCentral()
6-
76
maven { url 'https://plugins.gradle.org/m2/' }
87
}
98
}

src/main/kotlin/org/itxtech/mirainative/MiraiNative.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ object MiraiNative : KotlinPlugin(
6868
newFixedThreadPoolContext(Runtime.getRuntime().availableProcessors() * 2, "MiraiNative Events")
6969

7070
var botOnline = false
71-
val bot: Bot by lazy { Bot.botInstances.first() }
71+
val bot: Bot by lazy { Bot.instances.first() }
7272

7373
private fun ByteArray.checksum() = BigInteger(1, MessageDigest.getInstance("MD5").digest(this))
7474

@@ -168,7 +168,7 @@ object MiraiNative : KotlinPlugin(
168168
PluginManager.registerCommands()
169169
EventManager.registerEvents()
170170

171-
if (Bot.botInstances.isNotEmpty() && Bot.botInstances.first().isOnline) {
171+
if (Bot.instances.isNotEmpty() && Bot.instances.first().isOnline) {
172172
setBotOnline()
173173
}
174174
}

src/main/kotlin/org/itxtech/mirainative/bridge/ForwardMessageDecoder.kt

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,16 @@ import kotlinx.coroutines.runBlocking
3030
import net.mamoe.mirai.contact.Contact
3131
import net.mamoe.mirai.contact.Group
3232
import net.mamoe.mirai.contact.nameCardOrNick
33-
import net.mamoe.mirai.getFriendOrNull
3433
import net.mamoe.mirai.message.data.ForwardMessage
3534
import net.mamoe.mirai.message.data.ForwardMessageBuilder
35+
import net.mamoe.mirai.message.data.RawForwardMessage
3636
import net.mamoe.mirai.message.data.buildForwardMessage
37+
import net.mamoe.mirai.utils.MiraiExperimentalApi
3738
import org.itxtech.mirainative.MiraiNative
3839
import org.itxtech.mirainative.bridge.MiraiBridge.readString
3940
import org.itxtech.mirainative.message.ChainCodeConverter
4041

41-
@InternalAPI
42+
@OptIn(InternalAPI::class, MiraiExperimentalApi::class)
4243
object ForwardMessageDecoder {
4344
/**
4445
* 结构
@@ -75,23 +76,22 @@ object ForwardMessageDecoder {
7576
for (i in 1..pre) {
7677
seq.add(pk.readString())
7778
}
78-
return ForwardMessage.DisplayStrategy(
79-
generateTitle = {
80-
if (title == "") ForwardMessage.DisplayStrategy.generateTitle(it) else title
81-
},
82-
generateBrief = {
83-
if (brief == "") ForwardMessage.DisplayStrategy.generateBrief(it) else brief
84-
},
85-
generateSource = {
86-
if (source == "") ForwardMessage.DisplayStrategy.generateSource(it) else source
87-
},
88-
generateSummary = {
89-
if (summary == "") ForwardMessage.DisplayStrategy.generateSummary(it) else summary
90-
},
91-
generatePreview = {
92-
if (pre == 0.toShort()) ForwardMessage.DisplayStrategy.generatePreview(it) else seq.asSequence()
93-
}
94-
)
79+
return object : ForwardMessage.DisplayStrategy {
80+
override fun generateTitle(forward: RawForwardMessage) =
81+
if (title == "") super.generateTitle(forward) else title
82+
83+
override fun generateBrief(forward: RawForwardMessage) =
84+
if (brief == "") super.generateBrief(forward) else brief
85+
86+
override fun generateSource(forward: RawForwardMessage) =
87+
if (source == "") super.generateSource(forward) else source
88+
89+
override fun generateSummary(forward: RawForwardMessage) =
90+
if (summary == "") super.generateSummary(forward) else summary
91+
92+
override fun generatePreview(forward: RawForwardMessage): List<String> =
93+
if (pre == 0.toShort()) super.generatePreview(forward) else seq
94+
}
9595
}
9696
}
9797

@@ -117,12 +117,12 @@ data class MessageEntry(val sender: Long, val name: String, val time: Int, val m
117117
return name
118118
}
119119
if (contact is Group && contact.contains(sender)) {
120-
return contact[sender].nameCardOrNick
120+
return contact[sender]!!.nameCardOrNick
121121
}
122122
if (sender == MiraiNative.bot.id) {
123123
return MiraiNative.bot.nick
124124
}
125-
val friend = MiraiNative.bot.getFriendOrNull(sender)
125+
val friend = MiraiNative.bot.getFriend(sender)
126126
if (friend != null) {
127127
return friend.nameCardOrNick
128128
}

src/main/kotlin/org/itxtech/mirainative/bridge/MiraiBridge.kt

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,10 @@ import net.mamoe.mirai.contact.MemberPermission
3939
import net.mamoe.mirai.event.events.BotInvitedJoinGroupRequestEvent
4040
import net.mamoe.mirai.event.events.MemberJoinRequestEvent
4141
import net.mamoe.mirai.event.events.NewFriendRequestEvent
42-
import net.mamoe.mirai.getGroupOrNull
4342
import net.mamoe.mirai.message.data.Image
44-
import net.mamoe.mirai.message.data.isAboutGroup
45-
import net.mamoe.mirai.message.data.queryUrl
46-
import net.mamoe.mirai.message.data.quote
43+
import net.mamoe.mirai.message.data.Image.Key.queryUrl
44+
import net.mamoe.mirai.message.data.MessageSource.Key.isAboutGroup
45+
import net.mamoe.mirai.message.data.MessageSource.Key.quote
4746
import org.itxtech.mirainative.Bridge
4847
import org.itxtech.mirainative.MiraiNative
4948
import org.itxtech.mirainative.fromNative
@@ -116,15 +115,15 @@ object MiraiBridge {
116115
if (src.fromId != MiraiNative.bot.id) {
117116
val f = MiraiNative.bot.getFriend(src.fromId)
118117
val chain = src.quote() + ChainCodeConverter.codeToChain(message, f)
119-
f.sendMessage(chain).apply {
118+
f?.sendMessage(chain)?.apply {
120119
CacheManager.cacheMessage(source, internalId, chain)
121120
}
122121
}
123122
} else {
124123
val group = MiraiNative.bot.getGroup(src.targetId)
125124
if (src.fromId != MiraiNative.bot.id) {
126125
val chain = src.quote() + ChainCodeConverter.codeToChain(message, group)
127-
group.sendMessage(chain).apply {
126+
group?.sendMessage(chain)?.apply {
128127
CacheManager.cacheMessage(source, internalId, chain)
129128
}
130129
}
@@ -152,7 +151,7 @@ object MiraiBridge {
152151
MiraiNative.launch {
153152
val contact = MiraiNative.bot.getGroup(id)
154153
val chain = ChainCodeConverter.codeToChain(message, contact)
155-
contact.sendMessage(chain).apply {
154+
contact?.sendMessage(chain)?.apply {
156155
CacheManager.cacheMessage(source, internalId, chain)
157156
}
158157
}
@@ -162,42 +161,42 @@ object MiraiBridge {
162161
fun setGroupBan(pluginId: Int, groupId: Long, memberId: Long, duration: Int) = call("CQ_setGroupBan", pluginId, 0) {
163162
MiraiNative.launch {
164163
if (duration == 0) {
165-
MiraiNative.bot.getGroup(groupId)[memberId].unmute()
164+
MiraiNative.bot.getGroup(groupId)?.get(memberId)?.unmute()
166165
} else {
167-
MiraiNative.bot.getGroup(groupId)[memberId].mute(duration)
166+
MiraiNative.bot.getGroup(groupId)?.get(memberId)?.mute(duration)
168167
}
169168
}
170169
return 0
171170
}
172171

173172
fun setGroupCard(pluginId: Int, groupId: Long, memberId: Long, card: String) =
174173
call("CQ_setGroupCard", pluginId, 0) {
175-
MiraiNative.bot.getGroup(groupId)[memberId].nameCard = card
174+
MiraiNative.bot.getGroup(groupId)?.get(memberId)?.nameCard = card
176175
return 0
177176
}
178177

179178
fun setGroupKick(pluginId: Int, groupId: Long, memberId: Long) = call("CQ_setGroupKick", pluginId, 0) {
180179
MiraiNative.launch {
181-
MiraiNative.bot.getGroup(groupId)[memberId].kick()
180+
MiraiNative.bot.getGroup(groupId)?.get(memberId)?.kick()
182181
}
183182
return 0
184183
}
185184

186185
fun setGroupLeave(pluginId: Int, groupId: Long) = call("CQ_setGroupLeave", pluginId, 0) {
187186
MiraiNative.launch {
188-
MiraiNative.bot.getGroup(groupId).quit()
187+
MiraiNative.bot.getGroup(groupId)?.quit()
189188
}
190189
return 0
191190
}
192191

193192
fun setGroupSpecialTitle(pluginId: Int, group: Long, member: Long, title: String, duration: Long) =
194193
call("CQ_setGroupSpecialTitle", pluginId, 0) {
195-
MiraiNative.bot.getGroup(group)[member].specialTitle = title
194+
MiraiNative.bot.getGroup(group)?.get(member)?.specialTitle = title
196195
return 0
197196
}
198197

199198
fun setGroupWholeBan(pluginId: Int, group: Long, enable: Boolean) = call("CQ_setGroupWholeBan", pluginId, 0) {
200-
MiraiNative.bot.getGroup(group).settings.isMuteAll = enable
199+
MiraiNative.bot.getGroup(group)?.settings?.isMuteAll = enable
201200
return 0
202201
}
203202

@@ -227,7 +226,7 @@ object MiraiBridge {
227226
}
228227

229228
fun getGroupInfo(pluginId: Int, id: Long) = call("CQ_getGroupInfo", pluginId, "") {
230-
val info = MiraiNative.bot.getGroupOrNull(id)
229+
val info = MiraiNative.bot.getGroup(id)
231230
return if (info != null) {
232231
buildPacket {
233232
writeLong(id)
@@ -254,14 +253,14 @@ object MiraiBridge {
254253

255254
fun getGroupMemberInfo(pluginId: Int, groupId: Long, memberId: Long) =
256255
call("CQ_getGroupMemberInfoV2", pluginId, "") {
257-
val member = MiraiNative.bot.getGroupOrNull(groupId)?.getOrNull(memberId) ?: return ""
256+
val member = MiraiNative.bot.getGroup(groupId)?.get(memberId) ?: return ""
258257
return buildPacket {
259258
writeMember(member)
260259
}.encodeBase64()
261260
}
262261

263262
fun getGroupMemberList(pluginId: Int, groupId: Long) = call("CQ_getGroupMemberList", pluginId, "") {
264-
val group = MiraiNative.bot.getGroupOrNull(groupId) ?: return ""
263+
val group = MiraiNative.bot.getGroup(groupId) ?: return ""
265264
return buildPacket {
266265
writeInt(group.members.size)
267266
group.members.forEach {
@@ -383,7 +382,7 @@ object MiraiBridge {
383382
val contact = if (type == 0) MiraiNative.bot.getFriend(id) else MiraiNative.bot.getGroup(id)
384383
val internalId = CacheManager.nextId()
385384
MiraiNative.launch {
386-
contact.sendMessage(ForwardMessageDecoder.decode(contact, strategy, msg))
385+
contact?.sendMessage(ForwardMessageDecoder.decode(contact, strategy, msg))
387386
}
388387
return internalId
389388
}

src/main/kotlin/org/itxtech/mirainative/manager/CacheManager.kt

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,12 @@ import kotlinx.coroutines.launch
2929
import net.mamoe.mirai.contact.Member
3030
import net.mamoe.mirai.contact.User
3131
import net.mamoe.mirai.event.events.BotEvent
32-
import net.mamoe.mirai.getFriendOrNull
33-
import net.mamoe.mirai.message.TempMessageEvent
34-
import net.mamoe.mirai.message.data.*
32+
import net.mamoe.mirai.event.events.TempMessageEvent
33+
import net.mamoe.mirai.message.data.MessageChain
34+
import net.mamoe.mirai.message.data.MessageSource
35+
import net.mamoe.mirai.message.data.MessageSource.Key.recall
36+
import net.mamoe.mirai.message.data.Voice
37+
import net.mamoe.mirai.message.data.source
3538
import org.itxtech.mirainative.MiraiNative
3639

3740
object CacheManager {
@@ -76,10 +79,10 @@ object CacheManager {
7679
fun getRecord(name: String) = records[name.replace(".mnrec", "")]
7780

7881
fun findUser(id: Long): User? {
79-
val member = MiraiNative.bot.getFriendOrNull(id) ?: senders[id]
82+
val member = MiraiNative.bot.getFriend(id) ?: senders[id]
8083
if (member == null) {
8184
MiraiNative.bot.groups.forEach {
82-
if (it.getOrNull(id) != null) {
85+
if (it[id] != null) {
8386
return it[id]
8487
}
8588
}

src/main/kotlin/org/itxtech/mirainative/manager/EventManager.kt

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,18 +27,16 @@ package org.itxtech.mirainative.manager
2727
import net.mamoe.mirai.contact.MemberPermission
2828
import net.mamoe.mirai.event.events.*
2929
import net.mamoe.mirai.event.subscribeAlways
30-
import net.mamoe.mirai.message.FriendMessageEvent
31-
import net.mamoe.mirai.message.GroupMessageEvent
32-
import net.mamoe.mirai.message.TempMessageEvent
3330
import net.mamoe.mirai.message.data.source
34-
import net.mamoe.mirai.utils.currentTimeSeconds
31+
import net.mamoe.mirai.utils.MiraiExperimentalApi
3532
import org.itxtech.mirainative.Bridge
3633
import org.itxtech.mirainative.MiraiNative
3734
import org.itxtech.mirainative.bridge.NativeBridge
3835
import org.itxtech.mirainative.message.ChainCodeConverter
3936
import org.itxtech.mirainative.message.ChainCodeConverter.escape
4037

4138
object EventManager {
39+
@OptIn(MiraiExperimentalApi::class)
4240
fun registerEvents() {
4341
with(MiraiNative) {
4442
subscribeAlways<BotOnlineEvent> {
@@ -257,5 +255,5 @@ object EventManager {
257255
}
258256
}
259257

260-
fun getTimestamp() = currentTimeSeconds.toInt()
258+
fun getTimestamp() = System.currentTimeMillis().toInt()
261259
}

src/main/kotlin/org/itxtech/mirainative/message/ChainCodeConverter.kt

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,8 @@ import kotlinx.coroutines.withContext
2929
import net.mamoe.mirai.contact.Contact
3030
import net.mamoe.mirai.contact.Group
3131
import net.mamoe.mirai.message.data.*
32-
import net.mamoe.mirai.message.uploadImage
32+
import net.mamoe.mirai.message.data.PokeMessage.Key.ChuoYiChuo
33+
import net.mamoe.mirai.utils.MiraiExperimentalApi
3334
import net.mamoe.mirai.utils.toExternalImage
3435
import net.mamoe.mirai.utils.upload
3536
import org.itxtech.mirainative.MiraiNative
@@ -63,6 +64,7 @@ object ChainCodeConverter {
6364
}
6465
}
6566

67+
@OptIn(MiraiExperimentalApi::class)
6668
private suspend fun String.toMessageInternal(contact: Contact?): Message {
6769
if (startsWith("[CQ:") && endsWith("]")) {
6870
val parts = substring(4, length - 1).split(delimiters = arrayOf(","), limit = 2)
@@ -80,7 +82,7 @@ object ChainCodeConverter {
8082
MiraiNative.logger.debug("不能在私聊中发送 At。")
8183
MSG_EMPTY
8284
} else {
83-
val member = contact.getOrNull(args["qq"]!!.toLong())
85+
val member = contact.get(args["qq"]!!.toLong())
8486
if (member == null) {
8587
MiraiNative.logger.debug("无法找到群员:${args["qq"]}")
8688
MSG_EMPTY
@@ -104,7 +106,7 @@ object ChainCodeConverter {
104106
} else {
105107
val file = MiraiNative.getDataFile("image", args["file"]!!)
106108
if (file != null) {
107-
image = contact!!.uploadImage(file)
109+
image = contact!!.uploadImage(file.toExternalImage())
108110
}
109111
}
110112
} else if (args.containsKey("url")) {
@@ -149,27 +151,27 @@ object ChainCodeConverter {
149151
}
150152
}
151153
"shake" -> {
152-
return PokeMessage.Poke
154+
return ChuoYiChuo
153155
}
154156
"poke" -> {
155157
PokeMessage.values.forEach {
156-
if (it.type == args["type"]!!.toInt() && it.id == args["id"]!!.toInt()) {
158+
if (it.pokeType == args["type"]!!.toInt() && it.id == args["id"]!!.toInt()) {
157159
return it
158160
}
159161
}
160162
return MSG_EMPTY
161163
}
162164
"xml" -> {
163-
return XmlMessage(args["data"]!!)
165+
return xmlMessage(args["data"]!!)
164166
}
165167
"json" -> {
166-
return JsonMessage(args["data"]!!)
168+
return jsonMessage(args["data"]!!)
167169
}
168170
"app" -> {
169171
return LightApp(args["data"]!!)
170172
}
171173
"rich" -> {
172-
return ServiceMessage(args["id"]!!.toInt(), args["data"]!!)
174+
return SimpleServiceMessage(args["id"]!!.toInt(), args["data"]!!)
173175
}
174176
"record" -> {
175177
var rec: Voice? = null
@@ -221,7 +223,7 @@ object ChainCodeConverter {
221223
}
222224
}
223225
is Voice -> "[CQ:record,file=${it.fileName}.mnrec]"
224-
is PokeMessage -> "[CQ:poke,id=${it.id},type=${it.type},name=${it.name}]"
226+
is PokeMessage -> "[CQ:poke,id=${it.id},type=${it.pokeType},name=${it.name}]"
225227
is FlashImage -> "[CQ:image,file=${it.image.imageId}.mning,type=flash]"
226228
else -> ""//error("不支持的消息类型:${it::class.simpleName}")
227229
}

0 commit comments

Comments
 (0)