diff --git a/clicker/README.md b/clicker/README.md new file mode 100644 index 0000000..49a5f6f --- /dev/null +++ b/clicker/README.md @@ -0,0 +1,51 @@ +# AgentEther Auto-Clicker + +Prosty auto-klikacz na pulpit dla systemu Linux/X11. + +## Szybka instalacja + +```bash +# Sklonuj repo i wejdź do katalogu +git clone https://github.com/HELLIOSDR/agentEther +cd agentEther/clicker + +# Uruchom instalator +bash setup_clicker.sh +``` + +## Użycie z terminala + +```bash +# Podstawowe klikanie co 1s (3s opóźnienie startu) +agentether-clicker + +# Klikaj co 0.5 sekundy +agentether-clicker -i 0.5 + +# Klikaj na konkretnej pozycji x=500, y=300 +agentether-clicker -x 500 -y 300 + +# Prawy przycisk co 2s, 50 razy +agentether-clicker -b right -i 2 -n 50 + +# Tryb hotkeys: F5=start, F6=stop +agentether-clicker --hotkeys +``` + +## Zatrzymanie awaryjne + +Przesuń kursor myszy do **rogu ekranu** - klikacz zatrzyma się natychmiast. + +## Zdalnie przez SSH (192.168.0.142) + +```bash +ssh user@192.168.0.142 +cd agentEther/clicker +bash setup_clicker.sh +``` + +Lub uruchom bezpośrednio przez SSH z X forwarding: + +```bash +ssh -X user@192.168.0.142 "python3 ~/agentEther/clicker/clicker.py -i 1" +``` diff --git a/clicker/agentether-clicker.desktop b/clicker/agentether-clicker.desktop new file mode 100644 index 0000000..f107015 --- /dev/null +++ b/clicker/agentether-clicker.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Version=1.0 +Type=Application +Name=AgentEther Auto-Clicker +Comment=Automatyczny klikacz dla pulpitu (F5=start, F6=stop) +Exec=bash -c 'python3 ~/.local/share/agentether-clicker/clicker.py --hotkeys; echo "Naciśnij Enter aby zamknąć"; read' +Icon=input-mouse +Terminal=true +Categories=Utility; +Keywords=clicker;auto;klikacz;autoclick; +StartupNotify=true diff --git a/clicker/clicker.py b/clicker/clicker.py new file mode 100644 index 0000000..ba7d183 --- /dev/null +++ b/clicker/clicker.py @@ -0,0 +1,161 @@ +#!/usr/bin/env python3 +""" +AgentEther Desktop Auto-Clicker +Prosty auto-klikacz dla pulpitu Linux/X11 +""" + +import sys +import time +import threading +import argparse +from datetime import datetime + +try: + import pyautogui + import keyboard +except ImportError: + print("Brak wymaganych bibliotek. Uruchom: pip install pyautogui keyboard") + sys.exit(1) + +# Konfiguracja domyślna +DEFAULT_INTERVAL = 1.0 # sekundy między kliknięciami +DEFAULT_BUTTON = "left" # lewy przycisk myszy +STOP_KEY = "F6" # klawisz zatrzymania +START_KEY = "F5" # klawisz startu + +pyautogui.FAILSAFE = True # ruch myszą do rogu ekranu = stop + + +class AutoClicker: + def __init__(self, interval=DEFAULT_INTERVAL, button=DEFAULT_BUTTON, + x=None, y=None, max_clicks=0): + self.interval = interval + self.button = button + self.x = x + self.y = y + self.max_clicks = max_clicks # 0 = bez limitu + self.running = False + self.click_count = 0 + self._thread = None + + def _click_loop(self): + print(f"[{datetime.now().strftime('%H:%M:%S')}] Klikanie startuje... (zatrzymaj: {STOP_KEY})") + while self.running: + if self.x is not None and self.y is not None: + pyautogui.click(self.x, self.y, button=self.button) + else: + pyautogui.click(button=self.button) + + self.click_count += 1 + print(f" Klik #{self.click_count}", end="\r") + + if self.max_clicks > 0 and self.click_count >= self.max_clicks: + print(f"\nOsiągnięto limit {self.max_clicks} kliknięć.") + self.stop() + break + + time.sleep(self.interval) + + def start(self): + if self.running: + print("Klikacz już działa!") + return + self.running = True + self.click_count = 0 + self._thread = threading.Thread(target=self._click_loop, daemon=True) + self._thread.start() + + def stop(self): + self.running = False + if self._thread: + self._thread.join(timeout=2) + print(f"\n[{datetime.now().strftime('%H:%M:%S')}] Zatrzymano. Łącznie kliknięć: {self.click_count}") + + +def parse_args(): + parser = argparse.ArgumentParser( + description="AgentEther Auto-Clicker", + formatter_class=argparse.RawDescriptionHelpFormatter, + epilog=""" +Przykłady użycia: + python3 clicker.py # klikaj co 1s w bieżącej pozycji + python3 clicker.py -i 0.5 # klikaj co 0.5s + python3 clicker.py -x 500 -y 300 # klikaj na pozycji x=500, y=300 + python3 clicker.py -i 2 -b right # prawy przycisk co 2s + python3 clicker.py -n 100 # dokładnie 100 kliknięć + python3 clicker.py --hotkeys # tryb z klawiszami F5/F6 + """ + ) + parser.add_argument("-i", "--interval", type=float, default=DEFAULT_INTERVAL, + help=f"Interwał między kliknięciami w sekundach (domyślnie: {DEFAULT_INTERVAL})") + parser.add_argument("-b", "--button", choices=["left", "right", "middle"], + default=DEFAULT_BUTTON, + help=f"Przycisk myszy (domyślnie: {DEFAULT_BUTTON})") + parser.add_argument("-x", type=int, default=None, + help="Pozycja X na ekranie (domyślnie: bieżąca pozycja)") + parser.add_argument("-y", type=int, default=None, + help="Pozycja Y na ekranie (domyślnie: bieżąca pozycja)") + parser.add_argument("-n", "--max-clicks", type=int, default=0, + help="Maksymalna liczba kliknięć (0 = bez limitu)") + parser.add_argument("--hotkeys", action="store_true", + help=f"Tryb hotkeys: {START_KEY}=start, {STOP_KEY}=stop") + parser.add_argument("--delay", type=float, default=3.0, + help="Opóźnienie przed startem w sekundach (domyślnie: 3)") + return parser.parse_args() + + +def main(): + args = parse_args() + + print("=" * 50) + print(" AgentEther Auto-Clicker") + print("=" * 50) + print(f" Interwał: {args.interval}s") + print(f" Przycisk: {args.button}") + if args.x and args.y: + print(f" Pozycja: x={args.x}, y={args.y}") + else: + print(" Pozycja: bieżąca pozycja kursora") + if args.max_clicks: + print(f" Limit: {args.max_clicks} kliknięć") + print(f" FAILSAFE: przesuń mysz do rogu ekranu = awaryjne zatrzymanie") + print("=" * 50) + + clicker = AutoClicker( + interval=args.interval, + button=args.button, + x=args.x, + y=args.y, + max_clicks=args.max_clicks + ) + + if args.hotkeys: + print(f"\nTryb hotkeys: {START_KEY} = start, {STOP_KEY} = stop") + print("Oczekiwanie na naciśnięcie klawisza...\n") + + keyboard.add_hotkey(START_KEY, clicker.start) + keyboard.add_hotkey(STOP_KEY, clicker.stop) + + try: + keyboard.wait("esc") + except KeyboardInterrupt: + clicker.stop() + else: + if args.delay > 0: + print(f"\nStart za {args.delay:.0f}s... (Ctrl+C aby anulować)") + try: + time.sleep(args.delay) + except KeyboardInterrupt: + print("\nAnulowano.") + sys.exit(0) + + clicker.start() + try: + while clicker.running: + time.sleep(0.1) + except KeyboardInterrupt: + clicker.stop() + + +if __name__ == "__main__": + main() diff --git a/clicker/setup_clicker.sh b/clicker/setup_clicker.sh new file mode 100644 index 0000000..98dc05d --- /dev/null +++ b/clicker/setup_clicker.sh @@ -0,0 +1,111 @@ +#!/bin/bash +# AgentEther Desktop Clicker - Skrypt instalacyjny +# Użycie: bash setup_clicker.sh +# Działa na Ubuntu/Debian/Mint + +set -e + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +INSTALL_DIR="$HOME/.local/share/agentether-clicker" +DESKTOP_DIR="$HOME/.local/share/applications" +BIN_DIR="$HOME/.local/bin" + +echo "======================================" +echo " AgentEther Auto-Clicker Installer" +echo "======================================" + +# 1. Sprawdź Python +if ! command -v python3 &>/dev/null; then + echo "[!] Python3 nie znaleziony. Instaluję..." + sudo apt-get update && sudo apt-get install -y python3 python3-pip +fi +echo "[OK] Python3: $(python3 --version)" + +# 2. Zainstaluj zależności systemowe (X11 dla pyautogui) +echo "[*] Instaluję zależności systemowe..." +sudo apt-get install -y --no-install-recommends \ + python3-pip \ + python3-tk \ + python3-dev \ + scrot \ + xdotool \ + libxtst-dev \ + 2>/dev/null || echo "[!] Niektóre pakiety systemowe mogą być pominięte" + +# 3. Zainstaluj biblioteki Python +echo "[*] Instaluję biblioteki Python..." +pip3 install --user pyautogui keyboard 2>/dev/null || \ + python3 -m pip install --user pyautogui keyboard + +# 4. Skopiuj pliki do katalogu instalacji +echo "[*] Kopiuję pliki..." +mkdir -p "$INSTALL_DIR" +cp "$SCRIPT_DIR/clicker.py" "$INSTALL_DIR/clicker.py" +chmod +x "$INSTALL_DIR/clicker.py" + +# 5. Utwórz skrypt startowy w PATH +mkdir -p "$BIN_DIR" +cat > "$BIN_DIR/agentether-clicker" << EOF +#!/bin/bash +# Wrapper startowy dla AgentEther Auto-Clicker +python3 "$INSTALL_DIR/clicker.py" "\$@" +EOF +chmod +x "$BIN_DIR/agentether-clicker" + +# 6. Dodaj do PATH jeśli potrzeba +if [[ ":$PATH:" != *":$BIN_DIR:"* ]]; then + echo "export PATH=\"\$PATH:$BIN_DIR\"" >> "$HOME/.bashrc" + echo "[*] Dodano $BIN_DIR do PATH w ~/.bashrc" +fi + +# 7. Utwórz plik .desktop +mkdir -p "$DESKTOP_DIR" +ICON_PATH="$INSTALL_DIR/icon.png" + +# Pobierz/utwórz ikonę (fallback: systemowa ikona) +if command -v convert &>/dev/null; then + convert -size 64x64 xc:'#1a1a2e' \ + -fill '#e94560' -draw 'circle 32,32 32,10' \ + -fill white -pointsize 20 -gravity center -annotate 0 'AC' \ + "$ICON_PATH" 2>/dev/null || ICON_PATH="input-mouse" +else + ICON_PATH="input-mouse" +fi + +cat > "$DESKTOP_DIR/agentether-clicker.desktop" << EOF +[Desktop Entry] +Version=1.0 +Type=Application +Name=AgentEther Auto-Clicker +Comment=Automatyczny klikacz dla pulpitu +Exec=bash -c 'python3 $INSTALL_DIR/clicker.py --hotkeys; read' +Icon=$ICON_PATH +Terminal=true +Categories=Utility; +Keywords=clicker;auto;klikacz; +StartupNotify=true +EOF + +chmod +x "$DESKTOP_DIR/agentether-clicker.desktop" +echo "[OK] Plik .desktop utworzony: $DESKTOP_DIR/agentether-clicker.desktop" + +# 8. Odśwież bazę aplikacji pulpitu +if command -v update-desktop-database &>/dev/null; then + update-desktop-database "$DESKTOP_DIR" 2>/dev/null || true +fi + +echo "" +echo "======================================" +echo " Instalacja zakończona pomyślnie!" +echo "======================================" +echo "" +echo "Uruchomienie:" +echo " z terminala: agentether-clicker" +echo " z pulpitu: szukaj 'AgentEther Auto-Clicker' w menu aplikacji" +echo "" +echo "Opcje:" +echo " agentether-clicker -i 0.5 # klikaj co 0.5s" +echo " agentether-clicker -x 500 -y 300 # klikaj na pozycji x=500,y=300" +echo " agentether-clicker --hotkeys # F5=start, F6=stop" +echo " agentether-clicker --help # pełna pomoc" +echo ""