#!/bin/bash source /usr/local/etc/WolfPack/torrentengine export IFS=" " export logfile='/var/log/wolfpack.log' 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 ~~ Tell the alpha to send the pack members hunting. wolfpack --member ~~ Send a member to train a pup and bring back results. wolfpack --stop-torrent ~~ Stop any transmission-cli processes 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 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 { if [ "$(whatismyip)" == "$(nslookup aninix.net | grep Address | cut -f 2 -d ' ' | tail -n 1)" ]; then echo "Should not torrent directly from the AniNIX main IP for privacy reasons" 2>&1 | tee -a $logfile exit 1 fi } function transmissioncheck { if [ "$(pgrep -afc transmission-cli)" -ne 0 ]; then echo "Transmission is still running. Aborting." | tee -a $logfile exit 0; fi } function torrent { if [ "$1" == "" ] || [ $(wc -l "$1" | cut -f 1 -d ' ') -lt 3 ]; then echo "Need a valid argument." return; fi transmissioncheck; privacycheck; export downloaddir=$(head -n 2 "$1" | tail -n 1) if [ "$(pgrep -afc transmission-cli)" -ne 0 ]; then echo "Transmission is still running. Aborting." | tee -a $logfile return; fi for i in $(tail -n +3 "$1"); do export searchstring="$(echo $i | sed 's/ /+/g')" export searchlink="$(printf "$torrentengine" "$searchstring")" export searchresult=$(wget -q -O - "$searchlink" | bash -c "$torrentterms") export magnetlink=$(wget -q -O - "$searchresult" | grep 'magnet:?' | cut -f $magnetposition -d $magnetseparator) if [ $torrentdebugging == "true" ]; then echo $searchstring echo $searchlink echo $searchresult echo $magnetlink read fi if [ "$magnetlink" != "" ]; then /usr/bin/transmission-cli -d 1000 -u 1 -er -w "$downloaddir" -b -f "/usr/local/bin/wolfpack-stoptorrent" "$magnetlink" sed -i "/$i/d" "$1" echo Downloaded and removed $i | tee -a $logfile fi done } function shows { if [ "$1" == "" ] || [ $(wc -l "$1" | cut -f 1 -d ' ') -lt 3 ]; then echo "Need a valid argument." return; fi transmissioncheck; privacycheck; export downloaddir=$(head -n 2 "$1" | tail -n 1) echo "Would download to "$downloaddir for i in $(tail -n +3 "$1"); do export searchsegment="$(echo $i | tr '#' '+' | tr ' ' '+')" export searchlink="$(printf "$torrentengine" "$searchsegment")" export searchresult=$(wget -q -O - "$searchlink" | bash -c "$torrentterms") export magnetlink=$(wget -q -O - "$searchresult" | grep 'magnet:?' | cut -f $magnetposition -d $magnetseparator) if [ $torrentdebugging == "true" ]; then echo $searchstring echo $searchlink echo $searchresult echo $magnetlink read fi if [ "$magnetlink" != "" ]; then # We found an episode. echo $i | tee -a $logfile /usr/bin/transmission-cli -d 600 -u 1 -er -w "$downloaddir" -b -f "/usr/local/bin/wolfpack-stoptorrent" "$magnetlink" export sepisode=$(echo $i | cut -f 1 -d '#') export searchterms="$(echo $i | cut -f 2 -d '#')" export season=$(echo $sepisode | cut -f 1 -d 'E' | cut -f 2 -d 'S') export episode=$(echo $sepisode | cut -f 2 -d 'E') export ep=$(printf "%02d\n" $((${episode#0} + 1))) sed -i "s/$i/S"$season"E"$ep"#"$searchterms"/" "$1" echo Downloaded and pup updated. | tee -a $logfile rm -Rf ~/.config/transmission/resume/* rm -Rf ~/.config/transmission/torrents/* rm -f "$downloaddir"/*/*.txt # Including this to avoid breaking Plex rm -f "$downloaddir"/*/*.nfo echo | tee -a $logfile else # We didn't -- is there a new season? export sepisode=$(echo $i | cut -f 1 -d '#') export searchterms=$(echo $i | cut -f 2 -d '#') export season=$(echo $sepisode | cut -f 1 -d 'E' | cut -f 2 -d 'S') export episode=$(echo $sepisode | cut -f 2 -d 'E') export newseason=$(printf "%02d\n" $((${season#0} + 1))) export newsearch="$(echo $searchlink | sed 's/S'$season'E'$episode'/S'$newseason'E01/')" export searchresult=$(wget -q -O - "$newsearch" | bash -c "$torrentterms") export magnetlink=$(wget -q -O - "$searchresult" | grep 'magnet:?' | cut -f $magnetposition -d $magnetseparator) if [ $torrentdebugging == "true" ]; then echo $newseason echo $newsearch echo $searchresult echo $magnetlink read fi if [ "$magnetlink" != "" ]; then echo "S"$newseason"E01" $searchterms | tee -a $logfile /usr/bin/transmission-cli -d 600 -u 1 -er -w "$downloaddir" -b -f "/usr/local/bin/wolfpack-stoptorrent" "$magnetlink" sed -i "s/$i/S"$newseason"E01#"$searchterms"/" "$1" else echo "No new season found for" $searchterms | tee -a $logfile fi fi done } function download { if [ "$1" == "" ] || [ $(wc -l "$1" | cut -f 1 -d ' ') -lt 3 ]; then echo "Need a valid argument." return; fi # Second line in the file is the directory to download to. export downloaddir=$(head -n 2 "$1" | tail -n 1) # The third line and any following lines should be for i in $(tail -n +3 "$1"); do #echo EVALUATING: $i if [ "$i" == "" ]; then continue; fi export comm=$(echo $i | sed "s#PREVRESULT#$nexturl#g" -) export nexturl=$(bash -c "$comm") #echo Found next url: $nexturl done 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 ... | tee -a $logfile export dedupterm="$(echo $1 | cut -f 1 -d '.' | rev | cut -f 1 -d '/' | rev)" for i in $(find "$downloaddir" | grep -i "$dedupterm"); do echo Deduped! Removed $i from $downloaddir | tee -a $logfile rm -Rf $i; done wget -q -O "$filename" "$nexturl" echo Downloaded | tee -a $logfile 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) 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 | tee -a $logfile done } function stoptorrent { # TODO This is destructive to all other transmission-CLI clients on the box. killall transmission-cli } if [ "$1" == "" ]; then helptext; exit 1; fi echo '---' $(date) '---' | tee -a $logfile echo Started "$1" "$2" on $(uname -n) | tee -a $logfile case "$1" in "--alpha") if [ "$2" == "" ]; then export basedir="/usr/local/etc/WolfPack" else export basedir="$2"; fi echo "Starting members from pup in "$basedir | tee -a $logfile for i in $(find "$basedir" -type f | grep '.pup'); do /usr/local/bin/wolfpack --member "$i"; done ;; "--member") echo "Spawning a member for "$2 | tee -a $logfile whatismyip | tee -a /var/log/wolfpack.log case "$(head -n 1 "$2")" in "shows") shows "$2" ;; "torrent") torrent "$2" ;; "search") search "$2" ;; "download") download "$2" ;; *) echo "Bad pup type." ;; esac ;; "--stoptorrent") stoptorrent ;; *) helptext ;; esac echo "Exited "$1 | tee -a $logfile echo '---' "$(date)" '---' | tee -a $logfile echo | tee -a $logfile