#!/bin/bash # TMW GM Log Downloader (original): https://gitlab.com/liviorecchia/tmw-gm-log-downloader # tmw-info: https://git.themanaworld.org/legacy/tmw-info/ # The Mana World: https://themanaworld.org # Ledmitz (2020) - GPL 3.0 # Chat logs DIR CHAT_LOGS="$HOME/.local/share/mana/logs/server.themanaworld.org/" months=(01 02 03 04 05 06 07 08 09 10 11 12) thisYear=$(date -u +'%Y') thisMonth=$(date -u +'%m') # Main DIR TMW_INFO="$HOME/.tmw-info" # Items DB DIR ITEM_DIR="$TMW_INFO/item" # Monster DB DIR MOB_DIR="$TMW_INFO/mob" # Commands DIR TMW_CMDS="$TMW_INFO/cmds" # GM Log DIR TMW_GM_LOGS="$TMW_INFO/logs" GM_LOG_LIST="$TMW_INFO/gm_log_list" # Current month's GM log GM_LOG="$TMW_INFO/gm_log.tmp" # File to be read as report GM_REPORT="$TMW_INFO/gm_report.txt" # Runs on exit (deletes tmp files) function FINISH { rm -f "$TMW_INFO"/*.tmp } trap FINISH EXIT help(){ echo "tmw-info [command] [STRING]" echo " help / --help / -h (this help screen)" echo " cmds-update (downloads command source files. Should be run before using \"cmds\")" echo " cmds (ManaPlus and GM command reference)" echo " news (reads game news)" echo " online (shows online players)" echo " gm-update (downloads all GM logs. Should be run before searching)" echo " gm-search TERM1 TERM2 TERM3 ... (results contain any of the terms)" echo " gm-asearch TERM1 TERM2 TERM3 ... (results contain all of the terms)" echo " gm-esearch TERM1 TERM2 TERM3 ... (results contain the exact term)" echo " gm-show (if zenity is installed, displays a GUI pop-up of the last 10 issued GM CMDs), otherwise in terminal" echo " chat-search TERM1 TERM2 TERM3 ... (chat: results contain all of the terms)" echo " item-update (downloads item DB. Must be run before searching)" echo " item-search TERM1 TERM2 TERM3 ... (items: results contain all of the terms)" echo " mob-update (downloads monster DB. Must be run before searching)" echo " mob-search TERM1 TERM2 TERM3 ... (monsters: results contain all of the terms)" echo 'If you get and error while searching, it may contain special characters and needs to be quoted' echo 'gm searches, item-search, mob-search and cmds require periodic updating with their respective update commands' echo 'To avoid hammering servers, there will be no update-all option. Use gm-update before performing gm searches. \ Use gm-show to quickly display the last 10 gm commands run (updates automatically)' } if [ -z "$1" ]; then echo "Missing command" help exit 0 fi # If no search term is given if [ "$1" == "gm-search" ] || [ "$1" == "gm-asearch" ] || [ "$1" == "gm-esearch" ] || [ "$1" == "item-search" ] || [ "$1" == "mob-search" ]; then if [ -z "$2" ]; then echo "Missing search terms" help exit 0 fi # If either the "logs" DIR doesn't exist or there are no files in the DIR fi # Create a DIR to save files in mkdir -p "$TMW_INFO" if [ "$1" == "help" ] || [ "$1" == "--help" ] || [ "$1" == "-h" ]; then help elif [ "$1" == "news" ]; then curl -s 'https://themanaworld.github.io/tmwa-server-data/news.html' | sed 's/<\/*[^>]*>//g' | less elif [ "$1" == "online" ]; then #curl -s 'https://server.themanaworld.org/' | sed 's/<\/*[^>]*>//g' | sed -r '/^\s*$/d' | sed -r '/^\s*Name\s*$/d' | sed 1d curl -s 'https://server.themanaworld.org/' | sed 's/<\/*[^>]*>//g' | sed -r '/^\s*$/d' | sed -r '/^\s*Name\s*$/d' | grep -v 'Online Players' | sed 1d | LC_ALL=C sort elif [ "$1" == "gm-update" ]; then mkdir -p "$TMW_GM_LOGS" # Get list of files from server to read the byte counts from wget -c -q -O "$GM_LOG_LIST.tmp" 'https://server.themanaworld.org/gm' sed 's/<\/*[^>]*>//g' "$GM_LOG_LIST.tmp" > "$GM_LOG_LIST" # Download the very first one without updating it if already exists #This is the only gmlog without a byte count check. If it becomes corrupted, it must be deleted wget -nc -q -P "$TMW_GM_LOGS" 'https://server.themanaworld.org/gm/gm.log.2008-12' for (( year = 2009; year <= thisYear; year++ )) do for month in ${months[*]} do # If the log is from this year and the month hasn't come yet, do nothing if [[ "$year" == "$thisYear" ]] && [[ "$month" > "$thisMonth" ]]; then : else # Get the bytecounts reported by server to compare with local file BYTECOUNT_WEB=$(grep "gm.log.$year-$month " "$GM_LOG_LIST" | awk '{print $4}' | sed -E 's/\s//g') BYTECOUNT_LOCAL=$(ls -l "$TMW_GM_LOGS/gm.log.$year-$month" 2> '/dev/null' | awk '{print $5}' | sed -E 's/\s//g') #echo $BYTECOUNT_WEB #echo $BYTECOUNT_LOCAL if [[ "$BYTECOUNT_WEB" != "$BYTECOUNT_LOCAL" ]]; then echo "Downloading $month/$year" wget -q -c -P "$TMW_GM_LOGS" "https://server.themanaworld.org/gm/gm.log.$year-$month" fi # Added for file rebuilt from corrupted (2020-09-old) BYTECOUNT_WEB_OLD=$(grep "gm.log.$year-$month-old " "$GM_LOG_LIST" | awk '{print $4}' | sed -E 's/\s//g') BYTECOUNT_LOCAL_OLD=$(ls -l "$TMW_GM_LOGS/gm.log.$year-$month-old" 2> '/dev/null' | awk '{print $5}' | sed -E 's/\s//g') if [[ "$BYTECOUNT_WEB_OLD" != "$BYTECOUNT_LOCAL_OLD" ]]; then echo "Downloading $month/$year-old" wget -q -c -P "$TMW_GM_LOGS" "https://server.themanaworld.org/gm/gm.log.$year-$month-old" fi fi done done # All searches cancel special grep characters, [ and ], which are read by grep, even in single quoted text # When echoing back, the \ are again removed to show what was originally typed by the user correctly # only [ and ] regex characters seemed to pose a problem elif [ "$1" == "gm-search" ]; then if [ ! -d "$TMW_GM_LOGS" ] || [ -z "$(ls "$TMW_GM_LOGS")" ]; then echo 'You must run gm-update before searching' exit 0 fi # Any terms: This must be an array because each term is searched separately in the for loop. SEARCH_TERMS=($(echo "$*" | sed -E 's/^gm-search\s//g' | sed 's/\[/\\\[/g' | sed 's/\]/\\\]/g')) for WORD in "${SEARCH_TERMS[@]}" do echo "========== Results (any): $WORD ==========" | sed 's/\\//g' grep -hi "$WORD" "$TMW_GM_LOGS"/* done elif [ "$1" == "gm-asearch" ]; then if [ ! -d "$TMW_GM_LOGS" ] || [ -z "$(ls "$TMW_GM_LOGS")" ]; then echo 'You must run gm-update before searching' exit 0 fi # All terms: This must not be an array SEARCH_TERMS=$(echo "$*" | sed -E 's/^gm-asearch\s//g' | sed 's/\[/\\\[/g' | sed 's/\]/\\\]/g') WORD_COUNT=$(echo "$SEARCH_TERMS" | wc -w) COUNT='1' echo "========== Results (all): $SEARCH_TERMS ==========" | sed 's/\\//g' while [ "$COUNT" -le "$WORD_COUNT" ] do WORD=$(echo "$SEARCH_TERMS" | awk "{print \$$COUNT}") if [ "$COUNT" = '1' ]; then grep -hi "$WORD" "$TMW_GM_LOGS"/* > "$TMW_INFO/gm-asearch$COUNT.tmp" else grep -hi "$WORD" "$TMW_INFO/gm-asearch$LAST_COUNT.tmp" > "$TMW_INFO/gm-asearch$COUNT.tmp" fi LAST_COUNT="$COUNT" COUNT=$(( COUNT + 1 )) done cat "$TMW_INFO/gm-asearch$LAST_COUNT.tmp" elif [ "$1" == "gm-esearch" ]; then if [ ! -d "$TMW_GM_LOGS" ] || [ -z "$(ls "$TMW_GM_LOGS")" ]; then echo 'You must run gm-update before searching' exit 0 fi # Exact search: Must not be an array. Used once. SEARCH_TERMS=$(echo "$*" | sed -E 's/^gm-esearch\s//g' | sed 's/\[/\\\[/g' | sed 's/\]/\\\]/g') echo "========== Results (exact): $SEARCH_TERMS ==========" | sed 's/\\//g' grep -hi "$SEARCH_TERMS" "$TMW_GM_LOGS"/* elif [ "$1" == 'gm-show' ]; then ## This shows a GUI window with the last 10 GM commands. The amount of lines can be changed with "LINE_COUNT" # Root URL of the GM logs (no date) GM_LOG_URL='https://server.themanaworld.org/gm/gm.log.' # Date scheme used in URL LOG_DATE=$(date -u +%Y-%m) # The current day TODAY=$(date -u +%d) # Yesterday YESTERDAY=$(date -u --date yesterday +%d) # Last month LAST_MONTH=$(date -u --date 'last month' +%m) # Last year LAST_YEAR=$(date -u --date 'last year' +%Y) # Maximum number of new lines to report LINE_COUNT='10' # Download the GM log curl -s "$GM_LOG_URL$LOG_DATE" > "$GM_LOG" # Check if no posts made this month yet if [[ $(grep '404 Not Found' "$GM_LOG") != '' ]]; then LINE_COUNT_TODAY='0' # Check if no posts made today yet elif [[ $(grep "$LOG_DATE-$TODAY" "$GM_LOG") == '' ]]; then LINE_COUNT_TODAY='0' else # Number of commands issued today LINE_COUNT_TODAY=$(grep "$LOG_DATE-$TODAY" "$GM_LOG" | wc -l) fi # If lines for today are at maximum, just get max lines if [ "$LINE_COUNT_TODAY" -ge "$LINE_COUNT" ]; then tail -n "$LINE_COUNT" "$GM_LOG" > "$GM_REPORT" # If line aren't maxed yet... else # If today isn't the first of the month, just get the lines from the current month's log if [[ "$TODAY" != '01' ]]; then tail -n "$LINE_COUNT" "$GM_LOG" > "$GM_REPORT" # If it is the 1st of the month... else # Number of lines to report from yesterday's commands (total - today = yesterday) LINE_COUNT_YESTERDAY=$(( "$LINE_COUNT" - "$LINE_COUNT_TODAY" )) # Make sure it isn't January, download last month's log and append lines to file if [[ $(date -u +%m) != '01' ]]; then curl -s "$GM_LOG_URL$(date -u +%Y)-$LAST_MONTH" > "$GM_LOG"'_last_month' grep "$(date -u +%Y)-$LAST_MONTH-$YESTERDAY" "$GM_LOG"'_last_month' | tail -n "$LINE_COUNT_YESTERDAY" > "$GM_REPORT" grep "$LOG_DATE-$TODAY" "$GM_LOG" >> "$GM_REPORT" # If it is January, last month is also last year else curl -s "$GM_LOG_URL$LAST_YEAR-12" > "$GM_LOG"'_last_month' grep "$LAST_YEAR-12-31" "$GM_LOG"'_last_month' | tail -n "$LINE_COUNT_YESTERDAY" > "$GM_REPORT" grep "$LOG_DATE-$TODAY" "$GM_LOG" >> "$GM_REPORT" fi fi fi if [[ $(dpkg -l 'zenity' | grep -Eo '^ii') == 'ii' ]]; then zenity --text-info 'tmw-gmlog' --width '600' --height '300' --filename "$GM_REPORT" else cat < "$GM_REPORT" fi elif [ "$1" == "chat-search" ]; then if [ ! -d "$CHAT_LOGS" ] || [ -z "$(ls "$CHAT_LOGS")" ]; then echo 'There are no chat logs to search' exit 0 fi # All terms: This must not be an array SEARCH_TERMS=$(echo "$*" | sed -E 's/^chat-search\s//g' | sed 's/\[/\\\[/g' | sed 's/\]/\\\]/g') WORD_COUNT=$(echo "$SEARCH_TERMS" | wc -w) COUNT='1' echo "========== Results (chat): $SEARCH_TERMS ==========" | sed 's/\\//g' while [ "$COUNT" -le "$WORD_COUNT" ] do WORD=$(echo "$SEARCH_TERMS" | awk "{print \$$COUNT}") if [ "$COUNT" = '1' ]; then grep -ir "$WORD" "$CHAT_LOGS"/* | sed -E 's/^.*server.themanaworld.org\/\///g' > "$TMW_INFO/chat-search$COUNT.tmp" else grep -hi "$WORD" "$TMW_INFO/chat-search$LAST_COUNT.tmp" > "$TMW_INFO/chat-search$COUNT.tmp" fi LAST_COUNT="$COUNT" COUNT=$(( COUNT + 1 )) done cat "$TMW_INFO/chat-search$LAST_COUNT.tmp" echo -e "\nLeave blank to cancel or enter a date as Year-Month/Day/CHAT_TAB(e.g. 2015-12/25/#General) to view the log:" read -p "Logfile: " CHAT if [[ "$CHAT" == '' ]]; then exit 0 else cat "$CHAT_LOGS$CHAT.log" | less fi elif [ "$1" == 'item-update' ]; then mkdir -p "$ITEM_DIR" ITEM_FILES=($(curl -s 'https://github.com/themanaworld/tmwa-server-data/tree/master/world/map/db' | sed 's/<\/*[^>]*>//g' | grep -o 'item_db.*\.txt')) for ITEM_FILE in "${ITEM_FILES[@]}"; do echo "Downloading $ITEM_FILE" curl -s "https://github.com/themanaworld/tmwa-server-data/blob/master/world/map/db/$ITEM_FILE"\ | grep -Eo '[0-9]+,\s*[a-zA-Z0-9]+,\s*[0-9]+,\s*[0-9]+,.*$|//ID,\s*Name.*$' | sed -E 's/<\/td>//g' | sed 's/"//g'\ | sort -nu > "$ITEM_DIR/$ITEM_FILE" done elif [ "$1" == "item-search" ]; then if [ ! -d "$ITEM_DIR" ] || [ -z "$(ls "$ITEM_DIR")" ]; then echo 'You must run item-update before searching' exit 0 fi # All terms: This must not be an array SEARCH_TERMS=$(echo "$*" | sed -E 's/^item-search\s//g' | sed 's/\[/\\\[/g' | sed 's/\]/\\\]/g') WORD_COUNT=$(echo "$SEARCH_TERMS" | wc -w) COUNT='1' echo "========== Results (item): $SEARCH_TERMS ==========" | sed 's/\\//g' while [ "$COUNT" -le "$WORD_COUNT" ] do WORD=$(echo "$SEARCH_TERMS" | awk "{print \$$COUNT}") if [ "$COUNT" = '1' ]; then grep -hi "$WORD" "$ITEM_DIR"/* > "$TMW_INFO/item-search$COUNT.tmp" else grep -hi "$WORD" "$TMW_INFO/item-search$LAST_COUNT.tmp" > "$TMW_INFO/item-search$COUNT.tmp" fi LAST_COUNT="$COUNT" COUNT=$(( COUNT + 1 )) done while IFS= read -r LINE; do echo -e "ID: $(echo "$LINE" | awk '{print $1}') Name: $(echo "$LINE" | awk '{print $2}') Type: $(echo "$LINE" | awk '{print $3}') \ Buy: $(echo "$LINE" | awk '{print $4}' | sed ':a;s/\B[0-9]\{3\}\>/,&/;ta') Sell: $(echo "$LINE" | awk '{print $5}' | sed ':a;s/\B[0-9]\{3\}\>/,&/;ta') \ Weight: $(echo "$LINE" | awk '{print $6}') Attack: $(echo "$LINE" | awk '{print $7}') Defense: $(echo "$LINE" | awk '{print $8}') \ Range: $(echo "$LINE" | awk '{print $9}') Magic Bonus: $(echo "$LINE" | awk '{print $10}') Slot: $(echo "$LINE" | awk '{print $11}') \ Gender: $(echo "$LINE" | awk '{print $12}') W Level: $(echo "$LINE" | awk '{print $14}') E Level: $(echo "$LINE" | awk '{print $15}') \ View: $(echo "$LINE" | awk '{print $16}') Script: $(echo "$LINE" | awk '{print $17}' | sed 's/[{}]//g') \ Other attributes:\n\ $(echo "$LINE" | grep -o '{.*}' | sed 's/[,{}]//g' | sed 's/^\s*//g')\n" done < "$TMW_INFO/item-search$LAST_COUNT.tmp" elif [ "$1" == 'mob-update' ]; then mkdir -p "$MOB_DIR" MOB_FILES="$(curl -s 'https://github.com/themanaworld/tmwa-server-data/tree/master/world/map/db' | sed 's/<\/*[^>]*>//g' | grep -o 'mob_db.*\.txt')" for MOB_FILE in $MOB_FILES; do echo "Downloading $MOB_FILE" curl -s "https://github.com/themanaworld/tmwa-server-data/blob/master/world/map/db/$MOB_FILE" \ | grep -Eo '[0-9]+,\s*[a-zA-Z0-9]+,\s*[a-zA-Z0-9]+,\s*[0-9]+,.*$|//ID,\s*Name.*$' | sed -E 's/<\/td>//g' | sed 's/"//g' \ | sort -nu > "$MOB_DIR/$MOB_FILE" done elif [ "$1" == "mob-search" ]; then if [ ! -d "$MOB_DIR" ] || [ -z "$(ls "$MOB_DIR")" ]; then echo 'You must run mob-update before searching' exit 0 fi # All terms: This must not be an array SEARCH_TERMS=$(echo "$*" | sed -E 's/^mob-search\s//g' | sed 's/\[/\\\[/g' | sed 's/\]/\\\]/g') WORD_COUNT=$(echo "$SEARCH_TERMS" | wc -w) COUNT='1' echo "========== Results (monster): $SEARCH_TERMS ==========" | sed 's/\\//g' while [ "$COUNT" -le "$WORD_COUNT" ] do WORD=$(echo "$SEARCH_TERMS" | awk "{print \$$COUNT}") if [ "$COUNT" = '1' ]; then grep -hi "$WORD" "$MOB_DIR"/* > "$TMW_INFO/mob-search$COUNT.tmp" else grep -hi "$WORD" "$TMW_INFO/mob-search$LAST_COUNT.tmp" > "$TMW_INFO/mob-search$COUNT.tmp" fi LAST_COUNT="$COUNT" COUNT=$(( COUNT + 1 )) done while IFS= read -r LINE; do MOB_ID=$(echo "$LINE" | awk '{print $1}' | sed 's/,//g') DROP_IDS=($(echo "$LINE" | awk -F ',' '{print $30 $32 $34 $36 $38 $40 $42 $44}' | sed -E 's/ 0,//g' | sed 's/,//g' | sed -E 's/^\s*//g')) DROP_PERCS=$(echo "$LINE" | awk -F ',' '{print $31 $33 $35 $37 $39 $41 $43 $45}' | sed -E 's/ 0,//g' | sed 's/,//g' | sed -E 's/^\s*//g') if [[ $(ls "$ITEM_DIR"/* 2> '/dev/null') != '' ]]; then for DROP_ID in "${DROP_IDS[@]}"; do grep -hE "^$DROP_ID, " "$ITEM_DIR"/* | awk '{print $2}' >> "$TMW_INFO/mob-drop-names-$MOB_ID.tmp" done cat < "$TMW_INFO/mob-drop-names-$MOB_ID.tmp" | tr ',\n' ' ' > "$TMW_INFO/mob-drop-names-$MOB_ID.tmp.tmp" mv "$TMW_INFO/mob-drop-names-$MOB_ID.tmp.tmp" "$TMW_INFO/mob-drop-names-$MOB_ID.tmp" DROP_NAMES=$(sed 's/^$//g' "$TMW_INFO/mob-drop-names-$MOB_ID.tmp") else echo 'Warning: To get the names of item drops, rather than just their IDs, you must run item-update first' DROP_NAMES="${DROP_IDS[@]}" fi DROP_COUNT='1' DROP_COUNT_MAX=$(echo "$DROP_NAMES" | wc -w) while [ "$DROP_COUNT" -le "$DROP_COUNT_MAX" ]; do DROP_NAME=$(echo "$DROP_NAMES" | awk "{print $"$DROP_COUNT"}") DROP_PERC=$(echo "$DROP_PERCS" | awk "{print $"$DROP_COUNT"}") DROP_PERCENT=$(echo "scale=2; $DROP_PERC / 100" | bc) DROP_RATIO=$(echo "scale=2; 100 / $DROP_PERCENT" | bc | sed 's/.00$//g' ) echo "$DROP_NAME($DROP_PERCENT% | $DROP_RATIO:1)," >> "$TMW_INFO/mob-drops-$MOB_ID.tmp" cat < "$TMW_INFO/mob-drops-$MOB_ID.tmp" | tr '\n' ' ' > "$TMW_INFO/mob-drops-$MOB_ID.tmp.tmp" mv "$TMW_INFO/mob-drops-$MOB_ID.tmp.tmp" "$TMW_INFO/mob-drops-$MOB_ID.tmp" DROP_COUNT=$(( DROP_COUNT + 1 )) done DROPS=$(sed 's/^$//g' "$TMW_INFO/mob-drops-$MOB_ID.tmp" 2> '/dev/null' | sed -E 's/,\s*$//g' | sed -E 's/,\s*$//g') echo -e "\ ID: $(echo "$LINE" | awk '{print $1}') NAME: $(echo "$LINE" | awk '{print $2 $3}') LVL: $(echo "$LINE" | awk '{print $4}')\n\ HP: $(echo "$LINE" | awk '{print $5}') SP: $(echo "$LINE" | awk '{print $6}') \ EXP: $(echo "$LINE" | awk '{print $7}') JOB EXP: $(echo "$LINE" | awk '{print $8}') EXP %: $(echo "$LINE" | awk '{print $47}') \ MAG EXP: $(echo "$LINE" | awk '{print $46}')\n\ RANGE: $(echo "$LINE" | awk '{print $9}') ATTK 1: $(echo "$LINE" | awk '{print $10}') ATTK 2: $(echo "$LINE" | awk '{print $11}')\n\ DEF: $(echo "$LINE" | awk '{print $12}') MAG DEF: $(echo "$LINE" | awk '{print $13}') ATTK DELAY: $(echo "$LINE" | awk '{print $27}') \ SPD: $(echo "$LINE" | awk '{print $26}')\n\ STATS: STR=$(echo "$LINE" | awk '{print $14}') AGI=$(echo "$LINE" | awk '{print $15}') VIT=$(echo "$LINE" | awk '{print $16}') \ INT=$(echo "$LINE" | awk '{print $17}') DEX=$(echo "$LINE" | awk '{print $18}') LUK=$(echo "$LINE" | awk '{print $19}')\n\ MUTATIONS: $(echo "$LINE" | awk '{print $56}') MUTATION STR: $(echo "$LINE" | awk '{print $57}')\n\ DROPS: $DROPS\n\ " done < "$TMW_INFO/mob-search$LAST_COUNT.tmp" elif [ "$1" == 'cmds-update' ];then mkdir -p "$TMW_CMDS" echo "Downloading and creating client command list..." wget -q -c -P "$TMW_CMDS" "https://wiki.themanaworld.org/index.php/User:Jak1/sandbox/client_commands" grep -Eo '>/[a-z]+' "$TMW_CMDS/client_commands" | sed 's/^>//g' > "$TMW_CMDS/client" grep -Eo '>/[a-z\,/]+' "$TMW_CMDS/client_commands" | sed 's/^>//g' >> "$TMW_CMDS/client" grep -Eao '/[a-z]+ ' '/usr/games/manaplus' >> "$TMW_CMDS/client" echo -e '/ipctoggle\n/targetmonster\n/movetotarget\n/attack\n/targetattack\n/untarget\n/where\n/navigate X Y\n/sethome\n/movetohome\n/present\n/all\n/pickup\n/useitem ID\n/disablehighlight\n/enablehighlight\n/sit\n/direct\n/turn[up,down,left,right]' >> "$TMW_CMDS/client" #grep -Eo '>/[a-z\,/]+' "$TMW_CMDS/client_commands" | sed 's/^>//g' >> "$TMW_CMDS/client" #grep -Eao '/[a-z]+ ' '/usr/games/manaplus' >> "$TMW_CMDS/client" cat < "$TMW_CMDS/client" | sed -E 's/\s*$//g' | sort -u > "$TMW_CMDS/client.tmp" mv -f "$TMW_CMDS/client.tmp" "$TMW_CMDS/client" #rm "$TMW_CMDS/client_commands" echo "Downloading and creating default at command list..." wget -q -c -P "$TMW_CMDS" "https://github.com/themanaworld/tmwa-server-data/blob/master/world/map/conf/atcommand_athena.conf" sed 's/<\/*[^>]*>//g' "$TMW_CMDS/atcommand_athena.conf" | grep -Eo '[A-Za-z0-9]+: [0-9]+' "$TMW_CMDS/atcommand_athena.conf" | sort -u > "$TMW_CMDS/default_at" #rm "$TMW_CMDS/atcommand_athena.conf" echo "Downloading and creating custom at command list..." wget -q -c -P "$TMW_CMDS" "https://github.com/themanaworld/tmwa-server-data/tree/master/world/map/npc/commands" sed 's/<\/*[^>]*>//g' "$TMW_CMDS/commands" | grep -Eo '[A-Za-z0-9]+.txt' | sed 's/.txt$//g' | grep -v '^import$\|^procedures$' | sort -u > "$TMW_CMDS/custom_at" #rm "$TMW_CMDS/commands" elif [ "$1" == 'cmds' ];then if [ ! -f "$TMW_CMDS/client" ] || [ ! -f "$TMW_CMDS/default_at" ] || [ ! -f "$TMW_CMDS/custom_at" ]; then echo 'You must run "cmds-update" first' else (echo -e "\nClient Commands:" cat < "$TMW_CMDS/client" echo -e "\nDefault Server \"@\" Commands:" cat < "$TMW_CMDS/default_at" echo -e "\nCustom Server \"@\" Commands:" cat < "$TMW_CMDS/custom_at") | less fi else echo 'Incorrect syntax' help exit 0 fi