From c76281b6e0068a1f79bf27ffc15475e0f156fcf4 Mon Sep 17 00:00:00 2001 From: c9s Date: Sun, 23 Jan 2022 01:50:27 +0800 Subject: [PATCH] interact: fix telegram session restore --- pkg/bbgo/environment.go | 30 +++++++++++++++--------------- pkg/interact/interact.go | 2 +- pkg/interact/telegram.go | 23 ++++++++--------------- 3 files changed, 24 insertions(+), 31 deletions(-) diff --git a/pkg/bbgo/environment.go b/pkg/bbgo/environment.go index 0d36ea05b..46433879e 100644 --- a/pkg/bbgo/environment.go +++ b/pkg/bbgo/environment.go @@ -713,24 +713,24 @@ func (environ *Environment) setupSlack(userConfig *Config, slackToken string, pe var sessions = interact.SlackSessionMap{} var sessionStore = persistence.NewStore("bbgo", "slack") if err := sessionStore.Load(&sessions); err != nil { - log.WithError(err).Errorf("sessions load error") - } else { - for _, session := range sessions { - if session.IsAuthorized() { - // notifier.AddChat(session.Chat) - } - } - // you must restore the session after the notifier updates - // messenger.RestoreSessions(sessions) + } else { + // TODO: this is not necessary for slack, but we should find a way to restore the sessions + /* + for _, session := range sessions { + if session.IsAuthorized() { + // notifier.AddChat(session.Chat) + } + } + messenger.RestoreSessions(sessions) + messenger.OnAuthorized(func(userSession *interact.SlackSession) { + if userSession.IsAuthorized() { + // notifier.AddChat(userSession.Chat) + } + }) + */ } - messenger.OnAuthorized(func(userSession *interact.SlackSession) { - if userSession.IsAuthorized() { - // notifier.AddChat(userSession.Chat) - } - - }) interact.AddMessenger(messenger) } diff --git a/pkg/interact/interact.go b/pkg/interact/interact.go index 1c46708df..a4c4501ee 100644 --- a/pkg/interact/interact.go +++ b/pkg/interact/interact.go @@ -264,7 +264,7 @@ func (it *Interact) Start(ctx context.Context) error { // TODO: use go routine and context for _, m := range it.messengers { - m.Start(ctx) + go m.Start(ctx) } return nil } diff --git a/pkg/interact/telegram.go b/pkg/interact/telegram.go index 332442178..a1206afc1 100644 --- a/pkg/interact/telegram.go +++ b/pkg/interact/telegram.go @@ -70,14 +70,6 @@ func (r *TelegramReply) Message(message string) { r.set = true } -func (r *TelegramReply) Choose(prompt string, options ...Option) { - -} - -func (r *TelegramReply) InputText(prompt string, textFields ...TextField) { - r.message = prompt -} - func (r *TelegramReply) RemoveKeyboard() { r.menu.ReplyKeyboardRemove = true r.set = true @@ -139,11 +131,6 @@ func (tm *Telegram) SetTextMessageResponder(responder Responder) { func (tm *Telegram) Start(context.Context) { tm.Bot.Handle(telebot.OnCallback, func(c *telebot.Callback) { log.Infof("[telegram] onCallback: %+v", c) - if c.Message != nil { - session := tm.loadSession(c.Message) - _ = session - } - // c.Sender }) tm.Bot.Handle(telebot.OnText, func(m *telebot.Message) { @@ -185,7 +172,7 @@ func (tm *Telegram) Start(context.Context) { log.WithError(err).Errorf("[telegram] set commands error") } - go tm.Bot.Start() + tm.Bot.Start() } func checkSendErr(m *telebot.Message, err error) { @@ -201,11 +188,14 @@ func (tm *Telegram) loadSession(m *telebot.Message) *TelegramSession { session, ok := tm.sessions[m.Chat.ID] if ok { + log.Infof("[telegram] loaded existing session: %+v", session) return session } session = NewTelegramSession(tm, m) tm.sessions[m.Chat.ID] = session + + log.Infof("[telegram] allocated a new session: %+v", session) return session } @@ -241,7 +231,7 @@ func (tm *Telegram) Sessions() TelegramSessionMap { } func (tm *Telegram) RestoreSessions(sessions TelegramSessionMap) { - if len(sessions) == 0 { + if sessions == nil || len(sessions) == 0 { return } @@ -252,6 +242,9 @@ func (tm *Telegram) RestoreSessions(sessions TelegramSessionMap) { continue } + // update telegram context reference + session.telegram = tm + if session.IsAuthorized() { if _, err := tm.Bot.Send(session.Chat, fmt.Sprintf("Hi %s, I'm back. Your telegram session is restored.", session.User.Username)); err != nil { log.WithError(err).Error("[telegram] can not send telegram message")