one-api/common/telegram/command_bind.go
2024-02-23 18:24:25 +08:00

90 lines
2.4 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 telegram
import (
"fmt"
"one-api/model"
"strings"
"github.com/PaulSonOfLars/gotgbot/v2"
"github.com/PaulSonOfLars/gotgbot/v2/ext"
"github.com/PaulSonOfLars/gotgbot/v2/ext/handlers"
)
func commandBindInit() (handler ext.Handler) {
return handlers.NewConversation(
[]ext.Handler{handlers.NewCommand("bind", commandBindStart)},
map[string][]ext.Handler{
"token": {handlers.NewMessage(noCommands, commandBindToken)},
},
cancelConversationOpts(),
)
}
func commandBindStart(b *gotgbot.Bot, ctx *ext.Context) error {
user := getBindUser(b, ctx)
if user != nil {
ctx.EffectiveMessage.Reply(b, "您的账户已绑定,请解邦后再试", nil)
return handlers.EndConversation()
}
_, err := ctx.EffectiveMessage.Reply(b, "请输入你的访问令牌", &gotgbot.SendMessageOpts{
ParseMode: "html",
ReplyMarkup: cancelConversationInlineKeyboard(),
})
if err != nil {
return fmt.Errorf("failed to send bind start message: %w", err)
}
return handlers.NextConversationState("token")
}
func commandBindToken(b *gotgbot.Bot, ctx *ext.Context) error {
tgUserId := getTGUserId(b, ctx)
if tgUserId == 0 {
return handlers.EndConversation()
}
input := ctx.EffectiveMessage.Text
// 去除input前后空格
input = strings.TrimSpace(input)
user := model.ValidateAccessToken(input)
if user == nil {
// If the number is not valid, try again!
ctx.EffectiveMessage.Reply(b, "Token 错误,请重试", &gotgbot.SendMessageOpts{
ParseMode: "html",
ReplyMarkup: cancelConversationInlineKeyboard(),
})
// We try the age handler again
return handlers.NextConversationState("token")
}
if user.TelegramId != 0 {
ctx.EffectiveMessage.Reply(b, "您的账户已绑定,请解邦后再试", nil)
return handlers.EndConversation()
}
// 查询该tg用户是否已经绑定其他账户
if model.IsTelegramIdAlreadyTaken(tgUserId) {
ctx.EffectiveMessage.Reply(b, "该TG已绑定其他账户请解邦后再试", nil)
return handlers.EndConversation()
}
// 绑定
updateUser := model.User{
Id: user.Id,
TelegramId: tgUserId,
}
err := updateUser.Update(false)
if err != nil {
ctx.EffectiveMessage.Reply(b, "绑定失败,请稍后再试", nil)
return handlers.EndConversation()
}
_, err = ctx.EffectiveMessage.Reply(b, "绑定成功", nil)
if err != nil {
return fmt.Errorf("failed to send bind token message: %w", err)
}
return handlers.EndConversation()
}