Ver Fonte

add UserCmd

00ll00 há 5 anos atrás
pai
commit
903e313977

+ 13 - 2
src/main/kotlin/bot_luo_core/bot/BotContact.kt

@@ -1,11 +1,14 @@
 package bot_luo_core.bot
 package bot_luo_core.bot
 
 
+import bot_luo_core.data.Group
+import bot_luo_core.data.User
+import bot_luo_core.util.Logger
 import net.mamoe.mirai.Bot
 import net.mamoe.mirai.Bot
 import net.mamoe.mirai.contact.Contact
 import net.mamoe.mirai.contact.Contact
-import net.mamoe.mirai.contact.Group
-import net.mamoe.mirai.contact.MemberPermission
 import net.mamoe.mirai.message.MessageReceipt
 import net.mamoe.mirai.message.MessageReceipt
 import net.mamoe.mirai.message.data.Message
 import net.mamoe.mirai.message.data.Message
+import net.mamoe.mirai.message.data.toMessageChain
+import net.mamoe.mirai.message.data.toPlainText
 
 
 interface BotContact {
 interface BotContact {
     val id: Long
     val id: Long
@@ -15,4 +18,12 @@ interface BotContact {
 
 
     suspend fun sendMessage(msg: Message): MessageReceipt<Contact>? = contact?.sendMessage(msg)
     suspend fun sendMessage(msg: Message): MessageReceipt<Contact>? = contact?.sendMessage(msg)
     suspend fun sendMessage(str: String): MessageReceipt<Contact>? = contact?.sendMessage(str)
     suspend fun sendMessage(str: String): MessageReceipt<Contact>? = contact?.sendMessage(str)
+    suspend fun sendMessageWithLog(msg: Message): MessageReceipt<Contact>? {
+        when (contactType) {
+            BotContactType.Single -> Logger.msgLog(msg.toMessageChain(), this as User, null)
+            BotContactType.Group -> Logger.msgLog(msg.toMessageChain(), null, this as Group)
+        }
+        return sendMessage(msg)
+    }
+    suspend fun sendMessageWithLog(str: String): MessageReceipt<Contact>? = sendMessageWithLog(str.toPlainText().toMessageChain())
 }
 }

+ 2 - 1
src/main/kotlin/bot_luo_core/cli/CmdCatalog.kt

@@ -41,7 +41,8 @@ object CmdCatalog {
             ScheduleCmd::class,
             ScheduleCmd::class,
             StatCmd::class,
             StatCmd::class,
             SwitchCmd::class,
             SwitchCmd::class,
-            TagCmd::class
+            TagCmd::class,
+            UserCmd::class
         )
         )
         Logger.sysLog(Level.DEBUG, "内建命令注册完毕")
         Logger.sysLog(Level.DEBUG, "内建命令注册完毕")
     }
     }

+ 1 - 1
src/main/kotlin/bot_luo_core/cli/commands/NoticeCmd.kt

@@ -21,7 +21,7 @@ import net.mamoe.mirai.message.data.MessageChain
 @Command(
 @Command(
     name = "notice",
     name = "notice",
     display = "提醒",
     display = "提醒",
-    alias = [],
+    alias = ["@"],
     usage = "对用户添加提醒,当指定用户下一次发言时发送提醒消息",
     usage = "对用户添加提醒,当指定用户下一次发言时发送提醒消息",
     caption = [
     caption = [
         "不设置限定群组时默认为当前群组"
         "不设置限定群组时默认为当前群组"

+ 44 - 0
src/main/kotlin/bot_luo_core/cli/commands/UserCmd.kt

@@ -0,0 +1,44 @@
+package bot_luo_core.cli.commands
+
+import bot_luo_core.bot.BotLuo
+import bot_luo_core.cli.Cmd
+import bot_luo_core.cli.CmdContext
+import bot_luo_core.cli.CmdPermissionLevel
+import bot_luo_core.cli.CmdReceipt
+import bot_luo_core.cli.annotation.Argument
+import bot_luo_core.cli.annotation.Command
+import bot_luo_core.cli.annotation.Method
+import bot_luo_core.cli.handlers.MultiGroupArgHandler
+import bot_luo_core.cli.handlers.UserArgHandler
+import bot_luo_core.data.Group
+import bot_luo_core.data.GroupTags
+import bot_luo_core.data.User
+import bot_luo_core.util.TableBuilder
+
+@Command(
+    name = "user",
+    display = "用户",
+    alias = [],
+    usage = "用户相关操作命令"
+)
+class UserCmd(context: CmdContext) : Cmd(context) {
+
+    @Method(name = "in", alias = [], pmsLevel = CmdPermissionLevel.OP, title = "所在群组")
+    fun userIn(
+        @Argument(name = "用户", handler = UserArgHandler::class)
+        user: User,
+        @Argument(name = "限定群组", multiValued = true, required = false, handler = MultiGroupArgHandler::class)
+        groupsIn: ArrayList<Group>?
+    ): CmdReceipt {
+        val groups = groupsIn ?: GroupTags.readGroupTag("#all") ?: arrayListOf(context.group)
+        val table = TableBuilder(4)
+        table.th("所在群组 —— ${user.name}(${user.id})").br()
+        for (g in groups) {
+            val group = (BotLuo.getMiraiContact(g) ?: continue) as net.mamoe.mirai.contact.Group
+            if (group.contains(user.id))
+                table.tr("${group.name}(${group.id})")
+        }
+        context.print(table.toString())
+        return SUCCESS
+    }
+}

+ 4 - 1
src/main/kotlin/bot_luo_core/util/Logger.kt

@@ -52,7 +52,10 @@ object Logger {
     fun log(e: VirtualMessageEvent, level: Level = Level.INFO) =
     fun log(e: VirtualMessageEvent, level: Level = Level.INFO) =
         eventLog(level, "-> <VMSG> [U:${e.user.name}(${e.user.id})][G:${e.group.name}(${e.group.id})] -> ${e.message.serializeToMiraiCode()}")
         eventLog(level, "-> <VMSG> [U:${e.user.name}(${e.user.id})][G:${e.group.name}(${e.group.id})] -> ${e.message.serializeToMiraiCode()}")
 
 
-    fun msgLog(m: MessageChain, u: User, g:Group, level: Level = Level.INFO) = when {
+    fun msgLog(m: MessageChain, u: User?, g:Group?, level: Level = Level.INFO) = when {
+        g == null && u != null -> msgLog(level, "[U:${u.name}(${u.id})] <- ${m.serializeToMiraiCode()}")
+        u == null && g != null -> msgLog(level, "[G:${g.name}(${g.id})] <- ${m.serializeToMiraiCode()}")
+        g == null || u == null -> {}
         !g.virtual -> msgLog(level, "[U:${u.name}(${u.id})][G:${g.name}(${g.id})] <- ${m.serializeToMiraiCode()}")
         !g.virtual -> msgLog(level, "[U:${u.name}(${u.id})][G:${g.name}(${g.id})] <- ${m.serializeToMiraiCode()}")
         !u.virtual -> msgLog(level, "[U:${u.name}(${u.id})] <- ${m.serializeToMiraiCode()}")
         !u.virtual -> msgLog(level, "[U:${u.name}(${u.id})] <- ${m.serializeToMiraiCode()}")
         else -> msgLog(level, "|<- ${m.serializeToMiraiCode()}")
         else -> msgLog(level, "|<- ${m.serializeToMiraiCode()}")