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

Описание параметров

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

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

/// <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)

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

/// <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);
}

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

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

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);
    }
}

Last updated