3
0
Fork 0
mirror of https://github.com/ZeppelinBot/Zeppelin.git synced 2025-05-10 12:25:02 +00:00

Typed log functions + more

This commit is contained in:
Dragory 2021-08-18 01:51:42 +03:00
parent d2ac700143
commit bed6589d48
No known key found for this signature in database
GPG key ID: 5F387BA66DF8AAC1
166 changed files with 4021 additions and 869 deletions

View file

@ -0,0 +1,33 @@
import { GuildPluginData } from "knub";
import { LogsPluginType } from "../types";
import { LogType } from "../../../data/LogType";
import { log } from "../util/log";
import { createTypedTemplateSafeValueContainer } from "../../../templateFormatter";
import { User } from "discord.js";
import { userToTemplateSafeUser } from "../../../utils/templateSafeObjects";
interface LogAutomodActionData {
rule: string;
user: User;
users: User[];
actionsTaken: string;
matchSummary: string;
}
export function logAutomodAction(pluginData: GuildPluginData<LogsPluginType>, data: LogAutomodActionData) {
return log(
pluginData,
LogType.AUTOMOD_ACTION,
createTypedTemplateSafeValueContainer({
rule: data.rule,
user: userToTemplateSafeUser(data.user),
users: data.users.map(user => userToTemplateSafeUser(user)),
actionsTaken: data.actionsTaken,
matchSummary: data.matchSummary,
}),
{
userId: data.user.id,
bot: data.user.bot,
},
);
}

View file

@ -0,0 +1,20 @@
import { GuildPluginData } from "knub";
import { LogsPluginType } from "../types";
import { LogType } from "../../../data/LogType";
import { log } from "../util/log";
import { createTypedTemplateSafeValueContainer } from "../../../templateFormatter";
interface LogBotAlertData {
body: string;
}
export function logBotAlert(pluginData: GuildPluginData<LogsPluginType>, data: LogBotAlertData) {
return log(
pluginData,
LogType.BOT_ALERT,
createTypedTemplateSafeValueContainer({
body: data.body,
}),
{},
);
}

View file

@ -0,0 +1,32 @@
import { GuildPluginData } from "knub";
import { LogsPluginType } from "../types";
import { LogType } from "../../../data/LogType";
import { log } from "../util/log";
import { createTypedTemplateSafeValueContainer } from "../../../templateFormatter";
import { User } from "discord.js";
import { userToTemplateSafeUser } from "../../../utils/templateSafeObjects";
interface LogCaseCreateData {
mod: User;
userId: string;
caseNum: number;
caseType: string;
reason: string;
}
export function logCaseCreate(pluginData: GuildPluginData<LogsPluginType>, data: LogCaseCreateData) {
return log(
pluginData,
LogType.CASE_CREATE,
createTypedTemplateSafeValueContainer({
mod: userToTemplateSafeUser(data.mod),
userId: data.userId,
caseNum: data.caseNum,
caseType: data.caseType,
reason: data.reason,
}),
{
userId: data.userId,
},
);
}

View file

@ -0,0 +1,25 @@
import { GuildPluginData } from "knub";
import { LogsPluginType } from "../types";
import { LogType } from "../../../data/LogType";
import { log } from "../util/log";
import { createTypedTemplateSafeValueContainer } from "../../../templateFormatter";
import { GuildMember } from "discord.js";
import { caseToTemplateSafeCase, memberToTemplateSafeMember } from "../../../utils/templateSafeObjects";
import { Case } from "../../../data/entities/Case";
interface LogCaseDeleteData {
mod: GuildMember;
case: Case;
}
export function logCaseDelete(pluginData: GuildPluginData<LogsPluginType>, data: LogCaseDeleteData) {
return log(
pluginData,
LogType.CASE_DELETE,
createTypedTemplateSafeValueContainer({
mod: memberToTemplateSafeMember(data.mod),
case: caseToTemplateSafeCase(data.case),
}),
{},
);
}

View file

@ -0,0 +1,28 @@
import { GuildPluginData } from "knub";
import { LogsPluginType } from "../types";
import { LogType } from "../../../data/LogType";
import { log } from "../util/log";
import { createTypedTemplateSafeValueContainer } from "../../../templateFormatter";
import { User } from "discord.js";
import { userToTemplateSafeUser } from "../../../utils/templateSafeObjects";
interface LogCaseUpdateData {
mod: User;
caseNumber: number;
caseType: string;
note: string;
}
export function logCaseUpdate(pluginData: GuildPluginData<LogsPluginType>, data: LogCaseUpdateData) {
return log(
pluginData,
LogType.CASE_UPDATE,
createTypedTemplateSafeValueContainer({
mod: userToTemplateSafeUser(data.mod),
caseNumber: data.caseNumber,
caseType: data.caseType,
note: data.note,
}),
{},
);
}

View file

@ -0,0 +1,41 @@
import { GuildPluginData } from "knub";
import { LogsPluginType } from "../types";
import { LogType } from "../../../data/LogType";
import { log } from "../util/log";
import { createTypedTemplateSafeValueContainer } from "../../../templateFormatter";
import { BaseGuildTextChannel, ThreadChannel, User } from "discord.js";
import {
channelToTemplateSafeChannel,
savedMessageToTemplateSafeSavedMessage,
userToTemplateSafeUser,
} from "../../../utils/templateSafeObjects";
import { SavedMessage } from "../../../data/entities/SavedMessage";
import { UnknownUser } from "../../../utils";
import { deactivateMentions, disableCodeBlocks } from "knub/dist/helpers";
interface LogCensorData {
user: User | UnknownUser;
channel: BaseGuildTextChannel | ThreadChannel;
reason: string;
message: SavedMessage;
}
export function logCensor(pluginData: GuildPluginData<LogsPluginType>, data: LogCensorData) {
return log(
pluginData,
LogType.CENSOR,
createTypedTemplateSafeValueContainer({
user: userToTemplateSafeUser(data.user),
channel: channelToTemplateSafeChannel(data.channel),
reason: data.reason,
message: savedMessageToTemplateSafeSavedMessage(data.message),
messageText: disableCodeBlocks(deactivateMentions(data.message.data.content)),
}),
{
userId: data.user.id,
channel: data.channel.id,
category: data.channel.parentId,
bot: data.user instanceof User ? data.user.bot : false,
},
);
}

View file

@ -0,0 +1,25 @@
import { GuildPluginData } from "knub";
import { LogsPluginType } from "../types";
import { LogType } from "../../../data/LogType";
import { log } from "../util/log";
import { createTypedTemplateSafeValueContainer } from "../../../templateFormatter";
import { GuildChannel, NewsChannel } from "discord.js";
import { channelToTemplateSafeChannel } from "../../../utils/templateSafeObjects";
interface LogChannelCreateData {
channel: GuildChannel | NewsChannel;
}
export function logChannelCreate(pluginData: GuildPluginData<LogsPluginType>, data: LogChannelCreateData) {
return log(
pluginData,
LogType.CHANNEL_CREATE,
createTypedTemplateSafeValueContainer({
channel: channelToTemplateSafeChannel(data.channel),
}),
{
channel: data.channel.id,
category: data.channel.parentId,
},
);
}

View file

@ -0,0 +1,25 @@
import { GuildPluginData } from "knub";
import { LogsPluginType } from "../types";
import { LogType } from "../../../data/LogType";
import { log } from "../util/log";
import { createTypedTemplateSafeValueContainer } from "../../../templateFormatter";
import { GuildChannel, NewsChannel } from "discord.js";
import { channelToTemplateSafeChannel } from "../../../utils/templateSafeObjects";
interface LogChannelDeleteData {
channel: GuildChannel | NewsChannel;
}
export function logChannelDelete(pluginData: GuildPluginData<LogsPluginType>, data: LogChannelDeleteData) {
return log(
pluginData,
LogType.CHANNEL_DELETE,
createTypedTemplateSafeValueContainer({
channel: channelToTemplateSafeChannel(data.channel),
}),
{
channel: data.channel.id,
category: data.channel.parentId,
},
);
}

View file

@ -0,0 +1,29 @@
import { GuildPluginData } from "knub";
import { LogsPluginType } from "../types";
import { LogType } from "../../../data/LogType";
import { log } from "../util/log";
import { createTypedTemplateSafeValueContainer } from "../../../templateFormatter";
import { GuildChannel, NewsChannel } from "discord.js";
import { channelToTemplateSafeChannel } from "../../../utils/templateSafeObjects";
interface LogChannelUpdateData {
oldChannel: GuildChannel | NewsChannel;
newChannel: GuildChannel | NewsChannel;
differenceString: string;
}
export function logChannelUpdate(pluginData: GuildPluginData<LogsPluginType>, data: LogChannelUpdateData) {
return log(
pluginData,
LogType.CHANNEL_UPDATE,
createTypedTemplateSafeValueContainer({
oldChannel: channelToTemplateSafeChannel(data.oldChannel),
newChannel: channelToTemplateSafeChannel(data.newChannel),
differenceString: data.differenceString,
}),
{
channel: data.newChannel.id,
category: data.newChannel.parentId,
},
);
}

