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