Skip to content

Commit e1bc51d

Browse files
committed
build: mirai-skia-plugin 1.0.0
1 parent cb58f55 commit e1bc51d

File tree

4 files changed

+70
-57
lines changed

4 files changed

+70
-57
lines changed

build.gradle.kts

+19-7
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ plugins {
77
}
88

99
group = "xyz.cssxsh.mirai"
10-
version = "1.0.0-dev"
10+
version = "1.0.0"
1111

1212
repositories {
1313
mavenLocal()
@@ -24,26 +24,38 @@ mavenCentralPublish {
2424
}
2525

2626
dependencies {
27-
api("org.jetbrains.skiko:skiko-awt:0.7.9") {
27+
api("org.jetbrains.skiko:skiko-awt:0.7.13") {
2828
exclude(group = "org.jetbrains.kotlin")
2929
exclude(group = "org.jetbrains.kotlinx")
3030
}
3131
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-swing:1.6.0") {
3232
exclude(group = "org.jetbrains.kotlin")
3333
exclude(group = "org.jetbrains.kotlinx", module = "kotlinx-coroutines-core")
3434
}
35-
api("org.jetbrains.skiko:skiko-awt-runtime-linux-arm64:0.7.9")
36-
api("org.jetbrains.skiko:skiko-awt-runtime-linux-x64:0.7.9")
37-
api("org.jetbrains.skiko:skiko-awt-runtime-macos-arm64:0.7.9")
38-
api("org.jetbrains.skiko:skiko-awt-runtime-macos-x64:0.7.9")
39-
api("org.jetbrains.skiko:skiko-awt-runtime-windows-x64:0.7.9")
35+
api("org.jetbrains.skiko:skiko-awt-runtime-linux-arm64:0.7.13")
36+
api("org.jetbrains.skiko:skiko-awt-runtime-linux-x64:0.7.13")
37+
api("org.jetbrains.skiko:skiko-awt-runtime-macos-arm64:0.7.13")
38+
api("org.jetbrains.skiko:skiko-awt-runtime-macos-x64:0.7.13")
39+
api("org.jetbrains.skiko:skiko-awt-runtime-windows-x64:0.7.13")
4040
compileOnly("net.mamoe:mirai-core-utils:2.10.0")
4141
//
4242
testImplementation(kotlin("test", "1.6.0"))
4343
}
4444

4545
kotlin {
4646
explicitApi()
47+
target.compilations {
48+
all {
49+
kotlinOptions {
50+
jvmTarget = "1.8"
51+
}
52+
}
53+
}
54+
}
55+
56+
java {
57+
sourceCompatibility = JavaVersion.VERSION_1_8
58+
targetCompatibility = JavaVersion.VERSION_1_8
4759
}
4860

4961
mirai {

src/main/kotlin/xyz/cssxsh/mirai/plugin/Dowloader.kt

+5-2
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ internal fun sevenZA(folder: File): File {
8282
*/
8383
@JvmSynthetic
8484
public suspend fun loadTypeface(folder: File, vararg links: String): Unit = withContext(Dispatchers.IO) {
85-
val downloaded = mutableListOf<File>()
85+
val downloaded: MutableList<File> = ArrayList()
8686
val download = folder.resolve("download")
8787

8888
download.mkdirs()
@@ -102,7 +102,7 @@ public suspend fun loadTypeface(folder: File, vararg links: String): Unit = with
102102
.directory(folder)
103103
.start()
104104
// 防止卡顿
105-
.apply { inputStream.transferTo(java.io.OutputStream.nullOutputStream()) }
105+
.apply { inputStream.transferTo(OutputStream.nullOutputStream()) }
106106
.waitFor()
107107
}
108108
"zip" -> {
@@ -143,6 +143,9 @@ public fun loadTypeface(folder: File) {
143143
}
144144
}
145145

146+
/**
147+
* 下载表情模板
148+
*/
146149
@JvmSynthetic
147150
public suspend fun loadFace(folder: File): Unit = withContext(Dispatchers.IO) {
148151
folder.mkdirs()

src/main/kotlin/xyz/cssxsh/mirai/plugin/MiraiSkiaPlugin.kt

+45-47
Original file line numberDiff line numberDiff line change
@@ -15,64 +15,62 @@ public object MiraiSkiaPlugin : KotlinPlugin(
1515
JvmPluginDescription(
1616
id = "xyz.cssxsh.mirai.mirai-skia-plugin",
1717
name = "mirai-skia-plugin",
18-
version = "1.0.0-dev",
18+
version = "1.0.0",
1919
) {
2020
author("cssxsh")
2121
}
2222
) {
2323

2424
override fun onEnable() {
25-
launch {
26-
logger.info { "platform: ${hostId}, skia: ${Version.skia}, skiko: ${Version.skiko}" }
27-
loadFace(folder = dataFolder.resolve("face"))
28-
loadTypeface(folder = dataFolder.resolve("fonts"),
29-
"https://mirrors.tuna.tsinghua.edu.cn/github-release/be5invis/Sarasa-Gothic/LatestRelease/sarasa-gothic-ttc-0.35.9.7z",
30-
"http://dl.font.im/Noto_Sans.zip",
31-
"http://dl.font.im/Noto_Serif.zip"
32-
)
33-
logger.info { "fonts: ${FontUtils.provider.makeFamilies().keys}" }
34-
}
35-
36-
// Test
37-
globalEventChannel().subscribeMessages {
38-
"""^#ph\s+(\S+)\s+(\S+)""".toRegex() findingReply { result ->
39-
logger.info { "ph ${result.value}" }
40-
val (porn, hub) = result.destructured
25+
logger.info { "platform: ${hostId}, skia: ${Version.skia}, skiko: ${Version.skiko}" }
26+
loadTypeface(folder = dataFolder.resolve("fonts"))
27+
logger.info { "fonts: ${FontUtils.provider.makeFamilies().keys}" }
4128

42-
subject.uploadImage(resource = pornhub(porn, hub).makeSnapshotResource())
29+
val test = System.getProperty("xyz.cssxsh.skia.test", "false").toBoolean()
30+
if (test) {
31+
launch {
32+
loadFace(folder = dataFolder.resolve("face"))
4333
}
44-
"""^#pet( \d+(?:\.\d+)?)?""".toRegex() findingReply { result ->
45-
logger.info { "pet ${result.value}" }
46-
val delay = result.groups[1]?.value?.toDoubleOrNull() ?: 0.02
47-
val user = message.findIsInstance<At>()?.target?.let { (subject as? Group)?.get(it) } ?: sender
48-
val file = dataFolder.resolve("${user.id}.jpg")
49-
if (file.exists().not()) download(urlString = user.avatarUrl, folder = dataFolder).renameTo(file)
50-
val face = SkiaImage.makeFromEncoded(file.readBytes())
34+
globalEventChannel().subscribeMessages {
35+
"""^#ph\s+(\S+)\s+(\S+)""".toRegex() findingReply { result ->
36+
logger.info { "ph ${result.value}" }
37+
val (porn, hub) = result.destructured
5138

52-
subject.uploadImage(resource = SkiaExternalResource(origin = petpet(face, delay), formatName = "gif"))
53-
}
54-
"""^#shout(.+)""".toRegex() findingReply { result ->
55-
logger.info { "shout ${result.value}" }
56-
val lines = message.firstIsInstance<PlainText>().content
57-
.removePrefix("#shout")
58-
.split(' ').filterNot { it.isBlank() }
59-
.toTypedArray()
60-
subject.uploadImage(resource = shout(lines = lines).makeSnapshotResource())
61-
}
62-
"""^#choyen\s+(\S+)\s+(\S+)""".toRegex() findingReply { result ->
63-
logger.info { "choyen ${result.value}" }
64-
val (top, bottom) = result.destructured
39+
subject.uploadImage(resource = pornhub(porn, hub).makeSnapshotResource())
40+
}
41+
"""^#pet( \d+(?:\.\d+)?)?""".toRegex() findingReply { result ->
42+
logger.info { "pet ${result.value}" }
43+
val delay = result.groups[1]?.value?.toDoubleOrNull() ?: 0.02
44+
val user = message.findIsInstance<At>()?.target?.let { (subject as? Group)?.get(it) } ?: sender
45+
val file = dataFolder.resolve("${user.id}.jpg")
46+
if (file.exists().not()) download(urlString = user.avatarUrl, folder = dataFolder).renameTo(file)
47+
val face = SkiaImage.makeFromEncoded(file.readBytes())
6548

66-
subject.uploadImage(resource = choyen(top, bottom).makeSnapshotResource())
67-
}
68-
"""^#lick""".toRegex() findingReply { result ->
69-
logger.info { "lick ${result.value}" }
70-
val user = message.findIsInstance<At>()?.target?.let { (subject as? Group)?.get(it) } ?: sender
71-
val file = dataFolder.resolve("${user.id}.jpg")
72-
if (file.exists().not()) download(urlString = user.avatarUrl, folder = dataFolder).renameTo(file)
73-
val face = SkiaImage.makeFromEncoded(file.readBytes())
49+
subject.uploadImage(resource = SkiaExternalResource(origin = petpet(face, delay), formatName = "gif"))
50+
}
51+
"""^#shout(.+)""".toRegex() findingReply { result ->
52+
logger.info { "shout ${result.value}" }
53+
val lines = message.firstIsInstance<PlainText>().content
54+
.removePrefix("#shout")
55+
.split(' ').filterNot { it.isBlank() }
56+
.toTypedArray()
57+
subject.uploadImage(resource = shout(lines = lines).makeSnapshotResource())
58+
}
59+
"""^#choyen\s+(\S+)\s+(\S+)""".toRegex() findingReply { result ->
60+
logger.info { "choyen ${result.value}" }
61+
val (top, bottom) = result.destructured
62+
63+
subject.uploadImage(resource = choyen(top, bottom).makeSnapshotResource())
64+
}
65+
"""^#lick""".toRegex() findingReply { result ->
66+
logger.info { "lick ${result.value}" }
67+
val user = message.findIsInstance<At>()?.target?.let { (subject as? Group)?.get(it) } ?: sender
68+
val file = dataFolder.resolve("${user.id}.jpg")
69+
if (file.exists().not()) download(urlString = user.avatarUrl, folder = dataFolder).renameTo(file)
70+
val face = SkiaImage.makeFromEncoded(file.readBytes())
7471

75-
subject.uploadImage(resource = SkiaExternalResource(origin = lick(face), formatName = "gif"))
72+
subject.uploadImage(resource = SkiaExternalResource(origin = lick(face), formatName = "gif"))
73+
}
7674
}
7775
}
7876
}

src/main/kotlin/xyz/cssxsh/skia/Example.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ public fun lick(face: Image): Data {
112112
val bitmap = Bitmap()
113113
bitmap.allocPixels(lick.imageInfo)
114114
lick.readPixels(bitmap, index)
115-
surface.canvas.clear(Color.makeARGB(0, 0, 0, 0))
115+
surface.canvas.clear(Color.TRANSPARENT)
116116
surface.writePixels(bitmap, 0, 0)
117117

118118
val (l, t) = offsets[index % 8]

0 commit comments

Comments
 (0)