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.5.tar.gz (18.8 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.5-py3-none-any.whl (18.8 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: atelier801-1.0.5.tar.gz
  • Upload date:
  • Size: 18.8 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.5.tar.gz
Algorithm Hash digest
SHA256 87a68f990c9c32335490365db7dae067ffceb67115d43c478854bf1c8152a426
MD5 9c9c9c605096742676c919e7f50cb669
BLAKE2b-256 f737a0936884720aa46f493e9d735e0eb15eb10248fdc209a14af539172298d4

See more details on using hashes here.

File details

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

File metadata

  • Download URL: atelier801-1.0.5-py3-none-any.whl
  • Upload date:
  • Size: 18.8 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.5-py3-none-any.whl
Algorithm Hash digest
SHA256 8b207c14bccb08b1c32e705ce7b9de24ad5d4145659ba960c50d343842eeb7b1
MD5 dd59480a81633dbe470bcefe5395c910
BLAKE2b-256 04fa9d558ac768a49e06899f9a113eaa8c85e19cf9f216e31019ed57cde3e7b8

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