> 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/rabota-s-kalendarem.md).

# Работа с календарем

PRTelegramBot предоставляет возможность работы с календарем из коробки. За основу был взят пакет CalendarPicker | karb0f0s <https://github.com/karb0f0s/CalendarPicker>.

Вид календаря представлен на рисунках ниже:

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

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

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

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

Для работы с календарем используется [CalendarUtils](/prtelegrambot/ru/api/utils/calendarutils.md).

Пример:

<pre class="language-csharp"><code class="lang-csharp"><strong>/// &#x3C;summary>
</strong>/// Напишите в чат Calendar
/// Вызов команды календаря
/// &#x3C;/summary>
[ReplyMenuHandler("Calendar")]
public static async Task PickCalendar(IBotContext context)
{
    try
    {
        await CalendarUtils.Create(context, CustomTHeader.CalendarCallback, "Выберите дату:");
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex);
    }
}

/// &#x3C;summary>
/// Напишите в чат EngCalendar
/// Вызов команды календаря на английском языке
/// &#x3C;/summary>
[ReplyMenuHandler("EngCalendar")]
public static async Task EngPickCalendar(IBotContext context)
{
    try
    {
        await CalendarUtils.Create(context, CultureInfo.GetCultureInfo("en-US", false), CustomTHeader.CalendarCallback, "Choose date:");
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex);
    }
}

/// &#x3C;summary>
/// Обработка выбраной даты
/// &#x3C;/summary>
[InlineCallbackHandler&#x3C;CustomTHeader>(CustomTHeader.CalendarCallback)]
public static async Task PickDate(IBotContext context)
{
    var bot = context.Current;
    try
    {
        using (var inlineHandler = new InlineCallback&#x3C;CalendarTCommand>(context))
        {
            var command = inlineHandler.GetCommandByCallbackOrNull();
            await MessageSender.Send(context, command.Data.Date.ToString());
        }
    }
    catch (Exception ex)
    {
        bot.Events.OnErrorLogInvoke(new ErrorLogEventArgs(context, ex));
    }
}
</code></pre>
