✨ feat(core): 初始化 Bot 命令处理服务器
- 基于 Gin 框架搭建 HTTP 服务,接收并处理 Bot 命令请求 - 实现插件化命令系统,支持通过 Plugin 接口扩展新命令 - 内置菜单、启用/禁用、时间查询等基础命令 - 新增图片生成插件,对接 OpenAI Images API - 支持管理员权限控制、命令动态启禁用 - 提供完整配置管理(.env)与 Docker 部署方案
This commit is contained in:
92
command/builtin.go
Normal file
92
command/builtin.go
Normal file
@@ -0,0 +1,92 @@
|
||||
package command
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
// RegisterBuiltinCommands 注册内置命令
|
||||
func RegisterBuiltinCommands() {
|
||||
// 菜单
|
||||
Register(Command{
|
||||
Name: "菜单",
|
||||
Description: "显示所有可用命令",
|
||||
Usage: "菜单",
|
||||
Handler: handleMenu,
|
||||
})
|
||||
|
||||
// 启用(管理员)
|
||||
Register(Command{
|
||||
Name: "启用",
|
||||
Description: "启用指定命令",
|
||||
Usage: "启用 <命令名>",
|
||||
Handler: handleEnable,
|
||||
AdminOnly: true,
|
||||
})
|
||||
|
||||
// 禁用(管理员)
|
||||
Register(Command{
|
||||
Name: "禁用",
|
||||
Description: "禁用指定命令",
|
||||
Usage: "禁用 <命令名>",
|
||||
Handler: handleDisable,
|
||||
AdminOnly: true,
|
||||
})
|
||||
|
||||
// 时间
|
||||
Register(Command{
|
||||
Name: "时间",
|
||||
Description: "查询当前时间",
|
||||
Usage: "时间",
|
||||
Handler: func(req *Req) Resp {
|
||||
return Resp{Reply: "当前时间是: " + time.Now().Format("2006-01-02 15:04:05")}
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
func handleMenu(req *Req) Resp {
|
||||
var sb strings.Builder
|
||||
sb.WriteString("可用命令列表:\n\n")
|
||||
|
||||
for _, cmd := range AllCommands() {
|
||||
status := "✅"
|
||||
if !cmd.Enabled {
|
||||
status = "❌"
|
||||
}
|
||||
adminTag := ""
|
||||
if cmd.AdminOnly {
|
||||
adminTag = " [管理员]"
|
||||
}
|
||||
sb.WriteString(fmt.Sprintf("%s %s%s — %s\n", status, cmd.Name, adminTag, cmd.Description))
|
||||
sb.WriteString(fmt.Sprintf(" 用法:%s\n\n", cmd.Usage))
|
||||
}
|
||||
|
||||
return Resp{Reply: strings.TrimSpace(sb.String())}
|
||||
}
|
||||
|
||||
func handleEnable(req *Req) Resp {
|
||||
name := strings.TrimSpace(req.Content)
|
||||
if name == "" {
|
||||
return Resp{Reply: "请指定要启用的命令,例如:启用 生图"}
|
||||
}
|
||||
|
||||
if err := Toggle(name, true); err != nil {
|
||||
return Resp{Reply: err.Error()}
|
||||
}
|
||||
|
||||
return Resp{Reply: fmt.Sprintf("已启用命令\"%s\"", name)}
|
||||
}
|
||||
|
||||
func handleDisable(req *Req) Resp {
|
||||
name := strings.TrimSpace(req.Content)
|
||||
if name == "" {
|
||||
return Resp{Reply: "请指定要禁用的命令,例如:禁用 问候"}
|
||||
}
|
||||
|
||||
if err := Toggle(name, false); err != nil {
|
||||
return Resp{Reply: err.Error()}
|
||||
}
|
||||
|
||||
return Resp{Reply: fmt.Sprintf("已禁用命令\"%s\"", name)}
|
||||
}
|
||||
Reference in New Issue
Block a user