forked from thoriqazzikraa/whatsapp-bot
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfetcher.js
More file actions
111 lines (103 loc) · 3.82 KB
/
Copy pathfetcher.js
File metadata and controls
111 lines (103 loc) · 3.82 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
const fetch = require('node-fetch')
const FormData = require('form-data')
const fs = require('fs')
const { fromBuffer } = require('file-type')
const resizeImage = require('./imageProcessing')
/**
* Fetch JSON from URL.
* @param {String} url
* @param {Object} options
*/
const fetchJson = (url, options) => {
return new Promise((resolve, reject) => {
return fetch(url, options)
.then((response) => response.json())
.then((json) => resolve(json))
.catch((err) => reject(err))
})
}
exports.getBuffer = getBuffer = async (url) => {
const res = await fetch(url, { headers: { 'User-Agent': 'okhttp/4.5.0' }, method: 'GET' })
const anu = fs.readFileSync('./src/emror.jpg')
if (!res.ok) return { type: 'image/jpeg', result: anu }
const buff = await res.buffer()
if (buff)
return { type: res.headers.get('content-type'), result: buff }
}
/**
* Fetch text from URL.
* @param {String} url
* @param {Object} options
*/
const fetchText = (url, options) => {
return new Promise((resolve, reject) => {
return fetch(url, options)
.then((response) => response.text())
.then((text) => resolve(text))
.catch((err) => reject(err))
})
}
const getBase64 = async (url) => {
const response = await fetch(url, { headers: { 'User-Agent': 'okhttp/4.5.0' } });
if (!response.ok) throw new Error(`unexpected response ${response.statusText}`);
const buffer = await response.buffer();
const videoBase64 = `data:${response.headers.get('content-type')};base64,` + buffer.toString('base64');
if (buffer)
return videoBase64;
};
const uploadImages = (buffData, type) => {
// eslint-disable-next-line no-async-promise-executor
return new Promise(async (resolve, reject) => {
const { ext } = await fromBuffer(buffData)
const filePath = 'media/tmp.' + ext
const _buffData = type ? await resizeImage(buffData, false) : buffData
fs.writeFile(filePath, _buffData, { encoding: 'base64' }, (err) => {
if (err) return reject(err)
console.log('Uploading image to telegra.ph server...')
const fileData = fs.readFileSync(filePath)
const form = new FormData()
form.append('file', fileData, 'tmp.' + ext)
fetch('https://telegra.ph/upload', {
method: 'POST',
body: form
})
.then(res => res.json())
.then(res => {
if (res.error) return reject(res.error)
resolve('https://telegra.ph' + res[0].src)
})
.then(() => fs.unlinkSync(filePath))
.catch(err => reject(err))
})
})
}
const fetchBase64 = (url, mimetype) => {
return new Promise((resolve, reject) => {
console.log('Get base64 from:', url)
return fetch(url)
.then((res) => {
const _mimetype = mimetype || res.headers.get('content-type')
res.buffer()
.then((result) => resolve(`data:${_mimetype};base64,` + result.toString('base64')))
})
.catch((err) => {
console.error(err)
reject(err)
})
})
}
const custom = async (imageUrl, top, bott = '') => new Promise((resolve, reject) => {
topText = top.replace(/ /g, '%20').replace('\n', '%5Cn')
fetchBase64(`https://api.memegen.link/images/custom/${topText}/${bott}.png?background=${imageUrl}`, 'image/png')
.then((result) => resolve(result))
.catch((err) => {
console.error(err)
reject(err)
})
})
exports.uploadImages = uploadImages;
exports.fetchJson = fetchJson
exports.fetchBase64 = fetchBase64
exports.custom = custom;
exports.getBase64 = getBase64;
exports.fetchText = fetchText;