[discord] update asset collection & handling (#8589)

This commit is contained in:
Mike Fährmann
2025-12-24 22:10:32 +01:00
parent 57c2327ae3
commit 6845661123
2 changed files with 45 additions and 48 deletions

View File

@@ -205,43 +205,43 @@ class DiscordExtractor(Extractor):
"server" : server["name"], "server" : server["name"],
"server_id": server["id"], "server_id": server["id"],
"owner_id" : server["owner_id"], "owner_id" : server["owner_id"],
"server_files": self.collect_server_assets_general(server), "server_files": self.collect_server_assets(server),
} }
return self.server_metadata return self.server_metadata
def collect_server_assets_general(self, server): def collect_server_assets(self, server, asset_type=None):
return [ if asset_type and asset_type != "general":
{ return [
"url": (f"https://cdn.discordapp.com/{asset_path}/" {
f"{server['id']}/{asset_id}.png?size=4096"), **asset,
"id" : f"{server['id']}/{asset_id}", "url": (f"https://cdn.discordapp.com/{asset_type}/"
"label" : "general", f"{asset['id']}.png?size=4096"),
"name" : asset_type, "label" : asset_type,
"filename" : asset_type, "filename" : f"{asset['name']} ({asset['id']})",
"extension": "png", "extension": "png",
} }
for asset_type, asset_path in ( for asset in assets
("icon" , "icons"), ] if (assets := server.get(asset_type)) else ()
("banner", "banners"), else:
("splash", "splashes"), return [
("discovery_splash", "discovery-splashes") {
) "url": (f"https://cdn.discordapp.com/{asset_path}/"
if (asset_id := server.get(asset_type)) f"{server['id']}/{asset_id}.png?size=4096"),
] "id" : f"{server['id']}/{asset_id}",
"label" : "",
def collect_server_assets_type(self, server, asset_type): "name" : asset_type,
return [ "filename" : asset_type,
{ "extension": "png",
**asset, }
"url": (f"https://cdn.discordapp.com/{asset_type}/" for asset_type, asset_path in (
f"{asset['id']}.png?size=4096"), ("icon" , "icons"),
"label" : asset_type, ("banner", "banners"),
"filename" : f"{asset['name']} ({asset['id']})", ("splash", "splashes"),
"extension": "png", ("discovery_splash", "discovery-splashes")
} )
for asset in assets if (asset_id := server.get(asset_type))
] if (assets := server.get(asset_type)) else () ]
def build_server_and_channels(self, server_id): def build_server_and_channels(self, server_id):
self.parse_server(self.api.get_server(server_id)) self.parse_server(self.api.get_server(server_id))
@@ -286,7 +286,7 @@ class DiscordMessageExtractor(DiscordExtractor):
class DiscordServerAssetsExtractor(DiscordExtractor): class DiscordServerAssetsExtractor(DiscordExtractor):
subcategory = "server-assets" subcategory = "server-assets"
filename_fmt = "{name} ({id}).{extension}" filename_fmt = "{name} ({id}).{extension}"
directory_fmt = ["{category}", "{server_id}_{server}", "Assets"] directory_fmt = ["{category}", "{server_id}_{server}", "Assets", "{label}"]
archive_fmt = "asset_{server_id}_{id}" archive_fmt = "asset_{server_id}_{id}"
pattern = (BASE_PATTERN + pattern = (BASE_PATTERN +
r"/channels/(\d+)/(?:assets?|files)(?:/([\w-]+))?/?$") r"/channels/(\d+)/(?:assets?|files)(?:/([\w-]+))?/?$")
@@ -298,21 +298,18 @@ class DiscordServerAssetsExtractor(DiscordExtractor):
parsed = self.parse_server(server) parsed = self.parse_server(server)
if asset_type is None: if asset_type is None:
assets = [ asset_types = ("", "emojis", "stickers")
*self.collect_server_assets_general(server),
*self.collect_server_assets_type(server, "emojis"),
*self.collect_server_assets_type(server, "stickers"),
]
elif asset_type == "general":
assets = self.collect_server_assets_general(server)
else: else:
assets = self.collect_server_assets_type(server, asset_type) asset_types = asset_type.split(",")
parsed["count"] = len(assets) for asset_type in asset_types:
yield Message.Directory, "", parsed assets = self.collect_server_assets(server, asset_type)
for asset in assets: parsed["count"] = len(assets)
asset.update(parsed) parsed["label"] = asset_type
yield Message.Url, asset["url"], asset yield Message.Directory, "", parsed
for asset in assets:
asset.update(parsed)
yield Message.Url, asset["url"], asset
class DiscordServerExtractor(DiscordExtractor): class DiscordServerExtractor(DiscordExtractor):

View File

@@ -83,7 +83,7 @@ __tests__ = (
"filename" : str, "filename" : str,
"extension": "png", "extension": "png",
"id" : str, "id" : str,
"label" : {"general", "emojis", "stickers"}, "label" : {"", "emojis", "stickers"},
"owner_id" : "699203962691256400", "owner_id" : "699203962691256400",
"server" : "MangaDex", "server" : "MangaDex",
"server_id": "403905762268545024", "server_id": "403905762268545024",