· 6 years ago · Dec 29, 2019, 10:46 PM
1const Discord = require('discord.js');
2const client = new Discord.Client();
3const ms = require('ms');
4const moment = require('moment');
5const figlet = require('figlet');
6const colors = require('colors/safe');
7const superagent = require('superagent');
8const weather = require('weather-js');
9
10// CONFIG
11const {
12 EMBED_COLOR,
13 EMBED_FOOTER,
14 TOKEN,
15 ERR_NO_REASON,
16 ERR_CMD_INVALID,
17 ERR_NOPERMS,
18 ERR_USER_HASPERMS,
19 ERR_NOTNUMBER,
20 ERR_FIND_USER,
21 ERR_TOOMUCH,
22 PREFIX
23} = require('./config.json')
24
25// UTIL FUNCTIONS
26function convertMS(ms) {
27 var d, h, m, s;
28 s = Math.floor(ms / 1000);
29 m = Math.floor(s / 60);
30 s = s % 60;
31 h = Math.floor(m / 60);
32 m = m % 60;
33 d = Math.floor(h / 24);
34 h = h % 24;
35 return {
36 d,
37 h,
38 m,
39 s
40 };
41};
42
43// FUNCTIONS
44function helpCMD(message) {
45 // treba da se izbace komande koje nepostoje
46 let embed = new Discord.RichEmbed()
47 .setColor("RANDOM")
48 .setDescription("")
49 .setColor(EMBED_COLOR)
50 .addField(":page_facing_up: __**INFORMATIONS**__:", "» _botinfo , help , uptime , avatar , faq , purge_")
51 .addField(":pencil2: __**ZANIMLJIVO**__:", "» _weather , fmk , kiss , gayrate , 8ball , hack_")
52 .addField(":bulb: __**BOT INVITE**__", "» _Ovaj bot je privatno vlasnistvo NRG tima_")
53 .setFooter(EMBED_FOOTER)
54 .setTimestamp()
55 return message.channel.send(embed)
56}
57
58function memberCountCMD(message) {
59 let embed = new Discord.RichEmbed()
60 .setColor(EMBED_COLOR)
61 .addField('**TOTAL**', `**${message.guild.memberCount}**`, true)
62 .addField('**clientOVI**', `**${message.guild.members.filter(member => member.user.client).size}**`)
63 .addField('**STATUS**', `\n :link: **ONLINE**: \n » **${message.guild.members.filter(o => o.presence.status === 'online').size}**\n :link: **IDLE** \n » **${message.guild.members.filter(i => i.presence.status === 'idle').size}** \n :link: **DND** \n » **${message.guild.members.filter(dnd => dnd.presence.status === 'dnd').size}** \n :link: **OFFLINE** \n » **${message.guild.members.filter(off => off.presence.status === 'offline').size}** \n :link: **STREAMING** \n » **${message.guild.members.filter(s => s.presence.status === 'streaming').size}**`)
64 .setFooter(EMBED_FOOTER)
65 return message.channel.send(embed);
66};
67
68function eightBallCMD(message, args) {
69 if (!args.join(" ")) return message.channel.send("Moraš me pitat pitanje kako bi ti odgovorio!").then(setInterval(m => {m.delete()}, 10000));
70 let replies = [
71 "Ne.",
72 "Možda.",
73 "Otprilike.",
74 "Zavisi.",
75 "Nikako.",
76 "Odjebi.",
77 "Pitaj me kasnije.",
78 "Da.",
79 "Marš.",
80 "Hajde ba ohladi malo.",
81 "Moj donji... pritisak je 23cm.",
82 "Okupacija je u Kovinu bila ušla u drugu godinu.",
83 "Aj puši kitex.",
84 "Smaraš.",
85 "Bilo je lepo.",
86 "Opet jebem ti led?",
87 "Ti si nadprosecna budala?",
88 "Onur ti reko da ne filozofiras?",
89 "Prenki je jako glup lisac",
90 "Da jeste znam da Prenki jede govna ali toliko ne",
91 "Tux2 je dobar pingvin",
92 "Posalji mi sexy selfi pa da lakse zaspim",
93 "IsoBrat je glup !",
94 "Zamolite Semka da donira za leba i krofne",
95 "PLATI PA SE KLATI",
96 "Tvoj nivo inteligencije je ravan Milanu Tarotu?",
97 "Zaista?",
98 "Zdrava hrana pusi ti mama",
99 "Joj sto nesto lepo Mirusi?",
100 "Jabuka mmmm seksi ima crva?",
101 "Rece jedan stari mudrac: pitaj dace ti 100%.",
102 "Srećom pa komandantu matematika nije bila jaÄa strana.",
103 "Radovane ta ograda nije nesto dobra po tebe.",
104 "Vucic je peder, a premijerka lezba.",
105 "Lule otisao da piski pridrzi mu kitu.",
106 "Mali Yasuo i njegov kais.",
107 "Jedan,dva ChrisPMC kurac zaglaba",
108 "Il buÅ¡ piÄke dala, il buÅ¡ zube brala.",
109 "Ja nemam dlake na jeziku. Ja Äesto brijem svoja jaja.",
110 "Baš si ludac popuši mi kurac poliži mi jaja da je kita maja ",
111 "Malo maÄe po piÄki ti skaÄe",
112 "Nemam sladoled ali ima da ga lizes",
113 "Dobra ti je rima popusi nam svima",
114 "Digo mi se, napalio si me, ko baba na zele bombone.",
115 "Ne znam.",
116 "volina pije vinjak."
117 ];
118 let result = Math.floor((Math.random() * replies.length));
119
120 let embed = new Discord.RichEmbed()
121 .setColor(EMBED_COLOR)
122 .addField("`â“` Pitanje", args.join(" "))
123 .addField("`✅` Odgovor", replies[result])
124 .setFooter(EMBED_FOOTER)
125 message.channel.send(embed);
126};
127
128function avatarCMD(message, args) {
129 let usersAvatar = message.guild.member(message.mentions.users.first() || message.guild.members.get(args[0]));
130 let embed = new Discord.RichEmbed()
131 .setColor(EMBED_COLOR)
132 .setTitle(`Avatar Link`)
133 .setAuthor(usersAvatar.user.tag, usersAvatar.user.displayAvatarURL)
134 .setURL(usersAvatar.user.displayAvatarURL)
135 .setImage(usersAvatar.user.displayAvatarURL)
136 .setFooter(EMBED_FOOTER)
137 message.channel.send(embed);
138};
139
140function clientInfoCMD(message) {
141 let embed = new Discord.RichEmbed()
142 .setColor(EMBED_COLOR)
143 .addField(":tools:__**client DEVELOPER**__", `NRG Team`)
144 .addField(":bulb:__**client NAME**__", client.user.username)
145 .addField(":calendar:__**CREATED**__", client.user.createdAt)
146 .addField(":newspaper:__**client LIBRARY**__", "discord.js")
147 .setFooter(EMBED_FOOTER)
148
149 return message.channel.send(embed)
150};
151
152function fmkCMD(message, args) {
153 let fmkUser = message.guild.member(message.mentions.users.first() || message.guild.members.get(args[0]));
154 if (!fmkUser) return message.channel.send(ERR_FIND_USER);
155 let replies = ['Marry :ring:', 'Kill :bomb:', 'Fuck :smirk:'];
156 let result = Math.floor(Math.random() * replies.length);
157 let embed = new Discord.RichEmbed()
158 .setDescription(`**${args[0]} je odabran/a by <@${message.author.id}>**`)
159 .setColor(EMBED_COLOR)
160 .addField('Tvoj odabir:', replies[result])
161 .setFooter(EMBED_FOOTER)
162
163 message.channel.send(embed);
164};
165
166function gayCMD(message, args) {
167 let gay = Math.round(Math.random() * 100);
168 let user = message.guild.member(message.mentions.users.first() || message.guild.members.get(args[0]));
169 if (!user) {
170 let embed = new Discord.RichEmbed()
171 .addField("**NRG** | Gayrate", `Ja mislim da ste **${gay}**% gay! :gay_pride_flag: `)
172 .setFooter(EMBED_FOOTER)
173 message.channel.send(embed);
174 } else {
175 let embed = new Discord.RichEmbed()
176 .addField("**NRG** | Gayrate", ` <@${user.id}> je **${gay}%** gay :gay_pride_flag: `)
177 .setFooter(EMBED_FOOTER)
178 message.channel.send(embed);
179 }
180};
181
182function iqRateCMD(message, args) {
183 let iqrate = Math.round(Math.random() * 100);
184 let user = message.guild.member(message.mentions.users.first() || message.guild.members.get(args[0]));
185 if (!user) {
186 let embed = new Discord.RichEmbed()
187 .addField("**NRG** | IQRate", `Mislim da imate samo **${iqrate}**% IQ! `)
188 .setFooter(EMBED_FOOTER)
189 message.channel.send(embed);
190 } else {
191 let embed = new Discord.RichEmbed()
192 .addField("**NRG** | IQRate", ` <@${user.id}> imate samo **${iqrate}%** IQ!`)
193 .setFooter(EMBED_FOOTER)
194 message.channel.send(embed);
195 }
196};
197
198async function kissCMD(message, args) {
199 const {body} = await superagent.get(`https://nekos.life/api/v2/img/kiss`);
200 let user = message.guild.member(message.mentions.users.first() || message.guild.members.get(args[0]));
201
202 let embed = new Discord.RichEmbed()
203 .setTitle("Awwww....")
204 .setDescription(`**${message.author.username}** poljubili ste **${user}**!`)
205 .setImage(body.url)
206 .setFooter(EMBED_FOOTER)
207 return message.channel.send(embed);
208};
209
210function hackCMD(message, args) {
211 let user = message.guild.member(message.mentions.users.first() || message.guild.members.get(args[0]));
212 if (!args[0]) return message.channel.send(ERR_FIND_USER);
213 message.channel.send('Hacking ' + `${user.username}` + ' ...').then(function (m) {
214 setTimeout(function () {
215 m.edit(':lock: v1 | Hacking in process.')
216 }, 1000)
217 setTimeout(function () {
218 m.edit(':lock: v2 | Hacking in process..')
219 }, 3000)
220 setTimeout(function () {
221 m.edit(':lock: v3 | Hacking in process...')
222 }, 5000)
223 setTimeout(function () {
224 m.edit('Finding email..')
225 }, 8000)
226 setTimeout(function () {
227 m.edit(':e_mail: | Email: ' + '`' + user.username + '***@gmail.com`')
228 }, 12000)
229 setTimeout(function () {
230 m.edit('Finding password..')
231 }, 16000)
232 setTimeout(function () {
233 m.edit(':pushpin: | Password: ' + '`' + '********`')
234 }, 20000)
235 setTimeout(function () {
236 m.edit('Finding IP Address..')
237 }, 25000)
238 setTimeout(function () {
239 m.edit(':electric_plug: | IP address: ' + '`' + '185.***.*1.1`')
240 }, 30000)
241 setTimeout(function () {
242 m.edit(`:tada: | ${user} sucessfully hacked by ${message.author.username}!!`)
243 }, 35000)
244 });
245};
246
247async function pingCMD(message) {
248 const msg = await message.channel.send('Pong?');
249 msg.edit(`Pong! **${(msg.createdTimestamp - message.createdTimestamp) / 1000}**s (${msg.createdTimestamp - message.createdTimestamp}ms). `);
250};
251
252function uptimeCMD(message) {
253 let u = convertMS(bot.uptime);
254 let uptime = u.d + " days " + u.h + " hours " + u.m + " minutes " + u.s + " seconds";
255
256 let embed = new Discord.RichEmbed()
257 .setColor(EMBED_COLOR)
258 .addField(`UPTIME`, `**${uptime}**`)
259 message.channel.send(embed);
260};
261
262function weatherCMD(message, args) {
263 weather.find({
264 search: args.join(" "),
265 degreeType: 'C'
266 }, function (err, result) {
267 if (result.length === 0) {
268 message.channel.send("**MoraÅ¡ upisat taÄnu lokaciju!**")
269 return;
270 }
271 let current = result[0].current;
272 let location = result[0].location;
273 if (err) message.channel.send(err);
274 let embed = new Discord.RichEmbed()
275 .setDescription(`**${current.skytext}**`)
276 .setAuthor(`Vreme za ${current.observationpoint}`)
277 .setColor(EMBED_COLOR)
278 .addField('Stepeni', location.degreetype, true)
279 .addField('Temperatura', `${current.temperature} stepena`, true)
280 .addField('Izgleda kao', `${current.feelslike} stepena`, true)
281 .addField('Vetrovi', current.winddisplay, true)
282 .addField('Vlažnost', `${current.humidity}%`, true)
283 .setFooter(EMBED_FOOTER)
284 message.channel.send(embed)
285 });
286};
287
288function slapCMD(message, args) {
289 let user = message.guild.member(message.mentions.users.first() || message.guild.members.get(args[0]));
290 let images = [
291 "https://i.imgur.com/fm49srQ.gif",
292 "https://i.imgur.com/o2SJYUS.gif",
293 "https://i.imgur.com/Agwwaj6.gif",
294 "https://i.gifer.com/cCX.gif",
295 "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcR7vgxCdD_ojfyfBGdZPeei11Hm7cK3zrPJTcsTYZ9Tl-dsA7upzw",
296 "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRUPZp5heqxYIWj0l1G0KDC3o9YqJvmAG2FqP6n1BSVGwO5pnSMgg",
297 "https://pa1.narvii.com/6067/68a2bb5829d993b3362a37dce55caa9c0949af6c_hq.gif"
298 ];
299 let rand = Math.floor(Math.random() * images.length);
300 let randomImage = images[rand];
301
302 const patEmb = new Discord.RichEmbed()
303 .setImage(randomImage);
304
305 message.channel.send(`<@${message.author.id}> je ošamario/la **${user}**`, patEmb);
306};
307
308// ASYNC FUNCTIONS
309async function banCMD(message, args) {
310 if (!message.member.hasPermission("BAN_MEMBERS")) return message.channel.send(ERR_NOPERMS);
311 let userToBan = message.guild.member(message.mentions.users.first() || message.guild.members.get(args[0]));
312 if (!userToBan) return message.channel.send(ERR_FIND_USER);
313 if (userToBan.hasPermission("BAN_MEMBERS")) return message.channel.send(ERR_USER_HASPERMS);
314 let reason = args.join(" ").slice(args[0].length);
315 if (!reason) reason = ERR_NO_REASON;
316 await userToBan.ban({reason: reason});
317 return message.channel.send(`${userToBan} was banned for the reason: ${reason}`);
318};
319
320async function purgeCMD(message, args) {
321 if (!message.member.hasPermission("MANAGE_MESSAGES")) return message.channel.send(ERR_NOPERMS);
322 let nOM = parseInt(args[0]);
323 if (nOM > 100) return message.delete() && message.channel.send(ERR_TOOMUCH).then(m => setTimeout(() => { m.delete() }, 5000));
324 if (!nOM) return message.channel.send(`:x: Please put a number of messages u want to delete!`)
325 await message.channel.fetchMessages({ limit: nOM }).then(msgs => message.channel.bulkDelete(msgs));
326 return message.channel.send(`:x: I've successfully deleted ${nOM}x messages!`).then(m => setTimeout(() => {m.delete()}, 5000));
327};
328
329async function userInfoCMD(message, args) {
330 let user = await message.guild.member(message.mentions.users.first() || message.guild.members.get(args[0]));
331 const embed = new Discord.RichEmbed()
332 .setAuthor(user.tag, user.avatarURL)
333 .setDescription("<@" + user.id + ">")
334 .addField('Nickname', member.nickname ? member.nickname : 'None', true)
335 .addField("Username", user.username, true)
336 .addField('Registered', `${moment(user.createdAt).format("LLLL")}`, true)
337 .addField('Is a bot account?', user.bot ? 'Yes' : 'No', true)
338 .addField('Status', user.presence.status, true)
339 .addField('Game', user.presence.game ? user.presence.game.name : 'None', true)
340 .addField("Joined", `${moment(member.joinedAt).format("LLLL")}`, true)
341 .addField("Roles [" + member.roles.size + "]", member.roles.map(r => r.name).join(', '), true)
342 .setThumbnail(user.avatarURL)
343 .setFooter("ID: " + user.id, user.avatarURL)
344 .setColor(EMBED_COLOR)
345 return message.channel.send(embed)
346};
347
348client.login(TOKEN);
349
350client.on("ready", async () => {
351 console.clear();
352 figlet.text(`NRG BOT`, {
353 font: 'Graceful',
354 horizontalLayout: 'default',
355 verticalLayout: 'default'
356 }, function (err, data) {
357 if (err) {
358 console.log('Something went wrong...');
359 console.dir(err);
360 return;
361 }
362 console.log(colors.green(data));
363 console.log(colors.red.bold(`\n Made by Atomic#5751`))
364 })
365 client.user.setActivity('© 2020 All Rights Reserved NRG')
366});
367
368client.on("guildMemberAdd", async (member) => {
369 console.log(colors.green(`[-] ${member.user.tag} joined the server.`))
370});
371
372client.on("guildMemberRemove", async (member) => {
373 console.log(colors.red(`[-] ${member.user.tag} left the server.`))
374});
375
376client.on('message', async (message) => {
377 if (!message.guild) return;
378 if (message.author.bot) return;
379 // COMMANDS #######################
380 if (message.content.startsWith(PREFIX)) {
381 let args = message.content.substring(PREFIX.length).split(" ");
382 let command = args.shift().toLowerCase();
383 switch (command) {
384 case "help":
385 return helpCMD(message);
386 case "8ball":
387 return eightBallCMD(message, args);
388 case "membercount":
389 return memberCountCMD(message);
390 case "ban":
391 return banCMD(message, args);
392 case "avatar":
393 return avatarCMD(message, args);
394 case "purge":
395 return purgeCMD(message, args);
396 case "botinfo":
397 return clientInfoCMD(message, args);
398 case "fmk":
399 return fmkCMD(message, args);
400 case "gayrate":
401 return gayCMD(message, args);
402 case "hack":
403 return hackCMD(message, args);
404 case "kiss":
405 return kissCMD(message, args);
406 case "weather":
407 return weatherCMD(message, args);
408 case "uptime":
409 return uptimeCMD(message);
410 case "ping":
411 return pingCMD(message);
412 case "iqrate":
413 return iqRateCMD(message, args);
414 case "userinfo":
415 return userInfoCMD(message, args);
416 case "slap":
417 return slapCMD(message, args);
418
419 default:
420 return message.channel.send(ERR_CMD_INVALID)
421 };
422 };
423});