-
-
Save davidchua/034899bbf87df17fb838cd1fca2e614a to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| package main | |
| import ( | |
| "bufio" | |
| "crypto/tls" | |
| "fmt" | |
| "log" | |
| "os/exec" | |
| "strings" | |
| "time" | |
| ) | |
| func getMetadata(field string) string { | |
| out, err := exec.Command("playerctl", "-p", "qmmp", "metadata", field).Output() | |
| if err != nil { | |
| return "" | |
| } | |
| return strings.TrimSpace(string(out)) | |
| } | |
| func main() { | |
| server := "irc.kaopeh.com:6697" // TLS port | |
| channel := "#kaopeh" | |
| nick := "QMMPBot" | |
| conn, err := tls.Dial("tcp", server, &tls.Config{}) | |
| if err != nil { | |
| log.Fatal(err) | |
| } | |
| defer conn.Close() | |
| writer := bufio.NewWriter(conn) | |
| reader := bufio.NewReader(conn) | |
| // Register bot | |
| fmt.Fprintf(writer, "NICK %s\r\n", nick) | |
| fmt.Fprintf(writer, "USER %s 0 * :QMMP Now Playing Bot\r\n", nick) | |
| fmt.Fprintf(writer, "JOIN %s\r\n", channel) | |
| writer.Flush() | |
| lastTrack := "" | |
| for { | |
| track := getMetadata("title") | |
| artist := getMetadata("artist") | |
| if track != "" && track != lastTrack { | |
| msg := fmt.Sprintf("PRIVMSG %s :Now playing: %s - %s\r\n", channel, artist, track) | |
| fmt.Fprint(writer, msg) | |
| writer.Flush() | |
| lastTrack = track | |
| } | |
| // Handle PING/PONG to stay connected | |
| conn.SetReadDeadline(time.Now().Add(1 * time.Second)) | |
| for { | |
| line, err := reader.ReadString('\n') | |
| if err != nil { | |
| break | |
| } | |
| line = strings.TrimSpace(line) | |
| if strings.HasPrefix(line, "PING") { | |
| fmt.Fprintf(writer, "PONG %s\r\n", line[5:]) | |
| writer.Flush() | |
| } | |
| } | |
| time.Sleep(5 * time.Second) | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment