mirror of
https://github.com/woodchen-ink/Q58Bot.git
synced 2025-07-19 14:22:05 +08:00
输出关键词按字母排序
This commit is contained in:
parent
ff668a0ef7
commit
f56fd4e91a
@ -4,7 +4,6 @@ package service
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
"strings"
|
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5"
|
tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5"
|
||||||
@ -148,211 +147,3 @@ func RunMessageHandler() error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 下面是辅助函数部分
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//
|
|
||||||
|
|
||||||
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, "获取关键词列表时发生错误。")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if len(keywords) == 0 {
|
|
||||||
core.SendMessage(bot, message.Chat.ID, "关键词列表为空。")
|
|
||||||
} else {
|
|
||||||
core.SendLongMessage(bot, message.Chat.ID, "当前关键词列表:", keywords)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
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, "检查关键词时发生错误。")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if !exists {
|
|
||||||
err = core.DB.AddKeyword(keyword)
|
|
||||||
if err != nil {
|
|
||||||
core.SendErrorMessage(bot, message.Chat.ID, "添加关键词时发生错误。")
|
|
||||||
} 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))
|
|
||||||
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, "搜索关键词时发生错误。")
|
|
||||||
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, "删除关键词时发生错误。")
|
|
||||||
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))
|
|
||||||
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))
|
|
||||||
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))
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
exists, err = core.DB.WhitelistExists(domain)
|
|
||||||
if err != nil {
|
|
||||||
core.SendErrorMessage(bot, message.Chat.ID, fmt.Sprintf("验证添加操作时发生错误: %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))
|
|
||||||
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))
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
exists, err = core.DB.WhitelistExists(domain)
|
|
||||||
if err != nil {
|
|
||||||
core.SendErrorMessage(bot, message.Chat.ID, fmt.Sprintf("验证删除操作时发生错误: %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))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// ShouldFilter 检查消息是否包含关键词或者非白名单链接
|
|
||||||
|
219
service/message_handler_utils.go
Normal file
219
service/message_handler_utils.go
Normal file
@ -0,0 +1,219 @@
|
|||||||
|
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, "获取关键词列表时发生错误。")
|
||||||
|
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, "检查关键词时发生错误。")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if !exists {
|
||||||
|
err = core.DB.AddKeyword(keyword)
|
||||||
|
if err != nil {
|
||||||
|
core.SendErrorMessage(bot, message.Chat.ID, "添加关键词时发生错误。")
|
||||||
|
} 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))
|
||||||
|
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, "搜索关键词时发生错误。")
|
||||||
|
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, "删除关键词时发生错误。")
|
||||||
|
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))
|
||||||
|
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))
|
||||||
|
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))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
exists, err = core.DB.WhitelistExists(domain)
|
||||||
|
if err != nil {
|
||||||
|
core.SendErrorMessage(bot, message.Chat.ID, fmt.Sprintf("验证添加操作时发生错误: %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))
|
||||||
|
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))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
exists, err = core.DB.WhitelistExists(domain)
|
||||||
|
if err != nil {
|
||||||
|
core.SendErrorMessage(bot, message.Chat.ID, fmt.Sprintf("验证删除操作时发生错误: %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))
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user