#!/bin/bash source /opt/aninix/Uniglot/Bash/header export downloadtorrent="sudo -u deluge deluge-console 2>/dev/null add" export IFS=" " export servicename='wolfpack' function helptext { echo ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /\____ xxxxxxxxxxxxx AniNIX::WolfPack // ~ / _\_____ Let loose the wolves to hunt, run, / \ .. \/ and be free. They shall repay you // /~_____/ with their prey. /// \\/ / ~dev@aninix.net ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ wolfpack --alpha [enginefile] ~~ Tell the alpha to send the pack members hunting. wolfpack --member [enginefile] ~~ Send a member to train a pup and bring back results. Optionally provide a torrent engine file. wolfpack --torrent-monitor ~~ Pull up the Deluge console for torrents. wolfpack --torrent-lookup ~~ Look up and add a torrent if user confirms. wolfpack --help ~~ Show this helptext Available pup types (all pups are line-delimited with the type and result location as the first two lines): torrent ~~ Torrent the result of the search term. Will remove search line on success. shows ~~ Download the episode in a show and increment. Shows are listed in format S01E01#Show terms#modifier download ~~ Takes a list of commands to run to arrive at a URL to grab and downloads the last URL. search ~~ Uses the Google search engine to return the top five results for the search terms on each line. ' } function privacycheck { ip="$(/usr/local/bin/whatismyip)" if [ -z "$ip" ] || [ "$ip" == "$(nslookup aninix.net | grep Address | cut -f 2 -d ' ' | tail -n 1)" ]; then echo "ERROR: Should not torrent directly from the AniNIX main IP for privacy reasons" 2>&1 | systemd-cat -t "$servicename" exit 1 fi } function nextairdate { if [ -z "$1" ]; then echo "Need a show to search for" exit 1; fi timeout 5 elinks --dump "https://www.episodate.com/tv-show/$(echo $1 | tr '[:upper:]' '[:lower:]' | tr ' ' '-')?season=99" 2>&1 | grep 'and airs on' | sed 's# Season [0-9]\+ / Episode [0-9]\+ and airs on ##' return } function torrentConfigure { if [ -z "$3" ]; then configuretorrent /usr/local/etc/WolfPack/torrentengine else configuretorrent "$3" fi } function torrent { if [ "$1" == "" ] || [ $(wc -l "$1" | cut -f 1 -d ' ') -lt 3 ]; then echo "Need a valid argument." return; fi torrentConfigure privacycheck; export downloaddir=$(head -n 2 "$1" | tail -n 1) sudo -u deluge deluge-console config -s autoadd_location "$downloaddir" 2>/dev/null sudo -u deluge deluge-console config -s download_location "$downloaddir" 2>/dev/null for i in $(tail -n +3 "$1"); do getmagnetlink "$i" if [ "$magnetlink" != "" ]; then /bin/bash -c "$downloadtorrent $magnetlink" sed -i "/$i/d" "$1" echo $magnetlink | systemd-cat -t "$servicename" echo Added magnet to deluged and removed $i | systemd-cat -t "$servicename" fi done if [ -x `which clamscan` ]; then clamscan -r -i "$downloaddir" | systemd-cat -t "$servicename"; fi } function shows { if [ "$1" == "" ] || [ $(wc -l "$1" | cut -f 1 -d ' ') -lt 3 ]; then echo "Need a valid argument." return; fi torrentConfigure privacycheck; export downloaddir=$(head -n 2 "$1" | tail -n 1) sudo -u deluge deluge-console config -s autoadd_location "$downloaddir" 2>/dev/null sudo -u deluge deluge-console config -s download_location "$downloaddir" 2>/dev/null for i in $(tail -n +3 "$1"); do sepisode=$(echo $i | cut -f 1 -d '#' | xargs) showName="$(echo $i | cut -f 2 -d '#' | xargs)" modifier="$(echo $i | cut -f 3 -d '#' | xargs)" season=$(echo $sepisode | cut -f 1 -d 'E' | cut -f 2 -d 'S') episode=$(echo $sepisode | cut -f 2 -d 'E') newep=$(printf "%02d\n" $((${episode#0} + 1))) newseason="$(printf "%02d\n" $((${season#0} + 1)))" if [ -z "$modifier" ]; then getmagnetlink "$showName $sepisode" else getmagnetlink "$showName $sepisode $modifier" fi if [ "$magnetlink" != "" ]; then # We found an episode. echo $i | systemd-cat -t "$servicename" echo $magnetlink | systemd-cat -t "$servicename" /bin/bash -c "$downloadtorrent $magnetlink" sed -i "s/$i/S${season}E${newep}#${showName}#${modifier}/" "$1" echo Downloaded and pup updated. | systemd-cat -t "$servicename" echo | systemd-cat -t "$servicename" else # We didn't -- is there a new season? if [ -z "$modifier" ]; then getmagnetlink "$showName S${newseason}E01" else getmagnetlink "$showName S${newseason}E01 $modifier" fi if [ "$magnetlink" != "" ]; then echo "S${newseason}E01" $showName | systemd-cat -t "$servicename" echo "$magnetlink" | systemd-cat -t "$servicename" /bin/bash -c "$downloadtorrent $magnetlink" sed -i "s/$i/S${newseason}E02#$showName#$modifier/" "$1" else nextAirDate="$(nextairdate "$showName")" if [ ! -z "$nextAirDate" ]; then echo "No new season found for $showName -- next airs $(nextairdate "$showName")" | systemd-cat -t "$servicename" if [ "$(date -d "$nextAirDate" -u +%s)" -lt "$(date -u +%s)" ]; then echo ERROR: Should have found a new episode for $searchterms and did not -- check your provider\! | systemd-cat -t "$servicename" fi else echo "No new season found for $showName" | systemd-cat -t "$servicename" fi fi fi done if [ -x `which clamscan` ]; then clamscan -r -i "$downloaddir" | systemd-cat -t "$servicename"; fi } function download { if [ "$1" == "" ] || [ $(wc -l "$1" | cut -f 1 -d ' ') -lt 3 ]; then echo "Need a valid argument." return; fi export dedupterm="$(echo $1 | rev | cut -f 1 -d '/' | rev | cut -f 1 -d '.')" # Second line in the file is the directory to download to. export downloaddir=$(head -n 2 "$1" | tail -n 1 | sed 's#/$##') # The third line and any following lines should be for i in $(tail -n +3 "$1"); do if [ -z "$i" ]; then continue; fi export comm=$(echo $i | sed "s#PREVRESULT#$nexturl#g" -) export nexturl=$(bash -c "$comm") done if [ -z "$nexturl" ]; then echo ERR: $dedupterm wolf pup is not finding its target. fi export filename="$downloaddir"/"$(echo "$nexturl" | rev | cut -f 1 -d \/ | rev)" #if file doesn't already exist.... if [ ! -f "$filename" ]; then echo Downloading $nexturl to $filename ... | systemd-cat -t "$servicename" for i in $(find "$downloaddir" -type f | grep -i "$dedupterm"); do echo Deduped\! Removed $i from $downloaddir | systemd-cat -t "$servicename" rm -f "$i" 2>&1 | systemd-cat -t "$servicename" done wget --timeout=5 -q -O "$filename" "$nexturl" echo Downloaded | systemd-cat -t "$servicename" fi if [ -x `which clamscan` ]; then clamscan -r -i "$downloaddir" | systemd-cat -t "$servicename"; fi } function search { if [ "$1" == "" ] || [ $(wc -l "$1" | cut -f 1 -d ' ') -lt 3 ]; then echo "Need a valid argument." return; fi export downloaddir=$(head -n 2 "$1" | tail -n 1 | sed 's#/$##') for i in $(tail -n +3 "$1"); do export searchstring=$(echo $i | sed 's/ /+/g') export file="$downloaddir"/$searchstring'.txt' echo | googler --count=5 -C -x "$searchstring" | grep -v 'Enter n, p, result' > "$file" echo "Ran search for $searchstring to $file" | systemd-cat -t "$servicename" done } if [ "$1" == "" ]; then helptext; exit 1; fi echo '---' $(date) '---' | systemd-cat -t "$servicename" case "$1" in "--alpha") echo Started alpha on `uname -n` | systemd-cat -t "$servicename" if [ "$2" == "" ]; then export basedir="/usr/local/etc/WolfPack" else export basedir="$2"; fi echo "Starting members from pup in "$basedir | systemd-cat -t "$servicename" for i in $(find "$basedir" -type f | grep '.pup'); do /usr/local/bin/wolfpack --member "$i" "$3"; done ;; "--member") echo "Spawning a $(head -n 1 "$2") member for $2 on `uname -n`" | systemd-cat -t "$servicename" (printf "IP: "; /usr/local/bin/whatismyip) | systemd-cat -t "$servicename" case "$(head -n 1 "$2")" in "shows") shows "$2" ;; "torrent") torrent "$2" ;; "search") search "$2" ;; "download") download "$2" ;; *) echo "Bad pup type." ;; esac ;; "--torrent-monitor") exec sudo -u deluge deluge-console 2>/dev/null; exit 0; ;; "--torrent-lookup") torrentConfigure getmagnetlink "$(echo $2 | tr '#' "$searchunifier")" if [ -z "$magnetlink" ]; then echo Nothing found; exit 0; fi echo echo Found: $magnetlink echo echo 'Acceptable? [y/n]' read answer if [ "$answer" == "y" ]; then /bin/bash -c "$downloadtorrent $magnetlink" fi; exit 0; ;; *) helptext ;; esac echo "Exited "$1 | systemd-cat -t "$servicename" echo '---' "$(date)" '---' | systemd-cat -t "$servicename" echo | systemd-cat -t "$servicename"