1 |
rakin |
5 |
const MessageEmbed = require("../src/MessageEmbed"); |
2 |
rakin |
10 |
const Axios = require('axios'); |
3 |
|
|
const { default: axios } = Axios; |
4 |
|
|
const fs = require('fs'); |
5 |
|
|
const { Attachment } = require('discord.js'); |
6 |
|
|
const path = require("path"); |
7 |
rakin |
5 |
|
8 |
|
|
module.exports = { |
9 |
rakin |
10 |
async download(url, path) { |
10 |
|
|
const writer = fs.createWriteStream(path); |
11 |
|
|
|
12 |
|
|
const response = await Axios({ |
13 |
|
|
url, |
14 |
|
|
method: 'GET', |
15 |
|
|
responseType: 'stream', |
16 |
|
|
headers: { |
17 |
|
|
"x-api-key": process.env.CAT_API_TOKEN |
18 |
|
|
} |
19 |
|
|
}); |
20 |
|
|
|
21 |
|
|
response.data.pipe(writer); |
22 |
|
|
|
23 |
|
|
if (response.status !== 200) { |
24 |
|
|
reject(); |
25 |
|
|
} |
26 |
|
|
|
27 |
|
|
return new Promise((resolve, reject) => { |
28 |
|
|
writer.on('finish', resolve); |
29 |
|
|
writer.on('error', reject); |
30 |
|
|
}); |
31 |
|
|
}, |
32 |
|
|
async delete(path) { |
33 |
|
|
fs.rm(path, err => { |
34 |
|
|
if (err) { |
35 |
|
|
throw new Error(err); |
36 |
|
|
} |
37 |
|
|
}); |
38 |
|
|
}, |
39 |
rakin |
5 |
async handle(msg, cm) { |
40 |
rakin |
10 |
axios.get("https://api.thecatapi.com/v1/images/search", { |
41 |
|
|
headers: { |
42 |
|
|
"x-api-key": process.env.CAT_API_TOKEN |
43 |
|
|
} |
44 |
|
|
}) |
45 |
|
|
.then(res => { |
46 |
rakin |
5 |
if (res && res.status === 200) { |
47 |
rakin |
10 |
let name = res.data[0].url; |
48 |
|
|
const pos = name.indexOf('?'); |
49 |
|
|
|
50 |
|
|
if (pos !== -1) { |
51 |
|
|
name = name.substring(0, pos); |
52 |
|
|
} |
53 |
|
|
|
54 |
|
|
name = name.split(/\/+/); |
55 |
|
|
name = name[name.length - 1]; |
56 |
|
|
|
57 |
|
|
console.log(name); |
58 |
|
|
const filename = path.join(__dirname, '..', 'tmp', name); |
59 |
|
|
|
60 |
|
|
if (filename.endsWith('.false')) { |
61 |
|
|
filename = filename.replace(/\.false$/, '.png'); |
62 |
|
|
} |
63 |
|
|
|
64 |
|
|
this.download(res.data[0].url, filename) |
65 |
|
|
.then(() => { |
66 |
|
|
msg.reply({ |
67 |
|
|
files: [ |
68 |
|
|
{ |
69 |
|
|
attachment: filename, |
70 |
|
|
name |
71 |
|
|
} |
72 |
|
|
] |
73 |
|
|
}); |
74 |
|
|
|
75 |
|
|
this.delete(filename); |
76 |
|
|
}) |
77 |
|
|
.catch(err => { |
78 |
|
|
console.log("DL error: " + err.message); |
79 |
|
|
|
80 |
|
|
this.delete(filename); |
81 |
|
|
|
82 |
|
|
msg.reply({ |
83 |
|
|
embeds: [ |
84 |
|
|
new MessageEmbed() |
85 |
|
|
.setColor('#f14a60') |
86 |
|
|
.setDescription('Internal API error occured (download-time error), please try again.') |
87 |
|
|
] |
88 |
|
|
}); |
89 |
|
|
}); |
90 |
|
|
} |
91 |
|
|
else if (res?.status === 429) { |
92 |
rakin |
5 |
msg.reply({ |
93 |
rakin |
10 |
embeds: [ |
94 |
|
|
new MessageEmbed() |
95 |
|
|
.setColor('#f14a60') |
96 |
|
|
.setDescription('Too many requests at the same time, please try again after some time.') |
97 |
|
|
] |
98 |
rakin |
5 |
}); |
99 |
|
|
} |
100 |
rakin |
10 |
else { |
101 |
|
|
msg.reply({ |
102 |
|
|
embeds: [ |
103 |
|
|
new MessageEmbed() |
104 |
|
|
.setColor('#f14a60') |
105 |
|
|
.setDescription('Internal API error occured (pre-download time error), please try again.') |
106 |
|
|
] |
107 |
|
|
}); |
108 |
|
|
} |
109 |
rakin |
5 |
}) |
110 |
|
|
.catch(err => { |
111 |
|
|
msg.reply({ |
112 |
|
|
embeds: [ |
113 |
|
|
new MessageEmbed() |
114 |
|
|
.setColor('#f14a60') |
115 |
|
|
.setDescription('Too many requests at the same time, please try again after some time.') |
116 |
|
|
] |
117 |
|
|
}); |
118 |
|
|
}); |
119 |
|
|
} |
120 |
|
|
}; |