mirror of
https://github.com/ZeppelinBot/Zeppelin.git
synced 2025-05-11 04:45:02 +00:00
Use GuildSavedMessages events in logs. Fix code blocks in edit logs.
This commit is contained in:
parent
1a6e680d81
commit
2c8603ca70
4 changed files with 95 additions and 37 deletions
|
@ -2,12 +2,20 @@ import { decorators as d, Plugin } from "knub";
|
|||
import { GuildLogs } from "../data/GuildLogs";
|
||||
import { LogType } from "../data/LogType";
|
||||
import { Channel, Constants as ErisConstants, Member, Message, TextChannel, User } from "eris";
|
||||
import { findRelevantAuditLogEntry, formatTemplateString, stripObjectToScalars } from "../utils";
|
||||
import {
|
||||
deactivateMentions,
|
||||
disableCodeBlocks,
|
||||
findRelevantAuditLogEntry,
|
||||
formatTemplateString,
|
||||
stripObjectToScalars
|
||||
} from "../utils";
|
||||
import DefaultLogMessages from "../data/DefaultLogMessages.json";
|
||||
import moment from "moment-timezone";
|
||||
import humanizeDuration from "humanize-duration";
|
||||
import isEqual from "lodash.isequal";
|
||||
import diff from "lodash.difference";
|
||||
import { GuildSavedMessages } from "../data/GuildSavedMessages";
|
||||
import { SavedMessage } from "../data/entities/SavedMessage";
|
||||
|
||||
interface ILogChannel {
|
||||
include?: string[];
|
||||
|
@ -26,8 +34,14 @@ const unknownUser = {
|
|||
|
||||
export class LogsPlugin extends Plugin {
|
||||
protected serverLogs: GuildLogs;
|
||||
protected savedMessages: GuildSavedMessages;
|
||||
|
||||
protected logListener;
|
||||
|
||||
private onMessageDeleteFn;
|
||||
private onMessageDeleteBulkFn;
|
||||
private onMessageUpdateFn;
|
||||
|
||||
getDefaultOptions() {
|
||||
return {
|
||||
config: {
|
||||
|
@ -42,13 +56,22 @@ export class LogsPlugin extends Plugin {
|
|||
|
||||
onLoad() {
|
||||
this.serverLogs = new GuildLogs(this.guildId);
|
||||
this.savedMessages = GuildSavedMessages.getInstance(this.guildId);
|
||||
|
||||
this.logListener = ({ type, data }) => this.log(type, data);
|
||||
this.serverLogs.on("log", this.logListener);
|
||||
|
||||
this.savedMessages.events.on("delete", this.onMessageDelete.bind(this));
|
||||
this.savedMessages.events.on("deleteBulk", this.onMessageDeleteBulk.bind(this));
|
||||
this.savedMessages.events.on("update", this.onMessageUpdate.bind(this));
|
||||
}
|
||||
|
||||
onUnload() {
|
||||
this.serverLogs.removeListener("log", this.logListener);
|
||||
|
||||
this.savedMessages.events.off("delete", this.onMessageDelete.bind(this));
|
||||
this.savedMessages.events.off("deleteBulk", this.onMessageDeleteBulk.bind(this));
|
||||
this.savedMessages.events.off("update", this.onMessageUpdate.bind(this));
|
||||
}
|
||||
|
||||
async log(type, data) {
|
||||
|
@ -59,10 +82,7 @@ export class LogsPlugin extends Plugin {
|
|||
const channel = this.guild.channels.get(channelId);
|
||||
if (!channel || !(channel instanceof TextChannel)) continue;
|
||||
|
||||
if (
|
||||
(opts.include && opts.include.includes(typeStr)) ||
|
||||
(opts.exclude && !opts.exclude.includes(typeStr))
|
||||
) {
|
||||
if ((opts.include && opts.include.includes(typeStr)) || (opts.exclude && !opts.exclude.includes(typeStr))) {
|
||||
const message = this.getLogMessage(type, data);
|
||||
// TODO: Split log messages that are too long
|
||||
if (message) await channel.createMessage(message).catch(() => {});
|
||||
|
@ -234,55 +254,64 @@ export class LogsPlugin extends Plugin {
|
|||
});
|
||||
}
|
||||
|
||||
@d.event("messageUpdate")
|
||||
onMessageUpdate(msg: Message, oldMsg: Message) {
|
||||
if (!msg.author) return;
|
||||
if (oldMsg && msg.content === oldMsg.content) return;
|
||||
if (msg.type !== 0) return;
|
||||
// Uses events from savesMessages
|
||||
onMessageUpdate(savedMessage: SavedMessage, oldSavedMessage: SavedMessage) {
|
||||
if (oldSavedMessage && JSON.stringify(savedMessage.data) === JSON.stringify(oldSavedMessage.data)) return;
|
||||
|
||||
const member = this.guild.members.get(savedMessage.user_id);
|
||||
const channel = this.guild.channels.get(savedMessage.channel_id);
|
||||
|
||||
const before = oldSavedMessage
|
||||
? disableCodeBlocks(deactivateMentions(oldSavedMessage.data.content || ""))
|
||||
: "Unknown pre-edit content";
|
||||
const after = disableCodeBlocks(deactivateMentions(savedMessage.data.content || ""));
|
||||
|
||||
this.serverLogs.log(LogType.MESSAGE_EDIT, {
|
||||
member: stripObjectToScalars(msg.member, ["user"]),
|
||||
channel: stripObjectToScalars(msg.channel),
|
||||
before: oldMsg ? oldMsg.cleanContent || oldMsg.content || "" : "Unavailable due to restart",
|
||||
after: msg.cleanContent || msg.content || ""
|
||||
member: stripObjectToScalars(member, ["user"]),
|
||||
channel: stripObjectToScalars(channel),
|
||||
before,
|
||||
after
|
||||
});
|
||||
}
|
||||
|
||||
@d.event("messageDelete")
|
||||
onMessageDelete(msg: Message) {
|
||||
if (msg.type != null && msg.type !== 0) return;
|
||||
// Uses events from savesMessages
|
||||
onMessageDelete(savedMessage: SavedMessage) {
|
||||
const member = this.guild.members.get(savedMessage.user_id);
|
||||
const channel = this.guild.channels.get(savedMessage.channel_id);
|
||||
|
||||
if (msg.member) {
|
||||
if (member) {
|
||||
this.serverLogs.log(
|
||||
LogType.MESSAGE_DELETE,
|
||||
{
|
||||
member: stripObjectToScalars(msg.member, ["user"]),
|
||||
channel: stripObjectToScalars(msg.channel),
|
||||
messageText: msg.cleanContent || msg.content || ""
|
||||
member: stripObjectToScalars(member, ["user"]),
|
||||
channel: stripObjectToScalars(channel),
|
||||
messageText: disableCodeBlocks(deactivateMentions(savedMessage.data.content || ""))
|
||||
},
|
||||
msg.id
|
||||
savedMessage.id
|
||||
);
|
||||
} else {
|
||||
this.serverLogs.log(
|
||||
LogType.MESSAGE_DELETE_BARE,
|
||||
{
|
||||
messageId: msg.id,
|
||||
channel: stripObjectToScalars(msg.channel)
|
||||
messageId: savedMessage.id,
|
||||
channel: stripObjectToScalars(channel)
|
||||
},
|
||||
msg.id
|
||||
savedMessage.id
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@d.event("messageDeleteBulk")
|
||||
onMessageDeleteBulk(messages: Message[]) {
|
||||
// Uses events from savesMessages
|
||||
onMessageDeleteBulk(savedMessages: SavedMessage[]) {
|
||||
const channel = this.guild.channels.get(savedMessages[0].channel_id);
|
||||
|
||||
this.serverLogs.log(
|
||||
LogType.MESSAGE_DELETE_BULK,
|
||||
{
|
||||
count: messages.length,
|
||||
channel: messages[0] ? messages[0].channel : null
|
||||
count: savedMessages.length,
|
||||
channel
|
||||
},
|
||||
messages[0] && messages[0].id
|
||||
savedMessages[0].id
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
@ -42,7 +42,7 @@ export class PostPlugin extends Plugin {
|
|||
}
|
||||
|
||||
const createdMsg = await args.channel.createMessage(args.content);
|
||||
await this.savedMessages.createFromMsg(createdMsg, { is_permanent: true });
|
||||
await this.savedMessages.setPermanent(createdMsg.id);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -64,6 +64,5 @@ export class PostPlugin extends Plugin {
|
|||
}
|
||||
|
||||
const edited = await this.bot.editMessage(savedMessage.channel_id, savedMessage.id, args.content);
|
||||
await this.savedMessages.saveEditFromMsg(edited);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue