144 lines
2.9 KiB
Go
144 lines
2.9 KiB
Go
package main
|
|
|
|
import (
|
|
"crypto/tls"
|
|
"fmt"
|
|
"log"
|
|
"os"
|
|
"strings"
|
|
"sync"
|
|
|
|
"github.com/matrix-org/gomatrix"
|
|
irc "github.com/thoj/go-ircevent"
|
|
)
|
|
|
|
func notifyMatrix(url string, room string, user string, token string, msg string) error {
|
|
server := url
|
|
if server == "" {
|
|
server = "https://matrix.org"
|
|
}
|
|
|
|
if token == "" || user == "" || msg == "" {
|
|
return fmt.Errorf("'matrix_user', 'matrix_access_token', and 'matrix_msg' are required")
|
|
}
|
|
|
|
matrixClient, err := gomatrix.NewClient(server, "", "")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
matrixClient.SetCredentials(user, token)
|
|
|
|
_, err = matrixClient.JoinRoom(room, "", nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
_, err = matrixClient.SendMessageEvent(room, "m.room.message", gomatrix.TextMessage{
|
|
Body: msg,
|
|
FormattedBody: msg,
|
|
Format: "org.matrix.custom.html",
|
|
MsgType: "m.text",
|
|
})
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func notifyIRC(server string, channel string, nick string, pass string, msg string) error {
|
|
ircServer := server
|
|
if ircServer == "" {
|
|
ircServer = "irc.libera.chat:6697"
|
|
}
|
|
|
|
serverDomain := strings.Split(ircServer, ":")[0]
|
|
|
|
irccon := irc.IRC(nick, nick)
|
|
if pass != "" {
|
|
irccon.Password = pass
|
|
}
|
|
|
|
irccon.UseTLS = true
|
|
irccon.TLSConfig = &tls.Config{ServerName: serverDomain}
|
|
|
|
err := irccon.Connect(ircServer)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
defer irccon.Quit()
|
|
|
|
irccon.AddCallback("001", func(e *irc.Event) {
|
|
fmt.Println("Joining IRC channel: " + channel)
|
|
irccon.Join(channel)
|
|
})
|
|
|
|
irccon.AddCallback("366", func(e *irc.Event) {
|
|
fmt.Println("Posting on the IRC channel...")
|
|
irccon.Privmsg(channel, msg)
|
|
irccon.Quit()
|
|
})
|
|
|
|
irccon.Loop()
|
|
return nil
|
|
}
|
|
|
|
func main() {
|
|
matrixURL := os.Getenv("PLUGIN_MATRIX_URL")
|
|
matrixRoomID := os.Getenv("PLUGIN_MATRIX_ROOM_ID")
|
|
matrixUser := os.Getenv("PLUGIN_MATRIX_USER")
|
|
matrixAccessToken := os.Getenv("PLUGIN_MATRIX_ACCESS_TOKEN")
|
|
matrixMsg := os.Getenv("PLUGIN_MATRIX_MSG")
|
|
|
|
ircServer := os.Getenv("PLUGIN_IRC_SERVER")
|
|
ircChannel := os.Getenv("PLUGIN_IRC_CHANNEL")
|
|
ircNickname := os.Getenv("PLUGIN_IRC_NICKNAME")
|
|
ircPassword := os.Getenv("PLUGIN_IRC_PASSWORD")
|
|
ircMsg := os.Getenv("PLUGIN_IRC_MSG")
|
|
|
|
var waitGroup sync.WaitGroup
|
|
c := make(chan error)
|
|
|
|
waitGroup.Add(2)
|
|
|
|
go func() {
|
|
waitGroup.Wait()
|
|
close(c)
|
|
}()
|
|
|
|
go func() {
|
|
defer waitGroup.Done()
|
|
|
|
var err error = nil
|
|
if matrixRoomID != "" {
|
|
err = notifyMatrix(matrixURL, matrixRoomID, matrixUser, matrixAccessToken, matrixMsg)
|
|
}
|
|
c <- err
|
|
}()
|
|
|
|
go func() {
|
|
defer waitGroup.Done()
|
|
|
|
var err error = nil
|
|
if ircChannel != "" {
|
|
err = notifyIRC(ircServer, ircChannel, ircNickname, ircPassword, ircMsg)
|
|
}
|
|
c <- err
|
|
}()
|
|
|
|
var errs []error
|
|
for err := range c {
|
|
if err != nil {
|
|
errs = append(errs, err)
|
|
fmt.Println("Error: " + err.Error())
|
|
}
|
|
}
|
|
|
|
if len(errs) > 0 {
|
|
log.Fatal("Notify Faild!")
|
|
return
|
|
}
|
|
|
|
log.Println("Message sent successfully")
|
|
}
|