- Регистрация
- 20.02.2022
- Сообщения
- 648
- Благодарностей
- 170
- Баллы
- 43
Всем привет!
Подаскажите как из C# построить клавиатуру для телеграмм
Входные данные mm_yyyy (переменная) в формате 02.2022 нужно сформировать клавиатуру как здесь
Вот что сгенерировал GPT-3 (есть всего лишь 1 ошибка)
Как я все распрекделил:
На выходе в переменную должно попасть (но логически, то есть не всегда 1 число попадает на понедельник в место этого "text": "", "callback_data": "def"
:
Подаскажите как из C# построить клавиатуру для телеграмм
Входные данные mm_yyyy (переменная) в формате 02.2022 нужно сформировать клавиатуру как здесь
Вот что сгенерировал GPT-3 (есть всего лишь 1 ошибка)
C#:
using System;
using System.Collections.Generic;
using Newtonsoft.Json;
namespace KeyboardGeneration
{
public class InlineKeyboardButton
{
public string text { get; set; }
public string callback_data { get; set; }
}
public class Keyboard
{
public List<List<InlineKeyboardButton>> inline_keyboard { get; set; }
}
class Program
{
static void Main(string[] args)
{
var dateString = "02.2023";
var date = DateTime.ParseExact(dateString, "MM.yyyy", System.Globalization.CultureInfo.InvariantCulture);
var daysOfWeek = new string[] { "П", "В", "С", "Ч", "П", "С", "В" };
var keyboard = new Keyboard();
keyboard.inline_keyboard = new List<List<InlineKeyboardButton>>();
var firstRow = new List<InlineKeyboardButton>
{
new InlineKeyboardButton { text = dateString, callback_data = "def" }
};
keyboard.inline_keyboard.Add(firstRow);
var secondRow = new List<InlineKeyboardButton>();
for (int i = 0; i < daysOfWeek.Length; i++)
{
secondRow.Add(new InlineKeyboardButton
{
text = daysOfWeek[i],
callback_data = "def"
});
}
keyboard.inline_keyboard.Add(secondRow);
var startOfMonth = new DateTime(date.Year, date.Month, 1);
var firstDayOfWeek = (int)startOfMonth.DayOfWeek;
var daysInMonth = DateTime.DaysInMonth(date.Year, date.Month);
for (int i = 0; i < daysInMonth; i++)
{
var day = new DateTime(date.Year, date.Month, i + 1);
var row = new List<InlineKeyboardButton>();
for (int j = 0; j < 7; j++)
{
var button = new InlineKeyboardButton();
if (i == 0 && j < firstDayOfWeek || i + j >= daysInMonth)
{
button.text = "";
button.callback_data = "def";
}
else
{
button.text = day.ToString("dd.MM.yyyy");
button.callback_data = day.ToString("dd.MM.yyyy");
day = day.AddDays(1);
}
row.Add(button);
}
keyboard.inline_keyboard.Add(row);
}
var keyboardJson = JsonConvert.SerializeObject(keyboard);
Console.WriteLine(keyboardJson);
project.Variables["InlineKeyboardButton"].Value = keyboardJson;
}
}
}
На выходе в переменную должно попасть (но логически, то есть не всегда 1 число попадает на понедельник в место этого "text": "", "callback_data": "def"
:
JSON:
{
"inline_keyboard": [
[
{
"text": "{-Variable.mm_yyyyy-}",
"callback_data": "def"
}
],
[
{
"text": "П",
"callback_data": "def"
},
{
"text": "В",
"callback_data": "def"
},
{
"text": "С",
"callback_data": "def"
},
{
"text": "Ч",
"callback_data": "def"
},
{
"text": "П",
"callback_data": "def"
},
{
"text": "С",
"callback_data": "def"
},
{
"text": "В",
"callback_data": "def"
}
],
[
{
"text": "01.02.2023",
"callback_data": "01.02.2023"
},
{
"text": "02.02.2023",
"callback_data": "02.02.2023"
},
{
"text": "03.02.2023",
"callback_data": "03.02.2023"
},
{
"text": "04.02.2023",
"callback_data": "04.02.2023"
},
{
"text": "05.02.2023",
"callback_data": "05.02.2023"
},
{
"text": "06.02.2023",
"callback_data": "06.02.2023"
},
{
"text": "05.02.2023",
"callback_data": "05.02.2023"
}
],
[
{
"text": "<",
"callback_data": "01.2023"
},
{
"text": "",
"callback_data": "def"
},
{
"text": ">",
"callback_data": "03.2023"
}
]
]
}