Python library for Atelier 801 automation
Project description
Atelier801 Python Library
A comprehensive Python library for automating Atelier 801 account operations including login, email management, certification, and account status checking.
Features
| Feature | Description |
|---|---|
| Secure Login | Login with encrypted password (SHAKikoo algorithm) |
| Email Management | Change account email to temporary MailTM addresses |
| Certification | Request and submit certification codes |
| Status Check | Check if account has validated email, banned, or valid |
| Email Verification | Validate email changes via link |
| Account Storage | Save email associations for multiple accounts |
Installation
From PyPI (Recommended)
pip install atelier801
From Source
git clone https://github.com/Lixense/atelier801.git
cd atelier801
pip install -e .
Quick Start
Login to Account
from atelier801 import Atelier801
client = Atelier801()
if client.login("Player#1234", "mypassword"):
print("Successfully logged in!")
Check Account Status
client = Atelier801()
client.login("Player#1234", "mypassword")
status = client.get_account_status()
print(f"Email: {status['email']}")
print(f"Has Validated Email: {status['certified']}")
print(f"Banned: {status['is_banned']}")
Important: Email Change Restriction
Email change via API only works for accounts that do NOT have a validated email address.
What does this mean?
| Account State | Description | API Email Change |
|---|---|---|
| No Validated Email | "Nouveau mail" shown - email not verified yet | Works |
| Has Validated Email | "Vous devez d'abord certifier" - email is verified | Does NOT work |
How to check?
client = Atelier801()
client.login("Player#1234", "password")
html = client.get_account_page()
# "Nouveau mail" = can change email (not verified)
# "Vous devez d'abord certifier" = has validated email (cannot change)
# "form_changer_mail" with "hidden" = certified (cannot change)
if 'Nouveau mail' in html:
print("Can change email - not verified yet")
elif 'Vous devez d\'abord certifier' in html:
print("Has validated email - cannot change via API")
elif 'form_changer_mail' in html and 'hidden' not in html[html.find('form_changer_mail'):]:
print("Certified - cannot change via API")
else:
print("Cannot change email")
This is an Atelier 801 website restriction, not a library limitation.
Full Example: Email Change Flow
from atelier801 import Atelier801
from mailtm import MailTM
import time
def change_email_flow(username, password):
# Step 1: Create MailTM account
mailtm = MailTM()
email, mailtm_password = mailtm.create_account()
print(f"Created: {email}")
# Step 2: Login to Atelier 801
client = Atelier801()
client.login(username, password)
# Step 3: Check if can change email
html = client.get_account_page()
if 'form_changer_mail' in html:
idx = html.find('form_changer_mail')
form_section = html[idx:idx+100]
if 'hidden' in form_section:
# Step 4: Change email
result = client.change_email(email)
print(result['message'])
# Step 5: Get validation link
mailtm.login(email, mailtm_password)
link = mailtm.get_validation_link(timeout=60)
if link:
# Step 6: Validate
client.validate_email(link)
time.sleep(2)
# Step 7: Verify change
if client.check_email_changed(email):
print(f"SUCCESS! Email changed to {email[0]}***")
# Save for later
mailtm.save_with_association(email, mailtm_password, username)
else:
print("Change not confirmed")
else:
print("Account has validated email - change via game UI")
else:
print("No email form available")
# Run
change_email_flow("Player#1234", "mypassword")
API Reference
Atelier801 Client
Atelier801(session=None)
Create a new client instance.
client = Atelier801()
# or with custom session
import requests
sess = requests.Session()
client = Atelier801(session=sess)
login(username, password)
Login to account. Returns bool.
if client.login("Player#1234", "password"):
print("Logged in!")
get_account_status(force_refresh=False)
Get account info. Returns dict with:
username- Account nameemail- Masked email (e.g., "p***@w***.net")certified- Has validated email (True = has validated, False = no validated)is_banned- Ban statusban_info- Ban details if banned
status = client.get_account_status()
print(status['email'])
print(status['certified'])
change_email(new_email)
Request email change. Returns dict with success and message.
result = client.change_email("newemail@example.com")
print(result['message'])
validate_email(validation_link)
Visit validation link from email. Returns bool.
client.validate_email("https://atelier801.com/validate-email?id=...")
check_email_changed(new_email)
Verify email was changed. Returns bool.
if client.check_email_changed("newemail@example.com"):
print("Email changed successfully!")
request_certification()
Request certification email. Returns dict.
result = client.request_certification()
submit_certification_code(code)
Submit certification code. Returns dict with success.
result = client.submit_certification_code("ABC12")
MailTM Client
MailTM(credentials_file="mailtm_accounts.txt")
Create MailTM client.
mailtm = MailTM()
create_account(password=None, domain=None)
Create new temporary email. Returns (email, password).
email, password = mailtm.create_account()
login(email, password)
Login to MailTM account.
mailtm.login(email, password)
get_inbox(limit=10)
Get inbox messages. Returns list.
inbox = mailtm.get_inbox()
get_message(message_id)
Get full message content.
msg = mailtm.get_message("abc123")
print(msg['text']) # Plain text
print(msg['html']) # HTML content
get_validation_link(timeout=60)
Get email validation link from inbox. Returns str or None.
link = mailtm.get_validation_link()
get_certification_code(timeout=60)
Get certification code from inbox. Returns str or None.
code = mailtm.get_certification_code()
save_with_association(email, password, atelier_account, filename="em.txt")
Save MailTM credentials with associated Atelier account.
mailtm.save_with_association(email, password, "Player#1234")
load_associations(filename="em.txt")
Load all saved associations. Returns list of tuples.
assocs = MailTM.load_associations()
for email, pwd, account in assocs:
print(f"{email} -> {account}")
File Formats
mailtm_accounts.txt
email:password
email:password
em.txt (Associations)
email:password:account#
email:password:Account#1234
Error Handling
from atelier801 import Atelier801
try:
client = Atelier801()
client.login("Player#1234", "password")
status = client.get_account_status()
if status['is_banned']:
print(f"Banned! Reason: {status['ban_info']['reason']}")
except Exception as e:
print(f"Error: {e}")
License
MIT License - See LICENSE file for details.
Support
For issues and feature requests, please open an issue on GitHub.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file atelier801-1.0.4.tar.gz.
File metadata
- Download URL: atelier801-1.0.4.tar.gz
- Upload date:
- Size: 18.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
db3552e759a4ae08b197f9fbc9412ebb192799261b90efb622cc3d55c9792320
|
|
| MD5 |
f27e13b20437f5aa614ca694d18f34c8
|
|
| BLAKE2b-256 |
985d6bdc17512f8759eb243347521824207620b04eadb90f895855eef41cffef
|
File details
Details for the file atelier801-1.0.4-py3-none-any.whl.
File metadata
- Download URL: atelier801-1.0.4-py3-none-any.whl
- Upload date:
- Size: 18.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
48cbf734c30ada3f142e4aa09107a06dee3c7ffd55eae9d25d1dc87d4dbe8cad
|
|
| MD5 |
f898326844c91366f11def095e0d9396
|
|
| BLAKE2b-256 |
8b4951615eecee4b8737d9dcf734b9206c567a4d0895f99a2ae26d7a4ac4d771
|