{"id":37073697,"url":"https://github.com/seanwlk/wfaccountmanager","last_synced_at":"2026-01-14T08:39:10.904Z","repository":{"id":55490035,"uuid":"276980146","full_name":"seanwlk/wfaccountmanager","owner":"seanwlk","description":"Simple class that allows the usage of Warface account with a session that takes care of the login and offers useful methods.","archived":false,"fork":false,"pushed_at":"2023-01-25T19:24:54.000Z","size":45,"stargazers_count":7,"open_issues_count":4,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-08-10T23:15:51.729Z","etag":null,"topics":["api-wrapper","warface"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/seanwlk.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-07-03T20:14:36.000Z","updated_at":"2024-05-30T18:02:42.000Z","dependencies_parsed_at":"2023-02-14T10:35:25.297Z","dependency_job_id":null,"html_url":"https://github.com/seanwlk/wfaccountmanager","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/seanwlk/wfaccountmanager","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/seanwlk%2Fwfaccountmanager","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/seanwlk%2Fwfaccountmanager/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/seanwlk%2Fwfaccountmanager/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/seanwlk%2Fwfaccountmanager/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/seanwlk","download_url":"https://codeload.github.com/seanwlk/wfaccountmanager/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/seanwlk%2Fwfaccountmanager/sbom","scorecard":{"id":808154,"data":{"date":"2025-08-11","repo":{"name":"github.com/seanwlk/wfaccountmanager","commit":"a1e6993c4d3d0f53760948561c234dc6c4765e94"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.5,"checks":[{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Code-Review","score":0,"reason":"Found 2/21 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Pinned-Dependencies","score":2,"reason":"dependency not pinned by hash detected -- score normalized to 2","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/python-publish.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/seanwlk/wfaccountmanager/python-publish.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/python-publish.yml:26: update your workflow using https://app.stepsecurity.io/secureworkflow/seanwlk/wfaccountmanager/python-publish.yml/master?enable=pin","Warn: pipCommand not pinned by hash: .github/workflows/python-publish.yml:31","Warn: pipCommand not pinned by hash: .github/workflows/python-publish.yml:32","Info:   0 out of   2 GitHub-owned GitHubAction dependencies pinned","Info:   1 out of   1 third-party GitHubAction dependencies pinned","Info:   0 out of   2 pipCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Token-Permissions","score":10,"reason":"GitHub workflow tokens follow principle of least privilege","details":["Info: topLevel 'contents' permission set to 'read': .github/workflows/python-publish.yml:16","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: GNU General Public License v2.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 2 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-23T12:22:08.487Z","repository_id":55490035,"created_at":"2025-08-23T12:22:08.487Z","updated_at":"2025-08-23T12:22:08.487Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28414670,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T08:31:27.429Z","status":"ssl_error","status_checked_at":"2026-01-14T08:31:19.098Z","response_time":107,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["api-wrapper","warface"],"created_at":"2026-01-14T08:39:10.248Z","updated_at":"2026-01-14T08:39:10.890Z","avatar_url":"https://github.com/seanwlk.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# WFAccountManager\r\n\r\nSimple class that allows the usage of Warface account with a session that takes care of the login and offers useful methods.\r\n\r\n## Requirements\r\n- `steam` library\r\n- `lxml` library\r\n- Python \u003e= 3.6\r\n\r\n## Installation\r\n\r\nUse the package manager [pip](https://pip.pypa.io/en/stable/) to install wfaccountmanager.\r\n\r\n```bash\r\npip install wfaccountmanager\r\npip install -U git+https://github.com/seanwlk/wfaccountmanager # Live updated library\r\n```\r\n\r\n## Usage\r\n\r\nUpon object declaration you have to specify the region you will use tha account from. At the current time the only one supported are `west`,`steam`,`russia`.\r\nThen you can login with the credentials. You can also specify `lang` parameter which by default is `en`.\r\n\r\n```python\r\nfrom wfaccountmanager import WFAccountManager\r\n\r\nwf = WFAccountManager(\"west\")\r\nwf.login(account,password)\r\n```\r\n### Methods\r\n\r\n- \u003c\u003e.login()\r\n\r\nThis method has different behaviour if you are using steam instead of west or russia.\r\n```python\r\n# For west and russia\r\nwf.login(account,password) # Returns content from /minigames/user/info\r\n# Example output:\r\n{\r\n\"state\": \"Success\",\r\n\"data\": {\r\n    \"state\": \"auth\",\r\n    \"user_id\": 9999999,\r\n    \"email\": \"foo@bar.com\",\r\n    \"username\": \"foobar\",\r\n    \"token\": \"ioeqwinj5409i23490jkljfdslj2\",\r\n    \"project\": \"wf\",\r\n    \"territory\": \"pc\"\r\n    }\r\n}\r\n```\r\nSteam `login()` method will return a status code requiring you to put a 2FA code. Here's how to:\r\n```python\r\nmyLogin = wf.login(\"foobar\",\"bestSniperEU\") # Steam account\r\n# {\"status\" : 0, \"message\" : \"No 2FA required. Check user session\"} this will happen to users with no security setup\r\n# {\"status\" : 1, \"message\" : \"Captcha Required\", \"url\" : \"capthca URL to resolve\"}\r\n# {\"status\" : 2, \"message\" : \"Email code Required\"}\r\n# {\"status\" : 3, \"message\" : \"Steamguard 2FA Required\"}\r\n\r\nwf.postSteam2FA(\"ASB1G\") # Setting the 2FA gotten on the app, via mail or captcha\r\n# returns /minigames/user/info\r\n```\r\n\r\nWhen using steam with the `login()` method the returned data will contain a `steam` key with inside the `steamID` the `auth_token` and `steamguard_token` which will allow you to login in a future session without user and password but by passing those parameters only.\r\nNote that if the Oauth2 keys are expired, the method will implicitly return an empty session.\r\n```python\r\nwf.login(steamID=\"Your Steam OPENID\",auth_token=token,steamguard_token=steamguard)\r\n```\r\n- \u003c\u003e.user()\r\n\r\nReturns the live data from /minigames/user/info useful to check if session expired for some reason.\r\n```python\r\nwf.user() # Returns content from /minigames/user/info\r\n# Example output:\r\n{\r\n\"state\": \"Success\",\r\n\"data\": {\r\n    \"state\": \"auth\",\r\n    \"user_id\": 9999999,\r\n    \"email\": \"foo@bar.com\",\r\n    \"username\": \"foobar\",\r\n    \"token\": \"ioeqwinj5409i23490jkljfdslj2\",\r\n    \"project\": \"wf\",\r\n    \"territory\": \"pc\"\r\n    }\r\n}\r\n```\r\n- \u003c\u003e.get(url,headers=None,data=None,isJson=True)\r\n\r\nWith this you can HTTP GET custom URLs using the Warface session. You can pass headers and data which by default are not set.\r\nFurthermore you can return the output as plain text if you set `isJson=False` which is true by default.\r\nThis method also includes a hidden shortcut that allows you to pass an URL string contraining `$baseurl$` and it will replace it with the actual instance baseUrl\r\n```python\r\nwf.get(\"https://pc.warface.com/minigames/battlepass/task/all\")\r\nwf.get(\"https://$baseurl$/minigames/battlepass/task/all\")\r\nwf.get(\"https://pc.warface.com/en/profile/\", isJson=False)\r\n```\r\n- \u003c\u003e.post(url,headers=None,data=None,isJson=True)\r\n\r\nWith this you can HTTP POST custom URLs using the Warface session. You can pass headers and data which by default are not set.\r\nFurthermore you can return the output as plain text if you set `isJson=False` which is true by default.\r\nThis method also includes a hidden shortcut that allows you to pass an URL string contraining `$baseurl$` and it will replace it with the actual instance baseUrl\r\n```python\r\nwf.post(\"https://pc.warface.com/minigames/battlepass/box/open\")\r\nwf.post(\"https://$baseurl$/minigames/battlepass/box/open\")\r\n```\r\n\r\n## Managers\r\nWith version 0.0.3 the service manager sub classes were introduced. This is a cleaner way of using the library and it allows the user to call specific methods for a particular service instead of having way too many methods on the main class.\r\n\r\n### \u003c\u003e.myitems\r\nMy Items manager that allows you to see the available game items for you to transfer and the available game profiles\r\n- \u003c\u003e.myitems.profiles\r\n\r\nStatic attribute that gives you the available profiles and shardIds for your account (Only available if `\u003c\u003e.myitems.getUserProfiles()` was called at least once during runtime, else returns an empty list)\r\n```python\r\n# Example output\r\n[\r\n  {\r\n    \"username\": \"foobar\",\r\n    \"level\": 93,\r\n    \"shard\": \"EU\",\r\n    \"shardId\": 1,\r\n    \"profileId\": \"11111\"\r\n  },\r\n  {\r\n    \"username\": \"foofoo\",\r\n    \"level\": 70,\r\n    \"shard\": \"EU\",\r\n    \"shardId\": 1,\r\n    \"profileId\": \"2323232323\"\r\n  }\r\n]\r\n```\r\n- \u003c\u003e.myitems.getUserProfiles()\r\n\r\nReturns the same as the static attribute that gives you the available profiles and refreshes its cache\r\n```python\r\n# Example output\r\n[\r\n  {\r\n    \"username\": \"foobar\",\r\n    \"level\": 93,\r\n    \"shard\": \"EU\",\r\n    \"shardId\": 1,\r\n    \"profileId\": \"11111\"\r\n  },\r\n  {\r\n    \"username\": \"foofoo\",\r\n    \"level\": 70,\r\n    \"shard\": \"EU\",\r\n    \"shardId\": 1,\r\n    \"profileId\": \"2323232323\"\r\n  }\r\n]\r\n```\r\n- \u003c\u003e.myitems.list()\r\n\r\nReturns the list of items you have available for transfer\r\n```python\r\n# Example output, may differ based on item type but the base schema stays the same\r\n[\r\n  {\r\n    \"cartid\":\"1639063\",\r\n    \"uid\":\"14345042\",\r\n    \"itemid\":\"1545\",\r\n    \"itemcount\":\"1\",\r\n    \"last_update\":\"1499935454\",\r\n    \"promoid\":\"156\",\r\n    \"tid\":\"0\",\r\n    \"iteminfo\":{\r\n      \"id\":1545,\r\n      \"title\":\"Walther P99\",\r\n      \"itemid\":\"pt31_shop\",\r\n      \"count\":\"1\",\r\n      \"duration\":\"7\",\r\n      \"duration_type\":\"day\",\r\n      \"consumable\":\"0\",\r\n      \"permanent\":\"0\",\r\n      \"regular\":\"\",\r\n      \"priority\":\"\",\r\n      \"tag\":\"\",\r\n      \"type\":\"item\",\r\n      \"limit\":\"0\"\r\n    }\r\n  },\r\n  {\r\n    \"cartid\":\"1659295\",\r\n    \"uid\":\"14345042\",\r\n    \"itemid\":\"1557\",\r\n    \"itemcount\":\"1\",\r\n    \"last_update\":\"1499935454\",\r\n    \"promoid\":\"156\",\r\n    \"tid\":\"0\",\r\n    \"iteminfo\":{\r\n      \"id\":1557,\r\n      \"title\":\"Warlord Boots\",\r\n      \"itemid\":\"shared_shoes_09\",\r\n      \"count\":\"1\",\r\n      \"duration\":\"7\",\r\n      \"duration_type\":\"day\",\r\n      \"consumable\":\"0\",\r\n      \"permanent\":\"0\",\r\n      \"regular\":\"\",\r\n      \"priority\":\"\",\r\n      \"tag\":\"\",\r\n      \"type\":\"item\",\r\n      \"limit\":\"0\"\r\n    }\r\n  },\r\n  ...\r\n}\r\n```\r\n- \u003c\u003e.myitems.history()\r\n\r\nReturns the list of items you transferred in-game\r\n```python\r\n# Example output\r\n[\r\n  {\r\n    \"cartid\":\"29002997\",\r\n    \"promoid\":\"313\",\r\n    \"uid\":\"9999999\",\r\n    \"itemid\":\"8447\",\r\n    \"itemcount\":\"1\",\r\n    \"shardid\":\"1\",\r\n    \"status\":100,\r\n    \"last_update\":\"1634142775\",\r\n    \"details\":\"\",\r\n    \"charid\":\"23232323\",\r\n    \"send_status\":\"OK\",\r\n    \"send_ts\":\"1639218962\",\r\n    \"promo_name\":\"Promo \\\"Origins\\\"\",\r\n    \"iteminfo\":{\r\n      \"title\":\"Armageddon Engineer Helmet\",\r\n      \"itemid\":\"engineer_helmet_armagedon\",\r\n      \"count\":1,\r\n      \"duration\":15,\r\n      \"duration_type\":\"day\",\r\n      \"consumable\":0,\r\n      \"permanent\":0,\r\n      \"regular\":0,\r\n      \"type\":\"item\",\r\n      \"title_fr\":\"Casque Armageddon pour Ingénieur\",\r\n      \"title_de\":\"Ingenieurshelm Armageddon\",\r\n      \"title_pl\":\"Hełm inżyniera Armageddon\",\r\n      \"title_es\":\"Casco de ingeniero Armagedón\",\r\n      \"title_tr\":\"Kıyamet Mühendis Miğferi\",\r\n      \"title_pt\":\"Capacete de Engenheiro Armagedom\",\r\n      \"title_ko\":\"아마게돈 엔지니어 헬멧\",\r\n      \"title_cn\":\"末日工程师头盔\",\r\n      \"title_jp\":\"エンジニアヘルメット「アルマゲドン」\",\r\n      \"id\":8447\r\n    },\r\n    \"charname\":\"foobar\"\r\n  },\r\n  {\r\n    \"cartid\":\"28471329\",\r\n    \"promoid\":\"2\",\r\n    \"uid\":\"9999999\",\r\n    \"itemid\":\"7613\",\r\n    \"itemcount\":\"1\",\r\n    \"shardid\":\"1\",\r\n    \"status\":100,\r\n    \"last_update\":\"1626084624\",\r\n    \"details\":\"\",\r\n    \"charid\":\"11111\",\r\n    \"send_status\":\"OK\",\r\n    \"send_ts\":\"1628322603\",\r\n    \"promo_name\":\"Support service\",\r\n    \"iteminfo\":{\r\n      \"id\":7613,\r\n      \"title\":\"Achievement Fan of Discord\",\r\n      \"title_fr\":\"Réalisation Fan de Discord\",\r\n      \"title_de\":\"Leistung Discord-Fan\",\r\n      \"title_pl\":\"Osiągnięcie Fan Discordu\",\r\n      \"title_es\":\"Achievement Fan of Discord\",\r\n      \"title_tr\":\"Achievement Fan of Discord\",\r\n      \"title_pt\":\"Conquista Fã do Discord\",\r\n      \"title_cn\":\"Achievement Fan of Discord\",\r\n      \"title_jp\":\"@ru_discord_mark_01\",\r\n      \"gold\":\"\",\r\n      \"goldeu\":\"\",\r\n      \"goldtur\":\"\",\r\n      \"icon_url\":\"\",\r\n      \"itemid\":\"unlock_ru_discord_mark_01\",\r\n      \"price\":\"\",\r\n      \"item_css_class\":\"\",\r\n      \"type\":\"item\",\r\n      \"count\":\"1\",\r\n      \"duration\":\"0\",\r\n      \"duration_type\":\"\",\r\n      \"consumable\":\"0\",\r\n      \"permanent\":\"0\",\r\n      \"regular\":\"1\",\r\n      \"priority\":\"\",\r\n      \"tag\":\"\",\r\n      \"sale\":\"\",\r\n      \"limit\":\"0\"\r\n    },\r\n    \"charname\":\"foohoo\"\r\n  },\r\n  ...\r\n}\r\n```\r\n- \u003c\u003e.myitems.transferItem(cartId, profileId, shardId, sendNotification = True)\r\n\r\nAllows you to transfer items that are listed in the `\u003c\u003e.myitems.list()` result. All the parameters are mandatory except the notifications, you can choose if send them in-game or not.\r\n```python\r\n# Example output\r\n{\r\n  \"result\":1,\r\n  \"msg\":\"Sent to the selected server: Absolute AT308\"\r\n}\r\n```\r\n### \u003c\u003e.inventory\r\nBattlepass inventory management class that implements the needed methods.\r\n- \u003c\u003e.inventory.list()\r\n\r\nNative API that returns the content of the user battlepass inventory.\r\n```python\r\nwf.inventory.list() # Returns content from /minigames/inventory/api/list ['data']['inventory']\r\n```\r\n- \u003c\u003e.inventory.chars()\r\n\r\nNative API that returns list of user in-game characters to which you can transfer items. Useful for \u003c\u003e.inventory.transfer() method\r\n```python\r\nwf.inventory.chars() # Returns content from /minigames/craft/api/user-info ['data']['chars']\r\n```\r\n- \u003c\u003e.inventory.transfer(server, item_id, amount=1, notification=False)\r\n\r\nMethod that allows the user to transfer items from the battlepass invetory to the game. Takes as arguments the server shardID (available from `\u003c\u003e.inventory.chars()`) and item ID (available from `\u003c\u003e.inventory.list()`). By default the amount is set to 1 and item will be transferred without in-game notification.\r\n```python\r\nwf.inventory.transfer(1,6025) # Transfers 1 temporary golden scar H to server 1 which in my case it's EU\r\n```\r\n- \u003c\u003e.inventory.lootDogToken()\r\n\r\nMethod that returns lootdog token. Probably for future use. Currenlty is blank.\r\n```python\r\nwf.inventory.lootDogToken()\r\n```\r\n### \u003c\u003e.crafting\r\n- \u003c\u003e.crafting.crates()\r\n\r\nReturns the list of user crafting crates either awaiting to be opened or to be opened/collected.\r\n```python\r\nwf.crafting.crates()\r\n# Example output\r\n[\r\n    {\r\n    \"id\": 48653619,\r\n    \"type\": \"silver\",\r\n    \"state\": \"awaiting\",\r\n    \"ended_at\": -756216\r\n    },\r\n    {\r\n    \"id\": 48654021,\r\n    \"type\": \"platinum\",\r\n    \"state\": \"awaiting\",\r\n    \"ended_at\": -698615\r\n    },\r\n    {\r\n    \"id\": 48654439,\r\n    \"type\": \"silver\",\r\n    \"state\": \"awaiting\",\r\n    \"ended_at\": -756215\r\n    },\r\n    {\r\n    \"id\": 48657667,\r\n    \"type\": \"silver\",\r\n    \"state\": \"awaiting\",\r\n    \"ended_at\": -756215\r\n    }\r\n]\r\n```\r\n- \u003c\u003e.crafting.startCrate(crate_id)\r\n\r\nMethod that starts the crafting crate opening\r\n```python\r\nwf.crafting.startCrate(982645)\r\n```\r\n- \u003c\u003e.crafting.openCrate(crate_id)\r\n\r\nMethod that collects items from an opened crate\r\n```python\r\nwf.crafting.openCrate(982645)\r\n# Example output\r\n{\"data\":{\"resource\":{\"level\":1,\"amount\":30}},\"state\":\"Success\"}\r\n```\r\n- \u003c\u003e.crafting.resources()\r\n\r\nMethod that returns list of user crafting resources\r\n```python\r\nwf.crafting.resources()\r\n# Example output\r\n[\r\n{\r\n\"level\": 1,\r\n\"amount\": 14714\r\n},\r\n{\r\n\"level\": 2,\r\n\"amount\": 23913\r\n},\r\n{\r\n\"level\": 3,\r\n\"amount\": 10776\r\n},\r\n{\r\n\"level\": 4,\r\n\"amount\": 666\r\n},\r\n{\r\n\"level\": 5,\r\n\"amount\": 121\r\n}\r\n]\r\n```\r\n- \u003c\u003e.crafting.slotCount()\r\n\r\nMethod that returns the amount of crafting slots the user has\r\n```python\r\nwf.crafting.slotCount()\r\n# Example output\r\n8\r\n```\r\n### \u003c\u003e.marketplace\r\n- \u003c\u003e.marketplace.list()\r\n\r\nMethod that returns the list of items in the marketplace\r\n```python\r\nwf.marketplace.list()\r\n```\r\n- \u003c\u003e.marketplace.buy(entity_id, cost, type)\r\n\r\nMethod that allows to buy items from marketplace. Arguments are available in \u003c\u003e.marketplace.list()\r\nMost items have type = \"inventory\r\n```python\r\nwf.marketplace.buy(612, 40, \"inventory\")\r\n```\r\n- \u003c\u003e.marketplace.sell(item_id, cost, type)\r\n\r\nMethod that allows to sell in the marketplace. Arguments are available in \u003c\u003e.inventory.list()\r\n```python\r\nwf.marketplace.sell(612, 40)\r\n```\r\n- \u003c\u003e.marketplace.myOffers()\r\n\r\nMethod that returns the list of items that the user is currently selling\r\n```python\r\nwf.marketplace.myOffers()\r\n```\r\n- \u003c\u003e.marketplace.history()\r\n\r\nMethod that returns the selling/buying history of the user\r\n```python\r\nwf.marketplace.history()\r\n```\r\n### \u003c\u003e.chests\r\n- \u003c\u003e.chests.list()\r\n\r\nMethod that returns the list of chests available for the user\r\n```python\r\nwf.chests.list()\r\n```\r\n- \u003c\u003e.chests.keys()\r\n\r\nMethod that returns the dict of key chests owned by the user. Key is chest_id, value is the amount of keys for that chest.\r\n```python\r\nwf.chests.keys()\r\n```\r\n- \u003c\u003e.chests.open(chest_id)\r\n\r\nMethod that opens user chests given the chest_id and returns the content of it.\r\n```python\r\nwf.chests.open(10)\r\n# Example output\r\n{\r\n  \"data\": {\r\n    \"chests\": [],\r\n    \"prize\": {\r\n      \"type\": \"game_item\",\r\n      \"value\": {\r\n        \"id\": \"ar30_shop\",\r\n        \"count\": 1,\r\n        \"duration_type\": \"hour\",\r\n        \"duration\": 1\r\n      },\r\n      \"name\": \"FN FAL DSA-58\"\r\n    }\r\n  },\r\n  \"state\": \"Success\"\r\n}\r\n```\r\n## Properties\r\n- \u003c\u003e.me\r\n\r\nIt's basically the cached version of `\u003c\u003e.user()` to quickly access nickname and email.\r\n```python\r\nwf.me\r\n# Example output\r\n{\r\n    \"state\": \"auth\",\r\n    \"user_id\": 9999999,\r\n    \"email\": \"foo@bar.com\",\r\n    \"username\": \"foobar\",\r\n    \"territory\": \"pc\"\r\n}\r\n```\r\n## Contributing\r\nPull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.\r\n\r\n## License\r\n[GNU GPLv2](https://choosealicense.com/licenses/gpl-2.0/)\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fseanwlk%2Fwfaccountmanager","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fseanwlk%2Fwfaccountmanager","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fseanwlk%2Fwfaccountmanager/lists"}