mirror of
https://github.com/Hessenuk/DiscordTickets.git
synced 2025-09-07 10:31:26 +03:00
Set up for v3
This commit is contained in:
186
src/index.js
186
src/index.js
@@ -1,174 +1,22 @@
|
||||
/**
|
||||
*
|
||||
* @name DiscordTickets
|
||||
* @author eartharoid <contact@eartharoid.me>
|
||||
* @license GNU-GPLv3
|
||||
*
|
||||
* DiscordTickets Copyright (C) 2020 Isaac "eartharoid" Saunders
|
||||
* This program comes with ABSOLUTELY NO WARRANTY.
|
||||
* This is free software, and you are welcome to redistribute it
|
||||
* under certain conditions. See the included LICENSE file for details.
|
||||
*
|
||||
*/
|
||||
* DiscordTickets
|
||||
* Copyright (C) 2021 Isaac Saunders
|
||||
|
||||
const version = Number(process.version.split('.')[0].replace('v', ''));
|
||||
if (version < 12) return console.log('Please upgrade to Node v12 or higher');
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
|
||||
const fs = require('fs');
|
||||
const { join } = require('path');
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
|
||||
let dev = fs.existsSync(join(__dirname, '../user/dev.env')) && fs.existsSync(join(__dirname, '../user/dev.config.js'));
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
require('dotenv').config({ path: join(__dirname, '../user/', dev ? 'dev.env' : '.env') });
|
||||
|
||||
module.exports.config = dev ? 'dev.config.js' : 'config.js';
|
||||
const config = require(join(__dirname, '../user/', module.exports.config));
|
||||
|
||||
const Discord = require('discord.js');
|
||||
const client = new Discord.Client({
|
||||
autoReconnect: true,
|
||||
partials: ['MESSAGE', 'CHANNEL', 'REACTION'],
|
||||
});
|
||||
|
||||
client.events = new Discord.Collection();
|
||||
client.commands = new Discord.Collection();
|
||||
client.cooldowns = new Discord.Collection();
|
||||
|
||||
const utils = require('./modules/utils');
|
||||
const leeks = require('leeks.js');
|
||||
|
||||
require('./modules/banner')(leeks); // big coloured text thing
|
||||
|
||||
const Logger = require('leekslazylogger');
|
||||
const log = new Logger({
|
||||
name: config.name,
|
||||
logToFile: config.logs.files.enabled,
|
||||
maxAge: config.logs.files.keep_for,
|
||||
debug: config.debug
|
||||
});
|
||||
|
||||
require('./modules/updater')(); // check for updates
|
||||
|
||||
/**
|
||||
* storage
|
||||
*/
|
||||
const { Sequelize, Model, DataTypes } = require('sequelize');
|
||||
|
||||
let sequelize;
|
||||
|
||||
switch (config.storage.type) {
|
||||
case 'mysql':
|
||||
log.info('Connecting to MySQL database...');
|
||||
sequelize = new Sequelize(process.env.DB_NAME, process.env.DB_USER, process.env.DB_PASS, {
|
||||
dialect: 'mysql',
|
||||
host: process.env.DB_HOST,
|
||||
logging: log.debug
|
||||
});
|
||||
break;
|
||||
case 'mariadb':
|
||||
log.info('Connecting to MariaDB database...');
|
||||
sequelize = new Sequelize(process.env.DB_NAME, process.env.DB_USER, process.env.DB_PASS, {
|
||||
dialect: 'mariadb',
|
||||
host: process.env.DB_HOST,
|
||||
logging: log.debug
|
||||
});
|
||||
break;
|
||||
case 'postgre':
|
||||
log.info('Connecting to PostgreSQL database...');
|
||||
sequelize = new Sequelize(process.env.DB_NAME, process.env.DB_USER, process.env.DB_PASS, {
|
||||
dialect: 'postgres',
|
||||
host: process.env.DB_HOST,
|
||||
logging: log.debug
|
||||
});
|
||||
break;
|
||||
case 'microsoft':
|
||||
log.info('Connecting to Microsoft SQL Server database...');
|
||||
sequelize = new Sequelize(process.env.DB_NAME, process.env.DB_USER, process.env.DB_PASS, {
|
||||
dialect: 'mssql',
|
||||
host: process.env.DB_HOST,
|
||||
logging: log.debug
|
||||
});
|
||||
break;
|
||||
default:
|
||||
log.info('Using SQLite storage');
|
||||
sequelize = new Sequelize({
|
||||
dialect: 'sqlite',
|
||||
storage: join(__dirname, '../user/storage.db'),
|
||||
logging: log.debug
|
||||
});
|
||||
}
|
||||
|
||||
class Ticket extends Model {}
|
||||
Ticket.init({
|
||||
channel: DataTypes.STRING,
|
||||
creator: DataTypes.STRING,
|
||||
open: DataTypes.BOOLEAN,
|
||||
topic: DataTypes.TEXT
|
||||
}, {
|
||||
sequelize,
|
||||
modelName: 'ticket'
|
||||
});
|
||||
|
||||
class Setting extends Model {}
|
||||
Setting.init({
|
||||
key: DataTypes.STRING,
|
||||
value: DataTypes.STRING,
|
||||
}, {
|
||||
sequelize,
|
||||
modelName: 'setting'
|
||||
});
|
||||
|
||||
Ticket.sync();
|
||||
Setting.sync();
|
||||
|
||||
/**
|
||||
* event loader
|
||||
*/
|
||||
const events = fs.readdirSync(join(__dirname, 'events')).filter(file => file.endsWith('.js'));
|
||||
for (const file of events) {
|
||||
const event = require(`./events/${file}`);
|
||||
client.events.set(event.event, event);
|
||||
// client.on(event.event, e => client.events.get(event.event).execute(client, e, Ticket, Setting));
|
||||
client.on(event.event, (e1, e2) => client.events.get(event.event).execute(client, log, [e1, e2], {config, Ticket, Setting}));
|
||||
log.console(log.format(`> Loaded &7${event.event}&f event`));
|
||||
}
|
||||
|
||||
/**
|
||||
* command loader
|
||||
*/
|
||||
const commands = fs.readdirSync(join(__dirname, 'commands')).filter(file => file.endsWith('.js'));
|
||||
for (const file of commands) {
|
||||
const command = require(`./commands/${file}`);
|
||||
client.commands.set(command.name, command);
|
||||
log.console(log.format(`> Loaded &7${config.prefix}${command.name}&f command`));
|
||||
}
|
||||
|
||||
log.info(`Loaded ${events.length} events and ${commands.length} commands`);
|
||||
|
||||
const one_day = 1000 * 60 * 60 * 24;
|
||||
const txt = '../user/transcripts/text';
|
||||
const clean = () => {
|
||||
const files = fs.readdirSync(join(__dirname, txt)).filter(file => file.endsWith('.txt'));
|
||||
let total = 0;
|
||||
for (const file of files) {
|
||||
let diff = (new Date() - new Date(fs.statSync(join(__dirname, txt, file)).mtime));
|
||||
if (Math.floor(diff / one_day) > config.transcripts.text.keep_for) {
|
||||
fs.unlinkSync(join(__dirname, txt, file));
|
||||
total++;
|
||||
}
|
||||
}
|
||||
if (total > 0) log.info(`Deleted ${total} old text ${utils.plural('transcript', total)}`);
|
||||
};
|
||||
|
||||
if (config.transcripts.text.enabled) {
|
||||
clean();
|
||||
setInterval(clean, one_day);
|
||||
}
|
||||
|
||||
process.on('unhandledRejection', error => {
|
||||
log.warn('An error was not caught');
|
||||
log.warn(`Uncaught ${error.name}: ${error.message}`);
|
||||
log.error(error);
|
||||
});
|
||||
|
||||
client.login(process.env.TOKEN);
|
||||
* @name @eartharoid/discordtickets
|
||||
* @description An open-source & self-hosted Discord bot for ticket management.
|
||||
* @copyright 2021 Isaac Saunders
|
||||
* @license GNU-GPLv3
|
||||
*/
|
Reference in New Issue
Block a user