Skip to content

Commit 6af80c2

Browse files
committed
Use an object for logEvent parameters
1 parent 8a68af8 commit 6af80c2

6 files changed

Lines changed: 162 additions & 112 deletions

File tree

backend/src/plugin/logging/helper/logging.ts

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,18 @@ type EventConfigView<T extends ValuesOf<EventConfigs>> = Parameters<
1111
Exclude<T, false>["render"]
1212
>[0];
1313

14+
export interface LogEventOptions<T extends keyof EventConfigs> {
15+
guild: Guild;
16+
channelID?: string;
17+
key: T;
18+
supply: () => Awaitable<EventConfigView<EventConfigs[T]> | null>;
19+
}
20+
1421
export async function logEvent<T extends keyof EventConfigs>(
1522
ctx: SquirrelDiscordContext,
16-
guild: Guild,
17-
channel: string | null,
18-
key: T,
19-
supply: () => Awaitable<EventConfigView<EventConfigs[T]> | null>,
23+
options: LogEventOptions<T>,
2024
): Promise<void> {
21-
const config = loggingConfigStore.get(guild.id);
25+
const config = loggingConfigStore.get(options.guild.id);
2226

2327
if (config === undefined) {
2428
return;
@@ -29,18 +33,18 @@ export async function logEvent<T extends keyof EventConfigs>(
2933
const tasks: (() => Promise<void>)[] = [];
3034

3135
for (const logger of config.loggers) {
32-
const event = logger.events[key];
36+
const event = logger.events[options.key];
3337

3438
if (!event) {
3539
continue;
3640
}
3741

38-
if (logger.channel === channel) {
42+
if (logger.channel === options.channelID) {
3943
continue;
4044
}
4145

4246
if (view === null) {
43-
view = await supply();
47+
view = await options.supply();
4448

4549
if (view === null) {
4650
return;
@@ -50,7 +54,7 @@ export async function logEvent<T extends keyof EventConfigs>(
5054
tasks.push(async () => {
5155
const channel = await fetchTextableGuildChannelCached(
5256
ctx.bot,
53-
guild,
57+
options.guild,
5458
logger.channel,
5559
);
5660

@@ -61,7 +65,8 @@ export async function logEvent<T extends keyof EventConfigs>(
6165
await logViaWebhook(ctx, channel, {
6266
...event.render(view!),
6367
username: logger.displayName,
64-
avatarURL: logger.avatar ?? guild.clientMember.avatarURL(),
68+
avatarURL:
69+
logger.avatar ?? options.guild.clientMember.avatarURL(),
6570
});
6671
});
6772
}

backend/src/plugin/logging/logger/members.ts

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,13 @@ async function handleAdd(
1414
ctx: SquirrelDiscordContext,
1515
member: Member,
1616
): Promise<void> {
17-
await logEvent(ctx, member.guild, null, "memberJoin", () => ({
18-
user: makeMemberUserView(member),
19-
}));
17+
await logEvent(ctx, {
18+
guild: member.guild,
19+
key: "memberJoin",
20+
supply: () => ({
21+
user: makeMemberUserView(member),
22+
}),
23+
});
2024
}
2125

2226
async function handleRemove(
@@ -34,7 +38,14 @@ async function handleRemove(
3438
return;
3539
}
3640

37-
await logEvent(ctx, guild, null, "memberLeave", () => ({
38-
user: "guildID" in user ? makeMemberUserView(user) : makeUserView(user),
39-
}));
41+
await logEvent(ctx, {
42+
guild,
43+
key: "memberLeave",
44+
supply: () => ({
45+
user:
46+
"guildID" in user
47+
? makeMemberUserView(user)
48+
: makeUserView(user),
49+
}),
50+
});
4051
}

backend/src/plugin/logging/logger/messages.ts

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -91,12 +91,11 @@ async function handleUpdate(
9191
return;
9292
}
9393

94-
await logEvent(
95-
ctx,
96-
message.guild,
97-
message.channelID,
98-
"messageEdit",
99-
async () => {
94+
await logEvent(ctx, {
95+
guild: message.guild,
96+
channel: message.channelID,
97+
key: "messageEdit",
98+
async supply() {
10099
const entry = await getMessageCacheEntry(
101100
ctx.db,
102101
message.guild!.id,
@@ -135,7 +134,7 @@ async function handleUpdate(
135134
newMessage: { content: message.content },
136135
};
137136
},
138-
);
137+
});
139138
}
140139

141140
async function handleDelete(
@@ -146,12 +145,11 @@ async function handleDelete(
146145
return;
147146
}
148147

149-
await logEvent(
150-
ctx,
151-
message.guild,
152-
message.channelID,
153-
"messageDelete",
154-
async () => {
148+
await logEvent(ctx, {
149+
guild: message.guild,
150+
channel: message.channelID,
151+
key: "messageDelete",
152+
async supply() {
155153
const entry = await takeMessageCacheEntry(
156154
ctx.db,
157155
message.guild!.id,
@@ -182,5 +180,5 @@ async function handleDelete(
182180
message: { content: entry.content },
183181
};
184182
},
185-
);
183+
});
186184
}

backend/src/plugin/logging/logger/modEvents.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,5 +33,9 @@ async function handleModAction(
3333
return;
3434
}
3535

36-
await logEvent(ctx, event.guild, null, key, () => makeModEventView(event));
36+
await logEvent(ctx, {
37+
guild: event.guild,
38+
key,
39+
supply: () => makeModEventView(event),
40+
});
3741
}

backend/src/plugin/logging/logger/roles.ts

Lines changed: 80 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -54,20 +54,28 @@ async function handleCreate(
5454
return;
5555
}
5656

57-
await logEvent(ctx, guild, null, "roleCreate", async () => {
58-
const changes = parseRoleUpdates(entry.changes ?? []);
59-
const actor = await fetchMemberCached(ctx.bot, guild, entry.userID!);
60-
61-
return {
62-
actor: makeMemberUserView(actor),
63-
role: makeRoleView({
64-
id: entry.targetID!,
65-
name: changes.name!.new!,
66-
color: changes.color?.new,
67-
hoist: changes.hoist?.new,
68-
mentionable: changes.mentionable?.new,
69-
}),
70-
};
57+
await logEvent(ctx, {
58+
guild,
59+
key: "roleCreate",
60+
async supply() {
61+
const changes = parseRoleUpdates(entry.changes ?? []);
62+
const actor = await fetchMemberCached(
63+
ctx.bot,
64+
guild,
65+
entry.userID!,
66+
);
67+
68+
return {
69+
actor: makeMemberUserView(actor),
70+
role: makeRoleView({
71+
id: entry.targetID!,
72+
name: changes.name!.new!,
73+
color: changes.color?.new,
74+
hoist: changes.hoist?.new,
75+
mentionable: changes.mentionable?.new,
76+
}),
77+
};
78+
},
7179
});
7280
}
7381

@@ -84,38 +92,46 @@ async function handleUpdate(
8492
return;
8593
}
8694

87-
await logEvent(ctx, guild, null, "roleUpdate", async () => {
88-
const changes = parseRoleUpdates(entry.changes ?? []);
89-
const name =
90-
changes.name?.new ?? guild.roles.get(entry.targetID!)?.name;
91-
92-
if (name === undefined) {
93-
return null;
94-
}
95-
96-
const actor = await fetchMemberCached(ctx.bot, guild, entry.userID!);
97-
98-
return {
99-
actor: makeMemberUserView(actor),
100-
nameChanged: changes.name?.new !== undefined,
101-
colorChanged: changes.color?.new !== undefined,
102-
hoistedChanged: changes.hoist?.new !== undefined,
103-
mentionableChanged: changes.mentionable?.new !== undefined,
104-
oldRole: makeRoleView({
105-
id: entry.targetID!,
106-
name: changes.name?.old,
107-
color: changes.color?.old,
108-
hoist: changes.hoist?.old,
109-
mentionable: changes.mentionable?.old,
110-
}),
111-
newRole: makeRoleView({
112-
id: entry.targetID!,
113-
name: changes.name!.new!,
114-
color: changes.color?.new,
115-
hoist: changes.hoist?.new,
116-
mentionable: changes.mentionable?.new,
117-
}),
118-
};
95+
await logEvent(ctx, {
96+
guild,
97+
key: "roleUpdate",
98+
async supply() {
99+
const changes = parseRoleUpdates(entry.changes ?? []);
100+
const name =
101+
changes.name?.new ?? guild.roles.get(entry.targetID!)?.name;
102+
103+
if (name === undefined) {
104+
return null;
105+
}
106+
107+
const actor = await fetchMemberCached(
108+
ctx.bot,
109+
guild,
110+
entry.userID!,
111+
);
112+
113+
return {
114+
actor: makeMemberUserView(actor),
115+
nameChanged: changes.name?.new !== undefined,
116+
colorChanged: changes.color?.new !== undefined,
117+
hoistedChanged: changes.hoist?.new !== undefined,
118+
mentionableChanged: changes.mentionable?.new !== undefined,
119+
oldRole: makeRoleView({
120+
id: entry.targetID!,
121+
name: changes.name?.old,
122+
color: changes.color?.old,
123+
hoist: changes.hoist?.old,
124+
mentionable: changes.mentionable?.old,
125+
}),
126+
newRole: makeRoleView({
127+
id: entry.targetID!,
128+
name: changes.name!.new!,
129+
color: changes.color?.new,
130+
hoist: changes.hoist?.new,
131+
mentionable: changes.mentionable?.new,
132+
}),
133+
};
134+
},
119135
});
120136
}
121137

@@ -132,19 +148,23 @@ async function handleDelete(
132148
return;
133149
}
134150

135-
await logEvent(ctx, guild, null, "roleDelete", async () => {
136-
const changes = parseRoleUpdates(entry.changes ?? []);
137-
const actor = await fetchUserCached(ctx.bot, entry.userID!);
138-
139-
return {
140-
moderator: makeUserView(actor),
141-
role: makeRoleView({
142-
id: entry.targetID!,
143-
name: changes.name!.new!,
144-
color: changes.color?.new,
145-
hoist: changes.hoist?.new,
146-
mentionable: changes.mentionable?.new,
147-
}),
148-
};
151+
await logEvent(ctx, {
152+
guild,
153+
key: "roleDelete",
154+
async supply() {
155+
const changes = parseRoleUpdates(entry.changes ?? []);
156+
const actor = await fetchUserCached(ctx.bot, entry.userID!);
157+
158+
return {
159+
moderator: makeUserView(actor),
160+
role: makeRoleView({
161+
id: entry.targetID!,
162+
name: changes.name!.new!,
163+
color: changes.color?.new,
164+
hoist: changes.hoist?.new,
165+
mentionable: changes.mentionable?.new,
166+
}),
167+
};
168+
},
149169
});
150170
}

backend/src/plugin/logging/logger/tags.ts

Lines changed: 33 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,16 @@ async function handleCreate(
2222
actor: Member,
2323
tag: Tag,
2424
): Promise<void> {
25-
await logEvent(ctx, guild, null, "tagCreate", () => {
26-
return {
27-
guild: makeGuildView(guild),
28-
actor: makeMemberUserView(actor),
29-
tag,
30-
};
25+
await logEvent(ctx, {
26+
guild,
27+
key: "tagCreate",
28+
supply() {
29+
return {
30+
guild: makeGuildView(guild),
31+
actor: makeMemberUserView(actor),
32+
tag,
33+
};
34+
},
3135
});
3236
}
3337

@@ -45,15 +49,19 @@ async function handleEdit(
4549
return;
4650
}
4751

48-
await logEvent(ctx, guild, null, "tagEdit", () => {
49-
return {
50-
guild: makeGuildView(guild),
51-
actor: makeMemberUserView(actor),
52-
oldTag: oldTag,
53-
newTag: newTag,
54-
nameChanged: nameChanged,
55-
contentChanged: contentChanged,
56-
};
52+
await logEvent(ctx, {
53+
guild,
54+
key: "tagEdit",
55+
supply() {
56+
return {
57+
guild: makeGuildView(guild),
58+
actor: makeMemberUserView(actor),
59+
oldTag: oldTag,
60+
newTag: newTag,
61+
nameChanged: nameChanged,
62+
contentChanged: contentChanged,
63+
};
64+
},
5765
});
5866
}
5967

@@ -63,11 +71,15 @@ async function handleDelete(
6371
actor: Member,
6472
tag: Tag,
6573
): Promise<void> {
66-
await logEvent(ctx, guild, null, "tagDelete", () => {
67-
return {
68-
guild: makeGuildView(guild),
69-
actor: makeMemberUserView(actor),
70-
tag,
71-
};
74+
await logEvent(ctx, {
75+
guild,
76+
key: "tagDelete",
77+
supply() {
78+
return {
79+
guild: makeGuildView(guild),
80+
actor: makeMemberUserView(actor),
81+
tag,
82+
};
83+
},
7284
});
7385
}

0 commit comments

Comments
 (0)