switch to mysql

merge-requests/3/head
Loïc Bersier 5 years ago
parent e64f4a9eb1
commit 1b66983fb7

@ -1,5 +1,5 @@
const fs = require('fs');
const { Command } = require('discord-akairo'); const { Command } = require('discord-akairo');
const autoResponseStat = require('../../models').autoresponseStat;
class autoresponseCommand extends Command { class autoresponseCommand extends Command {
constructor() { constructor() {
@ -8,7 +8,7 @@ class autoresponseCommand extends Command {
category: 'admin', category: 'admin',
args: [ args: [
{ {
id: 'text', id: 'stat',
type: 'string', type: 'string',
prompt: { prompt: {
start: 'Do you want to **enable** or **disable** auto response?', start: 'Do you want to **enable** or **disable** auto response?',
@ -30,61 +30,18 @@ class autoresponseCommand extends Command {
} }
async exec(message, args) { async exec(message, args) {
let text = args.text; if (args.stat == 'enable' || args.stat == 'disable') {
let all = args.all; const autoresponseStat = await autoResponseStat.findOne({where: {serverID: message.guild.id}});
if (text.toLowerCase() == 'enable' || text.toLowerCase() == 'disable') { if (!autoresponseStat) {
let autoresponse = {}; const body = {serverID: message.guild.id, stat: args.stat};
let json = JSON.stringify(autoresponse); autoResponseStat.create(body);
return message.channel.send(`Autoresponse have been ${args.stat}ed`);
if (all == 'all') { } else {
const guild = this.client.guilds.get(message.guild.id); const body = {serverID: message.guild.id, stat: args.stat};
autoResponseStat.update(body, {where: {serverID: message.guild.id}});
fs.readFile('./json/autoresponse.json', 'utf8', function readFileCallback(err, data) { return message.channel.send(`Autoresponse have been ${args.stat}ed`);
if (err) {
console.log(err);
} else {
autoresponse = JSON.parse(data); //now it an object
guild.channels.forEach(channel => autoresponse[channel] = text.toLowerCase());
json = JSON.stringify(autoresponse); //convert it back to json
json = json.replace(/[<#>]/g, '');
fs.writeFile('./json/autoresponse.json', json, 'utf8', function (err) {
if (err) {
return console.log(err);
}
});
}
});
return message.channel.send('Auto response have been disable/enable on every channel');
} else if (text.toLowerCase() == 'disable' || text.toLowerCase() == 'enable') {
fs.readFile('./json/autoresponse.json', 'utf8', function readFileCallback(err, data) {
if (err) {
console.log(err);
} else {
autoresponse = JSON.parse(data); //now it an object
autoresponse[message.channel.id] = text.toLowerCase();
json = JSON.stringify(autoresponse); //convert it back to json
fs.writeFile('./json/autoresponse.json', json, 'utf8', function (err) {
if (err) {
return console.log(err);
}
});
}
});
} }
return message.channel.send(`Autoresponse have been ${text.toLowerCase()}d`);
} else {
return message.channel.send('You didin\'t type a valid input');
} }
} }
} }

@ -1,5 +1,5 @@
const { Command } = require('discord-akairo'); const { Command } = require('discord-akairo');
const fs = require('fs'); const Tag = require('../../models').Tag;
class TagCommand extends Command { class TagCommand extends Command {
constructor() { constructor() {
@ -35,37 +35,15 @@ class TagCommand extends Command {
} }
async exec(message, args) { async exec(message, args) {
if (args.trigger == null || args.response == null) return; const tag = await Tag.findOne({where: {trigger: args.trigger, serverID: message.guild.id}});
let trigger = args.trigger;
let response = args.response;
trigger = trigger.toLowerCase(); if (!tag) {
const body = {trigger: args.trigger, response: args.response, owner: message.author.id, serverID: message.guild.id};
let customresponse = {}; Tag.create(body);
let json = JSON.stringify(customresponse); return message.channel.send(`autoresponse have been set to ${args.trigger} : ${args.response}`);
} else {
fs.readFile(`./tag/${message.guild.id}.json`, 'utf8', function readFileCallback(err, data) { return message.channel.send('The tag already exist!');
if (err) { }
fs.writeFile(`./tag/${message.guild.id}.json`, `{"${trigger}":"${response}"}`, function (err) {
if (err) {
console.log(err);
}
});
} else {
customresponse = JSON.parse(data); //now it an object
customresponse[trigger] = response;
json = JSON.stringify(customresponse); //convert it back to json
fs.writeFile(`./tag/${message.guild.id}.json`, json, 'utf8', function (err) {
if (err) {
return console.log(err);
}
});
}
});
return message.channel.send(`autoresponse have been set to ${trigger} : ${response}`);
} }
} }

@ -1,5 +1,5 @@
const { Command } = require('discord-akairo'); const { Command } = require('discord-akairo');
const fs = require('fs'); const Tag = require('../../models').Tag;
class UnTagCommand extends Command { class UnTagCommand extends Command {
constructor() { constructor() {
@ -28,33 +28,13 @@ class UnTagCommand extends Command {
} }
async exec(message, args) { async exec(message, args) {
let trigger = args.trigger; const tag = await Tag.findOne({where: {trigger: args.trigger, serverID: message.guild.id}});
if (tag) {
trigger = trigger.toLowerCase(); Tag.destroy({where: {trigger: args.trigger, serverID: message.guild.id}});
return message.channel.send('Sucesffuly deleted the following tag: ' + args.trigger);
let customresponse = {}; } else {
let json = JSON.stringify(customresponse); return message.channel.send('Did not find the specified tag, are you sure it exist?');
}
fs.readFile(`./tag/${message.guild.id}.json`, 'utf8', function readFileCallback(err, data) {
if (err) {
console.log(err);
} else {
customresponse = JSON.parse(data); //now it an object
delete customresponse[trigger];
json = JSON.stringify(customresponse); //convert it back to json
fs.writeFile(`./tag/${message.guild.id}.json`, json, 'utf8', function (err) {
if (err) {
return console.log(err);
}
});
}
});
return message.channel.send(`The following autoresponse have been deleted: ${trigger}`);
} }
} }

@ -1,11 +1,9 @@
const { Listener } = require('discord-akairo'); const { Listener } = require('discord-akairo');
const { MessageEmbed } = require('discord.js'); const { MessageEmbed } = require('discord.js');
const responseObject = require('../../json/reply.json');
const reactObject = require('../../json/react.json');
const imgResponseObject = require('../../json/imgreply.json');
const rand = require('../../rand.js'); const rand = require('../../rand.js');
const reload = require('auto-reload'); const Tag = require('../../models').Tag;
const fs = require('fs'); const autoResponse = require('../../models').autoresponse;
const autoResponseStat = require('../../models').autoresponseStat;
class messageListener extends Listener { class messageListener extends Listener {
constructor() { constructor() {
@ -16,162 +14,156 @@ class messageListener extends Listener {
} }
async exec(message) { async exec(message) {
if (message.author.bot) return; { if (message.author.bot) return;
let autoresponse = reload('../../json/autoresponse.json'); const autoresponseStat = await autoResponseStat.findOne({where: {serverID: message.guild.id}});
let message_content = message.content.toLowerCase();
if (autoresponseStat) {
// If autoresponse is enable send the response // If autoresponse is enable send the response
if(autoresponse[message.channel.id] == 'enable') { if(autoresponseStat.get('stat') == 'enable' && autoresponseStat.get('serverID') == message.guild.id) {
// Reply with images as attachement // Reply with images as attachement
if(imgResponseObject[message_content]) { const autoresponse = await autoResponse.findOne({where: {trigger: message.content.toLowerCase()}});
message.channel.send({files: [imgResponseObject[message_content]]});
} if (autoresponse) {
// React only to the messages autoResponse.findOne({where: {trigger: message.content.toLowerCase()}});
else if(reactObject[message_content]) { let trigger = autoresponse.get('trigger');
message.react(reactObject[message_content]); let type = autoresponse.get('type');
} let content = autoresponse.get('response');
// auto respond to messages
else if(responseObject[message_content]) { if (trigger == message.content.toLowerCase() && type == 'text') {
message.channel.send(responseObject[message_content]); return message.channel.send(content);
// If it contain 'like if' react with 👍 } else if (trigger == message.content.toLowerCase() && type == 'react') {
} else if (message_content.includes('like if')) { return message.react(content);
message.react('\u{1F44D}'); } else if (trigger == message.content.toLowerCase() && type == 'image') {
// If it contain 'jeff' react with a jeff emote return message.channel.send({files: [content]});
} else if (message_content.includes('jeff')) { }
message.react('496028845967802378');
} }
} }
// User autoresponse // User autoresponse
if (fs.existsSync(`./tag/${message.guild.id}.json`)) { const tag = await Tag.findOne({where: {trigger: message.content.toLowerCase(), serverID: message.guild.id}});
let customresponse = reload(`../../tag/${message.guild.id}.json`); if (tag) {
Tag.findOne({where: {trigger: message.content.toLowerCase(), serverID: message.guild.id}});
if(customresponse[message_content]) { let text = tag.get('response');
let text = customresponse[message_content]; if (text.includes('[ban]')) {
if (text.includes('[ban]')) { message.member.ban('Tag ban :^)');
message.member.ban('Tag ban :^)'); } else if (text.includes('[kick]')) {
} else if (text.includes('[kick]')) { message.member.kick('Tag kick :^)');
message.member.kick('Tag kick :^)'); } else if (text.includes('[delete]')) {
} else if (text.includes('[delete]')) { message.delete('Tag delete :^)');
message.delete('Tag delete :^)'); }
}
text = rand.random(text, message); text = rand.random(text, message);
let attach = ''; let attach = '';
if (text.includes('[attach:')) { if (text.includes('[attach:')) {
attach = text.split(/(\[attach:.*?])/); attach = text.split(/(\[attach:.*?])/);
for (let i = 0, l = attach.length; i < l; i++) { for (let i = 0, l = attach.length; i < l; i++) {
if (attach[i].includes('[attach:')) { if (attach[i].includes('[attach:')) {
attach = attach[i].replace('[attach:', '').slice(0, -1); attach = attach[i].replace('[attach:', '').slice(0, -1);
i = attach.length; i = attach.length;
}
} }
text = text.replace(/(\[attach:.*?])/, '');
} }
text = text.replace(/(\[attach:.*?])/, '');
}
// THIS SECTION IS VERY VERY BAD MUST CHANGE // THIS SECTION IS VERY VERY BAD MUST CHANGE
if (text.includes('[embed]')) { if (text.includes('[embed]')) {
text = text.replace(/\[embed\]/, ' '); text = text.replace(/\[embed\]/, ' ');
let title = ''; let title = '';
let desc = ''; let desc = '';
let image; let image;
let thumbnail; let thumbnail;
let footer = ''; let footer = '';
let color; let color;
if (text.includes('[embedImage:')) { if (text.includes('[embedImage:')) {
image = text.split(/(\[embedImage:.*?])/); image = text.split(/(\[embedImage:.*?])/);
for (let i = 0, l = image.length; i < l; i++) { for (let i = 0, l = image.length; i < l; i++) {
if (image[i].includes('[embedImage:')) { if (image[i].includes('[embedImage:')) {
image = image[i].replace('[embedImage:', '').slice(0, -1); image = image[i].replace('[embedImage:', '').slice(0, -1);
text = text.replace(/(\[embedimage:.*?])/g, ''); text = text.replace(/(\[embedimage:.*?])/g, '');
i = image.length; i = image.length;
}
} }
} }
}
if (text.includes('[embedThumbnail:')) { if (text.includes('[embedThumbnail:')) {
thumbnail = text.split(/(\[embedThumbnail:.*?])/); thumbnail = text.split(/(\[embedThumbnail:.*?])/);
for (let i = 0, l = thumbnail.length; i < l; i++) { for (let i = 0, l = thumbnail.length; i < l; i++) {
if (thumbnail[i].includes('[embedThumbnail:')) { if (thumbnail[i].includes('[embedThumbnail:')) {
thumbnail = thumbnail[i].replace('[embedThumbnail:', '').slice(0, -1); thumbnail = thumbnail[i].replace('[embedThumbnail:', '').slice(0, -1);
text = text.replace(/(\[embedThumbnail:.*?])/g, ''); text = text.replace(/(\[embedThumbnail:.*?])/g, '');
i = thumbnail.length; i = thumbnail.length;
}
} }
} }
}
if (text.includes('[embedColor:')) { if (text.includes('[embedColor:')) {
color = text.split(/(\[embedColor:.*?])/); color = text.split(/(\[embedColor:.*?])/);
for (let i = 0, l = color.length; i < l; i++) { for (let i = 0, l = color.length; i < l; i++) {
if (color[i].includes('[embedColor:')) { if (color[i].includes('[embedColor:')) {
color = color[i].replace('[embedColor:', '').slice(0, -1); color = color[i].replace('[embedColor:', '').slice(0, -1);
text = text.replace(/(\[embedColor:.*?])/g, ''); text = text.replace(/(\[embedColor:.*?])/g, '');
i = color.length; i = color.length;
}
} }
} }
}
if (text.includes('[embedTitle:')) { if (text.includes('[embedTitle:')) {
title = text.split(/(\[embedTitle:.*?])/); title = text.split(/(\[embedTitle:.*?])/);
for (let i = 0, l = title.length; i < l; i++) { for (let i = 0, l = title.length; i < l; i++) {
if (title[i].includes('[embedTitle:')) { if (title[i].includes('[embedTitle:')) {
title = title[i].replace('[embedTitle:', '').slice(0, -1); title = title[i].replace('[embedTitle:', '').slice(0, -1);
text = text.replace(/(\[embedTitle:.*?])/g, ''); text = text.replace(/(\[embedTitle:.*?])/g, '');
i = title.length; i = title.length;
}
} }
} }
}
if (text.includes('[embedFooter:')) { if (text.includes('[embedFooter:')) {
footer = text.split(/(\[embedFooter:.*?])/); footer = text.split(/(\[embedFooter:.*?])/);
for (let i = 0, l = footer.length; i < l; i++) { for (let i = 0, l = footer.length; i < l; i++) {
if (footer[i].includes('[embedFooter:')) { if (footer[i].includes('[embedFooter:')) {
footer = footer[i].replace('[embedFooter:', '').slice(0, -1); footer = footer[i].replace('[embedFooter:', '').slice(0, -1);
text = text.replace(/(\[embedFooter:.*?])/g, ''); text = text.replace(/(\[embedFooter:.*?])/g, '');
i = footer.length; i = footer.length;
}
} }
} }
}
if (text.includes('[embedDesc:')) { if (text.includes('[embedDesc:')) {
desc = text.split(/(\[embedDesc:.*?])/); desc = text.split(/(\[embedDesc:.*?])/);
for (let i = 0, l = desc.length; i < l; i++) { for (let i = 0, l = desc.length; i < l; i++) {
if (desc[i].includes('[embedDesc:')) { if (desc[i].includes('[embedDesc:')) {
desc = desc[i].replace('[embedDesc:', '').slice(0, -1); desc = desc[i].replace('[embedDesc:', '').slice(0, -1);
i = desc.length; i = desc.length;
}
} }
} }
}
const embed = new MessageEmbed() const embed = new MessageEmbed()
.setColor(color) .setColor(color)
.setTitle(title) .setTitle(title)
.setImage(image) .setImage(image)
.setThumbnail(thumbnail) .setThumbnail(thumbnail)
.setDescription(desc) .setDescription(desc)
.setFooter(footer) .setFooter(footer)
.setTimestamp(); .setTimestamp();
if (attach) {
return message.channel.send(embed, {files: [attach]});
} else {
return message.channel.send(embed);
}
}
if (attach) { if (attach) {
return message.channel.send(text, {files: [attach]}); return message.channel.send(embed, {files: [attach]});
} else { } else {
return message.channel.send(text); return message.channel.send(embed);
} }
} }
return message.channel.send(text);
} }
} }
} }

@ -0,0 +1,39 @@
/* eslint-disable no-unused-vars */
/* eslint-disable indent */
'use strict';
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.createTable('Tags', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER,
},
trigger: {
type: Sequelize.TEXT,
unique: true
},
response: {
type: Sequelize.TEXT,
},
ownerID: {
type: Sequelize.BIGINT,
},
serverID: {
type: Sequelize.BIGINT,
},
createdAt: {
allowNull: false,
type: Sequelize.DATE
},
updatedAt: {
allowNull: false,
type: Sequelize.DATE
}
});
},
down: (queryInterface, Sequelize) => {
return queryInterface.dropTable('Tags');
}
};

@ -0,0 +1,35 @@
/* eslint-disable no-unused-vars */
/* eslint-disable indent */
'use strict';
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.createTable('autoresponses', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER
},
trigger: {
type: Sequelize.TEXT
},
response: {
type: Sequelize.TEXT
},
type: {
type: Sequelize.STRING
},
createdAt: {
allowNull: false,
type: Sequelize.DATE
},
updatedAt: {
allowNull: false,
type: Sequelize.DATE
}
});
},
down: (queryInterface, Sequelize) => {
return queryInterface.dropTable('autoresponses');
}
};

@ -0,0 +1,32 @@
/* eslint-disable no-unused-vars */
/* eslint-disable indent */
'use strict';
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.createTable('autoresponseStats', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER
},
serverID: {
type: Sequelize.BIGINT
},
stat: {
type: Sequelize.STRING
},
createdAt: {
allowNull: false,
type: Sequelize.DATE
},
updatedAt: {
allowNull: false,
type: Sequelize.DATE
}
});
},
down: (queryInterface, Sequelize) => {
return queryInterface.dropTable('autoresponseStats');
}
};

@ -0,0 +1,14 @@
/* eslint-disable no-unused-vars */
/* eslint-disable indent */
'use strict';
module.exports = (sequelize, DataTypes) => {
const autoresponse = sequelize.define('autoresponse', {
trigger: DataTypes.STRING,
response: DataTypes.STRING,
type: DataTypes.STRING
}, {});
autoresponse.associate = function(models) {
// associations can be defined here
};
return autoresponse;
};

@ -0,0 +1,13 @@
/* eslint-disable no-unused-vars */
/* eslint-disable indent */
'use strict';
module.exports = (sequelize, DataTypes) => {
const autoresponseStat = sequelize.define('autoresponseStat', {
serverID: DataTypes.STRING,
stat: DataTypes.STRING
}, {});
autoresponseStat.associate = function(models) {
// associations can be defined here
};
return autoresponseStat;
};

@ -0,0 +1,39 @@
/* eslint-disable no-unused-vars */
/* eslint-disable indent */
'use strict';
const fs = require('fs');
const path = require('path');
const Sequelize = require('sequelize');
const basename = path.basename(__filename);
const env = process.env.NODE_ENV || 'development';
const config = require(__dirname + '/../config/config.json')[env];
const db = {};
let sequelize;
if (config.use_env_variable) {
sequelize = new Sequelize(process.env[config.use_env_variable], config);
} else {
sequelize = new Sequelize(config.database, config.username, config.password, config);
}
fs
.readdirSync(__dirname)
.filter(file => {
return (file.indexOf('.') !== 0) && (file !== basename) && (file.slice(-3) === '.js');
})
.forEach(file => {
const model = sequelize['import'](path.join(__dirname, file));
db[model.name] = model;
});
Object.keys(db).forEach(modelName => {
if (db[modelName].associate) {
db[modelName].associate(db);
}
});
db.sequelize = sequelize;
db.Sequelize = Sequelize;
module.exports = db;

@ -0,0 +1,15 @@
/* eslint-disable no-unused-vars */
/* eslint-disable indent */
'use strict';
module.exports = (sequelize, DataTypes) => {
const Tag = sequelize.define('Tag', {
trigger: DataTypes.STRING,
response: DataTypes.STRING,
ownerID: DataTypes.BIGINT,
serverID: DataTypes.BIGINT
}, {});
Tag.associate = function(models) {
// associations can be defined here
};
return Tag;
};
Loading…
Cancel
Save