diff --git a/cmd/m3r1-chat/chat.html b/cmd/m3r1-chat/chat.html deleted file mode 100644 index a8c0e37..0000000 --- a/cmd/m3r1-chat/chat.html +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - Minecraft Twitch Chat Overlay - - - -
- - - \ No newline at end of file diff --git a/cmd/m3r1-chat/main.go b/cmd/m3r1-chat/main.go deleted file mode 100644 index 3725a4e..0000000 --- a/cmd/m3r1-chat/main.go +++ /dev/null @@ -1,63 +0,0 @@ -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") -} diff --git a/main.go b/main.go new file mode 100644 index 0000000..997e2ca --- /dev/null +++ b/main.go @@ -0,0 +1,76 @@ +package main + +import ( + "fmt" + "log" + "sync" + + _ "embed" + + "github.com/gempir/go-twitch-irc/v4" + "github.com/gin-gonic/gin" +) + +var ( + // Store chat messages for each channel + channelMessages = make(map[string][]string) + mu sync.Mutex +) + +func main() { + // Set up Twitch client + client := twitch.NewAnonymousClient() // No need to log in as a bot + + // Set up Gin web server + r := gin.Default() + + // Serve static files (HTML, CSS, JS) + r.Static("/static", "./static") + + // Endpoint to get chat messages for a specific channel + r.GET("/chat/:channel", func(c *gin.Context) { + channel := c.Param("channel") + mu.Lock() + defer mu.Unlock() + messages, exists := channelMessages[channel] + if !exists { + c.JSON(200, gin.H{ + "messages": []string{}, + }) + return + } + c.JSON(200, gin.H{ + "messages": messages, + }) + }) + + // Handle Twitch chat messages + client.OnPrivateMessage(func(message twitch.PrivateMessage) { + mu.Lock() + defer mu.Unlock() + channel := message.Channel + messages := channelMessages[channel] + 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:] + } + channelMessages[channel] = messages + }) + + // Automatically join channels when requested + r.GET("/chat/:channel/overlay", func(c *gin.Context) { + channel := c.Param("channel") + client.Join(channel) // Join the channel if not already joined + c.File("./static/overlay.html") // Serve the overlay HTML + }) + + // Start the web server + go func() { + err := client.Connect() + if err != nil { + log.Fatalf("Error connecting to Twitch: %v", err) + } + }() + + r.Run(":8080") +} diff --git a/static/overlay.html b/static/overlay.html new file mode 100644 index 0000000..e6a662b --- /dev/null +++ b/static/overlay.html @@ -0,0 +1,108 @@ + + + + + + Minecraft Twitch Chat Overlay + + + +
+ + + \ No newline at end of file