View file

@ -0,0 +1,31 @@
import { GuildPluginData } from "knub";
import { LogsPluginType } from "../types";
import { LogType } from "../../../data/LogType";
import { log } from "../util/log";
import { createTypedTemplateSafeValueContainer } from "../../../templateFormatter";
import { BaseGuildTextChannel, User } from "discord.js";
import { channelToTemplateSafeChannel, userToTemplateSafeUser } from "../../../utils/templateSafeObjects";
interface LogCleanData {
mod: User;
channel: BaseGuildTextChannel;
count: number;
archiveUrl: string;
}
export function logClean(pluginData: GuildPluginData<LogsPluginType>, data: LogCleanData) {
return log(
pluginData,
LogType.CLEAN,
createTypedTemplateSafeValueContainer({
mod: userToTemplateSafeUser(data.mod),
channel: channelToTemplateSafeChannel(data.channel),
count: data.count,
archiveUrl: data.archiveUrl,
}),
{
channel: data.channel.id,
category: data.channel.parentId,
},
);
}

View file

@ -0,0 +1,28 @@
import { GuildPluginData } from "knub";
import { LogsPluginType } from "../types";
import { LogType } from "../../../data/LogType";
import { log } from "../util/log";
import { createTypedTemplateSafeValueContainer } from "../../../templateFormatter";
import { UnknownUser } from "../../../utils";
import { User } from "discord.js";
import { userToTemplateSafeUser } from "../../../utils/templateSafeObjects";
interface LogDmFailedData {
source: string;
user: User | UnknownUser;
}
export function logDmFailed(pluginData: GuildPluginData<LogsPluginType>, data: LogDmFailedData) {
return log(
pluginData,
LogType.DM_FAILED,
createTypedTemplateSafeValueContainer({
source: data.source,
user: userToTemplateSafeUser(data.user),
}),
{
userId: data.user.id,
bot: data.user instanceof User ? data.user.bot : false,
},
);
}

View file

@ -0,0 +1,22 @@
import { GuildPluginData } from "knub";
import { LogsPluginType } from "../types";
import { LogType } from "../../../data/LogType";
import { log } from "../util/log";
import { createTypedTemplateSafeValueContainer } from "../../../templateFormatter";
import { Emoji } from "discord.js";
import { emojiToTemplateSafeEmoji } from "../../../utils/templateSafeObjects";
interface LogEmojiCreateData {
emoji: Emoji;
}
export function logEmojiCreate(pluginData: GuildPluginData<LogsPluginType>, data: LogEmojiCreateData) {
return log(
pluginData,
LogType.EMOJI_CREATE,
createTypedTemplateSafeValueContainer({
emoji: emojiToTemplateSafeEmoji(data.emoji),
}),
{},
);
}

View file

@ -0,0 +1,22 @@
import { GuildPluginData } from "knub";
import { LogsPluginType } from "../types";
import { LogType } from "../../../data/LogType";
import { log } from "../util/log";
import { createTypedTemplateSafeValueContainer } from "../../../templateFormatter";
import { Emoji } from "discord.js";
import { emojiToTemplateSafeEmoji } from "../../../utils/templateSafeObjects";
interface LogEmojiDeleteData {
emoji: Emoji;
}
export function logEmojiDelete(pluginData: GuildPluginData<LogsPluginType>, data: LogEmojiDeleteData) {
return log(
pluginData,
LogType.EMOJI_DELETE,
createTypedTemplateSafeValueContainer({
emoji: emojiToTemplateSafeEmoji(data.emoji),
}),
{},
);
}

View file

@ -0,0 +1,26 @@
import { GuildPluginData } from "knub";
import { LogsPluginType } from "../types";
import { LogType } from "../../../data/LogType";
import { log } from "../util/log";
import { createTypedTemplateSafeValueContainer } from "../../../templateFormatter";
import { Emoji } from "discord.js";
import { emojiToTemplateSafeEmoji } from "../../../utils/templateSafeObjects";
interface LogEmojiUpdateData {
oldEmoji: Emoji;
newEmoji: Emoji;
differenceString: string;
}
export function logEmojiUpdate(pluginData: GuildPluginData<LogsPluginType>, data: LogEmojiUpdateData) {
return log(
pluginData,
LogType.EMOJI_UPDATE,
createTypedTemplateSafeValueContainer({
oldEmoji: emojiToTemplateSafeEmoji(data.oldEmoji),
newEmoji: emojiToTemplateSafeEmoji(data.newEmoji),
differenceString: data.differenceString,
}),
{},
);
}

View file

@ -0,0 +1,26 @@
import { GuildPluginData } from "knub";
import { LogsPluginType } from "../types";
import { LogType } from "../../../data/LogType";
import { log } from "../util/log";
import { createTypedTemplateSafeValueContainer } from "../../../templateFormatter";
import { User } from "discord.js";
import { userToTemplateSafeUser } from "../../../utils/templateSafeObjects";
interface LogMassBanData {
mod: User;
count: number;
reason: string;
}
export function logMassBan(pluginData: GuildPluginData<LogsPluginType>, data: LogMassBanData) {
return log(
pluginData,
LogType.MASSBAN,
createTypedTemplateSafeValueContainer({
mod: userToTemplateSafeUser(data.mod),
count: data.count,
reason: data.reason,
}),
{},
);
}

View file

@ -0,0 +1,24 @@
import { GuildPluginData } from "knub";
import { LogsPluginType } from "../types";
import { LogType } from "../../../data/LogType";
import { log } from "../util/log";
import { createTypedTemplateSafeValueContainer } from "../../../templateFormatter";
import { User } from "discord.js";
import { userToTemplateSafeUser } from "../../../utils/templateSafeObjects";
interface LogMassMuteData {
mod: User;
count: number;
}
export function logMassMute(pluginData: GuildPluginData<LogsPluginType>, data: LogMassMuteData) {
return log(
pluginData,
LogType.MASSMUTE,
createTypedTemplateSafeValueContainer({
mod: userToTemplateSafeUser(data.mod),
count: data.count,
}),
{},
);
}

View file

@ -0,0 +1,26 @@
import { GuildPluginData } from "knub";
import { LogsPluginType } from "../types";
import { LogType } from "../../../data/LogType";
import { log } from "../util/log";
import { createTypedTemplateSafeValueContainer } from "../../../templateFormatter";
import { User } from "discord.js";
import { userToTemplateSafeUser } from "../../../utils/templateSafeObjects";
interface LogMassUnbanData {
mod: User;
count: number;
reason: string;
}
export function logMassUnban(pluginData: GuildPluginData<LogsPluginType>, data: LogMassUnbanData) {
return log(
pluginData,
LogType.MASSUNBAN,
createTypedTemplateSafeValueContainer({
mod: userToTemplateSafeUser(data.mod),
count: data.count,
reason: data.reason,
}),
{},
);
}

View file

@ -0,0 +1,32 @@
import { GuildPluginData } from "knub";
import { LogsPluginType } from "../types";
import { LogType } from "../../../data/LogType";
import { log } from "../util/log";
import { createTypedTemplateSafeValueContainer } from "../../../templateFormatter";
import { User } from "discord.js";
import { memberToTemplateSafeMember, userToTemplateSafeUser } from "../../../utils/templateSafeObjects";
import { UnknownUser } from "../../../utils";
interface LogMemberBanData {
mod: User | UnknownUser | null;
user: User | UnknownUser;
caseNumber: number;
reason: string;
}
export function logMemberBan(pluginData: GuildPluginData<LogsPluginType>, data: LogMemberBanData) {
return log(
pluginData,
LogType.MEMBER_BAN,
createTypedTemplateSafeValueContainer({
mod: data.mod ? userToTemplateSafeUser(data.mod) : null,
user: userToTemplateSafeUser(data.user),
caseNumber: data.caseNumber,
reason: data.reason,
}),
{
userId: data.user.id,
bot: data.user instanceof User ? data.user.bot : false,
},
);
}

View file

@ -0,0 +1,30 @@
import { GuildPluginData } from "knub";
import { LogsPluginType } from "../types";
import { LogType } from "../../../data/LogType";
import { log } from "../util/log";
import { createTypedTemplateSafeValueContainer } from "../../../templateFormatter";
import { GuildMember, Snowflake } from "discord.js";
import { memberToTemplateSafeMember } from "../../../utils/templateSafeObjects";
interface LogMemberForcebanData {
mod: GuildMember;
userId: Snowflake;
caseNumber: number;
reason: string;
}
export function logMemberForceban(pluginData: GuildPluginData<LogsPluginType>, data: LogMemberForcebanData) {
return log(
pluginData,
LogType.MEMBER_FORCEBAN,
createTypedTemplateSafeValueContainer({
mod: memberToTemplateSafeMember(data.mod),
userId: data.userId,
caseNumber: data.caseNumber,
reason: data.reason,
}),
{
userId: data.userId,
},
);
}

View file

