diff --git a/agent/agent.go b/agent/agent.go deleted file mode 100644 index 359e8f71..00000000 --- a/agent/agent.go +++ /dev/null @@ -1,2 +0,0 @@ -// Package agent provides an interface for building robots -package agent diff --git a/agent/command/command.go b/agent/command/command.go deleted file mode 100644 index 5b1ab2fe..00000000 --- a/agent/command/command.go +++ /dev/null @@ -1,54 +0,0 @@ -// Package command is an interface for defining bot commands -package command - -var ( - // Commands keyed by golang/regexp patterns - // regexp.Match(key, input) is used to match - Commands = map[string]Command{} -) - -// Command is the interface for specific named -// commands executed via plugins or the bot. -type Command interface { - // Executes the command with args passed in - Exec(args ...string) ([]byte, error) - // Usage of the command - Usage() string - // Description of the command - Description() string - // Name of the command - String() string -} - -type cmd struct { - name string - usage string - description string - exec func(args ...string) ([]byte, error) -} - -func (c *cmd) Description() string { - return c.description -} - -func (c *cmd) Exec(args ...string) ([]byte, error) { - return c.exec(args...) -} - -func (c *cmd) Usage() string { - return c.usage -} - -func (c *cmd) String() string { - return c.name -} - -// NewCommand helps quickly create a new command -func NewCommand(name, usage, description string, exec func(args ...string) ([]byte, error)) Command { - return &cmd{ - name: name, - usage: usage, - description: description, - exec: exec, - } -} diff --git a/agent/command/command_test.go b/agent/command/command_test.go deleted file mode 100644 index 5f8c7cdc..00000000 --- a/agent/command/command_test.go +++ /dev/null @@ -1,65 +0,0 @@ -package command - -import ( - "testing" -) - -func TestCommand(t *testing.T) { - c := &cmd{ - name: "test", - usage: "test usage", - description: "test description", - exec: func(args ...string) ([]byte, error) { - return []byte("test"), nil - }, - } - - if c.String() != c.name { - t.Fatalf("expected name %s got %s", c.name, c.String()) - } - - if c.Usage() != c.usage { - t.Fatalf("expected usage %s got %s", c.usage, c.Usage()) - } - - if c.Description() != c.description { - t.Fatalf("expected description %s got %s", c.description, c.Description()) - } - - if r, err := c.Exec(); err != nil { - t.Fatal(err) - } else if string(r) != "test" { - t.Fatalf("expected exec result test got %s", string(r)) - } -} - -func TestNewCommand(t *testing.T) { - c := &cmd{ - name: "test", - usage: "test usage", - description: "test description", - exec: func(args ...string) ([]byte, error) { - return []byte("test"), nil - }, - } - - nc := NewCommand(c.name, c.usage, c.description, c.exec) - - if nc.String() != c.name { - t.Fatalf("expected name %s got %s", c.name, nc.String()) - } - - if nc.Usage() != c.usage { - t.Fatalf("expected usage %s got %s", c.usage, nc.Usage()) - } - - if nc.Description() != c.description { - t.Fatalf("expected description %s got %s", c.description, nc.Description()) - } - - if r, err := nc.Exec(); err != nil { - t.Fatal(err) - } else if string(r) != "test" { - t.Fatalf("expected exec result test got %s", string(r)) - } -} diff --git a/agent/input/discord/README.md b/agent/input/discord/README.md deleted file mode 100644 index 7031f529..00000000 --- a/agent/input/discord/README.md +++ /dev/null @@ -1,22 +0,0 @@ -# Discord input for micro-bot -[Discord](https://discordapp.com) support for micro bot based on [discordgo](github.com/bwmarrin/discordgo). - -This was originally written by Aleksandr Tihomirov (@zet4) and can be found at https://github.com/zet4/micro-misc/. - -## Options -### discord_token - -You have to supply an application token via `--discord_token`. - -Head over to Discord's [developer introduction](https://discordapp.com/developers/docs/intro) -to learn how to create applications and how the API works. - -### discord_prefix - -Set a command prefix with `--discord_prefix`. The default prefix is `Micro `. -You can mention the bot or use the prefix to run a command. - -### discord_whitelist - -Pass a list of comma-separated user IDs with `--discord_whitelist`. Only allow -these users to use the bot. diff --git a/agent/input/discord/conn.go b/agent/input/discord/conn.go deleted file mode 100644 index e1208071..00000000 --- a/agent/input/discord/conn.go +++ /dev/null @@ -1,116 +0,0 @@ -package discord - -import ( - "errors" - "strings" - "sync" - - "github.com/bwmarrin/discordgo" - "github.com/micro/go-micro/v3/agent/input" - "github.com/micro/go-micro/v3/logger" -) - -type discordConn struct { - master *discordInput - exit chan struct{} - recv chan *discordgo.Message - - sync.Mutex -} - -func newConn(master *discordInput) *discordConn { - conn := &discordConn{ - master: master, - exit: make(chan struct{}), - recv: make(chan *discordgo.Message), - } - - conn.master.session.AddHandler(func(s *discordgo.Session, m *discordgo.MessageCreate) { - if m.Author.ID == master.botID { - return - } - - whitelisted := false - for _, ID := range conn.master.whitelist { - if m.Author.ID == ID { - whitelisted = true - break - } - } - - if len(master.whitelist) > 0 && !whitelisted { - return - } - - var valid bool - m.Message.Content, valid = conn.master.prefixfn(m.Message.Content) - if !valid { - return - } - - conn.recv <- m.Message - }) - - return conn -} - -func (dc *discordConn) Recv(event *input.Event) error { - for { - select { - case <-dc.exit: - return errors.New("connection closed") - case msg := <-dc.recv: - - event.From = msg.ChannelID + ":" + msg.Author.ID - event.To = dc.master.botID - event.Type = input.TextEvent - event.Data = []byte(msg.Content) - return nil - } - } -} - -func ChunkString(s string, chunkSize int) []string { - var chunks []string - runes := []rune(s) - - if len(runes) == 0 { - return []string{s} - } - - for i := 0; i < len(runes); i += chunkSize { - nn := i + chunkSize - if nn > len(runes) { - nn = len(runes) - } - chunks = append(chunks, string(runes[i:nn])) - } - return chunks -} - -func (dc *discordConn) Send(e *input.Event) error { - fields := strings.Split(e.To, ":") - for _, chunk := range ChunkString(string(e.Data), 2000) { - _, err := dc.master.session.ChannelMessageSend(fields[0], chunk) - if err != nil { - if logger.V(logger.ErrorLevel, logger.DefaultLogger) { - logger.Error("[bot][loop][send]", err) - } - } - } - return nil -} - -func (dc *discordConn) Close() error { - if err := dc.master.session.Close(); err != nil { - return err - } - - select { - case <-dc.exit: - return nil - default: - close(dc.exit) - } - return nil -} diff --git a/agent/input/discord/discord.go b/agent/input/discord/discord.go deleted file mode 100644 index c672f325..00000000 --- a/agent/input/discord/discord.go +++ /dev/null @@ -1,153 +0,0 @@ -package discord - -import ( - "fmt" - "sync" - - "errors" - "strings" - - "github.com/bwmarrin/discordgo" - "github.com/micro/cli/v2" - "github.com/micro/go-micro/v3/agent/input" -) - -func init() { - input.Inputs["discord"] = newInput() -} - -func newInput() *discordInput { - return &discordInput{} -} - -type discordInput struct { - token string - whitelist []string - prefix string - prefixfn func(string) (string, bool) - botID string - - session *discordgo.Session - - sync.Mutex - running bool - exit chan struct{} -} - -func (d *discordInput) Flags() []cli.Flag { - return []cli.Flag{ - &cli.StringFlag{ - Name: "discord_token", - EnvVars: []string{"MICRO_DISCORD_TOKEN"}, - Usage: "Discord token (prefix with Bot if it's for bot account)", - }, - &cli.StringFlag{ - Name: "discord_whitelist", - EnvVars: []string{"MICRO_DISCORD_WHITELIST"}, - Usage: "Discord Whitelist (seperated by ,)", - }, - &cli.StringFlag{ - Name: "discord_prefix", - Usage: "Discord Prefix", - EnvVars: []string{"MICRO_DISCORD_PREFIX"}, - Value: "Micro ", - }, - } -} - -func (d *discordInput) Init(ctx *cli.Context) error { - token := ctx.String("discord_token") - whitelist := ctx.String("discord_whitelist") - prefix := ctx.String("discord_prefix") - - if len(token) == 0 { - return errors.New("require token") - } - - d.token = token - d.prefix = prefix - - if len(whitelist) > 0 { - d.whitelist = strings.Split(whitelist, ",") - } - - return nil -} - -func (d *discordInput) Start() error { - if len(d.token) == 0 { - return errors.New("missing discord configuration") - } - - d.Lock() - defer d.Unlock() - - if d.running { - return nil - } - - var err error - d.session, err = discordgo.New("Bot " + d.token) - if err != nil { - return err - } - - u, err := d.session.User("@me") - if err != nil { - return err - } - - d.botID = u.ID - d.prefixfn = CheckPrefixFactory(fmt.Sprintf("<@%s> ", d.botID), fmt.Sprintf("<@!%s> ", d.botID), d.prefix) - - d.exit = make(chan struct{}) - d.running = true - - return nil -} - -func (d *discordInput) Stream() (input.Conn, error) { - d.Lock() - defer d.Unlock() - if !d.running { - return nil, errors.New("not running") - } - - //Fire-n-forget close just in case... - d.session.Close() - - conn := newConn(d) - if err := d.session.Open(); err != nil { - return nil, err - } - return conn, nil -} - -func (d *discordInput) Stop() error { - d.Lock() - defer d.Unlock() - - if !d.running { - return nil - } - - close(d.exit) - d.running = false - return nil -} - -func (d *discordInput) String() string { - return "discord" -} - -// CheckPrefixFactory Creates a prefix checking function and stuff. -func CheckPrefixFactory(prefixes ...string) func(string) (string, bool) { - return func(content string) (string, bool) { - for _, prefix := range prefixes { - if strings.HasPrefix(content, prefix) { - return strings.TrimPrefix(content, prefix), true - } - } - return "", false - } -} diff --git a/agent/input/input.go b/agent/input/input.go deleted file mode 100644 index 58a2ba10..00000000 --- a/agent/input/input.go +++ /dev/null @@ -1,55 +0,0 @@ -// Package input is an interface for bot inputs -package input - -import ( - "github.com/micro/cli/v2" -) - -type EventType string - -const ( - TextEvent EventType = "text" -) - -var ( - // Inputs keyed by name - // Example slack or hipchat - Inputs = map[string]Input{} -) - -// Event is the unit sent and received -type Event struct { - Type EventType - From string - To string - Data []byte - Meta map[string]interface{} -} - -// Input is an interface for sources which -// provide a way to communicate with the bot. -// Slack, HipChat, XMPP, etc. -type Input interface { - // Provide cli flags - Flags() []cli.Flag - // Initialise input using cli context - Init(*cli.Context) error - // Stream events from the input - Stream() (Conn, error) - // Start the input - Start() error - // Stop the input - Stop() error - // name of the input - String() string -} - -// Conn interface provides a way to -// send and receive events. Send and -// Recv both block until succeeding -// or failing. -type Conn interface { - Close() error - Recv(*Event) error - Send(*Event) error -} diff --git a/agent/input/slack/conn.go b/agent/input/slack/conn.go deleted file mode 100644 index b6422e88..00000000 --- a/agent/input/slack/conn.go +++ /dev/null @@ -1,160 +0,0 @@ -package slack - -import ( - "errors" - "fmt" - "strings" - "sync" - "time" - - "github.com/micro/go-micro/v3/agent/input" - "github.com/nlopes/slack" -) - -// Satisfies the input.Conn interface -type slackConn struct { - auth *slack.AuthTestResponse - rtm *slack.RTM - exit chan bool - - sync.Mutex - names map[string]string -} - -func (s *slackConn) run() { - // func retrieves user names and maps to IDs - setNames := func() { - names := make(map[string]string) - users, err := s.rtm.Client.GetUsers() - if err != nil { - return - } - - for _, user := range users { - names[user.ID] = user.Name - } - - s.Lock() - s.names = names - s.Unlock() - } - - setNames() - - t := time.NewTicker(time.Minute) - defer t.Stop() - - for { - select { - case <-s.exit: - return - case <-t.C: - setNames() - } - } -} - -func (s *slackConn) getName(id string) string { - s.Lock() - name := s.names[id] - s.Unlock() - return name -} - -func (s *slackConn) Close() error { - select { - case <-s.exit: - return nil - default: - close(s.exit) - } - return nil -} - -func (s *slackConn) Recv(event *input.Event) error { - if event == nil { - return errors.New("event cannot be nil") - } - - for { - select { - case <-s.exit: - return errors.New("connection closed") - case e := <-s.rtm.IncomingEvents: - switch ev := e.Data.(type) { - case *slack.MessageEvent: - // only accept type message - if ev.Type != "message" { - continue - } - - // only accept DMs or messages to me - switch { - case strings.HasPrefix(ev.Channel, "D"): - case strings.HasPrefix(ev.Text, s.auth.User): - case strings.HasPrefix(ev.Text, fmt.Sprintf("<@%s>", s.auth.UserID)): - default: - continue - } - - // Strip username from text - switch { - case strings.HasPrefix(ev.Text, s.auth.User): - args := strings.Split(ev.Text, " ")[1:] - ev.Text = strings.Join(args, " ") - event.To = s.auth.User - case strings.HasPrefix(ev.Text, fmt.Sprintf("<@%s>", s.auth.UserID)): - args := strings.Split(ev.Text, " ")[1:] - ev.Text = strings.Join(args, " ") - event.To = s.auth.UserID - } - - if event.Meta == nil { - event.Meta = make(map[string]interface{}) - } - - // fill in the blanks - event.From = ev.Channel + ":" + ev.User - event.Type = input.TextEvent - event.Data = []byte(ev.Text) - event.Meta["reply"] = ev - return nil - case *slack.InvalidAuthEvent: - return errors.New("invalid credentials") - } - } - } -} - -func (s *slackConn) Send(event *input.Event) error { - var channel, message, name string - - if len(event.To) == 0 { - return errors.New("require Event.To") - } - - parts := strings.Split(event.To, ":") - - if len(parts) == 2 { - channel = parts[0] - name = s.getName(parts[1]) - // try using reply meta - } else if ev, ok := event.Meta["reply"]; ok { - channel = ev.(*slack.MessageEvent).Channel - name = s.getName(ev.(*slack.MessageEvent).User) - } - - // don't know where to send the message - if len(channel) == 0 { - return errors.New("could not determine who message is to") - } - - if len(name) == 0 || strings.HasPrefix(channel, "D") { - message = string(event.Data) - } else { - message = fmt.Sprintf("@%s: %s", name, string(event.Data)) - } - - s.rtm.SendMessage(s.rtm.NewOutgoingMessage(message, channel)) - return nil -} diff --git a/agent/input/slack/slack.go b/agent/input/slack/slack.go deleted file mode 100644 index 33e64a87..00000000 --- a/agent/input/slack/slack.go +++ /dev/null @@ -1,147 +0,0 @@ -package slack - -import ( - "errors" - "sync" - - "github.com/micro/cli/v2" - "github.com/micro/go-micro/v3/agent/input" - "github.com/nlopes/slack" -) - -type slackInput struct { - debug bool - token string - - sync.Mutex - running bool - exit chan bool - - api *slack.Client -} - -func init() { - input.Inputs["slack"] = NewInput() -} - -func (p *slackInput) Flags() []cli.Flag { - return []cli.Flag{ - &cli.BoolFlag{ - Name: "slack_debug", - Usage: "Slack debug output", - EnvVars: []string{"MICRO_SLACK_DEBUG"}, - }, - &cli.StringFlag{ - Name: "slack_token", - Usage: "Slack token", - EnvVars: []string{"MICRO_SLACK_TOKEN"}, - }, - } -} - -func (p *slackInput) Init(ctx *cli.Context) error { - debug := ctx.Bool("slack_debug") - token := ctx.String("slack_token") - - if len(token) == 0 { - return errors.New("missing slack token") - } - - p.debug = debug - p.token = token - - return nil -} - -func (p *slackInput) Stream() (input.Conn, error) { - p.Lock() - defer p.Unlock() - - if !p.running { - return nil, errors.New("not running") - } - - // test auth - auth, err := p.api.AuthTest() - if err != nil { - return nil, err - } - - rtm := p.api.NewRTM() - exit := make(chan bool) - - go rtm.ManageConnection() - - go func() { - select { - case <-p.exit: - select { - case <-exit: - return - default: - close(exit) - } - case <-exit: - } - - rtm.Disconnect() - }() - - conn := &slackConn{ - auth: auth, - rtm: rtm, - exit: exit, - names: make(map[string]string), - } - - go conn.run() - - return conn, nil -} - -func (p *slackInput) Start() error { - if len(p.token) == 0 { - return errors.New("missing slack token") - } - - p.Lock() - defer p.Unlock() - - if p.running { - return nil - } - - api := slack.New(p.token, slack.OptionDebug(p.debug)) - - // test auth - _, err := api.AuthTest() - if err != nil { - return err - } - - p.api = api - p.exit = make(chan bool) - p.running = true - return nil -} - -func (p *slackInput) Stop() error { - p.Lock() - defer p.Unlock() - - if !p.running { - return nil - } - - close(p.exit) - p.running = false - return nil -} - -func (p *slackInput) String() string { - return "slack" -} - -func NewInput() input.Input { - return &slackInput{} -} diff --git a/agent/input/telegram/README.md b/agent/input/telegram/README.md deleted file mode 100644 index c68cdeca..00000000 --- a/agent/input/telegram/README.md +++ /dev/null @@ -1,18 +0,0 @@ -# Telegram Messenger input for micro bot -[Telegram](https://telegram.org) support for micro bot based on [telegram-bot-api](https://github.com/go-telegram-bot-api/telegram-bot-api). - -## Options -### --telegram_token (required) - -Sets bot's token for interacting with API. - -Head over to Telegram's [API documentation](https://core.telegram.org/bots/api) -to learn how to create bots and how the API works. - -### --telegram_debug - -Sets the debug flag to make the bot's output verbose. - -### --telegram_whitelist - -Sets a list of comma-separated nicknames (without @ symbol in the beginning) for interacting with bot. Only these users can use the bot. diff --git a/agent/input/telegram/conn.go b/agent/input/telegram/conn.go deleted file mode 100644 index 61a08c91..00000000 --- a/agent/input/telegram/conn.go +++ /dev/null @@ -1,115 +0,0 @@ -package telegram - -import ( - "errors" - "strings" - "sync" - - "github.com/forestgiant/sliceutil" - "github.com/micro/go-micro/v3/agent/input" - "github.com/micro/go-micro/v3/logger" - tgbotapi "gopkg.in/telegram-bot-api.v4" -) - -type telegramConn struct { - input *telegramInput - - recv <-chan tgbotapi.Update - exit chan bool - - syncCond *sync.Cond - mutex sync.Mutex -} - -func newConn(input *telegramInput) (*telegramConn, error) { - conn := &telegramConn{ - input: input, - } - - conn.syncCond = sync.NewCond(&conn.mutex) - - go conn.run() - - return conn, nil -} - -func (tc *telegramConn) run() { - u := tgbotapi.NewUpdate(0) - u.Timeout = 60 - updates, err := tc.input.api.GetUpdatesChan(u) - if err != nil { - return - } - - tc.recv = updates - tc.syncCond.Signal() - - select { - case <-tc.exit: - return - } -} - -func (tc *telegramConn) Close() error { - return nil -} - -func (tc *telegramConn) Recv(event *input.Event) error { - if event == nil { - return errors.New("event cannot be nil") - } - - for { - if tc.recv == nil { - tc.mutex.Lock() - tc.syncCond.Wait() - } - - update := <-tc.recv - - if update.Message == nil || (len(tc.input.whitelist) > 0 && !sliceutil.Contains(tc.input.whitelist, update.Message.From.UserName)) { - continue - } - - if event.Meta == nil { - event.Meta = make(map[string]interface{}) - } - - event.Type = input.TextEvent - event.From = update.Message.From.UserName - event.To = tc.input.api.Self.UserName - event.Data = []byte(update.Message.Text) - event.Meta["chatId"] = update.Message.Chat.ID - event.Meta["chatType"] = update.Message.Chat.Type - event.Meta["messageId"] = update.Message.MessageID - - return nil - } -} - -func (tc *telegramConn) Send(event *input.Event) error { - messageText := strings.TrimSpace(string(event.Data)) - - chatId := event.Meta["chatId"].(int64) - chatType := ChatType(event.Meta["chatType"].(string)) - - msgConfig := tgbotapi.NewMessage(chatId, messageText) - msgConfig.ParseMode = tgbotapi.ModeHTML - - if sliceutil.Contains([]ChatType{Group, Supergroup}, chatType) { - msgConfig.ReplyToMessageID = event.Meta["messageId"].(int) - } - - _, err := tc.input.api.Send(msgConfig) - - if err != nil { - // probably it could be because of nested HTML tags -- telegram doesn't allow nested tags - if logger.V(logger.ErrorLevel, logger.DefaultLogger) { - logger.Error("[telegram][Send] error:", err) - } - msgConfig.Text = "This bot couldn't send the response (Internal error)" - tc.input.api.Send(msgConfig) - } - - return nil -} diff --git a/agent/input/telegram/telegram.go b/agent/input/telegram/telegram.go deleted file mode 100644 index 3cec8596..00000000 --- a/agent/input/telegram/telegram.go +++ /dev/null @@ -1,101 +0,0 @@ -package telegram - -import ( - "errors" - "strings" - "sync" - - "github.com/micro/cli/v2" - "github.com/micro/go-micro/v3/agent/input" - tgbotapi "gopkg.in/telegram-bot-api.v4" -) - -type telegramInput struct { - sync.Mutex - - debug bool - token string - whitelist []string - - api *tgbotapi.BotAPI -} - -type ChatType string - -const ( - Private ChatType = "private" - Group ChatType = "group" - Supergroup ChatType = "supergroup" -) - -func init() { - input.Inputs["telegram"] = &telegramInput{} -} - -func (ti *telegramInput) Flags() []cli.Flag { - return []cli.Flag{ - &cli.BoolFlag{ - Name: "telegram_debug", - EnvVars: []string{"MICRO_TELEGRAM_DEBUG"}, - Usage: "Telegram debug output", - }, - &cli.StringFlag{ - Name: "telegram_token", - EnvVars: []string{"MICRO_TELEGRAM_TOKEN"}, - Usage: "Telegram token", - }, - &cli.StringFlag{ - Name: "telegram_whitelist", - EnvVars: []string{"MICRO_TELEGRAM_WHITELIST"}, - Usage: "Telegram bot's users (comma-separated values)", - }, - } -} - -func (ti *telegramInput) Init(ctx *cli.Context) error { - ti.debug = ctx.Bool("telegram_debug") - ti.token = ctx.String("telegram_token") - - whitelist := ctx.String("telegram_whitelist") - - if whitelist != "" { - ti.whitelist = strings.Split(whitelist, ",") - } - - if len(ti.token) == 0 { - return errors.New("missing telegram token") - } - - return nil -} - -func (ti *telegramInput) Stream() (input.Conn, error) { - ti.Lock() - defer ti.Unlock() - - return newConn(ti) -} - -func (ti *telegramInput) Start() error { - ti.Lock() - defer ti.Unlock() - - api, err := tgbotapi.NewBotAPI(ti.token) - if err != nil { - return err - } - - ti.api = api - - api.Debug = ti.debug - - return nil -} - -func (ti *telegramInput) Stop() error { - return nil -} - -func (p *telegramInput) String() string { - return "telegram" -} diff --git a/agent/proto/bot.pb.go b/agent/proto/bot.pb.go deleted file mode 100644 index 10fde8f6..00000000 --- a/agent/proto/bot.pb.go +++ /dev/null @@ -1,333 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// source: agent/proto/bot.proto - -package go_micro_bot - -import ( - context "context" - fmt "fmt" - proto "github.com/golang/protobuf/proto" - grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - status "google.golang.org/grpc/status" - math "math" -) - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package - -type HelpRequest struct { - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *HelpRequest) Reset() { *m = HelpRequest{} } -func (m *HelpRequest) String() string { return proto.CompactTextString(m) } -func (*HelpRequest) ProtoMessage() {} -func (*HelpRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_79b974b8c77805fa, []int{0} -} - -func (m *HelpRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_HelpRequest.Unmarshal(m, b) -} -func (m *HelpRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_HelpRequest.Marshal(b, m, deterministic) -} -func (m *HelpRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_HelpRequest.Merge(m, src) -} -func (m *HelpRequest) XXX_Size() int { - return xxx_messageInfo_HelpRequest.Size(m) -} -func (m *HelpRequest) XXX_DiscardUnknown() { - xxx_messageInfo_HelpRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_HelpRequest proto.InternalMessageInfo - -type HelpResponse struct { - Usage string `protobuf:"bytes,1,opt,name=usage,proto3" json:"usage,omitempty"` - Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *HelpResponse) Reset() { *m = HelpResponse{} } -func (m *HelpResponse) String() string { return proto.CompactTextString(m) } -func (*HelpResponse) ProtoMessage() {} -func (*HelpResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_79b974b8c77805fa, []int{1} -} - -func (m *HelpResponse) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_HelpResponse.Unmarshal(m, b) -} -func (m *HelpResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_HelpResponse.Marshal(b, m, deterministic) -} -func (m *HelpResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_HelpResponse.Merge(m, src) -} -func (m *HelpResponse) XXX_Size() int { - return xxx_messageInfo_HelpResponse.Size(m) -} -func (m *HelpResponse) XXX_DiscardUnknown() { - xxx_messageInfo_HelpResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_HelpResponse proto.InternalMessageInfo - -func (m *HelpResponse) GetUsage() string { - if m != nil { - return m.Usage - } - return "" -} - -func (m *HelpResponse) GetDescription() string { - if m != nil { - return m.Description - } - return "" -} - -type ExecRequest struct { - Args []string `protobuf:"bytes,1,rep,name=args,proto3" json:"args,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *ExecRequest) Reset() { *m = ExecRequest{} } -func (m *ExecRequest) String() string { return proto.CompactTextString(m) } -func (*ExecRequest) ProtoMessage() {} -func (*ExecRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_79b974b8c77805fa, []int{2} -} - -func (m *ExecRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ExecRequest.Unmarshal(m, b) -} -func (m *ExecRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ExecRequest.Marshal(b, m, deterministic) -} -func (m *ExecRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_ExecRequest.Merge(m, src) -} -func (m *ExecRequest) XXX_Size() int { - return xxx_messageInfo_ExecRequest.Size(m) -} -func (m *ExecRequest) XXX_DiscardUnknown() { - xxx_messageInfo_ExecRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_ExecRequest proto.InternalMessageInfo - -func (m *ExecRequest) GetArgs() []string { - if m != nil { - return m.Args - } - return nil -} - -type ExecResponse struct { - Result []byte `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"` - Error string `protobuf:"bytes,2,opt,name=error,proto3" json:"error,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *ExecResponse) Reset() { *m = ExecResponse{} } -func (m *ExecResponse) String() string { return proto.CompactTextString(m) } -func (*ExecResponse) ProtoMessage() {} -func (*ExecResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_79b974b8c77805fa, []int{3} -} - -func (m *ExecResponse) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ExecResponse.Unmarshal(m, b) -} -func (m *ExecResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ExecResponse.Marshal(b, m, deterministic) -} -func (m *ExecResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_ExecResponse.Merge(m, src) -} -func (m *ExecResponse) XXX_Size() int { - return xxx_messageInfo_ExecResponse.Size(m) -} -func (m *ExecResponse) XXX_DiscardUnknown() { - xxx_messageInfo_ExecResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_ExecResponse proto.InternalMessageInfo - -func (m *ExecResponse) GetResult() []byte { - if m != nil { - return m.Result - } - return nil -} - -func (m *ExecResponse) GetError() string { - if m != nil { - return m.Error - } - return "" -} - -func init() { - proto.RegisterType((*HelpRequest)(nil), "go.micro.bot.HelpRequest") - proto.RegisterType((*HelpResponse)(nil), "go.micro.bot.HelpResponse") - proto.RegisterType((*ExecRequest)(nil), "go.micro.bot.ExecRequest") - proto.RegisterType((*ExecResponse)(nil), "go.micro.bot.ExecResponse") -} - -func init() { proto.RegisterFile("agent/proto/bot.proto", fileDescriptor_79b974b8c77805fa) } - -var fileDescriptor_79b974b8c77805fa = []byte{ - // 234 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x90, 0x3f, 0x4f, 0xc3, 0x30, - 0x10, 0xc5, 0x1b, 0x28, 0x45, 0xbd, 0x84, 0xc5, 0x02, 0x14, 0x3a, 0x05, 0x4f, 0x9d, 0x5c, 0x09, - 0x56, 0x24, 0x06, 0x04, 0x62, 0xce, 0x37, 0x48, 0xd2, 0x53, 0x14, 0xa9, 0xf1, 0x99, 0xb3, 0x23, - 0xf1, 0x1d, 0xf8, 0xd2, 0xc8, 0x7f, 0x06, 0xab, 0xea, 0x76, 0xcf, 0x67, 0xbd, 0xf7, 0x7b, 0x07, - 0x0f, 0xdd, 0x88, 0xda, 0x1d, 0x0c, 0x93, 0xa3, 0x43, 0x4f, 0x4e, 0x85, 0x49, 0x54, 0x23, 0xa9, - 0x79, 0x1a, 0x98, 0x54, 0x4f, 0x4e, 0xde, 0x41, 0xf9, 0x8d, 0x27, 0xd3, 0xe2, 0xcf, 0x82, 0xd6, - 0xc9, 0x2f, 0xa8, 0xa2, 0xb4, 0x86, 0xb4, 0x45, 0x71, 0x0f, 0x37, 0x8b, 0xed, 0x46, 0xac, 0x8b, - 0xa6, 0xd8, 0x6f, 0xdb, 0x28, 0x44, 0x03, 0xe5, 0x11, 0xed, 0xc0, 0x93, 0x71, 0x13, 0xe9, 0xfa, - 0x2a, 0xec, 0xf2, 0x27, 0xf9, 0x0c, 0xe5, 0xe7, 0x2f, 0x0e, 0xc9, 0x56, 0x08, 0x58, 0x77, 0x3c, - 0xda, 0xba, 0x68, 0xae, 0xf7, 0xdb, 0x36, 0xcc, 0xf2, 0x0d, 0xaa, 0xf8, 0x25, 0x45, 0x3d, 0xc2, - 0x86, 0xd1, 0x2e, 0x27, 0x17, 0xb2, 0xaa, 0x36, 0x29, 0x8f, 0x80, 0xcc, 0xc4, 0x29, 0x26, 0x8a, - 0x97, 0xbf, 0x02, 0x6e, 0x3f, 0x68, 0x9e, 0x3b, 0x7d, 0x14, 0xef, 0xb0, 0xf6, 0xd0, 0xe2, 0x49, - 0xe5, 0xd5, 0x54, 0xd6, 0x6b, 0xb7, 0xbb, 0xb4, 0x8a, 0xc1, 0x72, 0xe5, 0x0d, 0x3c, 0xca, 0xb9, - 0x41, 0xd6, 0xe0, 0xdc, 0x20, 0x27, 0x97, 0xab, 0x7e, 0x13, 0x4e, 0xfb, 0xfa, 0x1f, 0x00, 0x00, - 0xff, 0xff, 0xe8, 0x08, 0x5e, 0xad, 0x73, 0x01, 0x00, 0x00, -} - -// Reference imports to suppress errors if they are not otherwise used. -var _ context.Context -var _ grpc.ClientConn - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion4 - -// CommandClient is the client API for Command service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. -type CommandClient interface { - Help(ctx context.Context, in *HelpRequest, opts ...grpc.CallOption) (*HelpResponse, error) - Exec(ctx context.Context, in *ExecRequest, opts ...grpc.CallOption) (*ExecResponse, error) -} - -type commandClient struct { - cc *grpc.ClientConn -} - -func NewCommandClient(cc *grpc.ClientConn) CommandClient { - return &commandClient{cc} -} - -func (c *commandClient) Help(ctx context.Context, in *HelpRequest, opts ...grpc.CallOption) (*HelpResponse, error) { - out := new(HelpResponse) - err := c.cc.Invoke(ctx, "/go.micro.bot.Command/Help", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *commandClient) Exec(ctx context.Context, in *ExecRequest, opts ...grpc.CallOption) (*ExecResponse, error) { - out := new(ExecResponse) - err := c.cc.Invoke(ctx, "/go.micro.bot.Command/Exec", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// CommandServer is the server API for Command service. -type CommandServer interface { - Help(context.Context, *HelpRequest) (*HelpResponse, error) - Exec(context.Context, *ExecRequest) (*ExecResponse, error) -} - -// UnimplementedCommandServer can be embedded to have forward compatible implementations. -type UnimplementedCommandServer struct { -} - -func (*UnimplementedCommandServer) Help(ctx context.Context, req *HelpRequest) (*HelpResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Help not implemented") -} -func (*UnimplementedCommandServer) Exec(ctx context.Context, req *ExecRequest) (*ExecResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Exec not implemented") -} - -func RegisterCommandServer(s *grpc.Server, srv CommandServer) { - s.RegisterService(&_Command_serviceDesc, srv) -} - -func _Command_Help_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(HelpRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(CommandServer).Help(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/go.micro.bot.Command/Help", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(CommandServer).Help(ctx, req.(*HelpRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Command_Exec_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ExecRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(CommandServer).Exec(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/go.micro.bot.Command/Exec", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(CommandServer).Exec(ctx, req.(*ExecRequest)) - } - return interceptor(ctx, in, info, handler) -} - -var _Command_serviceDesc = grpc.ServiceDesc{ - ServiceName: "go.micro.bot.Command", - HandlerType: (*CommandServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "Help", - Handler: _Command_Help_Handler, - }, - { - MethodName: "Exec", - Handler: _Command_Exec_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "agent/proto/bot.proto", -} diff --git a/agent/proto/bot.pb.micro.go b/agent/proto/bot.pb.micro.go deleted file mode 100644 index 69fd249c..00000000 --- a/agent/proto/bot.pb.micro.go +++ /dev/null @@ -1,110 +0,0 @@ -// Code generated by protoc-gen-micro. DO NOT EDIT. -// source: agent/proto/bot.proto - -package go_micro_bot - -import ( - fmt "fmt" - proto "github.com/golang/protobuf/proto" - math "math" -) - -import ( - context "context" - api "github.com/micro/go-micro/v3/api" - client "github.com/micro/go-micro/v3/client" - server "github.com/micro/go-micro/v3/server" -) - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package - -// Reference imports to suppress errors if they are not otherwise used. -var _ api.Endpoint -var _ context.Context -var _ client.Option -var _ server.Option - -// Api Endpoints for Command service - -func NewCommandEndpoints() []*api.Endpoint { - return []*api.Endpoint{} -} - -// Client API for Command service - -type CommandService interface { - Help(ctx context.Context, in *HelpRequest, opts ...client.CallOption) (*HelpResponse, error) - Exec(ctx context.Context, in *ExecRequest, opts ...client.CallOption) (*ExecResponse, error) -} - -type commandService struct { - c client.Client - name string -} - -func NewCommandService(name string, c client.Client) CommandService { - return &commandService{ - c: c, - name: name, - } -} - -func (c *commandService) Help(ctx context.Context, in *HelpRequest, opts ...client.CallOption) (*HelpResponse, error) { - req := c.c.NewRequest(c.name, "Command.Help", in) - out := new(HelpResponse) - err := c.c.Call(ctx, req, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *commandService) Exec(ctx context.Context, in *ExecRequest, opts ...client.CallOption) (*ExecResponse, error) { - req := c.c.NewRequest(c.name, "Command.Exec", in) - out := new(ExecResponse) - err := c.c.Call(ctx, req, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// Server API for Command service - -type CommandHandler interface { - Help(context.Context, *HelpRequest, *HelpResponse) error - Exec(context.Context, *ExecRequest, *ExecResponse) error -} - -func RegisterCommandHandler(s server.Server, hdlr CommandHandler, opts ...server.HandlerOption) error { - type command interface { - Help(ctx context.Context, in *HelpRequest, out *HelpResponse) error - Exec(ctx context.Context, in *ExecRequest, out *ExecResponse) error - } - type Command struct { - command - } - h := &commandHandler{hdlr} - return s.Handle(s.NewHandler(&Command{h}, opts...)) -} - -type commandHandler struct { - CommandHandler -} - -func (h *commandHandler) Help(ctx context.Context, in *HelpRequest, out *HelpResponse) error { - return h.CommandHandler.Help(ctx, in, out) -} - -func (h *commandHandler) Exec(ctx context.Context, in *ExecRequest, out *ExecResponse) error { - return h.CommandHandler.Exec(ctx, in, out) -} diff --git a/agent/proto/bot.proto b/agent/proto/bot.proto deleted file mode 100644 index 0f808615..00000000 --- a/agent/proto/bot.proto +++ /dev/null @@ -1,25 +0,0 @@ -syntax = "proto3"; - -package go.micro.bot; - -service Command { - rpc Help(HelpRequest) returns (HelpResponse) {}; - rpc Exec(ExecRequest) returns (ExecResponse) {}; -} - -message HelpRequest { -} - -message HelpResponse { - string usage = 1; - string description = 2; -} - -message ExecRequest { - repeated string args = 1; -} - -message ExecResponse { - bytes result = 1; - string error = 2; -}