[discord] update asset collection & handling (#8589)
This commit is contained in:
@@ -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):
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
Reference in New Issue
Block a user