// 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 matrixpusher import ( "bytes" crand "crypto/rand" "encoding/json" "errors" "fmt" "io/ioutil" "net/http" "strings" slackmessage "go.dev.pztrn.name/opensaps/slack/message" ) // Constants for random transaction ID. const ( letterBytes = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" // 36 possibilities letterIdxBits = 6 // 6 bits to represent 64 possibilities / indexes letterIdxMask = 1<`+link[2]+``) } } // "\n" should be "
". messageToSend = strings.ReplaceAll(messageToSend, "\n", "
") c.Log.Debug().Msgf("Crafted message: %s", messageToSend) // Send message. mxc.SendMessage(messageToSend) } // This function sends already prepared message to room. func (mxc *MatrixConnection) SendMessage(message string) { c.Log.Debug().Str("conn", mxc.connName).Msgf("Sending message: '%s'", message) // We should send notices as it is preferred behavior for bots and // appservices. msg := MatrixMessage{ MsgType: "m.notice", Body: message, Format: "org.matrix.custom.html", FormattedBody: message, } msgBytes, err := json.Marshal(&msg) if err != nil { c.Log.Error().Err(err).Msg("Failed to marshal message into JSON.") return } msgStr := string(msgBytes) reply, err := mxc.doPutRequest("/rooms/"+mxc.roomID+"/send/m.room.message/"+mxc.generateTnxID(), msgStr) if err != nil { c.Log.Fatal().Str("conn", mxc.connName).Str("room", mxc.roomID).Err(err).Msg("Failed to send message to room") } c.Log.Debug().Msgf("Message sent, reply: %s", string(reply)) } func (mxc *MatrixConnection) Shutdown() { c.Log.Info().Str("conn", mxc.connName).Msg("Shutting down connection...") _, err := mxc.doPostRequest("/logout", "{}") if err != nil { c.Log.Error().Err(err).Str("conn", mxc.connName).Msg("Error occurred while trying to log out from Matrix.") } mxc.token = "" c.Log.Info().Str("conn", mxc.connName).Msg("Connection successfully shutted down") }