Команды
Справочник классов
Основные классы
Класс/Интерфейс | Описание |
---|---|
CommandData |
Контейнер метаданных для зарегистрированных команд |
CommandInvokeContext |
Контекст выполнения с аргументами и отправителем |
ICommandSender |
Интерфейс для инициаторов команд |
TextPage |
Контейнер для постраничного контента |
Атрибуты
Атрибут | Назначение |
---|---|
ServerCommandAttribute |
Определяет метаданные регистрации команд |
CommandsSyntaxAttribute |
Задает шаблоны синтаксиса команд |
CommandsSettingsAttribute |
Настраивает флаги поведения команд |
Структура методов
Команды реализуются как статические методы с атрибутами:
[ServerCommand(
CommandType.Shared,
"example",
"Пример описания команды",
"example.permission"
)]
[CommandsSyntax("<обязательный_параметр>", "[опциональный_параметр]")]
public static void ExampleCommand(
CommandInvokeContext ctx,
string required_param,
int optional_param = 0
)
{
// Логика команды
ctx.Sender.ReplySuccess($"Выполнено с {required_param} и {optional_param}");
}
Основные компоненты:
-
ServerCommandAttribute
CommandType
: Уровень доступности командыName
: Имя для вызова командыDescription
: Описание для справкиPermission
: Требуемый узел разрешений (null — без разрешений)
-
CommandInvokeContext
Содержит контекст выполнения:Sender
: Контекст инициатора (реализуетICommandSender
)ArgumentsText
: Необработанная строка аргументовArguments
: Токенизированный список аргументов
-
ICommandSender
Интерфейс для источников команд с методами:- Проверка разрешений (
HasPermission()
) - Ответы (
ReplySuccess()
,ReplyError()
и т.д.) - Поддержка локализации через свойство
Language
- Проверка разрешений (
Система разрешений
Рекомендации:
- Используйте иерархию через точку: модуль.функция.действие
- Проверяйте разрешения на ранних этапах выполнения
Статические разрешения
[ServerCommand(CommandType.Shared, "ban", "Забанить игрока", "moderation.ban")]
Динамические проверки
if (!ctx.Sender.HasPermission("special.access"))
{
ctx.Sender.ReplyError("Доступ запрещён!");
return;
}
Обработка ответов
Типы ответов
ctx.Sender.ReplySuccess("Операция завершена"); // Зеленый текст
ctx.Sender.ReplyInfo("Статус: онлайн"); // Желтый текст
ctx.Sender.ReplyWarning("Мало ресурсов"); // Оранжевый текст
ctx.Sender.ReplyError("Некорректный ввод"); // Красный текст
Форматированные сообщения
ctx.Sender.ReplySuccess("Игрок {0} набрал {1} очков", playerName, score);
Постраничная система
Создание контента
var items = Enumerable.Range(1, 100).Select(i => $"Элемент {i}");
var pages = PagesCollection.CreateFromList(
items,
maxLineLength: 80, // Символов на строку
linesPerPage: 10 // Строк на страницу
);
Отправка страниц
ctx.Sender.ReplyPage(
pages,
header: "Список элементов - Страница {0} из {1}",
footer: "Используйте /example <страница> для навигации",
footerArgs: null,
showPageName: true,
page: 2
);
Поддержка локализации
- Использует свойство
ICommandSender.Language
- Интегрируется с системой переводов
Локализованные команды
[ServerCommand(CommandType.Shared, "help", "commands.help.desc", null)]
Локализованные ответы
ctx.Sender.ReplySuccess("commands.help.success");