@ -0,0 +1,35 @@
import { GuildPluginData } from "knub";
import { LogsPluginType } from "../types";
import { LogType } from "../../../data/LogType";
import { log } from "../util/log";
import { createTypedTemplateSafeValueContainer } from "../../../templateFormatter";
import { GuildMember } from "discord.js";
import { memberToTemplateSafeMember } from "../../../utils/templateSafeObjects";
import moment from "moment-timezone";
import humanizeDuration from "humanize-duration";
interface LogMemberJoinData {
member: GuildMember;
}
export function logMemberJoin(pluginData: GuildPluginData<LogsPluginType>, data: LogMemberJoinData) {
const newThreshold = moment.utc().valueOf() - 1000 * 60 * 60;
const accountAge = humanizeDuration(moment.utc().valueOf() - data.member.user.createdTimestamp, {
largest: 2,
round: true,
});
return log(
pluginData,
LogType.MEMBER_JOIN,
createTypedTemplateSafeValueContainer({
member: memberToTemplateSafeMember(data.member),
new: data.member.user.createdTimestamp >= newThreshold ? " :new:" : "",
account_age: accountAge,
}),
{
userId: data.member.id,
bot: data.member.user.bot,
},
);
}

View file

@ -0,0 +1,30 @@
import { GuildPluginData } from "knub";
import { LogsPluginType } from "../types";
import { LogType } from "../../../data/LogType";
import { log } from "../util/log";
import { createTypedTemplateSafeValueContainer } from "../../../templateFormatter";
import { GuildMember } from "discord.js";
import { memberToTemplateSafeMember } from "../../../utils/templateSafeObjects";
interface LogMemberJoinWithPriorRecordsData {
member: GuildMember;
recentCaseSummary: string;
}
export function logMemberJoinWithPriorRecords(
pluginData: GuildPluginData<LogsPluginType>,
data: LogMemberJoinWithPriorRecordsData,
) {
return log(
pluginData,
LogType.MEMBER_JOIN_WITH_PRIOR_RECORDS,
createTypedTemplateSafeValueContainer({
member: memberToTemplateSafeMember(data.member),
recentCaseSummary: data.recentCaseSummary,
}),
{
userId: data.member.id,
bot: data.member.user.bot,
},
);
}

View file

@ -0,0 +1,32 @@
import { GuildPluginData } from "knub";
import { LogsPluginType } from "../types";
import { LogType } from "../../../data/LogType";
import { log } from "../util/log";
import { createTypedTemplateSafeValueContainer } from "../../../templateFormatter";
import { GuildMember, User } from "discord.js";
import { memberToTemplateSafeMember, userToTemplateSafeUser } from "../../../utils/templateSafeObjects";
import { UnknownUser } from "../../../utils";
interface LogMemberKickData {
mod: User | UnknownUser | null;
user: User;
caseNumber: number;
reason: string;
}
export function logMemberKick(pluginData: GuildPluginData<LogsPluginType>, data: LogMemberKickData) {
return log(
pluginData,
LogType.MEMBER_KICK,
createTypedTemplateSafeValueContainer({
mod: data.mod ? userToTemplateSafeUser(data.mod) : null,
user: userToTemplateSafeUser(data.user),
caseNumber: data.caseNumber,
reason: data.reason,
}),
{
userId: data.user.id,
bot: data.user.bot,
},
);
}

View file

@ -0,0 +1,25 @@
import { GuildPluginData } from "knub";
import { LogsPluginType } from "../types";
import { LogType } from "../../../data/LogType";
import { log } from "../util/log";
import { createTypedTemplateSafeValueContainer } from "../../../templateFormatter";
import { GuildMember, PartialGuildMember } from "discord.js";
import { memberToTemplateSafeMember } from "../../../utils/templateSafeObjects";
interface LogMemberLeaveData {
member: GuildMember | PartialGuildMember;
}
export function logMemberLeave(pluginData: GuildPluginData<LogsPluginType>, data: LogMemberLeaveData) {
return log(
pluginData,
LogType.MEMBER_LEAVE,
createTypedTemplateSafeValueContainer({
member: memberToTemplateSafeMember(data.member),
}),
{
userId: data.member.id,
bot: data.member.user?.bot ?? false,
},
);
}

View file

@ -0,0 +1,32 @@
import { GuildPluginData } from "knub";
import { LogsPluginType } from "../types";
import { LogType } from "../../../data/LogType";
import { log } from "../util/log";
import { createTypedTemplateSafeValueContainer } from "../../../templateFormatter";
import { GuildMember, User } from "discord.js";
import { memberToTemplateSafeMember, userToTemplateSafeUser } from "../../../utils/templateSafeObjects";
import { UnknownUser } from "../../../utils";
interface LogMemberMuteData {
mod: User | UnknownUser;
user: User | UnknownUser;
caseNumber: number;
reason: string;
}
export function logMemberMute(pluginData: GuildPluginData<LogsPluginType>, data: LogMemberMuteData) {
return log(
pluginData,
LogType.MEMBER_MUTE,
createTypedTemplateSafeValueContainer({
mod: userToTemplateSafeUser(data.mod),
user: userToTemplateSafeUser(data.user),
caseNumber: data.caseNumber,
reason: data.reason,
}),
{
userId: data.user.id,
bot: data.user instanceof User ? data.user.bot : false,
},
);
}

View file

@ -0,0 +1,40 @@
import { GuildPluginData } from "knub";
import { LogsPluginType } from "../types";
import { LogType } from "../../../data/LogType";
import { log } from "../util/log";
import { createTypedTemplateSafeValueContainer } from "../../../templateFormatter";
import { GuildMember } from "discord.js";
import {
memberToTemplateSafeMember,
TemplateSafeUnknownMember,
TemplateSafeUnknownUser,
} from "../../../utils/templateSafeObjects";
import { UnknownUser } from "../../../utils";
interface LogMemberMuteExpiredData {
member: GuildMember | UnknownUser;
}
export function logMemberMuteExpired(pluginData: GuildPluginData<LogsPluginType>, data: LogMemberMuteExpiredData) {
const member =
data.member instanceof GuildMember
? memberToTemplateSafeMember(data.member)
: new TemplateSafeUnknownMember({ ...data.member, user: new TemplateSafeUnknownUser({ ...data.member }) });
const roles = data.member instanceof GuildMember ? Array.from(data.member.roles.cache.keys()) : [];
const bot = data.member instanceof GuildMember ? data.member.user.bot : false;
return log(
pluginData,
LogType.MEMBER_MUTE_EXPIRED,
createTypedTemplateSafeValueContainer({
member,
}),
{
userId: data.member.id,
roles,
bot,
},
);
}

View file

@ -0,0 +1,25 @@
import { GuildPluginData } from "knub";
import { LogsPluginType } from "../types";
import { LogType } from "../../../data/LogType";
import { log } from "../util/log";
import { createTypedTemplateSafeValueContainer } from "../../../templateFormatter";
import { GuildMember } from "discord.js";
import { memberToTemplateSafeMember } from "../../../utils/templateSafeObjects";
interface LogMemberMuteRejoinData {
member: GuildMember;
}
export function logMemberMuteRejoin(pluginData: GuildPluginData<LogsPluginType>, data: LogMemberMuteRejoinData) {
return log(
pluginData,
LogType.MEMBER_MUTE_REJOIN,
createTypedTemplateSafeValueContainer({
member: memberToTemplateSafeMember(data.member),
}),
{
userId: data.member.id,
bot: data.member.user.bot,
},
);
}

View file

@ -0,0 +1,30 @@
import { GuildPluginData } from "knub";
import { LogsPluginType } from "../types";
import { LogType } from "../../../data/LogType";
import { log } from "../util/log";
import { createTypedTemplateSafeValueContainer } from "../../../templateFormatter";
import { GuildMember } from "discord.js";
import { memberToTemplateSafeMember } from "../../../utils/templateSafeObjects";
interface LogMemberNickChangeData {
member: GuildMember;
oldNick: string;
newNick: string;
}
export function logMemberNickChange(pluginData: GuildPluginData<LogsPluginType>, data: LogMemberNickChangeData) {
return log(
pluginData,
LogType.MEMBER_NICK_CHANGE,
createTypedTemplateSafeValueContainer({
member: memberToTemplateSafeMember(data.member),
oldNick: data.oldNick,
newNick: data.newNick,
}),
{
userId: data.member.id,
roles: Array.from(data.member.roles.cache.keys()),
bot: data.member.user.bot,
},
);
}

View file

@ -0,0 +1,32 @@
import { GuildPluginData } from "knub";
import { LogsPluginType } from "../types";
import { LogType } from "../../../data/LogType";
import { log } from "../util/log";
import { createTypedTemplateSafeValueContainer } from "../../../templateFormatter";
import { User } from "discord.js";
import { userToTemplateSafeUser } from "../../../utils/templateSafeObjects";
import { UnknownUser } from "../../../utils";
interface LogMemberNoteData {
mod: User;
user: User | UnknownUser;
caseNumber: number;
reason: string;
}
export function logMemberNote(pluginData: GuildPluginData<LogsPluginType>, data: LogMemberNoteData) {
return log(
pluginData,
LogType.MEMBER_NOTE,
createTypedTemplateSafeValueContainer({
mod: userToTemplateSafeUser(data.mod),
user: userToTemplateSafeUser(data.user),
caseNumber: data.caseNumber,
reason: data.reason,
}),
{
userId: data.user.id,
bot: data.user instanceof User ? data.user.bot : false,
},
);
}

