Skip to main content

Python library for Atelier 801 automation

Project description

Atelier801 Python Library

Python Version License Version Stars

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 name
  • email - Masked email (e.g., "p***@w***.net")
  • certified - Has validated email (True = has validated, False = no validated)
  • is_banned - Ban status
  • ban_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.

Fork Star

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

atelier801-1.0.0.tar.gz (18.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

atelier801-1.0.0-py3-none-any.whl (18.4 kB view details)

Uploaded Python 3

File details

Details for the file atelier801-1.0.0.tar.gz.

File metadata

  • Download URL: atelier801-1.0.0.tar.gz
  • Upload date:
  • Size: 18.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.0

File hashes

Hashes for atelier801-1.0.0.tar.gz
Algorithm Hash digest
SHA256 50e1404956a7f8d2d764d33cfaa9c623ca211186aee0d110127fe7fffc04d71c
MD5 4c2fc382ab9e01e6d976c69b48db17be
BLAKE2b-256 0b3f21ff7b11ea4a0fd6c9e59f79d0d0005118760c107c9b619565129faeadba

See more details on using hashes here.

File details

Details for the file atelier801-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: atelier801-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 18.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.0

File hashes

Hashes for atelier801-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e3e373594a421dd34c6c66fb9d4f70aab59b5498f4b15a645a8123cfb117bc4f
MD5 add70b07221d7c83ec3c9999aa71e13b
BLAKE2b-256 ce954f971dc809b91776ad8019d52618d7c9767f7de819c690bda9bbe5bfabf7

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page