Настройка логирования и модерации Bedrock сервера: различия между версиями

Материал из ARK-HOSTER.RU | Документация хостинга
Перейти к навигации Перейти к поиску
Новая страница: «= Настройка логирования и модерации Bedrock сервера = == 1. Подготовка == * Убедитесь, что Bedrock с…»
 
Починка разметки: ссылки и жирный шрифт из Markdown, лишние обратные косые черты в коде, заголовки — проверка вики 13.11.2026
 
Строка 17: Строка 17:


2. Настройки логирования:
2. Настройки логирования:
<pre>\# Логирование контента (если доступно)
<pre># Логирование контента (если доступно)
content-log-file-enabled=false
content-log-file-enabled=false
\# true - логировать загружаемый контент
# true - логировать загружаемый контент
\# false - не логировать</pre>
# false - не логировать</pre>


=== Включение детального логирования ===
=== Включение детального логирования ===
Строка 40: Строка 40:
2. Типичные файлы:
2. Типичные файлы:
<pre>logs/
<pre>logs/
├── latest.log          \# Текущий лог сервера
├── latest.log          # Текущий лог сервера
├── content-log-*.log  \# Логи контента (если включено)
├── content-log-*.log  # Логи контента (если включено)
└── crash-reports/      \# Отчеты о крашах</pre>
└── crash-reports/      # Отчеты о крашах</pre>


3. Просмотр логов:
3. Просмотр логов:
Строка 48: Строка 48:
cat logs/latest.log | less</pre>
cat logs/latest.log | less</pre>


== 4. Анализ логов ===
== 4. Анализ логов ==


=== Поиск событий ===
=== Поиск событий ===
Строка 76: Строка 76:


2. Добавьте содержимое:
2. Добавьте содержимое:
<pre>\#!/bin/bash
<pre>#!/bin/bash


LOG_FILE="/opt/bedrock/logs/latest.log"
LOG_FILE="/opt/bedrock/logs/latest.log"
Строка 85: Строка 85:
echo "" >> "$REPORT_FILE"
echo "" >> "$REPORT_FILE"


\# Статистика подключений
# Статистика подключений
echo "=== Player Connections ===" >> "$REPORT_FILE"
echo "=== Player Connections ===" >> "$REPORT_FILE"
CONNECTIONS=$(grep -i "connected\|joined" "$LOG_FILE" | wc -l)
CONNECTIONS=$(grep -i "connected\|joined" "$LOG_FILE" | wc -l)
Строка 92: Строка 92:
echo "" >> "$REPORT_FILE"
echo "" >> "$REPORT_FILE"


\# Статистика команд
# Статистика команд
echo "=== Commands Executed ===" >> "$REPORT_FILE"
echo "=== Commands Executed ===" >> "$REPORT_FILE"
COMMANDS=$(grep -i "command" "$LOG_FILE" | wc -l)
COMMANDS=$(grep -i "command" "$LOG_FILE" | wc -l)
Строка 98: Строка 98:
echo "" >> "$REPORT_FILE"
echo "" >> "$REPORT_FILE"


\# Ошибки
# Ошибки
echo "=== Errors ===" >> "$REPORT_FILE"
echo "=== Errors ===" >> "$REPORT_FILE"
ERRORS=$(grep -i "error\|exception" "$LOG_FILE" | wc -l)
ERRORS=$(grep -i "error\|exception" "$LOG_FILE" | wc -l)
Строка 107: Строка 107:
echo "" >> "$REPORT_FILE"
echo "" >> "$REPORT_FILE"


\# Активные игроки
# Активные игроки
echo "=== Active Players ===" >> "$REPORT_FILE"
echo "=== Active Players ===" >> "$REPORT_FILE"
grep -i "player" "$LOG_FILE" | grep -v "disconnected" | tail -10 >> "$REPORT_FILE"
grep -i "player" "$LOG_FILE" | grep -v "disconnected" | tail -10 >> "$REPORT_FILE"
Строка 116: Строка 116:
<pre>sudo chmod +x /usr/local/bin/bedrock-log-analyzer.sh</pre>
<pre>sudo chmod +x /usr/local/bin/bedrock-log-analyzer.sh</pre>


== 5. Система модерации ===
== 5. Система модерации ==


=== Настройка permissions.json ===
=== Настройка permissions.json ===
Строка 152: Строка 152:


