mirror of
https://github.com/Hessenuk/DiscordTickets.git
synced 2024-11-12 23:33:08 +02:00
Improve archiving
* All users have a role field rather than just a colour (for members sidebar)
This commit is contained in:
parent
a7248d88ea
commit
718101bfa2
@ -5,13 +5,13 @@ module.exports = (client, sequelize) => {
|
|||||||
channel: {
|
channel: {
|
||||||
type: DataTypes.CHAR(19),
|
type: DataTypes.CHAR(19),
|
||||||
allowNull: false,
|
allowNull: false,
|
||||||
unique: 'id-ticket'
|
unique: 'channel-ticket'
|
||||||
},
|
},
|
||||||
name: DataTypes.TEXT,
|
name: DataTypes.TEXT,
|
||||||
ticket: {
|
ticket: {
|
||||||
type: DataTypes.CHAR(19),
|
type: DataTypes.CHAR(19),
|
||||||
allowNull: false,
|
allowNull: false,
|
||||||
unique: 'id-ticket',
|
unique: 'channel-ticket',
|
||||||
references: {
|
references: {
|
||||||
model: DB_TABLE_PREFIX + 'tickets',
|
model: DB_TABLE_PREFIX + 'tickets',
|
||||||
key: 'id'
|
key: 'id'
|
||||||
|
@ -10,12 +10,12 @@ module.exports = (client, sequelize) => {
|
|||||||
role: {
|
role: {
|
||||||
type: DataTypes.CHAR(19),
|
type: DataTypes.CHAR(19),
|
||||||
allowNull: false,
|
allowNull: false,
|
||||||
unique: 'id-ticket'
|
unique: 'role-ticket'
|
||||||
},
|
},
|
||||||
ticket: {
|
ticket: {
|
||||||
type: DataTypes.CHAR(19),
|
type: DataTypes.CHAR(19),
|
||||||
allowNull: false,
|
allowNull: false,
|
||||||
unique: 'id-ticket',
|
unique: 'role-ticket',
|
||||||
references: {
|
references: {
|
||||||
model: DB_TABLE_PREFIX + 'tickets',
|
model: DB_TABLE_PREFIX + 'tickets',
|
||||||
key: 'id'
|
key: 'id'
|
||||||
|
@ -4,13 +4,12 @@ module.exports = (client, sequelize) => {
|
|||||||
sequelize.define('UserEntity', {
|
sequelize.define('UserEntity', {
|
||||||
avatar: DataTypes.STRING,
|
avatar: DataTypes.STRING,
|
||||||
bot: DataTypes.BOOLEAN,
|
bot: DataTypes.BOOLEAN,
|
||||||
colour: DataTypes.CHAR(6),
|
|
||||||
discriminator: DataTypes.STRING,
|
discriminator: DataTypes.STRING,
|
||||||
display_name: DataTypes.TEXT,
|
display_name: DataTypes.TEXT,
|
||||||
ticket: {
|
ticket: {
|
||||||
type: DataTypes.CHAR(19),
|
type: DataTypes.CHAR(19),
|
||||||
allowNull: false,
|
allowNull: false,
|
||||||
unique: 'id-ticket',
|
unique: 'user-ticket',
|
||||||
references: {
|
references: {
|
||||||
model: DB_TABLE_PREFIX + 'tickets',
|
model: DB_TABLE_PREFIX + 'tickets',
|
||||||
key: 'id'
|
key: 'id'
|
||||||
@ -19,9 +18,17 @@ module.exports = (client, sequelize) => {
|
|||||||
user: {
|
user: {
|
||||||
type: DataTypes.CHAR(19),
|
type: DataTypes.CHAR(19),
|
||||||
allowNull: false,
|
allowNull: false,
|
||||||
unique: 'id-ticket'
|
unique: 'user-ticket'
|
||||||
},
|
},
|
||||||
username: DataTypes.TEXT,
|
username: DataTypes.TEXT,
|
||||||
|
role: {
|
||||||
|
type: DataTypes.CHAR(19),
|
||||||
|
allowNull: false,
|
||||||
|
references: {
|
||||||
|
model: DB_TABLE_PREFIX + 'role_entities',
|
||||||
|
key: 'role'
|
||||||
|
},
|
||||||
|
},
|
||||||
}, {
|
}, {
|
||||||
tableName: DB_TABLE_PREFIX + 'user_entities'
|
tableName: DB_TABLE_PREFIX + 'user_entities'
|
||||||
});
|
});
|
||||||
|
@ -41,7 +41,7 @@ module.exports = class TicketArchives {
|
|||||||
createdAt: new Date(message.createdTimestamp)
|
createdAt: new Date(message.createdTimestamp)
|
||||||
}, { transaction: t });
|
}, { transaction: t });
|
||||||
|
|
||||||
this.updateEntities(message);
|
await this.updateEntities(message);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
@ -71,7 +71,7 @@ module.exports = class TicketArchives {
|
|||||||
|
|
||||||
if (message.editedTimestamp) {
|
if (message.editedTimestamp) {
|
||||||
m_row.edited = true;
|
m_row.edited = true;
|
||||||
this.updateEntities(message);
|
await this.updateEntities(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
await m_row.save({ transaction: t }); // save changes
|
await m_row.save({ transaction: t }); // save changes
|
||||||
@ -105,37 +105,52 @@ module.exports = class TicketArchives {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async updateEntities(message) {
|
async updateEntities(message) {
|
||||||
|
// message author
|
||||||
|
await this.updateMember(message.channel.id, message.member);
|
||||||
|
|
||||||
let m_row = await this.client.db.models.Message.findOne({
|
// mentioned members
|
||||||
where: {
|
message.mentions.members.forEach(async member => {
|
||||||
id: message.id
|
await this.updateMember(message.channel.id, member);
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
if (!m_row) return;
|
// mentioned channels
|
||||||
|
message.mentions.channels.forEach(async channel => {
|
||||||
|
await this.updateChannel(message.channel.id, channel);
|
||||||
|
});
|
||||||
|
|
||||||
|
// mentioned roles
|
||||||
|
message.mentions.roles.forEach(async role => {
|
||||||
|
await this.updateRole(message.channel.id, role);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async updateMember(ticket_id, member) {
|
||||||
|
await this.updateRole(ticket_id, member.roles.highest);
|
||||||
|
|
||||||
// message author
|
|
||||||
try {
|
try {
|
||||||
await this.client.db.transaction(async t => {
|
await this.client.db.transaction(async t => {
|
||||||
let u_model_data = {
|
let u_model_data = {
|
||||||
user: message.author.id,
|
user: member.user.id,
|
||||||
ticket: message.channel.id
|
ticket: ticket_id
|
||||||
};
|
};
|
||||||
|
|
||||||
let [u_row] = await this.client.db.models.UserEntity.findOrCreate({
|
let [u_row] = await this.client.db.models.UserEntity.findOrCreate({
|
||||||
where: u_model_data,
|
where: u_model_data,
|
||||||
defaults: u_model_data,
|
defaults: {
|
||||||
|
...u_model_data,
|
||||||
|
role: member.roles.highest.id
|
||||||
|
},
|
||||||
transaction: t
|
transaction: t
|
||||||
});
|
});
|
||||||
|
|
||||||
await u_row.update({
|
await u_row.update({
|
||||||
avatar: message.author.displayAvatarURL(),
|
avatar: member.user.displayAvatarURL(),
|
||||||
username: this.encrypt(message.author.username),
|
username: this.encrypt(member.user.username),
|
||||||
discriminator: message.author.discriminator,
|
discriminator: member.user.discriminator,
|
||||||
display_name: this.encrypt(message.member.displayName),
|
display_name: this.encrypt(member.displayName),
|
||||||
colour: message.member.displayColor === 0 ? null : int2hex(message.member.displayColor),
|
role: member.roles.highest.id,
|
||||||
bot: message.author.bot
|
bot: member.user.bot
|
||||||
}, { transaction: t });
|
}, { transaction: t });
|
||||||
|
|
||||||
return u_row;
|
return u_row;
|
||||||
});
|
});
|
||||||
@ -143,89 +158,57 @@ module.exports = class TicketArchives {
|
|||||||
this.client.log.warn('Failed to update message author entity in ticket archive');
|
this.client.log.warn('Failed to update message author entity in ticket archive');
|
||||||
this.client.log.error(e);
|
this.client.log.error(e);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// mentioned members
|
async updateChannel(ticket_id, channel) {
|
||||||
message.mentions.members.forEach(async member => {
|
try {
|
||||||
try {
|
await this.client.db.transaction(async t => {
|
||||||
await this.client.db.transaction(async t => {
|
let c_model_data = {
|
||||||
let m_model_data = {
|
channel: channel.id,
|
||||||
user: member.user.id,
|
ticket: ticket_id
|
||||||
ticket: message.channel.id
|
};
|
||||||
};
|
let [c_row] = await this.client.db.models.ChannelEntity.findOrCreate({
|
||||||
let [m_row] = await this.client.db.models.UserEntity.findOrCreate({
|
where: c_model_data,
|
||||||
where: m_model_data,
|
defaults: c_model_data,
|
||||||
defaults: m_model_data,
|
transaction: t
|
||||||
transaction: t
|
|
||||||
});
|
|
||||||
|
|
||||||
await m_row.update({
|
|
||||||
avatar: member.user.displayAvatarURL(),
|
|
||||||
username: this.encrypt(member.user.username),
|
|
||||||
discriminator: member.user.discriminator,
|
|
||||||
display_name: this.encrypt(member.displayName),
|
|
||||||
colour: member.displayColor === 0 ? null : int2hex(member.displayColor),
|
|
||||||
bot: member.user.bot
|
|
||||||
}, { transaction: t });
|
|
||||||
|
|
||||||
return m_row;
|
|
||||||
});
|
});
|
||||||
} catch (e) {
|
|
||||||
this.client.log.warn('Failed to update mentioned members entities in ticket archive');
|
|
||||||
this.client.log.error(e);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// mentioned channels
|
await c_row.update({
|
||||||
message.mentions.channels.forEach(async channel => {
|
name: this.encrypt(channel.name)
|
||||||
try {
|
}, { transaction: t });
|
||||||
await this.client.db.transaction(async t => {
|
|
||||||
let c_model_data = {
|
|
||||||
channel: channel.id,
|
|
||||||
ticket: message.channel.id
|
|
||||||
};
|
|
||||||
let [c_row] = await this.client.db.models.ChannelEntity.findOrCreate({
|
|
||||||
where: c_model_data,
|
|
||||||
defaults: c_model_data,
|
|
||||||
transaction: t
|
|
||||||
});
|
|
||||||
await c_row.update({
|
|
||||||
name: this.encrypt(channel.name)
|
|
||||||
}, { transaction: t });
|
|
||||||
|
|
||||||
return c_row;
|
return c_row;
|
||||||
|
});
|
||||||
|
} catch (e) {
|
||||||
|
this.client.log.warn('Failed to update mentioned channels entities in ticket archive');
|
||||||
|
this.client.log.error(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async updateRole(ticket_id, role) {
|
||||||
|
try {
|
||||||
|
await this.client.db.transaction(async t => {
|
||||||
|
let r_model_data = {
|
||||||
|
role: role.id,
|
||||||
|
ticket: ticket_id
|
||||||
|
};
|
||||||
|
let [r_row] = await this.client.db.models.RoleEntity.findOrCreate({
|
||||||
|
where: r_model_data,
|
||||||
|
defaults: r_model_data,
|
||||||
|
transaction: t
|
||||||
});
|
});
|
||||||
} catch (e) {
|
|
||||||
this.client.log.warn('Failed to update mentioned channels entities in ticket archive');
|
|
||||||
this.client.log.error(e);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// mentioned roles
|
await r_row.update({
|
||||||
message.mentions.roles.forEach(async role => {
|
name: this.encrypt(role.name),
|
||||||
try {
|
colour: role.color === 0 ? '7289DA' : int2hex(role.color) // 7289DA = 7506394
|
||||||
await this.client.db.transaction(async t => {
|
}, { transaction: t });
|
||||||
let r_model_data = {
|
|
||||||
role: role.id,
|
|
||||||
ticket: message.channel.id
|
|
||||||
};
|
|
||||||
let [r_row] = await this.client.db.models.RoleEntity.findOrCreate({
|
|
||||||
where: r_model_data,
|
|
||||||
defaults: r_model_data,
|
|
||||||
transaction: t
|
|
||||||
});
|
|
||||||
await r_row.update({
|
|
||||||
name: this.encrypt(role.name),
|
|
||||||
colour: role.color === 0 ? '7289DA' : int2hex(role.color) // 7289DA = 7506394
|
|
||||||
}, { transaction: t });
|
|
||||||
|
|
||||||
return r_row;
|
return r_row;
|
||||||
});
|
});
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
this.client.log.warn('Failed to update mentioned roles entities in ticket archive');
|
this.client.log.warn('Failed to update mentioned roles entities in ticket archive');
|
||||||
this.client.log.error(e);
|
this.client.log.error(e);
|
||||||
}
|
}
|
||||||
});
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
@ -1,7 +1,6 @@
|
|||||||
const EventEmitter = require('events');
|
const EventEmitter = require('events');
|
||||||
const TicketArchives = require('./archives');
|
const TicketArchives = require('./archives');
|
||||||
const { MessageEmbed } = require('discord.js');
|
const { MessageEmbed } = require('discord.js');
|
||||||
const { int2hex } = require('../../utils');
|
|
||||||
const { footer } = require('../../utils/discord');
|
const { footer } = require('../../utils/discord');
|
||||||
|
|
||||||
/** Manages tickets */
|
/** Manages tickets */
|
||||||
@ -51,7 +50,7 @@ module.exports = class TicketManager extends EventEmitter {
|
|||||||
.setColor(settings.colour)
|
.setColor(settings.colour)
|
||||||
.setAuthor(member.user.username, member.user.displayAvatarURL())
|
.setAuthor(member.user.username, member.user.displayAvatarURL())
|
||||||
.setDescription(description)
|
.setDescription(description)
|
||||||
.setFooter(settings.footer);
|
.setFooter(settings.footer, guild.iconURL());
|
||||||
|
|
||||||
if (topic) embed.addField(i18n('commands.new.opening_message.fields.topic'), topic);
|
if (topic) embed.addField(i18n('commands.new.opening_message.fields.topic'), topic);
|
||||||
|
|
||||||
@ -108,7 +107,7 @@ module.exports = class TicketManager extends EventEmitter {
|
|||||||
.setAuthor(member.user.username, member.user.displayAvatarURL())
|
.setAuthor(member.user.username, member.user.displayAvatarURL())
|
||||||
.setDescription(description)
|
.setDescription(description)
|
||||||
.addField(i18n('commands.new.opening_message.fields.topic'), topic)
|
.addField(i18n('commands.new.opening_message.fields.topic'), topic)
|
||||||
.setFooter(settings.footer)
|
.setFooter(settings.footer, guild.iconURL())
|
||||||
);
|
);
|
||||||
await message.react('✅');
|
await message.react('✅');
|
||||||
collector.stop();
|
collector.stop();
|
||||||
@ -123,7 +122,7 @@ module.exports = class TicketManager extends EventEmitter {
|
|||||||
new MessageEmbed()
|
new MessageEmbed()
|
||||||
.setColor(settings.colour)
|
.setColor(settings.colour)
|
||||||
.setDescription(i18n('commands.new.questions', questions))
|
.setDescription(i18n('commands.new.questions', questions))
|
||||||
.setFooter(settings.footer)
|
.setFooter(settings.footer, guild.iconURL())
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -133,7 +132,7 @@ module.exports = class TicketManager extends EventEmitter {
|
|||||||
new MessageEmbed()
|
new MessageEmbed()
|
||||||
.setColor(settings.colour)
|
.setColor(settings.colour)
|
||||||
.setDescription(i18n('commands.new.questions', questions))
|
.setDescription(i18n('commands.new.questions', questions))
|
||||||
.setFooter(settings.footer)
|
.setFooter(settings.footer, guild.iconURL())
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -231,25 +230,9 @@ module.exports = class TicketManager extends EventEmitter {
|
|||||||
let channel = await this.client.channels.fetch(t_row.channel);
|
let channel = await this.client.channels.fetch(t_row.channel);
|
||||||
|
|
||||||
if (closer_id) {
|
if (closer_id) {
|
||||||
let u_model_data = {
|
|
||||||
user: closer_id,
|
|
||||||
ticket: ticket_id
|
|
||||||
};
|
|
||||||
let [u_row] = await this.client.db.models.UserEntity.findOrCreate({
|
|
||||||
where: u_model_data,
|
|
||||||
defaults: u_model_data
|
|
||||||
});
|
|
||||||
|
|
||||||
let member = await guild.members.fetch(closer_id);
|
let member = await guild.members.fetch(closer_id);
|
||||||
|
|
||||||
await u_row.update({
|
await this.archives.updateMember(ticket_id, member);
|
||||||
avatar: member.user.displayAvatarURL(),
|
|
||||||
username: member.user.username,
|
|
||||||
discriminator: member.user.discriminator,
|
|
||||||
display_name: member.displayName,
|
|
||||||
colour: member.displayColor === 0 ? null : int2hex(member.displayColor),
|
|
||||||
bot: member.user.bot
|
|
||||||
});
|
|
||||||
|
|
||||||
if (channel) {
|
if (channel) {
|
||||||
let description = reason
|
let description = reason
|
||||||
@ -261,7 +244,7 @@ module.exports = class TicketManager extends EventEmitter {
|
|||||||
.setAuthor(member.user.username, member.user.displayAvatarURL())
|
.setAuthor(member.user.username, member.user.displayAvatarURL())
|
||||||
.setTitle(i18n('commands.close.response.closed.title'))
|
.setTitle(i18n('commands.close.response.closed.title'))
|
||||||
.setDescription(description)
|
.setDescription(description)
|
||||||
.setFooter(settings.footer)
|
.setFooter(settings.footer, guild.iconURL())
|
||||||
);
|
);
|
||||||
|
|
||||||
setTimeout(async () => {
|
setTimeout(async () => {
|
||||||
@ -280,7 +263,7 @@ module.exports = class TicketManager extends EventEmitter {
|
|||||||
.setColor(settings.success_colour)
|
.setColor(settings.success_colour)
|
||||||
.setTitle(i18n('commands.close.response.closed.title'))
|
.setTitle(i18n('commands.close.response.closed.title'))
|
||||||
.setDescription(description)
|
.setDescription(description)
|
||||||
.setFooter(settings.footer)
|
.setFooter(settings.footer, guild.iconURL())
|
||||||
);
|
);
|
||||||
|
|
||||||
setTimeout(async () => {
|
setTimeout(async () => {
|
||||||
|
Loading…
Reference in New Issue
Block a user