Compare commits

...

8 commits

Author SHA1 Message Date
5ea6e6314c
Update README.md 2021-01-23 03:23:26 +01:00
8d1eb7181f
Update README.md 2021-01-23 03:10:44 +01:00
f64206f022
Merge pull request #7 from VictorWesterlund/feature/cosmetics
Merging anyways and closing maintenance for this repo. `Multi` Support for cosmetics using the old endpoint might be added in the future.
2021-01-23 03:09:03 +01:00
f1505c67ad Added new cosmetic "Cap" 2020-12-27 12:57:51 +01:00
69f46ec52b Added new cosmetic "Moose Hat" 2020-12-15 13:03:17 +01:00
c8fe34620d Added new cosmetic "Mask"
Cosmetics with values of type="multi" now have a single class "Multi" where each value is set by calling a function. LabyMod expects all mutli values to be set in order to update the cosmetic. Labylib does not pull current values as of yet.

Added "Mask" cosmetic.
2020-12-11 14:02:56 +01:00
4a5cd81eef Added "Backpack" and "XMAS" cosmetics 2020-12-07 08:43:54 +01:00
Victor Westerlund
939a306c6f
Update README.md 2020-11-30 04:07:50 +01:00
6 changed files with 613 additions and 15 deletions

View file

@ -1,28 +1,28 @@
![Labylib](https://storage.googleapis.com/public.victorwesterlund.com/github/VictorWesterlund/labylib/labylib.png) ![Labylib](https://storage.googleapis.com/public.victorwesterlund.com/github/VictorWesterlund/labylib/labylib.png)
### Cosmetics API for Labymod ### Cosmetics API for Labymod
![GitHub release (latest by date including pre-releases)](https://img.shields.io/github/v/release/VictorWesterlund/labylib?include_prereleases) ![GitHub release (latest by date including pre-releases)](https://img.shields.io/github/v/release/VictorWesterlund/labylib?include_prereleases)
![GitHub last commit](https://img.shields.io/github/last-commit/VictorWesterlund/labylib) ![GitHub last commit](https://img.shields.io/github/last-commit/VictorWesterlund/labylib)
![Maintenance](https://img.shields.io/maintenance/yes/2021) ![Maintenance](https://img.shields.io/maintenance/no/2021)
Modify LabyMod cosmetics programmatically with Python. Modify LabyMod cosmetics programmatically with Python.
|![VicW](https://crafatar.com/renders/body/53c40674-f0a2-4f95-9ce1-479bdd1d8b67?scale=2) | Created by VicW | ### [Supported cosmetics](https://github.com/VictorWesterlund/labylib/wiki/labylib-Modules)
|--|--|
_labylib or Victor Westerlund is in no way sponsored by or affiliated with LabyMod or LabyMedia GmbH._<br> _labylib is in no way sponsored by or affiliated with LabyMod or LabyMedia GmbH._<br>
_This program is offered as-is and might stop working at any time_ _This program is offered as-is and might stop working at any time._
## Installation ## Installation
1. Download and install [Python 3](https://www.python.org/downloads/) for your architecture. 1. Download and install [Python 3](https://www.python.org/downloads/).
2. Install the latest version of labylib with [`pip3`](https://pypi.org/project/labylib/) 2. Install the latest version of labylib with [`pip`](https://pypi.org/project/labylib/)
![PyPI](https://img.shields.io/pypi/v/labylib)
![PyPI - Wheel](https://img.shields.io/pypi/wheel/labylib)
```bash ```bash
$ python3 -m pip install labylib $ python3 -m pip install labylib
``` ```
*..or if that doesn't work*
```python
$ pip3 install labylib
```
## Quickstart ## Quickstart
1. Import a labylib Module from the [list of available modules](https://github.com/VictorWesterlund/labylib/wiki/labylib-Modules). 1. Import a labylib Module from the [list of available modules](https://github.com/VictorWesterlund/labylib/wiki/labylib-Modules).
@ -43,7 +43,7 @@ cape_vis.update("show")
``` ```
# Advanced Usage # Advanced Usage
## Request headers, cookies and body ### Request headers and cookies:
Each class instance can be modified before `update()` is called to make changes to the request headers, cookies etc. You can even add additional encoded form data to the request body if necessary. Each class instance can be modified before `update()` is called to make changes to the request headers, cookies etc. You can even add additional encoded form data to the request body if necessary.
labylib uses [`Requests`](https://requests.readthedocs.io/en/master/) under the hood and request parameters like headers and cookies can be modified in accordance with `Request`'s conventions. labylib uses [`Requests`](https://requests.readthedocs.io/en/master/) under the hood and request parameters like headers and cookies can be modified in accordance with `Request`'s conventions.
@ -55,7 +55,7 @@ cape_vis.headers["foo"] = "bar"
cape_vis.update("show") cape_vis.update("show")
``` ```
### To append form data to the request body of an instance: ### Append form data to the request body of an instance:
**For `x-www-form-urlencoded` requests:** Append form data with the `addEncodedFormData(key,value)` method: **For `x-www-form-urlencoded` requests:** Append form data with the `addEncodedFormData(key,value)` method:
```python3 ```python3
@ -81,8 +81,11 @@ cape_texture.update("~/myAwesomeTexture.png")
If you find any bugs with- or would like to suggest features to labylib, please submit them under [Issues](https://github.com/VictorWesterlund/labylib/issues) If you find any bugs with- or would like to suggest features to labylib, please submit them under [Issues](https://github.com/VictorWesterlund/labylib/issues)
Pull requests to labylib are highly encouraged!
## License ## License
[GNU General Public License v3.0](https://github.com/VictorWesterlund/labylib/blob/master/LICENSE) [GNU General Public License v3.0](https://github.com/VictorWesterlund/labylib/blob/master/LICENSE)
----
|![VicW](https://i.imgur.com/XHwOKuS.png) | Created by VicW |
|--|--|

138
labylib/Backpack.py Normal file
View file

@ -0,0 +1,138 @@
import requests
class Visibility:
endpoint = "https://www.labymod.net/api/change"
def __init__(self,cookie):
self.cookies = dict(PHPSESSID = cookie)
self.headers = {
"accept": "*/*",
"accept-encoding": "gzip, deflate, br",
"accept-language": "en-US,en;q=0.9,sv;q=0.8",
"cache-control": "no-cache",
"dnt": "1",
"user-agent": "Mozilla/5.0 (Windows NT 5.1; rv:33.0) Gecko/20100101 Firefox/33.0",
"origin": "https://www.labymod.net",
"pragma": "no-cache",
"referer": "https://www.labymod.net/dashboard",
"sec-fetch-dest": "empty",
"sec-fetch-mode": "cors",
"sec-fetch-site": "same-origin",
"x-requested-with": "XMLHttpRequest",
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"
}
self.body = ""
# Payload
self.addEncodedFormData("type","switch")
self.addEncodedFormData("item",525800)
self.addEncodedFormData("site","control")
# -----------------------------------
# Add URLEncoded form data (x-www-form-urlencoded)
def addEncodedFormData(self,key,value):
body = "&"
# Remove '&' delimiter for first item
if(self.body == ""):
body = ""
body += f"{key}={value}"
self.body += body
# -----------------------------------
def update(self,value):
# Interpret strings
if(type(value) != int):
if(value == "show"):
value = 1
else:
value = 0
self.addEncodedFormData("value",value)
request = requests.post(Visibility.endpoint,
headers = self.headers,
cookies = self.cookies,
data = self.body
)
# Raise exception if request fails
request.raise_for_status()
class Multi:
endpoint = "https://www.labymod.net/api/change"
def __init__(self,cookie):
self.cookies = dict(PHPSESSID = cookie)
self.headers = {
"accept": "*/*",
"accept-encoding": "gzip, deflate, br",
"accept-language": "en-US,en;q=0.9,sv;q=0.8",
"cache-control": "no-cache",
"dnt": "1",
"user-agent": "Mozilla/5.0 (Windows NT 5.1; rv:33.0) Gecko/20100101 Firefox/33.0",
"origin": "https://www.labymod.net",
"pragma": "no-cache",
"referer": "https://www.labymod.net/dashboard",
"sec-fetch-dest": "empty",
"sec-fetch-mode": "cors",
"sec-fetch-site": "same-origin",
"x-requested-with": "XMLHttpRequest",
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"
}
self.body = ""
self.values = (000000,000000)
# Payload
self.addEncodedFormData("type","multi")
self.addEncodedFormData("item",525800)
self.addEncodedFormData("site","control")
# -----------------------------------
def color(color,color2 = None):
if(color2):
self.values[0] = color
self.values[1] = color2
return
self.values[0] = color[0]
self.values[1] = color[1]
# -----------------------------------
# Add URLEncoded form data (x-www-form-urlencoded)
def addEncodedFormData(self,key,value):
body = "&"
# Remove '&' delimiter for first item
if(self.body == ""):
body = ""
body += f"{key}={value}"
self.body += body
def update(self,value):
value = ",".join(self.values)
self.addEncodedFormData("value",value)
request = requests.post(Visibility.endpoint,
headers = self.headers,
cookies = self.cookies,
data = self.body
)
# Raise exception if request fails
request.raise_for_status()

152
labylib/Cap.py Normal file
View file

@ -0,0 +1,152 @@
import requests
class Visibility:
endpoint = "https://www.labymod.net/api/change"
def __init__(self,cookie):
self.cookies = dict(PHPSESSID = cookie)
self.headers = {
"accept": "*/*",
"accept-encoding": "gzip, deflate, br",
"accept-language": "en-US,en;q=0.9,sv;q=0.8",
"cache-control": "no-cache",
"dnt": "1",
"user-agent": "Mozilla/5.0 (Windows NT 5.1; rv:33.0) Gecko/20100101 Firefox/33.0",
"origin": "https://www.labymod.net",
"pragma": "no-cache",
"referer": "https://www.labymod.net/dashboard",
"sec-fetch-dest": "empty",
"sec-fetch-mode": "cors",
"sec-fetch-site": "same-origin",
"x-requested-with": "XMLHttpRequest",
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"
}
self.body = ""
# Payload
self.addEncodedFormData("type","switch")
self.addEncodedFormData("item",630683)
self.addEncodedFormData("site","control")
# -----------------------------------
# Add URLEncoded form data (x-www-form-urlencoded)
def addEncodedFormData(self,key,value):
body = "&"
# Remove '&' delimiter for first item
if(self.body == ""):
body = ""
body += f"{key}={value}"
self.body += body
# -----------------------------------
def update(self,value):
# Interpret strings
if(type(value) != int):
if(value == "show"):
value = 1
else:
value = 0
self.addEncodedFormData("value",value)
request = requests.post(Visibility.endpoint,
headers = self.headers,
cookies = self.cookies,
data = self.body
)
# Raise exception if request fails
request.raise_for_status()
class Multi:
endpoint = "https://www.labymod.net/api/change"
def __init__(self,cookie):
self.cookies = dict(PHPSESSID = cookie)
self.headers = {
"accept": "*/*",
"accept-encoding": "gzip, deflate, br",
"accept-language": "en-US,en;q=0.9,sv;q=0.8",
"cache-control": "no-cache",
"dnt": "1",
"user-agent": "Mozilla/5.0 (Windows NT 5.1; rv:33.0) Gecko/20100101 Firefox/33.0",
"origin": "https://www.labymod.net",
"pragma": "no-cache",
"referer": "https://www.labymod.net/dashboard",
"sec-fetch-dest": "empty",
"sec-fetch-mode": "cors",
"sec-fetch-site": "same-origin",
"x-requested-with": "XMLHttpRequest",
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"
}
self.body = ""
self.values = (0,"",000000,0) # Direction,texture,color,unknown
# Payload
self.addEncodedFormData("type","multi")
self.addEncodedFormData("item",630683)
self.addEncodedFormData("site","control")
# -----------------------------------
def direction(value):
if(value == 1 or value == "front"):
self.values[0] = 1
return
self.values[0] = 0
def template(name == "default"):
templates = [
"default": "7a9c8635-d64f-47ee-a373-5faceffc1915",
"2021": "7ec142d2-fc29-42f5-9659-0d84b104d4c6"
]
if(name not in dictionary):
name = dictionary[0]
self.values[1] = name
def color(color = "ffffff"):
self.values[2] = color
# -----------------------------------
# Add URLEncoded form data (x-www-form-urlencoded)
def addEncodedFormData(self,key,value):
body = "&"
# Remove '&' delimiter for first item
if(self.body == ""):
body = ""
body += f"{key}={value}"
self.body += body
def update(self,value):
value = ",".join(self.values)
self.addEncodedFormData("value",value)
request = requests.post(Visibility.endpoint,
headers = self.headers,
cookies = self.cookies,
data = self.body
)
# Raise exception if request fails
request.raise_for_status()

171
labylib/Mask.py Normal file
View file

@ -0,0 +1,171 @@
import requests
class Visibility:
endpoint = "https://www.labymod.net/api/change"
def __init__(self,cookie):
self.cookies = dict(PHPSESSID = cookie)
self.headers = {
"accept": "*/*",
"accept-encoding": "gzip, deflate, br",
"accept-language": "en-US,en;q=0.9,sv;q=0.8",
"cache-control": "no-cache",
"dnt": "1",
"user-agent": "Mozilla/5.0 (Windows NT 5.1; rv:33.0) Gecko/20100101 Firefox/33.0",
"origin": "https://www.labymod.net",
"pragma": "no-cache",
"referer": "https://www.labymod.net/dashboard",
"sec-fetch-dest": "empty",
"sec-fetch-mode": "cors",
"sec-fetch-site": "same-origin",
"x-requested-with": "XMLHttpRequest",
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"
}
self.body = ""
# Payload
self.addEncodedFormData("type","switch")
self.addEncodedFormData("item",544349)
self.addEncodedFormData("site","control")
# -----------------------------------
# Add URLEncoded form data (x-www-form-urlencoded)
def addEncodedFormData(self,key,value):
body = "&"
# Remove '&' delimiter for first item
if(self.body == ""):
body = ""
body += f"{key}={value}"
self.body += body
# -----------------------------------
def update(self,value):
# Interpret strings
if(type(value) != int):
if(value == "show"):
value = 1
else:
value = 0
self.addEncodedFormData("value",value)
request = requests.post(Visibility.endpoint,
headers = self.headers,
cookies = self.cookies,
data = self.body
)
# Raise exception if request fails
request.raise_for_status()
class Multi:
endpoint = "https://www.labymod.net/api/change"
def __init__(self,cookie):
self.cookies = dict(PHPSESSID = cookie)
self.headers = {
"accept": "*/*",
"accept-encoding": "gzip, deflate, br",
"accept-language": "en-US,en;q=0.9,sv;q=0.8",
"cache-control": "no-cache",
"dnt": "1",
"user-agent": "Mozilla/5.0 (Windows NT 5.1; rv:33.0) Gecko/20100101 Firefox/33.0",
"origin": "https://www.labymod.net",
"pragma": "no-cache",
"referer": "https://www.labymod.net/dashboard",
"sec-fetch-dest": "empty",
"sec-fetch-mode": "cors",
"sec-fetch-site": "same-origin",
"x-requested-with": "XMLHttpRequest",
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"
}
self.body = ""
self.values = (000000,000000,0,0) # Color,Color,Size,Texture
# Payload
self.addEncodedFormData("type","multi")
self.addEncodedFormData("item",544349)
self.addEncodedFormData("site","control")
# -----------------------------------
def color(color,color2 = None):
if(color2):
self.values[0] = color
self.values[1] = color2
return
self.values[0] = color[0]
self.values[1] = color[1]
def size(size):
# Interpret strings
if(type(size) != int):
if(size == "big"):
size = 1
else:
size = 0
self.values[2] = size
def template(value):
templates = {
"None": "null",
"3": "26b459ce-2f09-4b50-97ad-c589262b0268",
":3": "3b7492c6-4239-4e4b-9906-d510e722a96b",
":*)": "4120f1eb-19e6-4f34-8417-d7bd6a01d85a",
":#)": "43e1b6bf-2a18-40f4-b0b0-38b7c74a6ddb",
":'3": "4b498414-5894-4124-98f6-b6c5a531b6e8",
":)": "84456b05-85ba-48bf-a0c8-ca4ba981ff8e",
":p)": "a387dde9-a1a8-41b8-9e77-8446f8d6d3cd",
":P": "aaa3db95-6537-4ef0-aa66-050b20412ef6",
":')": "bb9006f9-b67c-4fff-996b-6d74a1b691d6",
"::)": "c6aa01db-bd10-4948-9632-afe6bd0c3f3c",
"X": "e93ec7b5-4148-4d1c-aefd-26c3f125cec7",
";p": "ed2c847c-5b2b-4916-843d-438b6c039804",
":~)": "f9e4f616-e697-441e-be57-1b64cc5c5e41"
}
if(value not in templates):
raise ValueError(f"'{value}' is not a valid template.")
self.values[3] = templates[value]
# -----------------------------------
# Add URLEncoded form data (x-www-form-urlencoded)
def addEncodedFormData(self,key,value):
body = "&"
# Remove '&' delimiter for first item
if(self.body == ""):
body = ""
body += f"{key}={value}"
self.body += body
def update(self,value):
value = ",".join(self.values)
self.addEncodedFormData("value",value)
request = requests.post(Visibility.endpoint,
headers = self.headers,
cookies = self.cookies,
data = self.body
)
# Raise exception if request fails
request.raise_for_status()

67
labylib/MooseHat.py Normal file
View file

@ -0,0 +1,67 @@
import requests
class Visibility:
endpoint = "https://www.labymod.net/api/change"
def __init__(self,cookie):
self.cookies = dict(PHPSESSID = cookie)
self.headers = {
"accept": "*/*",
"accept-encoding": "gzip, deflate, br",
"accept-language": "en-US,en;q=0.9,sv;q=0.8",
"cache-control": "no-cache",
"dnt": "1",
"user-agent": "Mozilla/5.0 (Windows NT 5.1; rv:33.0) Gecko/20100101 Firefox/33.0",
"origin": "https://www.labymod.net",
"pragma": "no-cache",
"referer": "https://www.labymod.net/dashboard",
"sec-fetch-dest": "empty",
"sec-fetch-mode": "cors",
"sec-fetch-site": "same-origin",
"x-requested-with": "XMLHttpRequest",
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"
}
self.body = ""
# Payload
self.addEncodedFormData("type","switch")
self.addEncodedFormData("item",576242)
self.addEncodedFormData("site","control")
# -----------------------------------
# Add URLEncoded form data (x-www-form-urlencoded)
def addEncodedFormData(self,key,value):
body = "&"
# Remove '&' delimiter for first item
if(self.body == ""):
body = ""
body += f"{key}={value}"
self.body += body
# -----------------------------------
def update(self,value):
# Interpret strings
if(type(value) != int):
if(value == "show"):
value = 1
else:
value = 0
self.addEncodedFormData("value",value)
request = requests.post(Visibility.endpoint,
headers = self.headers,
cookies = self.cookies,
data = self.body
)
# Raise exception if request fails
request.raise_for_status()

67
labylib/XMAS.py Normal file
View file

@ -0,0 +1,67 @@
import requests
class Visibility:
endpoint = "https://www.labymod.net/api/change"
def __init__(self,cookie):
self.cookies = dict(PHPSESSID = cookie)
self.headers = {
"accept": "*/*",
"accept-encoding": "gzip, deflate, br",
"accept-language": "en-US,en;q=0.9,sv;q=0.8",
"cache-control": "no-cache",
"dnt": "1",
"user-agent": "Mozilla/5.0 (Windows NT 5.1; rv:33.0) Gecko/20100101 Firefox/33.0",
"origin": "https://www.labymod.net",
"pragma": "no-cache",
"referer": "https://www.labymod.net/dashboard",
"sec-fetch-dest": "empty",
"sec-fetch-mode": "cors",
"sec-fetch-site": "same-origin",
"x-requested-with": "XMLHttpRequest",
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"
}
self.body = ""
# Payload
self.addEncodedFormData("type","switch")
self.addEncodedFormData("item",520292)
self.addEncodedFormData("site","control")
# -----------------------------------
# Add URLEncoded form data (x-www-form-urlencoded)
def addEncodedFormData(self,key,value):
body = "&"
# Remove '&' delimiter for first item
if(self.body == ""):
body = ""
body += f"{key}={value}"
self.body += body
# -----------------------------------
def update(self,value):
# Interpret strings
if(type(value) != int):
if(value == "show"):
value = 1
else:
value = 0
self.addEncodedFormData("value",value)
request = requests.post(Visibility.endpoint,
headers = self.headers,
cookies = self.cookies,
data = self.body
)
# Raise exception if request fails
request.raise_for_status()