90 lines
2.1 KiB
Go
90 lines
2.1 KiB
Go
package telegram
|
|
|
|
import (
|
|
"fmt"
|
|
"strconv"
|
|
"strings"
|
|
|
|
tele "gopkg.in/telebot.v3"
|
|
)
|
|
|
|
func (b *Bot) handleAdminAdd(c tele.Context) error {
|
|
payload := strings.TrimSpace(c.Message().Payload)
|
|
if payload == "" {
|
|
return c.Reply("用法: /admin_add <用户ID>")
|
|
}
|
|
|
|
userID, err := strconv.ParseInt(payload, 10, 64)
|
|
if err != nil {
|
|
return c.Reply("❌ 无效的用户ID")
|
|
}
|
|
|
|
// 检查是否已是管理员
|
|
if b.isAdmin(userID) {
|
|
return c.Reply("⚠️ 该用户已是管理员")
|
|
}
|
|
|
|
if err := b.storage.AddAdmin(userID); err != nil {
|
|
return c.Reply(fmt.Sprintf("❌ 添加失败: %v", err))
|
|
}
|
|
|
|
return c.Reply(fmt.Sprintf("✅ 已添加管理员: %d", userID))
|
|
}
|
|
|
|
func (b *Bot) handleAdminDel(c tele.Context) error {
|
|
payload := strings.TrimSpace(c.Message().Payload)
|
|
if payload == "" {
|
|
return c.Reply("用法: /admin_del <用户ID>")
|
|
}
|
|
|
|
userID, err := strconv.ParseInt(payload, 10, 64)
|
|
if err != nil {
|
|
return c.Reply("❌ 无效的用户ID")
|
|
}
|
|
|
|
// 不能删除超级管理员
|
|
if b.cfg.IsSuperAdmin(userID) {
|
|
return c.Reply("❌ 无法删除超级管理员(配置文件中的管理员)")
|
|
}
|
|
|
|
if err := b.storage.RemoveAdmin(userID); err != nil {
|
|
return c.Reply(fmt.Sprintf("❌ 删除失败: %v", err))
|
|
}
|
|
|
|
return c.Reply(fmt.Sprintf("✅ 已移除管理员: %d", userID))
|
|
}
|
|
|
|
func (b *Bot) handleAdminList(c tele.Context) error {
|
|
// 配置文件中的超级管理员
|
|
superAdmins := b.cfg.Admins
|
|
|
|
// 数据库中的动态管理员
|
|
dbAdmins, err := b.storage.ListAdmins()
|
|
if err != nil {
|
|
return c.Reply(fmt.Sprintf("❌ 获取管理员列表失败: %v", err))
|
|
}
|
|
|
|
var sb strings.Builder
|
|
sb.WriteString("👑 **管理员列表**\n\n")
|
|
|
|
sb.WriteString("**超级管理员(配置文件):**\n")
|
|
if len(superAdmins) == 0 {
|
|
sb.WriteString(" _无_\n")
|
|
} else {
|
|
for _, id := range superAdmins {
|
|
sb.WriteString(fmt.Sprintf(" • `%d`\n", id))
|
|
}
|
|
}
|
|
|
|
sb.WriteString("\n**动态管理员(数据库):**\n")
|
|
if len(dbAdmins) == 0 {
|
|
sb.WriteString(" _无_\n")
|
|
} else {
|
|
for _, id := range dbAdmins {
|
|
sb.WriteString(fmt.Sprintf(" • `%d`\n", id))
|
|
}
|
|
}
|
|
|
|
return c.Reply(sb.String(), tele.ModeMarkdown)
|
|
}
|