# Class SpamOptions | EchoHub Documentation
Anti-spam thresholds, bound from the &quot;Spam&quot; config section. Defaults are lenient enough that a fast typist never trips them; Mods and above are always exempt.

# Class SpamOptions

Namespace
  EchoHub.Server.Config

Assembly
  EchoHub.Server.dll

Anti-spam thresholds, bound from the "Spam" config section. Defaults are lenient enough that a fast typist never trips them; Mods and above are always exempt.

    public sealed class SpamOptions

Inheritance
  object
  SpamOptions

Inherited Members
  object.GetType()
  object.ToString()
  object.Equals(object)
  object.Equals(object, object)
  object.ReferenceEquals(object, object)
  object.GetHashCode()

## Constructors

### SpamOptions()

    public SpamOptions()

## Properties

### AutoMuteMinutes

Auto-mute duration once a user accumulates ViolationThreshold rejected sends within ViolationWindowMinutes. 0 disables auto-mute (rejections still apply). The mute uses the normal timed-mute machinery, so moderators see it and `MuteExpirationService` lifts it.

    public int AutoMuteMinutes { get; set; }

#### Property Value

int

### ChannelCreateWindowMinutes

    public int ChannelCreateWindowMinutes { get; set; }

#### Property Value

int

### Enabled

Master switch for all spam protection.

    public bool Enabled { get; set; }

#### Property Value

bool

### JoinWindowSeconds

    public int JoinWindowSeconds { get; set; }

#### Property Value

int

### MaxChannelCreatesPerWindow

Max channel creations per ChannelCreateWindowMinutes window.

    public int MaxChannelCreatesPerWindow { get; set; }

#### Property Value

int

### MaxDuplicateMessages

How many identical messages in a row are tolerated; the next one is rejected. (End-to-end encrypted rooms are naturally exempt — identical plaintext produces different ciphertext per message, so repeats never look identical to the server.)

    public int MaxDuplicateMessages { get; set; }

#### Property Value

int

### MaxJoinsPerWindow

Max first-time channel joins per JoinWindowSeconds window. Joins of channels the user already belongs to (reconnect/auto-join) never count, but a brand-new user's first connect joins every public channel at once — keep this above your public channel count.

    public int MaxJoinsPerWindow { get; set; }

#### Property Value

int

### MaxMessagesPerWindow

Max messages a user may send per WindowSeconds window.

    public int MaxMessagesPerWindow { get; set; }

#### Property Value

int

### ViolationThreshold

    public int ViolationThreshold { get; set; }

#### Property Value

int

### ViolationWindowMinutes

    public int ViolationWindowMinutes { get; set; }

#### Property Value

int

### WindowSeconds

    public int WindowSeconds { get; set; }

#### Property Value

int