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') {
const guild = this.client.guilds.get(message.guild.id);
fs.readFile('./json/autoresponse.json', 'utf8', function readFileCallback(err, data) {
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 { } else {
autoresponse = JSON.parse(data); //now it an object const body = {serverID: message.guild.id, stat: args.stat};
autoresponse[message.channel.id] = text.toLowerCase(); autoResponseStat.update(body, {where: {serverID: message.guild.id}});
json = JSON.stringify(autoresponse); //convert it back to json return message.channel.send(`Autoresponse have been ${args.stat}ed`);
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}`);
fs.readFile(`./tag/${message.guild.id}.json`, 'utf8', function readFileCallback(err, data) {
if (err) {
fs.writeFile(`./tag/${message.guild.id}.json`, `{"${trigger}":"${response}"}`, function (err) {
if (err) {
console.log(err);
}
});
} else { } else {
customresponse = JSON.parse(data); //now it an object return message.channel.send('The tag already exist!');
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 = {};
let json = JSON.stringify(customresponse);
fs.readFile(`./tag/${message.guild.id}.json`, 'utf8', function readFileCallback(err, data) {
if (err) {
console.log(err);
} else { } else {
customresponse = JSON.parse(data); //now it an object return message.channel.send('Did not find the specified tag, are you sure it exist?');
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,37 +14,37 @@ 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');
if (trigger == message.content.toLowerCase() && type == 'text') {
return message.channel.send(content);
} else if (trigger == message.content.toLowerCase() && type == 'react') {
return message.react(content);
} else if (trigger == message.content.toLowerCase() && type == 'image') {
return message.channel.send({files: [content]});
} }
// auto respond to messages
else if(responseObject[message_content]) {
message.channel.send(responseObject[message_content]);
// If it contain 'like if' react with 👍
} else if (message_content.includes('like if')) {
message.react('\u{1F44D}');
// If it contain 'jeff' react with a jeff emote
} 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]')) {
@ -165,16 +163,10 @@ class messageListener extends Listener {
return message.channel.send(embed); return message.channel.send(embed);
} }
} }
if (attach) {
return message.channel.send(text, {files: [attach]});
} else {
return message.channel.send(text); return message.channel.send(text);
} }
} }
} }
}
}
} }
module.exports = messageListener; module.exports = messageListener;

@ -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