@@ -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