mirror of
https://github.com/c9s/bbgo.git
synced 2024-11-14 02:53:50 +00:00
Merge pull request #71 from c9s/refactor/telegram-bot
refactor: telegram bot auth with persistence
This commit is contained in:
commit
af0f45fe19
|
@ -102,6 +102,12 @@ func runConfig(basectx context.Context, userConfig *bbgo.Config) error {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if userConfig.Persistence != nil {
|
||||||
|
if err := environ.ConfigurePersistence(userConfig.Persistence); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
notification := bbgo.Notifiability{
|
notification := bbgo.Notifiability{
|
||||||
SymbolChannelRouter: bbgo.NewPatternChannelRouter(nil),
|
SymbolChannelRouter: bbgo.NewPatternChannelRouter(nil),
|
||||||
SessionChannelRouter: bbgo.NewPatternChannelRouter(nil),
|
SessionChannelRouter: bbgo.NewPatternChannelRouter(nil),
|
||||||
|
@ -141,7 +147,11 @@ func runConfig(basectx context.Context, userConfig *bbgo.Config) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
go bot.Start()
|
var options []telegramnotifier.NotifyOption
|
||||||
|
|
||||||
|
if environ.PersistenceServiceFacade != nil && environ.PersistenceServiceFacade.Redis != nil {
|
||||||
|
options = append(options, telegramnotifier.WithRedisPersistence(environ.PersistenceServiceFacade.Redis))
|
||||||
|
}
|
||||||
|
|
||||||
log.Infof("send the following command to the bbgo bot you created to enable the notification...")
|
log.Infof("send the following command to the bbgo bot you created to enable the notification...")
|
||||||
log.Infof("===========================================")
|
log.Infof("===========================================")
|
||||||
|
@ -149,7 +159,7 @@ func runConfig(basectx context.Context, userConfig *bbgo.Config) error {
|
||||||
log.Infof(" /auth %s", telegramAuthToken)
|
log.Infof(" /auth %s", telegramAuthToken)
|
||||||
log.Infof("")
|
log.Infof("")
|
||||||
log.Infof("===========================================")
|
log.Infof("===========================================")
|
||||||
var notifier = telegramnotifier.New(bot, telegramAuthToken)
|
var notifier = telegramnotifier.New(bot, telegramAuthToken, options...)
|
||||||
notification.AddNotifier(notifier)
|
notification.AddNotifier(notifier)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -161,11 +171,6 @@ func runConfig(basectx context.Context, userConfig *bbgo.Config) error {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if userConfig.Persistence != nil {
|
|
||||||
if err := environ.ConfigurePersistence(userConfig.Persistence); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
trader := bbgo.NewTrader(environ)
|
trader := bbgo.NewTrader(environ)
|
||||||
|
|
||||||
|
|
|
@ -5,16 +5,26 @@ import (
|
||||||
|
|
||||||
log "github.com/sirupsen/logrus"
|
log "github.com/sirupsen/logrus"
|
||||||
tb "gopkg.in/tucnak/telebot.v2"
|
tb "gopkg.in/tucnak/telebot.v2"
|
||||||
|
|
||||||
|
"github.com/c9s/bbgo/pkg/bbgo"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Notifier struct {
|
type Notifier struct {
|
||||||
Bot *tb.Bot
|
Bot *tb.Bot
|
||||||
chatUser *tb.User
|
chatUser *tb.User
|
||||||
channel string
|
channel string
|
||||||
|
|
||||||
|
redis *bbgo.RedisPersistenceService
|
||||||
}
|
}
|
||||||
|
|
||||||
type NotifyOption func(notifier *Notifier)
|
type NotifyOption func(notifier *Notifier)
|
||||||
|
|
||||||
|
func WithRedisPersistence(redis *bbgo.RedisPersistenceService) NotifyOption {
|
||||||
|
return func(notifier *Notifier) {
|
||||||
|
notifier.redis = redis
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// start bot daemon
|
// start bot daemon
|
||||||
func New(bot *tb.Bot, authToken string, options ...NotifyOption) *Notifier {
|
func New(bot *tb.Bot, authToken string, options ...NotifyOption) *Notifier {
|
||||||
notifier := &Notifier{
|
notifier := &Notifier{
|
||||||
|
@ -26,6 +36,11 @@ func New(bot *tb.Bot, authToken string, options ...NotifyOption) *Notifier {
|
||||||
o(notifier)
|
o(notifier)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
store := notifier.redis.NewStore("bbgo", "telegram")
|
||||||
|
if err := store.Load(notifier.chatUser) ; err == nil {
|
||||||
|
bot.Send(notifier.chatUser, fmt.Sprintf("Hi %s, I'm back", notifier.chatUser.Username))
|
||||||
|
}
|
||||||
|
|
||||||
bot.Handle("/help", func(m *tb.Message) {
|
bot.Handle("/help", func(m *tb.Message) {
|
||||||
helpMsg := `
|
helpMsg := `
|
||||||
help - print help message
|
help - print help message
|
||||||
|
@ -37,12 +52,20 @@ info - print information about current chat
|
||||||
|
|
||||||
// auth check authToken and then set sender id
|
// auth check authToken and then set sender id
|
||||||
bot.Handle("/auth", func(m *tb.Message) {
|
bot.Handle("/auth", func(m *tb.Message) {
|
||||||
log.Info("Receive message: ", m) //debug
|
log.Info("receive message: ", m) //debug
|
||||||
if m.Payload == authToken {
|
if m.Payload == authToken {
|
||||||
notifier.chatUser = m.Sender
|
notifier.chatUser = m.Sender
|
||||||
bot.Send(m.Sender, "User authorized")
|
if err := store.Save(notifier.chatUser); err != nil {
|
||||||
|
log.WithError(err).Error("can not persist telegram chat user")
|
||||||
|
}
|
||||||
|
|
||||||
|
if _, err := bot.Send(m.Sender, fmt.Sprintf("Hi %s, I know you, I will send you the notifications!", m.Sender.Username)) ; err != nil {
|
||||||
|
log.WithError(err).Error("telegram send error")
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
bot.Send(m.Sender, "Error: User authorization failed. Auth token does not match!")
|
if _, err := bot.Send(m.Sender, "Authorization failed. please check your auth token") ; err != nil {
|
||||||
|
log.WithError(err).Error("telegram send error")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -58,6 +81,8 @@ info - print information about current chat
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
go bot.Start()
|
||||||
|
|
||||||
notifier.Bot = bot
|
notifier.Bot = bot
|
||||||
return notifier
|
return notifier
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user