From 069fed22cac8afc132677901dfd338621d1af58d Mon Sep 17 00:00:00 2001 From: RTAkland Date: Tue, 17 Sep 2024 22:37:42 +0800 Subject: [PATCH] feat: add send mail command --- build.gradle.kts | 1 + gradle/libs.versions.toml | 2 + src/main/kotlin/cn/rtast/fancybot/Const.kt | 12 ++-- src/main/kotlin/cn/rtast/fancybot/FancyBot.kt | 3 +- .../fancybot/commands/SendMailCommand.kt | 68 +++++++++++++++++++ .../commands/record/MyPointCommand.kt | 4 +- .../kotlin/cn/rtast/fancybot/entity/Config.kt | 8 ++- .../rtast/fancybot/util/file/ConfigManager.kt | 6 ++ src/main/resources/config.json | 10 ++- 9 files changed, 104 insertions(+), 10 deletions(-) create mode 100644 src/main/kotlin/cn/rtast/fancybot/commands/SendMailCommand.kt diff --git a/build.gradle.kts b/build.gradle.kts index fe71c67..d6b1074 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -36,6 +36,7 @@ dependencies { implementation(libs.sqliteJDBC) implementation(libs.motdPinger) implementation(libs.animated.gif.lib) + implementation(libs.simple.java.mail) } tasks.build { diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 27c4d00..5c30418 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -7,6 +7,7 @@ exposedVersion = "0.53.0" sqliteJDBCVersion = "3.46.1.0" motdPingerVersion = "1.0.1" animatedGifLibVersion = "1.4" +simpleJavaMailVersion = "8.11.3" [libraries] rOneBot = { group = "cn.rtast", name = "ROneBot", version.ref = "ronebotVersion" } @@ -16,6 +17,7 @@ exposedCore = { group = "org.jetbrains.exposed", name = "exposed-core", version. exposedJDBC = { group = "org.jetbrains.exposed", name = "exposed-jdbc", version.ref = "exposedVersion" } 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"} [bundles] diff --git a/src/main/kotlin/cn/rtast/fancybot/Const.kt b/src/main/kotlin/cn/rtast/fancybot/Const.kt index fba1dd5..f15ce3a 100644 --- a/src/main/kotlin/cn/rtast/fancybot/Const.kt +++ b/src/main/kotlin/cn/rtast/fancybot/Const.kt @@ -31,9 +31,11 @@ val DEFAULT_CONFIG = Config( githubKey = "1919810", imageType = ImageType.PNG, openAIAPIHost = "https://api.moonshot.cn", - openAIAPIKey = "114514" -) - -val ADMINS = listOf( - 3458671395L + openAIAPIKey = "114514", + smtpHost = "127.0.0.1", + smtpPort = 25, + smtpUser = "114514", + smtpPassword = "1919810", + smtpFromAddress = "fancybot@repo.rtast.cn", + admins = listOf(3458671395L) ) \ No newline at end of file diff --git a/src/main/kotlin/cn/rtast/fancybot/FancyBot.kt b/src/main/kotlin/cn/rtast/fancybot/FancyBot.kt index e0790fb..5427da4 100644 --- a/src/main/kotlin/cn/rtast/fancybot/FancyBot.kt +++ b/src/main/kotlin/cn/rtast/fancybot/FancyBot.kt @@ -152,7 +152,8 @@ val commands = listOf( JiJianCommand(), LikeMeCommand(), CompilerCommand(), GPTCommand(), GithubUserCommand(), AboutCommand(), - MusicPlayUrlCommand(), DomainPriceCommand() + MusicPlayUrlCommand(), DomainPriceCommand(), + SendMailCommand() ) suspend fun main() { diff --git a/src/main/kotlin/cn/rtast/fancybot/commands/SendMailCommand.kt b/src/main/kotlin/cn/rtast/fancybot/commands/SendMailCommand.kt new file mode 100644 index 0000000..b61a9ef --- /dev/null +++ b/src/main/kotlin/cn/rtast/fancybot/commands/SendMailCommand.kt @@ -0,0 +1,68 @@ +/* + * Copyright © 2024 RTAkland + * Author: RTAkland + * Date: 2024/9/17 + */ + + +package cn.rtast.fancybot.commands + +import cn.rtast.fancybot.configManager +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.OBMessage +import org.simplejavamail.api.mailer.config.TransportStrategy +import org.simplejavamail.email.EmailBuilder +import org.simplejavamail.mailer.MailerBuilder + +class SendMailCommand : BaseCommand() { + override val commandNames = listOf("/mail") + + private val smtpHost = configManager.smtpHost + private val smtpPort = configManager.smtpPort + private val smtpUser = configManager.smtpUser + private val smtpPassword = configManager.smtpPassword + private val smtpFromAddress = configManager.smtpFromAddress + private val mailer = MailerBuilder.withSMTPServer(smtpHost, smtpPort, smtpUser, smtpPassword) + .withTransportStrategy(TransportStrategy.SMTP_TLS) + .clearEmailValidator() + .async() + .buildMailer() + + private fun sendMail(target: String) { + val email = EmailBuilder.startingBlank() + .from(smtpFromAddress) + .to(target) + .withSubject("Test email from FancyBot") + .withPlainText("Test email~") + .buildEmail() + this.mailer.sendMail(email) + } + + override suspend fun executeGroup(listener: OBMessage, message: GroupMessage, args: List) { + if (args.isEmpty()) { + val msg = MessageChain.Builder() + .addAt(message.sender.userId) + .addText("发送`/mail <收件人地址>`即可发送测试邮件~") + .build() + listener.sendGroupMessage(message.groupId, msg) + return + } + if (message.sender.userId !in configManager.admins) { + val msg = MessageChain.Builder() + .addReply(message.messageId) + .addText("你不许发邮件") + .build() + listener.sendGroupMessage(message.groupId, msg) + return + } + val target = args.first() + this.sendMail(target) + val msg = MessageChain.Builder() + .addAt(message.sender.userId) + .addText("正在发送邮件, 请查收~(可能会出现在垃圾桶中~)") + .build() + listener.sendGroupMessage(message.groupId, msg) + } +} \ No newline at end of file diff --git a/src/main/kotlin/cn/rtast/fancybot/commands/record/MyPointCommand.kt b/src/main/kotlin/cn/rtast/fancybot/commands/record/MyPointCommand.kt index 9e7187b..add8ff5 100644 --- a/src/main/kotlin/cn/rtast/fancybot/commands/record/MyPointCommand.kt +++ b/src/main/kotlin/cn/rtast/fancybot/commands/record/MyPointCommand.kt @@ -7,7 +7,7 @@ package cn.rtast.fancybot.commands.record -import cn.rtast.fancybot.ADMINS +import cn.rtast.fancybot.configManager import cn.rtast.fancybot.signManager import cn.rtast.rob.entity.GroupMessage import cn.rtast.rob.enums.UserRole @@ -20,7 +20,7 @@ class MyPointCommand : BaseCommand() { override suspend fun executeGroup(listener: OBMessage, message: GroupMessage, args: List) { // query target's point - if (args.isNotEmpty() && (message.sender.role == UserRole.admin || message.sender.userId in ADMINS)) { + if (args.isNotEmpty() && (message.sender.role == UserRole.admin || message.sender.userId in configManager.admins)) { val targetId = args.first().toLong() val targetData = signManager.getStatus(targetId) val msg = MessageChain.Builder().addAt(message.sender.userId) diff --git a/src/main/kotlin/cn/rtast/fancybot/entity/Config.kt b/src/main/kotlin/cn/rtast/fancybot/entity/Config.kt index 3c65428..55899a6 100644 --- a/src/main/kotlin/cn/rtast/fancybot/entity/Config.kt +++ b/src/main/kotlin/cn/rtast/fancybot/entity/Config.kt @@ -21,5 +21,11 @@ data class Config( val githubKey: String, val imageType: ImageType, val openAIAPIHost: String, - val openAIAPIKey: String + val openAIAPIKey: String, + val smtpHost: String, + val smtpPort: Int, + val smtpUser: String, + val smtpPassword: String, + val smtpFromAddress: String, + val admins: List ) \ No newline at end of file diff --git a/src/main/kotlin/cn/rtast/fancybot/util/file/ConfigManager.kt b/src/main/kotlin/cn/rtast/fancybot/util/file/ConfigManager.kt index 488e847..6bf4d3c 100644 --- a/src/main/kotlin/cn/rtast/fancybot/util/file/ConfigManager.kt +++ b/src/main/kotlin/cn/rtast/fancybot/util/file/ConfigManager.kt @@ -22,4 +22,10 @@ class ConfigManager : JsonFileHandler("config.json") { val imageType get() = this.read().imageType val openAIAPIHost get() = this.read().openAIAPIHost val openAIAPIKey get() = this.read().openAIAPIKey + val smtpHost get() = this.read().smtpHost + val smtpPort get() = this.read().smtpPort + val smtpUser get() = this.read().smtpUser + val smtpPassword get() = this.read().smtpPassword + val smtpFromAddress get() = this.read().smtpFromAddress + val admins get() = this.read().admins } \ No newline at end of file diff --git a/src/main/resources/config.json b/src/main/resources/config.json index 9b828f8..ad6bc5d 100644 --- a/src/main/resources/config.json +++ b/src/main/resources/config.json @@ -12,5 +12,13 @@ "githubKey": "1919810", "imageType": "PNG", "openAIAPIHost": "https://api.moonshot.cn", - "openAIAPIKey": "114514" + "openAIAPIKey": "114514", + "smtpHost": "127.0.0.1", + "smtpPort": 25, + "smtpUser": "114514", + "smtpPassword": "1919810", + "smtpFromAddress": "fancybot@repo.rtast.cn", + "admins": [ + 3458671395 + ] } \ No newline at end of file