discord-mudlet-map
Version:
This little library helps with Discord bot configuration to provide small Mudlet map fragment images with given location.
46 lines (42 loc) • 1.33 kB
JavaScript
const http = require("http");
const https = require("https");
let downloader = (url) => (writeStream) => {
return new Promise((resolve, reject) => {
let protocol = url.startsWith("https") ? https : http;
protocol.get(url, function (response) {
if (response.statusCode < 400) {
response.pipe(writeStream);
writeStream.on("finish", () => {
writeStream.close()
resolve()
})
response.on("error", (err) => reject(err));
} else {
reject(new Error(`Can't download map: ${response.statusCode} ${response.statusMessage}`));
}
});
});
};
let retryingDownloader = (url, retryOptions) => (writeStream) => {
let defaultOptions = {
retries: 3,
delay: 1000,
};
let options = { ...defaultOptions, ...retryOptions };
return downloader(url)(writeStream).catch((err) => {
if (options.retries > 0) {
return new Promise((resolve, reject) =>
setTimeout(() => {
options.retries--;
console.log(`Retrying download from ${url}`)
resolve(retryingDownloader(url, options)(writeStream));
}, options.delay)
);
}
throw err;
});
};
module.exports = {
downloader: downloader,
retryingDownloader: retryingDownloader,
};