(client, guild, member, verificationConfig)
| 177 | } |
| 178 | |
| 179 | export async function autoVerifyOnJoin(client, guild, member, verificationConfig) { |
| 180 | try { |
| 181 | |
| 182 | if (!verificationConfig.autoVerify?.enabled) { |
| 183 | return { |
| 184 | autoVerified: false, |
| 185 | reason: 'auto_verify_disabled' |
| 186 | }; |
| 187 | } |
| 188 | |
| 189 | const autoVerifyRoleId = verificationConfig.autoVerify?.roleId || verificationConfig.roleId; |
| 190 | if (!autoVerifyRoleId) { |
| 191 | return { |
| 192 | autoVerified: false, |
| 193 | reason: 'auto_verify_role_not_configured' |
| 194 | }; |
| 195 | } |
| 196 | |
| 197 | const effectiveVerificationConfig = { |
| 198 | ...verificationConfig, |
| 199 | roleId: autoVerifyRoleId |
| 200 | }; |
| 201 | |
| 202 | await validateVerificationSetup(guild, effectiveVerificationConfig); |
| 203 | |
| 204 | const shouldVerify = evaluateAutoVerifyCriteria( |
| 205 | member, |
| 206 | verificationConfig.autoVerify |
| 207 | ); |
| 208 | |
| 209 | if (!shouldVerify) { |
| 210 | return { |
| 211 | autoVerified: false, |
| 212 | reason: 'criteria_not_met', |
| 213 | criteria: verificationConfig.autoVerify.criteria |
| 214 | }; |
| 215 | } |
| 216 | |
| 217 | const verifiedRole = guild.roles.cache.get(autoVerifyRoleId); |
| 218 | |
| 219 | const canAssign = await validateBotCanAssignRole(guild, verifiedRole.id); |
| 220 | if (!canAssign) { |
| 221 | logger.warn('Cannot auto-verify: bot cannot assign role', { |
| 222 | guildId: guild.id, |
| 223 | userId: member.id, |
| 224 | roleId: verifiedRole.id |
| 225 | }); |
| 226 | return { |
| 227 | autoVerified: false, |
| 228 | reason: 'bot_cannot_assign_role' |
| 229 | }; |
| 230 | } |
| 231 | |
| 232 | if (member.roles.cache.has(verifiedRole.id)) { |
| 233 | return { |
| 234 | autoVerified: false, |
| 235 | reason: 'already_verified', |
| 236 | alreadyHasRole: true |
no test coverage detected