From 90f0490e1626f3e0cd753caa5a4aac7787cb6dfc Mon Sep 17 00:00:00 2001 From: bodqhrohro Date: Tue, 3 Dec 2019 02:32:53 +0200 Subject: [PATCH] Support commands in mapped chats --- telegram/commands.go | 23 +++++++++++++++++++++-- telegram/utils.go | 13 +++++++++++-- xmpp/handlers.go | 13 +++++++------ 3 files changed, 39 insertions(+), 10 deletions(-) diff --git a/telegram/commands.go b/telegram/commands.go index 61e4882..102a2c4 100644 --- a/telegram/commands.go +++ b/telegram/commands.go @@ -97,8 +97,15 @@ func helpString(ht helpType) string { return str.String() } -// ProcessTransportCommand executes commands sent directly to the component -func (c *Client) ProcessTransportCommand(cmd string, args []string) string { +func parseCommand(cmdline string) (string, []string) { + bodyFields := strings.Fields(cmdline) + return bodyFields[0][1:], bodyFields[1:] +} + +// ProcessTransportCommand executes a command sent directly to the component +// and returns a response +func (c *Client) ProcessTransportCommand(cmdline string) string { + cmd, args := parseCommand(cmdline) switch cmd { case "login", "code", "password": if cmd == "login" && c.Session.Login != "" { @@ -127,3 +134,15 @@ func (c *Client) ProcessTransportCommand(cmd string, args []string) string { return "" } + +// ProcessChatCommand executes a command sent in a mapped chat +// and returns a response and the status of command support +func (c *Client) ProcessChatCommand(cmdline string) (string, bool) { + cmd, _ := parseCommand(cmdline) + switch cmd { + case "help": + return helpString(helpTypeChat), false + } + + return "", true +} diff --git a/telegram/utils.go b/telegram/utils.go index 7e9882d..d98cfb0 100644 --- a/telegram/utils.go +++ b/telegram/utils.go @@ -405,6 +405,15 @@ func (c *Client) messageToPrefix(message *client.Message, fileString string) str return strings.Join(prefix, " | ") } -func (c *Client) ProcessOutgoingMessage(chatID int, text string, messageID int) { - // TODO +// ProcessOutgoingMessage executes commands or sends messages to mapped chats +func (c *Client) ProcessOutgoingMessage(chatID int, text string, messageID int, returnJid string) { + if strings.HasPrefix(text, "/") { + response, isCommand := c.ProcessChatCommand(text) + if response != "" { + gateway.SendMessage(returnJid, strconv.Itoa(int(chatID)), response, c.xmpp) + } + if isCommand { + return + } + } } diff --git a/xmpp/handlers.go b/xmpp/handlers.go index d3abeab..861ecea 100644 --- a/xmpp/handlers.go +++ b/xmpp/handlers.go @@ -65,15 +65,16 @@ func HandleMessage(s xmpp.Sender, p stanza.Packet) { toID := toParts[0] if len(toParts) > 1 { toIDInt, err := strconv.Atoi(toID) - if err != nil { - session.ProcessOutgoingMessage(toIDInt, msg.Body, 0) + if err == nil { + session.ProcessOutgoingMessage(toIDInt, msg.Body, 0, msg.From) return } + log.WithFields(log.Fields{ + "toID": toID, + }).Error(errors.Wrap(err, "Invalid to JID!")) } else if toID == gateway.Jid.Bare() { - bodyFields := strings.Fields(msg.Body) - cmd := bodyFields[0] - if strings.HasPrefix(cmd, "/") { - response := session.ProcessTransportCommand(cmd[1:], bodyFields[1:]) + if strings.HasPrefix(msg.Body, "/") { + response := session.ProcessTransportCommand(msg.Body) if response != "" { gateway.SendMessage(msg.From, "", response, component) }