WhatsMeow & IrC & WhatsApp

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()
}