From 5d75a3fcd789c41169802a89748ac7d12211e3b0 Mon Sep 17 00:00:00 2001 From: SpamixOfficial <99183771+SpamixOfficial@users.noreply.github.com> Date: Thu, 12 Jan 2023 08:00:34 +0100 Subject: [PATCH 01/26] Added windows support --- README.md | 2 +- main.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 47c57eb..daf74b7 100644 --- a/README.md +++ b/README.md @@ -85,7 +85,7 @@ It doesn't work on MacOS and Fedora because of issues regarding a module named p # To-do List! - [X] Add customization - [X] Add constant mode -- [ ] Add Windows support +- [X] Add Windows support - [ ] Create aur package - [ ] (Maybe) Create deb package - [ ] Something you can suggest in "ideas" (https://github.com/SpamixOfficial/OpenClick/discussions/1) diff --git a/main.py b/main.py index 1dd91f1..f751d29 100644 --- a/main.py +++ b/main.py @@ -134,7 +134,7 @@ print(color + a, end="") time.sleep(0.2) -os.system("clear") +os.system('cls' if os.name == 'nt' else 'clear') for char in openlogo: print(color + char, end="") time.sleep(0.0003) From b4588fc374502ea80464d7ddd575a5351eef28b6 Mon Sep 17 00:00:00 2001 From: SpamixOfficial <99183771+SpamixOfficial@users.noreply.github.com> Date: Thu, 12 Jan 2023 19:23:43 +0100 Subject: [PATCH 02/26] Added a CLI version I added a CLI version named cli.py, removed the flagser module and added more settings to the settings menu. --- cli.py | 314 +++++++++++++++++++++++++++++++++++++++++++++++++++++ install.py | 17 --- main.py | 29 ++--- manager.py | 26 ++++- 4 files changed, 355 insertions(+), 31 deletions(-) create mode 100644 cli.py diff --git a/cli.py b/cli.py new file mode 100644 index 0000000..ce4689a --- /dev/null +++ b/cli.py @@ -0,0 +1,314 @@ +import argparse, os, time, re, threading, json +from colorama import Fore, Back, init +from pynput.keyboard import Key, Listener +from pynput.mouse import Button, Controller + + + +global shouldClick +init(autoreset=True) +colors = dict(Fore.__dict__.items()) +nocolors = ["BLACK", "BLUE", "CYAN", "GREEN", "LIGHTBLACK_EX", "LIGHTBLUE_EX", "LIGHTCYAN_EX", "LIGHTGREEN_EX", +"LIGHTMAGENTA_EX", "LIGHTRED_EX", "LIGHTWHITE_EX", "LIGHTYELLOW_EX", "MAGENTA", "RED", "RESET", "WHITE", "YELLOW"] +hotkeynames = [ + 'f1', 'f2', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9' + ] +parser = argparse.ArgumentParser(description='OpenClick Help') +parser.add_argument("--c", "--custom", help="Opens the customization menu", action="store_true") +parser.add_argument("--deb", help="Debug", action="store_true") +parser.add_argument("-cd", help="Constant Click Delay", action="store", type=float) + +args = parser.parse_args() + +import json +# load the json file and store it as data +with open('settings.json') as f: + data = json.load(f) + +if args.c == True: + while True: + print("Customization Menu") + print("\r") + print(" \r Textcolor (--textcolor)") + print(" \r Color Examples (--colorexamples)") + print(" \r Key (--key)") + print(" \r Constant Key (--ckey)") + print(" \r Constant Click Delay (--cdelay)") + print(" \r Explainer (--help) (This one explains all settings!") + print("\r Exit (--exit)") + + menuinput = input("$>").lower() + + if menuinput == "--colorexamples": + print("Here are the colors!") + for color in colors.keys(): + print(colors[color] + f"{color}") + + print("\n") + + elif menuinput == "--textcolor": + + for color in nocolors: + print(color) + + print("\nChoose a color!") + choose_color = input("$\"TextColor\">").upper() + # check if the chosen color is in the color list and if so set the textcolor to that value + if choose_color in nocolors: + data['textcolor']=choose_color + else: + print(Back.BLACK + Fore.LIGHTWHITE_EX + "Invalid command: \"" + choose_color + "\" is not a valid color.") + elif menuinput == "--key": + for key in hotkeynames: + print(key) + print("\n Choose a key!") + choose_key = input("$\"Key\">").lower() + + if choose_key in hotkeynames: # checks if the choosen key is in the key list + data['hotkey']=choose_key + else: + print(Back.BLACK + Fore.LIGHTWHITE_EX + "Invalid command: \"" + menuinput + "\" is not a command.") + elif menuinput == "--ckey": + for key in hotkeynames: + print(key) + print("\n Choose a key!") + choose_key = input("$\"Key\">").lower() + + if choose_key in hotkeynames: # checks if the choosen key is in the key list + data['constantkey']=choose_key + else: + print("The key you specified either doesn't exist or it isn't supported at the time.") + + elif menuinput == "--cdelay": + print("\nChoose a value!") + choose_key = input("$\"CDelay\">") + + try: + cdelay = float(choose_key) + data['constantclickdelay'] = float(choose_key) + except ValueError: + print("You must input a number.") + elif menuinput == "--help": + print("\r Textcolor (--textcolor) - The color of the text you see in the terminal.") + print("\r Color Examples (--colorexamples) - Shows you the colors you can choose from.") + print("\r Key (--key) - The key for the \"Normal\" mode.") + print("\r Constant Key (--ckey) - The key for the \"Constant\" mode.") + print("\r Constant Click Delay (--cdelay) - The delay for the \"Constant\" mode.") + print("\r Explainer (--help) (This one explains all settings!") + print("\r Exit (--exit)") + + elif menuinput == "--exit": + break + + else: + print(Back.BLACK + Fore.LIGHTWHITE_EX + "Invalid command: \"" + menuinput + "\" is not a command.") + + # saves the settings + with open('settings.json', 'w') as outfile: + json.dump(data, outfile,indent=4) + +elif args.deb == True: + while True: + print("Debug Menu") + print("\rdebugmode (--d f/t)") + print("\rexit (--exit") + debinput = input("$>").lower() + if debinput == "--d f": + data['debugmode']=False + elif debinput == "--d t": + data['debugmode']=True + elif debinput == "--exit": + break + else: + print(Back.BLACK + Fore.LIGHTWHITE_EX + "Invalid command: \"" + debinput + "\" is not a command.") + with open('settings.json', 'w') as outfile: + json.dump(data, outfile,indent=4) +else: + # Startup Check + firststartup = False + if True: + #settingsread = open("settings.txt", 'r+').read() + #rawstartcheck = ["firststartup=true", "firststartup=false"] + #word_exp='|'.join(rawstartcheck) + #fullstartupcheck = re.findall(word_exp, open("settings.txt", 'r+').read()) + with open('settings.json') as f: + data = json.load(f) + + fullstartupcheck = (data['firststartup']) + + if fullstartupcheck == True: + firststartup = True + elif fullstartupcheck == False: + firststartup = False + print("Run the installation script before running the main program!") + quit() + + ## --------------------------------------------------------------- ## + # Settings Check + color = Fore.RED + + + + if True: + # settingsread = open("settings.txt", 'r+').read() + # colorscheck = ["BLACK", "BLUE", "CYAN", "GREEN", "LIGHTBLACK_EX", "LIGHTBLUE_EX", "LIGHTCYAN_EX", "LIGHTGREEN_EX", "LIGHTMAGENTA_EX", "LIGHTRED_EX", "LIGHTWHITE_EX", "LIGHTYELLOW_EX", "MAGENTA", "RED", "WHITE", "YELLOW"] + # word_exp='|'.join(colorscheck) + # fullcolorcheck = re.findall(word_exp, open("settings.txt", 'r+').read()) + + with open('settings.json') as f: + data = json.load(f) + fullcolorcheck = (data['textcolor']) + + if "BLACK" in fullcolorcheck: + color = Fore.BLACK + elif "BLUE" in fullcolorcheck: + color = Fore.BLUE + elif "CYAN" in fullcolorcheck: + color = Fore.CYAN + elif "GREEN" in fullcolorcheck: + color = Fore.GREEN + elif "LIGHTBLACK_EX" in fullcolorcheck: + color = Fore.LIGHTBLACK_EX + elif "LIGHTBLUE_EX" in fullcolorcheck: + color = Fore.LIGHTBLUE_EX + elif "LIGHTCYAN_EX" in fullcolorcheck: + color = Fore.LIGHTCYAN_EX + elif "LIGHTGREEN_EX" in fullcolorcheck: + color = Fore.LIGHTGREEN_EX + elif "LIGHTMAGENTA_EX" in fullcolorcheck: + color = Fore.LIGTMAGENTA_EX + elif "LIGHTRED_EX" in fullcolorcheck: + color = Fore.LIGHTRED_EX + elif "LIGHTWHITE_EX" in fullcolorcheck: + color = Fore.LIGHTWHITE_EX + elif "LIGHTYELLOW_EX" in fullcolorcheck: + color = Fore.LIGHTYELLOW_EX + elif "MAGENTA" in fullcolorcheck: + color = Fore.MAGENTA + elif "RED" in fullcolorcheck: + color = Fore.RED + elif "WHITE" in fullcolorcheck: + color = Fore.WHITE + elif "YELLOW" in fullcolorcheck: + color = Fore.YELLOW + + hotkey = Key.f1 + constantKey = Key.f2 + contantClickDelay = 0.1 # the delay between clicks in constantclick + + if True: + with open('settings.json') as f: + data = json.load(f) + hotkey = "Key." + (data['hotkey']) + + if True: + with open('settings.json') as f: + data = json.load(f) + constantKey = "Key." + (data['constantkey']) + #sets the constantclickdelay + if True: + with open('settings.json') as f: + data = json.load(f) + constantClickDelay = (data['constantclickdelay']) + + if True: + with open('settings.json') as f: + data = json.load(f) + debugmode = (data['debugmode']) + ## --------------------------------------------------------------- ## + # Start of program + contantClickDelay = args.cd + + init(autoreset=True) + + mouse = Controller() + + + + openlogo = """ + /$$$$$$ /$$$$$$ /$$ /$$ /$$ + /$$__ $$ /$$__ $$| $$|__/ | $$ +| $$ \ $$ /$$$$$$ /$$$$$$ /$$$$$$$ | $$ \__/| $$ /$$ /$$$$$$$| $$ /$$ +| $$ | $$ /$$__ $$ /$$__ $$| $$__ $$| $$ | $$| $$ /$$_____/| $$ /$$/ +| $$ | $$| $$ \ $$| $$$$$$$$| $$ \ $$| $$ | $$| $$| $$ | $$$$$$/ +| $$ | $$| $$ | $$| $$_____/| $$ | $$| $$ $$| $$| $$| $$ | $$_ $$ +| $$$$$$/| $$$$$$$/| $$$$$$$| $$ | $$| $$$$$$/| $$| $$| $$$$$$$| $$ \ $$ + \______/ | $$____/ \_______/|__/ |__/ \______/ |__/|__/ \_______/|__/ \__/ + | $$ + | $$ + |__/ + + + SpamixOfficial 2022 +""" + if debugmode == True: + print("Debugmode") + print("\r" + str(fullcolorcheck) + str(fullkeycheck)) + for a in "Hello and welcome to": + time.sleep(0.01) + print(color + a, end="") + time.sleep(0.06) + for a in "...": + print(color + a, end="") + time.sleep(0.2) + + os.system('cls' if os.name == 'nt' else 'clear') + for char in openlogo: + print(color + char, end="") + time.sleep(0.0003) + + + + print(color + "Controls: \n" + str(hotkey) + " to click (hold to click!) \n" + str(constantKey) + " to click constantly (toggle on/off by clicking the key!)\nEsc to exit!") + + + ## Start of clicker code + shouldClick = False # controlls the constantclick + + def on_press(key): + global Key + global debugmode + global shouldClick + + # checks if the string values if the objects are the same + # this makes so we can set the hotkey to a string instead + # of a key instance + + if str(key) == str(constantKey): # if the constant key is pressed + + shouldClick = not shouldClick #toggles the autoclick + # start new thread to handle the autoclicking on + autoClickThread = threading.Thread(target=autoClick) + autoClickThread.start() + + if str(key) == str(hotkey): #check hotkey + if debugmode == True: + print(key) + mouse.press(Button.left) + mouse.release(Button.left) + + if str(key) == str(Key.delete): + debugmode = not debugmode #toggles the debugmode + + def on_release(key): + global shouldClick + if key == Key.esc: + # Stop autoclick + shouldClick = False + # Stop listener + return False + + + # method to autoclick + def autoClick(): + global shouldClick + while shouldClick: + mouse.press(Button.left) + mouse.release(Button.left) + time.sleep(contantClickDelay) #add delay + + # Collect events until released + with Listener( + on_press=on_press, + on_release=on_release) as listener: + listener.join() diff --git a/install.py b/install.py index 3562615..bdfc3bb 100644 --- a/install.py +++ b/install.py @@ -37,23 +37,6 @@ else: print("That wasn't a N or an Y.") quit() -#checking for flagser -try: - import flagser - print("Module \"flagser\" was found!") - presult = True -except ModuleNotFoundError: - print("The module named \"flagser\" wasn't found! Do you want to install it? (y/n)") - pynputinput = input().upper() - if pynputinput == "Y": - os.system("pip install flagser") - # presult = True - elif pynputinput == "N": - installedPackeges = False - print("Then you need to install it. Read the instructions on the github page or read the README.md!") - else: - print("That wasn't a N or an Y.") - quit() if installedPackeges: #f = open('./settings.txt','r') diff --git a/main.py b/main.py index f751d29..8c228c7 100644 --- a/main.py +++ b/main.py @@ -1,9 +1,11 @@ # Startup Check debugswitch = 1 -import os, time, re +import os, time, re, argparse import threading import json - +parser = argparse.ArgumentParser(description="OpenClick Help") +parser.add_argument("-cd", help="Constant Click Delay", action="store", type=float) +args = parser.parse_args() firststartup = False if True: #settingsread = open("settings.txt", 'r+').read() @@ -24,7 +26,6 @@ ## --------------------------------------------------------------- ## # Settings Check -from flagser import * from pynput.keyboard import Key, Listener from pynput.mouse import Button, Controller from colorama import Fore, Back, init @@ -98,6 +99,8 @@ with open('settings.json') as f: data = json.load(f) debugmode = (data['debugmode']) + +contantClickDelay = args.cd ## --------------------------------------------------------------- ## # Start of program @@ -143,16 +146,16 @@ shouldClick = False # controlls the constantclick # this is Flag class handling constantclick delay -class AutoDelay(Flag): - shortFlag="-cd" - longFlag="-constantClickDelay" - description='sets the constantclick delay (default 0.1 secounds between clicks)' - def onCall(self,args): - global contantClickDelay - contantClickDelay = float(args[0]) - -a = FlagManager([AutoDelay()]) -a.check() +#class AutoDelay(Flag): +# shortFlag="-cd" +# longFlag="-constantClickDelay" +# description='sets the constantclick delay (default 0.1 secounds between clicks)' +# def onCall(self,args): +# global contantClickDelay +# contantClickDelay = float(args[0]) + +#a = FlagManager([AutoDelay()]) +#a.check() print(color + "Controls: \n" + str(hotkey) + " to click (hold to click!) \n" + str(constantKey) + " to click constantly (toggle on/off by clicking the key!)\nEsc to exit!") diff --git a/manager.py b/manager.py index 9859197..6da6db4 100644 --- a/manager.py +++ b/manager.py @@ -25,6 +25,8 @@ print(" \r Color Examples (--colorexamples)") print(" \r Key (--key)") print(" \r Constant Key (--ckey)") + print(" \r Constant Click Delay (--cdelay)") + print(" \r Explainer (--help) (This one explains all settings!") print("\r Exit (--exit)") menuinput = input("$>").lower() @@ -67,10 +69,32 @@ if choose_key in hotkeynames: # checks if the choosen key is in the key list data['constantkey']=choose_key else: - print(Back.BLACK + Fore.LIGHTWHITE_EX + "Invalid command: \"" + menuinput + "\" is not a command.") + print("The key you specified either doesn't exist or it isn't supported at the time.") + + elif menuinput == "--cdelay": + print("\nChoose a value!") + choose_key = input("$\"CDelay\">") + + try: + cdelay = float(choose_key) + data['constantclickdelay'] = float(choose_key) + except ValueError: + print("You must input a number.") + elif menuinput == "--help": + print("\r Textcolor (--textcolor) - The color of the text you see in the terminal.") + print("\r Color Examples (--colorexamples) - Shows you the colors you can choose from.") + print("\r Key (--key) - The key for the \"Normal\" mode.") + print("\r Constant Key (--ckey) - The key for the \"Constant\" mode.") + print("\r Constant Click Delay (--cdelay) - The delay for the \"Constant\" mode.") + print("\r Explainer (--help) (This one explains all settings!") + print("\r Exit (--exit)") elif menuinput == "--exit": break + + else: + print(Back.BLACK + Fore.LIGHTWHITE_EX + "Invalid command: \"" + menuinput + "\" is not a command.") + # saves the settings with open('settings.json', 'w') as outfile: json.dump(data, outfile,indent=4) From 059ca8576287001470d14f1dbb9b62a46e0f99ca Mon Sep 17 00:00:00 2001 From: SpamixOfficial <99183771+SpamixOfficial@users.noreply.github.com> Date: Mon, 23 Jan 2023 08:25:17 +0100 Subject: [PATCH 03/26] Create openclick.png --- openclick.png | Bin 0 -> 165480 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 openclick.png diff --git a/openclick.png b/openclick.png new file mode 100644 index 0000000000000000000000000000000000000000..b3d4ff8dec71953a0f58b65237bcafae45daec22 GIT binary patch literal 165480 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

