94 lines
2.4 KiB
Go
94 lines
2.4 KiB
Go
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)
|
|
}
|
|
}
|