init project

master
alex 2022-06-30 19:06:37 +02:00
commit c4fb2d6b52
7 changed files with 241 additions and 0 deletions

5
config.sample.yaml Executable file
View File

@ -0,0 +1,5 @@
bot:
homeserver_url: "your_homeserver_url"
user: "your_bot_user"
password: "your_bot_password"
roomId: "news_room_id"

11
go.mod Executable file
View File

@ -0,0 +1,11 @@
module roese.dev/kra-jenkins-matrixbot-message
go 1.17
require (
github.com/russross/blackfriday/v2 v2.1.0 // indirect
golang.org/x/crypto v0.0.0-20220315160706-3147a52a75dd // indirect
golang.org/x/net v0.0.0-20220225172249-27dd8689420f // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
maunium.net/go/mautrix v0.10.12 // indirect
)

35
go.sum Executable file
View File

@ -0,0 +1,35 @@
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/mattn/go-sqlite3 v1.14.12/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/tidwall/gjson v1.12.1/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
github.com/tidwall/gjson v1.14.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM=
github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU=
github.com/tidwall/sjson v1.2.4/go.mod h1:098SZ494YoMWPmMO6ct4dcFnqxwj9r/gF0Etp19pSNM=
golang.org/x/crypto v0.0.0-20220315160706-3147a52a75dd h1:XcWmESyNjXJMLahc3mqVQJcgSTDxFxhETVlfk9uGc38=
golang.org/x/crypto v0.0.0-20220315160706-3147a52a75dd/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20220225172249-27dd8689420f h1:oA4XRj0qtSt8Yo1Zms0CUlsT3KG69V2UGQWPBxujDmc=
golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
maunium.net/go/maulogger/v2 v2.3.2/go.mod h1:TYWy7wKwz/tIXTpsx8G3mZseIRiC5DoMxSZazOHy68A=
maunium.net/go/mautrix v0.10.12 h1:GqmsksKyKrTqmLb2B6yGOawoFLPTJ3A3NtXrygAvKM8=
maunium.net/go/mautrix v0.10.12/go.mod h1:xTq6+uMCAXtQwfqjUrYd8O10oIyymbzZm02CYOMt4ek=

BIN
main Executable file

Binary file not shown.

23
main.go Executable file
View File

@ -0,0 +1,23 @@
package main
import (
"log"
"os"
matrixbot "roese.dev/kra-jenkins-matrixbot-message/matrix-bot"
"roese.dev/kra-jenkins-matrixbot-message/modules/config"
)
func init() {
config.LoadConfig()
}
func main() {
log.Println(len(os.Args))
if len(os.Args) == 3 {
today := os.Args[1]
nextDay := os.Args[2]
matrixbot.SendMessage(today, nextDay)
}
}

132
matrix-bot/matrix-bot.go Executable file
View File

@ -0,0 +1,132 @@
package matrixbot
import (
"encoding/base64"
"encoding/json"
"log"
"maunium.net/go/mautrix"
"maunium.net/go/mautrix/event"
"maunium.net/go/mautrix/format"
"maunium.net/go/mautrix/id"
"roese.dev/kra-jenkins-matrixbot-message/modules/config"
)
type Representation struct {
Hour string `json:"hour"`
Class string `json:"class"`
Representative string `json:"representative"`
Teacher string `json:"teacher"`
Subject string `json:"subject"`
Room string `json:"room"`
Note string `json:"note"`
}
// day string, hour string, class string, representative string, teacher string, subject string, room string, note string
func SendMessage(today string, nextDay string) {
cfg := config.Cfg.Bot
client, err := mautrix.NewClient(cfg.HomeserverUrl, "", "")
if err != nil {
log.Fatalln(err)
}
_, err = client.Login(&mautrix.ReqLogin{
Type: "m.login.password",
Identifier: mautrix.UserIdentifier{Type: mautrix.IdentifierTypeUser, User: cfg.User},
Password: cfg.Password,
StoreCredentials: true,
})
if err != nil {
log.Fatalln(err)
}
var todayRepresentation []Representation
var nextDayRepresentation []Representation
log.Println(today)
if today != "-" {
representation, err := Base64DecodeAndUnmarshal(today)
if err != nil {
log.Fatalln(err)
}
todayRepresentation = representation
log.Println(representation)
}
if nextDay != "-" {
representation, err := Base64DecodeAndUnmarshal(nextDay)
if err != nil {
log.Fatalln(err)
}
nextDayRepresentation = representation
}
log.Println(nextDayRepresentation, todayRepresentation)
if len(todayRepresentation) == 0 && len(nextDayRepresentation) == 0 {
return
}
var msg string
if len(todayRepresentation) > 0 {
msg += "<b>Vertretung - Heute</b>"
for _, entity := range todayRepresentation {
msg += "<br>Stunde: <b>" + entity.Hour + "</b>"
msg += "<br>Klasse: <b>" + entity.Class + "</b>"
msg += "<br>Vertreter: <b>" + entity.Representative + "</b>"
msg += "<br>Lehrer: <b>" + entity.Teacher + "</b>"
msg += "<br>Fach: <b>" + entity.Subject + "</b>"
msg += "<br>Raum: <b>" + entity.Room + "</b>"
msg += "<br>Hinweis: <b>" + entity.Note + "</b>"
msg += "<br>"
}
}
if len(nextDayRepresentation) > 0 {
msg += "<br><b>Vertretung - Nächster Tag</b>"
for _, entity := range nextDayRepresentation {
msg += "<br>Stunde: <b>" + entity.Hour + "</b>"
msg += "<br>Klasse: <b>" + entity.Class + "</b>"
msg += "<br>Vertreter: <b>" + entity.Representative + "</b>"
msg += "<br>Lehrer: <b>" + entity.Teacher + "</b>"
msg += "<br>Fach: <b>" + entity.Subject + "</b>"
msg += "<br>Raum: <b>" + entity.Room + "</b>"
msg += "<br>Hinweis: <b>" + entity.Note + "</b>"
msg += "<br>"
}
}
botmsg := format.RenderMarkdown(msg, false, true)
client.SendMessageEvent(id.RoomID(cfg.RoomId), event.EventMessage, &botmsg)
}
func Base64DecodeAndUnmarshal(base64Encoded string) (representation []Representation, err error) {
decode, err := base64.StdEncoding.DecodeString(base64Encoded)
var rep []Representation
if err != nil {
return rep, err
}
err = json.Unmarshal(decode, &rep)
if err != nil {
return rep, err
}
return rep, nil
}

35
modules/config/config.go Executable file
View File

@ -0,0 +1,35 @@
package config
import (
"io/ioutil"
"log"
"gopkg.in/yaml.v2"
)
var Cfg Config
type Config struct {
Bot Bot
}
type Bot struct {
HomeserverUrl string `yaml:"homeserver_url"`
User string
Password string
RoomId string `yaml:"room_id"`
}
func LoadConfig() {
file, err := ioutil.ReadFile("../go-chat-bot/config.yaml")
if err != nil {
log.Fatalln("failed to load yaml file", err)
}
err = yaml.Unmarshal(file, &Cfg)
if err != nil {
log.Fatalln("failed to unmarshal config", err)
}
}