_Hw5xkm3 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 ?l6PNJ()ABOpzvHIp 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 Date: Fri, 27 Jan 2023 08:32:20 +0100 Subject: [PATCH 04/26] Added partially windows support and a command edition. --- README.md | 95 ++++++++- cli.py | 520 +++++++++++++++++++++++++++++++++----------------- install.py | 32 +++- install.sh | 25 +++ settings.json | 4 +- uninstall.sh | 23 +++ update.py | 71 +++++++ 7 files changed, 590 insertions(+), 180 deletions(-) create mode 100755 install.sh create mode 100755 uninstall.sh create mode 100644 update.py diff --git a/README.md b/README.md index daf74b7..786c2e6 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,18 @@ Thanks to the following persons for commiting to the project! # OpenClick Welcome to OpenClick! OpenClick is an open source autoclicker for Debian and Arch based systems! -Currently it does not work on windows, but a fix is on the way! +Currently the only way you can run this autoclicker on Windows is by running the Module Edition (I'm going to fix this). + +# The 2 different editions (READ ME!) +There are 2 different editions/versions of this software. + +Either you use the "Module" Edition, which consits of the install.py, the main.py adn the manager.py file, or you run the "Full Edition". The "Module" Edition is cross-platform, since it works on Debian, Arch Linux and Windows. + +The "Full" Edition is the 2 files (main.py and manager.py) made into one file that's also installed as a command on your system. The "Full" Edition isn't cross-platform, it does not work on windows. + +A fix is coming! + +There are guides for both editions. # Intro So, what is an autoclicker? @@ -21,6 +32,7 @@ Have fun :D # Before you start... Make sure you have python installed! Most linux distros comes with python out of the box, but check so its installed just in case it isn't! Also make sure you have "pip" installed! Most linux distros comes with pip out of the box, but once again, check so its installed just in case it isn't! + ## !IMPORTANT! And lastly, make sure you have tKinter installed. It comes prebundled with python, though sometimes the module named "pynput" needs a manual installation of tKinter to work! Here is how to install it. If you can't find your distro's way to install it here, then search the internet. @@ -39,8 +51,11 @@ Here is how to install it. If you can't find your distro's way to install it her sudo pacman -S tk ``` - -# How to install +# How to install Module Edition + +**Make sure you are in the project directory!** + +## How to install Step 1: Run the installation script! ``` @@ -55,7 +70,7 @@ Step 2: python3 main.py ``` You are done! -# How to use +## How to use Use the command ``` python3 main.py @@ -71,6 +86,73 @@ If you want to customize the constant click delay, then use the command python3 main.py -cd [value] ``` The default value is 0,5 seconds! + + +# How to install Full Edition +## How to install + +**Make sure you are in the project directory!** + +**You will need sudo access for this** + +Step 1: + Install jq using your package manager. + + For Ubuntu/Debian based distros. + ``` + sudo apt-get install jq + ``` + For Arch based distros: + ``` + sudo pacman -S jq + ``` +Step 2: + Chmod the scripts and run the installer. + ``` + chmod +x install.sh && chmod +x uninstall.sh && ./install.sh + ``` +Step 3: + When you get the message: + > Installation Success! + + you can run the software using the command: + ``` + openclick + ``` + You are done! +## How to use +Use this command to run the software. + ``` + openclick + ``` + +Use this command to open up the customization menu. + ``` + openclick --c + ``` +(Tip! Use -h instead of --c to get the help menu instead!) +If you want to customize the constant click delay, then use the command + ``` + openclick -cd [value] + ``` +The default value is 0,5 seconds! + +If you want to update manually: +``` +openclick -u +``` +If you want to turn off auto updates: +``` +openclick -u auto=False +``` +If you want to turn on auto updates: +``` +openclick -u auto=True +``` + +## IMPORTANT +I would advise you to turn auto updates off if you dont have a stable internet connection. + # Extra info If you find any bugs, report them! The project is written in python. @@ -85,7 +167,10 @@ It doesn't work on MacOS and Fedora because of issues regarding a module named p # To-do List! - [X] Add customization - [X] Add constant mode -- [X] Add Windows support +- [X] Partly Add Windows support +- [X] Add auto updates +- [ ] Add auto updates for all editions +- [ ] Add Windows support - [ ] Create aur package - [ ] (Maybe) Create deb package - [ ] Something you can suggest in "ideas" (https://github.com/SpamixOfficial/OpenClick/discussions/1) diff --git a/cli.py b/cli.py index ce4689a..6e595e3 100644 --- a/cli.py +++ b/cli.py @@ -1,10 +1,34 @@ -import argparse, os, time, re, threading, json +#!/usr/bin/env python3 +import requests, argparse, os, time, re, threading, json, zipfile, glob, getpass, subprocess + +settingsfile = "settings.json" + +# Startup Check +firststartup = False +if True: + #settingsread = open("settings.txt", 'r+').read() + #rawstartcheck = ["firststartup=true", "firststartup=false"] + #word_exp='|'.join(rawstartcheck) + #fullstartupcheck = re.findall(word_exp, open("settings.txt", 'r+').read()) + with open(settingsfile) as f: + data = json.load(f) + autoup = (data['autoupdate']) + + fullstartupcheck = (data['firststartup']) + + if fullstartupcheck == True: + firststartup = True + elif fullstartupcheck == False: + firststartup = False + print("Run the installation script before running the main program!") + quit() + +############## + from colorama import Fore, Back, init from pynput.keyboard import Key, Listener from pynput.mouse import Button, Controller - - global shouldClick init(autoreset=True) colors = dict(Fore.__dict__.items()) @@ -17,14 +41,189 @@ parser.add_argument("--c", "--custom", help="Opens the customization menu", action="store_true") parser.add_argument("--deb", help="Debug", action="store_true") parser.add_argument("-cd", help="Constant Click Delay", action="store", type=float) - +parser.add_argument("-u", help="Manually Update", nargs='?', const='update') args = parser.parse_args() import json # load the json file and store it as data -with open('settings.json') as f: +with open(settingsfile) as f: data = json.load(f) +# Manually update argument +if args.u == 'auto=True': + data['autoupdate']=True + with open(settingsfile, 'w') as outfile: + json.dump(data, outfile,indent=4) + print("Successfully updated settings.") + quit +elif args.u == 'auto=False': + data['autoupdate']=False + with open(settingsfile, 'w') as outfile: + json.dump(data, outfile,indent=4) + print("Successfully updated settings.") + quit +elif args.u == 'update': + # opening settings.json file + jsfile = open("settings.json") + ## + + # getting new release json + response = requests.get("https://api.github.com/repos/SpamixOfficial/OpenClick/releases/latest") + respdata = response.json() + ## + + # getting new release info + newid = respdata["id"] + tag = respdata["tag_name"] + ## + + # local data + jsdata = json.load(jsfile) + + locdata = jsdata["release"] + ## + + # url stuff + downurl = respdata["zipball_url"] + + download = requests.get(downurl) + ## + + # filename and dir setting + downdir = "/tmp/" + downname = "openclick-" + tag + "-release.zip" + finalfile = os.path.join(downdir, downname) + ## + print("Newest release: " + str(newid) + "\nLocal release: " + str(locdata)) + updateinp = input("\nDo you want to update? y/n: ").lower() + + if updateinp == "y": + # downloading and renaming zip file + with open(finalfile, 'wb') as fd: + print("Downloading...") + fd.write(download.content) + # outputing into directory and removing zip file + with zipfile.ZipFile(finalfile, 'r') as dezip: + print("Extracting into folder...") + dezip.extractall(path="/tmp/openclick") + os.remove(finalfile) + + # scanning folder name inside directory + dowrelname = os.listdir("/tmp/openclick") + dowdirname = " ".join(str(x) for x in dowrelname) + print(dowdirname) + + # run installation script + print("Installing...") + installp = subprocess.run("/tmp/openclick/" + dowdirname + "/install.sh") + + if installp.returncode != 0: + print("Installation failed. \nRemoving temporary files and exiting.") + # remove all files if installation script fails + dowdirfiles = glob.glob("/tmp/openclick/" + dowdirname + "/*") + for f in dowdirfiles: + os.remove(f) + os.rmdir("/tmp/openclick/" + dowdirname) + os.rmdir("/tmp/openclick") + quit() + print("Update was successful! Removing update files...") + # remove directory when done + dowdirfiles = glob.glob("/tmp/openclick/" + dowdirname + "/*") + for f in dowdirfiles: + os.remove(f) + os.rmdir("/tmp/openclick/" + dowdirname) + os.rmdir("/tmp/openclick") + print("Exiting...") + quit() + else: + quit() +######################################### +# Automatically update + +if autoup == True: + # opening settings.json file + jsfile = open("settings.json") + ## + + # getting new release json + response = requests.get("https://api.github.com/repos/SpamixOfficial/OpenClick/releases/latest") + respdata = response.json() + ## + + # getting new release info + newid = respdata["id"] + tag = respdata["tag_name"] + ## + + # local data + jsdata = json.load(jsfile) + + locdata = jsdata["release"] + ## + + # url stuff + downurl = respdata["zipball_url"] + + download = requests.get(downurl) + ## + + # filename and dir setting + downdir = "/tmp/" + downname = "openclick-" + tag + "-release.zip" + finalfile = os.path.join(downdir, downname) + ## + if not str(newid) == str(locdata): + print("Newest release: " + str(newid) + "\nLocal release: " + str(locdata)) + updateinp = input("\nDo you want to update? y/n: ").lower() + + if updateinp == "y": + # downloading and renaming zip file + with open(finalfile, 'wb') as fd: + print("Downloading...") + fd.write(download.content) + # outputing into directory and removing zip file + with zipfile.ZipFile(finalfile, 'r') as dezip: + print("Extracting into folder...") + dezip.extractall(path="/tmp/openclick") + os.remove(finalfile) + + # scanning folder name inside directory + dowrelname = os.listdir("/tmp/openclick") + dowdirname = " ".join(str(x) for x in dowrelname) + print(dowdirname) + + # run installation script + print("Installing...") + installp = subprocess.run("/tmp/openclick/" + dowdirname + "/install.sh") + + if installp.returncode != 0: + print("Installation failed. \nRemoving temporary files and exiting.") + # remove all files if installation script fails + dowdirfiles = glob.glob("/tmp/openclick/" + dowdirname + "/*") + for f in dowdirfiles: + os.remove(f) + os.rmdir("/tmp/openclick/" + dowdirname) + os.rmdir("/tmp/openclick") + quit() + print("Update was successful! Removing update files...") + # remove directory when done + dowdirfiles = glob.glob("/tmp/openclick/" + dowdirname + "/*") + for f in dowdirfiles: + os.remove(f) + os.rmdir("/tmp/openclick/" + dowdirname) + os.rmdir("/tmp/openclick") + print("Exiting...") + quit() + else: + print("You can update any time by using \"openclick -u\".") + else: + print("Already newest release.") +else: + print("Autoupdates are turned off.") + +######################################## + + if args.c == True: while True: print("Customization Menu") @@ -104,7 +303,7 @@ print(Back.BLACK + Fore.LIGHTWHITE_EX + "Invalid command: \"" + menuinput + "\" is not a command.") # saves the settings - with open('settings.json', 'w') as outfile: + with open(settingsfile, 'w') as outfile: json.dump(data, outfile,indent=4) elif args.deb == True: @@ -121,27 +320,8 @@ break else: print(Back.BLACK + Fore.LIGHTWHITE_EX + "Invalid command: \"" + debinput + "\" is not a command.") - with open('settings.json', 'w') as outfile: + with open(settingsfile, 'w') as outfile: json.dump(data, outfile,indent=4) -else: - # Startup Check - firststartup = False - if True: - #settingsread = open("settings.txt", 'r+').read() - #rawstartcheck = ["firststartup=true", "firststartup=false"] - #word_exp='|'.join(rawstartcheck) - #fullstartupcheck = re.findall(word_exp, open("settings.txt", 'r+').read()) - with open('settings.json') as f: - data = json.load(f) - - fullstartupcheck = (data['firststartup']) - - if fullstartupcheck == True: - firststartup = True - elif fullstartupcheck == False: - firststartup = False - print("Run the installation script before running the main program!") - quit() ## --------------------------------------------------------------- ## # Settings Check @@ -149,83 +329,83 @@ - if True: - # settingsread = open("settings.txt", 'r+').read() - # colorscheck = ["BLACK", "BLUE", "CYAN", "GREEN", "LIGHTBLACK_EX", "LIGHTBLUE_EX", "LIGHTCYAN_EX", "LIGHTGREEN_EX", "LIGHTMAGENTA_EX", "LIGHTRED_EX", "LIGHTWHITE_EX", "LIGHTYELLOW_EX", "MAGENTA", "RED", "WHITE", "YELLOW"] - # word_exp='|'.join(colorscheck) - # fullcolorcheck = re.findall(word_exp, open("settings.txt", 'r+').read()) - - with open('settings.json') as f: - data = json.load(f) - fullcolorcheck = (data['textcolor']) - - if "BLACK" in fullcolorcheck: - color = Fore.BLACK - elif "BLUE" in fullcolorcheck: - color = Fore.BLUE - elif "CYAN" in fullcolorcheck: - color = Fore.CYAN - elif "GREEN" in fullcolorcheck: - color = Fore.GREEN - elif "LIGHTBLACK_EX" in fullcolorcheck: - color = Fore.LIGHTBLACK_EX - elif "LIGHTBLUE_EX" in fullcolorcheck: - color = Fore.LIGHTBLUE_EX - elif "LIGHTCYAN_EX" in fullcolorcheck: - color = Fore.LIGHTCYAN_EX - elif "LIGHTGREEN_EX" in fullcolorcheck: - color = Fore.LIGHTGREEN_EX - elif "LIGHTMAGENTA_EX" in fullcolorcheck: - color = Fore.LIGTMAGENTA_EX - elif "LIGHTRED_EX" in fullcolorcheck: - color = Fore.LIGHTRED_EX - elif "LIGHTWHITE_EX" in fullcolorcheck: - color = Fore.LIGHTWHITE_EX - elif "LIGHTYELLOW_EX" in fullcolorcheck: - color = Fore.LIGHTYELLOW_EX - elif "MAGENTA" in fullcolorcheck: - color = Fore.MAGENTA - elif "RED" in fullcolorcheck: - color = Fore.RED - elif "WHITE" in fullcolorcheck: - color = Fore.WHITE - elif "YELLOW" in fullcolorcheck: - color = Fore.YELLOW - - hotkey = Key.f1 - constantKey = Key.f2 - contantClickDelay = 0.1 # the delay between clicks in constantclick - - if True: - with open('settings.json') as f: - data = json.load(f) - hotkey = "Key." + (data['hotkey']) - - if True: - with open('settings.json') as f: - data = json.load(f) - constantKey = "Key." + (data['constantkey']) - #sets the constantclickdelay - if True: - with open('settings.json') as f: - data = json.load(f) - constantClickDelay = (data['constantclickdelay']) - - if True: - with open('settings.json') as f: - data = json.load(f) - debugmode = (data['debugmode']) - ## --------------------------------------------------------------- ## - # Start of program - contantClickDelay = args.cd +if True: + # settingsread = open("settings.txt", 'r+').read() + # colorscheck = ["BLACK", "BLUE", "CYAN", "GREEN", "LIGHTBLACK_EX", "LIGHTBLUE_EX", "LIGHTCYAN_EX", "LIGHTGREEN_EX", "LIGHTMAGENTA_EX", "LIGHTRED_EX", "LIGHTWHITE_EX", "LIGHTYELLOW_EX", "MAGENTA", "RED", "WHITE", "YELLOW"] + # word_exp='|'.join(colorscheck) + # fullcolorcheck = re.findall(word_exp, open("settings.txt", 'r+').read()) + + with open(settingsfile) as f: + data = json.load(f) + fullcolorcheck = (data['textcolor']) + + if "BLACK" in fullcolorcheck: + color = Fore.BLACK + elif "BLUE" in fullcolorcheck: + color = Fore.BLUE + elif "CYAN" in fullcolorcheck: + color = Fore.CYAN + elif "GREEN" in fullcolorcheck: + color = Fore.GREEN + elif "LIGHTBLACK_EX" in fullcolorcheck: + color = Fore.LIGHTBLACK_EX + elif "LIGHTBLUE_EX" in fullcolorcheck: + color = Fore.LIGHTBLUE_EX + elif "LIGHTCYAN_EX" in fullcolorcheck: + color = Fore.LIGHTCYAN_EX + elif "LIGHTGREEN_EX" in fullcolorcheck: + color = Fore.LIGHTGREEN_EX + elif "LIGHTMAGENTA_EX" in fullcolorcheck: + color = Fore.LIGTMAGENTA_EX + elif "LIGHTRED_EX" in fullcolorcheck: + color = Fore.LIGHTRED_EX + elif "LIGHTWHITE_EX" in fullcolorcheck: + color = Fore.LIGHTWHITE_EX + elif "LIGHTYELLOW_EX" in fullcolorcheck: + color = Fore.LIGHTYELLOW_EX + elif "MAGENTA" in fullcolorcheck: + color = Fore.MAGENTA + elif "RED" in fullcolorcheck: + color = Fore.RED + elif "WHITE" in fullcolorcheck: + color = Fore.WHITE + elif "YELLOW" in fullcolorcheck: + color = Fore.YELLOW + +hotkey = Key.f1 +constantKey = Key.f2 +contantClickDelay = 0.1 # the delay between clicks in constantclick + +if True: + with open(settingsfile) as f: + data = json.load(f) + hotkey = "Key." + (data['hotkey']) + +if True: + with open(settingsfile) as f: + data = json.load(f) + constantKey = "Key." + (data['constantkey']) +#sets the constantclickdelay +if True: + with open(settingsfile) as f: + data = json.load(f) + constantClickDelay = (data['constantclickdelay']) + +if True: + with open(settingsfile) as f: + data = json.load(f) + debugmode = (data['debugmode']) +## --------------------------------------------------------------- ## +# Start of program +contantClickDelay = args.cd - init(autoreset=True) +init(autoreset=True) - mouse = Controller() +mouse = Controller() - openlogo = """ +openlogo = """ /$$$$$$ /$$$$$$ /$$ /$$ /$$ /$$__ $$ /$$__ $$| $$|__/ | $$ | $$ \ $$ /$$$$$$ /$$$$$$ /$$$$$$$ | $$ \__/| $$ /$$ /$$$$$$$| $$ /$$ @@ -239,76 +419,76 @@ |__/ - SpamixOfficial 2022 + SpamixOfficial 2023 """ - if debugmode == True: - print("Debugmode") - print("\r" + str(fullcolorcheck) + str(fullkeycheck)) - for a in "Hello and welcome to": - time.sleep(0.01) - print(color + a, end="") - time.sleep(0.06) - for a in "...": - print(color + a, end="") - time.sleep(0.2) - - os.system('cls' if os.name == 'nt' else 'clear') - for char in openlogo: - print(color + char, end="") - time.sleep(0.0003) - - - - print(color + "Controls: \n" + str(hotkey) + " to click (hold to click!) \n" + str(constantKey) + " to click constantly (toggle on/off by clicking the key!)\nEsc to exit!") - - - ## Start of clicker code - shouldClick = False # controlls the constantclick - - def on_press(key): - global Key - global debugmode - global shouldClick - - # checks if the string values if the objects are the same - # this makes so we can set the hotkey to a string instead - # of a key instance - - if str(key) == str(constantKey): # if the constant key is pressed - - shouldClick = not shouldClick #toggles the autoclick - # start new thread to handle the autoclicking on - autoClickThread = threading.Thread(target=autoClick) - autoClickThread.start() - - if str(key) == str(hotkey): #check hotkey - if debugmode == True: - print(key) - mouse.press(Button.left) - mouse.release(Button.left) - - if str(key) == str(Key.delete): - debugmode = not debugmode #toggles the debugmode - - def on_release(key): - global shouldClick - if key == Key.esc: - # Stop autoclick - shouldClick = False - # Stop listener - return False - - - # method to autoclick - def autoClick(): - global shouldClick - while shouldClick: - mouse.press(Button.left) - mouse.release(Button.left) - time.sleep(contantClickDelay) #add delay - - # Collect events until released - with Listener( - on_press=on_press, - on_release=on_release) as listener: - listener.join() +if debugmode == True: + print("Debugmode") + print("\r" + str(fullcolorcheck) + str(fullkeycheck)) +for a in "Hello and welcome to": + time.sleep(0.01) + print(color + a, end="") +time.sleep(0.06) +for a in "...": + print(color + a, end="") + time.sleep(0.2) + +os.system('cls' if os.name == 'nt' else 'clear') +for char in openlogo: + print(color + char, end="") + time.sleep(0.0003) + + + +print(color + "Controls: \n" + str(hotkey) + " to click (hold to click!) \n" + str(constantKey) + " to click constantly (toggle on/off by clicking the key!)\nEsc to exit!") + + +## Start of clicker code +shouldClick = False # controlls the constantclick + +def on_press(key): + global Key + global debugmode + global shouldClick + +# checks if the string values if the objects are the same +# this makes so we can set the hotkey to a string instead +# of a key instance + + if str(key) == str(constantKey): # if the constant key is pressed + + shouldClick = not shouldClick #toggles the autoclick + # start new thread to handle the autoclicking on + autoClickThread = threading.Thread(target=autoClick) + autoClickThread.start() + + if str(key) == str(hotkey): #check hotkey + if debugmode == True: + print(key) + mouse.press(Button.left) + mouse.release(Button.left) + + if str(key) == str(Key.delete): + debugmode = not debugmode #toggles the debugmode + +def on_release(key): + global shouldClick + if key == Key.esc: + # Stop autoclick + shouldClick = False + # Stop listener + return False + + +# method to autoclick +def autoClick(): + global shouldClick + while shouldClick: + mouse.press(Button.left) + mouse.release(Button.left) + time.sleep(contantClickDelay) #add delay + +# Collect events until released +with Listener( + on_press=on_press, + on_release=on_release) as listener: + listener.join() diff --git a/install.py b/install.py index bdfc3bb..450e201 100644 --- a/install.py +++ b/install.py @@ -1,5 +1,31 @@ -import os, json +import os, json, requests installedPackeges = True +# loading json data +with open('settings.json') as f: + data = json.load(f) + +# Setting version ID +idcheck = input("Is this the latest release? (y/n): ").lower() + +if idcheck == "y": + response = requests.get("https://api.github.com/repos/SpamixOfficial/OpenClick/releases/latest") + respdata = response.json() + relid = respdata["id"] + data['release']=str(relid) +elif idcheck == "n": + idcheck2 = input("If not, then enter the tag of the release: ") + response = requests.get("https://api.github.com/repos/SpamixOfficial/OpenClick/releases/tags/" + idcheck2) + if response.status_code == 404: + print("404 Error: Non-valid tag: " + idcheck2) + quit() + respdata = response.json() + relid = respdata["id"] + data['release']=str(relid) +else: + print("\"" + idcheck + "\" is not a valid response") + quit + + # Module checking! print("Checking for the modules on your system...") @@ -53,13 +79,11 @@ # f.write(line) #f.write("firststartup=true") #f.close() - with open('settings.json') as f: - data = json.load(f) data['firststartup']=True with open('settings.json', 'w') as outfile: json.dump(data, outfile,indent=4) - print("You are ready to go! \nPlease make sure you have tKinter installed manually. If it isn't installed then your can read the readme for examples on how to install it!\nRead the docs over at https://github.com/SpamixOfficial/OpenClick/blob/main/README.md for more information!") + print("You are ready to go!\n \nPlease make sure you have tKinter installed manually. If it isn't installed then you can read the readme for examples on how to install it!\nRead the docs over at https://github.com/SpamixOfficial/OpenClick/blob/main/README.md for more information!") else: diff --git a/install.sh b/install.sh new file mode 100755 index 0000000..16764fa --- /dev/null +++ b/install.sh @@ -0,0 +1,25 @@ +#!/usr/bin/bash +set -e + +if [[ "$EUID" != 0 ]]; then + echo "Sudo was not enabled." + + sudo -k + if sudo true; then + echo "Correct password, running installation." + else + echo "Wrong Password, exiting." + exit 1 + fi +fi +pkgname="openclick" + +python install.py + +sudo install -Dm755 cli.py /usr/bin/openclick +sudo install -Dm444 LICENSE "/usr/share/licenses/$pkgname/LICENSE" +sudo install -Dm444 README.md "/usr/share/doc/$pkgname/README.md" +sudo install -Dm666 settings.json "/etc/$pkgname/settings.json" + +echo "Install Success!" +exit 0 \ No newline at end of file diff --git a/settings.json b/settings.json index ed61fed..307b570 100644 --- a/settings.json +++ b/settings.json @@ -1,8 +1,10 @@ { + "release": "88685166", + "autoupdate": false, "hotkey": "f1", "constantkey": "f2", "constantclickdelay": 0.5, - "firststartup": false, + "firststartup": true, "debugmode": false, "textcolor": "WHITE" } \ No newline at end of file diff --git a/uninstall.sh b/uninstall.sh new file mode 100755 index 0000000..17044ca --- /dev/null +++ b/uninstall.sh @@ -0,0 +1,23 @@ +#!/usr/bin/bash +set -e + +if [[ "$EUID" != 0 ]]; then + echo "Sudo was not enabled." + + sudo -k + if sudo true; then + echo "Correct password, running installation." + else + echo "Wrong Password, exiting." + exit 1 + fi +fi +pkgname="openclick" + +sudo rm /usr/bin/openclick +sudo rm -r "/usr/share/licenses/$pkgname" +sudo rm -r "/usr/share/doc/$pkgname" +sudo rm -r "/etc/$pkgname" + +echo "Removal Success!" +exit 0 \ No newline at end of file diff --git a/update.py b/update.py new file mode 100644 index 0000000..47032e1 --- /dev/null +++ b/update.py @@ -0,0 +1,71 @@ +import requests, json, os, zipfile, glob, getpass, subprocess + +# opening settings.json file +jsfile = open("settings.json") +## + +# getting new release json +response = requests.get("https://api.github.com/repos/SpamixOfficial/OpenClick/releases/latest") +respdata = response.json() +## + +# getting new release info +newid = respdata["id"] +tag = respdata["tag_name"] +## + +# local data +jsdata = json.load(jsfile) + +locdata = jsdata["release"] +## + +# url stuff +downurl = respdata["zipball_url"] + +download = requests.get(downurl) +## + +# filename and dir setting +downdir = "/tmp/" +downname = "openclick-" + tag + "-release.zip" +finalfile = os.path.join(downdir, downname) +## + +if not str(newid) == str(locdata): + print("Newest release: " + str(newid) + "\nYour release: " + str(locdata)) + updateinp = input("\nDo you want to update? y/n: ").lower() + + if updateinp == "y": + # downloading and renaming zip file + with open(finalfile, 'wb') as fd: + fd.write(download.content) + # outputing into directory and removing zip file + with zipfile.ZipFile(finalfile, 'r') as dezip: + dezip.extractall(path="/tmp/openclick") + os.remove(finalfile) + + # scanning folder name inside directory + dowrelname = os.listdir("/tmp/openclick") + dowdirname = " ".join(str(x) for x in dowrelname) + print(dowdirname) + + # run installation script + installp = subprocess.run("/tmp/openclick/" + dowdirname + "/install.sh") + + if installp.returncode != 0: + print("Installation failed. \nRemoving temporary files and exiting.") + # remove all files if installation script fails + dowdirfiles = glob.glob("/tmp/openclick/" + dowdirname + "/*") + for f in dowdirfiles: + os.remove(f) + os.rmdir("/tmp/openclick/" + dowdirname) + os.rmdir("/tmp/openclick") + quit() + + # remove directory when done + dowdirfiles = glob.glob("/tmp/openclick/" + dowdirname + "/*") + for f in dowdirfiles: + os.remove(f) + os.rmdir("/tmp/openclick/" + dowdirname) + os.rmdir("/tmp/openclick") From a0586a97f813fdf2809c27da9b536b106fa3d511 Mon Sep 17 00:00:00 2001 From: SpamixOfficial <99183771+SpamixOfficial@users.noreply.github.com> Date: Fri, 27 Jan 2023 08:34:15 +0100 Subject: [PATCH 05/26] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 786c2e6..a4795aa 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ Currently the only way you can run this autoclicker on Windows is by running the # The 2 different editions (READ ME!) There are 2 different editions/versions of this software. -Either you use the "Module" Edition, which consits of the install.py, the main.py adn the manager.py file, or you run the "Full Edition". The "Module" Edition is cross-platform, since it works on Debian, Arch Linux and Windows. +Either you use the "Module" Edition, which consists of the install.py, the main.py adn the manager.py file, or you run the "Full Edition". The "Module" Edition is cross-platform, since it works on Debian, Arch Linux and Windows. The "Full" Edition is the 2 files (main.py and manager.py) made into one file that's also installed as a command on your system. The "Full" Edition isn't cross-platform, it does not work on windows. From 62b017ac07194b1fe46af2f5646e9b9982d3560b Mon Sep 17 00:00:00 2001 From: SpamixOfficial <99183771+SpamixOfficial@users.noreply.github.com> Date: Sun, 29 Jan 2023 14:38:03 +0100 Subject: [PATCH 06/26] fix --- install.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/install.py b/install.py index 450e201..91263ae 100644 --- a/install.py +++ b/install.py @@ -13,7 +13,12 @@ relid = respdata["id"] data['release']=str(relid) elif idcheck == "n": - idcheck2 = input("If not, then enter the tag of the release: ") + response = requests.get("https://api.github.com/repos/SpamixOfficial/OpenClick/tags") + respdata = json.loads(response.text) + print("\nReleases:") + for tag in respdata: + print(tag["name"]) + idcheck2 = input("Enter the tag of the release: ") response = requests.get("https://api.github.com/repos/SpamixOfficial/OpenClick/releases/tags/" + idcheck2) if response.status_code == 404: print("404 Error: Non-valid tag: " + idcheck2) From 91a0aaba0adab5bfb172bd23091d8a14b28d8a6f Mon Sep 17 00:00:00 2001 From: SpamixOfficial <99183771+SpamixOfficial@users.noreply.github.com> Date: Tue, 7 Feb 2023 13:30:07 +0100 Subject: [PATCH 07/26] fixed typos and issues --- install.sh | 2 +- main.py | 2 +- settings.json | 2 +- uninstall.sh | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/install.sh b/install.sh index 16764fa..262eeb4 100755 --- a/install.sh +++ b/install.sh @@ -14,7 +14,7 @@ if [[ "$EUID" != 0 ]]; then fi pkgname="openclick" -python install.py +python install.py || python3 install.py || echo 'Python is not installed, exiting...' sudo install -Dm755 cli.py /usr/bin/openclick sudo install -Dm444 LICENSE "/usr/share/licenses/$pkgname/LICENSE" diff --git a/main.py b/main.py index 8c228c7..00713e5 100644 --- a/main.py +++ b/main.py @@ -128,7 +128,7 @@ """ if debugmode == True: print("Debugmode") - print("\r" + str(fullcolorcheck) + str(fullkeycheck)) + print("\r" + str(fullcolorcheck) + str(hotkey)) for a in "Hello and welcome to": time.sleep(0.01) print(color + a, end="") diff --git a/settings.json b/settings.json index 307b570..cd68621 100644 --- a/settings.json +++ b/settings.json @@ -1,5 +1,5 @@ { - "release": "88685166", + "release": "null", "autoupdate": false, "hotkey": "f1", "constantkey": "f2", diff --git a/uninstall.sh b/uninstall.sh index 17044ca..a6070d2 100755 --- a/uninstall.sh +++ b/uninstall.sh @@ -6,7 +6,7 @@ if [[ "$EUID" != 0 ]]; then sudo -k if sudo true; then - echo "Correct password, running installation." + echo "Correct password, running uninstallation." else echo "Wrong Password, exiting." exit 1 From 1a2a752f8b3978b35b22450807f5a9dc5f410a50 Mon Sep 17 00:00:00 2001 From: SpamixOfficial <99183771+SpamixOfficial@users.noreply.github.com> Date: Fri, 24 Feb 2023 16:39:47 +0100 Subject: [PATCH 08/26] fixed typo --- main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.py b/main.py index 00713e5..6a7fcc3 100644 --- a/main.py +++ b/main.py @@ -41,7 +41,7 @@ with open('settings.json') as f: data = json.load(f) - fullcolorcheck = (data['textcolor']) + fullcolorcheck = (data['textcolor']) if "BLACK" in fullcolorcheck: color = Fore.BLACK From b88c414a943c53d1a18ffd3e6be37409813c252a Mon Sep 17 00:00:00 2001 From: SpamixOfficial <99183771+SpamixOfficial@users.noreply.github.com> Date: Sun, 26 Feb 2023 06:57:31 +0100 Subject: [PATCH 09/26] update in progress --- README.md | 9 ++++----- install.sh | 2 +- cli.py => linux/cli.py | 0 main.py => universal/main.py | 0 manager.py => universal/manager.py | 0 universal/settings.json | 10 ++++++++++ update.py => universal/update.py | 0 7 files changed, 15 insertions(+), 6 deletions(-) rename cli.py => linux/cli.py (100%) rename main.py => universal/main.py (100%) rename manager.py => universal/manager.py (100%) create mode 100644 universal/settings.json rename update.py => universal/update.py (100%) diff --git a/README.md b/README.md index a4795aa..bfdba45 100644 --- a/README.md +++ b/README.md @@ -52,8 +52,7 @@ Here is how to install it. If you can't find your distro's way to install it her ``` # How to install Module Edition - -**Make sure you are in the project directory!** +**Make sure you are in the right directory!** ## How to install Step 1: @@ -75,12 +74,12 @@ Use the command ``` python3 main.py ``` -to run the script! +while in the correct folder to run the script! Use the command ``` python3 manager.py --c ``` -to open up the customization menu! (Tip! Use -h instead of --c to get the help menu instead!) +while in the correct folder to open up the customization menu! (Tip! Use -h instead of --c to get the help menu instead!) If you want to customize the constant click delay, then use the command ``` python3 main.py -cd [value] @@ -91,7 +90,7 @@ The default value is 0,5 seconds! # How to install Full Edition ## How to install -**Make sure you are in the project directory!** +**Make sure you are in the right directory!** **You will need sudo access for this** diff --git a/install.sh b/install.sh index 262eeb4..efd2a29 100755 --- a/install.sh +++ b/install.sh @@ -16,7 +16,7 @@ pkgname="openclick" python install.py || python3 install.py || echo 'Python is not installed, exiting...' -sudo install -Dm755 cli.py /usr/bin/openclick +sudo install -Dm755 linux/cli.py /usr/bin/openclick sudo install -Dm444 LICENSE "/usr/share/licenses/$pkgname/LICENSE" sudo install -Dm444 README.md "/usr/share/doc/$pkgname/README.md" sudo install -Dm666 settings.json "/etc/$pkgname/settings.json" diff --git a/cli.py b/linux/cli.py similarity index 100% rename from cli.py rename to linux/cli.py diff --git a/main.py b/universal/main.py similarity index 100% rename from main.py rename to universal/main.py diff --git a/manager.py b/universal/manager.py similarity index 100% rename from manager.py rename to universal/manager.py diff --git a/universal/settings.json b/universal/settings.json new file mode 100644 index 0000000..cd68621 --- /dev/null +++ b/universal/settings.json @@ -0,0 +1,10 @@ +{ + "release": "null", + "autoupdate": false, + "hotkey": "f1", + "constantkey": "f2", + "constantclickdelay": 0.5, + "firststartup": true, + "debugmode": false, + "textcolor": "WHITE" +} \ No newline at end of file diff --git a/update.py b/universal/update.py similarity index 100% rename from update.py rename to universal/update.py From 8160b94f7701837daf4657de31aacbcd854d0e44 Mon Sep 17 00:00:00 2001 From: SpamixOfficial <99183771+SpamixOfficial@users.noreply.github.com> Date: Wed, 1 Mar 2023 09:33:28 +0100 Subject: [PATCH 10/26] added updates for module edition and shortened code --- linux/cli.py | 28 ++++----------- universal/main.py | 8 ++--- universal/manager.py | 10 +++++- universal/ucheck.py | 21 +++++++++++ universal/update.py | 85 +++++++++++++++++++++++++------------------- 5 files changed, 88 insertions(+), 64 deletions(-) create mode 100644 universal/ucheck.py diff --git a/linux/cli.py b/linux/cli.py index 6e595e3..411b57a 100644 --- a/linux/cli.py +++ b/linux/cli.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -import requests, argparse, os, time, re, threading, json, zipfile, glob, getpass, subprocess +import requests, argparse, os, time, re, threading, json, zipfile, glob, getpass, subprocess, shutil settingsfile = "settings.json" @@ -37,7 +37,7 @@ hotkeynames = [ 'f1', 'f2', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9' ] -parser = argparse.ArgumentParser(description='OpenClick Help') +parser = argparse.ArgumentParser(description='OpenClick Full Edition Help') parser.add_argument("--c", "--custom", help="Opens the customization menu", action="store_true") parser.add_argument("--deb", help="Debug", action="store_true") parser.add_argument("-cd", help="Constant Click Delay", action="store", type=float) @@ -120,19 +120,11 @@ if installp.returncode != 0: print("Installation failed. \nRemoving temporary files and exiting.") # remove all files if installation script fails - dowdirfiles = glob.glob("/tmp/openclick/" + dowdirname + "/*") - for f in dowdirfiles: - os.remove(f) - os.rmdir("/tmp/openclick/" + dowdirname) - os.rmdir("/tmp/openclick") + shutil.rmtree("/tmp/openclick") quit() print("Update was successful! Removing update files...") # remove directory when done - dowdirfiles = glob.glob("/tmp/openclick/" + dowdirname + "/*") - for f in dowdirfiles: - os.remove(f) - os.rmdir("/tmp/openclick/" + dowdirname) - os.rmdir("/tmp/openclick") + shutil.rmtree("/tmp/openclick") print("Exiting...") quit() else: @@ -199,19 +191,11 @@ if installp.returncode != 0: print("Installation failed. \nRemoving temporary files and exiting.") # remove all files if installation script fails - dowdirfiles = glob.glob("/tmp/openclick/" + dowdirname + "/*") - for f in dowdirfiles: - os.remove(f) - os.rmdir("/tmp/openclick/" + dowdirname) - os.rmdir("/tmp/openclick") + shutil.rmtree("/tmp/openclick") quit() print("Update was successful! Removing update files...") # remove directory when done - dowdirfiles = glob.glob("/tmp/openclick/" + dowdirname + "/*") - for f in dowdirfiles: - os.remove(f) - os.rmdir("/tmp/openclick/" + dowdirname) - os.rmdir("/tmp/openclick") + shutil.rmtree("/tmp/openclick") print("Exiting...") quit() else: diff --git a/universal/main.py b/universal/main.py index 6a7fcc3..304dd39 100644 --- a/universal/main.py +++ b/universal/main.py @@ -1,9 +1,7 @@ # Startup Check debugswitch = 1 -import os, time, re, argparse -import threading -import json -parser = argparse.ArgumentParser(description="OpenClick Help") +import os, time, re, argparse, subprocess, threading, json +parser = argparse.ArgumentParser(description="OpenClick Module Edition Help") parser.add_argument("-cd", help="Constant Click Delay", action="store", type=float) args = parser.parse_args() firststartup = False @@ -30,6 +28,8 @@ from pynput.mouse import Button, Controller from colorama import Fore, Back, init color = Fore.RED +if data["autoupdate"] == True: + subprocess.run("ucheck.py") diff --git a/universal/manager.py b/universal/manager.py index 6da6db4..dfb966f 100644 --- a/universal/manager.py +++ b/universal/manager.py @@ -79,13 +79,21 @@ cdelay = float(choose_key) data['constantclickdelay'] = float(choose_key) except ValueError: - print("You must input a number.") + print("You must input a number.") + elif menuinput == "--au": + print("Should Openclick check for updates automatically (y/n)?") + au = input("$\"AU\">").lower() + if au == "y": + data['autoupdate'] = True + else: + data['autoupdate'] = False elif menuinput == "--help": print("\r Textcolor (--textcolor) - The color of the text you see in the terminal.") print("\r Color Examples (--colorexamples) - Shows you the colors you can choose from.") print("\r Key (--key) - The key for the \"Normal\" mode.") print("\r Constant Key (--ckey) - The key for the \"Constant\" mode.") print("\r Constant Click Delay (--cdelay) - The delay for the \"Constant\" mode.") + print("\r AU (--au) - If Openclick should check for updates automatically (wifi is necessary!)") print("\r Explainer (--help) (This one explains all settings!") print("\r Exit (--exit)") diff --git a/universal/ucheck.py b/universal/ucheck.py new file mode 100644 index 0000000..5229d76 --- /dev/null +++ b/universal/ucheck.py @@ -0,0 +1,21 @@ +import requests, json +from colorama import Fore, init + +init(autoreset=True) + +# opening settings.json file +jsfile = json.load(open("settings.json")) +## + +# getting new release json +response = requests.get("https://api.github.com/repos/SpamixOfficial/OpenClick/releases/latest") +respdata = response.json() +## + +# getting new release info +newid = respdata["id"] + +if not str(jsfile["release"]) == str(newid): + print(Fore.YELLOW + "New release available to download! " + Fore.RED + "\nConsider updating using the \"update.py\" file since we dont support older versions of our software!") +else: + print("Version is up to date!") \ No newline at end of file diff --git a/universal/update.py b/universal/update.py index 47032e1..ccaab60 100644 --- a/universal/update.py +++ b/universal/update.py @@ -1,4 +1,4 @@ -import requests, json, os, zipfile, glob, getpass, subprocess +import requests, json, os, zipfile, glob, getpass, shutil # opening settings.json file jsfile = open("settings.json") @@ -26,46 +26,57 @@ download = requests.get(downurl) ## +def install(): + global source + try: + shutil.move("tmp/universal", source, copy_function = shutil.copytree) + return 0 + except: + return 1 + # filename and dir setting -downdir = "/tmp/" downname = "openclick-" + tag + "-release.zip" -finalfile = os.path.join(downdir, downname) ## +print("Newest release: " + str(newid) + "\nLocal release: " + str(locdata)) +updateinp = input("\nDo you want to update? y/n: ").lower() -if not str(newid) == str(locdata): - print("Newest release: " + str(newid) + "\nYour release: " + str(locdata)) - updateinp = input("\nDo you want to update? y/n: ").lower() - - if updateinp == "y": - # downloading and renaming zip file - with open(finalfile, 'wb') as fd: - fd.write(download.content) - # outputing into directory and removing zip file - with zipfile.ZipFile(finalfile, 'r') as dezip: - dezip.extractall(path="/tmp/openclick") - os.remove(finalfile) +if updateinp == "y": + # downloading and renaming zip file + with open(downname, 'wb') as fd: + print("Downloading...") + fd.write(download.content) + # outputing into directory and removing zip file + with zipfile.ZipFile(downname, 'r') as dezip: + print("Extracting into folder...") + dezip.extractall(path="tmp") + os.remove(downname) - # scanning folder name inside directory - dowrelname = os.listdir("/tmp/openclick") - dowdirname = " ".join(str(x) for x in dowrelname) - print(dowdirname) + # scanning folder name inside directory + dowrelname = os.listdir("tmp") + dowdirname = " ".join(str(x) for x in dowrelname) + print(dowdirname) - # run installation script - installp = subprocess.run("/tmp/openclick/" + dowdirname + "/install.sh") + # run installation script + print("Installing...") + bdest = "old" + source = os.getcwd() + # Backup files if something goes wrong + if os.path.isdir(bdest) == True: + shutil.move(source, bdest, copy_function = shutil.copytree) + else: + os.mkdir(bdest) + shutil.move(source, bdest, copy_function = shutil.copytree) + installp = install() - if installp.returncode != 0: - print("Installation failed. \nRemoving temporary files and exiting.") - # remove all files if installation script fails - dowdirfiles = glob.glob("/tmp/openclick/" + dowdirname + "/*") - for f in dowdirfiles: - os.remove(f) - os.rmdir("/tmp/openclick/" + dowdirname) - os.rmdir("/tmp/openclick") - quit() - - # remove directory when done - dowdirfiles = glob.glob("/tmp/openclick/" + dowdirname + "/*") - for f in dowdirfiles: - os.remove(f) - os.rmdir("/tmp/openclick/" + dowdirname) - os.rmdir("/tmp/openclick") + if installp != 0: + print("Installation failed. \nRemoving temporary files and exiting.") + # remove all files if installation script fails + sutil.rmtree("tmp") + quit() + print("Update was successful! Removing update files...") + # remove directory when done + shutil.rmtree("tmp") + print("Exiting...") + quit() +else: + quit() From 8af229bc9a99f82cce32bde0ea20164314e40b86 Mon Sep 17 00:00:00 2001 From: SpamixOfficial <99183771+SpamixOfficial@users.noreply.github.com> Date: Wed, 1 Mar 2023 12:48:34 +0100 Subject: [PATCH 11/26] fix --- universal/settings.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/universal/settings.json b/universal/settings.json index cd68621..66fb5bd 100644 --- a/universal/settings.json +++ b/universal/settings.json @@ -1,6 +1,6 @@ { "release": "null", - "autoupdate": false, + "autoupdate": true, "hotkey": "f1", "constantkey": "f2", "constantclickdelay": 0.5, From 486556d6320852702fc0381c72d0d00e50d88e2d Mon Sep 17 00:00:00 2001 From: SpamixOfficial <99183771+SpamixOfficial@users.noreply.github.com> Date: Wed, 1 Mar 2023 12:54:25 +0100 Subject: [PATCH 12/26] lint --- .github/workflows/lint.yml | 51 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 .github/workflows/lint.yml diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml new file mode 100644 index 0000000..5442294 --- /dev/null +++ b/.github/workflows/lint.yml @@ -0,0 +1,51 @@ +--- +################################# +################################# +## Super Linter GitHub Actions ## +################################# +################################# +name: Lint Code Base + +############################# +# Start the job on all push # +############################# +on: + push: + branches-ignore: dev + # Remove the line above to run when pushing to master + pull_request: + branches: dev + +############### +# Set the Job # +############### +jobs: + build: + # Name the Job + name: Lint Code Base + # Set the agent to run on + runs-on: ubuntu-latest + + ################## + # Load all steps # + ################## + steps: + ########################## + # Checkout the code base # + ########################## + - name: Checkout Code + uses: actions/checkout@v3 + with: + # Full git history is needed to get a proper + # list of changed files within `super-linter` + fetch-depth: 0 + + ################################ + # Run Linter against code base # + ################################ + - name: Lint Code Base + uses: github/super-linter@v4 + env: + VALIDATE_ALL_CODEBASE: false + DEFAULT_BRANCH: master + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file From 39b4b9513163e4ecb5fa49c91b8fe38a0f8bb0c7 Mon Sep 17 00:00:00 2001 From: SpamixOfficial <99183771+SpamixOfficial@users.noreply.github.com> Date: Wed, 1 Mar 2023 14:04:30 +0100 Subject: [PATCH 13/26] Delete .github/workflows directory --- .github/workflows/lint.yml | 51 -------------------------------------- 1 file changed, 51 deletions(-) delete mode 100644 .github/workflows/lint.yml diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml deleted file mode 100644 index 5442294..0000000 --- a/.github/workflows/lint.yml +++ /dev/null @@ -1,51 +0,0 @@ ---- -################################# -################################# -## Super Linter GitHub Actions ## -################################# -################################# -name: Lint Code Base - -############################# -# Start the job on all push # -############################# -on: - push: - branches-ignore: dev - # Remove the line above to run when pushing to master - pull_request: - branches: dev - -############### -# Set the Job # -############### -jobs: - build: - # Name the Job - name: Lint Code Base - # Set the agent to run on - runs-on: ubuntu-latest - - ################## - # Load all steps # - ################## - steps: - ########################## - # Checkout the code base # - ########################## - - name: Checkout Code - uses: actions/checkout@v3 - with: - # Full git history is needed to get a proper - # list of changed files within `super-linter` - fetch-depth: 0 - - ################################ - # Run Linter against code base # - ################################ - - name: Lint Code Base - uses: github/super-linter@v4 - env: - VALIDATE_ALL_CODEBASE: false - DEFAULT_BRANCH: master - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file From d354f683d918fc331b3de935158920458763fa1a Mon Sep 17 00:00:00 2001 From: SpamixOfficial <99183771+SpamixOfficial@users.noreply.github.com> Date: Wed, 1 Mar 2023 17:36:57 +0100 Subject: [PATCH 14/26] wayland and fedora support added --- README.md | 22 ++++++-- universal/install.py | 108 ++++++++++++++++++++++++++++++++++++++++ universal/main.py | 30 +++++++++-- universal/settings.json | 3 +- 4 files changed, 152 insertions(+), 11 deletions(-) create mode 100644 universal/install.py diff --git a/README.md b/README.md index bfdba45..1500705 100644 --- a/README.md +++ b/README.md @@ -9,10 +9,13 @@ Welcome to OpenClick! OpenClick is an open source autoclicker for Debian and Arch based systems! Currently the only way you can run this autoclicker on Windows is by running the Module Edition (I'm going to fix this). +# LOOK HERE WAYLAND USERS! +The only way to run OpenClick on Wayland is by using Sudo. I've implemented a "feature" that checks for Wayland, and notifies you if you need to use it. + # The 2 different editions (READ ME!) There are 2 different editions/versions of this software. -Either you use the "Module" Edition, which consists of the install.py, the main.py adn the manager.py file, or you run the "Full Edition". The "Module" Edition is cross-platform, since it works on Debian, Arch Linux and Windows. +Either you use the "Module" Edition, which consists of the install.py, the main.py and the manager.py file, or you run the "Full Edition". The "Module" Edition is cross-platform, since it works on Linux and Windows! The "Full" Edition is the 2 files (main.py and manager.py) made into one file that's also installed as a command on your system. The "Full" Edition isn't cross-platform, it does not work on windows. @@ -45,12 +48,21 @@ Here is how to install it. If you can't find your distro's way to install it her ``` sudo pacman -S tk ``` - -**For Arch Linux based distros** +**For Fedora based distros** ``` - sudo pacman -S tk + sudo dnf install python3-tkinter ``` - + + +## Fedora + +I dont know if this is a Red-Hat or Wayland based issue, but this has only ocured on Fedora so far. This issue can be resolved though by installing evdev manually by running the command down below. + +**Evdev package** +``` +sudo dnf install python3-evdev +``` + # How to install Module Edition **Make sure you are in the right directory!** diff --git a/universal/install.py b/universal/install.py new file mode 100644 index 0000000..ce3bb8d --- /dev/null +++ b/universal/install.py @@ -0,0 +1,108 @@ +import os, json, requests, platform +installedPackeges = True +# loading json data +with open('settings.json') as f: + data = json.load(f) + +if platform.system() == "Linux": + if os.environ.get('WAYLAND_DISPLAY'): + data["sudo"] = True + if os.geteuid() != 0: + print("Sudo is needed to run OpenClick Module Edition using Wayland.") + print("\n---Try again with sudo---") + with open('settings.json', 'w') as outfile: + json.dump(data, outfile,indent=4) + quit() + with open('settings.json', 'w') as outfile: + json.dump(data, outfile,indent=4) + +# Setting version ID +idcheck = input("Is this the latest release? (y/n): ").lower() + +if idcheck == "y": + response = requests.get("https://api.github.com/repos/SpamixOfficial/OpenClick/releases/latest") + respdata = response.json() + relid = respdata["id"] + data['release']=str(relid) +elif idcheck == "n": + response = requests.get("https://api.github.com/repos/SpamixOfficial/OpenClick/tags") + respdata = json.loads(response.text) + print("\nReleases:") + for tag in respdata: + print(tag["name"]) + idcheck2 = input("Enter the tag of the release: ") + response = requests.get("https://api.github.com/repos/SpamixOfficial/OpenClick/releases/tags/" + idcheck2) + if response.status_code == 404: + print("404 Error: Non-valid tag: " + idcheck2) + quit() + respdata = response.json() + relid = respdata["id"] + data['release']=str(relid) +else: + print("\"" + idcheck + "\" is not a valid response") + quit + + +# Module checking! + +print("Checking for the modules on your system...") +## Checking if modules are installed and configuring settings.txt +try: + import colorama + print("Module \"colorama\" was found!") + # cresult = True +except ModuleNotFoundError: + print("The module named \"colorama\" wasn't found! Do you want to install it? (y/n)") + coloramainput = input().upper() + if coloramainput == "Y": + os.system("pip install colorama") + # cresult = True + elif coloramainput == "N": + installedPackeges = False + print("Then you need to install it. Read the instructions on the github page or read the README.md!") + else: + print("That wasn't a N or an Y.") + quit() + +try: + import pynput + print("Module \"pynput\" was found!") + presult = True +except ModuleNotFoundError: + print("The module named \"pynput\" wasn't found! Do you want to install it? (y/n)") + pynputinput = input().upper() + if pynputinput == "Y": + os.system("pip install pynput") + # presult = True + elif pynputinput == "N": + installedPackeges = False + print("Then you need to install it. Read the instructions on the github page or read the README.md!") + else: + print("That wasn't a N or an Y.") + quit() + +if installedPackeges: + #f = open('./settings.txt','r') + #a = ['firststartup=false'] + #lst = [] + #for line in f: + # for word in a: + # if word in line: + # line = line.replace(word,'') + # lst.append(line) + #f.close() + #f = open('./settings.txt','w') + #for line in lst: + # f.write(line) + #f.write("firststartup=true") + #f.close() + + data['firststartup']=True + with open('settings.json', 'w') as outfile: + json.dump(data, outfile,indent=4) + print("You are ready to go!\n \nPlease make sure you have tKinter installed manually. If it isn't installed then you can read the readme for examples on how to install it!\nRead the docs over at https://github.com/SpamixOfficial/OpenClick/blob/main/README.md for more information!") + + +else: + print(Back.RED + "Sorry, but either one or both of the modules wasn't found. \n Read the instructions for help on how to install them!") + quit() diff --git a/universal/main.py b/universal/main.py index 304dd39..659cc00 100644 --- a/universal/main.py +++ b/universal/main.py @@ -1,10 +1,11 @@ # Startup Check debugswitch = 1 -import os, time, re, argparse, subprocess, threading, json +import os, time, re, argparse, subprocess, threading, json, requests parser = argparse.ArgumentParser(description="OpenClick Module Edition Help") parser.add_argument("-cd", help="Constant Click Delay", action="store", type=float) args = parser.parse_args() firststartup = False +# Most important settings checking if True: #settingsread = open("settings.txt", 'r+').read() #rawstartcheck = ["firststartup=true", "firststartup=false"] @@ -12,7 +13,7 @@ #fullstartupcheck = re.findall(word_exp, open("settings.txt", 'r+').read()) with open('settings.json') as f: data = json.load(f) - + fullstartupcheck = (data['firststartup']) if fullstartupcheck == True: @@ -21,17 +22,36 @@ firststartup = False print("Run the installation script before running the main program!") quit() - + if data["sudo"] == True: + print("Sudo is needed to run OpenClick Module Edition using Wayland.") + print("\n---Try again with sudo---") + quit() ## --------------------------------------------------------------- ## # Settings Check from pynput.keyboard import Key, Listener from pynput.mouse import Button, Controller from colorama import Fore, Back, init color = Fore.RED -if data["autoupdate"] == True: - subprocess.run("ucheck.py") +def ucheck(): + # opening settings.json file + jsfile = json.load(open("settings.json")) + ## + # getting new release json + response = requests.get("https://api.github.com/repos/SpamixOfficial/OpenClick/releases/latest") + respdata = response.json() + ## + # getting new release info + newid = respdata["id"] + + if not str(jsfile["release"]) == str(newid): + print(Fore.YELLOW + "New release available to download! " + Fore.RED + "\nConsider updating using the \"update.py\" file since we dont support older versions of our software!") + else: + print("Version is up to date!") + +if data["autoupdate"] == True: + ucheck() if True: # settingsread = open("settings.txt", 'r+').read() diff --git a/universal/settings.json b/universal/settings.json index 66fb5bd..0bb26e1 100644 --- a/universal/settings.json +++ b/universal/settings.json @@ -6,5 +6,6 @@ "constantclickdelay": 0.5, "firststartup": true, "debugmode": false, - "textcolor": "WHITE" + "textcolor": "WHITE", + "sudo": true } \ No newline at end of file From 0adcd506626585dcdbb9df4f7411ac6a1e7b9b3a Mon Sep 17 00:00:00 2001 From: SpamixOfficial <99183771+SpamixOfficial@users.noreply.github.com> Date: Thu, 2 Mar 2023 07:57:28 +0100 Subject: [PATCH 15/26] Wayland support Fixes #15 --- README.md | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 1500705..40e80f1 100644 --- a/README.md +++ b/README.md @@ -67,6 +67,8 @@ sudo dnf install python3-evdev **Make sure you are in the right directory!** ## How to install +**(Wayland users use sudo)** + Step 1: Run the installation script! ``` @@ -82,6 +84,8 @@ Step 2: ``` You are done! ## How to use +**(Wayland users use sudo)** + Use the command ``` python3 main.py @@ -117,13 +121,17 @@ Step 1: ``` sudo pacman -S jq ``` + For Red-Hat based distros: + ``` + sudo dnf install jq + ``` Step 2: Chmod the scripts and run the installer. ``` chmod +x install.sh && chmod +x uninstall.sh && ./install.sh ``` Step 3: - When you get the message: + When you get the message; > Installation Success! you can run the software using the command: @@ -178,9 +186,9 @@ It doesn't work on MacOS and Fedora because of issues regarding a module named p # To-do List! - [X] Add customization - [X] Add constant mode -- [X] Partly Add Windows support +- [X] Partial Add Windows support - [X] Add auto updates -- [ ] Add auto updates for all editions +- [X] Add auto updates for all editions - [ ] Add Windows support - [ ] Create aur package - [ ] (Maybe) Create deb package From a7ad62caf1146b69d50961f1db49339ea42b7171 Mon Sep 17 00:00:00 2001 From: SpamixOfficial <99183771+SpamixOfficial@users.noreply.github.com> Date: Mon, 6 Mar 2023 14:36:59 +0100 Subject: [PATCH 16/26] fixed error left when testing --- linux/cli.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/linux/cli.py b/linux/cli.py index 411b57a..21db205 100644 --- a/linux/cli.py +++ b/linux/cli.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 import requests, argparse, os, time, re, threading, json, zipfile, glob, getpass, subprocess, shutil -settingsfile = "settings.json" +settingsfile = "/etc/openclick/settings.json" # Startup Check firststartup = False From cdf559a2cacbc37ccfdce02afafac9c64a1f18a6 Mon Sep 17 00:00:00 2001 From: SpamixOfficial <99183771+SpamixOfficial@users.noreply.github.com> Date: Tue, 7 Mar 2023 08:29:05 +0100 Subject: [PATCH 17/26] fixed errors and added ifno --- README.md | 2 ++ linux/cli.py | 3 ++- settings.json | 2 +- universal/main.py | 9 +++++---- 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 40e80f1..6fae787 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,8 @@ Currently the only way you can run this autoclicker on Windows is by running the # LOOK HERE WAYLAND USERS! The only way to run OpenClick on Wayland is by using Sudo. I've implemented a "feature" that checks for Wayland, and notifies you if you need to use it. +There are also a limited amount of application that can use openclick on wayland. **The only applications that can use Openclick on Wayland is the applications running xwayland** + # The 2 different editions (READ ME!) There are 2 different editions/versions of this software. diff --git a/linux/cli.py b/linux/cli.py index 21db205..1de2a37 100644 --- a/linux/cli.py +++ b/linux/cli.py @@ -381,7 +381,8 @@ debugmode = (data['debugmode']) ## --------------------------------------------------------------- ## # Start of program -contantClickDelay = args.cd +if args.cd: + contantClickDelay = args.cd init(autoreset=True) diff --git a/settings.json b/settings.json index cd68621..ace58f9 100644 --- a/settings.json +++ b/settings.json @@ -1,5 +1,5 @@ { - "release": "null", + "release": "94047280", "autoupdate": false, "hotkey": "f1", "constantkey": "f2", diff --git a/universal/main.py b/universal/main.py index 659cc00..446537a 100644 --- a/universal/main.py +++ b/universal/main.py @@ -23,9 +23,10 @@ print("Run the installation script before running the main program!") quit() if data["sudo"] == True: - print("Sudo is needed to run OpenClick Module Edition using Wayland.") - print("\n---Try again with sudo---") - quit() + if os.geteuid() != 0: + print("Sudo is needed to run OpenClick Module Edition using Wayland.") + print("\n---Try again with sudo---") + quit() ## --------------------------------------------------------------- ## # Settings Check from pynput.keyboard import Key, Listener @@ -144,7 +145,7 @@ def ucheck(): |__/ - SpamixOfficial 2022 + SpamixOfficial 2023 """ if debugmode == True: print("Debugmode") From d6bd091e096bd35086f0a30336116ad108ef0c60 Mon Sep 17 00:00:00 2001 From: Undercoverdog <64562491+Undercoverdog@users.noreply.github.com> Date: Sun, 19 Mar 2023 13:22:45 +0100 Subject: [PATCH 18/26] Updated yes/no prompt Y/N prompt now also accepts yes/no --- install.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/install.py b/install.py index 3562615..3301ba1 100644 --- a/install.py +++ b/install.py @@ -9,12 +9,12 @@ print("Module \"colorama\" was found!") # cresult = True except ModuleNotFoundError: - print("The module named \"colorama\" wasn't found! Do you want to install it? (y/n)") + print("The module named \"colorama\" wasn't found! Do you want to install it? ([Y]es/[N]o)") coloramainput = input().upper() - if coloramainput == "Y": + if coloramainput == "Y" or coloramainput == "Yes": os.system("pip install colorama") # cresult = True - elif coloramainput == "N": + elif coloramainput == "N" or coloramainput == "No": installedPackeges = False print("Then you need to install it. Read the instructions on the github page or read the README.md!") else: @@ -26,12 +26,12 @@ print("Module \"pynput\" was found!") presult = True except ModuleNotFoundError: - print("The module named \"pynput\" wasn't found! Do you want to install it? (y/n)") + print("The module named \"pynput\" wasn't found! Do you want to install it? ([Y]es/[N]o)") pynputinput = input().upper() - if pynputinput == "Y": + if pynputinput == "Y" or pynputinput == "Yes": os.system("pip install pynput") # presult = True - elif pynputinput == "N": + elif pynputinput == "N" or pynputinput == "No": installedPackeges = False print("Then you need to install it. Read the instructions on the github page or read the README.md!") else: @@ -43,12 +43,12 @@ print("Module \"flagser\" was found!") presult = True except ModuleNotFoundError: - print("The module named \"flagser\" wasn't found! Do you want to install it? (y/n)") + print("The module named \"flagser\" wasn't found! Do you want to install it? ([Y]es/[N]o)") pynputinput = input().upper() - if pynputinput == "Y": + if pynputinput == "Y" or pynputinput == "Yes": os.system("pip install flagser") # presult = True - elif pynputinput == "N": + elif pynputinput == "N" or pynputinput == "No": installedPackeges = False print("Then you need to install it. Read the instructions on the github page or read the README.md!") else: From cb982eb3d3b1a8ca5390be11cb29d9aed9f98144 Mon Sep 17 00:00:00 2001 From: Undercoverdog <64562491+Undercoverdog@users.noreply.github.com> Date: Sun, 19 Mar 2023 13:25:58 +0100 Subject: [PATCH 19/26] Update install.py uppercase --- install.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/install.py b/install.py index 3301ba1..11e295c 100644 --- a/install.py +++ b/install.py @@ -11,10 +11,10 @@ except ModuleNotFoundError: print("The module named \"colorama\" wasn't found! Do you want to install it? ([Y]es/[N]o)") coloramainput = input().upper() - if coloramainput == "Y" or coloramainput == "Yes": + if coloramainput == "Y" or coloramainput == "YES": os.system("pip install colorama") # cresult = True - elif coloramainput == "N" or coloramainput == "No": + elif coloramainput == "N" or coloramainput == "NO": installedPackeges = False print("Then you need to install it. Read the instructions on the github page or read the README.md!") else: @@ -28,10 +28,10 @@ except ModuleNotFoundError: print("The module named \"pynput\" wasn't found! Do you want to install it? ([Y]es/[N]o)") pynputinput = input().upper() - if pynputinput == "Y" or pynputinput == "Yes": + if pynputinput == "Y" or pynputinput == "YES": os.system("pip install pynput") # presult = True - elif pynputinput == "N" or pynputinput == "No": + elif pynputinput == "N" or pynputinput == "NO": installedPackeges = False print("Then you need to install it. Read the instructions on the github page or read the README.md!") else: @@ -45,10 +45,10 @@ except ModuleNotFoundError: print("The module named \"flagser\" wasn't found! Do you want to install it? ([Y]es/[N]o)") pynputinput = input().upper() - if pynputinput == "Y" or pynputinput == "Yes": + if pynputinput == "Y" or pynputinput == "YES": os.system("pip install flagser") # presult = True - elif pynputinput == "N" or pynputinput == "No": + elif pynputinput == "N" or pynputinput == "NO": installedPackeges = False print("Then you need to install it. Read the instructions on the github page or read the README.md!") else: From 18c4a3b8a8842c14b3bd3627154ff72d5820d406 Mon Sep 17 00:00:00 2001 From: Your Name Date: Sun, 19 Mar 2023 15:03:17 +0100 Subject: [PATCH 20/26] Updated yes/no prompts, fixed uncaught exception on line 104 --- install.py | 54 ++++++++++++++++++++++++++++++++------------------- settings.json | 2 +- 2 files changed, 35 insertions(+), 21 deletions(-) diff --git a/install.py b/install.py index 317070f..6fdf09e 100644 --- a/install.py +++ b/install.py @@ -1,18 +1,30 @@ import os, json, requests + + +#Easier way of checking if input was yes +#Instead of manually checking if user input string is "Y" etc., the programm will just check whether user input is in the array or not +#Adding ye as an valid option due to user typos +arr = {"yes", "y", "ye", ""} + +#If the user input isnt in arr, it will just count as a no + + + + installedPackeges = True # loading json data with open('settings.json') as f: data = json.load(f) # Setting version ID -idcheck = input("Is this the latest release? (y/n): ").lower() +idcheck = input("Is this the latest release? ([Y]es/[n]o): ").lower() -if idcheck == "y": +if idcheck in arr: response = requests.get("https://api.github.com/repos/SpamixOfficial/OpenClick/releases/latest") respdata = response.json() relid = respdata["id"] data['release']=str(relid) -elif idcheck == "n": +else: response = requests.get("https://api.github.com/repos/SpamixOfficial/OpenClick/tags") respdata = json.loads(response.text) print("\nReleases:") @@ -26,13 +38,14 @@ respdata = response.json() relid = respdata["id"] data['release']=str(relid) -else: - print("\"" + idcheck + "\" is not a valid response") - quit + # Module checking! + + + print("Checking for the modules on your system...") ## Checking if modules are installed and configuring settings.txt try: @@ -40,17 +53,16 @@ print("Module \"colorama\" was found!") # cresult = True except ModuleNotFoundError: - print("The module named \"colorama\" wasn't found! Do you want to install it? ([Y]es/[N]o)") - coloramainput = input().upper() - if coloramainput == "Y" or coloramainput == "YES": + print("The module named \"colorama\" wasn't found! Do you want to install it? ([Y]es/[n]o)") + #Default option for no input = Yes + coloramainput = input().lower() + if coloramainput in arr: os.system("pip install colorama") # cresult = True - elif coloramainput == "N" or coloramainput == "NO": + else: installedPackeges = False print("Then you need to install it. Read the instructions on the github page or read the README.md!") - else: - print("That wasn't a N or an Y.") - quit() + try: import pynput @@ -58,16 +70,14 @@ presult = True except ModuleNotFoundError: print("The module named \"pynput\" wasn't found! Do you want to install it? ([Y]es/[N]o)") - pynputinput = input().upper() - if pynputinput == "Y" or pynputinput == "YES": + pynputinput = input().lower() + if pynputinput in arr: os.system("pip install pynput") # presult = True - elif pynputinput == "N" or pynputinput == "NO": + else: installedPackeges = False print("Then you need to install it. Read the instructions on the github page or read the README.md!") - else: - print("That wasn't a N or an Y.") - quit() + if installedPackeges: #f = open('./settings.txt','r') @@ -92,5 +102,9 @@ else: - print(Back.RED + "Sorry, but either one or both of the modules wasn't found. \n Read the instructions for help on how to install them!") + try: + print(Back.RED + "Sorry, but either one or both of the modules wasn't found. \n Read the instructions for help on how to install them!") + except: + print("Sorry, but either one or both of the modules wasn't found. \n Read the instructions for help on how to install them!") + quit() diff --git a/settings.json b/settings.json index ace58f9..307b570 100644 --- a/settings.json +++ b/settings.json @@ -1,5 +1,5 @@ { - "release": "94047280", + "release": "88685166", "autoupdate": false, "hotkey": "f1", "constantkey": "f2", From bc0ce33026edae731c32086930d1b7c09cd71912 Mon Sep 17 00:00:00 2001 From: Your Name Date: Sun, 19 Mar 2023 15:14:47 +0100 Subject: [PATCH 21/26] typo --- uninstall.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/uninstall.sh b/uninstall.sh index a6070d2..aa6796e 100755 --- a/uninstall.sh +++ b/uninstall.sh @@ -19,5 +19,5 @@ sudo rm -r "/usr/share/licenses/$pkgname" sudo rm -r "/usr/share/doc/$pkgname" sudo rm -r "/etc/$pkgname" -echo "Removal Success!" +echo "Successfully removed!" exit 0 \ No newline at end of file From 5c1b46becb4547cc012fdf319803d84b89aade56 Mon Sep 17 00:00:00 2001 From: Your Name Date: Sun, 19 Mar 2023 15:43:12 +0100 Subject: [PATCH 22/26] typo From b10d31a0255b26e009b675e2d6fe0c7840395e69 Mon Sep 17 00:00:00 2001 From: Your Name Date: Sun, 19 Mar 2023 15:56:42 +0100 Subject: [PATCH 23/26] reverting --- uninstall.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/uninstall.sh b/uninstall.sh index aa6796e..a6070d2 100755 --- a/uninstall.sh +++ b/uninstall.sh @@ -19,5 +19,5 @@ sudo rm -r "/usr/share/licenses/$pkgname" sudo rm -r "/usr/share/doc/$pkgname" sudo rm -r "/etc/$pkgname" -echo "Successfully removed!" +echo "Removal Success!" exit 0 \ No newline at end of file From 380b5d7e27f3527286675de6ac70fa6652903c5d Mon Sep 17 00:00:00 2001 From: Undercoverdog <64562491+Undercoverdog@users.noreply.github.com> Date: Sun, 19 Mar 2023 17:14:21 +0100 Subject: [PATCH 24/26] Update settings.json --- settings.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/settings.json b/settings.json index 307b570..2915347 100644 --- a/settings.json +++ b/settings.json @@ -1,5 +1,5 @@ { - "release": "88685166", + "release": null, "autoupdate": false, "hotkey": "f1", "constantkey": "f2", @@ -7,4 +7,4 @@ "firststartup": true, "debugmode": false, "textcolor": "WHITE" -} \ No newline at end of file +} From 34905a971fdf98a341460c46bc32aa4ded41c062 Mon Sep 17 00:00:00 2001 From: SpamixOfficial <99183771+SpamixOfficial@users.noreply.github.com> Date: Tue, 21 Mar 2023 12:40:49 +0100 Subject: [PATCH 25/26] Update README.md --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 25a870b..fd4f4f9 100644 --- a/README.md +++ b/README.md @@ -66,11 +66,11 @@ Here is how to install it. If you can't find your distro's way to install it her ## Fedora -I dont know if this is a Red-Hat or Wayland based issue, but this has only ocured on Fedora so far. This issue can be resolved though by installing evdev manually by running the command down below. +On some distros the python3-devel package is not installed by default, and this package is needed for many python modules, which causes the installation to fail if the python3-devel package isn't installed. This issue can be resolved though by installing the python3-devel package. -**Evdev package** +**devel package** ``` -sudo dnf install python3-evdev +sudo dnf install python3-devel ``` # How to install Module Edition From e879d845bda147136900fe63abcff595dffc1613 Mon Sep 17 00:00:00 2001 From: SpamixOfficial <99183771+SpamixOfficial@users.noreply.github.com> Date: Fri, 31 Mar 2023 08:16:31 +0200 Subject: [PATCH 26/26] Update README.md --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index fd4f4f9..e2a308e 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,6 @@ A fix is coming! There are guides for both editions. -**TO USE OPENCLICK WITH WINDOWS SUPPORT YOU'LL HAVE TO USE THE LATEST ALPHA VERSION, IN THIS CASE IT'S 0.4** # Intro So, what is an autoclicker?