- 基于 Gin 框架搭建 HTTP 服务,接收并处理 Bot 命令请求 - 实现插件化命令系统,支持通过 Plugin 接口扩展新命令 - 内置菜单、启用/禁用、时间查询等基础命令 - 新增图片生成插件,对接 OpenAI Images API - 支持管理员权限控制、命令动态启禁用 - 提供完整配置管理(.env)与 Docker 部署方案
93 lines
2.0 KiB
Go
93 lines
2.0 KiB
Go
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)}
|
|
}
|