View file

@ -0,0 +1,28 @@
import { GuildPluginData } from "knub";
import { LogsPluginType } from "../types";
import { LogType } from "../../../data/LogType";
import { log } from "../util/log";
import { createTypedTemplateSafeValueContainer } from "../../../templateFormatter";
import { GuildMember } from "discord.js";
import { memberToTemplateSafeMember } from "../../../utils/templateSafeObjects";
interface LogMemberRestoreData {
member: GuildMember;
restoredData: string;
}
export function logMemberRestore(pluginData: GuildPluginData<LogsPluginType>, data: LogMemberRestoreData) {
return log(
pluginData,
LogType.MEMBER_RESTORE,
createTypedTemplateSafeValueContainer({
member: memberToTemplateSafeMember(data.member),
restoredData: data.restoredData,
}),
{
userId: data.member.id,
roles: Array.from(data.member.roles.cache.keys()),
bot: data.member.user.bot,
},
);
}

View file

@ -0,0 +1,30 @@
import { GuildPluginData } from "knub";
import { LogsPluginType } from "../types";
import { LogType } from "../../../data/LogType";
import { log } from "../util/log";
import { createTypedTemplateSafeValueContainer } from "../../../templateFormatter";
import { GuildMember, Role, User } from "discord.js";
import { memberToTemplateSafeMember, userToTemplateSafeUser } from "../../../utils/templateSafeObjects";
interface LogMemberRoleAddData {
mod: User | null;
member: GuildMember;
roles: Role[];
}
export function logMemberRoleAdd(pluginData: GuildPluginData<LogsPluginType>, data: LogMemberRoleAddData) {
return log(
pluginData,
LogType.MEMBER_ROLE_ADD,
createTypedTemplateSafeValueContainer({
mod: userToTemplateSafeUser(data.mod),
member: memberToTemplateSafeMember(data.member),
roles: data.roles.map(r => r.name).join(", "),
}),
{
userId: data.member.id,
roles: Array.from(data.member.roles.cache.keys()),
bot: data.member.user.bot,
},
);
}

View file

@ -0,0 +1,32 @@
import { GuildPluginData } from "knub";
import { LogsPluginType } from "../types";
import { LogType } from "../../../data/LogType";
import { log } from "../util/log";
import { createTypedTemplateSafeValueContainer } from "../../../templateFormatter";
import { GuildMember, User } from "discord.js";
import { memberToTemplateSafeMember, userToTemplateSafeUser } from "../../../utils/templateSafeObjects";
import { UnknownUser } from "../../../utils";
interface LogMemberRoleChangesData {
mod: User | UnknownUser | null;
member: GuildMember;
addedRoles: string;
removedRoles: string;
}
export function logMemberRoleChanges(pluginData: GuildPluginData<LogsPluginType>, data: LogMemberRoleChangesData) {
return log(
pluginData,
LogType.MEMBER_ROLE_CHANGES,
createTypedTemplateSafeValueContainer({
mod: data.mod ? userToTemplateSafeUser(data.mod) : null,
member: memberToTemplateSafeMember(data.member),
addedRoles: data.addedRoles,
removedRoles: data.removedRoles,
}),
{
userId: data.member.id,
bot: data.member.user.bot,
},
);
}

View file

@ -0,0 +1,30 @@
import { GuildPluginData } from "knub";
import { LogsPluginType } from "../types";
import { LogType } from "../../../data/LogType";
import { log } from "../util/log";
import { createTypedTemplateSafeValueContainer } from "../../../templateFormatter";
import { GuildMember, Role, User } from "discord.js";
import { memberToTemplateSafeMember, userToTemplateSafeUser } from "../../../utils/templateSafeObjects";
interface LogMemberRoleRemoveData {
mod: User | null;
member: GuildMember;
roles: Role[];
}
export function logMemberRoleRemove(pluginData: GuildPluginData<LogsPluginType>, data: LogMemberRoleRemoveData) {
return log(
pluginData,
LogType.MEMBER_ROLE_REMOVE,
createTypedTemplateSafeValueContainer({
mod: userToTemplateSafeUser(data.mod),
member: memberToTemplateSafeMember(data.member),
roles: data.roles.map(r => r.name).join(", "),
}),
{
userId: data.member.id,
roles: Array.from(data.member.roles.cache.keys()),
bot: data.member.user.bot,
},
);
}

View file

@ -0,0 +1,34 @@
import { GuildPluginData } from "knub";
import { LogsPluginType } from "../types";
import { LogType } from "../../../data/LogType";
import { log } from "../util/log";
import { createTypedTemplateSafeValueContainer } from "../../../templateFormatter";
import { User } from "discord.js";
import { userToTemplateSafeUser } from "../../../utils/templateSafeObjects";
import { UnknownUser } from "../../../utils";
interface LogMemberTimedBanData {
mod: User | UnknownUser;
user: User | UnknownUser;
banTime: string;
caseNumber: number;
reason: string;
}
export function logMemberTimedBan(pluginData: GuildPluginData<LogsPluginType>, data: LogMemberTimedBanData) {
return log(
pluginData,
LogType.MEMBER_TIMED_BAN,
createTypedTemplateSafeValueContainer({
mod: userToTemplateSafeUser(data.mod),
user: userToTemplateSafeUser(data.user),
banTime: data.banTime,
caseNumber: data.caseNumber,
reason: data.reason,
}),
{
userId: data.user.id,
bot: data.user instanceof User ? data.user.bot : false,
},
);
}

View file

@ -0,0 +1,31 @@
import { GuildPluginData } from "knub";
import { LogsPluginType } from "../types";
import { LogType } from "../../../data/LogType";
import { log } from "../util/log";
import { createTypedTemplateSafeValueContainer } from "../../../templateFormatter";
import { User } from "discord.js";
import { userToTemplateSafeUser } from "../../../utils/templateSafeObjects";
import { UnknownUser } from "../../../utils";
interface LogMemberTimedMuteData {
mod: User | UnknownUser;
user: User | UnknownUser;
time: string;
caseNumber: number;
reason: string;
}
export function logMemberTimedMute(pluginData: GuildPluginData<LogsPluginType>, data: LogMemberTimedMuteData) {
return log(
pluginData,
LogType.MEMBER_TIMED_MUTE,
createTypedTemplateSafeValueContainer({
mod: userToTemplateSafeUser(data.mod),
user: userToTemplateSafeUser(data.user),
time: data.time,
caseNumber: data.caseNumber,
reason: data.reason,
}),
{},
);
}

View file

@ -0,0 +1,33 @@
import { GuildPluginData } from "knub";
import { LogsPluginType } from "../types";
import { LogType } from "../../../data/LogType";
import { log } from "../util/log";
import { createTypedTemplateSafeValueContainer } from "../../../templateFormatter";
import { User } from "discord.js";
import { userToTemplateSafeUser } from "../../../utils/templateSafeObjects";
import { UnknownUser } from "../../../utils";
interface LogMemberTimedUnbanData {
mod: User | UnknownUser;
userId: string;
banTime: string;
caseNumber: number;
reason: string;
}
export function logMemberTimedUnban(pluginData: GuildPluginData<LogsPluginType>, data: LogMemberTimedUnbanData) {
return log(
pluginData,
LogType.MEMBER_TIMED_UNBAN,
createTypedTemplateSafeValueContainer({
mod: userToTemplateSafeUser(data.mod),
userId: data.userId,
banTime: data.banTime,
caseNumber: data.caseNumber,
reason: data.reason,
}),
{
userId: data.userId,
},
);
}

View file

@ -0,0 +1,30 @@
import { GuildPluginData } from "knub";
import { LogsPluginType } from "../types";
import { LogType } from "../../../data/LogType";
import { log } from "../util/log";
import { createTypedTemplateSafeValueContainer } from "../../../templateFormatter";
import { User } from "discord.js";
import { userToTemplateSafeUser } from "../../../utils/templateSafeObjects";
interface LogMemberTimedUnmuteData {
mod: User;
user: User;
time: string;
caseNumber: number;
reason: string;
}
export function logMemberTimedUnmute(pluginData: GuildPluginData<LogsPluginType>, data: LogMemberTimedUnmuteData) {
return log(
pluginData,
LogType.MEMBER_TIMED_UNMUTE,
createTypedTemplateSafeValueContainer({
mod: userToTemplateSafeUser(data.mod),
user: userToTemplateSafeUser(data.user),
time: data.time,
caseNumber: data.caseNumber,
reason: data.reason,
}),
{},
);
}

View file

