Skip to content

Commit ad50f55

Browse files
committed
Remove created array during honeypot check
I spotted some increased CPU usage that was introduced around when this merged, bit of a shot in the dark here.
1 parent ba65bba commit ad50f55

File tree

1 file changed

+63
-60
lines changed

1 file changed

+63
-60
lines changed

app/discord/honeypotTracker.ts

Lines changed: 63 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ export async function startHoneypotTracking(client: Client) {
3737
throw Error("Missing guild info when tracking honeypot messages");
3838
}
3939
let config: HoneypotConfig[];
40+
const { guild } = msg;
4041
const cacheEntry = configCache[msg.guildId];
4142
if (!cacheEntry || cacheEntry.cachedAt + CACHE_TTL_IN_MS < Date.now()) {
4243
config = await db
@@ -55,69 +56,71 @@ export async function startHoneypotTracking(client: Client) {
5556
config = cacheEntry.config;
5657
}
5758

58-
const channelIds = config.map((entry) => entry.channel_id);
59-
if (channelIds.includes(msg.channelId)) {
60-
const [member, message] = await Promise.all([
61-
msg.guild.members.fetch(msg.author.id).catch((_) => undefined),
62-
msg.fetch().catch((_) => undefined),
63-
]);
64-
if (!member || !message) {
65-
log(
66-
"debug",
67-
"HoneypotTracker",
68-
"unable to resolve member or message for honeypot",
69-
);
70-
throw Error("unable to resolve member or message for honeypot");
71-
}
72-
// Get moderator role for permission check
73-
const { moderator: modRoleId } = await fetchSettings(msg.guildId, [
74-
SETTINGS.moderator,
75-
]);
76-
if (
77-
(Array.isArray(member.roles)
78-
? member.roles.includes(modRoleId)
79-
: member.roles.cache.has(modRoleId)) ||
80-
member.permissions.has("Administrator")
81-
) {
82-
log(
83-
"debug",
84-
"HoneypotTracker",
85-
"Mod posted in Honeypot channel, no action taken",
86-
);
87-
return;
88-
}
89-
try {
90-
// softban user (ban/unban) to clear all recent messages
91-
await member.ban({
92-
reason: "honeypot spam detected",
93-
deleteMessageSeconds: 604800, // 7 days
94-
});
95-
await msg.guild.members.unban(member);
96-
// log action
97-
await reportUser({
98-
reason: ReportReasons.spam,
99-
message: message,
100-
staff: client.user ?? false,
101-
});
102-
} catch (e) {
103-
log(
104-
"error",
105-
"HoneypotTracker",
106-
"Failed to softban user in honeypot channel",
107-
{
108-
guildId: msg.guildId,
109-
userId: member.id,
110-
channelId: msg.channelId,
111-
error: e instanceof Error ? e.message : String(e),
112-
},
113-
);
114-
await reportUser({
59+
if (!config.some((c) => c.channel_id === msg.channelId)) {
60+
return;
61+
}
62+
const [member, message] = await Promise.all([
63+
guild.members.fetch(msg.author.id).catch((_) => undefined),
64+
msg.fetch().catch((_) => undefined),
65+
]);
66+
if (!member || !message) {
67+
log(
68+
"debug",
69+
"HoneypotTracker",
70+
"unable to resolve member or message for honeypot",
71+
);
72+
throw Error("unable to resolve member or message for honeypot");
73+
}
74+
// Get moderator role for permission check
75+
const { moderator: modRoleId } = await fetchSettings(msg.guildId, [
76+
SETTINGS.moderator,
77+
]);
78+
if (
79+
(Array.isArray(member.roles)
80+
? member.roles.includes(modRoleId)
81+
: member.roles.cache.has(modRoleId)) ||
82+
member.permissions.has("Administrator")
83+
) {
84+
log(
85+
"debug",
86+
"HoneypotTracker",
87+
"Mod posted in Honeypot channel, no action taken",
88+
);
89+
return;
90+
}
91+
try {
92+
// softban user (ban/unban) to clear all recent messages
93+
await Promise.all([
94+
member
95+
.ban({
96+
reason: "honeypot spam detected",
97+
deleteMessageSeconds: 604800, // 7 days
98+
})
99+
.then(() => guild.members.unban(member)),
100+
reportUser({
115101
reason: ReportReasons.spam,
116102
message: message,
117103
staff: client.user ?? false,
118-
extra: `Failed to softban user in honeypot channel: ${e instanceof Error ? e.message : String(e)}`,
119-
});
120-
}
104+
}),
105+
]);
106+
} catch (e) {
107+
log(
108+
"error",
109+
"HoneypotTracker",
110+
"Failed to softban user in honeypot channel",
111+
{
112+
guildId: msg.guildId,
113+
userId: member.id,
114+
channelId: msg.channelId,
115+
error: e,
116+
},
117+
);
118+
await reportUser({
119+
reason: ReportReasons.spam,
120+
message: message,
121+
staff: client.user ?? false,
122+
extra: `Failed to softban user in honeypot channel: ${e instanceof Error ? e.message : String(e)}`,
123+
});
121124
}
122125
});
123126
}

0 commit comments

Comments
 (0)