|
@@ -247,31 +247,38 @@ class Webshot extends CallableInstance<[MediaItem[], (...args) => void, number],
|
|
});
|
|
});
|
|
}
|
|
}
|
|
// fetch extra entities
|
|
// fetch extra entities
|
|
- const mediaType: keyof typeof typeInZH = item.video_versions ? 'video' : 'photo';
|
|
|
|
- const fetchBestCandidate =
|
|
|
|
- (candidates: typeof item.video_versions | typeof item.image_versions2.candidates) => {
|
|
|
|
- const url = candidates
|
|
|
|
- .sort((var1, var2) => var2.width - var1.width)
|
|
|
|
- .map(variant => variant.url)[0]; // largest media
|
|
|
|
- const altMessage = `\n[失败的${typeInZH[mediaType].type}:${url}]`;
|
|
|
|
- return this.fetchMedia(url)
|
|
|
|
- .catch(error => {
|
|
|
|
- logger.warn('unable to fetch media, sending plain text instead...');
|
|
|
|
- return altMessage;
|
|
|
|
- })
|
|
|
|
- .then(msg => { messageChain += msg; });
|
|
|
|
- };
|
|
|
|
|
|
+ const type = (mediaItem): keyof typeof typeInZH =>
|
|
|
|
+ (mediaItem as MediaItem).video_versions ? 'video' : 'photo';
|
|
|
|
+ const fetchBestCandidate =(
|
|
|
|
+ candidates: (Partial<typeof item.video_versions[0]> & typeof item.image_versions2.candidates[0])[],
|
|
|
|
+ mediaType: keyof typeof typeInZH
|
|
|
|
+ ) => {
|
|
|
|
+ const url = candidates
|
|
|
|
+ .sort((var1, var2) => var2.width + (var2?.type || 0) - var1.width - (var1?.type || 0))
|
|
|
|
+ .map(variant => variant.url)[0]; // largest media
|
|
|
|
+ const altMessage = `\n[失败的${typeInZH[mediaType].type}:${url}]`;
|
|
|
|
+ return this.fetchMedia(url)
|
|
|
|
+ .catch(error => {
|
|
|
|
+ logger.warn('unable to fetch media, sending plain text instead...');
|
|
|
|
+ return altMessage;
|
|
|
|
+ })
|
|
|
|
+ .then(msg => { messageChain += msg; });
|
|
|
|
+ };
|
|
// tslint:disable-next-line: curly
|
|
// tslint:disable-next-line: curly
|
|
// eslint-disable-next-line curly
|
|
// eslint-disable-next-line curly
|
|
if (1 - this.mode % 2) promise = promise.then(() => {
|
|
if (1 - this.mode % 2) promise = promise.then(() => {
|
|
if (item.carousel_media) {
|
|
if (item.carousel_media) {
|
|
return chainPromises(item.carousel_media.map(carouselItem =>
|
|
return chainPromises(item.carousel_media.map(carouselItem =>
|
|
- fetchBestCandidate(carouselItem.image_versions2.candidates)
|
|
|
|
|
|
+ fetchBestCandidate(
|
|
|
|
+ (carouselItem as unknown as MediaItem).video_versions ||
|
|
|
|
+ carouselItem.image_versions2.candidates,
|
|
|
|
+ type(carouselItem)
|
|
|
|
+ )
|
|
));
|
|
));
|
|
} else if (item.video_versions) {
|
|
} else if (item.video_versions) {
|
|
- return fetchBestCandidate(item.video_versions);
|
|
|
|
|
|
+ return fetchBestCandidate(item.video_versions, type(item));
|
|
} else if (item.image_versions2) {
|
|
} else if (item.image_versions2) {
|
|
- return fetchBestCandidate(item.image_versions2.candidates);
|
|
|
|
|
|
+ return fetchBestCandidate(item.image_versions2.candidates, type(item));
|
|
}
|
|
}
|
|
});
|
|
});
|
|
promise.then(() => {
|
|
promise.then(() => {
|