forked from Galactic/modmail
function to properly change read state of a thread,
added markunread command
This commit is contained in:
parent
652a1f5827
commit
9f97c0c16b
@ -71,7 +71,7 @@ class ChannelHandler {
|
||||
|
||||
}
|
||||
|
||||
async markread(target, channel, staff) {
|
||||
async setReadState(target, channel, staff, state) {
|
||||
|
||||
const history = await this.cache.loadModmailHistory(target)
|
||||
.catch((err) => {
|
||||
@ -86,11 +86,13 @@ class ChannelHandler {
|
||||
error: true,
|
||||
msg: `User has no modmail history.`
|
||||
};
|
||||
if(!history[history.length-1].markread) history.push({ author: staff.id, timestamp: Date.now(), markread: true }); // To keep track of read state
|
||||
if (history[history.length - 1].readState !== state) history.push({ author: staff.id, timestamp: Date.now(), readState: state }); // To keep track of read state
|
||||
if (state === 'unread') await this.load(await this.client.resolveUser(target), history);
|
||||
|
||||
if (channel) await channel.edit({ parentID: this.readMail.id, lockPermissions: true });
|
||||
if (channel) await channel.edit({ parentID: state === 'read' ? this.readMail.id : this.newMail.id, lockPermissions: true });
|
||||
if (!this.cache.updatedThreads.includes(target)) this.cache.updatedThreads.push(target);
|
||||
if (this.cache.queue.includes(target)) this.cache.queue.splice(this.cache.queue.indexOf(target), 1);
|
||||
if (this.cache.queue.includes(target) && state === 'read') this.cache.queue.splice(this.cache.queue.indexOf(target), 1);
|
||||
else if (!this.cache.queue.includes(target)) this.cache.queue.push(target);
|
||||
return {};
|
||||
|
||||
}
|
||||
@ -162,7 +164,7 @@ class ChannelHandler {
|
||||
for (let i = context < len ? context : len; i > 0; i--) {
|
||||
const entry = history[len - i];
|
||||
if (!entry) continue;
|
||||
if (entry.markread) continue;
|
||||
if (entry.readState === 'read') continue;
|
||||
|
||||
const user = await this.client.resolveUser(entry.author).catch(this.client.logger.error.bind(this.client.logger));
|
||||
const mem = await this.modmail.getMember(user.id).catch(this.client.logger.error.bind(this.client.logger));
|
||||
|
@ -286,7 +286,7 @@ class Modmail {
|
||||
|
||||
}
|
||||
|
||||
async markread(message, args) {
|
||||
async changeReadState(message, args, state = 'read') {
|
||||
|
||||
const { author } = message;
|
||||
|
||||
@ -318,14 +318,14 @@ class Modmail {
|
||||
};
|
||||
|
||||
user = await this.client.resolveUser(result[0]);
|
||||
response = await this.channels.markread(user.id, channel, author);
|
||||
response = await this.channels.setReadState(user.id, channel, author, state);
|
||||
|
||||
} else if (user) {
|
||||
|
||||
const _ch = this.cache.channels[user.id];
|
||||
if (_ch) channel = await this.client.resolveChannel(_ch);
|
||||
|
||||
response = await this.channels.markread(user.id, channel, author);
|
||||
response = await this.channels.setReadState(user.id, channel, author, state);
|
||||
|
||||
} else return `Could not resolve ${id} to a target.`;
|
||||
|
||||
@ -345,12 +345,12 @@ class Modmail {
|
||||
|
||||
const [userId] = result;
|
||||
user = await this.getUser(userId);
|
||||
response = await this.channels.markread(userId, channel, author);
|
||||
response = await this.channels.setReadState(userId, channel, author, state);
|
||||
}
|
||||
|
||||
|
||||
if (response.error) return response;
|
||||
this.log({ author, action: `${author.tag} marked ${user.tag}'s thread as read`, target: user });
|
||||
this.log({ author, action: `${author.tag} marked ${user.tag}'s thread as ${state}`, target: user });
|
||||
return 'Done';
|
||||
|
||||
}
|
||||
|
@ -27,7 +27,7 @@ class Logs extends Command {
|
||||
const { member, channel } = message;
|
||||
const history = await this.client.cache.loadModmailHistory(user.id);
|
||||
if (!history.length) return 'Not found in modmail DB';
|
||||
const page = this.paginate([...history].filter((e) => !e.markread).reverse(), pageNr, 10);
|
||||
const page = this.paginate([...history].filter((e) => !('readState' in e)).reverse(), pageNr, 10);
|
||||
|
||||
const embed = {
|
||||
author: {
|
||||
|
@ -10,7 +10,7 @@ class Markread extends Command {
|
||||
|
||||
async execute(message, { args }) {
|
||||
|
||||
return this.client.modmail.markread(message, args);
|
||||
return this.client.modmail.changeReadState(message, args);
|
||||
|
||||
}
|
||||
|
||||
|
19
structure/commands/Markunread.js
Normal file
19
structure/commands/Markunread.js
Normal file
@ -0,0 +1,19 @@
|
||||
const Command = require('../Command');
|
||||
|
||||
class Markunread extends Command {
|
||||
|
||||
constructor(client) {
|
||||
super(client, {
|
||||
name: 'markunread'
|
||||
});
|
||||
}
|
||||
|
||||
async execute(message, { args }) {
|
||||
|
||||
return this.client.modmail.changeReadState(message, args, 'unread');
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
module.exports = Markunread;
|
Loading…
Reference in New Issue
Block a user