Skip to content

Instantly share code, notes, and snippets.

@Constrat
Created April 10, 2026 07:37
Show Gist options
  • Select an option

  • Save Constrat/b24d5f99906dc2f267ee8914e2ddf56a to your computer and use it in GitHub Desktop.

Select an option

Save Constrat/b24d5f99906dc2f267ee8914e2ddf56a to your computer and use it in GitHub Desktop.
maa-cli base rotator 9000
#!/usr/bin/env bash
# maa-rotation.sh
# Runs the next task in task_rotation. State = last completed task name in task_rotation.state.
# On success: advance to next task. On failure: keep same task for next run.
# Manual run: ./maa-rotation.sh <task_name>
set -euo pipefail
HOME="/home/constrat"
export HOME
export PATH="$HOME/android/sdk/platform-tools:/usr/local/bin:/usr/bin:/bin"
readonly MAA_BIN="$HOME/.local/bin/maa"
readonly MAA_CONFIG_DIR="$HOME/.config/maa"
readonly ROTATION_FILE="$MAA_CONFIG_DIR/task_rotation"
readonly STATE_FILE="$MAA_CONFIG_DIR/task_rotation.state"
readonly LOCK_FILE="/tmp/maa-rotation.lock"
readonly TELEGRAM_BOT_TOKEN="[REDACTED]"
readonly TELEGRAM_CHAT_ID="[REDACTED]"
function die { echo "ERROR: $*" >&2; exit 1; }
mapfile -t TASKS < <(grep -E '^[[:alnum:]]+' "$ROTATION_FILE")
(( ${#TASKS[@]} > 0 )) || die "rotation file is empty: $ROTATION_FILE"
exec 9>"$LOCK_FILE"
flock -n 9 || { echo "Already running, exiting." >&2; exit 1; }
if [[ $# -gt 0 ]]; then
TASK="$1"
valid=0
for t in "${TASKS[@]}"; do [[ "$t" == "$TASK" ]] && { valid=1; break; }; done
(( valid )) || die "unknown task '$TASK'. Valid: ${TASKS[*]}"
else
LAST_TASK=$( [[ -f "$STATE_FILE" ]] && cat "$STATE_FILE" || echo "" )
NEXT_IDX=0
for i in "${!TASKS[@]}"; do
if [[ "${TASKS[$i]}" == "$LAST_TASK" ]]; then
NEXT_IDX=$(( (i + 1) % ${#TASKS[@]} ))
break
fi
done
TASK="${TASKS[$NEXT_IDX]}"
fi
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Starting task '$TASK'"
set +e
# test only / dry-run
# SUMMARY=$("$MAA_BIN" run "$TASK" --dry-run -vv)
SUMMARY=$("$MAA_BIN" run "$TASK" -vv)
EXIT_CODE=$?
set -e
printf '%s\n' "$SUMMARY"
TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
if [[ $EXIT_CODE -eq 0 ]]; then
printf '%s\n' "$TASK" > "$STATE_FILE"
MESSAGE="✅ [MAA] Task $TASK completed at $TIMESTAMP $SUMMARY"
else
MESSAGE="❌ [MAA] Task $TASK FAILED (exit $EXIT_CODE) at $TIMESTAMP $SUMMARY"
fi
curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" \
-d "chat_id=${TELEGRAM_CHAT_ID}" \
--data-urlencode "text=$MESSAGE" > /dev/null 2>&1 || true
echo "[$TIMESTAMP] $MESSAGE"
exit "$EXIT_CODE"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment