Compare commits

..

6 Commits

Author SHA1 Message Date
a76a483136 fix non dict for higher classes 2022-05-16 23:02:32 +02:00
0edee4970b add own mini ffxivapi wrapper 2022-05-16 18:44:21 +02:00
d0e84fe326 add ffxiv classes wrapper 2022-05-16 18:38:54 +02:00
48656fccd9 add json / yml files to gitignore 2022-05-16 17:57:26 +02:00
ebbda251d9 add conf files to gitignore 2022-05-16 17:49:04 +02:00
431aa9cb51 add gitignore 2022-05-16 17:48:21 +02:00
3 changed files with 477 additions and 0 deletions

7
.gitignore vendored Normal file
View File

@@ -0,0 +1,7 @@
__pycache__/
*.db
*.log
*.swp
*.conf
*.json
*.yml

74
scripts/lib/ffxivapi.py Normal file
View 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
View 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')