Skip to content
This repository was archived by the owner on Feb 15, 2024. It is now read-only.

Repository files navigation

Python Aternos Logo

[UNMAINTAINED] Python Aternos

An unofficial Aternos API written in Python.
It uses aternos' private API and html parsing.

Warning

This library is no longer maintained, because:

  1. Aternos started detecting all automated requests (and, therefore, ToS violations) via JS code in AJAX_TOKEN which is executed incorrectly in Js2Py and requires a NodeJS DOM library (at least) or a browser engine. For details, see #85.
  2. Aternos frontend is protected with Cloudflare, so this library fails to parse pages in case of, for example, blocked or suspicious IP address (e.g. web hosting). CF shows IUAM page, often with captcha. We need a browser engine like undetected-chromedriver and an AI or a man solving captchas.
  3. Last Aternos API update broke nearly everything.
  4. I have no more motivation and not enough time to work on this, nor need in using Aternos.

I'm so sorry. If you want to continue development of python-aternos, contact me, but I think it's better to write from scratch.

Python Aternos supports:

  • Logging in to account with password (plain or hashed) or ATERNOS_SESSION cookie value
  • Saving session to the file and restoring
  • Changing username, email and password
  • Parsing Minecraft servers list
  • Parsing server info by its ID
  • Starting/stoping server, restarting, confirming/cancelling launch
  • Updating server info in real-time (see WebSocket API)
  • Changing server subdomain and MOTD (message-of-the-day)
  • Managing files, settings, players (whitelist, operators, etc.)

Install

Common

$ pip install python-aternos

Note for Windows users

Install lxml package from here if you have problems with it, and then execute:
pip install --no-deps python-aternos

Development

$ git clone https://github.com/DarkCat09/python-aternos.git
$ cd python-aternos
$ pip install -e .[dev]

Usage

To use Aternos API in your Python script, import it and login with your username and password or its MD5 hash.

Then request the servers list using list_servers().
You can start/stop your Aternos server, calling start() or stop().

Here is an example how to use the API:

# Importfrompython_aternosimportClient# Create objectatclient=Client()
# Log in# with username and passwordatclient.login('example', 'test123')
# ----OR----# with username and MD5 hashed passwordatclient.login_hashed('example', 'cc03e747a6afbbcbf8be7668acfebee5')
# ----OR----# with session cookieatclient.login_with_session('ATERNOS_SESSION cookie value')
# Get AternosAccount objectaternos=atclient.account# Get servers listservs=aternos.list_servers()
# Get the first servermyserv=servs[0]
# Startmyserv.start()
# Stopmyserv.stop()
# You can also find server by IPtestserv=Noneforservinservs:
ifserv.address=='test.aternos.org':
testserv=serviftestservisnotNone:
# Prints the server software and its version# (for example, "Vanilla 1.12.2")print(testserv.software, testserv.version)
# Starts servertestserv.start()

Changelog

