Add support for attachments when relaying messages
parent
a08234b9fa
commit
f4c7a6a06a
53
index.js
53
index.js
|
@ -27,6 +27,8 @@ let blocked = [];
|
||||||
const logDir = `${__dirname}/logs`;
|
const logDir = `${__dirname}/logs`;
|
||||||
const logFileFormatRegex = /^([0-9\-]+?)__([0-9]+?)__([0-9a-f]+?)\.txt$/;
|
const logFileFormatRegex = /^([0-9\-]+?)__([0-9]+?)__([0-9a-f]+?)\.txt$/;
|
||||||
|
|
||||||
|
const userMentionRegex = /^<@\!?([0-9]+?)>$/;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const blockedJSON = fs.readFileSync(blockFile, {encoding: 'utf8'});
|
const blockedJSON = fs.readFileSync(blockFile, {encoding: 'utf8'});
|
||||||
blocked = JSON.parse(blockedJSON);
|
blocked = JSON.parse(blockedJSON);
|
||||||
|
@ -96,8 +98,6 @@ function findLogFilesByUserId(userId) {
|
||||||
fs.readdir(logDir, (err, files) => {
|
fs.readdir(logDir, (err, files) => {
|
||||||
const logfiles = files.filter(file => {
|
const logfiles = files.filter(file => {
|
||||||
const info = getLogFileInfo(file);
|
const info = getLogFileInfo(file);
|
||||||
console.log('info:', info);
|
|
||||||
console.log('userId:', userId, typeof userId);
|
|
||||||
if (! info) return false;
|
if (! info) return false;
|
||||||
|
|
||||||
return info.userId === userId;
|
return info.userId === userId;
|
||||||
|
@ -174,6 +174,13 @@ function getModmailChannel(user) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function formatAttachment(attachment) {
|
||||||
|
let filesize = attachment.size || 0;
|
||||||
|
filesize /= 1024;
|
||||||
|
|
||||||
|
return `**Attachment:** ${attachment.filename} (${filesize.toFixed(1)}KB)\n${attachment.url}`
|
||||||
|
}
|
||||||
|
|
||||||
bot.on('messageCreate', (msg) => {
|
bot.on('messageCreate', (msg) => {
|
||||||
if (! (msg.channel instanceof Eris.PrivateChannel)) return;
|
if (! (msg.channel instanceof Eris.PrivateChannel)) return;
|
||||||
if (msg.author.id === bot.user.id) return;
|
if (msg.author.id === bot.user.id) return;
|
||||||
|
@ -183,11 +190,19 @@ bot.on('messageCreate', (msg) => {
|
||||||
// This needs to be queued as otherwise, if a user sent a bunch of messages initially and the createChannel endpoint is delayed, we might get duplicate channels
|
// This needs to be queued as otherwise, if a user sent a bunch of messages initially and the createChannel endpoint is delayed, we might get duplicate channels
|
||||||
messageQueue.add(() => {
|
messageQueue.add(() => {
|
||||||
return getModmailChannel(msg.author).then(channel => {
|
return getModmailChannel(msg.author).then(channel => {
|
||||||
channel.createMessage(`« **${msg.author.username}#${msg.author.discriminator}:** ${msg.content}`);
|
let content = msg.content;
|
||||||
|
msg.attachments.forEach(attachment => {
|
||||||
|
content += `\n\n${formatAttachment(attachment)}`;
|
||||||
|
});
|
||||||
|
|
||||||
|
channel.createMessage(`« **${msg.author.username}#${msg.author.discriminator}:** ${content}`);
|
||||||
|
|
||||||
if (channel._wasCreated) {
|
if (channel._wasCreated) {
|
||||||
|
let creationNotificationMessage = `New modmail thread: ${channel.mention}`;
|
||||||
|
if (config.pingCreationNotification) creationNotificationMessage = `@here ${config.pingCreationNotification}`;
|
||||||
|
|
||||||
bot.createMessage(modMailGuild.id, {
|
bot.createMessage(modMailGuild.id, {
|
||||||
content: `@here New modmail thread: ${channel.mention}`,
|
content: creationNotificationMessage,
|
||||||
disableEveryone: false,
|
disableEveryone: false,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -205,11 +220,20 @@ bot.registerCommand('reply', (msg, args) => {
|
||||||
if (! channelInfo) return;
|
if (! channelInfo) return;
|
||||||
|
|
||||||
bot.getDMChannel(channelInfo.userId).then(channel => {
|
bot.getDMChannel(channelInfo.userId).then(channel => {
|
||||||
const message = `**${msg.author.username}:** ${args.join(' ')}`;
|
let argMsg = args.join(' ').trim();
|
||||||
|
let content = `**${msg.author.username}:** ${argMsg}`;
|
||||||
|
|
||||||
channel.createMessage(message);
|
if (msg.attachments.length > 0 && argMsg !== '') content += '\n\n';
|
||||||
msg.channel.createMessage(`» ${message}`);
|
content += msg.attachments.map(attachment => {
|
||||||
msg.delete();
|
return `${attachment.url}`;
|
||||||
|
}).join('\n');
|
||||||
|
|
||||||
|
channel.createMessage(content);
|
||||||
|
msg.channel.createMessage(`» ${content}`);
|
||||||
|
|
||||||
|
// Delete the !r message if there are no attachments
|
||||||
|
// When there are attachments, we need to keep the original message or the attachments get deleted as well
|
||||||
|
if (msg.attachments.length === 0) msg.delete();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -251,13 +275,13 @@ bot.registerCommand('block', (msg, args) => {
|
||||||
if (args[0].match(/^[0-9]+$/)) {
|
if (args[0].match(/^[0-9]+$/)) {
|
||||||
userId = args[0];
|
userId = args[0];
|
||||||
} else {
|
} else {
|
||||||
let mentionMatch = args[0].match(/^<@([0-9]+?)>$/);
|
let mentionMatch = args[0].match(userMentionRegex);
|
||||||
if (mentionMatch) userId = mentionMatch[1];
|
if (mentionMatch) userId = mentionMatch[1];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (! userId) return;
|
if (! userId) return;
|
||||||
|
|
||||||
blocked.push(args[0]);
|
blocked.push(userId);
|
||||||
saveBlocked();
|
saveBlocked();
|
||||||
msg.channel.createMessage(`Blocked <@${userId}> (id ${userId}) from modmail`);
|
msg.channel.createMessage(`Blocked <@${userId}> (id ${userId}) from modmail`);
|
||||||
});
|
});
|
||||||
|
@ -271,13 +295,13 @@ bot.registerCommand('unblock', (msg, args) => {
|
||||||
if (args[0].match(/^[0-9]+$/)) {
|
if (args[0].match(/^[0-9]+$/)) {
|
||||||
userId = args[0];
|
userId = args[0];
|
||||||
} else {
|
} else {
|
||||||
let mentionMatch = args[0].match(/^<@([0-9]+?)>$/);
|
let mentionMatch = args[0].match(userMentionRegex);
|
||||||
if (mentionMatch) userId = mentionMatch[1];
|
if (mentionMatch) userId = mentionMatch[1];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (! userId) return;
|
if (! userId) return;
|
||||||
|
|
||||||
blocked.splice(blocked.indexOf(args[0]), 1);
|
blocked.splice(blocked.indexOf(userId), 1);
|
||||||
saveBlocked();
|
saveBlocked();
|
||||||
msg.channel.createMessage(`Unblocked <@${userId}> (id ${userId}) from modmail`);
|
msg.channel.createMessage(`Unblocked <@${userId}> (id ${userId}) from modmail`);
|
||||||
});
|
});
|
||||||
|
@ -291,7 +315,7 @@ bot.registerCommand('logs', (msg, args) => {
|
||||||
if (args[0].match(/^[0-9]+$/)) {
|
if (args[0].match(/^[0-9]+$/)) {
|
||||||
userId = args[0];
|
userId = args[0];
|
||||||
} else {
|
} else {
|
||||||
let mentionMatch = args[0].match(/^<@([0-9]+?)>$/);
|
let mentionMatch = args[0].match(userMentionRegex);
|
||||||
if (mentionMatch) userId = mentionMatch[1];
|
if (mentionMatch) userId = mentionMatch[1];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -339,12 +363,9 @@ const server = http.createServer((req, res) => {
|
||||||
const pathParts = parsedUrl.path.split('/').filter(v => v !== '');
|
const pathParts = parsedUrl.path.split('/').filter(v => v !== '');
|
||||||
const token = pathParts[pathParts.length - 1];
|
const token = pathParts[pathParts.length - 1];
|
||||||
|
|
||||||
console.log('token:', token);
|
|
||||||
|
|
||||||
if (token.match(/^[0-9a-f]+$/) === null) return res.end();
|
if (token.match(/^[0-9a-f]+$/) === null) return res.end();
|
||||||
|
|
||||||
findLogFile(token).then(logfile => {
|
findLogFile(token).then(logfile => {
|
||||||
console.log('logfile:', logfile);
|
|
||||||
if (logfile === null) return res.end();
|
if (logfile === null) return res.end();
|
||||||
|
|
||||||
fs.readFile(getLogFilePath(logfile), {encoding: 'utf8'}, (err, data) => {
|
fs.readFile(getLogFilePath(logfile), {encoding: 'utf8'}, (err, data) => {
|
||||||
|
|
Loading…
Reference in New Issue