{"id":15047141,"url":"https://github.com/turicfr/cpps-pcl","last_synced_at":"2025-04-10T00:50:54.661Z","repository":{"id":53818633,"uuid":"94712537","full_name":"turicfr/CPPS-PCL","owner":"turicfr","description":"A Penguin Client Library for Club Penguin Private Servers written in Python","archived":false,"fork":false,"pushed_at":"2021-03-12T04:44:30.000Z","size":216,"stargazers_count":45,"open_issues_count":6,"forks_count":11,"subscribers_count":9,"default_branch":"master","last_synced_at":"2025-04-10T00:50:52.103Z","etag":null,"topics":["bot","club-penguin","club-penguin-private-server","cpps","pcl","penguin-client-library","python"],"latest_commit_sha":null,"homepage":"","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/turicfr.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":"2017-06-18T20:53:32.000Z","updated_at":"2025-03-04T23:52:14.000Z","dependencies_parsed_at":"2022-08-22T06:40:21.731Z","dependency_job_id":null,"html_url":"https://github.com/turicfr/CPPS-PCL","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/turicfr%2FCPPS-PCL","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/turicfr%2FCPPS-PCL/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/turicfr%2FCPPS-PCL/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/turicfr%2FCPPS-PCL/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/turicfr","download_url":"https://codeload.github.com/turicfr/CPPS-PCL/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248137999,"owners_count":21053775,"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":["bot","club-penguin","club-penguin-private-server","cpps","pcl","penguin-client-library","python"],"created_at":"2024-09-24T20:54:47.785Z","updated_at":"2025-04-10T00:50:54.636Z","avatar_url":"https://github.com/turicfr.png","language":"Python","readme":"# CPPS-PCL\r\n\r\nA Penguin Client Library for Club Penguin Private Servers written in Python.\r\n\r\n**Warning:** High ban risk!\r\n\r\n* [Introduction](#introduction)\r\n* [Requirements](#requirements)\r\n* [Usage](#usage)\r\n* [Supported CPPSs](#supported-cppss)\r\n* [Interactive Commands](#interactive-commands)\r\n* [FAQ](#faq)\r\n\r\n## Introduction\r\n\r\nThis PCL contains an API, alongside two CLI interactive modes:\r\n\r\n### 1. Single-Login\r\n\r\nA simple login with one penguin.\r\n\r\n### 2. Multi-Login\r\n\r\nA complex login with multiple penguins managed by a certain shape.\r\n\r\n## Requirements\r\n* Python 2.x\r\n* Internet connection\r\n* _For Club Penguin Rewritten_: [cefpython](https://github.com/cztomczak/cefpython) (can be installed with: `pip install cefpython3`)\r\n* _For Club Penguin Online_: [PyCrypto](https://pypi.org/project/pycrypto/) (can be installed with: `pip install pycrypto`, and [here](http://www.voidspace.org.uk/python/modules.shtml#pycrypto) for Windows)\r\n* _For Penguin Oasis_: [Requests](http://docs.python-requests.org/) (can be installed with: `pip install requests`)\r\n\r\n## Usage\r\n\r\n### API\r\nTODO\r\n\r\n### Single-Login\r\n1. Run `login.py`:\r\n```\r\npython login.py [-r {yes,no,ask}] [\u003ccpps\u003e] [\u003cserver\u003e] [\u003cusername\u003e]\r\n\r\nOptions:\r\n\t-r  Remember password in the future\r\n```\r\n2. Choose a server (if not already specified in the command line)\r\n3. Enter your username and password (if not already specified in the command line)\r\n4. Choose a server (if not already specified in the command line)\r\n5. Waddle on!\r\n\r\n### Multi-Login\r\n1. Run `multi.py`:\r\n```\r\npython multi.py [-r {yes,no,ask}] [\u003ccpps\u003e] [\u003cserver\u003e] [\u003cshape\u003e]\r\n\r\nOptions:\r\n\t-r  Remember password in the future\r\n```\r\n2. Choose a server (if not already specified in the command line)\r\n3. Choose a shape (if not already specified in the command line)\r\n4. Enter your usernames and passwords (as many as needed for the shape)\r\n5. Waddle on!\r\n\r\n## Supported CPPSs\r\nCurrently 14 different servers are supported, which can also be found in [`json/servers.json`](https://github.com/relrelb/CPPS-PCL/blob/master/json/servers.json):\r\n* `me` - [CPPS Me](http://cpps.me/)\r\n* `nation` - [Penguin Nation](http://penguins.coffee/)\r\n* `io` - [CPPS IO](https://cpps.io/)\r\n* `brasil` - [Club Penguin Brasil](https://www.clubpenguinbrasil.pw/)\r\n* `super` - [Super CPPS](https://supercpps.com/)\r\n* `cpo` - [Club Penguin Online](https://cponline.pw/)\r\n* `aventure pingouin` - [Aventure Pingouin](https://aventurepingouin.com/)\r\n* `cpr` - [Club Penguin Rewritten](https://cprewritten.net/)\r\n* `again` - [Club Penguin Again](https://www.clubpenguinagain.com/)\r\n* `oasis` - [Club Penguin Oasis](https://penguinoasis.com/)\r\n* `origins` - [Club Penguin Origins](https://clubpenguinorigins.com/)\r\n* `remastered` [Club Penguin Remastered](https://cpremastered.com/)\r\n* `rcpps` - [rCPPS](http://rcpps.me/)\r\n* `zone` - [Penguin Zone](http://penguinzone.me/)\r\n\r\nIf you want support for a new CPPS, please [open an issue](https://github.com/relrelb/CPPS-PCL/issues/new) regarding it.\r\n\r\n## Interactive Commands\r\n| Mode | Command | Parameters | Description |\r\n| ---- | ------- | ---------- | ----------- |\r\n| Both | `help` | _None_ | Get all available commands. |\r\n| Both | `help` | `command` | Get help about command named `command`. |\r\n| Single-Login only | `log` | _None_ | Toggle logging on/off. |\r\n| Single-Login only | `log` | `level` | Set logging level to `level`.\u003cbr\u003e`level` must be one of the following:\u003cul\u003e\u003cli\u003e`all` - Logs all messages below.\u003c/li\u003e\u003cli\u003e`debug` - Logs debug messages such as sent and received packets, and below.\u003c/li\u003e\u003cli\u003e`info` - Logs higher-level messages such as walking, talking etc., and below.\u003c/li\u003e\u003cli\u003e`warning` - Logs warning messages such as unhandled packets, and below.\u003c/li\u003e\u003cli\u003e`error` - Logs failure messages such as \"Could not add item\", and below (default).\u003c/li\u003e\u003cli\u003e`critical` - Logs fatal error messages such as \"Connection lost\".\u003c/li\u003e\u003c/ul\u003e |\r\n| Both | `internal` | _None_ | Get current internal room ID. |\r\n| Single-Login only | `id` | _None_ | Get current penguin ID. |\r\n| Both | `id` | `penguin_name...` | Get ID of penguin(s) named `penguin_name`. |\r\n| Both | `name` | _None_ | Get current penguin name. |\r\n| Both | `name` | `penguin_id...` | Get name of penguin(s) with ID `penguin_id`. |\r\n| Both | `room` | _None_ | Get current room name. |\r\n| Both | `room` | `room_id` | Go to room with ID `room_id`. |\r\n| Both | `room` | `room_name` | Go to room named `room_name`. |\r\n| Single-Login only | `igloo` | _None_ | Go to your igloo. |\r\n| Both | `igloo` | `penguin_id` | Go to igloo of penguin with ID `penguin_id`. |\r\n| Both | `igloo` | `penguin_name` | Go to igloo of penguin named `penguin_name`. |\r\n| Single-Login only | `penguins` | _None_ | Get all penguins in current room. |\r\n| Both | `color` | _None_ | Get current color item ID. |\r\n| Both | `color` | `item_id` | Equip color item with ID `item_id`. |\r\n| Both | `head` | _None_ | Get current head item ID. |\r\n| Both | `head` | `item_id` | Equip head item with ID `item_id`. |\r\n| Both | `face` | _None_ | Get current face item ID. |\r\n| Both | `face` | `item_id` | Equip face item with ID `item_id`. |\r\n| Both | `neck` | _None_ | Get current neck item ID. |\r\n| Both | `neck` | `item_id` | Equip neck item with ID `item_id`. |\r\n| Both | `body` | _None_ | Get current body item ID. |\r\n| Both | `body` | `item_id` | Equip body item with ID `item_id`. |\r\n| Both | `hand` | _None_ | Get current hand item ID. |\r\n| Both | `hand` | `item_id` | Equip hand item with ID `item_id`. |\r\n| Both | `feet` | _None_ | Get current feet item ID. |\r\n| Both | `feet` | `item_id` | Equip feet item with ID `item_id`. |\r\n| Both | `pin` | _None_ | Get current pin item ID. |\r\n| Both | `pin` | `item_id` | Equip pin item with ID `item_id`. |\r\n| Both | `background` | _None_ | Get current background item ID. |\r\n| Both | `background` | `item_id` | Equip background item with ID `item_id`. |\r\n| Single-Login only | `clothes` | _None_ | Get all currently equipped item IDs. |\r\n| Both | `clothes` | `penguin_id...` | Get all currently equipped item IDs of penguin(s) with ID `penguin_id`. |\r\n| Both | `clothes` | `penguin_name...` | Get all currently equipped item IDs of penguin(s) named `penguin_name`. |\r\n| Both | `inventory` | _None_ | Get current inventory. |\r\n| Single-Login only | `buddies` | _None_ | Get all current buddies. |\r\n| Single-Login only | `stamps` | _None_ | Get all currently earned stamps. |\r\n| Single-Login only | `stamps` | `penguin_id...` | Get all currently earned stamps by penguin(s) with ID `penguin_id`. |\r\n| Single-Login only | `stamps` | `penguin_name...` | Get all currently earned stamps by penguin(s) named `penguin_name`. |\r\n| Both | `walk` | `x` `y` | Walk to (`x`, `y`). |\r\n| Both | `dance` | _None_ | Dance. |\r\n| Both | `wave` | _None_ | Wave. |\r\n| Both | `sit` | _None_ | Sit in direction South. |\r\n| Both | `sit` | `direction` | Sit in direction `direction`.\u003cbr\u003e`direction` must be one of the following:\u003cul\u003e\u003cli\u003e`se` - South East.\u003c/li\u003e\u003cli\u003e`e` - East.\u003c/li\u003e\u003cli\u003e`ne` - North East.\u003c/li\u003e\u003cli\u003e`n` - North.\u003c/li\u003e\u003cli\u003e`nw` - North West.\u003c/li\u003e\u003cli\u003e`w` - West.\u003c/li\u003e\u003cli\u003e`sw` - South West.\u003c/li\u003e\u003cli\u003e`s` - South.\u003c/li\u003e\u003c/ul\u003e |\r\n| Both | `snowball` | `x` `y` | Throw a snowball to (`x`, `y`). |\r\n| Both | `say` | `message...` | Say `message`. |\r\n| Both | `joke` | `joke_id` | Tell joke with ID `joke_id`. |\r\n| Both | `emote` | `emote_id` | React emote with ID `emote_id`. |\r\n| Both | `postcard` | `penguin_id` `postcard_id` | Send to a penguin with ID `penguin_id` a postcard with ID `postcard_id`. |\r\n| Both | `postcard` | `penguin_name` `postcard_id` | Send to a penguin named `penguin_name` a postcard with ID `postcard_id`. |\r\n| Both | `buy` | `item_id...` | Buy item(s) with ID `item_id`. |\r\n| Both | `ai` | `item_id...` | Buy item(s) with ID `item_id`. |\r\n| Both | `coins` | _None_ | Get current coins. |\r\n| Both | `coins` | `amount` | Earn `amount` coins. |\r\n| Both | `ac` | `amount` | Earn `amount` coins. |\r\n| Both | `stamp` | `stamp_id...` | Earn stamp(s) with ID `stamp_id`. |\r\n| Both | `add_igloo` | `igloo_id...` | Buy igloo(s) with ID `igloo_id`. |\r\n| Both | `add_furniture` | `furniture_id...` | Buy furniture(s) with ID `furniture_id`. |\r\n| Both | `music` | `music_id` | Set current igloo music to `music_id`. |\r\n| Both | `buddy` | `penguin_id...` | Send a buddy request to penguin(s) with ID `penguin_id`. |\r\n| Both | `buddy` | `penguin_name...` | Send a buddy request to penguin(s) named `penguin_name`. |\r\n| Single-Login only | `find` | `penguin_id...` | Find room of buddy/buddies with ID `penguin_id`. |\r\n| Single-Login only | `find` | `penguin_name...` | Find room of buddy/buddies named `penguin_name`. |\r\n| Single-Login only | `follow` | _None_ | Get currently followed penguin. |\r\n| Both | `follow` | `penguin_id` | Follow a penguin with ID `penguin_id`. |\r\n| Both | `follow` | `penguin_name` | Follow a penguin named `penguin_name`. |\r\n| Both | `follow` | `penguin_id` `dx` `dy` | Follow a penguin with ID `penguin_id` with offset (`dx`, `dy`). |\r\n| Both | `follow` | `penguin_name` `dx` `dy` | Follow a penguin named `penguin_name` with offset (`dx`, `dy`). |\r\n| Both | `unfollow` | _None_ | Stop following. |\r\n| Both | `logout` | _None_ | Logout. |\r\n| Both | `exit` | _None_ | Logout. |\r\n| Both | `quit` | _None_ | Logout. |\r\n\r\n## FAQ\r\n\r\n### I double-clicked `login.py` and a command prompt appeared and then closed, what should I do?\r\n* If the command prompt appeared for a moment and then closed, then you are probably running `login.py` with Python 3. Consider installing Python 2, or if you have already installed it, right-click `login.py` and open it with Python 2 using the \"Open With...\" option.\r\n* If the command prompt closed after taking user input, then an unexpected error occured during the login process. Try running it again in `cmd.exe` in order to see what happened, and if it looks like a problem, please [open an issue](https://github.com/relrelb/CPPS-PCL/issues/new) regarding it.\r\n\r\n### Can I add all items?\r\nSure, you can accomplish that by writing a custom script using the [API](#api). An example can be found in the answer at [Issue #3](https://github.com/relrelb/CPPS-PCL/issues/3#issuecomment-345218486).\r\n\r\n### Can I login to a CPPS that is not listed above?\r\nAbsolutely, you can add more CPPSs yourself by editing [`json/servers.json`](https://github.com/relrelb/CPPS-PCL/blob/master/json/servers.json).\r\n\r\n### Can I add more shapes to Multi-Login?\r\nOf course, you can define more shapes by editing [`json/shapes.json`](https://github.com/relrelb/CPPS-PCL/blob/master/json/shapes.json).\r\n\r\n### Is autocompletion also available in Windows?\r\nYes, in order to get that you need [PyReadline](https://pypi.org/project/pyreadline/) (can be installed with:  `pip install pyreadline`).\r\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fturicfr%2Fcpps-pcl","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fturicfr%2Fcpps-pcl","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fturicfr%2Fcpps-pcl/lists"}