100 lines
3.0 KiB
Go
100 lines
3.0 KiB
Go
package bot
|
|
|
|
import (
|
|
"fmt"
|
|
"strconv"
|
|
"strings"
|
|
|
|
"github.com/celestix/gotgproto/dispatcher"
|
|
"github.com/celestix/gotgproto/ext"
|
|
"github.com/gotd/td/tg"
|
|
"github.com/krau/SaveAny-Bot/dao"
|
|
"github.com/krau/SaveAny-Bot/logger"
|
|
"github.com/krau/SaveAny-Bot/storage"
|
|
)
|
|
|
|
func storageCmd(ctx *ext.Context, update *ext.Update) error {
|
|
userChatID := update.GetUserChat().GetID()
|
|
storages := storage.GetUserStorages(userChatID)
|
|
if len(storages) == 0 {
|
|
ctx.Reply(update, ext.ReplyTextString("无可用的存储"), nil)
|
|
return dispatcher.EndGroups
|
|
}
|
|
markup, err := getSetDefaultStorageMarkup(userChatID, storages)
|
|
if err != nil {
|
|
logger.L.Errorf("Failed to get markup: %s", err)
|
|
ctx.Reply(update, ext.ReplyTextString("获取存储位置失败"), nil)
|
|
return dispatcher.EndGroups
|
|
}
|
|
ctx.Reply(update, ext.ReplyTextString("请选择要设为默认的存储位置"), &ext.ReplyOpts{
|
|
Markup: markup,
|
|
})
|
|
return dispatcher.EndGroups
|
|
}
|
|
|
|
func setDefaultStorage(ctx *ext.Context, update *ext.Update) error {
|
|
args := strings.Split(string(update.CallbackQuery.Data), " ")
|
|
userID, _ := strconv.Atoi(args[1])
|
|
if userID != int(update.CallbackQuery.GetUserID()) {
|
|
ctx.AnswerCallback(&tg.MessagesSetBotCallbackAnswerRequest{
|
|
QueryID: update.CallbackQuery.QueryID,
|
|
Alert: true,
|
|
Message: "你没有权限",
|
|
CacheTime: 5,
|
|
})
|
|
return dispatcher.EndGroups
|
|
}
|
|
cbDataId, _ := strconv.Atoi(args[2])
|
|
storageName, err := dao.GetCallbackData(uint(cbDataId))
|
|
if err != nil {
|
|
logger.L.Errorf("获取回调数据失败: %s", err)
|
|
ctx.AnswerCallback(&tg.MessagesSetBotCallbackAnswerRequest{
|
|
QueryID: update.CallbackQuery.QueryID,
|
|
Alert: true,
|
|
Message: "获取回调数据失败",
|
|
CacheTime: 5,
|
|
})
|
|
return dispatcher.EndGroups
|
|
}
|
|
|
|
selectedStorage, err := storage.GetStorageByName(storageName)
|
|
|
|
if err != nil {
|
|
logger.L.Errorf("获取指定存储失败: %s", err)
|
|
ctx.AnswerCallback(&tg.MessagesSetBotCallbackAnswerRequest{
|
|
QueryID: update.CallbackQuery.QueryID,
|
|
Alert: true,
|
|
Message: "获取指定存储失败",
|
|
CacheTime: 5,
|
|
})
|
|
return dispatcher.EndGroups
|
|
}
|
|
user, err := dao.GetUserByChatID(int64(userID))
|
|
if err != nil {
|
|
logger.L.Errorf("Failed to get user: %s", err)
|
|
ctx.AnswerCallback(&tg.MessagesSetBotCallbackAnswerRequest{
|
|
QueryID: update.CallbackQuery.QueryID,
|
|
Alert: true,
|
|
Message: "获取用户失败",
|
|
CacheTime: 5,
|
|
})
|
|
return dispatcher.EndGroups
|
|
}
|
|
user.DefaultStorage = storageName
|
|
if err := dao.UpdateUser(user); err != nil {
|
|
logger.L.Errorf("Failed to update user: %s", err)
|
|
ctx.AnswerCallback(&tg.MessagesSetBotCallbackAnswerRequest{
|
|
QueryID: update.CallbackQuery.QueryID,
|
|
Alert: true,
|
|
Message: "更新用户失败",
|
|
CacheTime: 5,
|
|
})
|
|
return dispatcher.EndGroups
|
|
}
|
|
ctx.EditMessage(update.EffectiveChat().GetID(), &tg.MessagesEditMessageRequest{
|
|
Message: fmt.Sprintf("已将 %s (%s) 设为默认存储位置", selectedStorage.Name(), selectedStorage.Type()),
|
|
ID: update.CallbackQuery.GetMsgID(),
|
|
})
|
|
return dispatcher.EndGroups
|
|
}
|