You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
1.3 KiB
64 lines
1.3 KiB
package main
|
|
|
|
import (
|
|
"context"
|
|
"flag"
|
|
"fmt"
|
|
"log"
|
|
"time"
|
|
|
|
"github.com/nlopes/slack"
|
|
)
|
|
|
|
var (
|
|
slackToken = flag.String("token", "", "slack token")
|
|
playing = flag.String("playing-emoji", "headphones", "the emoji to use when playing")
|
|
paused = flag.String("paused-emoji", "musical_note", "the emoji to use when paused")
|
|
)
|
|
|
|
func main() {
|
|
flag.Parse()
|
|
if *slackToken == "" {
|
|
log.Fatal("-token must be defined")
|
|
}
|
|
|
|
sc, err := newSpotify()
|
|
if err != nil {
|
|
log.Fatalf("Failed to connect to session bus: %v", err)
|
|
}
|
|
|
|
rootCtx := context.Background()
|
|
|
|
client := slack.New(*slackToken, slack.OptionDebug(true))
|
|
|
|
timer := time.NewTimer(time.Millisecond)
|
|
for {
|
|
select {
|
|
case <-rootCtx.Done():
|
|
break
|
|
case <-timer.C:
|
|
info, err := sc.GetPlaybackInfo()
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
statusEmoji := fmt.Sprintf(":%s:", *paused)
|
|
if info.IsPlaying {
|
|
statusEmoji = fmt.Sprintf(":%s:", *playing)
|
|
}
|
|
|
|
var album string
|
|
if info.Album != "" {
|
|
album = fmt.Sprintf(" on \"%s\"", info.Album)
|
|
}
|
|
|
|
status := fmt.Sprintf("\"%s\" by \"%s\"%s", info.Title, info.Artist, album)
|
|
if err := client.SetUserCustomStatusContext(rootCtx, status, statusEmoji, info.Duration.Milliseconds()); err != nil {
|
|
log.Printf("could not set user status to '%s': %+v", status, err)
|
|
}
|
|
|
|
timer.Reset(time.Second * 10)
|
|
}
|
|
}
|
|
}
|