From 6bff724db012dc9260a57ecefe4efbefdd0b42d1 Mon Sep 17 00:00:00 2001 From: Manfred Touron Date: Mon, 17 Sep 2018 17:37:45 +0200 Subject: [PATCH] feat(bot): berty-bot-example automatically replies to incoming messages --- .../go/bot/examples/berty-bot-example/main.go | 16 +++--------- client/go/bot/handler.go | 26 +++++++++++++++++++ client/go/bot/message.go | 14 ++++++++++ client/go/bot/option.go | 1 - 4 files changed, 44 insertions(+), 13 deletions(-) create mode 100644 client/go/bot/message.go diff --git a/client/go/bot/examples/berty-bot-example/main.go b/client/go/bot/examples/berty-bot-example/main.go index 140a2b2acd..f777a71b23 100644 --- a/client/go/bot/examples/berty-bot-example/main.go +++ b/client/go/bot/examples/berty-bot-example/main.go @@ -2,9 +2,11 @@ package main import ( "flag" + "fmt" "log" "berty.tech/client/go/bot" + "berty.tech/core/entity" ) var addr = flag.String("addr", "127.0.0.1:1337", "daemon gRPC address") @@ -21,18 +23,8 @@ func main() { panic(err) } - b.AddHandlerFunc(func(b *bot.Bot, e *bot.Event) error { - // do stuff - return nil - }) - b.AddHandler(bot.Trigger{ - If: func(b *bot.Bot, e *bot.Event) bool { - return true - }, - Then: func(b *bot.Bot, e *bot.Event) error { - // do stuff - return nil - }, + b.AddMessageHandlerFunc(func(b *bot.Bot, e *bot.Event, msg *entity.Message) error { + return b.Reply(e, &entity.Message{Text: fmt.Sprintf("hello! (%s)", msg.Text)}) }) log.Println("starting bot...") diff --git a/client/go/bot/handler.go b/client/go/bot/handler.go index 2e2acd3b41..af4f323bd5 100644 --- a/client/go/bot/handler.go +++ b/client/go/bot/handler.go @@ -1,5 +1,10 @@ package bot +import ( + "berty.tech/core/api/p2p" + "berty.tech/core/entity" +) + // // Handler // @@ -45,3 +50,24 @@ func (t Trigger) Handle(bot *Bot, event *Event) error { } return nil } + +// +// MessageHandler +// + +type MessageHandlerFunc func(*Bot, *Event, *entity.Message) error + +func (b *Bot) AddMessageHandlerFunc(f MessageHandlerFunc) { + b.AddHandler(Trigger{ + If: func(b *Bot, e *Event) bool { + return e.Kind == p2p.Kind_ConversationNewMessage + }, + Then: func(b *Bot, e *Event) error { + nm, err := e.GetConversationNewMessageAttrs() + if err != nil { + return err + } + return f(b, e, nm.Message) + }, + }) +} diff --git a/client/go/bot/message.go b/client/go/bot/message.go new file mode 100644 index 0000000000..744ce3970d --- /dev/null +++ b/client/go/bot/message.go @@ -0,0 +1,14 @@ +package bot + +import ( + "berty.tech/core/api/node" + "berty.tech/core/entity" +) + +func (b *Bot) Reply(e *Event, m *entity.Message) error { + _, err := b.client.Node().ConversationAddMessage(e.ctx, &node.ConversationAddMessageInput{ + Conversation: &entity.Conversation{ID: e.ConversationID}, + Message: m, + }) + return err +} diff --git a/client/go/bot/option.go b/client/go/bot/option.go index 2a008c98dc..974ea851f8 100644 --- a/client/go/bot/option.go +++ b/client/go/bot/option.go @@ -47,7 +47,6 @@ func WithAutoAcceptInvites() Option { if e.Kind != p2p.Kind_ContactRequest { return nil } - _, err := b.client.Node().ContactAcceptRequest(e.ctx, &entity.Contact{ ID: e.SenderID, })