Add favorability system

Update version to v1.9.0
This commit is contained in:
2025-10-30 15:02:27 +08:00
parent 8ac0197fc4
commit 0f482407d4
8 changed files with 315 additions and 23 deletions

View File

@@ -2,6 +2,7 @@ package top.jie65535.mirai
import net.mamoe.mirai.console.command.CommandSender
import net.mamoe.mirai.console.command.CompositeCommand
import net.mamoe.mirai.console.permission.PermissionService.Companion.cancel
import net.mamoe.mirai.console.permission.PermissionService.Companion.permit
import net.mamoe.mirai.console.permission.PermitteeId.Companion.permitteeId
import net.mamoe.mirai.contact.Contact
@@ -9,15 +10,15 @@ import net.mamoe.mirai.contact.Group
import net.mamoe.mirai.contact.Member
import net.mamoe.mirai.contact.User
import top.jie65535.mirai.JChatGPT.reload
import top.jie65535.mirai.JChatGPT.save
object PluginCommands : CompositeCommand(
JChatGPT, "jgpt", description = "J OpenAI ChatGPT"
) {
@SubCommand
suspend fun CommandSender.setToken(token: String) {
PluginConfig.openAiToken = token
PluginConfig.save()
suspend fun CommandSender.reload() {
PluginConfig.reload()
PluginData.reload()
LargeLanguageModels.reload()
sendMessage("OK")
}
@@ -35,24 +36,34 @@ object PluginCommands : CompositeCommand(
@SubCommand
suspend fun CommandSender.disable(contact: Contact) {
when (contact) {
is Member -> contact.permitteeId.permit(JChatGPT.chatPermission)
is User -> contact.permitteeId.permit(JChatGPT.chatPermission)
is Group -> contact.permitteeId.permit(JChatGPT.chatPermission)
is Member -> contact.permitteeId.cancel(JChatGPT.chatPermission, false)
is User -> contact.permitteeId.cancel(JChatGPT.chatPermission, false)
is Group -> contact.permitteeId.cancel(JChatGPT.chatPermission, false)
}
sendMessage("OK")
}
@SubCommand
suspend fun CommandSender.reload() {
PluginConfig.reload()
PluginData.reload()
LargeLanguageModels.reload()
sendMessage("OK")
}
@SubCommand
suspend fun CommandSender.clearMemory() {
PluginData.contactMemory.clear()
sendMessage("OK")
}
@SubCommand
suspend fun CommandSender.setFavor(user: User, value: Int) {
// 限制好感度值在-100到100之间
val clampedValue = value.coerceIn(-100, 100)
// 获取当前的好感度信息
val currentInfo = PluginData.userFavorability[user.id] ?: FavorabilityInfo(user.id)
// 创建新的好感度信息,保持原因和印象不变
val newInfo = currentInfo.copy(value = clampedValue)
PluginData.userFavorability[user.id] = newInfo
sendMessage("OK")
}
@SubCommand
suspend fun CommandSender.clearFavor() {
PluginData.userFavorability.clear()
sendMessage("OK")
}
}