diff --git a/scripts/shell/create-urls-txt-files-for-gallery-dl-twitter-files.sh b/scripts/shell/create-urls-txt-files-for-gallery-dl-twitter-files.sh new file mode 100755 index 0000000..87a79ab --- /dev/null +++ b/scripts/shell/create-urls-txt-files-for-gallery-dl-twitter-files.sh @@ -0,0 +1,50 @@ +#!/bin/bash + +cur_dirname=`pwd` + +if [[ $cur_dirname != *"gallery-dl/twitter" ]]; then + echo 'Not a valid path' + echo 'Are you inside a gallery-dl/twitter directory?' + exit 1 +fi + +# creates a .txt file for each .png file +if false; then + files=($(find * -type f -not -name '*.txt')) + + for f in ${files[@]}; do + filenameSplit=(${f//\// }) + + account_name=${filenameSplit[0]} + file_name=${filenameSplit[1]} + post_id=`echo $file_name | cut -f1 -d"_"` + + tweet_url="https://twitter.com/$account_name/status/$post_id" + + echo $tweet_url > $account_name/$post_id.txt + done +fi + +# creates a .txt file for each artist folder +if true; then + artists=($(find * -type d)) + + for account_name in ${artists[@]}; do + echo "Doing \"$account_name\" now..." + files=($(find $account_name -type f -not -name '*.txt')) + + urls_filename="$account_name/urls.txt" + rm --force $urls_filename + + for f in ${files[@]}; do + filenameSplit=(${f//\// }) + + file_name=${filenameSplit[1]} + post_id=`echo $file_name | cut -f1 -d"_"` + + tweet_url="https://twitter.com/$account_name/status/$post_id" + + echo "$file_name: $tweet_url" >> $urls_filename + done + done +fi diff --git a/scripts/shell/loop.sh b/scripts/shell/loop.sh new file mode 100755 index 0000000..e63d880 --- /dev/null +++ b/scripts/shell/loop.sh @@ -0,0 +1,18 @@ +#!/bin/bash + +command="$@" + +if [ -z "$command" ]; then + echo "Please provide a command. Example: loop.sh echo foo" + exit 1 +fi + +while true; do + clear + eval $command + + echo "" + echo "[loop.sh] Done!" + echo "[loop.sh] Press any key to continue..." + read +done diff --git a/scripts/shell/mmm-iterate-modlist.sh b/scripts/shell/mmm-iterate-modlist.sh new file mode 100755 index 0000000..e8bdcfc --- /dev/null +++ b/scripts/shell/mmm-iterate-modlist.sh @@ -0,0 +1,290 @@ +#!/bin/bash + +show_help() { + echo "Usage: $0 [--mods-names|-m mods] [--include-default-mods|-d true] [--interactive-mode|-i true]" + echo "Options:" + echo " --mods-names|-m (required) Specify mods names list, separation by comma (,)." + echo " Run \"--use-ids true\" to use ids instead of names for mod installations" + echo " --include-default-mods|-d (optional) Includes a list of default mods." + echo " Run \"--list-default-mods true\" to list the default mods." + echo " --interactive-mode|-i (optional) The script will ask for installation for each mod and show warnings." +} + +if ! test -f modlist.json; then + echo "This script uses the mmm (meza/minecraft-mod-manager) tool to detect and install mods." + echo "Please ensure that you are inside a .minecraft folder that contains an initialized mmm setup." + echo "mmm's GitHub repository: https://github.com/meza/minecraft-mod-manager" + exit 1 +fi + +modsnames_csv='' +use_ids=false +should_include_default_mods=false +list_default_mods=false +interactive_mode=false + +while [ "$#" -gt 0 ]; do + case "$1" in + --help|-h) show_help; exit ;; + --mods-names|-m) modsnames_csv="$2"; shift 2 ;; + --use-ids) use_ids=true; shift 2 ;; + --include-default-mods|-d) should_include_default_mods=true; shift 2 ;; + --list-default-mods) list_default_mods=true; shift 2 ;; + --interactive-mode|-i) interactive_mode=true; shift 2 ;; + *) shift ;; + esac +done + +default_mods_ids=( + "P7dR8mSH", # Fabric API +) + +if $list_default_mods; then + echo "Default mods to be installed:" + for mod_id in ${default_mods_ids[@]}; do + mod_title=(http --verify no "https://api.modrinth.com/v2/project/$mod_id" | jq -r ".title") + mod_url="https://modrinth.com/mod/$mod_id" + + echo " $mod_title: $mod_url" + done +fi + +if $should_include_default_mods; then + for mod_id in ${default_mods_ids[@]}; do + mmm add modrinth $mod_id + done +fi + +modsnames=() + +while [ -z "$modsnames_csv" ]; do + echo "Enter mods list, separation by comma (,)" + read modsnames_csv +done + +modsnames+=(${modsnames_csv//,/ }) + +resource_packs=() +skipped_mods=() + +mods_length="${#modsnames[@]}" + +for (( i=0; i<${mods_length}; i++ )); do + mod=${modsnames[$i]} + + clear + + echo "Doing \"$mod\" now... ($((i+1))/$((mods_length+1)))" + + if $use_ids; then + echo "yes n | mmm add modrinth $mod" + + if [ $? -ne 0 ]; then + skipped_mods+=($mod) + fi + + continue + fi + + req_output=`http --verify no "https://api.modrinth.com/v2/search?query=$mod&index=relevance"` + echo $req_output | jq empty + + if [ $? -ne 0 ]; then + if $interactive_mode; then + echo "The query for mod \"$mod\" resulted in a invalid JSON response." + + mod_search_url=${mod// /+} + echo "Please search for it manually: https://modrinth.com/mods?q=$mod_search_url" + echo "Press any key to continue..." + read + continue + fi + + skipped_mods+=($mod) + fi + + mod_search_hits=$(jq -r '.hits' <<< "$req_output") + mod_search_count=$(jq length <<< "$mod_search_hits") + + mod_id_selected='' + + should_install_mod=false + should_skip_mod=false + should_continue_matches=false + + if [ $mod_search_count -eq 0 ]; then + skipped_mods+=($mod) + continue + fi + + for ((j=0; j < mod_search_count; j++)); do + mod_search_hit=$(jq -r ".[$j]" <<< "$mod_search_hits") + + mod_id=$(jq -r ".project_id" <<< "$mod_search_hit") + mod_slug=$(jq -r ".slug" <<< "$mod_search_hit") + mod_project_type=$(jq -r ".project_type" <<< "$mod_search_hit") + + if $interactive_mode; then + echo "We found a match for the \"$mod\" mod! ($((j+1))/$((mod_search_count+1)))" + echo "" + + mod_url="https://modrinth.com/mod/${mod_id// /+}" + + echo "Mod's URL: $mod_url" + echo "" + + echo "Mod's info:" + echo "$mod_search_hit" | jq + + echo "" + fi + + if [ $mod_project_type == "resourcepack" ]; then + if $interactive_mode; then + echo "" + echo "The found match relates to a resource pack instead of a mod." + echo "Please input 'yes' if you want the script to remind you to install the resource pack separately and skip to the next mod." + echo "Please input 'no' if you want the script to continue looking for more matches for the mod." + + while true; do + read -p "Please answer: (y/n): " yn + + case $yn in + [Yy]* ) resource_packs+=($mod); should_skip_mod=true; break;; + [Nn]* ) clear; should_continue_matches=true; echo "Looking for more matches..."; sleep 1; echo ""; break;; + * ) echo "Please answer yes or no."; echo "";; + esac + done + fi + + resource_packs+=($mod) + should_continue_matches=true + fi + + if [ $mod_project_type != "mod" ]; then + if $interactive_mode; then + echo "" + echo "The found match relates to project type that is not a mod (\"$mod_project_type\")." + echo "Please input 'yes' if you want the script to remind you to install the project separately and skip to the next mod." + echo "Please input 'no' if you want the script to continue looking for more matches for the mod." + + while true; do + read -p "Please answer: (y/n): " yn + + case $yn in + [Yy]* ) resource_packs+=($mod); should_skip_mod=true; break;; + [Nn]* ) clear; should_continue_matches=true; echo "Looking for more matches..."; sleep 1; echo ""; break;; + * ) echo "Please answer yes or no."; echo "";; + esac + done + fi + + should_continue_matches=true + fi + + if $should_continue_matches; then + should_continue_matches=false + clear + continue + fi + + if $should_skip_mod; then + break + fi + + should_install_mod=true + + if $interactive_mode; then + while true; do + read -p "Does this look right? (y/n/c): " yn + + case $yn in + [Yy]* ) should_install_mod=true; break;; + [Nn]* ) clear; echo "Looking for more matches..."; sleep 1; echo ""; break;; + [Cc]* ) should_skip_mod=true; break;; + * ) echo "Please answer yes, no or cancel."; echo "";; + esac + done + fi + + if $should_skip_mod; then + skipped_mods+=($mod) + fi + + if $should_install_mod || $should_skip_mod; then + break + fi + done + + if $should_install_mod; then + clear + + grep --quiet $mod_slug modlist.json + + if [ $? -eq 0 ]; then + if $interactive_mode; then + echo "The selected mod is already installed." + echo "Skipping..." + echo "Press any key to continue..." + read + fi + + continue + fi + + if $interactive_mode; then + echo "The following mod will be intalled: \"$mod_slug\"" + fi + + echo "yes n | mmm add modrinth $mod_id" + read + + if [ $? -ne 0 ]; then + skipped_mods+=($mod) + + if $interactive_mode; then + echo "" + echo "It seems that the mod installation was not successful." + echo "The script will log this mod as not installed after all mods are processed." + echo "Press any key to continue..." + read + continue + fi + fi + fi + + if $should_skip_mod; then + continue + fi + + if [ -z "$mod_info_selected" ]; then + skipped_mods+=($mod) + + if $interactive_mode; then + echo "" + echo "No match was selected for installation." + echo "The mod \"$mod\" wasn't installed by the script." + echo "This will be logged when all mods are finished." + echo "Press any key to continue..." + read + fi + fi +done + +if (( ${#resource_packs[@]} )); then + echo "" + echo "[INFO] There were resource packs found:" + + for r in ${resource_packs[@]}; do + echo " $r" + done +fi + +if (( ${#skipped_mods[@]} )); then + echo "" + echo "[INFO] There were mods that had their installations skipped:" + + for mod in ${skipped_mods[@]}; do + echo " $mod" + done +fi