// OpenSAPS - Open Slack API server for everyone. // // Copyright (c) 2017, Stanislav N. aka pztrn. // All rights reserved. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . package telegrampusher import ( // stdlib "fmt" "net/http" "net/url" "strings" // local "gitlab.com/pztrn/opensaps/config/struct" "gitlab.com/pztrn/opensaps/slack/message" ) type TelegramConnection struct { config configstruct.ConfigTelegram } func (tc *TelegramConnection) Initialize(connName string, cfg configstruct.ConfigTelegram) { tc.config = cfg } func (tc *TelegramConnection) ProcessMessage(message slackmessage.SlackMessage) { // Prepare message body. messageData := c.SendToParser(message.Username, message) messageToSend := messageData["message"].(string) // We'll use HTML, so reformat links accordingly (if any). linksRaw, linksFound := messageData["links"] if linksFound { links := linksRaw.([][]string) for _, link := range links { messageToSend = strings.Replace(messageToSend, link[0], ``+link[2]+``, -1) } } c.Log.Debugln("Crafted message:", messageToSend) // Send message. tc.SendMessage(messageToSend) } func (tc *TelegramConnection) SendMessage(message string) { msgdata := url.Values{} msgdata.Set("chat_id", tc.config.ChatID) msgdata.Set("text", message) msgdata.Set("parse_mode", "HTML") // Are we should use proxy? httpTransport := &http.Transport{} if tc.config.Proxy.Enabled { // Compose proxy URL. proxyURL := "http://" if tc.config.Proxy.User != "" { proxyURL += tc.config.Proxy.User if tc.config.Proxy.Password != "" { proxyURL += ":" + tc.config.Proxy.Password } proxyURL += "@" } proxyURL += tc.config.Proxy.Address proxyURLParsed, err := url.Parse(proxyURL) if err != nil { c.Log.Errorln("Error while constructing/parsing proxy URL:", err.Error()) } else { httpTransport.Proxy = http.ProxyURL(proxyURLParsed) } } client := &http.Client{Transport: httpTransport} botUrl := fmt.Sprintf("https://api.telegram.org/bot%s/sendMessage", tc.config.BotID) c.Log.Debugln("Bot URL:", botUrl) response, err := client.PostForm(botUrl, msgdata) if err != nil { c.Log.Errorln("Error ocured while sending data to Telegram:", err.Error()) } else { c.Log.Debugln("Status:", response.Status) if response.StatusCode != 200 { body := []byte{} _, _ = response.Body.Read(body) response.Body.Close() c.Log.Debugln(body) } } } func (tc *TelegramConnection) Shutdown() { // There is nothing we can do actually. }