-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.js
More file actions
91 lines (80 loc) · 3.58 KB
/
index.js
File metadata and controls
91 lines (80 loc) · 3.58 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
const Discord = require('discord.js')
const fs = require("fs")
const crypto = require('crypto')
const https = require('https');
const http = require('http')
const client = new Discord.Client();
const blacklist = JSON.parse(fs.readFileSync("blacklist_pictures.json"))
function urlify(url){//analyse toutes les URLs
const res = []
url.replace(/(https?:\/\/[^\s]+)/g, function(url){
res.push(url)
})
return res
}
client.on('ready', () => {
for(guild of client.guilds.cache){ //vérifie que pour chaque serveur où le bot est présent, une entrée lui est associée
if(blacklist[guild[0]] === undefined)
blacklist[guild[0]] = {"URL":[],"hash":[],"max_size":0}
}
})
client.on('message', message => {
const serverID = message.guild.id
if(blacklist[serverID]["URL"].includes(...urlify(message.content))){//check 1 : URLs
message.delete()
}
else{//check 2 : hash /*for..on*/
if(message.attachments.size > 0 && message.attachments.size <= blacklist[serverID]["max_size"]){//vérifie que la taille n'est pas supérieure à celle du plus gros fichier afin de ne pas le télécharger
https.get(message.attachments.first().url, function(response) {//téléchargement du fichier
response.pipe(crypto.createHash('whirlpool').setEncoding('hex')).on('finish', function () {//calcul du hash
if(blacklist[serverID]["hash"].includes(this.read())){
if(!blacklist[serverID]["URL"].includes(message.attachments.first().url)){//ajout de l'URL si elle n'est pas répertoriée
blacklist[serverID]["URL"].push(message.attachments.first().url)
fs.writeFileSync('blacklist_pictures.json', JSON.stringify(blacklist))
}
message.delete()
}
})
});
}
}
});
function addToBlacklist(url, message, response){//ajout à la blacklist
response.pipe(crypto.createHash('whirlpool').setEncoding('hex')).on('finish', function () {
const hash = this.read()
if(!blacklist[message.guild.id]['hash'].includes(hash))
blacklist[message.guild.id]['hash'].push(hash)
if(!blacklist[message.guild.id]['URL'].includes(url))
blacklist[message.guild.id]['URL'].push(url)
if(blacklist[message.guild.id]['max_size'] < response.headers['content-length'])
blacklist[message.guild.id]['max_size'] = Number(response.headers['content-length'])
message.delete()
fs.writeFileSync('blacklist_pictures.json', JSON.stringify(blacklist))
})
}
function downloadFile(url, message){//télécharge l'attachment
const protocol = new URL(url)
if(protocol.protocol === "https:"){//vérification des protocoles
https.get(url, function(response){
addToBlacklist(url, message, response);
})
}else if(protocol.protocol === "http:"){
http.get(url, function(response){
addToBlacklist(url, message, response);
})
}
}
client.on('messageReactionAdd', reaction => {
if(reaction.message.member.hasPermission("MANAGE_MESSAGES") && reaction.emoji.name === "❌"){
//ajout 1 : URLs
for(url of urlify(reaction.message.content)){
downloadFile(url, reaction.message)
};
//ajout 2 : hash et son URL
if(reaction.message.attachments.size > 0){
downloadFile(reaction.message.attachments.first().url, reaction.message)
}
}
});
client.login('')
//TODO : vérifier tous les attachments