# Configuration

```yaml
# ----------------------------------------------
# --------------   LunaticChat   ---------------
# ----------------------------------------------
#
#  Docs: https://lc.m1sk9.dev
#  GitHub: https://github.com/m1sk9/LunaticChat
#
#  This configuration file is for customizing LunaticChat's behavior.
#  Please specify appropriate values to ensure LunaticChat functions correctly.
#
#  For detailed configuration options, please refer to the documentation:
#       Japanese: https://lc.m1sk9.dev/guide/admin/configuration
#       English:  https://lc.m1sk9.dev/en/guide/admin/configuration
# ----------------------------------------------

# If enabled, Activate LunaticChat's debug mode, which provides detailed logging for troubleshooting.
debug: false

# Path to the YAML file storing player settings
userSettingsFilePath: 'player-settings.yaml'

# If enabled, LunaticChat will check for updates on startup.
checkForUpdates: true

# Plugin Configuration Language. This setting applies only to player feedback and does not affect plugin logs or similar outputs.
language: 'en'

# ----------------------------------------------
# -----------   Features Settings   ------------
# ----------------------------------------------

features:
  quickReplies:
    # If enabled, the quick reply feature via the /reply command will be activated.
    enabled: true
  japaneseConversion:
    # If enabled, enables the conversion function from Roman letters to hiragana.
    enabled: false
    cache:
      # Specifies the maximum number of entries to store in the Romanization conversion cache.
      maxEntries: 500
      # Specify the interval (in seconds) for saving the Romanization conversion cache to disk.
      saveIntervalSeconds: 300
      # Specify the file path where the cache for Romanization conversion is saved.
      filePath: 'conversion_cache.json'
    api:
      # Specify the timeout duration (in milliseconds) for API requests to the Romanization conversion service.
      timeout: 3000
      # Specify the number of retry attempts for failed API requests to the Romanization conversion service.
      retryAttempts: 2
  channelChat:
    # If enabled, channel-based chat functionality will be activated.
    enabled: false
    # Maximum number of channels that can be created per server. Set to 0 for unlimited.
    maxChannelsPerServer: 0
    # Maximum number of members allowed in a single channel. Set to 0 for unlimited.
    maxMembersPerChannel: 0
    # Maximum number of channels a single player can join. Set to 0 for unlimited.
    maxMembershipPerPlayer: 0
    # Channel message logging configuration
    messageLogging:
      # If enabled, all channel messages will be logged to NDJSON files for analysis and archival.
      enabled: true
      # Number of days to retain log files. Set to 0 to keep logs indefinitely.
      retentionDays: 30
      # Maximum size of a single log file in megabytes. Files exceeding this size will stop accepting new entries.
      maxFileSizeMB: 100
  velocityIntegration:
    # If enabled, enables integration with Velocity proxy plugin.
    # This allows Paper and Velocity instances to communicate and verify compatibility.
    enabled: false
    # If enabled, global chat messages will be shared across all Paper servers connected to the Velocity proxy.
    # Players on different servers can communicate through the GLOBAL chat mode.
    crossServerGlobalChat: false
    # Server name to display in cross-server chat (e.g., "survival", "creative", "lobby").
    # This should match the server name defined in your Velocity configuration.
    serverName: 'Unknown'
    # Size of the message deduplication cache to prevent duplicate messages from appearing.
    # Keeps track of the most recent N message IDs to filter out duplicates.
    messageDeduplicationCacheSize: 100

# ----------------------------------------------
# ---------   Message Format Settings   --------
# ----------------------------------------------
#
# Customize the format of various chat messages here.
# You can use placeholders such as {sender}, {message}, etc.
#
# {sender} - The name of the message sender
# {recipient} - The name of the message recipient
# {message} - The content of the message
# {channel} - The name of the chat channel (only for channel chat)
# {server} - The name of the server (only for Velocity cross-server chat)
# ----------------------------------------------

messageFormat:
  # Configure the format for direct messages sent via /tell or /msg
  directMessageFormat: '§7[§e{sender} §7>> §e{recipient}§7] §f{message}'
  # Configure the format for messages sent in channel chat
  channelMessageFormat: '§7[§b#{channel}§7] §e{sender}: §f{message}'
  # Configure the format for global chat messages in Velocity integration
  crossServerGlobalChatFormat: '§7[§6{server}§7] §e{sender}: §f{message}'
```

## General Settings

### `debug`

- Type: `boolean`
- Default: `false`

Starts LunaticChat in debug mode.

### `userSettingsFilePath`

- Type: `string`
- Default: `player-settings.yaml`

Specifies the path to the YAML file where LunaticChat saves player settings.

