Module runescapeapi.beasts
Expand source code
import json
from dataclasses import dataclass
from typing import Dict, List
import requests
from runescapeapi import BASE_URL
AREA_NAMES_URL: str = f"{BASE_URL}m=itemdb_rs/bestiary/areaNames.json"
"""
returns data like `List[str]` of area names compatable with `AreaBeasts`
"""
SLAYER_CAT_NAMES: str = f"{BASE_URL}m=itemdb_rs/bestiary/slayerCatNames.json"
"""
`Dict[str, int]`
"""
WEAKNESS_NAMES: str = f"{BASE_URL}m=itemdb_rs/bestiary/weaknessNames.json"
"""
`Dict[str, int]`
"""
@dataclass
class BeastData:
name: str
beast_id: int
members: bool
weakness: str
level: int
life_points: int
defence: int
attack: int
magic: int
ranged: int
xp: float
slayer_level: int
slayer_cat: str
size: int
attackable: bool
aggressive: bool
poisonous: bool
description: str
areas: List[str]
animations: Dict[str, int]
@staticmethod
def url(beast_id: int) -> str:
return (
f"{BASE_URL}m=itemdb_rs/bestiary/beastData.json?beastid={beast_id}"
)
@staticmethod
def from_response(raw_responce: str) -> "BeastData":
print(raw_responce)
j: dict[str:str] = json.loads(raw_responce)
j.setdefault("slayerlevel", None)
j.setdefault("slayercat", None)
return BeastData(
name=j["name"],
beast_id=j["id"],
members=j["members"],
weakness=j["weakness"],
level=j["level"],
life_points=j["lifepoints"],
defence=j["defence"],
attack=j["attack"],
magic=j["magic"],
ranged=j["ranged"],
xp=float(j["xp"]),
slayer_level=j["slayerlevel"],
slayer_cat=j["slayercat"],
size=j["size"],
attackable=j["attackable"],
aggressive=j["aggressive"],
poisonous=j["poisonous"],
description=j["description"],
areas=j["areas"],
animations=j["animations"],
)
@classmethod
def try_fetch(cls, beast_id: int) -> "BeastData":
url = cls.url(beast_id)
print(url)
r = requests.get(url).text
print(r)
return cls.from_response(r)
print()
print(BeastData.try_fetch(89)) # UNICORN?
Global variables
var AREA_NAMES_URL : str
-
returns data like
List[str]
of area names compatable withAreaBeasts
var SLAYER_CAT_NAMES : str
-
Dict[str, int]
var WEAKNESS_NAMES : str
-
Dict[str, int]
Classes
class BeastData (name: str, beast_id: int, members: bool, weakness: str, level: int, life_points: int, defence: int, attack: int, magic: int, ranged: int, xp: float, slayer_level: int, slayer_cat: str, size: int, attackable: bool, aggressive: bool, poisonous: bool, description: str, areas: List[str], animations: Dict[str, int])
-
BeastData(name: str, beast_id: int, members: bool, weakness: str, level: int, life_points: int, defence: int, attack: int, magic: int, ranged: int, xp: float, slayer_level: int, slayer_cat: str, size: int, attackable: bool, aggressive: bool, poisonous: bool, description: str, areas: List[str], animations: Dict[str, int])
Expand source code
@dataclass class BeastData: name: str beast_id: int members: bool weakness: str level: int life_points: int defence: int attack: int magic: int ranged: int xp: float slayer_level: int slayer_cat: str size: int attackable: bool aggressive: bool poisonous: bool description: str areas: List[str] animations: Dict[str, int] @staticmethod def url(beast_id: int) -> str: return ( f"{BASE_URL}m=itemdb_rs/bestiary/beastData.json?beastid={beast_id}" ) @staticmethod def from_response(raw_responce: str) -> "BeastData": print(raw_responce) j: dict[str:str] = json.loads(raw_responce) j.setdefault("slayerlevel", None) j.setdefault("slayercat", None) return BeastData( name=j["name"], beast_id=j["id"], members=j["members"], weakness=j["weakness"], level=j["level"], life_points=j["lifepoints"], defence=j["defence"], attack=j["attack"], magic=j["magic"], ranged=j["ranged"], xp=float(j["xp"]), slayer_level=j["slayerlevel"], slayer_cat=j["slayercat"], size=j["size"], attackable=j["attackable"], aggressive=j["aggressive"], poisonous=j["poisonous"], description=j["description"], areas=j["areas"], animations=j["animations"], ) @classmethod def try_fetch(cls, beast_id: int) -> "BeastData": url = cls.url(beast_id) print(url) r = requests.get(url).text print(r) return cls.from_response(r)
Class variables
var aggressive : bool
var animations : Dict[str, int]
var areas : List[str]
var attack : int
var attackable : bool
var beast_id : int
var defence : int
var description : str
var level : int
var life_points : int
var magic : int
var members : bool
var name : str
var poisonous : bool
var ranged : int
var size : int
var slayer_cat : str
var slayer_level : int
var weakness : str
var xp : float
Static methods
def from_response(raw_responce: str) ‑> BeastData
-
Expand source code
@staticmethod def from_response(raw_responce: str) -> "BeastData": print(raw_responce) j: dict[str:str] = json.loads(raw_responce) j.setdefault("slayerlevel", None) j.setdefault("slayercat", None) return BeastData( name=j["name"], beast_id=j["id"], members=j["members"], weakness=j["weakness"], level=j["level"], life_points=j["lifepoints"], defence=j["defence"], attack=j["attack"], magic=j["magic"], ranged=j["ranged"], xp=float(j["xp"]), slayer_level=j["slayerlevel"], slayer_cat=j["slayercat"], size=j["size"], attackable=j["attackable"], aggressive=j["aggressive"], poisonous=j["poisonous"], description=j["description"], areas=j["areas"], animations=j["animations"], )
def try_fetch(beast_id: int) ‑> BeastData
-
Expand source code
@classmethod def try_fetch(cls, beast_id: int) -> "BeastData": url = cls.url(beast_id) print(url) r = requests.get(url).text print(r) return cls.from_response(r)
def url(beast_id: int) ‑> str
-
Expand source code
@staticmethod def url(beast_id: int) -> str: return ( f"{BASE_URL}m=itemdb_rs/bestiary/beastData.json?beastid={beast_id}" )