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_settings_page()

# "Nouveau mail" = can change email (not verified)
# "form_changer_mail" with "hidden" class = certified (cannot change)
# "form_changer_mail" without "hidden" = can change email

if 'Nouveau mail' in html:
    print("Can change email - not verified yet")
elif 'form_changer_mail' in html:
    idx = html.find('form_changer_mail')
    form_section = html[idx:idx+200]
    if 'hidden' in form_section:
        print("Certified - cannot change via API")
    else:
        print("Can change email - not verified yet")
else:
    print("Cannot determine email status")

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

Uploaded Python 3

File details

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

File metadata

  • Download URL: atelier801-1.0.7.tar.gz
  • Upload date:
  • Size: 18.9 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.7.tar.gz
Algorithm Hash digest
SHA256 fc9aedd9bc3455be287efa265ad5209fc4ebda62e6863e988da51d13754b5043
MD5 93b82902c2b03026b2e667ee3f0ce136
BLAKE2b-256 cfcfeaca4151a10992f5cea4bc9d68fa5d1e17487244e5a638faf9c3335dd949

See more details on using hashes here.

File details

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

File metadata

  • Download URL: atelier801-1.0.7-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.7-py3-none-any.whl
Algorithm Hash digest
SHA256 7e89d1b5d489a5d8b4f198d113b2f13ddbb4905d82a493748957e2de588249d4
MD5 cab8d01235c4a6b7dc1e2b8999be4cde
BLAKE2b-256 31c5cfa831820b6f1f83fafe251b67fabe5d28017be23e6149f864c635b8a74a

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