Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Плагин [ADMIN] AdminCommandLogger - логгирование команд администраторов

Overwrite

Активный участник
Пользователь
Баллы
98
Имя в Minecraft
OverwriteMC
Описание: Данный плагин предназначен для логгирования команд и сообщений, которые пишут "администраторы" вашего сервера, чтобы вам было проще отследить их действия. Искать в логах иногда бывает слишком муторно, так что почему бы и нет.

Версия: Любая

Конфигурация:
Код:
# Настройки плагина
settings:
 # Записывать ли в лог команды
 log-cmd: true
 # Записывать ли в лог чат
 log-chat: true

# Формат логов
cmd-format: '%date% - Игрок %player% использовал команду %cmd%'
chat-format: '%date% - %player%: %msg%'

# Права, которые должны иметься у игрока, чтобы его команды записывались в файл
permissions:
 - '*'
 - 'luckperms.*'
 - 'bukkit.*'
 - 'minecraft.*'
 - 'essentials.*'
 - 'cmi.*'
 - 'worldedit.*'
 - 'worldguard.*'

# Команды которые не будут записываться в лог
ignored-cmds:
 - '/gm'
 - '/gamemode'
 - '/msg'
 - '/l'
 - '/login'
 - '/reg'
 - '/register'

Команды/разрешения - нет

Скачать плагин: YandexDisk | GoogleDisk
 
Последнее редактирование:
Описание: Данный плагин предназначен для логгирования команд, которые выполняют администраторы вашего сервера, чтобы вам было проще отследить их действия. Искать в логах иногда бывает слишком муторно.

Код:
Код:
package ru.Overwrite.log;

import java.util.Date;
import java.util.List;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import org.bukkit.event.Listener;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;

public final class Main extends JavaPlugin implements Listener {
   
    public static List<String> permissions;
   
    @Override()
    public void onEnable() {
        getServer().getPluginManager().registerEvents(this, this);
            permissions = getConfig().getStringList("permissions");
            saveDefaultConfig();
          }
   
    @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = false)
      public void AsyncPlayerChatEvent(PlayerCommandPreprocessEvent e) {
        Date date = new Date();
        SimpleDateFormat formatter = new SimpleDateFormat("[dd-MM-yyyy] HH:mm:ss");
        Player p = e.getPlayer();
          if (isPermissions(p)) {
          logToFile((getConfig().getString("format").replace("%player%", p.getName()).replace("%date%", formatter.format(date)).replace("%cmd%", e.getMessage())));
        }
      }
   
    public void logToFile(String message) {
        try {
          File dataFolder = getDataFolder();
          if (!dataFolder.exists())
            dataFolder.mkdir();
          File saveTo = new File(getDataFolder(), "log.txt");
          if (!saveTo.exists())
            saveTo.createNewFile();
          FileWriter fw = new FileWriter(saveTo, true);
          PrintWriter pw = new PrintWriter(fw);
          pw.println(message);
          pw.flush();
          pw.close();
        } catch (IOException e) {
          e.printStackTrace();
        }
      }
   
    public Boolean isPermissions(Player p) {
        boolean bool = false;
        for (String s : permissions) {
        if (p.isOp() || p.hasPermission(s))
            bool = true;
        }
        return Boolean.valueOf(bool);
      }
}

Версия: Любая

Конфигурация:
Код:
# Права, которые должны иметься у игрока, чтобы его команды записывались в файл
permissions:
- '*'
- 'luckperms.*'
- 'bukkit.*'
- 'minecraft.*'
- 'essentials.*'
- 'worldedit.*'

# Формат логов
format: '%date% - Игрок %player% использовал команду %cmd%'

Команды/разрешения - нет

Скачать плагин:
https://yadi.sk/d/poajOPJ7seqhxA
Не хорошо блокировать поток чата для сохранения на диск логов.
Посмотри на это https://github.com/BoomEaro/CrazyDebuger
в нем на каждого игрока свой лог, есть общий лог сервера а так же в лог записываются разные события, в том числе смерть или дроп предметов по желанию. Сам лог буфиризируется и сохраняется отдельно.
 
Но плагин отслеживает только команды, а не чат в целом...
Это еще хуже, ивент PlayerCommandPreprocessEvent срабатывает в основном потоке, потому что команды обрабатываются в основном потоке. Если игроки с твоими правами будут спамить командами, сервер будет сильно лагать из-за постоянной записи на диск. Проблему конечно смягчит ssd диск, но все равно будет сильно заметно.
 
Это еще хуже, ивент PlayerCommandPreprocessEvent срабатывает в основном потоке, потому что команды обрабатываются в основном потоке. Если игроки с твоими правами будут спамить командами, сервер будет сильно лагать из-за постоянной записи на диск. Проблему конечно смягчит ssd диск, но все равно будет сильно заметно.
Щтощ, будем заимствовать код с гитхаба
(хотя постестил на своём сервере - вроде ТПС не просаживается... хотя я за 30 секунд зафигачил 1500 команд)

(UPD: еще 5К команд за минуту уже от 2х людей не просадили ТПС ни на единичку, юзабельно)
 
Последнее редактирование:
Плагин оказался не таким уж и бесполезным, так что я решил сделать ему небольшую обновку.
До вышепредложенного не дошло, было лень, но тем не менее
> Добавил логи чата
> Добавил возможность отключать функции плагина по желанию
 
Логирование команд и чата есть в CoreProtect, а вместе с этим ещё логирование табличек, входов и ещё кучи всего для слежки за админами. И там тоже функционал при необходимости включается/отключается.
А ещё у CoreProtect открытый исходный код
 
Там оно не зависит от перма и не хранится в файлах которые можно открыть в блокноте/нотпаде, что не удобно мне
Ну, пермы особо и не нужны - по кому нужна информация, по тому и ищешь. А касательно формата хранения - да, может быть.
Хотя в самом CoreProtect все инструменты для чтения этой информации есть, да и при необходимости можно и саму базу открыть и отфильтровать, что нужно. Но тут, конечно, хозяин - барин
 

Поделиться этой страницей

Назад
Верх