> For the complete documentation index, see [llms.txt](https://prethink.gitbook.io/prtelegrambot/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://prethink.gitbook.io/prtelegrambot/ru/obrabotka-komand/obrabotka-inline-komand/inlinecallback-s-podtverzhdeniem.md).

# InlineCallback с подтверждением

## InlineInlineCallback с подтверждением и базовой обработкой результата нет

Для InlineCallback кнопок можно сделать обертку с помощью которой пользователь должен будет сначала подтвердить действие и только после этого оно будет выполнено.

Создаете InlineCallback кнопку, после чего оборачиваете ее с помощью [InlineCallbackWithConfirmation](/prtelegrambot/ru/api/klassy/inlinecallbackwithconfirmation.md).

Пример кода:

```csharp
/// <summary>
/// Команда отработает для бота с botId 0.
/// Команда отработает если пользователь напишет InlineConfirm.
/// </summary>
[ReplyMenuHandler("InlineConfirm")]
public static async Task InlineConfirm(IBotContext context)
{
    //Кнопка для которой нужно создать подтверждение.
    var exampleInlineCallback = new InlineCallback<EntityTCommand<long>>("Кнопка с подтвержением", CustomTHeaderTwo.ExampleTwo, new EntityTCommand<long>(3, ActionWithLastMessage.Delete));
    //Обертка кнопки.
    var exampleWithConfirmation = new InlineCallbackWithConfirmation(exampleInlineCallback, ActionWithLastMessage.Delete);

    //Создание нового меню.
    List<IInlineContent> menu = new() { exampleWithConfirmation } ;
    var testMenu = MenuGenerator.InlineKeyboard(1, menu);
    var option = new OptionMessage();

    //Передача меню в настройки
    option.MenuInlineKeyboardMarkup = testMenu;
    string msg = "InlineCallback с подтверждением";
    //Отправка сообщение с меню
    await MessageSender.Send(context, msg, option);
}
```

<figure><img src="/files/sSusz5UjPx5JZTcXIq3U" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/X5VKhKsVhR35cMrNu3Ub" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/J7gZbqoKW1npnFgXZijo" alt=""><figcaption></figcaption></figure>

Если на кнопку "нет " не делать обработку, она по умолчанию удалит текущее сообщение.

## InlineInlineCallback с подтверждением и кнопкой назад или кастомной обработкой кнопки нет

```csharp
/// <summary>
/// Команда отработает для бота с botId 0.
/// Команда отработает если пользователь напишет InlineConfirmWithBack.
/// </summary>
[ReplyMenuHandler("InlineConfirmWithBack")]
[InlineCallbackHandler<CustomTHeaderTwo>(CustomTHeaderTwo.ExampleBack)]
public static async Task InlineConfirmWithBack(IBotContext context)
{
    //Кнопка для которой нужно создать подтверждение.
    var exampleInlineCallback = new InlineCallback<EntityTCommand<long>>("Кнопка с подтвержением", CustomTHeaderTwo.ExampleTwo, new EntityTCommand<long>(3, ActionWithLastMessage.Delete));
    //Кнопка обработчик назад или кастомная.
    var exampleBack = new InlineCallback("Назад", CustomTHeaderTwo.ExampleBack);

    //Обертка кнопки.
    var exampleWithConfirmation = new InlineCallbackWithConfirmation(exampleInlineCallback, ActionWithLastMessage.Edit, exampleBack);

    //Создание нового меню.
    List<IInlineContent> menu = new() { exampleWithConfirmation };
    var testMenu = MenuGenerator.InlineKeyboard(1, menu);
    var option = new OptionMessage();

    //Передача меню в настройки
    option.MenuInlineKeyboardMarkup = testMenu;
    string msg = "InlineCallback с подтверждением и обработкой кнопки назад или кастомной";
    //Отправка сообщение с меню
    if (context.Update.Type == Telegram.Bot.Types.Enums.UpdateType.CallbackQuery)
        await MessageEditor.Edit(context, msg, option);
    else
        await MessageSender.Send(context, msg, option);
}
```

<figure><img src="/files/3tFmAHrIP7bhVEz4HvTs" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/RjVxC80iR0K0iu5aEpZA" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/JSgW48E3IsWTirJ3UaA1" alt=""><figcaption></figcaption></figure>