VersionDescription
v0.3Implemented files API, added typization.
v0.4Implemented configuration API, some bugfixes.
v0.5The API was updated corresponding to new Aternos security methods. Huge thanks to lusm554.
v0.6/v1.0.0Code refactoring, websockets API and session saving to prevent detecting automation access.
v1.0.xLots of bugfixes, changed versioning (SemVer).
v1.1.xDocumentation, unit tests, pylint, bugfixes, changes in atwss.
v1.1.2/v2.0.0Solution for #25 (Cloudflare bypassing), bugfixes in JS parser.
v2.0.xDocumentation, automatically saving/restoring session, improvements in Files API.
v2.1.xFixes in websockets API, atconnect (including cookie refreshing fix). Support for captcha solving services (view #52).
v2.2.xNode.JS interpreter support.
v3.0.0Partially rewritten, API updates.
v3.0.5Unmaintained.
v3.1.xTODO: Full implementation of config API.
v3.2.xTODO: Shared access API and maybe Google Drive backups.

Reversed API Specification

Private Aternos API requests were captured into this HAR file and were imported to a Postman Workspace.
You can use both resources to explore the API.
Any help with improving this library is welcome.

License

License Notice:

Copyright 2021-2022 All contributors
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

Releases

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - DarkCat09/python-aternos: [UNMAINTAINED] Unofficial Aternos API written in Python · GitHub
Skip to content
This repository was archived by the owner on Feb 15, 2024. It is now read-only.

Repository files navigation

Python Aternos Logo

[UNMAINTAINED] Python Aternos

An unofficial Aternos API written in Python.
It uses aternos' private API and html parsing.

Warning

This library is no longer maintained, because:

  1. Aternos started detecting all automated requests (and, therefore, ToS violations) via JS code in AJAX_TOKEN which is executed incorrectly in Js2Py and requires a NodeJS DOM library (at least) or a browser engine. For details, see #85.
  2. Aternos frontend is protected with Cloudflare, so this library fails to parse pages in case of, for example, blocked or suspicious IP address (e.g. web hosting). CF shows IUAM page, often with captcha. We need a browser engine like undetected-chromedriver and an AI or a man solving captchas.
  3. Last Aternos API update broke nearly everything.
  4. I have no more motivation and not enough time to work on this, nor need in using Aternos.

I'm so sorry. If you want to continue development of python-aternos, contact me, but I think it's better to write from scratch.

Python Aternos supports:

  • Logging in to account with password (plain or hashed) or ATERNOS_SESSION cookie value
  • Saving session to the file and restoring
  • Changing username, email and password
  • Parsing Minecraft servers list
  • Parsing server info by its ID
  • Starting/stoping server, restarting, confirming/cancelling launch
  • Updating server info in real-time (see WebSocket API)
  • Changing server subdomain and MOTD (message-of-the-day)
  • Managing files, settings, players (whitelist, operators, etc.)

Install

Common

$ pip install python-aternos

Note for Windows users

Install lxml package from here if you have problems with it, and then execute:
pip install --no-deps python-aternos

Development

$ git clone https://github.com/DarkCat09/python-aternos.git
$ cd python-aternos
$ pip install -e .[dev]

Usage

To use Aternos API in your Python script, import it and login with your username and password or its MD5 hash.

Then request the servers list using list_servers().
You can start/stop your Aternos server, calling start() or stop().

Here is an example how to use the API:

# Importfrompython_aternosimportClient# Create objectatclient=Client()
# Log in# with username and passwordatclient.login('example', 'test123')
# ----OR----# with username and MD5 hashed passwordatclient.login_hashed('example', 'cc03e747a6afbbcbf8be7668acfebee5')
# ----OR----# with session cookieatclient.login_with_session('ATERNOS_SESSION cookie value')
# Get AternosAccount objectaternos=atclient.account# Get servers listservs=aternos.list_servers()
# Get the first servermyserv=servs[0]
# Startmyserv.start()
# Stopmyserv.stop()
# You can also find server by IPtestserv=Noneforservinservs:
ifserv.address=='test.aternos.org':
testserv=serviftestservisnotNone:
# Prints the server software and its version# (for example, "Vanilla 1.12.2")print(testserv.software, testserv.version)
# Starts servertestserv.start()

Changelog

VersionDescription
v0.3Implemented files API, added typization.
v0.4Implemented configuration API, some bugfixes.
v0.5The API was updated corresponding to new Aternos security methods. Huge thanks to lusm554.
v0.6/v1.0.0Code refactoring, websockets API and session saving to prevent detecting automation access.
v1.0.xLots of bugfixes, changed versioning (SemVer).
v1.1.xDocumentation, unit tests, pylint, bugfixes, changes in atwss.
v1.1.2/v2.0.0Solution for #25 (Cloudflare bypassing), bugfixes in JS parser.
v2.0.xDocumentation, automatically saving/restoring session, improvements in Files API.
v2.1.xFixes in websockets API, atconnect (including cookie refreshing fix). Support for captcha solving services (view #52).
v2.2.xNode.JS interpreter support.
v3.0.0Partially rewritten, API updates.
v3.0.5Unmaintained.
v3.1.xTODO: Full implementation of config API.
v3.2.xTODO: Shared access API and maybe Google Drive backups.

Reversed API Specification

Private Aternos API requests were captured into this HAR file and were imported to a Postman Workspace.
You can use both resources to explore the API.
Any help with improving this library is welcome.

License

License Notice:

Copyright 2021-2022 All contributors
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

Releases

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - DarkCat09/python-aternos: [UNMAINTAINED] Unofficial Aternos API written in Python · GitHub
Skip to content
This repository was archived by the owner on Feb 15, 2024. It is now read-only.

Repository files navigation

Python Aternos Logo

[UNMAINTAINED] Python Aternos

An unofficial Aternos API written in Python.
It uses aternos' private API and html parsing.

Warning

This library is no longer maintained, because:

  1. Aternos started detecting all automated requests (and, therefore, ToS violations) via JS code in AJAX_TOKEN which is executed incorrectly in Js2Py and requires a NodeJS DOM library (at least) or a browser engine. For details, see #85.
  2. Aternos frontend is protected with Cloudflare, so this library fails to parse pages in case of, for example, blocked or suspicious IP address (e.g. web hosting). CF shows IUAM page, often with captcha. We need a browser engine like undetected-chromedriver and an AI or a man solving captchas.
  3. Last Aternos API update broke nearly everything.
  4. I have no more motivation and not enough time to work on this, nor need in using Aternos.

I'm so sorry. If you want to continue development of python-aternos, contact me, but I think it's better to write from scratch.

Python Aternos supports:

  • Logging in to account with password (plain or hashed) or ATERNOS_SESSION cookie value
  • Saving session to the file and restoring
  • Changing username, email and password
  • Parsing Minecraft servers list
  • Parsing server info by its ID
  • Starting/stoping server, restarting, confirming/cancelling launch
  • Updating server info in real-time (see WebSocket API)
  • Changing server subdomain and MOTD (message-of-the-day)
  • Managing files, settings, players (whitelist, operators, etc.)

Install

Common

$ pip install python-aternos

Note for Windows users

Install lxml package from here if you have problems with it, and then execute:
pip install --no-deps python-aternos

Development

$ git clone https://github.com/DarkCat09/python-aternos.git
$ cd python-aternos
$ pip install -e .[dev]

Usage

To use Aternos API in your Python script, import it and login with your username and password or its MD5 hash.

Then request the servers list using list_servers().
You can start/stop your Aternos server, calling start() or stop().

Here is an example how to use the API:

# Importfrompython_aternosimportClient# Create objectatclient=Client()
# Log in# with username and passwordatclient.login('example', 'test123')
# ----OR----# with username and MD5 hashed passwordatclient.login_hashed('example', 'cc03e747a6afbbcbf8be7668acfebee5')
# ----OR----# with session cookieatclient.login_with_session('ATERNOS_SESSION cookie value')
# Get AternosAccount objectaternos=atclient.account# Get servers listservs=aternos.list_servers()
# Get the first servermyserv=servs[0]
# Startmyserv.start()
# Stopmyserv.stop()
# You can also find server by IPtestserv=Noneforservinservs:
ifserv.address=='test.aternos.org':
testserv=serviftestservisnotNone:
# Prints the server software and its version# (for example, "Vanilla 1.12.2")print(testserv.software, testserv.version)
# Starts servertestserv.start()

Changelog

VersionDescription
v0.3Implemented files API, added typization.
v0.4Implemented configuration API, some bugfixes.
v0.5The API was updated corresponding to new Aternos security methods. Huge thanks to lusm554.
v0.6/v1.0.0Code refactoring, websockets API and session saving to prevent detecting automation access.
v1.0.xLots of bugfixes, changed versioning (SemVer).
v1.1.xDocumentation, unit tests, pylint, bugfixes, changes in atwss.
v1.1.2/v2.0.0Solution for #25 (Cloudflare bypassing), bugfixes in JS parser.
v2.0.xDocumentation, automatically saving/restoring session, improvements in Files API.
v2.1.xFixes in websockets API, atconnect (including cookie refreshing fix). Support for captcha solving services (view #52).
v2.2.xNode.JS interpreter support.
v3.0.0Partially rewritten, API updates.
v3.0.5Unmaintained.
v3.1.xTODO: Full implementation of config API.
v3.2.xTODO: Shared access API and maybe Google Drive backups.

Reversed API Specification

Private Aternos API requests were captured into this HAR file and were imported to a Postman Workspace.
You can use both resources to explore the API.
Any help with improving this library is welcome.

License

License Notice:

Copyright 2021-2022 All contributors
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

Releases

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - DarkCat09/python-aternos: [UNMAINTAINED] Unofficial Aternos API written in Python · GitHub
Skip to content
This repository was archived by the owner on Feb 15, 2024. It is now read-only.

Repository files navigation

Python Aternos Logo

[UNMAINTAINED] Python Aternos

An unofficial Aternos API written in Python.
It uses aternos' private API and html parsing.

Warning

This library is no longer maintained, because:

  1. Aternos started detecting all automated requests (and, therefore, ToS violations) via JS code in AJAX_TOKEN which is executed incorrectly in Js2Py and requires a NodeJS DOM library (at least) or a browser engine. For details, see #85.
  2. Aternos frontend is protected with Cloudflare, so this library fails to parse pages in case of, for example, blocked or suspicious IP address (e.g. web hosting). CF shows IUAM page, often with captcha. We need a browser engine like undetected-chromedriver and an AI or a man solving captchas.
  3. Last Aternos API update broke nearly everything.
  4. I have no more motivation and not enough time to work on this, nor need in using Aternos.

I'm so sorry. If you want to continue development of python-aternos, contact me, but I think it's better to write from scratch.

Python Aternos supports:

  • Logging in to account with password (plain or hashed) or ATERNOS_SESSION cookie value
  • Saving session to the file and restoring
  • Changing username, email and password
  • Parsing Minecraft servers list
  • Parsing server info by its ID
  • Starting/stoping server, restarting, confirming/cancelling launch
  • Updating server info in real-time (see WebSocket API)
  • Changing server subdomain and MOTD (message-of-the-day)
  • Managing files, settings, players (whitelist, operators, etc.)

Install

Common

$ pip install python-aternos

Note for Windows users

Install lxml package from here if you have problems with it, and then execute:
pip install --no-deps python-aternos

Development

$ git clone https://github.com/DarkCat09/python-aternos.git
$ cd python-aternos
$ pip install -e .[dev]

Usage

To use Aternos API in your Python script, import it and login with your username and password or its MD5 hash.

Then request the servers list using list_servers().
You can start/stop your Aternos server, calling start() or stop().

Here is an example how to use the API:

# Importfrompython_aternosimportClient# Create objectatclient=Client()
# Log in# with username and passwordatclient.login('example', 'test123')
# ----OR----# with username and MD5 hashed passwordatclient.login_hashed('example', 'cc03e747a6afbbcbf8be7668acfebee5')
# ----OR----# with session cookieatclient.login_with_session('ATERNOS_SESSION cookie value')
# Get AternosAccount objectaternos=atclient.account# Get servers listservs=aternos.list_servers()
# Get the first servermyserv=servs[0]
# Startmyserv.start()
# Stopmyserv.stop()
# You can also find server by IPtestserv=Noneforservinservs:
ifserv.address=='test.aternos.org':
testserv=serviftestservisnotNone:
# Prints the server software and its version# (for example, "Vanilla 1.12.2")print(testserv.software, testserv.version)
# Starts servertestserv.start()

Changelog

VersionDescription
v0.3Implemented files API, added typization.
v0.4Implemented configuration API, some bugfixes.
v0.5The API was updated corresponding to new Aternos security methods. Huge thanks to lusm554.
v0.6/v1.0.0Code refactoring, websockets API and session saving to prevent detecting automation access.
v1.0.xLots of bugfixes, changed versioning (SemVer).
v1.1.xDocumentation, unit tests, pylint, bugfixes, changes in atwss.
v1.1.2/v2.0.0Solution for #25 (Cloudflare bypassing), bugfixes in JS parser.
v2.0.xDocumentation, automatically saving/restoring session, improvements in Files API.
v2.1.xFixes in websockets API, atconnect (including cookie refreshing fix). Support for captcha solving services (view #52).
v2.2.xNode.JS interpreter support.
v3.0.0Partially rewritten, API updates.
v3.0.5Unmaintained.
v3.1.xTODO: Full implementation of config API.
v3.2.xTODO: Shared access API and maybe Google Drive backups.

Reversed API Specification

Private Aternos API requests were captured into this HAR file and were imported to a Postman Workspace.
You can use both resources to explore the API.
Any help with improving this library is welcome.

License

License Notice:

Copyright 2021-2022 All contributors
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

Releases

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - DarkCat09/python-aternos: [UNMAINTAINED] Unofficial Aternos API written in Python · GitHub
Skip to content
This repository was archived by the owner on Feb 15, 2024. It is now read-only.

Repository files navigation

Python Aternos Logo

[UNMAINTAINED] Python Aternos

An unofficial Aternos API written in Python.
It uses aternos' private API and html parsing.

Warning

This library is no longer maintained, because:

  1. Aternos started detecting all automated requests (and, therefore, ToS violations) via JS code in AJAX_TOKEN which is executed incorrectly in Js2Py and requires a NodeJS DOM library (at least) or a browser engine. For details, see #85.
  2. Aternos frontend is protected with Cloudflare, so this library fails to parse pages in case of, for example, blocked or suspicious IP address (e.g. web hosting). CF shows IUAM page, often with captcha. We need a browser engine like undetected-chromedriver and an AI or a man solving captchas.
  3. Last Aternos API update broke nearly everything.
  4. I have no more motivation and not enough time to work on this, nor need in using Aternos.

I'm so sorry. If you want to continue development of python-aternos, contact me, but I think it's better to write from scratch.

Python Aternos supports:

  • Logging in to account with password (plain or hashed) or ATERNOS_SESSION cookie value
  • Saving session to the file and restoring
  • Changing username, email and password
  • Parsing Minecraft servers list
  • Parsing server info by its ID
  • Starting/stoping server, restarting, confirming/cancelling launch
  • Updating server info in real-time (see WebSocket API)
  • Changing server subdomain and MOTD (message-of-the-day)
  • Managing files, settings, players (whitelist, operators, etc.)

Install

Common

$ pip install python-aternos

Note for Windows users

Install lxml package from here if you have problems with it, and then execute:
pip install --no-deps python-aternos

Development

$ git clone https://github.com/DarkCat09/python-aternos.git
$ cd python-aternos
$ pip install -e .[dev]

Usage

To use Aternos API in your Python script, import it and login with your username and password or its MD5 hash.

Then request the servers list using list_servers().
You can start/stop your Aternos server, calling start() or stop().

Here is an example how to use the API:

# Importfrompython_aternosimportClient# Create objectatclient=Client()
# Log in# with username and passwordatclient.login('example', 'test123')
# ----OR----# with username and MD5 hashed passwordatclient.login_hashed('example', 'cc03e747a6afbbcbf8be7668acfebee5')
# ----OR----# with session cookieatclient.login_with_session('ATERNOS_SESSION cookie value')
# Get AternosAccount objectaternos=atclient.account# Get servers listservs=aternos.list_servers()
# Get the first servermyserv=servs[0]
# Startmyserv.start()
# Stopmyserv.stop()
# You can also find server by IPtestserv=Noneforservinservs:
ifserv.address=='test.aternos.org':
testserv=serviftestservisnotNone:
# Prints the server software and its version# (for example, "Vanilla 1.12.2")print(testserv.software, testserv.version)
# Starts servertestserv.start()

Changelog

VersionDescription
v0.3Implemented files API, added typization.
v0.4Implemented configuration API, some bugfixes.
v0.5The API was updated corresponding to new Aternos security methods. Huge thanks to lusm554.
v0.6/v1.0.0Code refactoring, websockets API and session saving to prevent detecting automation access.
v1.0.xLots of bugfixes, changed versioning (SemVer).
v1.1.xDocumentation, unit tests, pylint, bugfixes, changes in atwss.
v1.1.2/v2.0.0Solution for #25 (Cloudflare bypassing), bugfixes in JS parser.
v2.0.xDocumentation, automatically saving/restoring session, improvements in Files API.
v2.1.xFixes in websockets API, atconnect (including cookie refreshing fix). Support for captcha solving services (view #52).
v2.2.xNode.JS interpreter support.
v3.0.0Partially rewritten, API updates.
v3.0.5Unmaintained.
v3.1.xTODO: Full implementation of config API.
v3.2.xTODO: Shared access API and maybe Google Drive backups.

Reversed API Specification

Private Aternos API requests were captured into this HAR file and were imported to a Postman Workspace.
You can use both resources to explore the API.
Any help with improving this library is welcome.

License

License Notice:

Copyright 2021-2022 All contributors
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

Releases

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - DarkCat09/python-aternos: [UNMAINTAINED] Unofficial Aternos API written in Python · GitHub
Skip to content
This repository was archived by the owner on Feb 15, 2024. It is now read-only.

Repository files navigation

Python Aternos Logo

[UNMAINTAINED] Python Aternos

An unofficial Aternos API written in Python.
It uses aternos' private API and html parsing.

Warning

This library is no longer maintained, because:

  1. Aternos started detecting all automated requests (and, therefore, ToS violations) via JS code in AJAX_TOKEN which is executed incorrectly in Js2Py and requires a NodeJS DOM library (at least) or a browser engine. For details, see #85.
  2. Aternos frontend is protected with Cloudflare, so this library fails to parse pages in case of, for example, blocked or suspicious IP address (e.g. web hosting). CF shows IUAM page, often with captcha. We need a browser engine like undetected-chromedriver and an AI or a man solving captchas.
  3. Last Aternos API update broke nearly everything.
  4. I have no more motivation and not enough time to work on this, nor need in using Aternos.

I'm so sorry. If you want to continue development of python-aternos, contact me, but I think it's better to write from scratch.

Python Aternos supports:

  • Logging in to account with password (plain or hashed) or ATERNOS_SESSION cookie value
  • Saving session to the file and restoring
  • Changing username, email and password
  • Parsing Minecraft servers list
  • Parsing server info by its ID
  • Starting/stoping server, restarting, confirming/cancelling launch
  • Updating server info in real-time (see WebSocket API)
  • Changing server subdomain and MOTD (message-of-the-day)
  • Managing files, settings, players (whitelist, operators, etc.)

Install

Common

$ pip install python-aternos

Note for Windows users

Install lxml package from here if you have problems with it, and then execute:
pip install --no-deps python-aternos

Development

$ git clone https://github.com/DarkCat09/python-aternos.git
$ cd python-aternos
$ pip install -e .[dev]

Usage

To use Aternos API in your Python script, import it and login with your username and password or its MD5 hash.

Then request the servers list using list_servers().
You can start/stop your Aternos server, calling start() or stop().

Here is an example how to use the API:

# Importfrompython_aternosimportClient# Create objectatclient=Client()
# Log in# with username and passwordatclient.login('example', 'test123')
# ----OR----# with username and MD5 hashed passwordatclient.login_hashed('example', 'cc03e747a6afbbcbf8be7668acfebee5')
# ----OR----# with session cookieatclient.login_with_session('ATERNOS_SESSION cookie value')
# Get AternosAccount objectaternos=atclient.account# Get servers listservs=aternos.list_servers()
# Get the first servermyserv=servs[0]
# Startmyserv.start()
# Stopmyserv.stop()
# You can also find server by IPtestserv=Noneforservinservs:
ifserv.address=='test.aternos.org':
testserv=serviftestservisnotNone:
# Prints the server software and its version# (for example, "Vanilla 1.12.2")print(testserv.software, testserv.version)
# Starts servertestserv.start()

Changelog

VersionDescription
v0.3Implemented files API, added typization.
v0.4Implemented configuration API, some bugfixes.
v0.5The API was updated corresponding to new Aternos security methods. Huge thanks to lusm554.
v0.6/v1.0.0Code refactoring, websockets API and session saving to prevent detecting automation access.
v1.0.xLots of bugfixes, changed versioning (SemVer).
v1.1.xDocumentation, unit tests, pylint, bugfixes, changes in atwss.
v1.1.2/v2.0.0Solution for #25 (Cloudflare bypassing), bugfixes in JS parser.
v2.0.xDocumentation, automatically saving/restoring session, improvements in Files API.
v2.1.xFixes in websockets API, atconnect (including cookie refreshing fix). Support for captcha solving services (view #52).
v2.2.xNode.JS interpreter support.
v3.0.0Partially rewritten, API updates.
v3.0.5Unmaintained.
v3.1.xTODO: Full implementation of config API.
v3.2.xTODO: Shared access API and maybe Google Drive backups.

Reversed API Specification

Private Aternos API requests were captured into this HAR file and were imported to a Postman Workspace.
You can use both resources to explore the API.
Any help with improving this library is welcome.

License

License Notice:

Copyright 2021-2022 All contributors
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

Releases

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - DarkCat09/python-aternos: [UNMAINTAINED] Unofficial Aternos API written in Python · GitHub
Skip to content
This repository was archived by the owner on Feb 15, 2024. It is now read-only.

Repository files navigation

Python Aternos Logo

[UNMAINTAINED] Python Aternos

An unofficial Aternos API written in Python.
It uses aternos' private API and html parsing.

Warning

This library is no longer maintained, because:

  1. Aternos started detecting all automated requests (and, therefore, ToS violations) via JS code in AJAX_TOKEN which is executed incorrectly in Js2Py and requires a NodeJS DOM library (at least) or a browser engine. For details, see #85.
  2. Aternos frontend is protected with Cloudflare, so this library fails to parse pages in case of, for example, blocked or suspicious IP address (e.g. web hosting). CF shows IUAM page, often with captcha. We need a browser engine like undetected-chromedriver and an AI or a man solving captchas.
  3. Last Aternos API update broke nearly everything.
  4. I have no more motivation and not enough time to work on this, nor need in using Aternos.

I'm so sorry. If you want to continue development of python-aternos, contact me, but I think it's better to write from scratch.

Python Aternos supports:

  • Logging in to account with password (plain or hashed) or ATERNOS_SESSION cookie value
  • Saving session to the file and restoring
  • Changing username, email and password
  • Parsing Minecraft servers list
  • Parsing server info by its ID
  • Starting/stoping server, restarting, confirming/cancelling launch
  • Updating server info in real-time (see WebSocket API)
  • Changing server subdomain and MOTD (message-of-the-day)
  • Managing files, settings, players (whitelist, operators, etc.)

Install

Common

$ pip install python-aternos

Note for Windows users

Install lxml package from here if you have problems with it, and then execute:
pip install --no-deps python-aternos

Development

$ git clone https://github.com/DarkCat09/python-aternos.git
$ cd python-aternos
$ pip install -e .[dev]

Usage

To use Aternos API in your Python script, import it and login with your username and password or its MD5 hash.

Then request the servers list using list_servers().
You can start/stop your Aternos server, calling start() or stop().

Here is an example how to use the API:

# Importfrompython_aternosimportClient# Create objectatclient=Client()
# Log in# with username and passwordatclient.login('example', 'test123')
# ----OR----# with username and MD5 hashed passwordatclient.login_hashed('example', 'cc03e747a6afbbcbf8be7668acfebee5')
# ----OR----# with session cookieatclient.login_with_session('ATERNOS_SESSION cookie value')
# Get AternosAccount objectaternos=atclient.account# Get servers listservs=aternos.list_servers()
# Get the first servermyserv=servs[0]
# Startmyserv.start()
# Stopmyserv.stop()
# You can also find server by IPtestserv=Noneforservinservs:
ifserv.address=='test.aternos.org':
testserv=serviftestservisnotNone:
# Prints the server software and its version# (for example, "Vanilla 1.12.2")print(testserv.software, testserv.version)
# Starts servertestserv.start()

Changelog

VersionDescription
v0.3Implemented files API, added typization.
v0.4Implemented configuration API, some bugfixes.
v0.5The API was updated corresponding to new Aternos security methods. Huge thanks to lusm554.
v0.6/v1.0.0Code refactoring, websockets API and session saving to prevent detecting automation access.
v1.0.xLots of bugfixes, changed versioning (SemVer).
v1.1.xDocumentation, unit tests, pylint, bugfixes, changes in atwss.
v1.1.2/v2.0.0Solution for #25 (Cloudflare bypassing), bugfixes in JS parser.
v2.0.xDocumentation, automatically saving/restoring session, improvements in Files API.
v2.1.xFixes in websockets API, atconnect (including cookie refreshing fix). Support for captcha solving services (view #52).
v2.2.xNode.JS interpreter support.
v3.0.0Partially rewritten, API updates.
v3.0.5Unmaintained.
v3.1.xTODO: Full implementation of config API.
v3.2.xTODO: Shared access API and maybe Google Drive backups.

Reversed API Specification

Private Aternos API requests were captured into this HAR file and were imported to a Postman Workspace.
You can use both resources to explore the API.
Any help with improving this library is welcome.

License

License Notice:

Copyright 2021-2022 All contributors
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

Releases

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); GitHub - DarkCat09/python-aternos: [UNMAINTAINED] Unofficial Aternos API written in Python · GitHub
Skip to content
This repository was archived by the owner on Feb 15, 2024. It is now read-only.

Repository files navigation

Python Aternos Logo

[UNMAINTAINED] Python Aternos

An unofficial Aternos API written in Python.
It uses aternos' private API and html parsing.

Warning

This library is no longer maintained, because:

  1. Aternos started detecting all automated requests (and, therefore, ToS violations) via JS code in AJAX_TOKEN which is executed incorrectly in Js2Py and requires a NodeJS DOM library (at least) or a browser engine. For details, see #85.
  2. Aternos frontend is protected with Cloudflare, so this library fails to parse pages in case of, for example, blocked or suspicious IP address (e.g. web hosting). CF shows IUAM page, often with captcha. We need a browser engine like undetected-chromedriver and an AI or a man solving captchas.
  3. Last Aternos API update broke nearly everything.
  4. I have no more motivation and not enough time to work on this, nor need in using Aternos.

I'm so sorry. If you want to continue development of python-aternos, contact me, but I think it's better to write from scratch.

Python Aternos supports:

  • Logging in to account with password (plain or hashed) or ATERNOS_SESSION cookie value
  • Saving session to the file and restoring
  • Changing username, email and password
  • Parsing Minecraft servers list
  • Parsing server info by its ID
  • Starting/stoping server, restarting, confirming/cancelling launch
  • Updating server info in real-time (see WebSocket API)
  • Changing server subdomain and MOTD (message-of-the-day)
  • Managing files, settings, players (whitelist, operators, etc.)

Install

Common

$ pip install python-aternos

Note for Windows users

Install lxml package from here if you have problems with it, and then execute:
pip install --no-deps python-aternos

Development

$ git clone https://github.com/DarkCat09/python-aternos.git
$ cd python-aternos
$ pip install -e .[dev]

Usage

To use Aternos API in your Python script, import it and login with your username and password or its MD5 hash.

Then request the servers list using list_servers().
You can start/stop your Aternos server, calling start() or stop().

Here is an example how to use the API:

# Importfrompython_aternosimportClient# Create objectatclient=Client()
# Log in# with username and passwordatclient.login('example', 'test123')
# ----OR----# with username and MD5 hashed passwordatclient.login_hashed('example', 'cc03e747a6afbbcbf8be7668acfebee5')
# ----OR----# with session cookieatclient.login_with_session('ATERNOS_SESSION cookie value')
# Get AternosAccount objectaternos=atclient.account# Get servers listservs=aternos.list_servers()
# Get the first servermyserv=servs[0]
# Startmyserv.start()
# Stopmyserv.stop()
# You can also find server by IPtestserv=Noneforservinservs:
ifserv.address=='test.aternos.org':
testserv=serviftestservisnotNone:
# Prints the server software and its version# (for example, "Vanilla 1.12.2")print(testserv.software, testserv.version)
# Starts servertestserv.start()

Changelog

VersionDescription
v0.3Implemented files API, added typization.
v0.4Implemented configuration API, some bugfixes.
v0.5The API was updated corresponding to new Aternos security methods. Huge thanks to lusm554.
v0.6/v1.0.0Code refactoring, websockets API and session saving to prevent detecting automation access.
v1.0.xLots of bugfixes, changed versioning (SemVer).
v1.1.xDocumentation, unit tests, pylint, bugfixes, changes in atwss.
v1.1.2/v2.0.0Solution for #25 (Cloudflare bypassing), bugfixes in JS parser.
v2.0.xDocumentation, automatically saving/restoring session, improvements in Files API.
v2.1.xFixes in websockets API, atconnect (including cookie refreshing fix). Support for captcha solving services (view #52).
v2.2.xNode.JS interpreter support.
v3.0.0Partially rewritten, API updates.
v3.0.5Unmaintained.
v3.1.xTODO: Full implementation of config API.
v3.2.xTODO: Shared access API and maybe Google Drive backups.

Reversed API Specification

Private Aternos API requests were captured into this HAR file and were imported to a Postman Workspace.
You can use both resources to explore the API.
Any help with improving this library is welcome.

License

License Notice:

Copyright 2021-2022 All contributors
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

Releases

Used by

Contributors

Languages