root@ynm:~/YnMWhatsmeow# cat main.go
package main
import (
"context"
"fmt"
"os"
"os/signal"
"syscall"
"strings"
irc "github.com/thoj/go-ircevent"
"go.mau.fi/whatsmeow"
"go.mau.fi/whatsmeow/store/sqlstore"
"go.mau.fi/whatsmeow/types/events"
waLog "go.mau.fi/whatsmeow/util/log"
"go.mau.fi/whatsmeow/types"
waProto "go.mau.fi/whatsmeow/binary/proto"
"google.golang.org/protobuf/proto"
"github.com/Baozisoftware/qrcode-terminal-go"
_ "github.com/mattn/go-sqlite3"
)
var (
ircConn *irc.Connection
client *whatsmeow.Client
ctx context.Context
)
var contactMap = map[string]string{
"123123": "MihályCV",
"123123": "Pali",
"123123": "Betti",
"123123": "Markus",
}
func eventHandler(evt interface{}) {
switch v := evt.(type) {
case *events.Message:
jidFull := v.Info.Sender.String()
jidUser := strings.Split(jidFull, ":")[0] // csak a szám, : előtt
sender, found := contactMap[jidUser]
if !found {
sender = jidUser
}
var messageText string
if v.Message.GetConversation() != "" {
messageText = v.Message.GetConversation()
} else if v.Message.GetExtendedTextMessage() != nil {
messageText = v.Message.GetExtendedTextMessage().GetText()
} else if v.Message.GetImageMessage() != nil {
messageText = "[Kép üzenet]"
} else if v.Message.GetDocumentMessage() != nil {
messageText = "[Dokumentum]"
} else if v.Message.GetVideoMessage() != nil {
messageText = "[Videó üzenet]"
} else {
messageText = "[Ismeretlen üzenet típus]"
}
//fmt.Printf("Message from %s: %s\n", sender, messageText)
if ircConn != nil && ircConn.Connected() {
// fmt.Printf("IRC-re küldendő üzenet: [%s]%s\n", sender, messageText)
ircConn.Privmsg("#Magyar", fmt.Sprintf("[%s]%s", sender, messageText))
}
}
}
func main() {
// IRC kapcsolat létrehozása
ircConn = irc.IRC("YnM-Bridge", "YnMBot")
err := ircConn.Connect("127.0.0.1:6667")
if err != nil {
panic(err)
}
ircConn.AddCallback("001", func(e *irc.Event) {
ircConn.Join("#Magyar")
})
ircConn.AddCallback("JOIN", func(e *irc.Event) {
// fmt.Println("IRC bot joined channel:", e.Arguments[0])
})
// Whatsmeow setup
dbLog := waLog.Stdout("Database", "INFO", false)
ctx = context.Background()
container, err := sqlstore.New(ctx, "sqlite3", "file:examplestore.db?_foreign_keys=on", dbLog)
if err != nil {
panic(err)
}
deviceStore, err := container.GetFirstDevice(ctx)
if err != nil {
panic(err)
}
clientLog := waLog.Stdout("Client", "INFO", false)
client = whatsmeow.NewClient(deviceStore, clientLog)
client.AddEventHandler(eventHandler)
// IRC callback: az IRC csatornáról érkező üzenetek továbbítása WhatsAppra
ircConn.AddCallback("PRIVMSG", func(e *irc.Event) {
msg := e.Message()
//from := e.Nick
if e.Arguments[0] == "#Magyar" {
// fmt.Printf("IRC üzenet %s: %s\n", from, msg)
jid := types.JID{User: "123123", Server: "g.us"}
_, err := client.SendMessage(ctx, jid, &waProto.Message{
Conversation: proto.String(msg),
})
if err != nil {
fmt.Printf("Hiba WhatsApp üzenet küldésnél: %v\n", err)
}
}
})
go ircConn.Loop()
if client.Store.ID == nil {
qrChan, _ := client.GetQRChannel(context.Background())
err = client.Connect()
if err != nil {
panic(err)
}
for evt := range qrChan {
if evt.Event == "code" {
qr := qrcodeTerminal.New()
qr.Get([]byte(evt.Code)).Print()
} else {
fmt.Println("Login event:", evt.Event)
}
}
} else {
err = client.Connect()
if err != nil {
panic(err)
}
}
c := make(chan os.Signal, 1)
signal.Notify(c, os.Interrupt, syscall.SIGTERM)
<-c
client.Disconnect()
ircConn.Quit()
}
SystemD
[Unit]
Description=YnM Whatsmeow bridge
After=network.target
[Service]
WorkingDirectory=/ML/YnMWhatsmeow
ExecStart=/usr/local/go/bin/go run main.go
Restart=always
User=ML
Environment=GODEBUG=x509ignoreCN=0
[Install]
WantedBy=multi-user.target
package main
import (
"context"
"fmt"
"os"
"os/signal"
"syscall"
"strings"
irc "github.com/thoj/go-ircevent"
"go.mau.fi/whatsmeow"
"go.mau.fi/whatsmeow/store/sqlstore"
"go.mau.fi/whatsmeow/types/events"
waLog "go.mau.fi/whatsmeow/util/log"
"go.mau.fi/whatsmeow/types"
waProto "go.mau.fi/whatsmeow/binary/proto"
"google.golang.org/protobuf/proto"
"github.com/Baozisoftware/qrcode-terminal-go"
_ "github.com/mattn/go-sqlite3"
)
var (
ircConn *irc.Connection
client *whatsmeow.Client
ctx context.Context
)
var contactMap = map[string]string{
"1111111111": "MihályCV",
"1111111111": "Pali",
"1111111111": "Betti",,
" "1111111111"": "Markus",
}
func eventHandler(evt interface{}) {
switch v := evt.(type) {
case *events.Message:
jidFull := v.Info.Sender.String()
jidUser := strings.Split(jidFull, "@")[0] // csak a szám, : előtt
jidUser = strings.Split(jidUser, ":")[0]
sender, found := contactMap[jidUser]
if !found {
sender = jidUser
}
var messageText string
if v.Message.GetConversation() != "" {
messageText = v.Message.GetConversation()
} else if v.Message.GetExtendedTextMessage() != nil {
messageText = v.Message.GetExtendedTextMessage().GetText()
} else if v.Message.GetImageMessage() != nil {
messageText = "[Kép üzenet]"
} else if v.Message.GetDocumentMessage() != nil {
messageText = "[Dokumentum]"
} else if v.Message.GetVideoMessage() != nil {
messageText = "[Videó üzenet]"
} else {
messageText = "[Ismeretlen üzenet típus]"
}
//fmt.Printf("Message from %s: %s\n", sender, messageText)
if ircConn != nil && ircConn.Connected() {
// fmt.Printf("IRC-re küldendő üzenet: [%s]%s\n", sender, messageText)
ircConn.Privmsg("#Magyar", fmt.Sprintf("[%s]%s", sender, messageText))
}
}
}
func main() {
// IRC kapcsolat létrehozása
ircConn = irc.IRC("YnM-Bridge", "YnMBot")
err := ircConn.Connect("127.0.0.1:6667")
if err != nil {
panic(err)
}
ircConn.AddCallback("001", func(e *irc.Event) {
ircConn.Join("#Magyar")
ircConn.Privmsg("[email protected]", "login Bridge 111111")
ircConn.SendRawf("MODE %s +iwx", ircConn.GetNick())
})
ircConn.AddCallback("JOIN", func(e *irc.Event) {
// fmt.Println("IRC bot joined channel:", e.Arguments[0])
})
// Whatsmeow setup
dbLog := waLog.Stdout("Database", "INFO", false)
ctx = context.Background()
container, err := sqlstore.New(ctx, "sqlite3", "file:examplestore.db?_foreign_keys=on", dbLog)
if err != nil {
panic(err)
}
deviceStore, err := container.GetFirstDevice(ctx)
if err != nil {
panic(err)
}
clientLog := waLog.Stdout("Client", "INFO", false)
client = whatsmeow.NewClient(deviceStore, clientLog)
client.AddEventHandler(eventHandler)
// IRC callback: az IRC csatornáról érkező üzenetek továbbítása WhatsAppra
ircConn.AddCallback("PRIVMSG", func(e *irc.Event) {
msg := e.Message()
from := e.Nick
if e.Arguments[0] == "#Magyar" {
fmt.Printf("IRC üzenet %s: %s\n", from, msg)
jid := types.JID{User: "111111", Server: "g.us"}
_, err := client.SendMessage(ctx, jid, &waProto.Message{
Conversation: proto.String(msg),
})
if err != nil {
// fmt.Printf("Hiba WhatsApp üzenet küldésnél: %v\n", err)
}
}
})
go ircConn.Loop()
if client.Store.ID == nil {
qrChan, _ := client.GetQRChannel(context.Background())
err = client.Connect()
if err != nil {
panic(err)
}
for evt := range qrChan {
if evt.Event == "code" {
qr := qrcodeTerminal.New()
qr.Get([]byte(evt.Code)).Print()
} else {
//fmt.Println("Login event:", evt.Event)
}
}
} else {
err = client.Connect()
if err != nil {
panic(err)
}
}
c := make(chan os.Signal, 1)
signal.Notify(c, os.Interrupt, syscall.SIGTERM)
<-c
client.Disconnect()
ircConn.Quit()
}