diff --git a/fluxer_app/src/features/channel/components/VerificationBarrier.tsx b/fluxer_app/src/features/channel/components/VerificationBarrier.tsx
index ce92bfaa9..e305a52e9 100644
--- a/fluxer_app/src/features/channel/components/VerificationBarrier.tsx
+++ b/fluxer_app/src/features/channel/components/VerificationBarrier.tsx
@@ -32,14 +32,18 @@ export const VerificationBarrier = observer(({channel}: Props) => {
case VerificationFailureReason.ACCOUNT_TOO_NEW:
return (
);
case VerificationFailureReason.NOT_MEMBER_LONG_ENOUGH:
return (
);
@@ -50,7 +54,9 @@ export const VerificationBarrier = observer(({channel}: Props) => {
case VerificationFailureReason.TIMED_OUT:
return (
);
diff --git a/fluxer_app/src/features/guild/state/GuildVerification.ts b/fluxer_app/src/features/guild/state/GuildVerification.ts
index ff7f66410..534e82c70 100644
--- a/fluxer_app/src/features/guild/state/GuildVerification.ts
+++ b/fluxer_app/src/features/guild/state/GuildVerification.ts
@@ -30,7 +30,7 @@ export type VerificationFailureReason = ValueOf 0) {
+ const delay = status.verificationEndsAt ? status.verificationEndsAt - Date.now() : undefined;
+ if (!status.canAccess && delay && delay > 0) {
newTimers[guild.id] = setTimeout(() => {
this.recomputeGuild(guild.id);
- }, status.timeRemaining);
+ }, delay);
}
}
this.verificationStatus = Object.freeze(newVerificationStatus);
@@ -106,10 +107,11 @@ class GuildVerification {
}
const newTimers = {...this.timers};
delete newTimers[guildId];
- if (!status.canAccess && status.timeRemaining && status.timeRemaining > 0) {
+ const delay = status.verificationEndsAt ? status.verificationEndsAt - Date.now() : undefined;
+ if (!status.canAccess && delay && delay > 0) {
newTimers[guildId] = setTimeout(() => {
this.recomputeGuild(guildId);
- }, status.timeRemaining);
+ }, delay);
}
this.verificationStatus = Object.freeze(newVerificationStatus);
this.timers = newTimers;
@@ -124,12 +126,11 @@ class GuildVerification {
const now = Date.now();
if (member?.communicationDisabledUntil) {
const timeoutUntil = member.communicationDisabledUntil;
- const timeRemaining = timeoutUntil.getTime() - now;
- if (timeRemaining > 0) {
+ if (timeoutUntil.getTime() > now) {
return {
canAccess: false,
reason: VerificationFailureReason.TIMED_OUT,
- timeRemaining,
+ verificationEndsAt: timeoutUntil.getTime(),
};
}
}
@@ -164,18 +165,16 @@ class GuildVerification {
}
}
if (verificationLevel >= GuildVerificationLevel.MEDIUM) {
- const accountAge = Date.now() - user.createdAt.getTime();
- if (accountAge < FIVE_MINUTES_MS) {
- const timeRemaining = FIVE_MINUTES_MS - accountAge;
- return {canAccess: false, reason: VerificationFailureReason.ACCOUNT_TOO_NEW, timeRemaining};
+ const verificationEndsAt = user.createdAt.getTime() + FIVE_MINUTES_MS;
+ if (verificationEndsAt > now) {
+ return {canAccess: false, reason: VerificationFailureReason.ACCOUNT_TOO_NEW, verificationEndsAt};
}
}
if (verificationLevel >= GuildVerificationLevel.HIGH) {
if (member?.joinedAt) {
- const membershipDuration = Date.now() - member.joinedAt.getTime();
- if (membershipDuration < TEN_MINUTES_MS) {
- const timeRemaining = TEN_MINUTES_MS - membershipDuration;
- return {canAccess: false, reason: VerificationFailureReason.NOT_MEMBER_LONG_ENOUGH, timeRemaining};
+ const verificationEndsAt = member.joinedAt.getTime() + TEN_MINUTES_MS;
+ if (verificationEndsAt > now) {
+ return {canAccess: false, reason: VerificationFailureReason.NOT_MEMBER_LONG_ENOUGH, verificationEndsAt};
}
}
}
@@ -196,7 +195,8 @@ class GuildVerification {
}
getTimeRemaining(guildId: string): number | null {
- return this.verificationStatus[guildId]?.timeRemaining ?? null;
+ const verificationEndsAt = this.verificationStatus[guildId]?.verificationEndsAt;
+ return verificationEndsAt ? Math.max(0, verificationEndsAt - Date.now()) : null;
}
}