Q58Bot/service/message_handler_utils.go

233 lines
7.6 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package service
import (
"fmt"
"sort"
"strings"
tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5"
"github.com/woodchen-ink/Q58Bot/core"
)
func HandleKeywordCommand(bot *tgbotapi.BotAPI, message *tgbotapi.Message, command string, args string) {
args = strings.TrimSpace(args)
switch command {
case "list":
handleListKeywords(bot, message)
case "add":
handleAddKeyword(bot, message, args)
case "delete":
handleDeleteKeyword(bot, message, args)
case "deletecontaining":
handleDeleteContainingKeyword(bot, message, args)
default:
core.SendErrorMessage(bot, message.Chat.ID, "无效的命令或参数。")
}
}
func handleListKeywords(bot *tgbotapi.BotAPI, message *tgbotapi.Message) {
keywords, err := core.DB.GetAllKeywords()
if err != nil {
core.SendErrorMessage(bot, message.Chat.ID, "获取关键词列表时发生错误。")
logger.Printf("Failed to get keywords: %v", err)
return
}
if len(keywords) == 0 {
core.SendMessage(bot, message.Chat.ID, "关键词列表为空。")
} else {
// 对关键词进行排序
sort.Strings(keywords)
// 直接发送排序后的关键词列表
err := core.SendLongMessage(bot, message.Chat.ID, "当前关键词列表(按字母顺序排序):", keywords)
if err != nil {
core.SendErrorMessage(bot, message.Chat.ID, "发送关键词列表时发生错误。")
}
}
}
func handleAddKeyword(bot *tgbotapi.BotAPI, message *tgbotapi.Message, keyword string) {
if keyword == "" {
core.SendErrorMessage(bot, message.Chat.ID, "请提供要添加的关键词。")
return
}
exists, err := core.DB.KeywordExists(keyword)
if err != nil {
core.SendErrorMessage(bot, message.Chat.ID, "检查关键词时发生错误。")
logger.Printf("Failed to check keyword: %v", err)
return
}
if !exists {
err = core.DB.AddKeyword(keyword)
if err != nil {
core.SendErrorMessage(bot, message.Chat.ID, "添加关键词时发生错误。")
logger.Printf("Failed to add keyword: %v", err)
} else {
core.SendMessage(bot, message.Chat.ID, fmt.Sprintf("关键词 '%s' 已添加。", keyword))
}
} else {
core.SendMessage(bot, message.Chat.ID, fmt.Sprintf("关键词 '%s' 已存在。", keyword))
}
}
func handleDeleteKeyword(bot *tgbotapi.BotAPI, message *tgbotapi.Message, keyword string) {
if keyword == "" {
core.SendErrorMessage(bot, message.Chat.ID, "请提供要删除的关键词。")
return
}
removed, err := core.DB.RemoveKeyword(keyword)
if err != nil {
core.SendErrorMessage(bot, message.Chat.ID, fmt.Sprintf("删除关键词 '%s' 时发生错误: %v", keyword, err))
logger.Printf("Failed to remove keyword '%s': %v", keyword, err)
return
}
if removed {
core.SendMessage(bot, message.Chat.ID, fmt.Sprintf("关键词 '%s' 已成功删除。", keyword))
} else {
handleSimilarKeywords(bot, message, keyword)
}
}
func handleSimilarKeywords(bot *tgbotapi.BotAPI, message *tgbotapi.Message, keyword string) {
similarKeywords, err := core.DB.SearchKeywords(keyword)
if err != nil {
core.SendErrorMessage(bot, message.Chat.ID, "搜索关键词时发生错误。")
logger.Printf("Failed to search keywords: %v", err)
return
}
if len(similarKeywords) > 0 {
core.SendLongMessage(bot, message.Chat.ID, fmt.Sprintf("未能删除关键词 '%s'。\n\n以下是相似的关键词", keyword), similarKeywords)
} else {
core.SendMessage(bot, message.Chat.ID, fmt.Sprintf("未能删除关键词 '%s',且未找到相似的关键词。", keyword))
}
}
func handleDeleteContainingKeyword(bot *tgbotapi.BotAPI, message *tgbotapi.Message, substring string) {
if substring == "" {
core.SendErrorMessage(bot, message.Chat.ID, "请提供要删除的子字符串。")
return
}
removedKeywords, err := core.DB.RemoveKeywordsContaining(substring)
if err != nil {
core.SendErrorMessage(bot, message.Chat.ID, "删除关键词时发生错误。")
logger.Printf("Failed to remove keywords: %v", err)
return
}
if len(removedKeywords) > 0 {
core.SendLongMessage(bot, message.Chat.ID, fmt.Sprintf("已删除包含 '%s' 的以下关键词:", substring), removedKeywords)
} else {
core.SendMessage(bot, message.Chat.ID, fmt.Sprintf("没有找到包含 '%s' 的关键词。", substring))
}
}
func HandleWhitelistCommand(bot *tgbotapi.BotAPI, message *tgbotapi.Message, command string, args string) {
args = strings.TrimSpace(args)
switch command {
case "listwhite":
handleListWhitelist(bot, message)
case "addwhite":
handleAddWhitelist(bot, message, args)
case "delwhite":
handleDeleteWhitelist(bot, message, args)
default:
core.SendErrorMessage(bot, message.Chat.ID, "无效的命令或参数。")
}
}
func handleListWhitelist(bot *tgbotapi.BotAPI, message *tgbotapi.Message) {
whitelist, err := core.DB.GetAllWhitelist()
if err != nil {
core.SendErrorMessage(bot, message.Chat.ID, fmt.Sprintf("获取白名单时发生错误: %v", err))
logger.Printf("Failed to get whitelist: %v", err)
return
}
if len(whitelist) == 0 {
core.SendMessage(bot, message.Chat.ID, "白名单为空。")
} else {
core.SendLongMessage(bot, message.Chat.ID, "白名单域名列表:", whitelist)
}
}
func handleAddWhitelist(bot *tgbotapi.BotAPI, message *tgbotapi.Message, domain string) {
if domain == "" {
core.SendErrorMessage(bot, message.Chat.ID, "请提供要添加的域名。")
return
}
domain = strings.ToLower(domain)
exists, err := core.DB.WhitelistExists(domain)
if err != nil {
core.SendErrorMessage(bot, message.Chat.ID, fmt.Sprintf("检查白名单时发生错误: %v", err))
logger.Printf("Failed to check whitelist: %v", err)
return
}
if exists {
core.SendMessage(bot, message.Chat.ID, fmt.Sprintf("域名 '%s' 已在白名单中。", domain))
return
}
err = core.DB.AddWhitelist(domain)
if err != nil {
core.SendErrorMessage(bot, message.Chat.ID, fmt.Sprintf("添加到白名单时发生错误: %v", err))
logger.Printf("Failed to add to whitelist: %v", err)
return
}
exists, err = core.DB.WhitelistExists(domain)
if err != nil {
core.SendErrorMessage(bot, message.Chat.ID, fmt.Sprintf("验证添加操作时发生错误: %v", err))
logger.Printf("Failed to verify add operation: %v", err)
return
}
if exists {
core.SendMessage(bot, message.Chat.ID, fmt.Sprintf("域名 '%s' 已成功添加到白名单。", domain))
} else {
core.SendErrorMessage(bot, message.Chat.ID, fmt.Sprintf("未能添加域名 '%s' 到白名单。", domain))
}
}
func handleDeleteWhitelist(bot *tgbotapi.BotAPI, message *tgbotapi.Message, domain string) {
if domain == "" {
core.SendErrorMessage(bot, message.Chat.ID, "请提供要删除的域名。")
return
}
domain = strings.ToLower(domain)
exists, err := core.DB.WhitelistExists(domain)
if err != nil {
core.SendErrorMessage(bot, message.Chat.ID, fmt.Sprintf("检查白名单时发生错误: %v", err))
logger.Printf("Failed to check whitelist: %v", err)
return
}
if !exists {
core.SendMessage(bot, message.Chat.ID, fmt.Sprintf("域名 '%s' 不在白名单中。", domain))
return
}
err = core.DB.RemoveWhitelist(domain)
if err != nil {
core.SendErrorMessage(bot, message.Chat.ID, fmt.Sprintf("从白名单删除时发生错误: %v", err))
logger.Printf("Failed to remove from whitelist: %v", err)
return
}
exists, err = core.DB.WhitelistExists(domain)
if err != nil {
core.SendErrorMessage(bot, message.Chat.ID, fmt.Sprintf("验证删除操作时发生错误: %v", err))
logger.Printf("Failed to verify delete operation: %v", err)
return
}
if !exists {
core.SendMessage(bot, message.Chat.ID, fmt.Sprintf("域名 '%s' 已成功从白名单中删除。", domain))
} else {
core.SendErrorMessage(bot, message.Chat.ID, fmt.Sprintf("未能从白名单中删除域名 '%s'。", domain))
}
}