{"id":22120481,"url":"https://github.com/umactually/autopilot","last_synced_at":"2025-03-24T06:41:54.406Z","repository":{"id":41490055,"uuid":"509854600","full_name":"UmActually/Autopilot","owner":"UmActually","description":"Automatically schedule and join Zoom meetings on macOS.","archived":false,"fork":false,"pushed_at":"2022-07-03T21:28:20.000Z","size":155,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-29T12:22:24.038Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/UmActually.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-07-02T20:24:05.000Z","updated_at":"2022-07-03T17:08:43.000Z","dependencies_parsed_at":"2022-09-21T10:31:03.630Z","dependency_job_id":null,"html_url":"https://github.com/UmActually/Autopilot","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/UmActually%2FAutopilot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/UmActually%2FAutopilot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/UmActually%2FAutopilot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/UmActually%2FAutopilot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/UmActually","download_url":"https://codeload.github.com/UmActually/Autopilot/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245223853,"owners_count":20580361,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-12-01T14:23:47.302Z","updated_at":"2025-03-24T06:41:54.377Z","avatar_url":"https://github.com/UmActually.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Autopilot\n### Automatically schedule and join Zoom meetings on macOS\nBy Leonardo - UmActually\n\nAutopilot is kind of late to the party, but it's the solution for the power users who happen to be Zoom users as well. This program uses the [**PyAutoGUI**](https://pypi.org/project/PyAutoGUI/) Python library in order to automate keyboard and mouse input to join a Zoom class or meeting. When installed, you can invoke Autopilot in the **command line** with either `autopilot` or `ap`. The list of all the **arguments** can be found in this README, below.\n\nAutopilot features two primary use cases:\n1. Join a meeting **\"right now\"**.\n2. **Schedule** a meeting to join later and, until then, leave the program waiting. Your Mac can be asleep _(Not with the lid closed!)_ during this.\n\nUse case number two enables the user, for example, to leave Autopilot at night and wake up with one task less in their morning routine: Zoom's already open. No need to ask the team or class for the meeting ID this time.\n\n### User-defined schedule\n\nWhat really makes this a convenient tool is the possibility of building your own schedule for meetings that is automatically saved and repeated on a weekly basis. When you run `autopilot` with no arguments, the program will search and wait for the next meeting in your schedule. Or if you happen to be 10 minutes late to a past meeting, it will immediately join that instead.\n\n```commandline\n% autopilot\n\"Electromagnetism Exam\" found in schedule. Wake time: 7/5/2022 11:00:00\nAutopilot ready. You can now put your mac to sleep. To cancel, use ctrl+C.\nWaiting for meeting...\n```\n\nTo edit the schedule, run `autopilot -c`. This launches the Autopilot config tool. \n\n```commandline\nElectromagnetism Exam\n\nOn day(s): Tue\nTime: 11:00\nMeeting ID: 123456789\n\n[0] Go back, [1] Edit, [2] Delete\n\nChoice? (0-2)\n```\n\n### Passing meeting as arguments\n\nIf instead the user needs to join a meeting that is not in the schedule, the meeting **ID/link** and optionally the meeting **time** can be passed as **positional args** in any order.\n\n```commandline\n% ap 16:00 https://example.zoom.us/j/123456789\nWake time: 7/5/2022 16:00:00\nAutopilot ready. You can now put your mac to sleep. To cancel, use ctrl+C.\nWaiting for meeting...\n```\n\nIf the time argument is not passed, the meeting will be joined immediately.\n\n```commandline\n% ap https://example.zoom.us/j/123456789\nOpening zoom: 16:03:34\n```\n\n## Installation\n\nTo install Autopilot, download or clone this repository and use the **install.bash** script located at the base folder. Here is a step-by-step description:\n\n1. Once you have the Autopilot repository on your computer, open the **Terminal** application.\n\n2. **Change your directory** to the Autopilot base folder. For example, if the Autopilot folder is located in your downloads, run `cd Downloads/Autopilot` in the terminal.\n\n3. **Make the install script executable** by running the command `chmod u+x install.bash`.\n\n4. Run the **script** with `./install.bash`.\n\n```commandline\n$ cd Downloads/Autopilot\n$ chmod u+x install.bash\n$ ./install.bash\n\nInstalling PyAutoGUI (Python module for automation)\n\n...\n\nCopying source files to ~/Library/com.UmActually.Autopilot\n\nCreating autopilot \u0026 ap executables\n\nMoving executables to /usr/local/bin/\n\nPassword:\n\nAutopilot successfully installed. Reopen your terminal to start using it.\n```\n\n## First use\n\n### Permissions\n\nThere are some things to consider and prepare before using Autopilot. For starters, i'd _strongly recommend_ giving the program a **test run** before anything. You can always add the `-t` flag so the command runs in test mode, which stops the program right before the final \"join\" button in zoom is pressed. However, I recommend testing _while joining a real meeting_ as well. \n\nIn the first use, it is very likely that some functions of the program will throw a macOS confirmation dialog:\n- Using **PyAutoGUI** will prompt you to give the Terminal access to accessibility functions, unless access was already given.\n- Also, using **AppleScripts** will result in an initial confirmation prompt. \n\n### Preventing chaos\n\nYou must be **very careful** with this. Automating keyboard and mouse can lead to _some accidents_. **If you ever need to stop the program** while it's entering a meeting, immediately **move the mouse** cursor to one of the **corners** of the screen.\n\nIf instead you need to stop the program while it's **waiting** for a meeting, just use **control + C** in the terminal.\n\n### Window positioning\n\nIn the future, I plan to allow for image searching in order to press the buttons with any window location _(PyAutoGUI makes it very easy)_. But for now, it is necessary for the Zoom **main menu window** to be in the **top-left corner**. The program looks particularly for the orange in the \"New Meeting\" button, and then uses Command + J to open the join prompt.\n\n![Zoom window positioning](Resources/zoom.png \"Zoom window positioning\")\n\n### User password\n\nWhen Autopilot is invoked and will wait for a meeting, the **password** of the user will be prompted. This is necessary to in order to **schedule the display waking** (the `pmset` command needs sudo), and to **log in** once it's awake. You can _disable Ask password_ from the Autopilot config tool by running `autopilot -c`. This way, Autopilot will _no longer ask for the user password_. **However**, if you disable this, you'll need to make sure password isn't prompted when waking your mac: System Preferences \u003e Security \u0026 Privacy \u003e Require Password after sleep or screen saver begins (set to the max). You could also use the `caffeinate` command, but I personally wouldn't mess with preventing the computer's sleep.\n\n## Arguments \u0026 flags\n\n### Usage\n\n`autopilot [-flags] [time HH:MM] [meeting ID]`\n\n`ap [-flags] [time HH:MM] [meeting ID]`\n\n### Time and meeting ID\n\nThese are _optional_ positional argumets. Their order does not matter. If **neither** of them are given, the program will use the **schedule**. If only the **ID** argument is passed, zoom will be opened **immediately** with the given ID or link. It's worthy to note that **time** can be inputted in many ways: `HH:MM`, `H:MM`, or even `H:M` if we can call that a thing. However it _always needs to be written as **24-hour** time_.\n\n### Flags\n\n`-h`, `--help` Display the help message and exit.\n\n`-c`, `--config`, `-s`, `--settings` Change your Autopilot settings or schedule.\n\n`-l`, `--late` Late to class. Join the closest present/past meeting of your schedule, regardless of how much time has passed since. \n\n`-r`, `--recent` Join the most recent Autpilot-launched meeting.\n\n`-t`, `--test` For testing. Stops right before entering meeting.\n\n`-i`, `--input` Ask for time and ID, rather than using arguments or schedule.\n\n`-q`, `--quiet` Print nothing to the console.\n\n`-v`, `--version` Display program's version number and exit.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fumactually%2Fautopilot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fumactually%2Fautopilot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fumactually%2Fautopilot/lists"}