Обработка 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