mirror of
https://github.com/jie65535/mirai-console-jnr-plugin.git
synced 2025-06-09 17:56:34 +08:00
Compare commits
3 Commits
Author | SHA1 | Date | |
---|---|---|---|
f8be57e359 | |||
3b232189d1 | |||
![]() |
a201911817 |
@ -26,6 +26,13 @@ MiraiConsolePlugin 自定义戳一戳回复消息
|
||||
AudioCodec.AMR。
|
||||
音频文件保存在 `data/me.jie65535.mirai-console-jnr-plugin/` 目录下,理论上你也可以手工设置音频文件。
|
||||
|
||||
## 占位符
|
||||
|
||||
- `{name}` 会被替换为群名片或昵称
|
||||
- `{botName}` 会被替换为机器人群名片或昵称
|
||||
- `{groupName}` 会被替换为群名称
|
||||
- 更多欢迎 ISSUE 或者 PR 补充...
|
||||
|
||||
## 配置文件
|
||||
|
||||
文件位置:`config/me.jie65535.mirai-console-jnr-plugin/jnr.yml`
|
||||
|
@ -3,11 +3,11 @@ plugins {
|
||||
kotlin("jvm") version kotlinVersion
|
||||
kotlin("plugin.serialization") version kotlinVersion
|
||||
|
||||
id("net.mamoe.mirai-console") version "2.14.0"
|
||||
id("net.mamoe.mirai-console") version "2.16.0"
|
||||
}
|
||||
|
||||
group = "top.jie65535"
|
||||
version = "1.4.0"
|
||||
version = "1.5.0"
|
||||
|
||||
repositories {
|
||||
mavenLocal()
|
||||
|
@ -3,13 +3,15 @@ package top.jie65535.jnr
|
||||
import net.mamoe.mirai.console.command.CommandManager.INSTANCE.register
|
||||
import net.mamoe.mirai.console.plugin.jvm.JvmPluginDescription
|
||||
import net.mamoe.mirai.console.plugin.jvm.KotlinPlugin
|
||||
import net.mamoe.mirai.contact.*
|
||||
import net.mamoe.mirai.contact.AudioSupported
|
||||
import net.mamoe.mirai.contact.Group
|
||||
import net.mamoe.mirai.contact.Member
|
||||
import net.mamoe.mirai.contact.nameCardOrNick
|
||||
import net.mamoe.mirai.event.EventPriority
|
||||
import net.mamoe.mirai.event.events.NudgeEvent
|
||||
import net.mamoe.mirai.event.globalEventChannel
|
||||
import net.mamoe.mirai.message.code.MiraiCode.deserializeMiraiCode
|
||||
import net.mamoe.mirai.message.data.*
|
||||
import net.mamoe.mirai.message.data.Image.Key.isUploaded
|
||||
import net.mamoe.mirai.utils.ExternalResource.Companion.toExternalResource
|
||||
import net.mamoe.mirai.utils.ExternalResource.Companion.uploadAsImage
|
||||
import net.mamoe.mirai.utils.info
|
||||
@ -22,7 +24,7 @@ object JNudgeReply : KotlinPlugin(
|
||||
JvmPluginDescription(
|
||||
id = "me.jie65535.mirai-console-jnr-plugin",
|
||||
name = "J Nudge Reply",
|
||||
version = "1.4.0",
|
||||
version = "1.5.0",
|
||||
) {
|
||||
author("jie65535")
|
||||
info("""自定义戳一戳回复插件""")
|
||||
@ -105,7 +107,7 @@ object JNudgeReply : KotlinPlugin(
|
||||
event.from.nudge().sendTo(event.subject)
|
||||
val replyMsg = replyMessage.substring("#nudge".length).removePrefix(":")
|
||||
if (replyMsg.isNotBlank()) {
|
||||
sendRecordMessage(event.subject, messageChainOf(PlainText(replyMsg.trim())))
|
||||
sendRecordMessage(event, messageChainOf(PlainText(replyMsg.trim())))
|
||||
logger.info("已尝试戳回发送者并回复消息")
|
||||
} else {
|
||||
logger.info("已尝试戳回发送者")
|
||||
@ -127,7 +129,7 @@ object JNudgeReply : KotlinPlugin(
|
||||
val replyMsg = args[1].trim()
|
||||
// .replace("{duration}", duration.toString())
|
||||
// 如果禁言时间是在消息中设置的,那么用户也可以同时设置回复的内容里带时间,因此无需添加格式化,除非支持随机禁言时间,可以再考虑
|
||||
sendRecordMessage(event.subject, messageChainOf(PlainText(replyMsg)))
|
||||
sendRecordMessage(event, messageChainOf(PlainText(replyMsg)))
|
||||
}
|
||||
logger.info("戳一戳禁言目标 ${member.nameCardOrNick}(${member.id}) $duration")
|
||||
} catch (e: Throwable) {
|
||||
@ -148,37 +150,58 @@ object JNudgeReply : KotlinPlugin(
|
||||
if (event.subject is AudioSupported) {
|
||||
logger.info("上传并回复语音 $filename")
|
||||
val messageTemp = (event.subject as AudioSupported).uploadAudio(audioFile)
|
||||
sendRecordMessage(event.subject, messageTemp.toMessageChain())
|
||||
sendRecordMessage(event, messageTemp.toMessageChain())
|
||||
} else {
|
||||
logger.warning("当前上下文不支持回复语音")
|
||||
sendRecordMessage(event.subject, messageChainOf(PlainText("[语音消息] 当前上下文不支持")))
|
||||
sendRecordMessage(event, messageChainOf(PlainText("[语音消息] 当前上下文不支持")))
|
||||
}
|
||||
}
|
||||
|
||||
// 其它
|
||||
else -> sendRecordMessage(event.subject, replyMessageChain)
|
||||
else -> sendRecordMessage(event, replyMessageChain)
|
||||
}
|
||||
} else {
|
||||
sendRecordMessage(event.subject, replyMessageChain)
|
||||
sendRecordMessage(event, replyMessageChain)
|
||||
}
|
||||
}
|
||||
|
||||
private suspend fun sendRecordMessage(subject: Contact, message: MessageChain) {
|
||||
private suspend fun sendRecordMessage(event: NudgeEvent, message: MessageChain) {
|
||||
val modifiedChain = MessageChainBuilder()
|
||||
for (it in message) {
|
||||
var innerMessage = it
|
||||
if (it is Image) {
|
||||
if (!it.isUploaded(subject.bot)) {
|
||||
val imgFile = resolveDataFile("images/" + it.imageId)
|
||||
if (imgFile.exists()) {
|
||||
imgFile.uploadAsImage(subject)
|
||||
} else {
|
||||
logger.warning(
|
||||
"图片的服务器缓存已失效,本地缓存已丢失,请重新设置该消息内的图片!" +
|
||||
"消息内容:" + message.serializeToMiraiCode()
|
||||
)
|
||||
}
|
||||
val imgFile = resolveDataFile("images/" + it.imageId)
|
||||
if (imgFile.exists()) {
|
||||
innerMessage = imgFile.uploadAsImage(event.subject)
|
||||
} else {
|
||||
logger.warning(
|
||||
"图片的本地缓存已丢失,请重新设置该消息内的图片!" +
|
||||
"消息内容:" + message.serializeToMiraiCode()
|
||||
)
|
||||
}
|
||||
} else if (it is PlainText) {
|
||||
/**
|
||||
* 占位符
|
||||
* - `{name}` 会被替换为群名片或昵称
|
||||
* - `{botName}` 会被替换为机器人群名片或昵称
|
||||
* - `{groupName}` 会被替换为群名称
|
||||
*/
|
||||
val content = it.content
|
||||
.replace("{name}", event.from.nameCardOrNick)
|
||||
.replace("{botName}", event.target.nameCardOrNick)
|
||||
.replace(
|
||||
"{groupName}",
|
||||
if (event.subject is Group) {
|
||||
(event.subject as Group).name
|
||||
} else {
|
||||
event.from.nick
|
||||
}
|
||||
)
|
||||
|
||||
innerMessage = PlainText(content)
|
||||
}
|
||||
modifiedChain.append(innerMessage)
|
||||
}
|
||||
subject.sendMessage(message)
|
||||
event.subject.sendMessage(modifiedChain.build())
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user