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.3.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.3-py3-none-any.whl (18.7 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: atelier801-1.0.3.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.3.tar.gz
Algorithm Hash digest
SHA256 a0b8c49a49e8c42a442655db1426236f3ad449357a06d66abc6068415921e414
MD5 4f8b05771b8afa03379f330e76d39bda
BLAKE2b-256 bd773ce40cb4726ff8c43a3393df01debee349a971a1afb24d2264377406adca

See more details on using hashes here.

File details

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

File metadata

  • Download URL: atelier801-1.0.3-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.3-py3-none-any.whl
Algorithm Hash digest
SHA256 676f58a2faed1113246249fd977c7185bf465d47aa00a3e297cd49c6e9b70739
MD5 c2c48b8c76b824080278c5dff7502ea0
BLAKE2b-256 78f6ebb9a7f0825badb5819732613d43ba64b97d9d75bec7ca75d2963cbe569b

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