// 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", "
")
ctx.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) {
ctx.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 {
ctx.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 {
ctx.Log.Fatal().Str("conn", mxc.connName).Str("room", mxc.roomID).Err(err).Msg("Failed to send message to room")
}
ctx.Log.Debug().Msgf("Message sent, reply: %s", string(reply))
}
func (mxc *MatrixConnection) Shutdown() {
ctx.Log.Info().Str("conn", mxc.connName).Msg("Shutting down connection...")
_, err := mxc.doPostRequest("/logout", "{}")
if err != nil {
ctx.Log.Error().Err(err).Str("conn", mxc.connName).Msg("Error occurred while trying to log out from Matrix.")
}
mxc.token = ""
ctx.Log.Info().Str("conn", mxc.connName).Msg("Connection successfully shutted down")
}