Async Python library for mrkt
Project description
amrkt
Async Python library for mrkt marketplace
A fast, type-safe, and secure library with automatic authentication handling.
Features
- 🚀 Async - All operations are asynchronous
- 🔐 Auto-authentication - Token refresh handled automatically
- 📦 Type-safe - Full Pydantic models with type hints
- 🎯 Simple API - Intuitive method names
Installation
pip install amrkt
Or install from source:
git clone https://github.com/thebrainair/amrkt.git
cd amrkt
pip install -e .
Requirements
- Python 3.9+
- Telegram API credentials from my.telegram.org
Quick Start
import asyncio
from amrkt import MarketClient
async def main():
async with MarketClient(
api_id=12345, # Your API ID
api_hash='your_api_hash', # Your API hash
session_name='my_session' # Session file name
) as client:
# Get user info
user = await client.get_user_info()
print(f"Hello, {user.full_name}!")
# Check balance
balance = await client.get_balance()
print(f"Balance: {balance.hard_ton:.2f} TON")
asyncio.run(main())
API Reference
MarketClient
Main client class for interacting with the market API.
MarketClient(
api_id: int, # Telegram API ID
api_hash: str, # Telegram API hash
session_name: str = "amrkt", # Pyrogram session name
workdir: str = "." # Session file directory
)
User Methods
get_user_info() → UserInfo
Get current user profile information.
user = await client.get_user_info()
print(user.id) # User ID
print(user.full_name) # Display name
print(user.is_vip) # VIP status
print(user.wallet.ton) # TON wallet address
print(user.ref_url) # Referral URL
Balance Methods
get_balance() → Balance
Get account balance information.
balance = await client.get_balance()
# Raw values (in nanoTON)
print(balance.soft) # Soft balance
print(balance.hard) # Hard balance
print(balance.stars) # Stars count
# Converted to TON (helper properties)
print(balance.soft_ton) # Soft in TON
print(balance.hard_ton) # Hard in TON
print(balance.total_hard_ton) # Total hard in TON
Gift Methods
search_gifts(...) → GiftList
Search for gifts on sale with filters.
gifts = await client.search_gifts(
collection_names=["Lunar Snake"], # Filter by collection
model_names=["Albino"], # Filter by model
backdrop_names=[], # Filter by backdrop
symbol_names=[], # Filter by symbol
ordering="Price", # Sort: "Price", "Date"
low_to_high=True, # Sort ascending
min_price=None, # Min price (nanoTON)
max_price=None, # Max price (nanoTON)
count=20, # Results per page
cursor="", # Pagination cursor
query=None, # Search query
)
print(f"Found {gifts.total} gifts")
for gift in gifts.items:
print(f"{gift.name}: {gift.sale_price_ton:.2f} TON")
get_gift(gift_id) → Gift
Get detailed information about a specific gift.
gift = await client.get_gift("abc123")
print(gift.id) # Gift ID
print(gift.name) # Gift name
print(gift.collection_name) # Collection
print(gift.model_name) # Model
print(gift.sale_price_ton) # Price in TON
print(gift.is_on_sale) # Sale status
print(gift.model_rarity_percent) # Rarity %
buy_gifts(gift_ids) → List[PurchaseResult]
Purchase gifts by their IDs.
results = await client.buy_gifts(["gift_id_1", "gift_id_2"])
for result in results:
print(f"Bought: {result.user_gift.name}")
print(f"Paid: {result.price_ton:.2f} TON")
Inventory Methods
get_inventory(...) → GiftList
Get user's owned gifts. Accepts same parameters as search_gifts().
inventory = await client.get_inventory(
count=50,
ordering="Price",
low_to_high=False
)
print(f"You own {inventory.total} gifts")
for gift in inventory.items:
on_sale = "🟢 On sale" if gift.is_on_sale else "⚪ Not listed"
print(f"{gift.name} - {on_sale}")
return_gifts(gift_ids) → bool
Return gifts back to Telegram.
success = await client.return_gifts(["gift_id"])
if success:
print("Gift returned successfully!")
Feed Methods
get_feed() → FeedResponse
Get market activity feed including listings, sales, and price changes.
feed = await client.get_feed()
for item in feed.items:
print(f"[{item.type}] {item.gift.title}")
print(f" Price: {item.amount_ton:.2f} TON")
print(f" Date: {item.date}")
Item types:
listing- New gift listed for salesale- Gift was soldchange_price- Price was changed
Data Models
UserInfo
| Field | Type | Description |
|---|---|---|
id |
int |
User ID |
full_name |
str |
Display name |
wallet |
Wallet |
Wallet info |
is_vip |
bool |
VIP status |
ref_url |
str |
Referral URL |
Balance
| Field | Type | Description |
|---|---|---|
soft / soft_ton |
int / float |
Soft balance |
hard / hard_ton |
int / float |
Hard balance |
stars |
int |
Stars count |
spices |
int |
Spices count |
friends_count |
int |
Referral count |
Gift
| Field | Type | Description |
|---|---|---|
id |
str |
Gift ID |
name |
str |
Gift name |
gift_id |
int |
Telegram gift ID |
gift_id_string |
str |
Telegram gift ID as string |
number |
int |
Gift number |
title |
str |
Gift title |
collection_name |
str |
Collection name |
collection_title |
str |
Collection title |
model_name |
str |
Model name |
model_title |
str |
Model title |
model_rarity_per_mille |
int |
Model rarity (per mille) |
backdrop_name |
str |
Backdrop name |
backdrop_rarity_per_mille |
int |
Backdrop rarity (per mille) |
symbol_name |
str |
Symbol name |
symbol_rarity_per_mille |
int |
Symbol rarity (per mille) |
sale_price / sale_price_ton |
int / float |
Sale price |
sale_price_without_fee |
int |
Price without fee |
is_on_sale |
bool |
Sale status |
is_on_auction |
bool |
Auction status |
is_locked |
bool |
Lock status |
is_mine |
bool |
Ownership status |
sales_count |
int |
Number of sales |
unlock_date |
str |
Unlock date |
received_date |
str |
Date received |
export_date |
str |
Export date |
gift_type |
str |
Gift type ("Upgraded", etc.) |
lucky_buy |
bool |
Lucky buy status |
craftable |
bool |
Craftable status |
premarket_status |
str |
Premarket status |
model_rarity_percent |
float |
Model rarity % (property) |
backdrop_rarity_percent |
float |
Backdrop rarity % (property) |
symbol_rarity_percent |
float |
Symbol rarity % (property) |
FeedItem
| Field | Type | Description |
|---|---|---|
type |
str |
Event type: "listing", "sale", "change_price" |
id |
str |
Event ID |
gift |
Gift |
Gift object |
amount / amount_ton |
int / float |
Price in nanoTON / TON |
date |
datetime |
Event timestamp |
FeedResponse
| Field | Type | Description |
|---|---|---|
items |
List[FeedItem] |
List of feed items |
Exceptions
from amrkt import (
MarketError, # Base exception
AuthenticationError, # Auth/token issues
APIError, # API errors (has status_code)
NotFoundError, # Resource not found
NotForSaleError, # Gift not on sale
InsufficientBalanceError, # Not enough TON
)
Example error handling:
from amrkt import MarketClient, NotFoundError, APIError
try:
gift = await client.get_gift("invalid_id")
except NotFoundError:
print("Gift not found!")
except APIError as e:
print(f"API error {e.status_code}: {e.response_text}")
Advanced Usage
Custom Session Directory
client = MarketClient(
api_id=12345,
api_hash="hash",
session_name="my_bot",
workdir="/path/to/sessions"
)
Pagination
cursor = ""
all_gifts = []
while True:
result = await client.search_gifts(
collection_names=["Lunar Snake"],
count=50,
cursor=cursor
)
all_gifts.extend(result.items)
if not result.cursor or len(result.items) < 50:
break
cursor = result.cursor
print(f"Loaded {len(all_gifts)} gifts total")
License
MIT License - see LICENSE file.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file amrkt-1.1.0.tar.gz.
File metadata
- Download URL: amrkt-1.1.0.tar.gz
- Upload date:
- Size: 9.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2537e64e496561c150c419f01f5ee1f7734e6b9a371831b5b0141a4d38c96af7
|
|
| MD5 |
68673c125c194f460f280fd0dc1bd841
|
|
| BLAKE2b-256 |
6564290448616f4b12b7c698dc2d320c6350230db11fbed6d1382f7add5187f9
|
File details
Details for the file amrkt-1.1.0-py3-none-any.whl.
File metadata
- Download URL: amrkt-1.1.0-py3-none-any.whl
- Upload date:
- Size: 11.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
efed8364e4155062c8d2d784287db2586c6335c563c8b7866ed562fcf61b3a34
|
|
| MD5 |
ef4d095324097e49006a74c90b624cc2
|
|
| BLAKE2b-256 |
099abbea5faf532df0267d73fd6cb18833b73f23e5fca5baba4e4f2286ebfd62
|