mirror of
https://codeberg.org/vlw/labylib.git
synced 2025-09-14 01:53:42 +02:00
Compare commits
No commits in common. "master" and "0.1.0" have entirely different histories.
9 changed files with 96 additions and 949 deletions
3
.gitignore
vendored
3
.gitignore
vendored
|
@ -1,2 +1 @@
|
||||||
*__pycache__
|
*__pycache__
|
||||||
dev*
|
|
150
README.md
150
README.md
|
@ -1,91 +1,105 @@
|
||||||

|
# labylib
|
||||||
|
|
||||||
### Cosmetics API for Labymod
|
### Cosmetics API for Labymod
|
||||||
|
|
||||||

|
Set and update Labymod cosmetics programmatically.
|
||||||

|
|
||||||

|
|
||||||
|
|
||||||
Modify LabyMod cosmetics programmatically with Python.
|
| | Created by VicW |
|
||||||
|
|--|--|
|
||||||
### [Supported cosmetics](https://github.com/VictorWesterlund/labylib/wiki/labylib-Modules)
|
|
||||||
|
|
||||||
_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._
|
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
1. Download and install [Python 3](https://www.python.org/downloads/).
|
1. Download and install [Python 3.x.x](https://www.python.org/downloads/) for your computer's architecture
|
||||||
2. Install the latest version of labylib with [`pip`](https://pypi.org/project/labylib/)
|
2. Clone this repo to your machine, or [download a zip](/VictorWesterlund/labylib/archive/master.zip) if you don't speak git
|
||||||
|
|
||||||

|
|
||||||

|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ python3 -m pip install labylib
|
$ git clone https://github.com/VictorWesterlund/labylib/
|
||||||
|
$ gh repo clone VictorWesterlund/labylib
|
||||||
```
|
```
|
||||||
|
3. Extract/copy the `labylib` folder into your project (or make it a dependancy)
|
||||||
|
|
||||||
## Quickstart
|
## Quickstart
|
||||||
1. Import a labylib Module from the [list of available modules](https://github.com/VictorWesterlund/labylib/wiki/labylib-Modules).
|
_**NOTE:**_ _labylib relies on a supplied `PHPSESSID`-cookie from 'labymod.net' to execute its requests. Follow this [this step-by-step guide](#find-your-phpsessid-cookie) to find your `PHPSESSID`_
|
||||||
```python3
|
|
||||||
from labylib import <MODULE>
|
**1. Start by importing a module from `labylib/<cosmetic>`. All [supported cosmetics](#supported-cosmetics) are self-contained modules.**
|
||||||
|
```python
|
||||||
|
from labylib import Cape
|
||||||
```
|
```
|
||||||
2. Each Module comes with a set of classes available to each cosmetic. Pick a class for your Module. (`Visibility`,`Texture` etc.)
|
**2. Initialize the `Texture()` class.**
|
||||||
3. Initialize the class by passing it a `PHPSESSID`<br>
|
|
||||||
[**Here's what it is and where to find it**](https://github.com/VictorWesterlund/labylib/wiki/Find-your-PHPSESSID)
|
All modules take a required `PHPSESSID` as their first argument. The second argument varies depending on the cosmetic.
|
||||||
```python3
|
|
||||||
# Example
|
_Example with `Cape` where a file-path is expected:_
|
||||||
cape_vis = Cape.Visibility(PHPSESSID)
|
```python
|
||||||
```
|
texture = Cape.Texture("<String PHPSESSID>","<String PATH_TO_PNG>") # labylib = Cape.Texture("772nnas663jkc8ahbb2","/home/VicW/coolCape-2.png")
|
||||||
4. Call `update()` with a value expected by the class. Just like Modules, the value expected depends on the class.
|
|
||||||
```python3
|
|
||||||
# Example
|
|
||||||
cape_vis.update("show")
|
|
||||||
```
|
```
|
||||||
|
|
||||||
# Advanced Usage
|
**3. Submit a cosmetic update**
|
||||||
### Request headers and cookies:
|
```python
|
||||||
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.
|
texture.update()
|
||||||
|
```
|
||||||
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.
|
Normal Python "Built-in"-exceptions are rasied for missing texture files (`FileNotFoundError`) etc. If a request was sucuessfully sent to the Labymod endpoint, but it returned something falsey (not `OK`). A custom-defined `RequestError` exception will be raised. It contains the message received from the endpoint server.
|
||||||
```python3
|
```python
|
||||||
# This will send add a "foo=bar" cookie and header with the request
|
try:
|
||||||
cape_vis.cookies["foo"] = "bar"
|
texture.update()
|
||||||
cape_vis.headers["foo"] = "bar"
|
except RequestError as error:
|
||||||
|
print("Caugh RequestError exception:" + error)
|
||||||
cape_vis.update("show")
|
# "Caugh RequestError exception: Session expired"
|
||||||
```
|
```
|
||||||
|
|
||||||
### Append form data to the request body of an instance:
|
## Advanced usage
|
||||||
|
### HTTP POST Headers
|
||||||
|
Request header and cookie dictionaries can be accessed and modified pre-submission by referencing `this.headers` and `this.cookies` respectivly.
|
||||||
|
```python
|
||||||
|
texture = Cape.Texture("<String PHPSESSID>","<String PATH_TO_PNG>")
|
||||||
|
|
||||||
**For `x-www-form-urlencoded` requests:** Append form data with the `addEncodedFormData(key,value)` method:
|
texture.headers["Origin"] = "https://example.com/"
|
||||||
```python3
|
texture.cookies["Foo"] = "Bar"
|
||||||
# This will add "foo=bar" to the URL encoded payload
|
|
||||||
cape_vis.addEncodedFormData("foo","bar")
|
labylib.update()
|
||||||
cape_vis.update("show")
|
```
|
||||||
|
### HTTP POST Body
|
||||||
|
Binary form-data can be added by calling `self.appendBinaryFormData(name,payload)`. Attach `Content-Type`-less form data by supplying a 'name' and 'payload'. Setting 'name' to "file" allows you to upload a `image/png` as BLOB. "payload" excpects a file-path in this case
|
||||||
|
```python
|
||||||
|
texture = Cape.Texture("<String PHPSESSID>","<String PATH_TO_PNG>")
|
||||||
|
|
||||||
|
texture.appendBinaryFormData(b"foo",b"bar")
|
||||||
|
texture.appendBinaryFormData(b"file","/home/VicW/home/VicW/coolCape-2.png") # Note that 'payload' is a String in this case (as opposed to Binary)
|
||||||
```
|
```
|
||||||
|
|
||||||
**For `multipart/form-data` requests:** Append binary form data with the `addBinaryFormData(key,payload)` method:
|
# Additional information:
|
||||||
```python3
|
|
||||||
# This will create a new payload boundary containing "foo=bar"
|
|
||||||
cape_texture.addBinaryFormData(b"foor",b"bar")
|
|
||||||
cape_texture.update("show")
|
|
||||||
```
|
|
||||||
You can also append `image/png` files by passing "file" as the `key` argument. You can either pass binary data directly as a BLOB to `payload` or use `bOpen(<Path_to_PNG>)` to load an image from disk:
|
|
||||||
```python3
|
|
||||||
# This will create a new payload boundary with a "Content-Type: image/png" header and BLOB body
|
|
||||||
cape_texture.addBinaryFormData(b"file",cape_vis.bOpen("~/someImage.png"))
|
|
||||||
cape_texture.update("~/myAwesomeTexture.png")
|
|
||||||
```
|
|
||||||
|
|
||||||
## Contribute
|
## Find your `PHPSESSID`-cookie
|
||||||
|
Instructions for your browser:
|
||||||
|
* [Chrome](#chrome)
|
||||||
|
* [Firefox](#firefox)
|
||||||
|
* [Safari](#safari)
|
||||||
|
|
||||||
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)
|
### Chrome
|
||||||
|
1. Open [labymod.net](https://www.labymod.net/) and log in with your Labymod account
|
||||||
|
2. Press <kbd>F12</kbd> on your keyboard (or <kbd>Ctrl</kbd>+<kbd>⇧ Shift</kbd>+<kbd>I</kbd>) to open DevTools
|
||||||
|
4. Click on the `Application` tab.
|
||||||
|
5. Expand `Cookies` under the `Storage` cateogry in the sidebar and select `https://www.labymod.net/`
|
||||||
|
6. Type `PHPSESSID` into the search box called 'Filter'
|
||||||
|
7. Copy `Value`(PHPSESSID) from the filtered table. If nothing comes up; try navigating to another page on labymod.net
|
||||||
|
8. Close DevTools
|
||||||
|
|
||||||
## License
|
### Firefox
|
||||||
|
1. Open [labymod.net](https://www.labymod.net/) and log in with your Labymod account
|
||||||
|
2. Press <kbd>F12</kbd> on your keyboard (or Right-click the page and select "Inspect Element") to open Developer Tools
|
||||||
|
4. Click on the `Storage` tab.
|
||||||
|
5. `Cookies` should already be expanded and selected, but if it isn't; expand it and select `https://www.labymod.net`
|
||||||
|
6. Using the search bar called 'Filter items', type: `PHPSESSID`
|
||||||
|
7. Copy `Value`(PHPSESSID) from the filtered table. If nothing comes up; try navigating to another page on labymod.net
|
||||||
|
8. Close Developer Tools
|
||||||
|
|
||||||
[GNU General Public License v3.0](https://github.com/VictorWesterlund/labylib/blob/master/LICENSE)
|
### Safari
|
||||||
|
1. Open [labymod.net](https://www.labymod.net/) and log in with your Labymod account
|
||||||
|
2. Right-click the page and select "Inspect Element" (or <kbd>⌥ Option</kbd>+<kbd>⌘ Command</kbd>+<kbd>I</kbd>) to open Web Inspector
|
||||||
|
4. Click on the `Storage` tab.
|
||||||
|
5. Expand `Cookies` in the sidebar and select `labymod.net`
|
||||||
|
6. Find `PHPSESSID` in the table under the 'Name' column
|
||||||
|
7. Copy `Value`(PHPSESSID) from the filtered table. If nothing comes up; try navigating to another page on labymod.net
|
||||||
|
8. Close Web Inspector
|
||||||
|
|
||||||
----
|
### Supported cosmetics
|
||||||
|
| Labymod cosmetic | labylib module name |
|
||||||
| | Created by VicW |
|
|
||||||
|--|--|
|
|--|--|
|
||||||
|
| Cloak | Cape |
|
||||||
|
|
|
@ -1,138 +0,0 @@
|
||||||
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
152
labylib/Cap.py
|
@ -1,152 +0,0 @@
|
||||||
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/Cape.py
171
labylib/Cape.py
|
@ -2,11 +2,15 @@ import requests
|
||||||
import hashlib
|
import hashlib
|
||||||
import time
|
import time
|
||||||
|
|
||||||
|
class RequestError(Exception): pass
|
||||||
|
|
||||||
class Texture:
|
class Texture:
|
||||||
|
|
||||||
endpoint = "https://www.labymod.net/page/php/cape.php"
|
endpoint = "https://www.labymod.net/page/php/cape.php"
|
||||||
|
|
||||||
def __init__(self,cookie):
|
def __init__(self,cookie,img):
|
||||||
|
self.validate(cookie,img)
|
||||||
|
|
||||||
self.body = b"" # Initialize request body
|
self.body = b"" # Initialize request body
|
||||||
self.cookies = dict(PHPSESSID = cookie)
|
self.cookies = dict(PHPSESSID = cookie)
|
||||||
self.boundary = self.boundary()
|
self.boundary = self.boundary()
|
||||||
|
@ -29,9 +33,13 @@ class Texture:
|
||||||
}
|
}
|
||||||
|
|
||||||
self.appendBinaryFormData(b"cosmetic",b"cape")
|
self.appendBinaryFormData(b"cosmetic",b"cape")
|
||||||
|
self.appendBinaryFormData(b"file",self.bOpen(img))
|
||||||
|
|
||||||
# -----------------------------------
|
# -----------------------------------
|
||||||
|
|
||||||
|
def validate(self,cookie,file):
|
||||||
|
return True
|
||||||
|
|
||||||
# Generate boundary header from MD5-hash of current time
|
# Generate boundary header from MD5-hash of current time
|
||||||
def boundary(self):
|
def boundary(self):
|
||||||
seed = str(time.time())
|
seed = str(time.time())
|
||||||
|
@ -75,9 +83,7 @@ class Texture:
|
||||||
|
|
||||||
# -----------------------------------
|
# -----------------------------------
|
||||||
|
|
||||||
def update(self,img):
|
def update(self):
|
||||||
self.appendBinaryFormData(b"file",self.bOpen(img))
|
|
||||||
|
|
||||||
self.closeBinaryFormData() # Add final boundary header
|
self.closeBinaryFormData() # Add final boundary header
|
||||||
|
|
||||||
request = requests.post(Texture.endpoint,
|
request = requests.post(Texture.endpoint,
|
||||||
|
@ -87,157 +93,6 @@ class Texture:
|
||||||
)
|
)
|
||||||
|
|
||||||
# Raise exception if request fails
|
# Raise exception if request fails
|
||||||
request.raise_for_status()
|
# Use [3:5] to clean up junk chars from reponse body
|
||||||
|
if(str(request.text)[3:5] != "OK"):
|
||||||
class Template:
|
raise RequestError(str(request.text))
|
||||||
|
|
||||||
endpoint = "https://www.labymod.net/page/php/setCapeTpl.php"
|
|
||||||
templates = {
|
|
||||||
"labymod": "10_LABYMOD.png",
|
|
||||||
"minecon2011": "30_MINECON2011.png",
|
|
||||||
"minecon2012": "30_MINECON2012.png",
|
|
||||||
"minecon2013": "30_MINECON2013.png",
|
|
||||||
"minecon2015": "30_MINECON2015.png",
|
|
||||||
"minecon2016": "30_MINECON2016.png",
|
|
||||||
"minecon2019": "30_MINECON2019.png",
|
|
||||||
"prismarine": "30_PRISMARINE.png",
|
|
||||||
"christmas2010": "40_CHRISTMAS2010.png",
|
|
||||||
"cobalt": "40_COBALT.png",
|
|
||||||
"julianclark": "40_JULIANCLARK.png",
|
|
||||||
"mapmaker": "40_MAPMAKER.png",
|
|
||||||
"mojira": "40_MOJIRA.png",
|
|
||||||
"mrmessiah": "40_MRMESSIAH.png",
|
|
||||||
"newyear": "40_NEWYEAR.png",
|
|
||||||
"scrolls": "40_SCROLLS.png",
|
|
||||||
"translator": "40_TRANSLATOR.png",
|
|
||||||
"turtle": "40_TURTLE.png",
|
|
||||||
"winner": "40_WINNER.png"
|
|
||||||
}
|
|
||||||
|
|
||||||
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("cosmetic","cape")
|
|
||||||
|
|
||||||
# -----------------------------------
|
|
||||||
|
|
||||||
# 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 = value.lower()
|
|
||||||
|
|
||||||
if(value not in Template.templates):
|
|
||||||
raise ValueError(f"'{value}' is not a valid template.")
|
|
||||||
|
|
||||||
texture = Template.templates[value]
|
|
||||||
|
|
||||||
self.addEncodedFormData("cape",texture)
|
|
||||||
|
|
||||||
request = requests.post(Template.endpoint,
|
|
||||||
headers = self.headers,
|
|
||||||
cookies = self.cookies,
|
|
||||||
data = self.body
|
|
||||||
)
|
|
||||||
|
|
||||||
# Raise exception if request fails
|
|
||||||
request.raise_for_status()
|
|
||||||
|
|
||||||
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",459595)
|
|
||||||
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
|
|
||||||
elif(value == "hide"):
|
|
||||||
value = 0
|
|
||||||
else:
|
|
||||||
raise ValueError(f"'{value}' is not a valid visibility state.")
|
|
||||||
|
|
||||||
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()
|
|
126
labylib/Hat.py
126
labylib/Hat.py
|
@ -1,126 +0,0 @@
|
||||||
import requests
|
|
||||||
|
|
||||||
class Texture:
|
|
||||||
|
|
||||||
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","country")
|
|
||||||
self.addEncodedFormData("item",459594)
|
|
||||||
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):
|
|
||||||
self.addEncodedFormData("value",value)
|
|
||||||
|
|
||||||
request = requests.post(Texture.endpoint,
|
|
||||||
headers = self.headers,
|
|
||||||
cookies = self.cookies,
|
|
||||||
data = self.body
|
|
||||||
)
|
|
||||||
|
|
||||||
# Raise exception if request fails
|
|
||||||
request.raise_for_status()
|
|
||||||
|
|
||||||
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",459594)
|
|
||||||
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()
|
|
171
labylib/Mask.py
171
labylib/Mask.py
|
@ -1,171 +0,0 @@
|
||||||
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()
|
|
|
@ -1,67 +0,0 @@
|
||||||
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()
|
|
|
@ -1,67 +0,0 @@
|
||||||
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()
|
|
Loading…
Add table
Reference in a new issue