@@ -138,22 +138,26 @@ export const createCoffeeChatCron = (client: Client): CronJob =>
138
138
export const assignCodeyRoleForLeaderboard = ( client : Client ) : CronJob =>
139
139
new CronJob ( '0 0 0 */1 * *' , async function ( ) {
140
140
const leaderboard = await getCoinLeaderboard ( NUMBER_USERS_TO_ASSIGN_ROLE ) ;
141
+ const leaderboardIds : Set < string > = new Set ( leaderboard . map ( ( entry ) => entry . user_id ) ) ;
141
142
const guild = client . guilds . resolve ( TARGET_GUILD_ID ) ;
142
143
if ( ! guild ) {
143
144
throw new CodeyUserError ( undefined , 'guild not found' ) ;
144
145
}
145
146
const members = await guild . members . fetch ( ) ;
146
147
// Removing role from previous members
147
148
const guildMembersPreviousRole = await loadRoleMembers ( CODEY_COIN_ROLE_ID ) ;
149
+ const previousIds : Set < string > = new Set ( guildMembersPreviousRole . map ( ( member ) => member . id ) ) ;
150
+ const roleName : string = await getRoleName ( CODEY_COIN_ROLE_ID ) ;
151
+
148
152
guildMembersPreviousRole . forEach ( async ( member ) => {
149
- if ( member ) {
150
- await updateMemberRole ( member , await getRoleName ( CODEY_COIN_ROLE_ID ) , false ) ;
153
+ if ( member && ! leaderboardIds . has ( member . id ) ) {
154
+ await updateMemberRole ( member , roleName , false ) ;
151
155
}
152
156
} ) ;
153
- leaderboard . forEach ( async ( lbUserCoinEntry ) => {
154
- const memberToUpdate = members . get ( lbUserCoinEntry . user_id ) ;
155
- if ( memberToUpdate ) {
156
- await updateMemberRole ( memberToUpdate , await getRoleName ( CODEY_COIN_ROLE_ID ) , true ) ;
157
+ leaderboardIds . forEach ( async ( user_id ) => {
158
+ const memberToUpdate = members . get ( user_id ) ;
159
+ if ( memberToUpdate && ! previousIds . has ( user_id ) ) {
160
+ await updateMemberRole ( memberToUpdate , roleName , true ) ;
157
161
}
158
162
} ) ;
159
163
} ) ;
0 commit comments