Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion .env.example
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
APP_NAME=perifaCode BOT

TOKEN_DISCORD=SUA_TOKEN_DEVELOPER_PORTAL
TOKEN_DISCORD=

TOKEN_MONGODB=""
86 changes: 78 additions & 8 deletions commands/aniversario.js
Original file line number Diff line number Diff line change
@@ -1,16 +1,86 @@
module.exports = function niver(msg, botId) {
if (msg.author.id === botId || msg.channel.name !== 'aniversários') {
/* eslint-disable comma-dangle */
const { MessageEmbed } = require('discord.js');
const mongoDB = require('../connections/mongoDB');

function transformMencion(id) {
return '**<@'.concat(id).concat('>**\n');
}

function listarAniversariantes(lista) {
const listaMencao = [];
lista.forEach(({ _id }) => {
listaMencao.unshift(transformMencion(_id));
});
return listaMencao;
}

function validaData(msg) {
let data = msg;
const myRegexp = /\d{1,2}[-./]\d{1,2}/g;
data = myRegexp.exec(data);
if (data) {
data = data[0].replace(/[-.]/g, '/');

const dtArray = data.split('/');

const dtDay = dtArray[0];
const dtMonth = dtArray[1];

if (dtDay < 1 || dtDay > 31) return false;
if (dtMonth < 1 || dtMonth > 12) return false;

return data;
}
return false;
}

module.exports = async function niver(msg) {
const zeroFill = (n) => '0'.concat(n).slice(-2);

const data = new Date();
const dia = zeroFill(data.getDate());
const mes = zeroFill(data.getMonth() + 1);
const hoje = dia.concat('/').concat(mes);

const { id, username } = msg.author;
const dados = {
id,
username,
data: validaData(msg),
hoje,
};

if (msg.channel.name !== 'aniversários') {
return;
}
const mongoDB = require('../connections/mongoDB');

if (msg.content.match(/niver/gi)) {
msg.channel.send('Aniversário gravado!');
mongoDB(msg, 'gravar');
msg.react('🥳');
if (msg.content.match(/niver/gi) && validaData(msg)) {
const resposta = await mongoDB.gravar(dados);

if (resposta) {
msg.channel.send('Aniversário atualizado');
msg.react('🔄');
} else {
msg.channel.send('Aniversário gravado!');
msg.react('🥳');
}
} else if (msg.content === '!aniversariantes') {
msg.channel.send('Buscando aniversariantes');
mongoDB(msg, 'buscar');
msg.react('🤘');

const aniversariantes = await mongoDB.buscar(dados);
if (aniversariantes) {
const listaAniversariantes = listarAniversariantes(aniversariantes);
const embed = new MessageEmbed()
.setTitle('🎈 Aniversariantes do dia 🎈')
.setDescription(
`${listaAniversariantes} \n Um feliz aniversário a todos, em nome da perifaCode. ✨💛`
)
.setFooter('Criado com 💛 pela comunidade perifaCode')
.setColor('#fff200');
msg.channel.send(embed);
} else {
msg.channel.send('Não temos aniversariantes no dia de hoje! ☺');
}
}
};
126 changes: 64 additions & 62 deletions connections/mongoDB.js
Original file line number Diff line number Diff line change
@@ -1,80 +1,82 @@
/* eslint-disable comma-dangle */
const { MongoClient } = require('mongodb');
const { MessageEmbed } = require('discord.js');

module.exports = function mongoDB(msg, argumento) {
const zeroFill = (n) => {
return ('0' + n).slice(-2);
};

const data = new Date();
const dia = zeroFill(data.getDate());
const mes = zeroFill(data.getMonth() + 1);
const hoje = dia + '/' + mes;

const usuario = msg.author;
const aniversario = msg.content.split(' ')[1];

async function main() {
const uri = process.env.TOKEN_MONGODB;
const client = new MongoClient(uri, {
useNewUrlParser: true,
useUnifiedTopology: true,
});
async function connection() {
const uri = process.env.TOKEN_MONGODB;
const client = new MongoClient(uri, {
useNewUrlParser: true,
useUnifiedTopology: true,
});

try {
await client.connect();
if (argumento === 'gravar') {
await createListing(client, {
_id: usuario.id,
nome: usuario.username,
Aniversario: aniversario,
});
} else if (argumento === 'buscar') {
await findByDate(client, hoje, msg);
}
} catch (e) {
console.error(e);
} finally {
await client.close();
}
try {
await client.connect();
return client;
} catch (error) {
return error;
}

main().catch(console.error);
};

async function createListing(client, newListing) {
await client.db('Dados').collection('Aniversarios').insertOne(newListing);
}

async function findByDate(client, date, msg) {
async function findByDate(client, date) {
const cursor = await client.db('Dados').collection('Aniversarios').find({
Aniversario: date,
aniversario: date,
});
const results = await cursor.toArray();

if (results.length > 0) {
const aniversariantes = listaAniversariantes(results);
const embed = new MessageEmbed()
.setTitle('🎈 Aniversariantes do dia 🎈')
.setDescription(
`${aniversariantes} \n Um feliz aniversário a todos, em nome da perifaCode. ✨💛`,
)
.setFooter('Criado com 💛 pela comunidade perifaCode')
.setColor('#fff200');
msg.channel.send(embed);
} else {
msg.channel.send('Não temos aniversariantes no dia de hoje! ☺');
return results;
}
return null;
}

function listaAniversariantes(lista) {
const listaMencao = new Array();
lista.forEach((aniversario) => {
listaMencao.unshift(transformMencion(aniversario._id));
async function findById(client, id) {
const cursor = await client.db('Dados').collection('Aniversarios').find({
_id: id,
});
return listaMencao;
const results = await cursor.toArray();
if (results.length > 0) return true;
return false;
}

function transformMencion(id) {
return '**<@'.concat(id).concat('>**\n');
async function atualizar(client, dados) {
await client
.db('Dados')
.collection('Aniversarios')
.updateOne(
{ _id: dados.id },
{
$set: {
aniversario: dados.data,
},
}
);
return true;
}

async function criar(client, dados) {
await client.db('Dados').collection('Aniversarios').insertOne({
_id: dados.id,
username: dados.username,
aniversario: dados.data,
});
return true;
}

module.exports = {
buscar: async (dados) => {
const client = await connection();
const resposta = await findByDate(client, dados.hoje);
await client.close();
return resposta;
},
gravar: async (dados) => {
const client = await connection();
const resposta = await findById(client, dados.id);
if (resposta) {
atualizar(client, dados);
} else {
criar(client, dados);
}
await client.close();
return resposta;
},
};
24 changes: 21 additions & 3 deletions index.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
/* eslint-disable comma-dangle */
const { Client, MessageEmbed } = require('discord.js');
const cron = require('cron');

const client = new Client();
const events = require('./commands/events');
Expand All @@ -13,9 +15,10 @@ const mentor = require('./commands/mentor/mentor');
const aniversario = require('./commands/aniversario');
const plantoes = require('./commands/plantoes');
require('dotenv/config');

client.on('guildMemberAdd', (member) => {
const channel = member.guild.channels.cache.find(
(ch) => ch.name === 'bem-vindo',
(ch) => ch.name === 'bem-vindo'
);
if (!channel) return;
const embed = new MessageEmbed()
Expand All @@ -25,7 +28,7 @@ client.on('guildMemberAdd', (member) => {
Seja muito bem vindo ao nosso servidor, ${member}!
Aproveite e dê uma olhada no nosso Github e contribua com nossos projetos. 😄
🔗 http://github.com/perifacode
`,
`
)
.setFooter('Criado com 💛 pela comunidade perifaCode')
.setColor('#fff200');
Expand All @@ -43,7 +46,22 @@ client.on('message', (msg) => {
mentor(msg);
events(msg);
aniversario(msg, client.user.id);
plantoes(msg)
plantoes(msg);
});

client.login(process.env.TOKEN_DISCORD);

client.on('ready', () => {
const ID_CANAL_ANIVERSARIO = ''; // ID DO CANAL ANIVERSARIO (talvez desejar parabens no canal geral)
const job = new cron.CronJob(
'00 00 13 * * *',
async () => {
const channel = await client.channels.fetch(ID_CANAL_ANIVERSARIO);
await channel.send('!aniversariantes');
},
null,
true,
'America/Sao_Paulo'
);
job.start();
});
Loading