mirror of
https://github.com/songquanpeng/one-api.git
synced 2025-09-29 14:46:38 +08:00
90 lines
2.4 KiB
Go
90 lines
2.4 KiB
Go
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()
|
||
}
|