Files
2025-10-31 16:17:04 -04:00

86 lines
1.9 KiB
Go

package main
import (
"flag"
"os"
"os/signal"
"syscall"
"time"
"github.com/42wim/matterbridge/bridge"
bkosmi "github.com/42wim/matterbridge/bridge/kosmi"
"github.com/sirupsen/logrus"
)
func main() {
// Parse command line flags
roomURL := flag.String("room", "https://app.kosmi.io/room/@hyperspaceout", "Kosmi room URL")
debug := flag.Bool("debug", false, "Enable debug logging")
flag.Parse()
// Set up logger
log := logrus.New()
if *debug {
log.SetLevel(logrus.DebugLevel)
} else {
log.SetLevel(logrus.InfoLevel)
}
log.SetFormatter(&logrus.TextFormatter{
FullTimestamp: true,
})
logger := log.WithField("bridge", "kosmi-test")
logger.Info("Starting Kosmi bridge test")
logger.Infof("Room URL: %s", *roomURL)
// Create bridge configuration
cfg := bridge.NewConfig("kosmi.test", logger)
cfg.SetString("RoomURL", *roomURL)
cfg.SetBool("Debug", *debug)
// Create Kosmi bridge
b := bkosmi.New(cfg)
// Connect to Kosmi
logger.Info("Connecting to Kosmi...")
if err := b.Connect(); err != nil {
logger.Fatalf("Failed to connect to Kosmi: %v", err)
}
logger.Info("Successfully connected to Kosmi!")
// Start message listener
go func() {
for msg := range cfg.Remote {
logger.Infof("Received message: [%s] %s: %s",
msg.Timestamp.Format("15:04:05"),
msg.Username,
msg.Text)
}
}()
// Wait for interrupt signal
logger.Info("Listening for messages... Press Ctrl+C to exit")
sigChan := make(chan os.Signal, 1)
signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM)
// Optional: Send a test message after 5 seconds
go func() {
time.Sleep(5 * time.Second)
logger.Info("Bridge is running. Messages from Kosmi will appear above.")
logger.Info("To test sending messages, integrate with IRC or use the full Matterbridge setup")
}()
<-sigChan
logger.Info("Shutting down...")
// Disconnect
if err := b.Disconnect(); err != nil {
logger.Errorf("Error disconnecting: %v", err)
}
logger.Info("Goodbye!")
}