"""This script is used to downlaod the skill palette data. The Guild Wars 2 chat links for build templates use a different skill ID than the API, so skills need to be mapped from their "skill ID" to the corresponding "palette ID". Some game updates may require this mapping to be updated as well, otherwise the chat link parsing/generating functionality might be broken. To use this script, pipe the output to src/skill_palette.json and rebuild kondou. """ import requests import json from lxml import html, etree data = requests.get("https://wiki.guildwars2.com/wiki/Chat_link_format") parsed = html.fromstring(data.content) body = parsed.find(".//table") iterator = iter(body) next(iterator) result = [] for row in iterator: if "-" in row[3].text: continue # For some reason, some skills have multiple IDs. It is not quite clear # what they are for, it sometimes seems to be the traited version, and # sometimes the underwater version. Then again, some of the IDs are also # invalid API IDs, which makes the whole thing a bit weird. Since we don't # care about underwater combat at the moment (and so does nobody else in # GW2) nor about the traited version of skills, we'll just stick with the # first ID. For rendering it shouldn't matter anyway, as all of them # usually share the same icon. ids = row[3].text.strip().split(";") palette_id = int(row[4].text) skill_id = int(ids[0]) result.append((skill_id, palette_id)) print(json.dumps(result))