Source code for artifacts.domains.ge
"""Grand Exchange domain -- Grand Exchange operations."""
from __future__ import annotations
from ..cooldown import _auto_cooldown
from ..models.responses import GEOrderTransactionSchema, GETransactionListSchema
from ._base import CharacterDomain
[docs]
class GrandExchangeDomain(CharacterDomain):
"""Manage Grand Exchange operations.
Accessed via ``character.ge``::
await char.ge.sell(code="iron_ore", quantity=10, price=5)
await char.ge.buy(id="order-123", quantity=5)
await char.ge.cancel(id="order-123")
"""
[docs]
@_auto_cooldown
async def buy(self, *, id: str, quantity: int) -> GETransactionListSchema:
"""Buy items from an existing sell order."""
return await self._http.post_model(
f"{self._base}/grandexchange/buy",
GETransactionListSchema,
json={"id": id, "quantity": quantity},
)
[docs]
@_auto_cooldown
async def sell(
self, *, code: str, quantity: int, price: int
) -> GEOrderTransactionSchema:
"""Create a sell order on the Grand Exchange."""
return await self._http.post_model(
f"{self._base}/grandexchange/create-sell-order",
GEOrderTransactionSchema,
json={"code": code, "quantity": quantity, "price": price},
)
[docs]
@_auto_cooldown
async def create_buy_order(
self, *, code: str, quantity: int, price: int
) -> GEOrderTransactionSchema:
"""Create a buy order on the Grand Exchange."""
return await self._http.post_model(
f"{self._base}/grandexchange/create-buy-order",
GEOrderTransactionSchema,
json={"code": code, "quantity": quantity, "price": price},
)
[docs]
@_auto_cooldown
async def fill(self, *, id: str, quantity: int) -> GETransactionListSchema:
"""Fill an existing buy order."""
return await self._http.post_model(
f"{self._base}/grandexchange/fill",
GETransactionListSchema,
json={"id": id, "quantity": quantity},
)
[docs]
@_auto_cooldown
async def cancel(self, *, id: str) -> GEOrderTransactionSchema:
"""Cancel an existing order."""
return await self._http.post_model(
f"{self._base}/grandexchange/cancel",
GEOrderTransactionSchema,
json={"id": id},
)