Files

94 lines
2.4 KiB
Go
Raw Permalink Normal View History

package main
import (
"flag"
"log"
"os"
"os/signal"
"syscall"
"go-ts/pkg/ts3client"
)
func main() {
serverAddr := flag.String("server", "127.0.0.1:9987", "TeamSpeak 3 Server Address")
nickname := flag.String("nickname", "GoBot", "Nickname")
flag.Parse()
log.Printf("=== TeamSpeak Library Example ===")
log.Printf("Server: %s", *serverAddr)
log.Printf("Nickname: %s", *nickname)
// Create client
client := ts3client.New(*serverAddr, ts3client.Config{
Nickname: *nickname,
})
// Register event handlers
client.On(ts3client.EventConnected, func(e *ts3client.ConnectedEvent) {
log.Printf("✓ Connected! ClientID=%d, Server=%s", e.ClientID, e.ServerName)
})
client.On(ts3client.EventChannelList, func(e *ts3client.ChannelListEvent) {
log.Printf("✓ Received %d channels:", len(e.Channels))
for _, ch := range e.Channels {
log.Printf(" [%d] %s", ch.ID, ch.Name)
}
// Join first non-default channel
for _, ch := range e.Channels {
if ch.ID != 1 && ch.ParentID == 0 {
log.Printf("Joining channel: %s (ID=%d)", ch.Name, ch.ID)
client.JoinChannel(ch.ID)
break
}
}
})
client.On(ts3client.EventMessage, func(e *ts3client.MessageEvent) {
log.Printf("[%s] %s: %s", e.TargetMode.String(), e.SenderName, e.Message)
// Echo back channel messages
if e.TargetMode == ts3client.MessageTargetChannel {
client.SendChannelMessage("Echo: " + e.Message)
}
})
client.On(ts3client.EventClientEnter, func(e *ts3client.ClientEnterEvent) {
log.Printf("→ Client joined: %s (ID=%d)", e.Nickname, e.ClientID)
})
client.On(ts3client.EventClientLeft, func(e *ts3client.ClientLeftEvent) {
log.Printf("← Client left: ID=%d (%s)", e.ClientID, e.Reason)
})
client.On(ts3client.EventAudio, func(e *ts3client.AudioEvent) {
// Example: Echo audio (reduce volume)
for i := range e.PCM {
e.PCM[i] = e.PCM[i] / 4
}
client.SendAudio(e.PCM)
})
client.On(ts3client.EventError, func(e *ts3client.ErrorEvent) {
if e.ID != "0" { // ID 0 = OK
log.Printf("! Server Error: [%s] %s", e.ID, e.Message)
}
})
// Handle shutdown
go func() {
sigChan := make(chan os.Signal, 1)
signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM)
<-sigChan
log.Println("Shutting down...")
client.Disconnect()
os.Exit(0)
}()
// Connect (blocks until error or disconnect)
if err := client.Connect(); err != nil {
log.Fatalf("Connection error: %v", err)
}
}