{"id":24280678,"url":"https://github.com/kneasle/wheatley","last_synced_at":"2025-08-13T18:09:20.664Z","repository":{"id":37646861,"uuid":"271661584","full_name":"kneasle/wheatley","owner":"kneasle","description":"An AI for Ringing Room that can ring any number of bells to increase the scope of practices.","archived":false,"fork":false,"pushed_at":"2024-02-23T14:41:33.000Z","size":550,"stargazers_count":15,"open_issues_count":30,"forks_count":13,"subscribers_count":7,"default_branch":"master","last_synced_at":"2025-07-29T13:49:12.729Z","etag":null,"topics":["ai","bellringing","bot","python","python3","ringing-room"],"latest_commit_sha":null,"homepage":"https://pypi.org/project/wheatley/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kneasle.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGE_LOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-06-11T22:53:23.000Z","updated_at":"2023-11-17T11:16:34.000Z","dependencies_parsed_at":"2023-01-29T01:15:16.932Z","dependency_job_id":null,"html_url":"https://github.com/kneasle/wheatley","commit_stats":null,"previous_names":["kneasle/ringing-room-bot"],"tags_count":20,"template":false,"template_full_name":null,"purl":"pkg:github/kneasle/wheatley","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kneasle%2Fwheatley","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kneasle%2Fwheatley/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kneasle%2Fwheatley/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kneasle%2Fwheatley/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kneasle","download_url":"https://codeload.github.com/kneasle/wheatley/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kneasle%2Fwheatley/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":270287057,"owners_count":24558615,"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","status":"online","status_checked_at":"2025-08-13T02:00:09.904Z","response_time":66,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["ai","bellringing","bot","python","python3","ringing-room"],"created_at":"2025-01-16T02:25:22.980Z","updated_at":"2025-08-13T18:09:20.610Z","avatar_url":"https://github.com/kneasle.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Wheatley\n\n[![PyPI version](https://badge.fury.io/py/wheatley.svg)](https://badge.fury.io/py/wheatley)\n![Tests and Linting](https://github.com/Kneasle/wheatley/workflows/Testing%2FLinting%2FFuzzing/badge.svg)\n\nA bot for [Ringing Room](https://ringingroom.com/) that can fill in any set of bells to increase the\nscope of potential practices, designed to be a **'ninja helper with no ego'**.\n\nIf you just want to use Wheatley for normal ringing without caring about how it works, then check\nout how to use Wheatley directly [inside Ringing Room](https://ringingroom.com/help#wheatley) - no\ninstallation required, just a flick of a switch.  If you want more control than the Ringing Room\ninterface provides or are interested in how Wheatley works, then this is the place to go.  This\nrepository contains Wheatley's source code, and documentation of the 'classic' command line version.\n\n## Contributing\n\nContributions are very welcome!  To keep this readme short, all contribution info is in\n[CONTRIBUTING.md](CONTRIBUTING.md).  If you have any issues/suggestions, either [make an\nissue](https://github.com/kneasle/wheatley/issues/new), or drop me a message [on\nFacebook](https://www.facebook.com/kneasle.wh.71).\n\n## Quickstart\n\n_(This quickstart refers to the command-line Wheatley, not the integrated version)_.  Also, if\nanything here doesn't work or is confusing, please let us know.  For help with what parameters\nWheatley has and what they do, run `wheatley --help`.\n\n### Step 1: Install Python\n\nInstallation is very platform specific, so I've split this by OS.\n\n#### Windows\n\n1. Download the latest version of Python from\n   [python.org](https://www.python.org/downloads/windows/) - the first link should be to the latest\n   build of Python 3. At the bottom of the linked page is a list of downloads - most likely you need\n   \"Windows installer (64-bit)\" (the recommended option).\n2. When the file has downloaded, run it.  Before starting the installation, **tick the \"Add to\n   PATH\" option** (this will make your life way easier later on).  Start the install, and then wait\n   for it to complete.\n3. In order to run Wheatley, you'll need to open a 'command prompt'.  To do this, press the START\n   button in Windows, type 'cmd' then click on the `Command Prompt` application.  This creates a\n   black window, into which you can type and then run commands (including Wheatley).\n4. Test Python by typing `py --version` and then pressing enter.  If all is well, this will print a\n   version string - otherwise something has gone wrong.\n\n#### MacOS\n\nInstructions should be [here](https://docs.python-guide.org/starting/install3/osx/).\n\n#### Linux\n\nAlmost all Linux distros come with Python installed, so this step can probably be skipped.\n\n### Step 2: Install Wheatley\n\nOnce Python is installed, installing Wheatley should be done through Python's package manager `pip`.\nThe exact commands vary from system to system (and I can't keep track of them all), but one of the\nfollowing should work:\n\n```bash\n# Should work on Windows\npy -m pip install --upgrade wheatley\n# Should work on MacOS and Linux\npython3 -m pip install --upgrade wheatley\n```\n\n### Step 3: Run Wheatley\n\n**NOTE:** The name of the Wheatley command will sometimes vary.  If you're getting errors like\n'wheatley not found', then try replacing the `wheatley` prefix with `py -m wheatley` (Windows) or\n`python3 -m wheatley` (MacOS/Linux).  So therefore, a complete command would look like:\n```\npy -m wheatley [ID NUMBER] --method \"Plain Bob Major\"\n# or \npython3 -m wheatley [ID NUMBER] --method \"Plain Bob Major\"\n```\n\n## Examples\n\n*   Join a `ringingroom.com` tower with (9 digit) ID `[ID NUMBER]` and ring Plain Bob Major (tower\n    bell style – wait for `Go` and `That's all`):\n    ```bash\n    wheatley [ID NUMBER] --method \"Plain Bob Major\"\n    ```\n\n*   Ring 'up, down and in' rather than waiting for 'go':\n    ```bash\n    wheatley [ID NUMBER] --use-up-down-in --method [METHOD TITLE]\n    # or\n    wheatley [ID NUMBER] -u --method [METHOD TITLE]\n    ```\n\n*   Ring full handbell style, i.e. 'up, down and in' and standing at rounds (`-H` is\n    equivalent to `-us`):\n    ```bash\n    wheatley [ID NUMBER] --use-up-down-in --stop-at-rounds --method [METHOD TITLE]\n    # or\n    wheatley [ID NUMBER] -us --method [METHOD TITLE]\n    # or\n    wheatley [ID NUMBER] -H --method [METHOD TITLE]\n    ```\n\n*   Join a server other than `ringingroom.com`:\n\n    \u003c!--- doctest-ignore --\u003e\n    ```bash\n    wheatley [ID NUMBER] --url otherwebsite.com --method [METHOD TITLE]\n    ```\n\n*   Ring rows and make calls taken from a composition from [complib.org](http://complib.org/), in this\n    case https://complib.org/composition/65034:\n    ```bash\n    wheatley [ID NUMBER] --comp 65034\n    ```\n*   Ring rows but don't send the calls to Ringing Room taken from a composition from [complib.org](http://complib.org/), in this\n    case https://complib.org/composition/65034:\n    ```bash\n    wheatley [ID NUMBER] --comp 65034 --no-calls\n    ```\n\n*   Ring compositions with **substituted methods** by copying the id and query string or full url from [complib.org](http://complib.org/)):\n    ```bash\n     wheatley [ID NUMBER] --comp 68549?substitutedmethodid=28000\n     # or \n     wheatley [ID NUMBER] --comp https://complib.org/composition/68549?substitutedmethodid=28000\n    ```\n*   Ring **private** compositions by copying the share link from [complib.org](http://complib.org/):\n    ```bash\n     wheatley [ID NUMBER] --comp 51155?accessKey=9e1fcd2b11435552cf236be93c7ff73058870995\n     # or\n     wheatley [ID NUMBER] --comp https://complib.org/composition/51155?accessKey=9e1fcd2b11435552cf236be93c7ff73058870995\n    ```\n* Combine method substitution and private composition\n    \u003c!--- doctest-ignore --\u003e\n    ```bash\n     wheatley [ID NUMBER] --comp 51155?substitutedmethodid=27600\u0026accessKey=9e1fcd2b11435552cf236be93c7ff73058870995\n    ```\n\n*   Ring rows specified by place notation, in this case Plain Bob Minor:\n    ```bash\n    wheatley [ID NUMBER] --place-notation 6:x16x16x16,12\n    ```\n\n*   Ring at a peal speed of 3 hours 30 minutes (i.e. quite slowly):\n    ```bash\n    wheatley [ID NUMBER] --method [METHOD TITLE] --peal-speed 3h30\n    # or\n    wheatley [ID NUMBER] --method [METHOD TITLE] -S 3h30\n    ```\n\n*   Make Wheatley push on with the rhythm rather than waiting for people to ring.\n    ```bash\n    wheatley [ID NUMBER] --method [METHOD TITLE] --keep-going\n    # or\n    wheatley [ID NUMBER] --method [METHOD TITLE] -k\n    ```\n\n*   Completely ignore other users' changes in rhythm (useful if he's ringing most of\n    the bells and you don't want him to randomly change speed when you make mistakes):\n    ```bash\n    wheatley [ID NUMBER] --method [METHOD TITLE] --inertia 1.0\n    # or\n    wheatley [ID NUMBER] --method [METHOD TITLE] -I 1.0\n    ```\n*   Start from a different row\n    ``` bash\n    wheatley [ID NUMBER] --method [METHOD TITLE] --start-row 13572468\n    ```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkneasle%2Fwheatley","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkneasle%2Fwheatley","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkneasle%2Fwheatley/lists"}