From 6f32323fec1ae3dccb2d1f50c3ee70cbac291021 Mon Sep 17 00:00:00 2001 From: RTAkland Date: Mon, 14 Oct 2024 17:26:59 +0800 Subject: [PATCH] feat: add gravatar command --- src/main/kotlin/cn/rtast/fancybot/Const.kt | 3 +- .../commands/lookup/GravatarCommand.kt | 34 +++++++++++++++++++ .../fancybot/util/str/StringFormatter.kt | 13 ++++++- 3 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 src/main/kotlin/cn/rtast/fancybot/commands/lookup/GravatarCommand.kt diff --git a/src/main/kotlin/cn/rtast/fancybot/Const.kt b/src/main/kotlin/cn/rtast/fancybot/Const.kt index d556128..08aef47 100644 --- a/src/main/kotlin/cn/rtast/fancybot/Const.kt +++ b/src/main/kotlin/cn/rtast/fancybot/Const.kt @@ -126,5 +126,6 @@ val commands = listOf( ZDJDCommand(), ScanQRCodeCommand(), TTSCommand(), SlimeChunkHelperCommand(), SupportMeCommand(), TheCatCommand(), TheHistoryOfTodayCommand(), MCVersionCommand(), MinecraftWikiCommand(), GaoKaoDaysRemainCommand(), IdiomExplainCommand(), NiuziManagerCommand(), - TodayEatCommand(), TodayDrinkCommand(), MCLoginCommand(), RCONCommand() + TodayEatCommand(), TodayDrinkCommand(), MCLoginCommand(), RCONCommand(), + GravatarCommand() ) \ No newline at end of file diff --git a/src/main/kotlin/cn/rtast/fancybot/commands/lookup/GravatarCommand.kt b/src/main/kotlin/cn/rtast/fancybot/commands/lookup/GravatarCommand.kt new file mode 100644 index 0000000..85015a1 --- /dev/null +++ b/src/main/kotlin/cn/rtast/fancybot/commands/lookup/GravatarCommand.kt @@ -0,0 +1,34 @@ +/* + * Copyright © 2024 RTAkland + * Author: RTAkland + * Date: 2024/10/14 + */ + + +package cn.rtast.fancybot.commands.lookup + +import cn.rtast.fancybot.annotations.CommandDescription +import cn.rtast.fancybot.util.misc.toURL +import cn.rtast.fancybot.util.str.encodeToBase64 +import cn.rtast.fancybot.util.str.getMD5 +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 + +@CommandDescription("查询用户的Gravatar头像") +class GravatarCommand : BaseCommand() { + override val commandNames = listOf("/g", "/gravatar") + + companion object { + private const val GRAVATAR_URL = "https://gravatar.rtast.cn/avatar" + } + + override suspend fun executeGroup(listener: OneBotListener, message: GroupMessage, args: List) { + val emailMD5 = if (args.first().trim().lowercase().contains("@")) args.first().trim().lowercase().getMD5() + else args.first().trim().lowercase() + val avatarImage = "$GRAVATAR_URL/$emailMD5?size=256".toURL().readBytes().encodeToBase64() + val msg = MessageChain.Builder().addImage(avatarImage, true).build() + message.reply(msg) + } +} \ No newline at end of file diff --git a/src/main/kotlin/cn/rtast/fancybot/util/str/StringFormatter.kt b/src/main/kotlin/cn/rtast/fancybot/util/str/StringFormatter.kt index 41164b5..1e43fba 100644 --- a/src/main/kotlin/cn/rtast/fancybot/util/str/StringFormatter.kt +++ b/src/main/kotlin/cn/rtast/fancybot/util/str/StringFormatter.kt @@ -9,6 +9,7 @@ package cn.rtast.fancybot.util.str import java.awt.Graphics2D import java.net.URLEncoder +import java.security.MessageDigest fun setTruncate(origin: String, g2d: Graphics2D, maxWidth: Int = 500): String { val fontMetrics = g2d.fontMetrics @@ -50,4 +51,14 @@ fun Int.formatToMinutes(): String { val String.proxy get() = this.replace("https://", "https://proxy.rtast.cn/https/") -val String.uriEncode get() = URLEncoder.encode(this, "UTF-8") \ No newline at end of file +val String.uriEncode get() = URLEncoder.encode(this, "UTF-8") + +fun String.getMD5(): String { + return this.toByteArray().getMD5() +} + +fun ByteArray.getMD5(): String { + val md = MessageDigest.getInstance("MD5") + val hashBytes = md.digest(this) + return hashBytes.joinToString("") { "%02x".format(it) } +} \ No newline at end of file