mirror of
https://github.com/ZeppelinBot/Zeppelin.git
synced 2025-05-10 12:25:02 +00:00
logs: add support for embeds in log formats
This commit is contained in:
parent
b6b4154b2d
commit
8b22ce267d
3 changed files with 75 additions and 54 deletions
|
@ -1,7 +1,14 @@
|
|||
import { PluginData } from "knub";
|
||||
import { LogsPluginType } from "../types";
|
||||
import { LogType } from "src/data/LogType";
|
||||
import { verboseUserMention, verboseUserName, verboseChannelMention, messageSummary, resolveMember } from "src/utils";
|
||||
import {
|
||||
verboseUserMention,
|
||||
verboseUserName,
|
||||
verboseChannelMention,
|
||||
messageSummary,
|
||||
resolveMember,
|
||||
renderRecursively,
|
||||
} from "src/utils";
|
||||
import { SavedMessage } from "src/data/entities/SavedMessage";
|
||||
import { renderTemplate, TemplateParseError } from "src/templateFormatter";
|
||||
import { logger } from "src/logger";
|
||||
|
@ -12,53 +19,55 @@ export async function getLogMessage(pluginData: PluginData<LogsPluginType>, type
|
|||
const format = config.format[LogType[type]] || "";
|
||||
if (format === "") return;
|
||||
|
||||
let formatted;
|
||||
try {
|
||||
const values = {
|
||||
...data,
|
||||
userMention: async inputUserOrMember => {
|
||||
if (!inputUserOrMember) return "";
|
||||
const values = {
|
||||
...data,
|
||||
userMention: async inputUserOrMember => {
|
||||
if (!inputUserOrMember) return "";
|
||||
|
||||
const usersOrMembers = Array.isArray(inputUserOrMember) ? inputUserOrMember : [inputUserOrMember];
|
||||
const usersOrMembers = Array.isArray(inputUserOrMember) ? inputUserOrMember : [inputUserOrMember];
|
||||
|
||||
const mentions = [];
|
||||
for (const userOrMember of usersOrMembers) {
|
||||
let user;
|
||||
let member;
|
||||
const mentions = [];
|
||||
for (const userOrMember of usersOrMembers) {
|
||||
let user;
|
||||
let member;
|
||||
|
||||
if (userOrMember.user) {
|
||||
member = userOrMember;
|
||||
user = member.user;
|
||||
} else {
|
||||
user = userOrMember;
|
||||
member = await resolveMember(pluginData.client, pluginData.guild, user.id);
|
||||
}
|
||||
|
||||
const memberConfig = pluginData.config.getMatchingConfig({ member, userId: user.id }) || ({} as any);
|
||||
|
||||
mentions.push(memberConfig.ping_user ? verboseUserMention(user) : verboseUserName(user));
|
||||
if (userOrMember.user) {
|
||||
member = userOrMember;
|
||||
user = member.user;
|
||||
} else {
|
||||
user = userOrMember;
|
||||
member = await resolveMember(pluginData.client, pluginData.guild, user.id);
|
||||
}
|
||||
|
||||
return mentions.join(", ");
|
||||
},
|
||||
channelMention: channel => {
|
||||
if (!channel) return "";
|
||||
return verboseChannelMention(channel);
|
||||
},
|
||||
messageSummary: (msg: SavedMessage) => {
|
||||
if (!msg) return "";
|
||||
return messageSummary(msg);
|
||||
},
|
||||
const memberConfig = pluginData.config.getMatchingConfig({ member, userId: user.id }) || ({} as any);
|
||||
|
||||
mentions.push(memberConfig.ping_user ? verboseUserMention(user) : verboseUserName(user));
|
||||
}
|
||||
|
||||
return mentions.join(", ");
|
||||
},
|
||||
channelMention: channel => {
|
||||
if (!channel) return "";
|
||||
return verboseChannelMention(channel);
|
||||
},
|
||||
messageSummary: (msg: SavedMessage) => {
|
||||
if (!msg) return "";
|
||||
return messageSummary(msg);
|
||||
},
|
||||
};
|
||||
|
||||
if (type === LogType.BOT_ALERT) {
|
||||
const valuesWithoutTmplEval = { ...values };
|
||||
values.tmplEval = str => {
|
||||
return renderTemplate(str, valuesWithoutTmplEval);
|
||||
};
|
||||
}
|
||||
|
||||
if (type === LogType.BOT_ALERT) {
|
||||
const valuesWithoutTmplEval = { ...values };
|
||||
values.tmplEval = str => {
|
||||
return renderTemplate(str, valuesWithoutTmplEval);
|
||||
};
|
||||
}
|
||||
const renderLogString = str => renderTemplate(str, values);
|
||||
|
||||
formatted = await renderTemplate(format, values);
|
||||
let formatted;
|
||||
try {
|
||||
formatted = typeof format === "string" ? await renderLogString(format) : renderRecursively(format, renderLogString);
|
||||
} catch (e) {
|
||||
if (e instanceof TemplateParseError) {
|
||||
logger.error(`Error when parsing template:\nError: ${e.message}\nTemplate: ${format}`);
|
||||
|
@ -68,13 +77,15 @@ export async function getLogMessage(pluginData: PluginData<LogsPluginType>, type
|
|||
}
|
||||
}
|
||||
|
||||
formatted = formatted.trim();
|
||||
if (typeof formatted === "string") {
|
||||
formatted = formatted.trim();
|
||||
|
||||
const timestampFormat = config.format.timestamp;
|
||||
if (timestampFormat) {
|
||||
const timestamp = moment().format(timestampFormat);
|
||||
return `\`[${timestamp}]\` ${formatted}`;
|
||||
} else {
|
||||
return formatted;
|
||||
const timestampFormat = config.format.timestamp;
|
||||
if (timestampFormat) {
|
||||
const timestamp = moment().format(timestampFormat);
|
||||
formatted = `\`[${timestamp}]\` ${formatted}`;
|
||||
}
|
||||
}
|
||||
|
||||
return formatted;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue