From 17d49d0d35d691e5e5df7d67efd479602bf2ca4a Mon Sep 17 00:00:00 2001 From: RTAkland Date: Thu, 19 Sep 2024 22:34:40 +0800 Subject: [PATCH] feat: add wiki command --- build.gradle.kts | 1 + gradle/libs.versions.toml | 2 + src/main/kotlin/cn/rtast/fancybot/FancyBot.kt | 3 +- .../commands/lookup/WikipediaCommand.kt | 46 +++++++++++++++++++ .../fancybot/entity/wiki/WikipediaResponse.kt | 21 +++++++++ 5 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 src/main/kotlin/cn/rtast/fancybot/commands/lookup/WikipediaCommand.kt create mode 100644 src/main/kotlin/cn/rtast/fancybot/entity/wiki/WikipediaResponse.kt diff --git a/build.gradle.kts b/build.gradle.kts index d6b1074..65c0672 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -37,6 +37,7 @@ dependencies { implementation(libs.motdPinger) implementation(libs.animated.gif.lib) implementation(libs.simple.java.mail) + implementation(libs.jsoup) } tasks.build { diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 87ab78c..025d3a0 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -8,6 +8,7 @@ sqliteJDBCVersion = "3.46.1.0" motdPingerVersion = "1.0.1" animatedGifLibVersion = "1.4" simpleJavaMailVersion = "8.11.3" +jsoupVersion = "1.18.1" [libraries] rOneBot = { group = "cn.rtast", name = "ROneBot", version.ref = "ronebotVersion" } @@ -18,6 +19,7 @@ exposedJDBC = { group = "org.jetbrains.exposed", name = "exposed-jdbc", version. sqliteJDBC = { group = "org.xerial", name = "sqlite-jdbc", version.ref = "sqliteJDBCVersion" } animated-gif-lib = { group = "com.madgag", name = "animated-gif-lib", version.ref = "animatedGifLibVersion" } simple-java-mail = { group = "org.simplejavamail", name = "simple-java-mail", version.ref = "simpleJavaMailVersion" } +jsoup = { group = "org.jsoup", name = "jsoup", version.ref = "jsoupVersion" } [bundles] diff --git a/src/main/kotlin/cn/rtast/fancybot/FancyBot.kt b/src/main/kotlin/cn/rtast/fancybot/FancyBot.kt index 15697dd..c28a834 100644 --- a/src/main/kotlin/cn/rtast/fancybot/FancyBot.kt +++ b/src/main/kotlin/cn/rtast/fancybot/FancyBot.kt @@ -20,6 +20,7 @@ import cn.rtast.fancybot.commands.lookup.NslookupCommand import cn.rtast.fancybot.commands.lookup.PixivCommand import cn.rtast.fancybot.commands.lookup.QRCodeCommand import cn.rtast.fancybot.commands.lookup.WeatherCommand +import cn.rtast.fancybot.commands.lookup.WikipediaCommand import cn.rtast.fancybot.commands.parse.BVParseCommand import cn.rtast.fancybot.commands.parse.GitHubParseCommand import cn.rtast.fancybot.commands.parse.ImageURLCommand @@ -167,7 +168,7 @@ val commands = listOf( GithubUserCommand(), AboutCommand(), MusicPlayUrlCommand(), DomainPriceCommand(), SendMailCommand(), ZiBiCommand(), - UnsetZiBiCommand() + UnsetZiBiCommand(), WikipediaCommand() ) fun initFilesDir() { diff --git a/src/main/kotlin/cn/rtast/fancybot/commands/lookup/WikipediaCommand.kt b/src/main/kotlin/cn/rtast/fancybot/commands/lookup/WikipediaCommand.kt new file mode 100644 index 0000000..4fe1df8 --- /dev/null +++ b/src/main/kotlin/cn/rtast/fancybot/commands/lookup/WikipediaCommand.kt @@ -0,0 +1,46 @@ +/* + * Copyright © 2024 RTAkland + * Author: RTAkland + * Date: 2024/9/19 + */ + + +package cn.rtast.fancybot.commands.lookup + +import cn.rtast.fancybot.entity.wiki.WikipediaResponse +import cn.rtast.fancybot.util.Http +import cn.rtast.rob.entity.GroupMessage +import cn.rtast.rob.util.BaseCommand +import cn.rtast.rob.util.ob.MessageChain +import cn.rtast.rob.util.ob.OneBotListener +import org.jsoup.Jsoup + +class WikipediaCommand : BaseCommand() { + override val commandNames = listOf("/wiki", "/wk") + + private val wikipediaAPI = "https://proxy.rtast.cn/https/zh.wikipedia.org/w/api.php" + + private fun String.extractPlainTextFromHtml(): String { + val doc = Jsoup.parse(this) + return doc.text() + } + + override suspend fun executeGroup(listener: OneBotListener, message: GroupMessage, args: List) { + val title = args.first() + val response = Http.get( + wikipediaAPI, + mapOf( + "action" to "query", + "list" to "search", + "srsearch" to title, + "format" to "json" + ) + ).query.search.first() + val msg = MessageChain.Builder() + .addText("标题: ${response.title} 内容片段如下") + .addNewLine() + .addText(response.snippet.extractPlainTextFromHtml()) + .build() + message.reply(msg) + } +} \ No newline at end of file diff --git a/src/main/kotlin/cn/rtast/fancybot/entity/wiki/WikipediaResponse.kt b/src/main/kotlin/cn/rtast/fancybot/entity/wiki/WikipediaResponse.kt new file mode 100644 index 0000000..598279c --- /dev/null +++ b/src/main/kotlin/cn/rtast/fancybot/entity/wiki/WikipediaResponse.kt @@ -0,0 +1,21 @@ +/* + * Copyright © 2024 RTAkland + * Author: RTAkland + * Date: 2024/9/19 + */ + + +package cn.rtast.fancybot.entity.wiki + +data class WikipediaResponse( + val query: Query +) { + data class Query( + val search: List + ) + + data class Search( + val title: String, + val snippet: String, + ) +} \ No newline at end of file