# frozen_string_literal: true module User::BanMethods def permanently_banned? bans.current.first&.permanent? || false end def banned? Rails.cache.fetch("#{cache_key}/banned", expires_in: 6.hours) do bans.current.count.positive? end end def unban bans.current.update( # -1s to account for flakyness with timings in tests expires_at: DateTime.now.utc - 1.second, ) Rails.cache.delete("#{cache_key}/banned") end # Bans a user. # @param expiry [DateTime, nil] the expiry time of the ban # @param reason [String, nil] Reason for the ban. This is displayed to the user. # @param banned_by [User] User who instated the ban def ban(expiry = nil, reason = nil, banned_by = nil) ::UserBan.create!( user: self, expires_at: expiry, banned_by:, reason:, ) Rails.cache.delete("#{cache_key}/banned") end end