Compare commits
6 Commits
92a4ba3a74
...
a76a483136
| Author | SHA1 | Date | |
|---|---|---|---|
| a76a483136 | |||
| 0edee4970b | |||
| d0e84fe326 | |||
| 48656fccd9 | |||
| ebbda251d9 | |||
| 431aa9cb51 |
7
.gitignore
vendored
Normal file
7
.gitignore
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
__pycache__/
|
||||
*.db
|
||||
*.log
|
||||
*.swp
|
||||
*.conf
|
||||
*.json
|
||||
*.yml
|
||||
74
scripts/lib/ffxivapi.py
Normal file
74
scripts/lib/ffxivapi.py
Normal file
@@ -0,0 +1,74 @@
|
||||
from .ffxivclasses import *
|
||||
import requests as req
|
||||
import json
|
||||
|
||||
class FFXIVAPI:
|
||||
__author__ = 'Anima'
|
||||
__version__ = '0.0.1'
|
||||
|
||||
def __init__(self) -> None:
|
||||
self.BASEURL : str = 'https://xivapi.com'
|
||||
|
||||
class Character(FFXIVAPI):
|
||||
__version__ = '0.0.1'
|
||||
|
||||
def __init__(self, charid: int = None, charname: tuple = None) -> None:
|
||||
"""
|
||||
Final Fantasy XIV Character
|
||||
|
||||
Use one of:
|
||||
- charid (from lodestone)
|
||||
- charname tuple with (charname, world)
|
||||
"""
|
||||
super().__init__()
|
||||
self.BASEURL : str = self.BASEURL + '/character'
|
||||
self.CHARID : str = str(charid)
|
||||
if not charid and isinstance(charname, tuple):
|
||||
self.search_char(charname)
|
||||
if self.CHARID:
|
||||
self.get_char()
|
||||
self.CLASSES : list = [
|
||||
DarkKnight(), Gunbreaker(), Paladin(), Warrior(),
|
||||
Astrologian(), Sage(), Sholar(), WhiteMage(),
|
||||
Dragoon(), Monk(), Ninja(), Samurai(), Reaper(),
|
||||
Bard(), Dancer(), Machinist(),
|
||||
BlackMage(), RedMage(), Summoner(), BlueMage(),
|
||||
Botanist(), Fisher(), Miner(),
|
||||
Alchemist(), Armorer(), Blacksmith(), Carpenter(),
|
||||
Culinarian(), Goldsmith(), Leatherworker(), Weaver()
|
||||
]
|
||||
|
||||
def search_char(self, char) -> None:
|
||||
query = f'/search?name={char[0].replace(" ", "%20")}&server={char[1]}'
|
||||
result = req.get(self.BASEURL + query)
|
||||
apidata = json.loads(result.text)
|
||||
if len(apidata['Results']) == 1:
|
||||
self.CHARID = str(apidata['Results'][0]['ID'])
|
||||
|
||||
def get_char(self) -> None:
|
||||
result = req.get(self.BASEURL + '/' + self.CHARID)
|
||||
self.APIDATA = json.loads(result.text)
|
||||
self.NAME = self.APIDATA['Character']['Name']
|
||||
self.WORLD = self.APIDATA['Character']['Server']
|
||||
self.FC = self.APIDATA['Character']['FreeCompanyName']
|
||||
self.FCID = self.APIDATA['Character']['FreeCompanyId']
|
||||
|
||||
def map_classes(self):
|
||||
for apicls in self.APIDATA['Character']['ClassJobs']:
|
||||
for cls in self.CLASSES:
|
||||
if apicls['JobID'] == cls.FFXIVAPIID:
|
||||
if apicls['Level'] > 0:
|
||||
cls.LEVEL = apicls['Level']
|
||||
break
|
||||
|
||||
if __name__ == '__main__':
|
||||
# anima = Character(29859367)
|
||||
anima = Character(charname=('Anima Ira', 'Omega'))
|
||||
|
||||
anima.map_classes()
|
||||
sum = 0
|
||||
for cls in anima.CLASSES:
|
||||
if isinstance(cls, (Heal, Tank)):
|
||||
sum += cls.LEVEL
|
||||
print(cls.ROLE, cls.NAME, cls.LEVEL)
|
||||
print(sum)
|
||||
396
scripts/lib/ffxivclasses.py
Normal file
396
scripts/lib/ffxivclasses.py
Normal file
@@ -0,0 +1,396 @@
|
||||
|
||||
####################################################################################################
|
||||
# Main Class #
|
||||
####################################################################################################
|
||||
class FFXIVCLASS:
|
||||
__author__ = 'Anima'
|
||||
__version__ = '0.0.1'
|
||||
CLASSROLE : str = {'E': 'None', 'D': 'None'}
|
||||
CLASSNAME : str = {'E': 'None', 'D': 'None'}
|
||||
|
||||
def __init__(self, language: str = 'D') -> None:
|
||||
self.LANG : str = language
|
||||
self.MAXLVL : int = 90
|
||||
self.ROLE : dict = self.CLASSROLE[self.LANG]
|
||||
self.NAME : dict = self.CLASSNAME[self.LANG]
|
||||
|
||||
####################################################################################################
|
||||
# Tanks #
|
||||
####################################################################################################
|
||||
class Tank(FFXIVCLASS):
|
||||
__version__ = '0.0.1'
|
||||
CLASSROLE : dict = {'E': 'Tank', 'D': 'Verteidiger'}
|
||||
|
||||
def __init__(self, language: str = 'D') -> None:
|
||||
super().__init__(language)
|
||||
|
||||
class DarkKnight(Tank):
|
||||
__version__ = '0.0.1'
|
||||
CLASSNAME : dict = {'E': 'Dark Knight', 'D': 'Dunkelritter'}
|
||||
CLASSHORT : dict = {'E': 'DRK', 'D': 'DKR'}
|
||||
FFXIVAPIID : int = 32
|
||||
|
||||
def __init__(self,level: int = 30, language: str = 'D') -> None:
|
||||
super().__init__(language)
|
||||
self.LEVEL : int = level
|
||||
|
||||
class Gunbreaker(Tank):
|
||||
__version__ = '0.0.1'
|
||||
CLASSNAME : dict = {'E': 'Gunbreaker', 'D': 'Revolverklinge'}
|
||||
CLASSHORT : dict = {'E': 'GNB', 'D': 'REV'}
|
||||
FFXIVAPIID : int = 37
|
||||
|
||||
def __init__(self,level: int = 60, language: str = 'D') -> None:
|
||||
super().__init__(language)
|
||||
self.LEVEL : int = level
|
||||
|
||||
class Paladin(Tank):
|
||||
__version__ = '0.0.1'
|
||||
CLASSNAME : dict = {'E': 'Paladin', 'D': 'Paladin'}
|
||||
CLASSHORT : dict = {'E': 'PLD', 'D': 'PLD'}
|
||||
FFXIVAPIID : int = 19
|
||||
|
||||
def __init__(self,level: int = 0, language: str = 'D') -> None:
|
||||
super().__init__(language)
|
||||
self.LEVEL : int = level
|
||||
|
||||
class Warrior(Tank):
|
||||
__version__ = '0.0.1'
|
||||
CLASSNAME : dict = {'E': 'Warrior', 'D': 'Krieger'}
|
||||
CLASSHORT : dict = {'E': 'WAR', 'D': 'KRG'}
|
||||
FFXIVAPIID : int = 21
|
||||
|
||||
def __init__(self,level: int = 0, language: str = 'D') -> None:
|
||||
super().__init__(language)
|
||||
self.LEVEL : int = level
|
||||
|
||||
####################################################################################################
|
||||
# Healers #
|
||||
####################################################################################################
|
||||
class Heal(FFXIVCLASS):
|
||||
__version__ = '0.0.1'
|
||||
CLASSROLE : dict = {'E': 'Healer', 'D': 'Heiler'}
|
||||
|
||||
def __init__(self, language: str = 'D') -> None:
|
||||
super().__init__(language)
|
||||
|
||||
class Astrologian(Heal):
|
||||
__version__ = '0.0.1'
|
||||
CLASSNAME : dict = {'E': 'Astrologian', 'D': 'Astrologe'}
|
||||
CLASSHORT : dict = {'E': 'AST', 'D': 'AST'}
|
||||
FFXIVAPIID : int = 33
|
||||
|
||||
def __init__(self,level: int = 30, language: str = 'D') -> None:
|
||||
super().__init__(language)
|
||||
self.LEVEL : int = level
|
||||
|
||||
class Sage(Heal):
|
||||
__version__ = '0.0.1'
|
||||
CLASSNAME : dict = {'E': 'Sage', 'D': 'Weiser'}
|
||||
CLASSHORT : dict = {'E': 'SGE', 'D': 'WEI'}
|
||||
FFXIVAPIID : int = 40
|
||||
|
||||
def __init__(self,level: int = 70, language: str = 'D') -> None:
|
||||
super().__init__(language)
|
||||
self.LEVEL : int = level
|
||||
|
||||
class Sholar(Heal):
|
||||
__version__ = '0.0.1'
|
||||
CLASSNAME : dict = {'E': 'Sholar', 'D': 'Gelehrte'}
|
||||
CLASSHORT : dict = {'E': 'SCH', 'D': 'GLT'}
|
||||
FFXIVAPIID : int = 28
|
||||
|
||||
def __init__(self,level: int = 70, language: str = 'D') -> None:
|
||||
super().__init__(language)
|
||||
self.LEVEL : int = level
|
||||
|
||||
class WhiteMage(Heal):
|
||||
__version__ = '0.0.1'
|
||||
CLASSNAME : dict = {'E': 'White Mage', 'D': 'Weißmagier'}
|
||||
CLASSHORT : dict = {'E': 'WHM', 'D': 'WMA'}
|
||||
FFXIVAPIID : int = 24
|
||||
|
||||
def __init__(self,level: int = 0, language: str = 'D') -> None:
|
||||
super().__init__(language)
|
||||
self.LEVEL : int = level
|
||||
|
||||
####################################################################################################
|
||||
# Damage Dealer #
|
||||
####################################################################################################
|
||||
#--------------------------------------------> Meeles <--------------------------------------------#
|
||||
class Melee(FFXIVCLASS):
|
||||
__version__ = '0.0.1'
|
||||
CLASSROLE : dict = {'E': 'Melee', 'D': 'Nahkämpfer'}
|
||||
|
||||
def __init__(self, language: str = 'D') -> None:
|
||||
super().__init__(language)
|
||||
|
||||
class Dragoon(Melee):
|
||||
__version__ = '0.0.1'
|
||||
CLASSNAME : dict = {'E': 'Dragoon', 'D': 'Dragoon'}
|
||||
CLASSHORT : dict = {'E': 'DRG', 'D': 'DRG'}
|
||||
FFXIVAPIID : int = 22
|
||||
|
||||
def __init__(self,level: int = 0, language: str = 'D') -> None:
|
||||
super().__init__(language)
|
||||
self.LEVEL : int = level
|
||||
|
||||
class Monk(Melee):
|
||||
__version__ = '0.0.1'
|
||||
CLASSNAME : dict = {'E': 'Monk', 'D': 'Mönch'}
|
||||
CLASSHORT : dict = {'E': 'MNK', 'D': 'MÖN'}
|
||||
FFXIVAPIID : int = 20
|
||||
|
||||
def __init__(self,level: int = 0, language: str = 'D') -> None:
|
||||
super().__init__(language)
|
||||
self.LEVEL : int = level
|
||||
|
||||
class Ninja(Melee):
|
||||
__version__ = '0.0.1'
|
||||
CLASSNAME : dict = {'E': 'Ninja', 'D': 'Ninja'}
|
||||
CLASSHORT : dict = {'E': 'NIN', 'D': 'NIN'}
|
||||
FFXIVAPIID : int = 30
|
||||
|
||||
def __init__(self,level: int = 0, language: str = 'D') -> None:
|
||||
super().__init__(language)
|
||||
self.LEVEL : int = level
|
||||
|
||||
class Samurai(Melee):
|
||||
__version__ = '0.0.1'
|
||||
CLASSNAME : dict = {'E': 'Samurai', 'D': 'Samurai'}
|
||||
CLASSHORT : dict = {'E': 'SAM', 'D': 'SAM'}
|
||||
FFXIVAPIID : int = 34
|
||||
|
||||
def __init__(self,level: int = 50, language: str = 'D') -> None:
|
||||
super().__init__(language)
|
||||
self.LEVEL : int = level
|
||||
|
||||
class Reaper(Melee):
|
||||
__version__ = '0.0.1'
|
||||
CLASSNAME : dict = {'E': 'Reaper', 'D': 'Schnitter'}
|
||||
CLASSHORT : dict = {'E': 'RPR', 'D': 'SNT'}
|
||||
FFXIVAPIID : int = 39
|
||||
|
||||
def __init__(self,level: int = 70, language: str = 'D') -> None:
|
||||
super().__init__(language)
|
||||
self.LEVEL : int = level
|
||||
|
||||
#--------------------------------------------> Ranges <--------------------------------------------#
|
||||
class Range(FFXIVCLASS):
|
||||
__version__ = '0.0.1'
|
||||
CLASSROLE : dict = {'E': 'Range', 'D': 'Fernkämpfer'}
|
||||
|
||||
def __init__(self, language: str = 'D') -> None:
|
||||
super().__init__(language)
|
||||
|
||||
class Bard(Range):
|
||||
__version__ = '0.0.1'
|
||||
CLASSNAME : dict = {'E': 'Bard', 'D': 'Barde'}
|
||||
CLASSHORT : dict = {'E': 'BRD', 'D': 'BRD'}
|
||||
FFXIVAPIID : int = 23
|
||||
|
||||
def __init__(self,level: int = 0, language: str = 'D') -> None:
|
||||
super().__init__(language)
|
||||
self.LEVEL : int = level
|
||||
|
||||
class Dancer(Range):
|
||||
__version__ = '0.0.1'
|
||||
CLASSNAME : dict = {'E': 'Dancer', 'D': 'Tänzer'}
|
||||
CLASSHORT : dict = {'E': 'DCR', 'D': 'TÄN'}
|
||||
FFXIVAPIID : int = 38
|
||||
|
||||
def __init__(self,level: int = 60, language: str = 'D') -> None:
|
||||
super().__init__(language)
|
||||
self.LEVEL : int = level
|
||||
|
||||
class Machinist(Range):
|
||||
__version__ = '0.0.1'
|
||||
CLASSNAME : dict = {'E': 'Machinist', 'D': 'Maschinist'}
|
||||
CLASSHORT : dict = {'E': 'MCH', 'D': 'MCH'}
|
||||
FFXIVAPIID : int = 31
|
||||
|
||||
def __init__(self,level: int = 30, language: str = 'D') -> None:
|
||||
super().__init__(language)
|
||||
self.LEVEL : int = level
|
||||
|
||||
#---------------------------------------------> Mage <---------------------------------------------#
|
||||
class Mage(FFXIVCLASS):
|
||||
__version__ = '0.0.1'
|
||||
CLASSROLE : dict = {'E': 'Mage', 'D': 'Magier'}
|
||||
|
||||
def __init__(self, language: str = 'D') -> None:
|
||||
super().__init__(language)
|
||||
|
||||
class BlackMage(Mage):
|
||||
__version__ = '0.0.1'
|
||||
CLASSNAME : dict = {'E': 'Black Mage', 'D': 'Schwarzmagier'}
|
||||
CLASSHORT : dict = {'E': 'BMA', 'D': 'SMA'}
|
||||
FFXIVAPIID : int = 25
|
||||
|
||||
def __init__(self,level: int = 70, language: str = 'D') -> None:
|
||||
super().__init__(language)
|
||||
self.LEVEL : int = level
|
||||
|
||||
class RedMage(Mage):
|
||||
__version__ = '0.0.1'
|
||||
CLASSNAME : dict = {'E': 'Red Mage', 'D': 'Rotmagier'}
|
||||
CLASSHORT : dict = {'E': 'RDM', 'D': 'RMA'}
|
||||
FFXIVAPIID : int = 35
|
||||
|
||||
def __init__(self,level: int = 70, language: str = 'D') -> None:
|
||||
super().__init__(language)
|
||||
self.LEVEL : int = level
|
||||
|
||||
class Summoner(Mage):
|
||||
__version__ = '0.0.1'
|
||||
CLASSNAME : dict = {'E': 'Summoner', 'D': 'Beschwörer'}
|
||||
CLASSHORT : dict = {'E': 'SUM', 'D': 'BSW'}
|
||||
FFXIVAPIID : int = 27
|
||||
|
||||
def __init__(self,level: int = 70, language: str = 'D') -> None:
|
||||
super().__init__(language)
|
||||
self.LEVEL : int = level
|
||||
|
||||
class BlueMage(Mage):
|
||||
__version__ = '0.0.1'
|
||||
CLASSNAME : dict = {'E': 'Blue Mage', 'D': 'Blaumagier'}
|
||||
CLASSHORT : dict = {'E': 'BLU', 'D': 'BLA'}
|
||||
FFXIVAPIID : int = 36
|
||||
|
||||
def __init__(self,level: int = 70, language: str = 'D') -> None:
|
||||
super().__init__(language)
|
||||
self.MAXLVL : int = 70
|
||||
self.LEVEL : int = level
|
||||
|
||||
####################################################################################################
|
||||
# Collectors #
|
||||
####################################################################################################
|
||||
class Collector(FFXIVCLASS):
|
||||
__version__ = '0.0.1'
|
||||
CLASSROLE : dict = {'E': 'Collector', 'D': 'Sammler'}
|
||||
|
||||
def __init__(self, language: str = 'D') -> None:
|
||||
super().__init__(language)
|
||||
|
||||
class Botanist(Collector):
|
||||
__version__ = '0.0.1'
|
||||
CLASSNAME : dict = {'E': 'Botanis', 'D': 'Gärtner'}
|
||||
CLASSHORT : dict = {'E': 'BTN', 'D': 'G?'}
|
||||
FFXIVAPIID : int = 17
|
||||
|
||||
def __init__(self,level: int = 0, language: str = 'D') -> None:
|
||||
super().__init__(language)
|
||||
self.LEVEL : int = level
|
||||
|
||||
class Fisher(Collector):
|
||||
__version__ = '0.0.1'
|
||||
CLASSNAME : dict = {'E': 'Fisher', 'D': 'Fischer'}
|
||||
CLASSHORT : dict = {'E': 'FSH', 'D': 'FIS'}
|
||||
FFXIVAPIID : int = 18
|
||||
|
||||
def __init__(self,level: int = 0, language: str = 'D') -> None:
|
||||
super().__init__(language)
|
||||
self.LEVEL : int = level
|
||||
|
||||
class Miner(Collector):
|
||||
__version__ = '0.0.1'
|
||||
CLASSNAME : dict = {'E': 'Miner', 'D': 'Minenarbeiter'}
|
||||
CLASSHORT : dict = {'E': 'MIN', 'D': 'MIN'}
|
||||
FFXIVAPIID : int = 16
|
||||
|
||||
def __init__(self,level: int = 0, language: str = 'D') -> None:
|
||||
super().__init__(language)
|
||||
self.LEVEL : int = level
|
||||
|
||||
####################################################################################################
|
||||
# Crafters #
|
||||
####################################################################################################
|
||||
class Crafter(FFXIVCLASS):
|
||||
__version__ = '0.0.1'
|
||||
CLASSROLE : dict = {'E': 'Carafter', 'D': 'Handwerker'}
|
||||
|
||||
def __init__(self, language: str = 'D') -> None:
|
||||
super().__init__(language)
|
||||
|
||||
class Alchemist(Crafter):
|
||||
__version__ = '0.0.1'
|
||||
CLASSNAME : dict = {'E': 'Alchemist', 'D': 'Alchimist'}
|
||||
CLASSHORT : dict = {'E': 'ALC', 'D': 'ALC'}
|
||||
FFXIVAPIID : int = 14
|
||||
|
||||
def __init__(self,level: int = 0, language: str = 'D') -> None:
|
||||
super().__init__(language)
|
||||
self.LEVEL : int = level
|
||||
|
||||
class Armorer(Crafter):
|
||||
__version__ = '0.0.1'
|
||||
CLASSNAME : dict = {'E': 'Armorer', 'D': 'Plattner'}
|
||||
CLASSHORT : dict = {'E': 'ARM', 'D': 'PLT'}
|
||||
FFXIVAPIID : int = 10
|
||||
|
||||
def __init__(self,level: int = 0, language: str = 'D') -> None:
|
||||
super().__init__(language)
|
||||
self.LEVEL : int = level
|
||||
|
||||
class Blacksmith(Crafter):
|
||||
__version__ = '0.0.1'
|
||||
CLASSNAME : dict = {'E': 'Blacksmith', 'D': 'Grobschmied'}
|
||||
CLASSHORT : dict = {'E': 'BSM', 'D': 'GRS'}
|
||||
FFXIVAPIID : int = 9
|
||||
|
||||
def __init__(self,level: int = 0, language: str = 'D') -> None:
|
||||
super().__init__(language)
|
||||
self.LEVEL : int = level
|
||||
|
||||
class Carpenter(Crafter):
|
||||
__version__ = '0.0.1'
|
||||
CLASSNAME : dict = {'E': 'Carpenter', 'D': 'Zimmerer'}
|
||||
CLASSHORT : dict = {'E': 'CRP', 'D': 'ZIM'}
|
||||
FFXIVAPIID : int = 8
|
||||
|
||||
def __init__(self,level: int = 0, language: str = 'D') -> None:
|
||||
super().__init__(language)
|
||||
self.LEVEL : int = level
|
||||
|
||||
class Culinarian(Crafter):
|
||||
__version__ = '0.0.1'
|
||||
CLASSNAME : dict = {'E': 'Culinarian', 'D': 'Gourmet'}
|
||||
CLASSHORT : dict = {'E': 'CUL', 'D': 'GUR'}
|
||||
FFXIVAPIID : int = 15
|
||||
|
||||
def __init__(self,level: int = 0, language: str = 'D') -> None:
|
||||
super().__init__(language)
|
||||
self.LEVEL : int = level
|
||||
|
||||
class Goldsmith(Crafter):
|
||||
__version__ = '0.0.1'
|
||||
CLASSNAME : dict = {'E': 'Goldsmith', 'D': 'Goldschmied'}
|
||||
CLASSHORT : dict = {'E': 'GSM', 'D': 'GSM'}
|
||||
FFXIVAPIID : int = 11
|
||||
|
||||
def __init__(self,level: int = 0, language: str = 'D') -> None:
|
||||
super().__init__(language)
|
||||
self.LEVEL : int = level
|
||||
|
||||
class Leatherworker(Crafter):
|
||||
__version__ = '0.0.1'
|
||||
CLASSNAME : dict = {'E': 'Leatherworker', 'D': 'Gerber'}
|
||||
CLASSHORT : dict = {'E': 'LTW', 'D': 'GRB'}
|
||||
FFXIVAPIID : int = 12
|
||||
|
||||
def __init__(self,level: int = 0, language: str = 'D') -> None:
|
||||
super().__init__(language)
|
||||
self.LEVEL : int = level
|
||||
|
||||
class Weaver(Crafter):
|
||||
__version__ = '0.0.1'
|
||||
CLASSNAME : dict = {'E': 'Weaver', 'D': 'Weber'}
|
||||
CLASSHORT : dict = {'E': 'WVR', 'D': 'WEB'}
|
||||
FFXIVAPIID : int = 13
|
||||
|
||||
def __init__(self,level: int = 0, language: str = 'D') -> None:
|
||||
super().__init__(language)
|
||||
self.LEVEL : int = level
|
||||
|
||||
if __name__ == '__main__':
|
||||
test = Sage(language='E')
|
||||
Reference in New Issue
Block a user