@@ -11,6 +11,7 @@ import {
1111 removeAllLevelRoles ,
1212} from "../services/roleService.js" ;
1313import { logger } from "../libs/logger.js" ;
14+ import { prisma } from "../libs/database.js" ;
1415
1516export default {
1617 name : Events . GuildMemberUpdate ,
@@ -19,10 +20,9 @@ export default {
1920 if ( oldMember . partial ) oldMember = await oldMember . fetch ( ) ;
2021 if ( newMember . partial ) newMember = await newMember . fetch ( ) ;
2122 } catch ( error ) {
22- logger . error (
23- `Failed to fetch partials for user ${ oldMember . user . username } ` ,
24- ) ;
23+ logger . error ( `Failed to fetch partials for user ${ oldMember . user . username } ` ) ;
2524 }
25+
2626 const wasBoostingBefore = oldMember . premiumSince !== null ;
2727 const isBoostingNow = newMember . premiumSince !== null ;
2828
@@ -34,104 +34,113 @@ export default {
3434 } ,
3535} ;
3636
37+ async function getGuildSettings ( guildId : string ) {
38+ return prisma . guildSetting . findUnique ( { where : { gid : guildId } } ) ;
39+ }
40+
3741async function onBoostStart ( member : GuildMember ) : Promise < void > {
3842 const guild = member . guild ;
3943
44+ const settings = await getGuildSettings ( guild . id ) ;
45+ if ( ! settings ) {
46+ logger . error ( `No guild settings found for guild ${ guild . id } — run /setup first.` ) ;
47+ return ;
48+ }
49+
4050 const record = await registerBoost (
4151 member . id ,
4252 guild . id ,
4353 guild . name ,
4454 guild . iconURL ( ) ,
4555 ) ;
46-
4756 if ( ! record ) return ;
4857
4958 await clearPendingCustomRoleDeletion ( record . id ) ;
5059 await assignLevelRoles ( member , record . boostCounts ?? 1 ) ;
5160
52- const greetChannel = guild . channels . cache . get ( process . env . GREET_CHANNEL_ID ) as
53- | TextChannel
54- | undefined ;
61+ const greetChannel = guild . channels . cache . get ( settings . greetChannelId ) as TextChannel | undefined ;
5562 if ( greetChannel ) {
5663 const embed = new EmbedBuilder ( )
5764 . setColor ( 0xf47fff )
5865 . setTitle ( "New Server Boost! 🎉" )
5966 . setDescription ( `${ member } has boosted the server!` )
6067 . addFields (
61- {
62- name : "Total Boosts" ,
63- value : String ( record . boostCounts ?? 1 ) ,
64- inline : true ,
68+ {
69+ name : "Total Boosts" ,
70+ value : String ( record . boostCounts ?? 1 ) ,
71+ inline : true
72+ } ,
73+ { name : "Member" ,
74+ value : member . user . tag ,
75+ inline : true
6576 } ,
66- { name : "Member" , value : member . user . tag , inline : true } ,
6777 )
78+ . setThumbnail ( member . displayAvatarURL ( { size : 512 } ) )
6879 . setTimestamp ( ) ;
69-
7080 await greetChannel . send ( { embeds : [ embed ] } ) ;
7181 }
7282
73- const logChannel = guild . channels . cache . get ( process . env . GREET_CHANNEL_ID ) as
74- | TextChannel
75- | undefined ;
83+ const logChannel = guild . channels . cache . get ( settings . logChannelId ) as TextChannel | undefined ;
7684 if ( logChannel ) {
7785 const logEmbed = new EmbedBuilder ( )
7886 . setColor ( 0x57f287 )
7987 . setTitle ( "Boost Started" )
8088 . addFields (
81- {
82- name : "User" ,
83- value : `${ member . user . tag } (${ member . id } )` ,
84- inline : false ,
89+ {
90+ name : "User" ,
91+ value : `${ member . user . tag } (${ member . id } )` ,
92+ inline : false
8593 } ,
86- {
87- name : "Total Boost Count" ,
88- value : String ( record . boostCounts ?? 1 ) ,
89- inline : true ,
94+ {
95+ name : "Total Boost Count" ,
96+ value : String ( record . boostCounts ?? 1 ) ,
97+ inline : true
9098 } ,
9199 )
100+ . setThumbnail ( member . displayAvatarURL ( { size : 512 } ) )
92101 . setTimestamp ( ) ;
93-
94102 await logChannel . send ( { embeds : [ logEmbed ] } ) ;
95103 }
96104
97105 try {
98- await member . send (
99- `Thank you for boosting the server! You now have access to booster perks.` ,
100- ) ;
101- } catch {
102- }
106+ await member . send ( `Thank you for boosting the server! You now have access to booster perks.` ) ;
107+ } catch { }
103108}
104109
105110async function onBoostEnd ( member : GuildMember ) : Promise < void > {
106111 const guild = member . guild ;
107112
113+ const settings = await getGuildSettings ( guild . id ) ;
114+ if ( ! settings ) {
115+ logger . error ( `No guild settings found for guild ${ guild . id } — run /setup first.` ) ;
116+ return ;
117+ }
118+
108119 const result = await removeBoost ( member . id , guild . id ) ;
109120 if ( ! result ) return ;
110121
111122 await removeAllLevelRoles ( member ) ;
112123 await scheduleCustomRoleDeletionAfterGrace ( member . id , guild . id ) ;
113124
114- const logChannel = guild . channels . cache . get ( process . env . LOG_CHANNEL_ID ) as
115- | TextChannel
116- | undefined ;
125+ const logChannel = guild . channels . cache . get ( settings . logChannelId ) as TextChannel | undefined ;
117126 if ( logChannel ) {
118127 const logEmbed = new EmbedBuilder ( )
119128 . setColor ( 0xed4245 )
120129 . setTitle ( "Boost Ended" )
121130 . addFields (
122- {
123- name : "User" ,
124- value : `${ member . user . tag } (${ member . id } )` ,
125- inline : false ,
131+ {
132+ name : "User" ,
133+ value : `${ member . user . tag } (${ member . id } )` ,
134+ inline : false
126135 } ,
127- {
128- name : "Historical Boost Count" ,
129- value : String ( result . boostCounts ?? 0 ) ,
130- inline : true ,
136+ {
137+ name : "Historical Boost Count" ,
138+ value : String ( result . boostCounts ?? 0 ) ,
139+ inline : true
131140 } ,
132141 )
142+ . setThumbnail ( member . displayAvatarURL ( { size : 512 } ) )
133143 . setTimestamp ( ) ;
134-
135144 await logChannel . send ( { embeds : [ logEmbed ] } ) ;
136145 }
137- }
146+ }
0 commit comments