@@ -27,60 +27,72 @@ module.exports = {
27
27
28
28
setupMilestone : {
29
29
execute : async ( interaction ) => {
30
- // Check for Manage Roles permission
31
- if ( ! interaction . member . permissions . has ( PermissionsBitField . Flags . ManageRoles ) ) {
32
- return interaction . reply ( { content : 'You do not have permission to manage roles.' , ephemeral : true } ) ;
33
- }
34
-
35
- // Get input options
36
- const level = interaction . options . getInteger ( 'level' ) ;
37
- const role = interaction . options . getRole ( 'role' ) ;
38
- const guildId = interaction . guild . id ;
39
- const members = await interaction . guild . members . fetch ( ) ;
40
-
41
- for ( const member of members . values ( ) ) {
42
- // Fetch user data for each member
43
- let userData = await getUserData ( guildId , member . id ) ;
44
-
45
- if ( userData ) {
46
- const userLevel = userData . level ; // Retrieve the member's level from your leveling system
47
- await giveRoleToUserIfNoneArrange ( member , interaction . guild . id , userLevel ) ;
48
- }
49
- }
50
-
51
30
try {
31
+ // Check for Manage Roles permission
32
+ if ( ! interaction . member . permissions . has ( PermissionsBitField . Flags . ManageRoles ) ) {
33
+ return interaction . reply ( { content : 'You do not have permission to manage roles.' , ephemeral : true } ) ;
34
+ }
35
+
36
+ // Get input options
37
+ const level = interaction . options . getInteger ( 'level' ) ;
38
+ const role = interaction . options . getRole ( 'role' ) ;
39
+ const guildId = interaction . guild . id ;
40
+ console . log ( `Setting up milestone for guild ${ guildId } , level ${ level } , role ${ role . id } ` ) ;
41
+
42
+ // Fetch all members in the guild
43
+ const members = await interaction . guild . members . fetch ( ) ;
44
+ for ( const member of members . values ( ) ) {
45
+ // Fetch user data for each member
46
+ let userData = await getUserData ( guildId , member . id ) ;
47
+
48
+ if ( userData ) {
49
+ const userLevel = userData . level ; // Retrieve the member's level from your leveling system
50
+ await giveRoleToUserIfNoneArrange ( member , interaction . guild . id , userLevel ) ;
51
+ }
52
+ }
53
+
52
54
// Check if a milestone for this level already exists in the database
53
- const existingMilestone = await MilestoneLevel . findAll ( {
55
+ console . log ( 'Checking if milestone already exists...' ) ;
56
+ const existingMilestone = await MilestoneLevel . findOne ( {
54
57
where : {
55
58
guildId,
56
59
level,
57
- reward : role . id
58
60
}
59
61
} ) ;
60
-
61
- if ( existingMilestone ) { return interaction . reply ( { content : `A milestone for level ${ level } already exists.` , ephemeral : true } ) ; }
62
-
62
+
63
+ if ( existingMilestone ) {
64
+ console . log ( 'Milestone already exists for this level.' ) ;
65
+ return interaction . reply ( { content : `A milestone for level ${ level } already exists.` , ephemeral : true } ) ;
66
+ }
67
+
63
68
// Save milestone level to the database
69
+ console . log ( 'Creating new milestone...' ) ;
64
70
await MilestoneLevel . create ( {
65
71
guildId,
66
72
level,
67
73
reward : role . id
68
74
} ) ;
69
-
75
+
76
+ // Create and send the embed
77
+ console . log ( 'Milestone successfully created, preparing embed...' ) ;
70
78
const embed = new EmbedBuilder ( )
71
79
. setColor ( 0x008080 )
72
80
. setTitle ( 'Milestone Set' )
73
81
. setDescription ( `Milestone has been set!` )
74
82
. addFields (
75
- { name : 'Level' , value : level } ,
83
+ { name : 'Level' , value : level . toString ( ) } ,
76
84
{ name : 'Reward Role' , value : `<@&${ role . id } >` }
77
85
)
78
86
. setTimestamp ( ) ;
79
87
80
- return interaction . reply ( { embeds : embed } ) ;
81
- } catch ( error ) { return interaction . reply ( { content : 'An error occurred while setting the milestone. Please try again later.' , ephemeral : true } ) ; }
88
+ return interaction . reply ( { embeds : [ embed ] } ) ;
89
+ } catch ( error ) {
90
+ // Log the full error for debugging
91
+ console . error ( 'Error in setupMilestone:' , error ) ;
92
+ return interaction . reply ( { content : 'An error occurred while setting the milestone. Please try again later.' , ephemeral : true } ) ;
93
+ }
82
94
}
83
- } ,
95
+ } ,
84
96
85
97
// Remove Milestone level
86
98
removeMilestone : {
@@ -117,7 +129,51 @@ module.exports = {
117
129
return interaction . reply ( { embeds : embed } ) ;
118
130
} catch ( error ) { return interaction . reply ( { content : 'An error occurred while removing the milestone. Please try again later.' , ephemeral : true } ) ; }
119
131
}
120
- }
132
+ } ,
121
133
134
+ viewMilestones : {
135
+ execute : async ( interaction ) => {
136
+ try {
137
+ // Get guildId from the interaction
138
+ const guildId = interaction . guild . id ;
139
+
140
+ // Fetch all milestones for the server
141
+ const milestones = await MilestoneLevel . findAll ( {
142
+ where : {
143
+ guildId : guildId
144
+ } ,
145
+ order : [ [ 'level' , 'ASC' ] ] // Order by level ascending
146
+ } ) ;
147
+
148
+ // Check if there are any milestones set for the server
149
+ if ( milestones . length === 0 ) {
150
+ return interaction . reply ( { content : 'No milestone levels have been set for this server.' , ephemeral : true } ) ;
151
+ }
152
+
153
+ // Create a list of milestone levels and their corresponding roles
154
+ const milestoneFields = milestones . map ( ( milestone , index ) => ( {
155
+ name : `Milestone ${ index + 1 } ` ,
156
+ value : `**Level**: ${ milestone . level } \n**Role**: <@&${ milestone . reward } >` ,
157
+ inline : true
158
+ } ) ) ;
159
+
160
+ // Create an embed to display the milestones
161
+ const milestoneEmbed = new EmbedBuilder ( )
162
+ . setColor ( 0x008080 ) // Set your preferred color
163
+ . setTitle ( 'Server Milestone Levels' )
164
+ . setDescription ( 'Here are all the milestone levels set for this server:' )
165
+ . addFields ( milestoneFields )
166
+ . setFooter ( { text : `Requested by ${ interaction . user . tag } ` } )
167
+ . setTimestamp ( ) ;
168
+
169
+ // Send the embed with milestone details
170
+ return interaction . reply ( { embeds : [ milestoneEmbed ] } ) ;
171
+ } catch ( error ) {
172
+ console . error ( 'Failed to fetch milestone levels:' , error ) ;
173
+ return interaction . reply ( { content : 'An error occurred while fetching milestone levels. Please try again later.' , ephemeral : true } ) ;
174
+ }
175
+ }
176
+ }
177
+
122
178
// //
123
179
}
0 commit comments