{"id":20747114,"url":"https://github.com/cactoes/lcts","last_synced_at":"2025-08-30T15:14:54.271Z","repository":{"id":44369520,"uuid":"505223743","full_name":"cactoes/lcts","owner":"cactoes","description":"A feature rich League of Legends client written in TypeScript, scripting \u0026 more","archived":false,"fork":false,"pushed_at":"2022-09-06T08:20:39.000Z","size":15466,"stargazers_count":6,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-03-30T09:11:31.243Z","etag":null,"topics":["automation","electron","javascript","league-client","league-client-api","league-of-legends","typescript"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cactoes.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-06-19T21:32:16.000Z","updated_at":"2024-06-02T09:00:12.000Z","dependencies_parsed_at":"2022-08-12T11:10:16.154Z","dependency_job_id":null,"html_url":"https://github.com/cactoes/lcts","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cactoes%2Flcts","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cactoes%2Flcts/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cactoes%2Flcts/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cactoes%2Flcts/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cactoes","download_url":"https://codeload.github.com/cactoes/lcts/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251303987,"owners_count":21567783,"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":["automation","electron","javascript","league-client","league-client-api","league-of-legends","typescript"],"created_at":"2024-11-17T08:11:29.977Z","updated_at":"2025-04-28T11:27:50.749Z","avatar_url":"https://github.com/cactoes.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# LCTS (League Client TypeScript)\nA feature rich league client written in TypeScript, with basic scripting \u0026 more \n\n## Installing the client\nJust download the client from the [releases](https://github.com/cactoes/lcts/releases) tab \u0026 run 'lcts.exe'\n\n## A clean UI\nA stylish clean ui, for ease of use\n\n![ui](images/ui_new.png)\n\n## An x88 style overlay\nYour game has to be in borderless (or windowed) to work, (can be turned off)\n\n![overlay](images/overlay_new.png)\n\n## Features\n- automatically\n  - accept the match\n  - pick\n    - a champion to play\n    - a champion to ban\n  - set runes (runes do change you might not be able to see the changes when editing)\n  - set summoner spells\n  - check if you got the lane you want\n- [scripting](#scripting)\n- toggleable overlay\n- [config](#config)\n\n## Config\nThe config is located in [resources/data/config.json](resources/data/config.json), here you can customize everything\n### Structure\n```javascript\n{\n  \"auto\": {\n    \"acceptMatch\": true, // automatically accepting a match\n    \"champion\": {\n      \"set\": true, // \"hovering\" of your pick/ban\n      \"lock\": true, // lock-in the selected champion\n      \"ban\": true, // ban the selected champion\n      \"checkLane\": true, // check if the lane you got was the lane you chose in the lobby (primary lane only), for picking/banning\n      \"defaultLane\": \"utility\", // if you didn't choose a lane this will be the lane it uses instead\n      \"lanePick\": {\n        \"top\": [\n          \"Gwen\" // the list of champion you want to pick on the top lane\n        ],\n        \"jungle\": [\n          \"Lilia\" // the list of champion you want to pick in the jungle\n        ],\n        \"middle\": [\n          \"Irelia\" // the list of champion you want to pick on mid\n        ],\n        \"bottom\": [\n          \"Caitlyn\" // the list of champion you want to pick as the adc\n        ],\n        \"utility\": [\n          \"Renata\" // the list of champion you want to pick as the support\n        ]\n      },\n      \"laneBan\": {\n        \"top\": [\n          \"Garen\" // the list of champion you want to ban on the top lane\n        ],\n        \"jungle\": [\n          \"Belveth\" // the list of champion you want to ban in the jungle\n        ],\n        \"middle\": [\n          \"Akali\" // the list of champion you want to ban on mid\n        ],\n        \"bottom\": [\n          \"Ezreal\" // the list of champion you want to ban as the adc\n        ],\n        \"utility\": [\n          \"Leona\" // the list of champion you want to ban as the support\n        ]\n      }\n    },\n    \"runes\": {\n      \"set\": true, // automatically set the runes of the locked in champion\n      \"prefix\": \"[u.gg]\" // change the runes that start with this\n    },\n    \"spells\": {\n      \"set\": true, // automatically set you summoner spells\n      \"defaultLane\": \"utility\", // if you didn't choose a lane this will be the lane it uses instead\n      \"lane\": {\n        \"top\": [\n          \"Teleport\", // *D*\n          \"Flash\" // *F*\n        ],\n        \"jungle\": [\n          \"Smite\", // *D*\n          \"Flash\" // *F*\n        ],\n        \"middle\": [\n          \"Ignite\", // *D*\n          \"Flash\" // *F*\n        ],\n        \"bottom\": [\n          \"Heal\", // *D*\n          \"Flash\" // *F*\n        ],\n        \"utility\": [\n          \"Ignite\", // *D*\n          \"Flash\" // *F*\n        ]\n      }\n    }\n  },\n  \"misc\": {\n    \"status\": {\n      \"text\": \"default-status\", // what to set the status to\n      \"set\": false // auto set it\n    },\n    \"rank\": {\n      \"tier\": \"diamond\", // for storing your tier so you can use it in a script\n      \"rank\": \"III\", // for storing your rank so you can use it in a script\n      \"set\": false // auto set it\n    },\n    \"userScript\": true // make use of the user made script (script.js)\n  },\n  \"overlay\": true // enable in game overlay\n}\n```\n\n## Scripting\nLCTS doesn't have any scripts, it only support \"scripts\" for automating the client\n\n### User made scripts\nThe client allows for function scripting (within LCTS itself), the script is located in [resources/data/script.js](resources/data/script.js). \u003cbr /\u003e\n- The script has to be called \"**script.js**\" so the client can find it. \u003cbr /\u003e\n\nThere are some default scripts available just rename the one you want to \"**script.js**\", and restart the LCTS to run them.\n- The default script are located in the \"**examples**\" folder\n\n### Structure\n```javascript\nclass LCScript {\n  // when the game launches\n  async onUserConnect(user, lobby, config) {\n    // your code goes here\n    return true\n  }\n\n  // when user joins a party\n  async onPartyJoin(user, lobby, config) {\n    // your code goes here\n    return true\n  }\n}\n```\n\n### Methods\nMethods are called like this\n```Javascript\nawait user.setStatus(\"example\")\n```\nSome functions return data, they look like this:\n- [IUser](src/types.d.ts#L199) \n- [ILobby](src/types.d.ts#L289)\n\n#### Methods in *user*\n```TypeScript\nasync function setStatus(status: string): Promise\u003cIUser\u003e\nasync function setRank(tier: string, rank: string): Promise\u003cIUser\u003e\n```\n#### Methods in *lobby*\n```TypeScript\nasync function setLanes(first: string, second: string): Promise\u003cvoid\u003e\nasync function create(queueId: number): Promise\u003cILobby\u003e\nasync function leave(): Promise\u003cvoid\u003e\nasync function setPartyType(type: string): Promise\u003cvoid\u003e\nasync function startSearch(): Promise\u003cvoid\u003e\nasync function stopSearch(): Promise\u003cvoid\u003e\n```\n\n## Prerequisites\nIf you want to run the client from source make sure you have:\n- TypeScript - [Download \u0026 Install TypeScript](https://www.typescriptlang.org/download). Used for compiling and the TypeScript enviroment\n```\n$ npm install -g typescript\n```\n\n## Dependencies\n- electron-overlay-window@2.0.1\n- lcinterface@4.1.2\n- node-fetch@2.6.1\n- openurl@1.1.1\n- puppeteer-core@16.1.0\n- puppeteer-in-electron@3.0.5\n\n## DevDependencies\n- electron@19.0.5\n- electron-builder@23.1.0\n\n## Installing the client from source\n```\n$ git clone https://github.com/cactoes/lcts.git\n$ cd lcts\n$ npm install\n```\n\n## Running the client from source\nRun the client directly from source\n```\n$ npm run test\n```\n\n## Compiling the client\nCompile / build the client from source\n```\n$ npm run package:win\n```\n\n## Logo\nThe logo isn't mine it was made by [surgingpink](https://www.deviantart.com/surgingpink)\n\n## Contributing \n[Contributing](CONTRIBUTING.md)\n\n## License\n[GNU GPLv3](LICENSE.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcactoes%2Flcts","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcactoes%2Flcts","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcactoes%2Flcts/lists"}