# Обработка slash команд

[Описание параметров](parametry)

В telegram slash команды являются кликабельными, что позволяет быстро выполнять определенные действия. Например вывести список пользователей или получить пользователя с идентификатор 1.

<figure><img src="https://3539174730-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FscZIt8hLT3IQaTXwzfQD%2Fuploads%2FOtVE54zYRCPKc3Q0NZXH%2F%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5-8.png?alt=media&#x26;token=876c43b1-81e8-4cd0-bc1f-36f022e4e901" alt=""><figcaption></figcaption></figure>

Для того чтобы работать со slash командами нужно использовать атрибут **SlashHandlerAttribute**.

```csharp
/// <summary>
/// Конструктор.
/// </summary>
/// <param name="botId">Идентификатор бота.</param>
/// <param name="botIds">Идентификаторы ботов.</param>
/// <param name="commandComparison">Как сравнивать команду.</param>
/// <param name="stringComparison">Как сравнивать строку.</param>
/// <param name="commands">Команды.</param>
public SlashHandlerAttribute(params string[] commands)
public SlashHandlerAttribute(long botId, params string[] commands)
public SlashHandlerAttribute(long[] botIds, params string[] commands)
public SlashHandlerAttribute(CommandComparison commandComparison, params string[] commands)
public SlashHandlerAttribute(long botId, CommandComparison commandComparison, params string[] commands)
public SlashHandlerAttribute(long[] botIds, CommandComparison commandComparison, params string[] commands)
public SlashHandlerAttribute(StringComparison stringComparison, params string[] commands)
public SlashHandlerAttribute(long botId, StringComparison stringComparison, params string[] commands)
public SlashHandlerAttribute(long[] botIds, StringComparison stringComparison, params string[] commands)
public SlashHandlerAttribute(CommandComparison commandComparison, StringComparison stringComparison, params string[] commands)
public SlashHandlerAttribute(long botId, CommandComparison commandComparison, StringComparison stringComparison, params string[] commands)
public SlashHandlerAttribute(long[] botIds, CommandComparison commandComparison, StringComparison stringComparison, params string[] commands)
```

Получение значения после нижнего подчеркивания

```csharp
/// <summary>
/// Команда отработает для бота с botId 0.
/// Команда отработает при написание в чат "/example".
/// </summary>
[SlashHandler("/example")]
public static async Task ExampleSlashCommand(ITelegramBotClient botClient, Update update)
{
    string msg = $"Команда /example";
    msg += "\n /get_1 - команда 1" +
        "\n /get_2 - команда 2" +
        "\n /get_3 - команда 3" +
        "\n /get_4 - команда 4";
    await Helpers.Message.Send(botClient, update, msg);
}

/// <summary>
/// Команда отработает для бота с botId 0.
/// Команда отработает при написание в чат "/get".
/// Команда отработает при написание в чат "/get_1", значение 1 можно обработать.
/// </summary>
[SlashHandler("/get")]
public static async Task ExampleSlashCommandGet(ITelegramBotClient botClient, Update update)
{
    if (update.Message.Text.Contains("_"))
    {
        var spl = update.Message.Text.Split("_");
        if (spl.Length > 1)
        {
            string msg = $"Команда /get со значением {spl[1]}";
            await Helpers.Message.Send(botClient, update, msg);
        }
        else
        {
            string msg = $"Команда /get";
            await Helpers.Message.Send(botClient, update, msg);
        }
    }
    else
    {
        string msg = $"Команда /get";
        await Helpers.Message.Send(botClient, update, msg);
    }
}

/// <summary>
/// Команда отработает для бота с botId 0.
/// Команда отработает при написание в чат "/equals", сработает только если текст сообщения будет /equals но при этом регистро не зависимо.
/// /equals_1 не сработает.
/// </summary>
[SlashHandler(CommandComparison.Equals, "/equals")]
public static async Task ExampleSlashEqualsCommand(ITelegramBotClient botClient, Update update)
{
    string msg = nameof(ExampleSlashEqualsCommand);
    await Helpers.Message.Send(botClient, update, msg);
}

/// <summary>
/// Команда отработает для бота с botId 0.
/// Команда отработает при написание в чат "/equalsreg", сработает только если текст сообщения будет /equalsreg но при этом регистро зависимо.
/// Не сработает/equals_1, /equalsreG, /Equalsreg.
/// </summary>
[SlashHandler(CommandComparison.Equals, StringComparison.Ordinal, "/equalsreg")]
public static async Task ExampleSlashEqualsRegisterCommand(ITelegramBotClient botClient, Update update)
{
    string msg = nameof(ExampleSlashEqualsRegisterCommand);
    await Helpers.Message.Send(botClient, update, msg);
}
```

Пример работы

<figure><img src="https://3539174730-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FscZIt8hLT3IQaTXwzfQD%2Fuploads%2Fh7inoU5GLRhshCcPDfiH%2F%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5-9.png?alt=media&#x26;token=a2e1ceb3-00a0-43b4-bd06-c53ecfa8d0d1" alt=""><figcaption></figcaption></figure>

Slash команды можно объединять с обычными командами

```csharp
public class Commands
{
    /// <summary>
    /// Напишите в чате "Тест"
    /// </summary>
    [ReplyMenuHandler("Тест")]
    [SlashHandler("/test")]
    public static async Task ExampleReply(ITelegramBotClient botClient, Update update)
    {
        string msg = "Бот: ответ бота тест";
        await PRTelegramBot.Helpers.Message.Send(botClient, update, msg);
    }
}
```