@ -0,0 +1,31 @@
import { GuildPluginData } from "knub";
import { LogsPluginType } from "../types";
import { LogType } from "../../../data/LogType";
import { log } from "../util/log";
import { createTypedTemplateSafeValueContainer } from "../../../templateFormatter";
import { GuildMember, Snowflake, User } from "discord.js";
import { memberToTemplateSafeMember, userToTemplateSafeUser } from "../../../utils/templateSafeObjects";
import { UnknownUser } from "../../../utils";
interface LogMemberUnbanData {
mod: User | UnknownUser | null;
userId: Snowflake;
caseNumber: number;
reason: string;
}
export function logMemberUnban(pluginData: GuildPluginData<LogsPluginType>, data: LogMemberUnbanData) {
return log(
pluginData,
LogType.MEMBER_UNBAN,
createTypedTemplateSafeValueContainer({
mod: data.mod ? userToTemplateSafeUser(data.mod) : null,
userId: data.userId,
caseNumber: data.caseNumber,
reason: data.reason,
}),
{
userId: data.userId,
},
);
}

View file

@ -0,0 +1,31 @@
import { GuildPluginData } from "knub";
import { LogsPluginType } from "../types";
import { LogType } from "../../../data/LogType";
import { log } from "../util/log";
import { createTypedTemplateSafeValueContainer } from "../../../templateFormatter";
import { GuildMember, User } from "discord.js";
import { memberToTemplateSafeMember, userToTemplateSafeUser } from "../../../utils/templateSafeObjects";
interface LogMemberUnmuteData {
mod: GuildMember;
user: User;
caseNumber: number;
reason: string;
}
export function logMemberUnmute(pluginData: GuildPluginData<LogsPluginType>, data: LogMemberUnmuteData) {
return log(
pluginData,
LogType.MEMBER_UNMUTE,
createTypedTemplateSafeValueContainer({
mod: memberToTemplateSafeMember(data.mod),
user: userToTemplateSafeUser(data.user),
caseNumber: data.caseNumber,
reason: data.reason,
}),
{
userId: data.user.id,
bot: data.user.bot,
},
);
}

View file

@ -0,0 +1,32 @@
import { GuildPluginData } from "knub";
import { LogsPluginType } from "../types";
import { LogType } from "../../../data/LogType";
import { log } from "../util/log";
import { createTypedTemplateSafeValueContainer } from "../../../templateFormatter";
import { GuildMember } from "discord.js";
import { memberToTemplateSafeMember } from "../../../utils/templateSafeObjects";
interface LogMemberWarnData {
mod: GuildMember;
member: GuildMember;
caseNumber: number;
reason: string;
}
export function logMemberWarn(pluginData: GuildPluginData<LogsPluginType>, data: LogMemberWarnData) {
return log(
pluginData,
LogType.MEMBER_WARN,
createTypedTemplateSafeValueContainer({
mod: memberToTemplateSafeMember(data.mod),
member: memberToTemplateSafeMember(data.member),
caseNumber: data.caseNumber,
reason: data.reason,
}),
{
userId: data.member.id,
roles: Array.from(data.member.roles.cache.keys()),
bot: data.member.user.bot,
},
);
}

View file

@ -0,0 +1,56 @@
import { GuildPluginData } from "knub";
import { FORMAT_NO_TIMESTAMP, LogsPluginType } from "../types";
import { LogType } from "../../../data/LogType";
import { log } from "../util/log";
import { createTypedTemplateSafeValueContainer } from "../../../templateFormatter";
import { BaseGuildTextChannel, ThreadChannel, User } from "discord.js";
import {
channelToTemplateSafeChannel,
savedMessageToTemplateSafeSavedMessage,
userToTemplateSafeUser,
} from "../../../utils/templateSafeObjects";
import moment from "moment-timezone";
import { ISavedMessageAttachmentData, SavedMessage } from "../../../data/entities/SavedMessage";
import { TimeAndDatePlugin } from "../../TimeAndDate/TimeAndDatePlugin";
import { UnknownUser, useMediaUrls } from "../../../utils";
interface LogMessageDeleteData {
user: User | UnknownUser;
channel: BaseGuildTextChannel | ThreadChannel;
message: SavedMessage;
}
export function logMessageDelete(pluginData: GuildPluginData<LogsPluginType>, data: LogMessageDeleteData) {
// Replace attachment URLs with media URLs
if (data.message.data.attachments) {
for (const attachment of data.message.data.attachments as ISavedMessageAttachmentData[]) {
attachment.url = useMediaUrls(attachment.url);
}
}
// See comment on FORMAT_NO_TIMESTAMP in types.ts
const config = pluginData.config.get();
const timestampFormat =
(config.format.timestamp !== FORMAT_NO_TIMESTAMP ? config.format.timestamp : null) ?? config.timestamp_format;
return log(
pluginData,
LogType.MESSAGE_DELETE,
createTypedTemplateSafeValueContainer({
user: userToTemplateSafeUser(data.user),
channel: channelToTemplateSafeChannel(data.channel),
message: savedMessageToTemplateSafeSavedMessage(data.message),
messageDate: pluginData
.getPlugin(TimeAndDatePlugin)
.inGuildTz(moment.utc(data.message.data.timestamp, "x"))
.format(timestampFormat),
}),
{
userId: data.user.id,
channel: data.channel.id,
category: data.channel.parentId,
messageTextContent: data.message.data.content,
bot: data.user instanceof User ? data.user.bot : false,
},
);
}

View file

@ -0,0 +1,39 @@
import { GuildPluginData } from "knub";
import { LogsPluginType } from "../types";
import { LogType } from "../../../data/LogType";
import { log } from "../util/log";
import { createTypedTemplateSafeValueContainer } from "../../../templateFormatter";
import { BaseGuildTextChannel, User } from "discord.js";
import {
channelToTemplateSafeChannel,
savedMessageToTemplateSafeSavedMessage,
userToTemplateSafeUser,
} from "../../../utils/templateSafeObjects";
import { SavedMessage } from "../../../data/entities/SavedMessage";
import { UnknownUser } from "../../../utils";
interface LogMessageDeleteAutoData {
message: SavedMessage;
user: User | UnknownUser;
channel: BaseGuildTextChannel;
messageDate: string;
}
export function logMessageDeleteAuto(pluginData: GuildPluginData<LogsPluginType>, data: LogMessageDeleteAutoData) {
return log(
pluginData,
LogType.MESSAGE_DELETE_AUTO,
createTypedTemplateSafeValueContainer({
message: savedMessageToTemplateSafeSavedMessage(data.message),
user: userToTemplateSafeUser(data.user),
channel: channelToTemplateSafeChannel(data.channel),
messageDate: data.messageDate,
}),
{
userId: data.user.id,
bot: data.user.bot,
channel: data.channel.id,
category: data.channel.parentId,
},
);
}

View file

@ -0,0 +1,27 @@
import { GuildPluginData } from "knub";
import { LogsPluginType } from "../types";
import { LogType } from "../../../data/LogType";
import { log } from "../util/log";
import { createTypedTemplateSafeValueContainer } from "../../../templateFormatter";
import { BaseGuildTextChannel, ThreadChannel } from "discord.js";
import { channelToTemplateSafeChannel } from "../../../utils/templateSafeObjects";
interface LogMessageDeleteBareData {
messageId: string;
channel: BaseGuildTextChannel | ThreadChannel;
}
export function logMessageDeleteBare(pluginData: GuildPluginData<LogsPluginType>, data: LogMessageDeleteBareData) {
return log(
pluginData,
LogType.MESSAGE_DELETE_BARE,
createTypedTemplateSafeValueContainer({
messageId: data.messageId,
channel: channelToTemplateSafeChannel(data.channel),
}),
{
channel: data.channel.id,
category: data.channel.parentId,
},
);
}

View file

@ -0,0 +1,31 @@
import { GuildPluginData } from "knub";
import { LogsPluginType } from "../types";
import { LogType } from "../../../data/LogType";
import { log } from "../util/log";
import { createTypedTemplateSafeValueContainer } from "../../../templateFormatter";
import { BaseGuildTextChannel, ThreadChannel } from "discord.js";
import { channelToTemplateSafeChannel } from "../../../utils/templateSafeObjects";
interface LogMessageDeleteBulkData {
count: number;
authorIds: string[];
channel: BaseGuildTextChannel | ThreadChannel;
archiveUrl: string;
}
export function logMessageDeleteBulk(pluginData: GuildPluginData<LogsPluginType>, data: LogMessageDeleteBulkData) {
return log(
pluginData,
LogType.MESSAGE_DELETE_BULK,
createTypedTemplateSafeValueContainer({
count: data.count,
authorIds: data.authorIds,
channel: channelToTemplateSafeChannel(data.channel),
archiveUrl: data.archiveUrl,
}),
{
channel: data.channel.id,
category: data.channel.parentId,
},
);
}

View file

