add preset list
This commit is contained in:
parent
a457ea1a19
commit
19599933e3
@ -23,11 +23,13 @@ internal static class Interactions
|
|||||||
public static readonly string backButtonText = "↩️Назад";
|
public static readonly string backButtonText = "↩️Назад";
|
||||||
public static readonly string gotoPresetsButtonText = "🎨Сохранённые стили";
|
public static readonly string gotoPresetsButtonText = "🎨Сохранённые стили";
|
||||||
public static readonly string doneButtonText = "✅Готово";
|
public static readonly string doneButtonText = "✅Готово";
|
||||||
|
public static readonly string choosePresetButtonText = "☑️Сделать активным";
|
||||||
|
|
||||||
public static readonly IReplyMarkup mainReplyMarkup = new ReplyKeyboardMarkup([[new KeyboardButton("▶️Начать")], [new KeyboardButton("⚙️Настройки")]]);
|
public static readonly IReplyMarkup mainReplyMarkup = new ReplyKeyboardMarkup([[new KeyboardButton("▶️Начать")], [new KeyboardButton("⚙️Настройки")]]);
|
||||||
public static readonly IReplyMarkup backButtonReplyMarkup = new ReplyKeyboardMarkup(new KeyboardButton("↩️Назад"));
|
public static readonly IReplyMarkup backButtonReplyMarkup = new ReplyKeyboardMarkup(new KeyboardButton("↩️Назад"));
|
||||||
public static readonly IReplyMarkup resultActionReplyMarkup = new ReplyKeyboardMarkup([new KeyboardButton(doneButtonText)]);
|
public static readonly IReplyMarkup resultActionReplyMarkup = new ReplyKeyboardMarkup([new KeyboardButton(doneButtonText)]);
|
||||||
public static readonly IReplyMarkup settingsReplyMarkup = new ReplyKeyboardMarkup([[new KeyboardButton(gotoPresetsButtonText)], [new KeyboardButton(backButtonText)]]);
|
public static readonly IReplyMarkup settingsReplyMarkup = new ReplyKeyboardMarkup([[new KeyboardButton(gotoPresetsButtonText)], [new KeyboardButton(backButtonText)]]);
|
||||||
|
public static readonly IReplyMarkup presetsReplyMarkup = new ReplyKeyboardMarkup([[new KeyboardButton(choosePresetButtonText)], [new KeyboardButton(backButtonText)]]);
|
||||||
|
|
||||||
static readonly string[] digitEmojis = ["0️⃣", "1️⃣", "2️⃣", "3️⃣", "4️⃣", "5️⃣", "6️⃣", "7️⃣", "8️⃣", "9️⃣"];
|
static readonly string[] digitEmojis = ["0️⃣", "1️⃣", "2️⃣", "3️⃣", "4️⃣", "5️⃣", "6️⃣", "7️⃣", "8️⃣", "9️⃣"];
|
||||||
|
|
||||||
@ -59,7 +61,7 @@ internal static class Interactions
|
|||||||
return message == backButtonText;
|
return message == backButtonText;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static string MakePresetListMessage(string[] presetNames)
|
public static string MakePresetListMessage(string[] presetNames, int activePresetIndex)
|
||||||
{
|
{
|
||||||
StringBuilder msg = new StringBuilder();
|
StringBuilder msg = new StringBuilder();
|
||||||
msg.Append("Твои сохранённые стили:\n");
|
msg.Append("Твои сохранённые стили:\n");
|
||||||
@ -68,6 +70,10 @@ internal static class Interactions
|
|||||||
msg.Append(DigitsToEmoji((i + 1).ToString()));
|
msg.Append(DigitsToEmoji((i + 1).ToString()));
|
||||||
msg.Append(' ');
|
msg.Append(' ');
|
||||||
msg.Append(presetNames[i]);
|
msg.Append(presetNames[i]);
|
||||||
|
if (i == activePresetIndex)
|
||||||
|
{
|
||||||
|
msg.Append(" (выбран)");
|
||||||
|
}
|
||||||
msg.Append('\n');
|
msg.Append('\n');
|
||||||
}
|
}
|
||||||
if (presetNames.Length == 0)
|
if (presetNames.Length == 0)
|
||||||
|
@ -212,7 +212,17 @@ internal class TelegramBot
|
|||||||
{
|
{
|
||||||
replied = true;
|
replied = true;
|
||||||
dialogData.state = DialogState.ViewingPresets;
|
dialogData.state = DialogState.ViewingPresets;
|
||||||
await botClient.SendTextMessageAsync(message.Chat.Id, Interactions.MakePresetListMessage((await GetUserPresets(user)).Select(preset => preset.Name).ToArray()), replyMarkup: Interactions.backButtonReplyMarkup);
|
(UserPreset[] presets, long activePresetId) = await GetUserPresets(user);
|
||||||
|
int activePresetIndex = 0;
|
||||||
|
for (int i = 0; i < presets.Length; ++i)
|
||||||
|
{
|
||||||
|
if (presets[i].Id == activePresetId)
|
||||||
|
{
|
||||||
|
activePresetIndex = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
await botClient.SendTextMessageAsync(message.Chat.Id, Interactions.MakePresetListMessage(presets.Select(preset => preset.Name).ToArray(), activePresetIndex), replyMarkup: Interactions.backButtonReplyMarkup);
|
||||||
}
|
}
|
||||||
else if (messageText == Interactions.backButtonText)
|
else if (messageText == Interactions.backButtonText)
|
||||||
{
|
{
|
||||||
@ -349,19 +359,27 @@ internal class TelegramBot
|
|||||||
cmd = database.CreateCommand();
|
cmd = database.CreateCommand();
|
||||||
UserPreset defaultPreset = UserPreset.Default();
|
UserPreset defaultPreset = UserPreset.Default();
|
||||||
defaultPreset.OwnerId = u.Id;
|
defaultPreset.OwnerId = u.Id;
|
||||||
await AddPresetToDatabase(defaultPreset);
|
long defaultPresetId = await AddPresetToDatabase(defaultPreset);
|
||||||
|
|
||||||
|
cmd = database.CreateCommand();
|
||||||
|
cmd.CommandText = "UPDATE users SET selected_preset = $1 WHERE id = $2";
|
||||||
|
cmd.Parameters.AddWithValue("$1", defaultPresetId);
|
||||||
|
cmd.Parameters.AddWithValue("$2", u.Id);
|
||||||
|
await cmd.ExecuteNonQueryAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
async Task AddPresetToDatabase(UserPreset p)
|
async Task<long> AddPresetToDatabase(UserPreset p)
|
||||||
{
|
{
|
||||||
var cmd = database.CreateCommand();
|
var cmd = database.CreateCommand();
|
||||||
cmd.CommandText = "INSERT INTO user_presets (user_id, name, outline_color, title_color, subtitle_color) VALUES ($1, $2, $3, $4, $5)";
|
cmd.CommandText = @"
|
||||||
|
INSERT INTO user_presets (user_id, name, outline_color, title_color, subtitle_color) VALUES ($1, $2, $3, $4, $5);
|
||||||
|
SELECT last_insert_rowid();";
|
||||||
cmd.Parameters.AddWithValue("$1", p.OwnerId);
|
cmd.Parameters.AddWithValue("$1", p.OwnerId);
|
||||||
cmd.Parameters.AddWithValue("$2", p.Name);
|
cmd.Parameters.AddWithValue("$2", p.Name);
|
||||||
cmd.Parameters.AddWithValue("$3", (long)p.OutlineColor.ToArgb() & 0xFFFFFFL);
|
cmd.Parameters.AddWithValue("$3", (long)p.OutlineColor.ToArgb() & 0xFFFFFFL);
|
||||||
cmd.Parameters.AddWithValue("$4", (long)p.TitleColor.ToArgb() & 0xFFFFFFL);
|
cmd.Parameters.AddWithValue("$4", (long)p.TitleColor.ToArgb() & 0xFFFFFFL);
|
||||||
cmd.Parameters.AddWithValue("$5", (long)p.SubtitleColor.ToArgb() & 0xFFFFFFL);
|
cmd.Parameters.AddWithValue("$5", (long)p.SubtitleColor.ToArgb() & 0xFFFFFFL);
|
||||||
await cmd.ExecuteNonQueryAsync();
|
return (long)await cmd.ExecuteScalarAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
async Task<bool> IsUserInDatabase(User u)
|
async Task<bool> IsUserInDatabase(User u)
|
||||||
@ -373,10 +391,10 @@ internal class TelegramBot
|
|||||||
return await reader.ReadAsync();
|
return await reader.ReadAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
async Task<UserPreset[]> GetUserPresets(User u)
|
async Task<(UserPreset[], long)> GetUserPresets(User u)
|
||||||
{
|
{
|
||||||
var cmd = database.CreateCommand();
|
var cmd = database.CreateCommand();
|
||||||
cmd.CommandText = "SELECT id, user_id, name, outline_color, title_color, subtitle_color FROM user_presets WHERE id = $1";
|
cmd.CommandText = "SELECT id, user_id, name, outline_color, title_color, subtitle_color FROM user_presets WHERE user_id = $1";
|
||||||
cmd.Parameters.AddWithValue("$1", u.Id);
|
cmd.Parameters.AddWithValue("$1", u.Id);
|
||||||
using var reader = await cmd.ExecuteReaderAsync();
|
using var reader = await cmd.ExecuteReaderAsync();
|
||||||
List<UserPreset> result = new List<UserPreset>();
|
List<UserPreset> result = new List<UserPreset>();
|
||||||
@ -392,7 +410,7 @@ internal class TelegramBot
|
|||||||
SubtitleColor = System.Drawing.Color.FromArgb((int)(0xff000000L | reader.GetInt64(5))),
|
SubtitleColor = System.Drawing.Color.FromArgb((int)(0xff000000L | reader.GetInt64(5))),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
return result.ToArray();
|
return (result.ToArray(), (await GetActiveUserPreset(u)).Id);
|
||||||
}
|
}
|
||||||
|
|
||||||
async Task<UserPreset?> GetUserPresetByName(User u, string name)
|
async Task<UserPreset?> GetUserPresetByName(User u, string name)
|
||||||
|
Loading…
Reference in New Issue
Block a user