Skip to main content

Python library for Atelier 801 automation

Project description

Atelier801 Python Library

PyPI PyPI - Python Version PyPI - License GitHub 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.2.tar.gz (18.7 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.2-py3-none-any.whl (18.7 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: atelier801-1.0.2.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

Hashes for atelier801-1.0.2.tar.gz
Algorithm Hash digest
SHA256 a1aef07be5b7fdbffa52b874962e15f08995bb94c76e14f0f497db6333e612c1
MD5 5b1231b30c768a888f742ca8e522d78c
BLAKE2b-256 808d609d142f88ddd6f7dcb705523d4cabbd92bf46a80fda0ee30174189b0fb4

See more details on using hashes here.

File details

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

File metadata

  • Download URL: atelier801-1.0.2-py3-none-any.whl
  • Upload date:
  • Size: 18.7 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.2-py3-none-any.whl
Algorithm Hash digest
SHA256 b0323df052cae8a00e732c4aef665c7b20539c119ac612ea7084674c24ff1c1d
MD5 1b757138857879941887f5c031d16bca
BLAKE2b-256 0d529d59a9c1ef2a5bb900a30d11800e42afb853c67156e970931243944e261f

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