@ -0,0 +1,39 @@
import { GuildPluginData } from "knub";
import { LogsPluginType } from "../types";
import { LogType } from "../../../data/LogType";
import { log } from "../util/log";
import { createTypedTemplateSafeValueContainer } from "../../../templateFormatter";
import { BaseGuildTextChannel, ThreadChannel, User } from "discord.js";
import {
channelToTemplateSafeChannel,
savedMessageToTemplateSafeSavedMessage,
userToTemplateSafeUser,
} from "../../../utils/templateSafeObjects";
import { SavedMessage } from "../../../data/entities/SavedMessage";
import { UnknownUser } from "../../../utils";
interface LogMessageEditData {
user: User | UnknownUser;
channel: BaseGuildTextChannel | ThreadChannel;
before: SavedMessage;
after: SavedMessage;
}
export function logMessageEdit(pluginData: GuildPluginData<LogsPluginType>, data: LogMessageEditData) {
return log(
pluginData,
LogType.MESSAGE_EDIT,
createTypedTemplateSafeValueContainer({
user: userToTemplateSafeUser(data.user),
channel: channelToTemplateSafeChannel(data.channel),
before: savedMessageToTemplateSafeSavedMessage(data.before),
after: savedMessageToTemplateSafeSavedMessage(data.after),
}),
{
userId: data.user.id,
channel: data.channel.id,
messageTextContent: data.after.data.content,
bot: data.user instanceof User ? data.user.bot : false,
},
);
}

View file

@ -0,0 +1,38 @@
import { GuildPluginData } from "knub";
import { LogsPluginType } from "../types";
import { LogType } from "../../../data/LogType";
import { log } from "../util/log";
import { createTypedTemplateSafeValueContainer } from "../../../templateFormatter";
import { BaseGuildTextChannel, GuildChannel, GuildMember, ThreadChannel } from "discord.js";
import { channelToTemplateSafeChannel, memberToTemplateSafeMember } from "../../../utils/templateSafeObjects";
interface LogMessageSpamDetectedData {
member: GuildMember;
channel: GuildChannel | ThreadChannel;
description: string;
limit: number;
interval: number;
archiveUrl: string;
}
export function logMessageSpamDetected(pluginData: GuildPluginData<LogsPluginType>, data: LogMessageSpamDetectedData) {
return log(
pluginData,
LogType.MESSAGE_SPAM_DETECTED,
createTypedTemplateSafeValueContainer({
member: memberToTemplateSafeMember(data.member),
channel: channelToTemplateSafeChannel(data.channel),
description: data.description,
limit: data.limit,
interval: data.interval,
archiveUrl: data.archiveUrl,
}),
{
userId: data.member.id,
roles: Array.from(data.member.roles.cache.keys()),
channel: data.channel.id,
category: data.channel.parentId,
bot: data.member.user.bot,
},
);
}

View file

@ -0,0 +1,31 @@
import { GuildPluginData } from "knub";
import { LogsPluginType } from "../types";
import { LogType } from "../../../data/LogType";
import { log } from "../util/log";
import { createTypedTemplateSafeValueContainer } from "../../../templateFormatter";
import { GuildMember } from "discord.js";
import { memberToTemplateSafeMember } from "../../../utils/templateSafeObjects";
interface LogOtherSpamDetectedData {
member: GuildMember;
description: string;
limit: number;
interval: number;
}
export function logOtherSpamDetected(pluginData: GuildPluginData<LogsPluginType>, data: LogOtherSpamDetectedData) {
return log(
pluginData,
LogType.OTHER_SPAM_DETECTED,
createTypedTemplateSafeValueContainer({
member: memberToTemplateSafeMember(data.member),
description: data.description,
limit: data.limit,
interval: data.interval,
}),
{
userId: data.member.id,
bot: data.member.user.bot,
},
);
}

View file

@ -0,0 +1,34 @@
import { GuildPluginData } from "knub";
import { LogsPluginType } from "../types";
import { LogType } from "../../../data/LogType";
import { log } from "../util/log";
import { createTypedTemplateSafeValueContainer } from "../../../templateFormatter";
import { BaseGuildTextChannel, User } from "discord.js";
import { channelToTemplateSafeChannel, userToTemplateSafeUser } from "../../../utils/templateSafeObjects";
interface LogPostedScheduledMessageData {
author: User;
channel: BaseGuildTextChannel;
messageId: string;
}
export function logPostedScheduledMessage(
pluginData: GuildPluginData<LogsPluginType>,
data: LogPostedScheduledMessageData,
) {
return log(
pluginData,
LogType.POSTED_SCHEDULED_MESSAGE,
createTypedTemplateSafeValueContainer({
author: userToTemplateSafeUser(data.author),
channel: channelToTemplateSafeChannel(data.channel),
messageId: data.messageId,
}),
{
userId: data.author.id,
bot: data.author.bot,
channel: data.channel.id,
category: data.channel.parentId,
},
);
}

View file

@ -0,0 +1,39 @@
import { GuildPluginData } from "knub";
import { LogsPluginType } from "../types";
import { LogType } from "../../../data/LogType";
import { log } from "../util/log";
import { createTypedTemplateSafeValueContainer } from "../../../templateFormatter";
import { BaseGuildTextChannel, User } from "discord.js";
import { channelToTemplateSafeChannel, userToTemplateSafeUser } from "../../../utils/templateSafeObjects";
interface LogRepeatedMessageData {
author: User;
channel: BaseGuildTextChannel;
datetime: string;
date: string;
time: string;
repeatInterval: string;
repeatDetails: string;
}
export function logRepeatedMessage(pluginData: GuildPluginData<LogsPluginType>, data: LogRepeatedMessageData) {
return log(
pluginData,
LogType.REPEATED_MESSAGE,
createTypedTemplateSafeValueContainer({
author: userToTemplateSafeUser(data.author),
channel: channelToTemplateSafeChannel(data.channel),
datetime: data.datetime,
date: data.date,
time: data.time,
repeatInterval: data.repeatInterval,
repeatDetails: data.repeatDetails,
}),
{
userId: data.author.id,
bot: data.author.bot,
channel: data.channel.id,
category: data.channel.parentId,
},
);
}

View file

@ -0,0 +1,22 @@
import { GuildPluginData } from "knub";
import { LogsPluginType } from "../types";
import { LogType } from "../../../data/LogType";
import { log } from "../util/log";
import { createTypedTemplateSafeValueContainer } from "../../../templateFormatter";
import { Role } from "discord.js";
import { roleToTemplateSafeRole } from "../../../utils/templateSafeObjects";
interface LogRoleCreateData {
role: Role;
}
export function logRoleCreate(pluginData: GuildPluginData<LogsPluginType>, data: LogRoleCreateData) {
return log(
pluginData,
LogType.ROLE_CREATE,
createTypedTemplateSafeValueContainer({
role: roleToTemplateSafeRole(data.role),
}),
{},
);
}

View file

@ -0,0 +1,22 @@
import { GuildPluginData } from "knub";
import { LogsPluginType } from "../types";
import { LogType } from "../../../data/LogType";
import { log } from "../util/log";
import { createTypedTemplateSafeValueContainer } from "../../../templateFormatter";
import { Role } from "discord.js";
import { roleToTemplateSafeRole } from "../../../utils/templateSafeObjects";
interface LogRoleDeleteData {
role: Role;
}
export function logRoleDelete(pluginData: GuildPluginData<LogsPluginType>, data: LogRoleDeleteData) {
return log(
pluginData,
LogType.ROLE_DELETE,
createTypedTemplateSafeValueContainer({
role: roleToTemplateSafeRole(data.role),
}),
{},
);
}

View file

@ -0,0 +1,26 @@
import { GuildPluginData } from "knub";
import { LogsPluginType } from "../types";
import { LogType } from "../../../data/LogType";
import { log } from "../util/log";
import { createTypedTemplateSafeValueContainer } from "../../../templateFormatter";
import { Role } from "discord.js";
import { roleToTemplateSafeRole } from "../../../utils/templateSafeObjects";
interface LogRoleUpdateData {
oldRole: Role;
newRole: Role;
differenceString: string;
}
export function logRoleUpdate(pluginData: GuildPluginData<LogsPluginType>, data: LogRoleUpdateData) {
return log(
pluginData,
LogType.ROLE_UPDATE,
createTypedTemplateSafeValueContainer({
oldRole: roleToTemplateSafeRole(data.oldRole),
newRole: roleToTemplateSafeRole(data.newRole),
differenceString: data.differenceString,
}),
{},
);
}

View file

@ -0,0 +1,35 @@
import { GuildPluginData } from "knub";
import { LogsPluginType } from "../types";
import { LogType } from "../../../data/LogType";
import { log } from "../util/log";
import { createTypedTemplateSafeValueContainer } from "../../../templateFormatter";
import { BaseGuildTextChannel, User } from "discord.js";
import { channelToTemplateSafeChannel, userToTemplateSafeUser } from "../../../utils/templateSafeObjects";
interface LogScheduledMessageData {
author: User;
channel: BaseGuildTextChannel;
datetime: string;
date: string;
time: string;
}
export function logScheduledMessage(pluginData: GuildPluginData<LogsPluginType>, data: LogScheduledMessageData) {
return log(
pluginData,
LogType.SCHEDULED_MESSAGE,
createTypedTemplateSafeValueContainer({
author: userToTemplateSafeUser(data.author),
channel: channelToTemplateSafeChannel(data.channel),
datetime: data.datetime,
date: data.date,
time: data.time,
}),
{
userId: data.author.id,
bot: data.author.bot,
channel: data.channel.id,
category: data.channel.parentId,
},
);
}

