Refactor post handling and add command setup for Telegram bot

This commit is contained in:
dela
2026-02-05 00:52:29 +08:00
parent d82badc6e3
commit 8a6859269c
9 changed files with 612 additions and 21 deletions

View File

@@ -0,0 +1,89 @@
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)
}