63 lines
1.2 KiB
Go
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")
|
|
}
|