View file

@ -0,0 +1,42 @@
import { GuildPluginData } from "knub";
import { LogsPluginType } from "../types";
import { LogType } from "../../../data/LogType";
import { log } from "../util/log";
import { createTypedTemplateSafeValueContainer } from "../../../templateFormatter";
import { BaseGuildTextChannel, User } from "discord.js";
import { channelToTemplateSafeChannel, userToTemplateSafeUser } from "../../../utils/templateSafeObjects";
interface LogScheduledRepeatedMessageData {
author: User;
channel: BaseGuildTextChannel;
datetime: string;
date: string;
time: string;
repeatInterval: string;
repeatDetails: string;
}
export function logScheduledRepeatedMessage(
pluginData: GuildPluginData<LogsPluginType>,
data: LogScheduledRepeatedMessageData,
) {
return log(
pluginData,
LogType.SCHEDULED_REPEATED_MESSAGE,
createTypedTemplateSafeValueContainer({
author: userToTemplateSafeUser(data.author),
channel: channelToTemplateSafeChannel(data.channel),
datetime: data.datetime,
date: data.date,
time: data.time,
repeatInterval: data.repeatInterval,
repeatDetails: data.repeatDetails,
}),
{
userId: data.author.id,
bot: data.author.bot,
channel: data.channel.id,
category: data.channel.parentId,
},
);
}

View file

@ -0,0 +1,20 @@
import { GuildPluginData } from "knub";
import { LogsPluginType } from "../types";
import { LogType } from "../../../data/LogType";
import { log } from "../util/log";
import { createTypedTemplateSafeValueContainer } from "../../../templateFormatter";
interface LogSetAntiraidAutoData {
level: string;
}
export function logSetAntiraidAuto(pluginData: GuildPluginData<LogsPluginType>, data: LogSetAntiraidAutoData) {
return log(
pluginData,
LogType.SET_ANTIRAID_AUTO,
createTypedTemplateSafeValueContainer({
level: data.level,
}),
{},
);
}

View file

@ -0,0 +1,27 @@
import { GuildPluginData } from "knub";
import { LogsPluginType } from "../types";
import { LogType } from "../../../data/LogType";
import { log } from "../util/log";
import { createTypedTemplateSafeValueContainer } from "../../../templateFormatter";
import { User } from "discord.js";
import { userToTemplateSafeUser } from "../../../utils/templateSafeObjects";
interface LogSetAntiraidUserData {
level: string;
user: User;
}
export function logSetAntiraidUser(pluginData: GuildPluginData<LogsPluginType>, data: LogSetAntiraidUserData) {
return log(
pluginData,
LogType.SET_ANTIRAID_USER,
createTypedTemplateSafeValueContainer({
level: data.level,
user: userToTemplateSafeUser(data.user),
}),
{
userId: data.user.id,
bot: data.user.bot,
},
);
}

View file

@ -0,0 +1,27 @@
import { GuildPluginData } from "knub";
import { LogsPluginType } from "../types";
import { LogType } from "../../../data/LogType";
import { log } from "../util/log";
import { createTypedTemplateSafeValueContainer } from "../../../templateFormatter";
import { StageChannel, StageInstance } from "discord.js";
import { channelToTemplateSafeChannel, stageToTemplateSafeStage } from "../../../utils/templateSafeObjects";
interface LogStageInstanceCreateData {
stageInstance: StageInstance;
stageChannel: StageChannel;
}
export function logStageInstanceCreate(pluginData: GuildPluginData<LogsPluginType>, data: LogStageInstanceCreateData) {
return log(
pluginData,
LogType.STAGE_INSTANCE_CREATE,
createTypedTemplateSafeValueContainer({
stageInstance: stageToTemplateSafeStage(data.stageInstance),
stageChannel: channelToTemplateSafeChannel(data.stageChannel),
}),
{
channel: data.stageInstance.channel!.id,
category: data.stageInstance.channel!.parentId,
},
);
}

View file

@ -0,0 +1,27 @@
import { GuildPluginData } from "knub";
import { LogsPluginType } from "../types";
import { LogType } from "../../../data/LogType";
import { log } from "../util/log";
import { createTypedTemplateSafeValueContainer } from "../../../templateFormatter";
import { StageChannel, StageInstance } from "discord.js";
import { channelToTemplateSafeChannel, stageToTemplateSafeStage } from "../../../utils/templateSafeObjects";
interface LogStageInstanceDeleteData {
stageInstance: StageInstance;
stageChannel: StageChannel;
}
export function logStageInstanceDelete(pluginData: GuildPluginData<LogsPluginType>, data: LogStageInstanceDeleteData) {
return log(
pluginData,
LogType.STAGE_INSTANCE_DELETE,
createTypedTemplateSafeValueContainer({
stageInstance: stageToTemplateSafeStage(data.stageInstance),
stageChannel: channelToTemplateSafeChannel(data.stageChannel),
}),
{
channel: data.stageInstance.channel!.id,
category: data.stageInstance.channel!.parentId,
},
);
}

View file

@ -0,0 +1,31 @@
import { GuildPluginData } from "knub";
import { LogsPluginType } from "../types";
import { LogType } from "../../../data/LogType";
import { log } from "../util/log";
import { createTypedTemplateSafeValueContainer } from "../../../templateFormatter";
import { StageChannel, StageInstance } from "discord.js";
import { channelToTemplateSafeChannel, stageToTemplateSafeStage } from "../../../utils/templateSafeObjects";
interface LogStageInstanceUpdateData {
oldStageInstance: StageInstance;
newStageInstance: StageInstance;
stageChannel: StageChannel;
differenceString: string;
}
export function logStageInstanceUpdate(pluginData: GuildPluginData<LogsPluginType>, data: LogStageInstanceUpdateData) {
return log(
pluginData,
LogType.STAGE_INSTANCE_UPDATE,
createTypedTemplateSafeValueContainer({
oldStageInstance: stageToTemplateSafeStage(data.oldStageInstance),
newStageInstance: stageToTemplateSafeStage(data.newStageInstance),
stageChannel: channelToTemplateSafeChannel(data.stageChannel),
differenceString: data.differenceString,
}),
{
channel: data.newStageInstance.channel!.id,
category: data.newStageInstance.channel!.parentId,
},
);
}

View file

@ -0,0 +1,22 @@
import { GuildPluginData } from "knub";
import { LogsPluginType } from "../types";
import { LogType } from "../../../data/LogType";
import { log } from "../util/log";
import { createTypedTemplateSafeValueContainer } from "../../../templateFormatter";
import { Sticker } from "discord.js";
import { stickerToTemplateSafeSticker } from "../../../utils/templateSafeObjects";
interface LogStickerCreateData {
sticker: Sticker;
}
export function logStickerCreate(pluginData: GuildPluginData<LogsPluginType>, data: LogStickerCreateData) {
return log(
pluginData,
LogType.STICKER_CREATE,
createTypedTemplateSafeValueContainer({
sticker: stickerToTemplateSafeSticker(data.sticker),
}),
{},
);
}

View file

@ -0,0 +1,22 @@
import { GuildPluginData } from "knub";
import { LogsPluginType } from "../types";
import { LogType } from "../../../data/LogType";
import { log } from "../util/log";
import { createTypedTemplateSafeValueContainer } from "../../../templateFormatter";
import { Sticker } from "discord.js";
import { stickerToTemplateSafeSticker } from "../../../utils/templateSafeObjects";
interface LogStickerDeleteData {
sticker: Sticker;
}
export function logStickerDelete(pluginData: GuildPluginData<LogsPluginType>, data: LogStickerDeleteData) {
return log(
pluginData,
LogType.STICKER_DELETE,
createTypedTemplateSafeValueContainer({
sticker: stickerToTemplateSafeSticker(data.sticker),
}),
{},
);
}

View file

@ -0,0 +1,26 @@
import { GuildPluginData } from "knub";
import { LogsPluginType } from "../types";
import { LogType } from "../../../data/LogType";
import { log } from "../util/log";
import { createTypedTemplateSafeValueContainer } from "../../../templateFormatter";
import { Sticker } from "discord.js";
import { stickerToTemplateSafeSticker } from "../../../utils/templateSafeObjects";
interface LogStickerUpdateData {
oldSticker: Sticker;
newSticker: Sticker;
differenceString: string;
}
export function logStickerUpdate(pluginData: GuildPluginData<LogsPluginType>, data: LogStickerUpdateData) {
return log(
pluginData,
LogType.STICKER_UPDATE,
createTypedTemplateSafeValueContainer({
oldSticker: stickerToTemplateSafeSticker(data.oldSticker),
newSticker: stickerToTemplateSafeSticker(data.newSticker),
differenceString: data.differenceString,
}),
{},
);
}

View file