5. Добавьте содержимое:
5. Добавьте содержимое:
<pre>\#!/bin/bash
<pre>#!/bin/bash


PLAYER="$1"
PLAYER="$1"
DURATION="${2:-3600}"  \# По умолчанию 1 час
DURATION="${2:-3600}"  # По умолчанию 1 час


if [ -z "$PLAYER" ]; then
if [ -z "$PLAYER" ]; then
Строка 162: Строка 162:
fi
fi


\# Бан игрока
# Бан игрока
screen -S minecraft-bedrock -X stuff "ban $PLAYER$(printf \\r)"
screen -S minecraft-bedrock -X stuff "ban $PLAYER$(printf \\r)"


\# Запланировать разбан через указанное время
# Запланировать разбан через указанное время
(sleep "$DURATION" && screen -S minecraft-bedrock -X stuff "pardon $PLAYER$(printf \\r)") &
(sleep "$DURATION" && screen -S minecraft-bedrock -X stuff "pardon $PLAYER$(printf \\r)") &


echo "Player $PLAYER banned for $DURATION seconds"</pre>
echo "Player $PLAYER banned for $DURATION seconds"</pre>


== 6. Автоматическая модерация ===
== 6. Автоматическая модерация ==


=== Скрипт автоматической модерации ===
=== Скрипт автоматической модерации ===
Строка 178: Строка 178:


2. Добавьте содержимое:
2. Добавьте содержимое:
<pre>\#!/bin/bash
<pre>#!/bin/bash


LOG_FILE="/opt/bedrock/logs/latest.log"
LOG_FILE="/opt/bedrock/logs/latest.log"
VIOLATION_LOG="/var/log/bedrock-violations.log"
VIOLATION_LOG="/var/log/bedrock-violations.log"


