stream-overlay/cmd/m3r1-chat/main.go
2025-02-26 14:58:43 -08:00

63 lines
1.2 KiB
Go

package main
import (
"fmt"
"log"
"sync"
_ "embed"
"github.com/gempir/go-twitch-irc/v4"
"github.com/gin-gonic/gin"
)
var (
messages []string
mu sync.Mutex
)
// go:embed chat.html
var defaultHTML []byte
func main() {
// Set up Twitch client
client := twitch.NewClient("your_bot_username", "oauth:your_oauth_token")
// Set up Gin web server
r := gin.Default()
// Serve static files (HTML, CSS, JS)
r.Static("/static", "./static")
// Endpoint to get chat messages
r.GET("/chat", func(c *gin.Context) {
mu.Lock()
defer mu.Unlock()
c.JSON(200, gin.H{
"messages": messages,
})
})
// Handle Twitch chat messages
client.OnPrivateMessage(func(message twitch.PrivateMessage) {
mu.Lock()
defer mu.Unlock()
messages = append(messages, fmt.Sprintf("%s: %s", message.User.Name, message.Message))
if len(messages) > 100 { // Keep only the last 100 messages
messages = messages[1:]
}
})
// Connect to Twitch chat
client.Join("merithtk")
go func() {
err := client.Connect()
if err != nil {
log.Fatalf("Error connecting to Twitch: %v", err)
}
}()
// Start the web server
r.Run(":8080")
}