### `checkForUpdates`

- Type: `boolean`
- Default: `true`

Configures whether to prompt for LunaticChat updates at startup and when players with the required permissions join the server.

### `language`

- Type: `string`
- Default: `en`

Specifies the language for LunaticChat's player-facing messages.

### Supported languages:

- `en`: English
- `ja`: Japanese (日本語)

## Features Settings

### `features.quickReplies.enabled`

- Type: `boolean`
- Default: `true`

Enables the quick reply feature via the [`/reply`](../player-guide/commands/reply.md) command in LunaticChat.

When disabled, the [`/reply`](../player-guide/commands/reply.md) command will not be registered with Paper and cannot be used.

### `features.japaneseConversion.enabled`

- Type: `boolean`
- Default: `false`

Enables the conversion feature from romaji to hiragana.

### `features.japaneseConversion`

#### `cache.maxEntries`

- Type: `integer`
- Default: `500`

Specifies the maximum number of entries to store in the romanization conversion cache.

When this value is exceeded, the oldest entries are deleted first.

Setting a higher value improves conversion performance, but also increases memory usage and cache file size.

#### `cache.saveIntervalSeconds`

- Type: `integer`
- Default: `300`

Specifies the interval (in seconds) for saving the romanization conversion cache to disk.

#### `cache.filePath`

- Type: `string`
- Default: `conversion_cache.json`

Specifies the file path where the romanization conversion cache is saved.

The path set here is interpreted as a relative path from the `plugins/LunaticChat/` directory.

#### `api.timeout`

- Type: `integer`
- Default: `3000`

Specifies the timeout duration (in milliseconds) for API requests to the romanization conversion service.

#### `api.retryAttempts`

- Type: `integer`
- Default: `2`

Specifies the number of retry attempts for failed API requests to the romanization conversion service.

### `features.channelChat`

#### `enabled`

- Type: `boolean`
- Default: `false`

Enables channel-based chat functionality.

#### `maxChannelsPerServer`

- Type: `integer`
- Default: `0`

Specifies the maximum number of channels that can be created per server.

Set to `0` for unlimited.

#### `maxMembersPerChannel`

- Type: `integer`
- Default: `0`

Specifies the maximum number of members that can join a single channel.

Set to `0` for unlimited.

#### `maxMembershipPerPlayer`

- Type: `integer`
- Default: `0`

Specifies the maximum number of channels a single player can join.

Set to `0` for unlimited.

#### `messageLogging.enabled`

- Type: `boolean`
- Default: `true`

Specifies whether to log channel chat messages in NDJSON format.

#### `messageLogging.retentionDays`

- Type: `integer`
- Default: `30`

Specifies the number of days to retain channel chat log files.

Set to `0` to never delete log files.

#### `messageLogging.maxFileSizeMB`

- Type: `integer`
- Default: `100`

Specifies the maximum size (in megabytes) of channel chat log files.

Log files exceeding `maxFileSizeMB` will stop accepting new entries.

### `features.velocityIntegration`

#### `enabled`

- Type: `boolean`
- Default: `false`

Enables integration with Velocity proxy plugin.

#### `crossServerGlobalChat`

- Type: `boolean`
- Default: `false`

Specifies whether to share chat messages across all Paper servers connected to the Velocity proxy.

#### `serverName`

- Type: `string`
- Default: `Unknown`

Specifies the server name to display in Velocity cross-server chat.

Examples: `survival`, `creative`, `lobby`

#### `messageDeduplicationCacheSize`

- Type: `integer`
- Default: `100`

Specifies the size of the message deduplication cache.

## Message Format Settings

Available placeholders:

- `{sender}`: Name of the message sender
- `{recipient}`: Name of the message recipient
- `{message}`: Content of the message
- `{channel}`: Name of the chat channel (only for channel chat)
- `{server}`: Name of the server (only for Velocity cross-server chat)

### `messageFormat.directMessageFormat`

- Type: `string`
- Default: `§7[§e{sender} §7>> §e{recipient}§7] §f{message}`

Specifies the format for messages sent via direct message ([`/tell`](../player-guide/commands/tell.md) or [`/reply`](../player-guide/commands/reply.md) commands).

### `messageFormat.channelMessageFormat`

- Type: `string`
- Default: `§7[§b#{channel}§7] §e{sender}: §f{message}`

Specifies the format for messages sent in channel chat.

### `messageFormat.crossServerGlobalChatFormat`

- Type: `string`
- Default: `§7[§6{server}§7] §e{sender}: §f{message}`

Specifies the format for messages sent via Velocity cross-server global chat.