\# Поиск нарушений в логах
# Поиск нарушений в логах
check_violations() {
check_violations() {
     \# Список запрещенных слов (пример)
     # Список запрещенных слов (пример)
     BAD_WORDS=("spam" "hack" "cheat")
     BAD_WORDS=("spam" "hack" "cheat")
      
      
Строка 195: Строка 195:
                     echo "[$(date '+%Y-%m-%d %H:%M:%S')] Violation by $PLAYER: $line" >> "$VIOLATION_LOG"
                     echo "[$(date '+%Y-%m-%d %H:%M:%S')] Violation by $PLAYER: $line" >> "$VIOLATION_LOG"
                      
                      
                     \# Автоматический кик (опционально)
                     # Автоматический кик (опционально)
                     \# screen -S minecraft-bedrock -X stuff "kick $PLAYER Bad language$(printf \\r)"
                     # screen -S minecraft-bedrock -X stuff "kick $PLAYER Bad language$(printf \\r)"
                 fi
                 fi
             fi
             fi
Строка 211: Строка 211:
<pre>*/5 * * * * /usr/local/bin/bedrock-auto-moderate.sh</pre>
<pre>*/5 * * * * /usr/local/bin/bedrock-auto-moderate.sh</pre>


== 7. Мониторинг действий игроков ===
== 7. Мониторинг действий игроков ==


=== Логирование действий ===
=== Логирование действий ===
Строка 219: Строка 219:


2. Добавьте содержимое:
2. Добавьте содержимое:
<pre>\#!/bin/bash
<pre>#!/bin/bash


LOG_FILE="/opt/bedrock/logs/latest.log"
LOG_FILE="/opt/bedrock/logs/latest.log"
ACTIVITY_LOG="/var/log/bedrock-activity.log"
ACTIVITY_LOG="/var/log/bedrock-activity.log"


\# Мониторинг действий игроков
# Мониторинг действий игроков
monitor_activity() {
monitor_activity() {
     tail -f "$LOG_FILE" | while read line; do
     tail -f "$LOG_FILE" | while read line; do
         \# Подключения
         # Подключения
         if echo "$line" | grep -qi "connected\|joined"; then
         if echo "$line" | grep -qi "connected\|joined"; then
             PLAYER=$(echo "$line" | grep -oE "\w+" | tail -1)
             PLAYER=$(echo "$line" | grep -oE "\w+" | tail -1)
Строка 233: Строка 233:
         fi
         fi
          
          
         \# Отключения
         # Отключения
         if echo "$line" | grep -qi "disconnected\|left"; then
         if echo "$line" | grep -qi "disconnected\|left"; then
             PLAYER=$(echo "$line" | grep -oE "\w+" | tail -1)
             PLAYER=$(echo "$line" | grep -oE "\w+" | tail -1)
Строка 239: Строка 239:
         fi
         fi
          
          
         \# Команды
         # Команды
         if echo "$line" | grep -qi "executed.*command"; then
         if echo "$line" | grep -qi "executed.*command"; then
             echo "[$(date '+%Y-%m-%d %H:%M:%S')] COMMAND: $line" >> "$ACTIVITY_LOG"
             echo "[$(date '+%Y-%m-%d %H:%M:%S')] COMMAND: $line" >> "$ACTIVITY_LOG"
Строка 248: Строка 248:
monitor_activity</pre>
monitor_activity</pre>


== 8. Отчеты и статистика ===
== 8. Отчеты и статистика ==


=== Ежедневный отчет ===
=== Ежедневный отчет ===
Строка 256: Строка 256:


2. Добавьте содержимое:
2. Добавьте содержимое:
<pre>\#!/bin/bash
<pre>#!/bin/bash


LOG_FILE="/opt/bedrock/logs/latest.log"
LOG_FILE="/opt/bedrock/logs/latest.log"
Строка 265: Строка 265:
echo "" >> "$REPORT_FILE"
echo "" >> "$REPORT_FILE"


\# Статистика за последние 24 часа
# Статистика за последние 24 часа
YESTERDAY=$(date -d "yesterday" +%Y-%m-%d)
YESTERDAY=$(date -d "yesterday" +%Y-%m-%d)


\# Уникальные игроки
# Уникальные игроки
UNIQUE_PLAYERS=$(grep -i "connected\|joined" "$LOG_FILE" | \
UNIQUE_PLAYERS=$(grep -i "connected\|joined" "$LOG_FILE" | \
     grep -oE "Player[^:]*:\s*\w+" | \
     grep -oE "Player[^:]*:\s*\w+" | \
Строка 277: Строка 277:
echo "" >> "$REPORT_FILE"
echo "" >> "$REPORT_FILE"


\# Общее количество подключений
# Общее количество подключений
TOTAL_CONNECTIONS=$(grep -i "connected\|joined" "$LOG_FILE" | wc -l)
TOTAL_CONNECTIONS=$(grep -i "connected\|joined" "$LOG_FILE" | wc -l)
echo "Total connections: $TOTAL_CONNECTIONS" >> "$REPORT_FILE"
echo "Total connections: $TOTAL_CONNECTIONS" >> "$REPORT_FILE"
echo "" >> "$REPORT_FILE"
echo "" >> "$REPORT_FILE"


\# Ошибки
# Ошибки
ERRORS=$(grep -i "error\|exception" "$LOG_FILE" | wc -l)
ERRORS=$(grep -i "error\|exception" "$LOG_FILE" | wc -l)
echo "Total errors: $ERRORS" >> "$REPORT_FILE"
echo "Total errors: $ERRORS" >> "$REPORT_FILE"


\# Отправка отчета (опционально)
# Отправка отчета (опционально)
\# mail -s "Bedrock Daily Report" admin@example.com < "$REPORT_FILE"
# mail -s "Bedrock Daily Report" admin@example.com < "$REPORT_FILE"


cat "$REPORT_FILE"</pre>
cat "$REPORT_FILE"</pre>
Строка 294: Строка 294:
<pre>59 23 * * * /usr/local/bin/bedrock-daily-report.sh</pre>
<pre>59 23 * * * /usr/local/bin/bedrock-daily-report.sh</pre>


== 9. Интеграция с системами модерации ===
== 9. Интеграция с системами модерации ==


=== Webhook для нарушений ===
=== Webhook для нарушений ===
Строка 302: Строка 302:


2. Добавьте содержимое:
2. Добавьте содержимое:
<pre>\#!/bin/bash
<pre>#!/bin/bash


WEBHOOK_URL="https://discord.com/api/webhooks/YOUR_WEBHOOK_URL"
WEBHOOK_URL="https://discord.com/api/webhooks/YOUR_WEBHOOK_URL"
Строка 313: Строка 313:
     "$WEBHOOK_URL"</pre>
     "$WEBHOOK_URL"</pre>


== 10. Устранение неполадок ===
== 10. Устранение неполадок ==


=== Проблемы с логами ===
=== Проблемы с логами ===
Строка 333: Строка 333:
Настройка логирования и модерации Bedrock сервера обеспечивает эффективное управление сервером и контроль действий игроков. Правильная настройка логирования и автоматизация модерации значительно упростит управление сервером.
Настройка логирования и модерации Bedrock сервера обеспечивает эффективное управление сервером и контроль действий игроков. Правильная настройка логирования и автоматизация модерации значительно упростит управление сервером.


'''Для размещения ваших Bedrock серверов на надежном хостинге рекомендуем воспользоваться услугами [ARK-HOSTER.RU](https://ark-hoster.ru):'''
'''Для размещения ваших Bedrock серверов на надежном хостинге рекомендуем воспользоваться услугами [https://ark-hoster.ru ARK-HOSTER.RU]:'''


* '''[Выделенные серверы](https://ark-hoster.ru/dedicated/)''' - для высоконагруженных Bedrock серверов
* '''[https://ark-hoster.ru/dedicated/ Выделенные серверы]''' - для высоконагруженных Bedrock серверов
* '''[VPS/VDS серверы](https://ark-hoster.ru/vpsgame/)''' - для небольших и средних серверов
* '''[https://ark-hoster.ru/vpsgame/ VPS/VDS серверы]''' - для небольших и средних серверов


Наши специалисты помогут с настройкой логирования и модерации на Bedrock серверах!
Наши специалисты помогут с настройкой логирования и модерации на Bedrock серверах!

Текущая версия от 08:13, 14 ноября 2026

Настройка логирования и модерации Bedrock сервера

1. Подготовка

  • Убедитесь, что Bedrock сервер установлен и работает.
  • Имейте права доступа для редактирования конфигурационных файлов.
  • Рекомендуется использовать Ubuntu 24.04 LTS.
  • Установите необходимые инструменты для анализа логов.

2. Настройка логирования в server.properties

Базовые настройки

1. Отредактируйте конфигурацию:

cd /opt/bedrock
nano server.properties

2. Настройки логирования:

# Логирование контента (если доступно)
content-log-file-enabled=false
# true - логировать загружаемый контент
# false - не логировать

Включение детального логирования

1. Для отладки включите логирование:

content-log-file-enabled=true

2. Для продакшн серверов:

content-log-file-enabled=false

3. Структура логов

Расположение логов

1. Основная директория логов:

cd /opt/bedrock
ls -lah logs/

2. Типичные файлы:

logs/
├── latest.log          # Текущий лог сервера
├── content-log-*.log   # Логи контента (если включено)
└── crash-reports/      # Отчеты о крашах

3. Просмотр логов:

tail -f logs/latest.log
cat logs/latest.log | less

4. Анализ логов

Поиск событий

1. Подключения игроков:

grep -i "connected" logs/latest.log
grep -i "player.*joined" logs/latest.log

2. Отключения игроков:

grep -i "disconnected" logs/latest.log
grep -i "player.*left" logs/latest.log

3. Команды игроков:

grep -i "command" logs/latest.log
grep -i "executed.*command" logs/latest.log

4. Ошибки:

grep -i "error\|exception\|failed" logs/latest.log | tail -50

5. События сервера:

grep -i "server.*start\|server.*stop" logs/latest.log

Создание скрипта анализа

1. Создайте скрипт:

sudo nano /usr/local/bin/bedrock-log-analyzer.sh

2. Добавьте содержимое:

#!/bin/bash

LOG_FILE="/opt/bedrock/logs/latest.log"
REPORT_FILE="/var/log/bedrock-analysis-$(date +%Y%m%d).log"

echo "=== Bedrock Server Log Analysis ===" > "$REPORT_FILE"
echo "Date: $(date)" >> "$REPORT_FILE"
echo "" >> "$REPORT_FILE"

# Статистика подключений
echo "=== Player Connections ===" >> "$REPORT_FILE"
CONNECTIONS=$(grep -i "connected\|joined" "$LOG_FILE" | wc -l)
echo "Total connections: $CONNECTIONS" >> "$REPORT_FILE"
grep -i "connected\|joined" "$LOG_FILE" | tail -20 >> "$REPORT_FILE"
echo "" >> "$REPORT_FILE"

# Статистика команд
echo "=== Commands Executed ===" >> "$REPORT_FILE"
COMMANDS=$(grep -i "command" "$LOG_FILE" | wc -l)
echo "Total commands: $COMMANDS" >> "$REPORT_FILE"
echo "" >> "$REPORT_FILE"

# Ошибки
echo "=== Errors ===" >> "$REPORT_FILE"
ERRORS=$(grep -i "error\|exception" "$LOG_FILE" | wc -l)
echo "Total errors: $ERRORS" >> "$REPORT_FILE"
if [ "$ERRORS" -gt 0 ]; then
    grep -i "error\|exception" "$LOG_FILE" | tail -20 >> "$REPORT_FILE"
fi
echo "" >> "$REPORT_FILE"

# Активные игроки
echo "=== Active Players ===" >> "$REPORT_FILE"
grep -i "player" "$LOG_FILE" | grep -v "disconnected" | tail -10 >> "$REPORT_FILE"

cat "$REPORT_FILE"

3. Сделайте исполняемым:

sudo chmod +x /usr/local/bin/bedrock-log-analyzer.sh

5. Система модерации

Настройка permissions.json

1. Назначьте права модераторам:

cd /opt/bedrock
nano permissions.json

2. Добавьте модераторов:

[
  {
    "permission": "operator",
    "xuid": "1234567890123456"
  },
  {
    "permission": "operator",
    "xuid": "2345678901234567"
  }
]

Команды модерации

1. Кик игрока:

screen -r minecraft-bedrock
kick PlayerName [причина]

2. Бан игрока:

ban PlayerName [причина]

3. Разбан игрока:

pardon PlayerName

4. Временный бан (через скрипт):

sudo nano /usr/local/bin/bedrock-temp-ban.sh

5. Добавьте содержимое:

#!/bin/bash

PLAYER="$1"
DURATION="${2:-3600}"  # По умолчанию 1 час

if [ -z "$PLAYER" ]; then
    echo "Usage: $0 <player-name> [duration-seconds]"
    exit 1
fi

# Бан игрока
screen -S minecraft-bedrock -X stuff "ban $PLAYER$(printf \\r)"

# Запланировать разбан через указанное время
(sleep "$DURATION" && screen -S minecraft-bedrock -X stuff "pardon $PLAYER$(printf \\r)") &

echo "Player $PLAYER banned for $DURATION seconds"

6. Автоматическая модерация

Скрипт автоматической модерации

1. Создайте скрипт:

sudo nano /usr/local/bin/bedrock-auto-moderate.sh

2. Добавьте содержимое:

#!/bin/bash

LOG_FILE="/opt/bedrock/logs/latest.log"
VIOLATION_LOG="/var/log/bedrock-violations.log"

# Поиск нарушений в логах
check_violations() {
    # Список запрещенных слов (пример)
    BAD_WORDS=("spam" "hack" "cheat")
    
    tail -100 "$LOG_FILE" | while read line; do
        for word in "${BAD_WORDS[@]}"; do
            if echo "$line" | grep -qi "$word"; then
                PLAYER=$(echo "$line" | grep -oE "Player[^:]*:\s*\w+" | awk '{print $NF}')
                if [ ! -z "$PLAYER" ]; then
                    echo "[$(date '+%Y-%m-%d %H:%M:%S')] Violation by $PLAYER: $line" >> "$VIOLATION_LOG"
                    
                    # Автоматический кик (опционально)
                    # screen -S minecraft-bedrock -X stuff "kick $PLAYER Bad language$(printf \\r)"
                fi
            fi
        done
    done
}

check_violations

3. Сделайте исполняемым:

sudo chmod +x /usr/local/bin/bedrock-auto-moderate.sh

4. Добавьте в cron (каждые 5 минут):

*/5 * * * * /usr/local/bin/bedrock-auto-moderate.sh

7. Мониторинг действий игроков

Логирование действий

1. Создайте скрипт мониторинга:

sudo nano /usr/local/bin/bedrock-activity-monitor.sh

2. Добавьте содержимое:

#!/bin/bash

LOG_FILE="/opt/bedrock/logs/latest.log"
ACTIVITY_LOG="/var/log/bedrock-activity.log"

# Мониторинг действий игроков
monitor_activity() {
    tail -f "$LOG_FILE" | while read line; do
        # Подключения
        if echo "$line" | grep -qi "connected\|joined"; then
            PLAYER=$(echo "$line" | grep -oE "\w+" | tail -1)
            echo "[$(date '+%Y-%m-%d %H:%M:%S')] JOIN: $PLAYER" >> "$ACTIVITY_LOG"
        fi
        
        # Отключения
        if echo "$line" | grep -qi "disconnected\|left"; then
            PLAYER=$(echo "$line" | grep -oE "\w+" | tail -1)
            echo "[$(date '+%Y-%m-%d %H:%M:%S')] LEAVE: $PLAYER" >> "$ACTIVITY_LOG"
        fi
        
        # Команды
        if echo "$line" | grep -qi "executed.*command"; then
            echo "[$(date '+%Y-%m-%d %H:%M:%S')] COMMAND: $line" >> "$ACTIVITY_LOG"
        fi
    done
}

monitor_activity

8. Отчеты и статистика

Ежедневный отчет

1. Создайте скрипт отчетов:

sudo nano /usr/local/bin/bedrock-daily-report.sh

2. Добавьте содержимое:

#!/bin/bash

LOG_FILE="/opt/bedrock/logs/latest.log"
REPORT_FILE="/var/log/bedrock-daily-report-$(date +%Y%m%d).txt"

echo "=== Bedrock Server Daily Report ===" > "$REPORT_FILE"
echo "Date: $(date)" >> "$REPORT_FILE"
echo "" >> "$REPORT_FILE"

# Статистика за последние 24 часа
YESTERDAY=$(date -d "yesterday" +%Y-%m-%d)

# Уникальные игроки
UNIQUE_PLAYERS=$(grep -i "connected\|joined" "$LOG_FILE" | \
    grep -oE "Player[^:]*:\s*\w+" | \
    awk '{print $NF}' | \
    sort -u | wc -l)

echo "Unique players (last 24h): $UNIQUE_PLAYERS" >> "$REPORT_FILE"
echo "" >> "$REPORT_FILE"

# Общее количество подключений
TOTAL_CONNECTIONS=$(grep -i "connected\|joined" "$LOG_FILE" | wc -l)
echo "Total connections: $TOTAL_CONNECTIONS" >> "$REPORT_FILE"
echo "" >> "$REPORT_FILE"

# Ошибки
ERRORS=$(grep -i "error\|exception" "$LOG_FILE" | wc -l)
echo "Total errors: $ERRORS" >> "$REPORT_FILE"

# Отправка отчета (опционально)
# mail -s "Bedrock Daily Report" admin@example.com < "$REPORT_FILE"

cat "$REPORT_FILE"

3. Добавьте в cron (ежедневно в 23:59):

59 23 * * * /usr/local/bin/bedrock-daily-report.sh

9. Интеграция с системами модерации

Webhook для нарушений

1. Создайте скрипт отправки уведомлений:

sudo nano /usr/local/bin/bedrock-violation-webhook.sh

2. Добавьте содержимое:

#!/bin/bash

WEBHOOK_URL="https://discord.com/api/webhooks/YOUR_WEBHOOK_URL"
VIOLATION="$1"
PLAYER="$2"

curl -H "Content-Type: application/json" \
     -X POST \
     -d "{\"content\": \"⚠️ Violation detected! Player: $PLAYER, Reason: $VIOLATION\"}" \
     "$WEBHOOK_URL"

10. Устранение неполадок

Проблемы с логами

1. Логи не создаются:

  • Проверьте права доступа к директории logs/
  • Проверьте настройки в server.properties

2. Логи растут слишком быстро:

  • Настройте ротацию логов
  • Отключите content-log-file-enabled

3. Не могу найти события в логах:

  • Используйте grep с правильными паттернами
  • Проверьте формат логов Bedrock сервера

Заключение

Настройка логирования и модерации Bedrock сервера обеспечивает эффективное управление сервером и контроль действий игроков. Правильная настройка логирования и автоматизация модерации значительно упростит управление сервером.

Для размещения ваших Bedrock серверов на надежном хостинге рекомендуем воспользоваться услугами ARK-HOSTER.RU:

Наши специалисты помогут с настройкой логирования и модерации на Bedrock серверах!