@ -0,0 +1,25 @@
import { GuildPluginData } from "knub";
import { LogsPluginType } from "../types";
import { LogType } from "../../../data/LogType";
import { log } from "../util/log";
import { createTypedTemplateSafeValueContainer } from "../../../templateFormatter";
import { ThreadChannel } from "discord.js";
import { channelToTemplateSafeChannel } from "../../../utils/templateSafeObjects";
interface LogThreadCreateData {
thread: ThreadChannel;
}
export function logThreadCreate(pluginData: GuildPluginData<LogsPluginType>, data: LogThreadCreateData) {
return log(
pluginData,
LogType.THREAD_CREATE,
createTypedTemplateSafeValueContainer({
thread: channelToTemplateSafeChannel(data.thread),
}),
{
channel: data.thread.parentId,
category: data.thread.parent?.parentId,
},
);
}

View file

@ -0,0 +1,25 @@
import { GuildPluginData } from "knub";
import { LogsPluginType } from "../types";
import { LogType } from "../../../data/LogType";
import { log } from "../util/log";
import { createTypedTemplateSafeValueContainer } from "../../../templateFormatter";
import { ThreadChannel } from "discord.js";
import { channelToTemplateSafeChannel } from "../../../utils/templateSafeObjects";
interface LogThreadDeleteData {
thread: ThreadChannel;
}
export function logThreadDelete(pluginData: GuildPluginData<LogsPluginType>, data: LogThreadDeleteData) {
return log(
pluginData,
LogType.THREAD_DELETE,
createTypedTemplateSafeValueContainer({
thread: channelToTemplateSafeChannel(data.thread),
}),
{
channel: data.thread.parentId,
category: data.thread.parent?.parentId,
},
);
}

View file

@ -0,0 +1,29 @@
import { GuildPluginData } from "knub";
import { LogsPluginType } from "../types";
import { LogType } from "../../../data/LogType";
import { log } from "../util/log";
import { createTypedTemplateSafeValueContainer } from "../../../templateFormatter";
import { ThreadChannel } from "discord.js";
import { channelToTemplateSafeChannel } from "../../../utils/templateSafeObjects";
interface LogThreadUpdateData {
oldThread: ThreadChannel;
newThread: ThreadChannel;
differenceString: string;
}
export function logThreadUpdate(pluginData: GuildPluginData<LogsPluginType>, data: LogThreadUpdateData) {
return log(
pluginData,
LogType.THREAD_UPDATE,
createTypedTemplateSafeValueContainer({
oldThread: channelToTemplateSafeChannel(data.oldThread),
newThread: channelToTemplateSafeChannel(data.newThread),
differenceString: data.differenceString,
}),
{
channel: data.newThread.parentId,
category: data.newThread.parent?.parentId,
},
);
}

View file

@ -0,0 +1,39 @@
import { GuildPluginData } from "knub";
import { LogsPluginType } from "../types";
import { LogType } from "../../../data/LogType";
import { log } from "../util/log";
import { createTypedTemplateSafeValueContainer } from "../../../templateFormatter";
import { BaseGuildVoiceChannel, GuildMember, User } from "discord.js";
import {
channelToTemplateSafeChannel,
memberToTemplateSafeMember,
userToTemplateSafeUser,
} from "../../../utils/templateSafeObjects";
interface LogVoiceChannelForceDisconnectData {
mod: User;
member: GuildMember;
oldChannel: BaseGuildVoiceChannel;
}
export function logVoiceChannelForceDisconnect(
pluginData: GuildPluginData<LogsPluginType>,
data: LogVoiceChannelForceDisconnectData,
) {
return log(
pluginData,
LogType.VOICE_CHANNEL_FORCE_DISCONNECT,
createTypedTemplateSafeValueContainer({
mod: userToTemplateSafeUser(data.mod),
member: memberToTemplateSafeMember(data.member),
oldChannel: channelToTemplateSafeChannel(data.oldChannel),
}),
{
userId: data.member.id,
roles: Array.from(data.member.roles.cache.keys()),
channel: data.oldChannel.id,
category: data.oldChannel.parentId,
bot: data.member.user.bot,
},
);
}

View file

@ -0,0 +1,41 @@
import { GuildPluginData } from "knub";
import { LogsPluginType } from "../types";
import { LogType } from "../../../data/LogType";
import { log } from "../util/log";
import { createTypedTemplateSafeValueContainer } from "../../../templateFormatter";
import { BaseGuildVoiceChannel, GuildMember, User } from "discord.js";
import {
channelToTemplateSafeChannel,
memberToTemplateSafeMember,
userToTemplateSafeUser,
} from "../../../utils/templateSafeObjects";
interface LogVoiceChannelForceMoveData {
mod: User;
member: GuildMember;
oldChannel: BaseGuildVoiceChannel;
newChannel: BaseGuildVoiceChannel;
}
export function logVoiceChannelForceMove(
pluginData: GuildPluginData<LogsPluginType>,
data: LogVoiceChannelForceMoveData,
) {
return log(
pluginData,
LogType.VOICE_CHANNEL_FORCE_MOVE,
createTypedTemplateSafeValueContainer({
mod: userToTemplateSafeUser(data.mod),
member: memberToTemplateSafeMember(data.member),
oldChannel: channelToTemplateSafeChannel(data.oldChannel),
newChannel: channelToTemplateSafeChannel(data.newChannel),
}),
{
userId: data.member.id,
roles: Array.from(data.member.roles.cache.keys()),
channel: data.newChannel.id,
category: data.newChannel.parentId,
bot: data.member.user.bot,
},
);
}

View file

@ -0,0 +1,30 @@
import { GuildPluginData } from "knub";
import { LogsPluginType } from "../types";
import { LogType } from "../../../data/LogType";
import { log } from "../util/log";
import { createTypedTemplateSafeValueContainer } from "../../../templateFormatter";
import { BaseGuildVoiceChannel, GuildMember } from "discord.js";
import { channelToTemplateSafeChannel, memberToTemplateSafeMember } from "../../../utils/templateSafeObjects";
interface LogVoiceChannelJoinData {
member: GuildMember;
channel: BaseGuildVoiceChannel;
}
export function logVoiceChannelJoin(pluginData: GuildPluginData<LogsPluginType>, data: LogVoiceChannelJoinData) {
return log(
pluginData,
LogType.VOICE_CHANNEL_JOIN,
createTypedTemplateSafeValueContainer({
member: memberToTemplateSafeMember(data.member),
channel: channelToTemplateSafeChannel(data.channel),
}),
{
userId: data.member.id,
roles: Array.from(data.member.roles.cache.keys()),
channel: data.channel.id,
category: data.channel.parentId,
bot: data.member.user.bot,
},
);
}

View file

@ -0,0 +1,30 @@
import { GuildPluginData } from "knub";
import { LogsPluginType } from "../types";
import { LogType } from "../../../data/LogType";
import { log } from "../util/log";
import { createTypedTemplateSafeValueContainer } from "../../../templateFormatter";
import { BaseGuildVoiceChannel, GuildMember } from "discord.js";
import { channelToTemplateSafeChannel, memberToTemplateSafeMember } from "../../../utils/templateSafeObjects";
interface LogVoiceChannelLeaveData {
member: GuildMember;
channel: BaseGuildVoiceChannel;
}
export function logVoiceChannelLeave(pluginData: GuildPluginData<LogsPluginType>, data: LogVoiceChannelLeaveData) {
return log(
pluginData,
LogType.VOICE_CHANNEL_LEAVE,
createTypedTemplateSafeValueContainer({
member: memberToTemplateSafeMember(data.member),
channel: channelToTemplateSafeChannel(data.channel),
}),
{
userId: data.member.id,
roles: Array.from(data.member.roles.cache.keys()),
channel: data.channel.id,
category: data.channel.parentId,
bot: data.member.user.bot,
},
);
}

View file

@ -0,0 +1,32 @@
import { GuildPluginData } from "knub";
import { LogsPluginType } from "../types";
import { LogType } from "../../../data/LogType";
import { log } from "../util/log";
import { createTypedTemplateSafeValueContainer } from "../../../templateFormatter";
import { BaseGuildVoiceChannel, GuildMember } from "discord.js";
import { channelToTemplateSafeChannel, memberToTemplateSafeMember } from "../../../utils/templateSafeObjects";
interface LogVoiceChannelMoveData {
member: GuildMember;
oldChannel: BaseGuildVoiceChannel;
newChannel: BaseGuildVoiceChannel;
}
export function logVoiceChannelMove(pluginData: GuildPluginData<LogsPluginType>, data: LogVoiceChannelMoveData) {
return log(
pluginData,
LogType.VOICE_CHANNEL_MOVE,
createTypedTemplateSafeValueContainer({
member: memberToTemplateSafeMember(data.member),
oldChannel: channelToTemplateSafeChannel(data.oldChannel),
newChannel: channelToTemplateSafeChannel(data.newChannel),
}),
{
userId: data.member.id,
roles: Array.from(data.member.roles.cache.keys()),
channel: data.newChannel.id,
category: data.newChannel.parentId,
bot: data.member.user.bot,
},
);
}