add radio-play option - annna - Annna the nice friendly bot. | |
git clone git://bitreich.org/annna/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws6… | |
Log | |
Files | |
Refs | |
Tags | |
README | |
--- | |
commit 43ac6c7ed634ca428ff807b06a9206ecf556c67f | |
parent 73e548850a2dc3dc7288f60679b7f468874b57b5 | |
Author: Anders Damsgaard <[email protected]> | |
Date: Fri, 9 Aug 2024 16:58:22 +0200 | |
add radio-play option | |
Signed-off-by: Annna Robert-Houdin <[email protected]> | |
Diffstat: | |
M annna-message-common | 7 +++++++ | |
A ytdl-mpd | 171 +++++++++++++++++++++++++++++… | |
2 files changed, 178 insertions(+), 0 deletions(-) | |
--- | |
diff --git a/annna-message-common b/annna-message-common | |
@@ -542,6 +542,13 @@ case "${text}" in | |
suri="$(printf "%s\n" "${word}" | bitreich-speak)" | |
annna-say -s "${server}" -c "${channel}" "${suri}" | |
;; | |
+"${ircuser}, please radio play "*) | |
+ url="$(printf "%s\n" "${text}" | cut -c 25- | sed 's,\t, ,g')" | |
+ { | |
+ ytdl-mpd -a -m -q "$url" | |
+ annna-say -s "${server}" -c "${channel}" "Please listen on gop… | |
+ } & | |
+ ;; | |
"${ircuser}, please radio say "*) | |
word="$(printf "%s\n" "${text}" | cut -c 25- | sed 's,\t, ,g')" | |
annna-say -s "${server}" -c "${channel}" "Please listen on gophers://b… | |
diff --git a/ytdl-mpd b/ytdl-mpd | |
@@ -0,0 +1,171 @@ | |
+#!/bin/sh | |
+# fetch a media file, tag it with metadata, and add it to mpd queue | |
+# requirements: yt-dlp, id3tag | |
+ | |
+set -e | |
+ | |
+musicroot="/br/radio/music" | |
+ | |
+die() { | |
+ printf '%s: error: %s\n' "${0##*/}" "$1" >&2 | |
+ exit 1 | |
+} | |
+ | |
+show_help() { | |
+ printf 'usage: %s [OPTIONS] [URL ..]\n' "${0##*/}" | |
+ echo "downloads music from the web and tags it. Playlists are supporte… | |
+ echo "If no URLs are supplied as arguments, they are expected as stdin… | |
+ echo | |
+ echo "OPTIONS are one or more of the following:" | |
+ echo " -a add metadata without interaction" | |
+ echo " -h show this message" | |
+ echo " -m move output music file to $musicroot" | |
+ echo " -q add to mpd queue (requires -m)" | |
+ echo " -t download through torsocks(1)" | |
+ echo " -- do not consider any following arguments as options" | |
+} | |
+ | |
+ytdl() { | |
+ $prefix yt-dlp \ | |
+ --extract-audio \ | |
+ --audio-quality 0 \ | |
+ --audio-format mp3 \ | |
+ --add-metadata \ | |
+ --output "%(playlist_index)s - %(title)s.%(ext)s" \ | |
+ "$1" | |
+} | |
+ | |
+handle_url() { | |
+ oldpwd="$PWD" | |
+ outputdir="$(mktemp -d)" | |
+ mkdir -p "$outputdir" | |
+ cd "$outputdir" | |
+ | |
+ album="$(ytdl "$1" | tee /dev/tty | grep 'Finished downloading' | sed … | |
+ | |
+ if [ $? -ne 0 ]; then | |
+ die "youtube-dl error" | |
+ fi | |
+ | |
+ if [ "$(ls *.mp3 2>/dev/null | wc -l)" -lt 1 ]; then | |
+ printf "youtube-dl error" "$1" | |
+ if [ -n "$DISPLAY" ]; then | |
+ notify -u CRITICAL "youtube-dl error" "$1" | |
+ fi | |
+ exit 1 | |
+ fi | |
+ | |
+ if [ "$auto" = 0 ]; then | |
+ printf "add metadata? [Y/n] " | |
+ read | |
+ else | |
+ REPLY=y | |
+ fi | |
+ | |
+ case "$REPLY" in | |
+ N|n) | |
+ mv ./*.mp3 "$oldpwd/" | |
+ cd - | |
+ exit 0;; | |
+ esac | |
+ | |
+ artist="Unknown Artist" | |
+ album="${album:-Unknown Album}" | |
+ track=1 | |
+ | |
+ # Loop over files with spaces | |
+ SAVEIFS=$IFS | |
+ IFS=$(printf '\n\b') | |
+ for f in *.mp3; do | |
+ | |
+ [ "$track" = 1 ] && \ | |
+ artist="$(printf '%s' "$f" | \ | |
+ awk -F'-' '{gsub(/^ +/, "", $2); gsub(/ +$/, "… | |
+ | |
+ printf 'file: %s\n' "$f" | |
+ | |
+ song=$(printf '%s' "$f" | sed 's/.* - //; s/^ //; s/\.mp3//') | |
+ | |
+ if [ "$auto" = 0 ]; then | |
+ printf 'song [%s]: ' "$song" | |
+ read | |
+ song="${REPLY:-$song}" | |
+ | |
+ printf 'track [%s]: ' "$track" | |
+ read | |
+ track="${REPLY:-$track}" | |
+ | |
+ printf 'album [%s]: ' "$album" | |
+ read | |
+ album="${REPLY:-$album}" | |
+ | |
+ printf 'artist [%s]: ' "$artist" | |
+ read | |
+ artist="${REPLY:-$artist}" | |
+ fi | |
+ | |
+ id3tag --artist="$artist" --album="$album" \ | |
+ --song="$song" --track="$track" \ | |
+ "$f" | |
+ | |
+ track=$(( track + 1 )) | |
+ done | |
+ | |
+ IFS=$SAVEIFS | |
+ | |
+ if [ "$move_music" = 1 ]; then | |
+ outdir="$musicroot/$artist/$album" | |
+ mkdir -p "$outdir" | |
+ mv ./*.mp3 "$outdir" | |
+ mpc update --wait >/dev/null | |
+ if [ "$queue" = 1 ]; then | |
+ mpc findadd \ | |
+ artist "$artist" \ | |
+ album "$album" \ | |
+ title "$song" | |
+ fi | |
+ else | |
+ mv ./*.mp3 "$oldpwd/" | |
+ fi | |
+ | |
+ rmdir "$outputdir" | |
+ cd - >/dev/null | |
+} | |
+ | |
+prefix="" | |
+auto=0 | |
+move_music=0 | |
+queue=0 | |
+while :; do | |
+ case "$1" in | |
+ -a) | |
+ auto=1;; | |
+ -h) | |
+ show_help | |
+ exit 0;; | |
+ -m) | |
+ move_music=1;; | |
+ -q) | |
+ queue=1;; | |
+ -t) | |
+ prefix="torsocks";; | |
+ --) | |
+ shift | |
+ break;; | |
+ -?*) | |
+ die "unknown option specified: $1";; | |
+ *) | |
+ break | |
+ esac | |
+ shift | |
+done | |
+ | |
+if [ $# -lt 1 ]; then | |
+ urls="$(cat)" | |
+else | |
+ urls="$@" | |
+fi | |
+ | |
+for u in "$urls"; do | |
+ handle_url "$u" | |
+done |