From 121a788c17e07d0ad513071e1ec1c1012d5acb3a Mon Sep 17 00:00:00 2001 From: Florian Zevedei Date: Fri, 8 Dec 2023 01:52:47 +0100 Subject: [PATCH 01/39] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 4a20ed5..de6c301 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # .NET Telegram Bot Framework - Context based addon -[![NuGet version (TelegramBotBase)](https://img.shields.io/nuget/vpre/TelegramBotBase.svg?style=flat-square)](https://www.nuget.org/packages/TelegramBotBase/) +[![NuGet version (TelegramBotBase)](https://img.shields.io/nuget/v/TelegramBotBase.svg?style=flat-square)](https://www.nuget.org/packages/TelegramBotBase/) [![Telegram chat](https://img.shields.io/badge/Support_Chat-Telegram-blue.svg?style=flat-square)](https://www.t.me/tgbotbase) [![License](https://img.shields.io/github/license/MajMcCloud/telegrambotframework.svg?style=flat-square&maxAge=2592000&label=License)](https://raw.githubusercontent.com/MajMcCloud/TelegramBotFramework/master/LICENCE.md) @@ -1087,4 +1087,4 @@ Want to use Inline- and ReplyMarkup at the same time ? Here is an example how yo Alpha: Full Dependency Injection example within this framework. -- [Examples/DependencyInjection](Examples/DependencyInjection) \ No newline at end of file +- [Examples/DependencyInjection](Examples/DependencyInjection) From a63f71268cd629549f8510a4d66d10b896fd9e0d Mon Sep 17 00:00:00 2001 From: Florian Zevedei Date: Thu, 28 Dec 2023 15:17:14 +0100 Subject: [PATCH 02/39] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2095ea6..cb58554 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ **Support group: [@tgbotbase](https://t.me/tgbotbase)** -**Discord Server: [https://discord.gg/p3PPhYbTf](https://discord.gg/p3PPhYbTf)** +**Discord Server: [https://discord.gg/V3PxreDYfE](https://discord.gg/V3PxreDYfE)** **Releases: [GitHub](https://github.com/MajMcCloud/TelegramBotFramework/releases)** From 83e09aec2aa22fbe358d78cbbd09be8bf6e02bea Mon Sep 17 00:00:00 2001 From: Florian Zevedei Date: Fri, 29 Dec 2023 14:38:11 +0100 Subject: [PATCH 03/39] Removing System.Drawing.Common dependency --- TelegramBotBase/TelegramBotBase.nuspec | 2 -- 1 file changed, 2 deletions(-) diff --git a/TelegramBotBase/TelegramBotBase.nuspec b/TelegramBotBase/TelegramBotBase.nuspec index 5dfff90..ec58bce 100644 --- a/TelegramBotBase/TelegramBotBase.nuspec +++ b/TelegramBotBase/TelegramBotBase.nuspec @@ -14,12 +14,10 @@ - - From 4e55fd42d679a11f4c7ddccd95f770119296fb9f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 16 Jan 2024 19:28:47 +0000 Subject: [PATCH 04/39] Bump Microsoft.Data.SqlClient Bumps [Microsoft.Data.SqlClient](https://github.com/dotnet/sqlclient) from 5.0.0 to 5.1.3. - [Release notes](https://github.com/dotnet/sqlclient/releases) - [Changelog](https://github.com/dotnet/SqlClient/blob/main/CHANGELOG.md) - [Commits](https://github.com/dotnet/sqlclient/compare/v5.0.0...v5.1.3) --- updated-dependencies: - dependency-name: Microsoft.Data.SqlClient dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- .../TelegramBotBase.Extensions.Serializer.Database.MSSQL.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TelegramBotBase.Extensions.Serializer.Database.MSSQL/TelegramBotBase.Extensions.Serializer.Database.MSSQL.csproj b/TelegramBotBase.Extensions.Serializer.Database.MSSQL/TelegramBotBase.Extensions.Serializer.Database.MSSQL.csproj index 4d2c765..7acb0e4 100644 --- a/TelegramBotBase.Extensions.Serializer.Database.MSSQL/TelegramBotBase.Extensions.Serializer.Database.MSSQL.csproj +++ b/TelegramBotBase.Extensions.Serializer.Database.MSSQL/TelegramBotBase.Extensions.Serializer.Database.MSSQL.csproj @@ -16,7 +16,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From 084395e9620f2045255698cd4fd1ea70deb76947 Mon Sep 17 00:00:00 2001 From: Florian Zevedei Date: Wed, 24 Jan 2024 22:15:16 +0100 Subject: [PATCH 05/39] Bugfix, adding missing DeviceSession to UpdateResult --- TelegramBotBase/BotBase.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/TelegramBotBase/BotBase.cs b/TelegramBotBase/BotBase.cs index 05f8053..a481d6d 100644 --- a/TelegramBotBase/BotBase.cs +++ b/TelegramBotBase/BotBase.cs @@ -115,12 +115,13 @@ public sealed class BotBase if (ds == null) { ds = await Sessions.StartSession(e.DeviceId); - e.Device = ds; ds.LastMessage = e.RawData.Message; OnSessionBegins(new SessionBeginEventArgs(e.DeviceId, ds)); } + e.Device = ds; + var mr = new MessageResult(e.RawData); var i = 0; From d833b1e0889b5c56f152222a5e38bcf0b13b1fc3 Mon Sep 17 00:00:00 2001 From: Kataanee Date: Fri, 26 Jan 2024 12:42:41 +0700 Subject: [PATCH 06/39] Russian translation added --- TelegramBotBase/Localizations/Russian.cs | 36 ++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 TelegramBotBase/Localizations/Russian.cs diff --git a/TelegramBotBase/Localizations/Russian.cs b/TelegramBotBase/Localizations/Russian.cs new file mode 100644 index 0000000..9045d44 --- /dev/null +++ b/TelegramBotBase/Localizations/Russian.cs @@ -0,0 +1,36 @@ +namespace TelegramBotBase.Localizations; + +public sealed class Russian : Localization +{ + public Russian() + { + Values["Language"] = "Русский (Russian)"; + Values["ButtonGrid_Title"] = "Меню"; + Values["ButtonGrid_NoItems"] = "Нет доступных элементов."; + Values["ButtonGrid_PreviousPage"] = "◀️"; + Values["ButtonGrid_NextPage"] = "▶️"; + Values["ButtonGrid_CurrentPage"] = "Страница {0} из {1}"; + Values["ButtonGrid_SearchFeature"] = "💡 Отправьте сообщение, чтобы отфильтровать список. Нажмите на 🔍, чтобы сбросить фильтр."; + Values["ButtonGrid_Back"] = "Назада"; + Values["ButtonGrid_CheckAll"] = "Выделить все"; + Values["ButtonGrid_UncheckAll"] = "Отменить выбор"; + Values["CalendarPicker_Title"] = "Календарь / Выберите дату"; + Values["CalendarPicker_PreviousPage"] = "◀️"; + Values["CalendarPicker_NextPage"] = "▶️"; + Values["TreeView_Title"] = "Выберите пункт"; + Values["TreeView_LevelUp"] = "🔼 Обратно"; + Values["ToggleButton_On"] = "Вкл"; + Values["ToggleButton_Off"] = "Выкл"; + Values["ToggleButton_OnIcon"] = "⚫"; + Values["ToggleButton_OffIcon"] = "⚪"; + Values["ToggleButton_Title"] = "Переключить"; + Values["ToggleButton_Changed"] = "Выбрано"; + Values["MultiToggleButton_SelectedIcon"] = "✅"; + Values["MultiToggleButton_Title"] = "Множественный выбор"; + Values["MultiToggleButton_Changed"] = "Выбрано"; + Values["PromptDialog_Back"] = "Назад"; + Values["ToggleButton_Changed"] = "Настройки изменены"; + Values["ButtonGrid_SearchIcon"] = "🔍"; + Values["ButtonGrid_TagIcon"] = "📁"; + } +} \ No newline at end of file From 194d8ba3176c018fa821aa3fede2eb1802d310bf Mon Sep 17 00:00:00 2001 From: Kataanee Date: Fri, 26 Jan 2024 18:46:49 +0700 Subject: [PATCH 07/39] Revert "Russian translation added" This reverts commit d833b1e0889b5c56f152222a5e38bcf0b13b1fc3. --- TelegramBotBase/Localizations/Russian.cs | 36 ------------------------ 1 file changed, 36 deletions(-) delete mode 100644 TelegramBotBase/Localizations/Russian.cs diff --git a/TelegramBotBase/Localizations/Russian.cs b/TelegramBotBase/Localizations/Russian.cs deleted file mode 100644 index 9045d44..0000000 --- a/TelegramBotBase/Localizations/Russian.cs +++ /dev/null @@ -1,36 +0,0 @@ -namespace TelegramBotBase.Localizations; - -public sealed class Russian : Localization -{ - public Russian() - { - Values["Language"] = "Русский (Russian)"; - Values["ButtonGrid_Title"] = "Меню"; - Values["ButtonGrid_NoItems"] = "Нет доступных элементов."; - Values["ButtonGrid_PreviousPage"] = "◀️"; - Values["ButtonGrid_NextPage"] = "▶️"; - Values["ButtonGrid_CurrentPage"] = "Страница {0} из {1}"; - Values["ButtonGrid_SearchFeature"] = "💡 Отправьте сообщение, чтобы отфильтровать список. Нажмите на 🔍, чтобы сбросить фильтр."; - Values["ButtonGrid_Back"] = "Назада"; - Values["ButtonGrid_CheckAll"] = "Выделить все"; - Values["ButtonGrid_UncheckAll"] = "Отменить выбор"; - Values["CalendarPicker_Title"] = "Календарь / Выберите дату"; - Values["CalendarPicker_PreviousPage"] = "◀️"; - Values["CalendarPicker_NextPage"] = "▶️"; - Values["TreeView_Title"] = "Выберите пункт"; - Values["TreeView_LevelUp"] = "🔼 Обратно"; - Values["ToggleButton_On"] = "Вкл"; - Values["ToggleButton_Off"] = "Выкл"; - Values["ToggleButton_OnIcon"] = "⚫"; - Values["ToggleButton_OffIcon"] = "⚪"; - Values["ToggleButton_Title"] = "Переключить"; - Values["ToggleButton_Changed"] = "Выбрано"; - Values["MultiToggleButton_SelectedIcon"] = "✅"; - Values["MultiToggleButton_Title"] = "Множественный выбор"; - Values["MultiToggleButton_Changed"] = "Выбрано"; - Values["PromptDialog_Back"] = "Назад"; - Values["ToggleButton_Changed"] = "Настройки изменены"; - Values["ButtonGrid_SearchIcon"] = "🔍"; - Values["ButtonGrid_TagIcon"] = "📁"; - } -} \ No newline at end of file From a632440efdcb6dd82b049cce356e2301d757cda3 Mon Sep 17 00:00:00 2001 From: Kataanee Date: Fri, 26 Jan 2024 18:48:43 +0700 Subject: [PATCH 08/39] Add PostgreSQL serializer --- .../BotBaseBuilderExtensions.cs | 92 +++++++ .../PostgreSqlSerializer.cs | 252 ++++++++++++++++++ .../README.md | 27 ++ ...ions.Serializer.Database.PostgreSql.csproj | 29 ++ .../create_tables.sql | 25 ++ 5 files changed, 425 insertions(+) create mode 100644 TelegramBotBase.Extensions.Serializer.Database.PostgreSql/BotBaseBuilderExtensions.cs create mode 100644 TelegramBotBase.Extensions.Serializer.Database.PostgreSql/PostgreSqlSerializer.cs create mode 100644 TelegramBotBase.Extensions.Serializer.Database.PostgreSql/README.md create mode 100644 TelegramBotBase.Extensions.Serializer.Database.PostgreSql/TelegramBotBase.Extensions.Serializer.Database.PostgreSql.csproj create mode 100644 TelegramBotBase.Extensions.Serializer.Database.PostgreSql/create_tables.sql diff --git a/TelegramBotBase.Extensions.Serializer.Database.PostgreSql/BotBaseBuilderExtensions.cs b/TelegramBotBase.Extensions.Serializer.Database.PostgreSql/BotBaseBuilderExtensions.cs new file mode 100644 index 0000000..ad0556b --- /dev/null +++ b/TelegramBotBase.Extensions.Serializer.Database.PostgreSql/BotBaseBuilderExtensions.cs @@ -0,0 +1,92 @@ +using System; +using TelegramBotBase.Builder; +using TelegramBotBase.Builder.Interfaces; + +namespace TelegramBotBase.Extensions.Serializer.Database.PostgreSql +{ + /// + /// Provides extension methods for configuring the use of PostgreSQL Server Database for session serialization. + /// + public static class BotBaseBuilderExtensions + { + /// + /// Uses an PostgreSQL Server Database to save and restore sessions. + /// + /// The session serialization stage builder. + /// The connection string to the PostgreSQL database. + /// The fallback form type. + /// The prefix for database table names (default is "tgb_"). + /// The language selection stage builder. + public static ILanguageSelectionStage UsePostgreSqlDatabase( + this ISessionSerializationStage builder, + string connectionString, Type fallbackForm = null, + string tablePrefix = "tgb_") + { + var serializer = new PostgreSqlSerializer(connectionString, tablePrefix, fallbackForm); + + builder.UseSerialization(serializer); + + return builder as BotBaseBuilder; + } + + + /// + /// Uses an PostgreSQL Server Database to save and restore sessions. + /// + /// The session serialization stage builder. + /// The host or IP address of the PostgreSQL server. + /// The port number for the PostgreSQL server. + /// The name of the PostgreSQL database. + /// The user ID for connecting to the PostgreSQL server. + /// The password for connecting to the PostgreSQL server. + /// The fallback form type. + /// The prefix for database table names (default is "tgb_"). + /// The language selection stage builder. + public static ILanguageSelectionStage UsePostgreSqlDatabase( + this ISessionSerializationStage builder, + string hostOrIp, string port, + string databaseName, string userId, + string password, Type fallbackForm = null, + string tablePrefix = "tgb_") + { + var connectionString = $"Host={hostOrIp};Port={port};Database={databaseName};Username={userId};Password={password}"; + + var serializer = new PostgreSqlSerializer(connectionString, tablePrefix, fallbackForm); + + builder.UseSerialization(serializer); + + return builder as BotBaseBuilder; + } + + /// + /// Uses an PostgreSQL Server Database with Windows Authentication to save and restore sessions. + /// + /// The session serialization stage builder. + /// The host or IP address of the PostgreSQL server. + /// The port number for the PostgreSQL server. + /// The name of the PostgreSQL database. + /// A flag indicating whether to use Windows Authentication (true) or not (false). + /// The fallback form type. + /// The prefix for database table names (default is "tgb_"). + /// The language selection stage builder. + public static ILanguageSelectionStage UsePostgreSqlDatabase( + this ISessionSerializationStage builder, + string hostOrIp, string port, + string databaseName, bool integratedSecurity = true, + Type fallbackForm = null, string tablePrefix = "tgb_") + { + if (!integratedSecurity) + { + throw new ArgumentOutOfRangeException(); + } + + var connectionString = $"Host={hostOrIp};Port={port};Database={databaseName};Integrated Security=true;"; + + var serializer = new PostgreSqlSerializer(connectionString, tablePrefix, fallbackForm); + + builder.UseSerialization(serializer); + + return builder as BotBaseBuilder; + } + } +} diff --git a/TelegramBotBase.Extensions.Serializer.Database.PostgreSql/PostgreSqlSerializer.cs b/TelegramBotBase.Extensions.Serializer.Database.PostgreSql/PostgreSqlSerializer.cs new file mode 100644 index 0000000..7875b70 --- /dev/null +++ b/TelegramBotBase.Extensions.Serializer.Database.PostgreSql/PostgreSqlSerializer.cs @@ -0,0 +1,252 @@ +using Npgsql; +using System; +using System.Data; +using NpgsqlTypes; +using TelegramBotBase.Args; +using TelegramBotBase.Base; +using TelegramBotBase.Form; +using TelegramBotBase.Interfaces; + +namespace TelegramBotBase.Extensions.Serializer.Database.PostgreSql +{ + /// + /// Represents a PostgreSQL implementation of the for saving and loading form states. + /// + public class PostgreSqlSerializer : IStateMachine + { + private readonly string insertIntoSessionSql; + private readonly string insertIntoSessionsDataSql; + private readonly string selectAllDevicesSessionsSql; + private readonly string selectAllDevicesSessionsDataSql; + + /// + /// Initializes a new instance of the class. + /// + /// The connection string to the PostgreSQL database. + /// The prefix for database table names (default is "tgb_"). + /// The fallback state form type. + /// Thrown when is null. + /// Thrown when is not a subclass of . + public PostgreSqlSerializer(string connectionString, string tablePrefix = "tgb_", Type fallbackStateForm = null) + { + ConnectionString = connectionString ?? throw new ArgumentNullException(nameof(connectionString)); + + TablePrefix = tablePrefix; + + FallbackStateForm = fallbackStateForm; + + if (FallbackStateForm != null && !FallbackStateForm.IsSubclassOf(typeof(FormBase))) + { + throw new ArgumentException($"{nameof(FallbackStateForm)} is not a subclass of {nameof(FormBase)}"); + } + + insertIntoSessionSql = "INSERT INTO " + TablePrefix + + "devices_sessions (deviceId, deviceTitle, \"FormUri\", \"QualifiedName\") VALUES (@deviceId, @deviceTitle, @FormUri, @QualifiedName)"; + insertIntoSessionsDataSql = "INSERT INTO " + TablePrefix + "devices_sessions_data (deviceId, key, value, type) VALUES (@deviceId, @key, @value, @type)"; + + selectAllDevicesSessionsSql = "SELECT * FROM " + TablePrefix + "devices_sessions"; + selectAllDevicesSessionsDataSql = "SELECT * FROM " + TablePrefix + "devices_sessions_data WHERE deviceId = @deviceId"; + } + + /// + /// Gets the connection string to the PostgreSQL database. + /// + public string ConnectionString { get; } + + /// + /// Gets or sets the table name prefix for database tables. + /// + public string TablePrefix { get; set; } + + /// + /// Gets or sets the fallback state form type. + /// + public Type FallbackStateForm { get; set; } + + /// + /// + /// Saves form states to the PostgreSQL database. + /// + /// The containing the states to be saved. + public void SaveFormStates(SaveStatesEventArgs e) + { + var container = e.States; + + //Cleanup old Session data + Cleanup(); + + using (var connection = new NpgsqlConnection(ConnectionString)) + { + connection.Open(); + + //Store session data in database + foreach (var state in container.States) + { + using (var sessionCommand = connection.CreateCommand()) + { + sessionCommand.CommandText = insertIntoSessionSql; + + sessionCommand.Parameters.Add(new NpgsqlParameter("@deviceId", NpgsqlDbType.Bigint){Value = state.DeviceId }); + sessionCommand.Parameters.Add(new NpgsqlParameter("@deviceTitle", DbType.StringFixedLength){Value = state.ChatTitle ?? string.Empty}); + sessionCommand.Parameters.Add(new NpgsqlParameter("@FormUri", DbType.StringFixedLength) {Value = state.FormUri}); + sessionCommand.Parameters.Add(new NpgsqlParameter("@QualifiedName", DbType.StringFixedLength){Value = state.QualifiedName }); + + sessionCommand.ExecuteNonQuery(); + } + } + } + + using (var connection = new NpgsqlConnection(ConnectionString)) + { + connection.Open(); + + foreach (var state in container.States) + { + SaveSessionsData(state, connection); + } + } + } + + /// + /// + /// Loads form states from the PostgreSQL database. + /// + /// A containing the loaded form states. + public StateContainer LoadFormStates() + { + var stateContainer = new StateContainer(); + + using (var connection = new NpgsqlConnection(ConnectionString)) + { + connection.Open(); + + using (var sessionCommand = connection.CreateCommand()) + { + sessionCommand.CommandText = selectAllDevicesSessionsSql; + + var sessionTable = new DataTable(); + using (var dataAdapter = new NpgsqlDataAdapter(sessionCommand)) + { + dataAdapter.Fill(sessionTable); + + foreach (DataRow row in sessionTable.Rows) + { + var stateEntry = new StateEntry + { + DeviceId = (long)row["deviceId"], + ChatTitle = row["deviceTitle"].ToString(), + FormUri = row["FormUri"].ToString(), + QualifiedName = row["QualifiedName"].ToString() + }; + + stateContainer.States.Add(stateEntry); + + if (stateEntry.DeviceId > 0) + { + stateContainer.ChatIds.Add(stateEntry.DeviceId); + } + else + { + stateContainer.GroupIds.Add(stateEntry.DeviceId); + } + + LoadDataTable(connection, row, stateEntry); + } + } + } + } + + return stateContainer; + } + + /// + /// Cleans up old session data in the PostgreSQL database. + /// + private void Cleanup() + { + using (var connection = new NpgsqlConnection(ConnectionString)) + { + connection.Open(); + + using (var clearCommand = connection.CreateCommand()) + { + clearCommand.CommandText = $"DELETE FROM {TablePrefix}devices_sessions_data"; + clearCommand.ExecuteNonQuery(); + } + + using (var clearCommand = connection.CreateCommand()) + { + clearCommand.CommandText = $"DELETE FROM {TablePrefix}devices_sessions"; + clearCommand.ExecuteNonQuery(); + } + } + } + + /// + /// Saves session data to the PostgreSQL database. + /// + /// The state entry containing session data to be saved. + /// The NpgsqlConnection used for the database interaction. + private void SaveSessionsData(StateEntry state, NpgsqlConnection connection) + { + foreach (var data in state.Values) + { + using (var dataCommand = connection.CreateCommand()) + { + dataCommand.CommandText = insertIntoSessionsDataSql; + + dataCommand.Parameters.Add(new NpgsqlParameter("@deviceId", NpgsqlDbType.Bigint) { Value = state.DeviceId }); + dataCommand.Parameters.Add(new NpgsqlParameter("@key", DbType.StringFixedLength) { Value = data.Key }); + + var type = data.Value.GetType(); + + if (type.IsPrimitive || type == typeof(string)) + { + dataCommand.Parameters.Add(new NpgsqlParameter("@value", NpgsqlDbType.Text) { Value = data.Value }); + } + else + { + var json = System.Text.Json.JsonSerializer.Serialize(data.Value); + dataCommand.Parameters.Add(new NpgsqlParameter("@value", NpgsqlDbType.Text) { Value = json }); + } + + dataCommand.Parameters.Add(new NpgsqlParameter("@type", DbType.StringFixedLength) { Value = type.AssemblyQualifiedName }); + + dataCommand.ExecuteNonQuery(); + } + } + } + + /// + /// Loads session data from the PostgreSQL database. + /// + /// The NpgsqlConnection used for the database interaction. + /// The DataRow representing a session entry in the main sessions table. + /// The StateEntry object to which session data will be loaded. + private void LoadDataTable(NpgsqlConnection connection, DataRow row, StateEntry stateEntry) + { + using (var sessionCommand = connection.CreateCommand()) + { + sessionCommand.CommandText = selectAllDevicesSessionsDataSql; + sessionCommand.Parameters.Add(new NpgsqlParameter("@deviceId", row["deviceId"])); + + var dataCommandTable = new DataTable(); + using (var npgSqlDataAdapter = new NpgsqlDataAdapter(sessionCommand)) + { + npgSqlDataAdapter.Fill(dataCommandTable); + + foreach (DataRow dataRow in dataCommandTable.Rows) + { + var key = dataRow["key"].ToString(); + var type = Type.GetType(dataRow["type"].ToString()); + + var value = System.Text.Json.JsonSerializer.Deserialize(dataRow["value"].ToString(), type); + + stateEntry.Values.Add(key, value); + } + } + + } + } + } +} \ No newline at end of file diff --git a/TelegramBotBase.Extensions.Serializer.Database.PostgreSql/README.md b/TelegramBotBase.Extensions.Serializer.Database.PostgreSql/README.md new file mode 100644 index 0000000..1f1377f --- /dev/null +++ b/TelegramBotBase.Extensions.Serializer.Database.PostgreSql/README.md @@ -0,0 +1,27 @@ +# TelegramBotBase.Extensions.Serializer.Database.PostgreSQL + +[![NuGet version (TelegramBotBase)](https://img.shields.io/nuget/v/TelegramBotBase.Extensions.Serializer.Database.PostgreSQL.svg?style=flat-square)](https://www.nuget.org/packages/TelegramBotBase.Extensions.Serializer.Database.PostgreSQL/) +[![Telegram chat](https://img.shields.io/badge/Support_Chat-Telegram-blue.svg?style=flat-square)](https://www.t.me/tgbotbase) + +[![License](https://img.shields.io/github/license/MajMcCloud/telegrambotframework.svg?style=flat-square&maxAge=2592000&label=License)](https://raw.githubusercontent.com/MajMcCloud/TelegramBotFramework/master/LICENCE.md) +[![Package Downloads](https://img.shields.io/nuget/dt/TelegramBotBase.Extensions.Serializer.Database.PostgreSQL.svg?style=flat-square&label=Package%20Downloads)](https://www.nuget.org/packages/TelegramBotBase.Extensions.Serializer.Database.PostgreSQL) + +## How to use + +```csharp +using TelegramBotBase.Extensions.Serializer.Database.PostgreSQL; + + +var bot = BotBaseBuilder + .Create() + .WithAPIKey(APIKey) + .DefaultMessageLoop() + .WithStartForm() + .NoProxy() + .OnlyStart() + .UseSQLDatabase("localhost", "telegram_bot") + .UseEnglish() + .Build(); + +bot.Start(); +``` diff --git a/TelegramBotBase.Extensions.Serializer.Database.PostgreSql/TelegramBotBase.Extensions.Serializer.Database.PostgreSql.csproj b/TelegramBotBase.Extensions.Serializer.Database.PostgreSql/TelegramBotBase.Extensions.Serializer.Database.PostgreSql.csproj new file mode 100644 index 0000000..7103081 --- /dev/null +++ b/TelegramBotBase.Extensions.Serializer.Database.PostgreSql/TelegramBotBase.Extensions.Serializer.Database.PostgreSql.csproj @@ -0,0 +1,29 @@ + + + + netstandard2.0;netcoreapp3.1;net8 + True + https://github.com/MajMcCloud/TelegramBotFramework + https://github.com/MajMcCloud/TelegramBotFramework + MIT + true + snupkg + 1.0.1 + 1.0.1 + 1.0.1 + + A session serializer for PostgreSQL Server. + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + diff --git a/TelegramBotBase.Extensions.Serializer.Database.PostgreSql/create_tables.sql b/TelegramBotBase.Extensions.Serializer.Database.PostgreSql/create_tables.sql new file mode 100644 index 0000000..d83bd38 --- /dev/null +++ b/TelegramBotBase.Extensions.Serializer.Database.PostgreSql/create_tables.sql @@ -0,0 +1,25 @@ +-- Enable uuid-ossp extension +CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; + +-- Create table tgb_devices_sessions +CREATE TABLE tgb_devices_sessions ( + deviceId bigint NOT NULL, + deviceTitle character varying(512) NOT NULL, + "FormUri" character varying(512) NOT NULL, + "QualifiedName" character varying(512) NOT NULL, + CONSTRAINT PK_tgb_devices_sessions_1 PRIMARY KEY (deviceId) +); + +-- Create table tgb_devices_sessions_data +CREATE TABLE tgb_devices_sessions_data ( + Id uuid DEFAULT uuid_generate_v4() NOT NULL, + deviceId bigint NOT NULL, + key character varying(512) NOT NULL, + "value" text NOT NULL, + "type" character varying(512) NOT NULL, + CONSTRAINT PK_tgb_devices_session_data PRIMARY KEY (Id) +); + +-- Add default constraint for Id column in tgb_devices_sessions_data +ALTER TABLE tgb_devices_sessions_data + ALTER COLUMN Id SET DEFAULT uuid_generate_v4(); From 254c002d4a4713e192655f425d7fed711f2730d7 Mon Sep 17 00:00:00 2001 From: Kataanee Date: Sat, 27 Jan 2024 13:14:15 +0700 Subject: [PATCH 09/39] Add Russian in ILanguageSelectionStage --- TelegramBotBase/Builder/BotBaseBuilder.cs | 12 ++++++++++++ .../Interfaces/ILanguageSelectionStage.cs | 19 ++++++++++++++----- 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/TelegramBotBase/Builder/BotBaseBuilder.cs b/TelegramBotBase/Builder/BotBaseBuilder.cs index c3d9394..ac48601 100644 --- a/TelegramBotBase/Builder/BotBaseBuilder.cs +++ b/TelegramBotBase/Builder/BotBaseBuilder.cs @@ -391,29 +391,41 @@ public class BotBaseBuilder : IAPIKeySelectionStage, IMessageLoopSelectionStage, #region "Step 7 (Language)" + /// public IBuildingStage DefaultLanguage() { return this; } + /// public IBuildingStage UseEnglish() { Default.Language = new English(); return this; } + /// public IBuildingStage UseGerman() { Default.Language = new German(); return this; } + /// public IBuildingStage UsePersian() { Default.Language = new Persian(); return this; } + /// + public IBuildingStage UseRussian() + { + Default.Language = new Persian(); + return this; + } + + /// public IBuildingStage Custom(Localization language) { Default.Language = language; diff --git a/TelegramBotBase/Builder/Interfaces/ILanguageSelectionStage.cs b/TelegramBotBase/Builder/Interfaces/ILanguageSelectionStage.cs index 8021ee2..b06addd 100644 --- a/TelegramBotBase/Builder/Interfaces/ILanguageSelectionStage.cs +++ b/TelegramBotBase/Builder/Interfaces/ILanguageSelectionStage.cs @@ -2,35 +2,44 @@ namespace TelegramBotBase.Builder.Interfaces; +/// +/// Represents the language selection stage in the localization process. +/// public interface ILanguageSelectionStage { /// /// Selects the default language for control usage. (English) /// - /// + /// The next stage in the building process. IBuildingStage DefaultLanguage(); /// /// Selects english as the default language for control labels. /// - /// + /// The next stage in the building process. IBuildingStage UseEnglish(); /// /// Selects german as the default language for control labels. /// - /// + /// The next stage in the building process. IBuildingStage UseGerman(); /// /// Selects persian as the default language for control labels. /// - /// + /// The next stage in the building process. IBuildingStage UsePersian(); + /// + /// Selects russian as the default language for control labels. + /// + /// The next stage in the building process. + IBuildingStage UseRussian(); + /// /// Selects a custom language as the default language for control labels. /// - /// + /// The next stage in the building process. IBuildingStage Custom(Localization language); } \ No newline at end of file From 8b22fd7b74993e3b3d1a3cd4e20e618f3e82df46 Mon Sep 17 00:00:00 2001 From: Kataanee Date: Sat, 27 Jan 2024 13:16:27 +0700 Subject: [PATCH 10/39] Fast fix --- TelegramBotBase/Builder/BotBaseBuilder.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TelegramBotBase/Builder/BotBaseBuilder.cs b/TelegramBotBase/Builder/BotBaseBuilder.cs index ac48601..39bb317 100644 --- a/TelegramBotBase/Builder/BotBaseBuilder.cs +++ b/TelegramBotBase/Builder/BotBaseBuilder.cs @@ -421,7 +421,7 @@ public class BotBaseBuilder : IAPIKeySelectionStage, IMessageLoopSelectionStage, /// public IBuildingStage UseRussian() { - Default.Language = new Persian(); + Default.Language = new Russian(); return this; } From b14913362e9b78f1a8c2f774a859089ed7ef2727 Mon Sep 17 00:00:00 2001 From: Kataane <43317275+Kataane@users.noreply.github.com> Date: Sat, 27 Jan 2024 13:21:46 +0700 Subject: [PATCH 11/39] Update README.md --- .../README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TelegramBotBase.Extensions.Serializer.Database.PostgreSql/README.md b/TelegramBotBase.Extensions.Serializer.Database.PostgreSql/README.md index 1f1377f..fb985d8 100644 --- a/TelegramBotBase.Extensions.Serializer.Database.PostgreSql/README.md +++ b/TelegramBotBase.Extensions.Serializer.Database.PostgreSql/README.md @@ -19,7 +19,7 @@ var bot = BotBaseBuilder .WithStartForm() .NoProxy() .OnlyStart() - .UseSQLDatabase("localhost", "telegram_bot") + .UsePostgreSqlDatabase("localhost", "8181", "telegram_bot") .UseEnglish() .Build(); From d4af8797fbbc564c91b98ae718605db3b3930d06 Mon Sep 17 00:00:00 2001 From: Florian Zevedei Date: Sun, 28 Jan 2024 02:16:55 +0100 Subject: [PATCH 12/39] Add new PostgreSQL extension to solution file --- TelegramBotFramework.sln | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/TelegramBotFramework.sln b/TelegramBotFramework.sln index 8fd0e98..4d81707 100644 --- a/TelegramBotFramework.sln +++ b/TelegramBotFramework.sln @@ -32,7 +32,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BotAndWebApplication", "Exa EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "InlineAndReplyCombination", "Examples\InlineAndReplyCombination\InlineAndReplyCombination.csproj", "{067E8EBE-F90A-4AFF-A0FF-20578216486E}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DependencyInjection", "Examples\DependencyInjection\DependencyInjection.csproj", "{689B16BC-200E-4C68-BB2E-8B209070849B}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DependencyInjection", "Examples\DependencyInjection\DependencyInjection.csproj", "{689B16BC-200E-4C68-BB2E-8B209070849B}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TelegramBotBase.Extensions.Serializer.Database.PostgreSql", "TelegramBotBase.Extensions.Serializer.Database.PostgreSql\TelegramBotBase.Extensions.Serializer.Database.PostgreSql.csproj", "{7C55D9FF-7DC1-41D0-809C-469EBFA20992}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -84,6 +86,10 @@ Global {689B16BC-200E-4C68-BB2E-8B209070849B}.Debug|Any CPU.Build.0 = Debug|Any CPU {689B16BC-200E-4C68-BB2E-8B209070849B}.Release|Any CPU.ActiveCfg = Release|Any CPU {689B16BC-200E-4C68-BB2E-8B209070849B}.Release|Any CPU.Build.0 = Release|Any CPU + {7C55D9FF-7DC1-41D0-809C-469EBFA20992}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7C55D9FF-7DC1-41D0-809C-469EBFA20992}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7C55D9FF-7DC1-41D0-809C-469EBFA20992}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7C55D9FF-7DC1-41D0-809C-469EBFA20992}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -98,6 +104,7 @@ Global {52EA3201-02E8-46F5-87C4-B4752C8A815C} = {BFA71E3F-31C0-4FC1-A320-4DCF704768C5} {067E8EBE-F90A-4AFF-A0FF-20578216486E} = {BFA71E3F-31C0-4FC1-A320-4DCF704768C5} {689B16BC-200E-4C68-BB2E-8B209070849B} = {BFA71E3F-31C0-4FC1-A320-4DCF704768C5} + {7C55D9FF-7DC1-41D0-809C-469EBFA20992} = {E3193182-6FDA-4FA3-AD26-A487291E7681} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {59CB40E1-9FA7-4867-A56F-4F418286F057} From c91fbaa16c188a196addbe730d9105cd25c1b902 Mon Sep 17 00:00:00 2001 From: Florian Zevedei Date: Sun, 28 Jan 2024 18:39:56 +0100 Subject: [PATCH 13/39] Downgrade target framework to.NET 6 --- ...gramBotBase.Extensions.Serializer.Database.PostgreSql.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TelegramBotBase.Extensions.Serializer.Database.PostgreSql/TelegramBotBase.Extensions.Serializer.Database.PostgreSql.csproj b/TelegramBotBase.Extensions.Serializer.Database.PostgreSql/TelegramBotBase.Extensions.Serializer.Database.PostgreSql.csproj index 7103081..bef9efe 100644 --- a/TelegramBotBase.Extensions.Serializer.Database.PostgreSql/TelegramBotBase.Extensions.Serializer.Database.PostgreSql.csproj +++ b/TelegramBotBase.Extensions.Serializer.Database.PostgreSql/TelegramBotBase.Extensions.Serializer.Database.PostgreSql.csproj @@ -1,7 +1,7 @@  - netstandard2.0;netcoreapp3.1;net8 + netstandard2.0;netcoreapp3.1;net6 True https://github.com/MajMcCloud/TelegramBotFramework https://github.com/MajMcCloud/TelegramBotFramework From c514ede03ff272e6bc8be31ab6ce4ff8240abce9 Mon Sep 17 00:00:00 2001 From: Florian Zevedei Date: Sun, 28 Jan 2024 18:45:17 +0100 Subject: [PATCH 14/39] Adding PostgreSQL extension to Readme --- README.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/README.md b/README.md index cb58554..bb1bfc9 100644 --- a/README.md +++ b/README.md @@ -1059,6 +1059,16 @@ A session serializer for Microsoft SQL Server. [https://www.nuget.org/packages/TelegramBotBase.Extensions.Serializer.Database.MSSQL/](https://www.nuget.org/packages/TelegramBotBase.Extensions.Serializer.Database.MSSQL/) +### TelegramBotBase.Extensions.Serializer.Database.MSSQL + +A session serializer for PostgreSql Server. + +[![NuGet version (TelegramBotBase)](https://img.shields.io/nuget/v/TelegramBotBase.Extensions.Serializer.Database.PostgreSql.svg?style=flat-square)](https://www.nuget.org/packages/TelegramBotBase.Extensions.Serializer.Database.PostgreSql/) +[![Downloads](https://img.shields.io/nuget/dt/TelegramBotBase.Extensions.Serializer.Database.PostgreSql.svg?style=flat-square&label=Package%20Downloads)](https://www.nuget.org/packages/TelegramBotBase.Extensions.Serializer.Database.PostgreSql) + +[https://www.nuget.org/packages/TelegramBotBase.Extensions.Serializer.Database.PostgreSql/](https://www.nuget.org/packages/TelegramBotBase.Extensions.Serializer.Database.PostgreSql/) + + ## Test Project There is a "TelegramBotBase.Test" project inside the repository which includes minimal examples for all controls available. From cbc31b8ff564374a3eddacfa6edc64031a246d06 Mon Sep 17 00:00:00 2001 From: Florian Zevedei Date: Sun, 28 Jan 2024 18:48:31 +0100 Subject: [PATCH 15/39] adding source path to Readme --- README.md | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index bb1bfc9..961f17f 100644 --- a/README.md +++ b/README.md @@ -1048,7 +1048,9 @@ Extends the base package with some additional image methods like SendPhoto (usin [![NuGet version (TelegramBotBase)](https://img.shields.io/nuget/v/TelegramBotBase.Extensions.Images.svg?style=flat-square)](https://www.nuget.org/packages/TelegramBotBase.Extensions.Images/) [![Downloads](https://img.shields.io/nuget/dt/TelegramBotBase.Extensions.Images.svg?style=flat-square&label=Package%20Downloads)](https://www.nuget.org/packages/TelegramBotBase.Extensions.Images) -[https://www.nuget.org/packages/TelegramBotBase.Extensions.Images/](https://www.nuget.org/packages/TelegramBotBase.Extensions.Images/) +Source code: [TelegramBotBase.Extensions.Images/](/TelegramBotBase.Extensions.Images/) + +Nuget package: [https://www.nuget.org/packages/TelegramBotBase.Extensions.Images/](https://www.nuget.org/packages/TelegramBotBase.Extensions.Images/) ### TelegramBotBase.Extensions.Serializer.Database.MSSQL @@ -1057,7 +1059,9 @@ A session serializer for Microsoft SQL Server. [![NuGet version (TelegramBotBase)](https://img.shields.io/nuget/v/TelegramBotBase.Extensions.Serializer.Database.MSSQL.svg?style=flat-square)](https://www.nuget.org/packages/TelegramBotBase.Extensions.Serializer.Database.MSSQL/) [![Downloads](https://img.shields.io/nuget/dt/TelegramBotBase.Extensions.Serializer.Database.MSSQL.svg?style=flat-square&label=Package%20Downloads)](https://www.nuget.org/packages/TelegramBotBase.Extensions.Serializer.Database.MSSQL) -[https://www.nuget.org/packages/TelegramBotBase.Extensions.Serializer.Database.MSSQL/](https://www.nuget.org/packages/TelegramBotBase.Extensions.Serializer.Database.MSSQL/) +Source code: [TelegramBotBase.Extensions.Serializer.Database.MSSQL/](/TelegramBotBase.Extensions.Serializer.Database.MSSQL/) + +Nuget package: [https://www.nuget.org/packages/TelegramBotBase.Extensions.Serializer.Database.MSSQL/](https://www.nuget.org/packages/TelegramBotBase.Extensions.Serializer.Database.MSSQL/) ### TelegramBotBase.Extensions.Serializer.Database.MSSQL @@ -1066,7 +1070,9 @@ A session serializer for PostgreSql Server. [![NuGet version (TelegramBotBase)](https://img.shields.io/nuget/v/TelegramBotBase.Extensions.Serializer.Database.PostgreSql.svg?style=flat-square)](https://www.nuget.org/packages/TelegramBotBase.Extensions.Serializer.Database.PostgreSql/) [![Downloads](https://img.shields.io/nuget/dt/TelegramBotBase.Extensions.Serializer.Database.PostgreSql.svg?style=flat-square&label=Package%20Downloads)](https://www.nuget.org/packages/TelegramBotBase.Extensions.Serializer.Database.PostgreSql) -[https://www.nuget.org/packages/TelegramBotBase.Extensions.Serializer.Database.PostgreSql/](https://www.nuget.org/packages/TelegramBotBase.Extensions.Serializer.Database.PostgreSql/) +Source code: [TelegramBotBase.Extensions.Serializer.Database.PostgreSql/](/TelegramBotBase.Extensions.Serializer.Database.PostgreSql/) + +Nuget package: [https://www.nuget.org/packages/TelegramBotBase.Extensions.Serializer.Database.PostgreSql/](https://www.nuget.org/packages/TelegramBotBase.Extensions.Serializer.Database.PostgreSql/) ## Test Project From c8b12e9168ca1817759a6f01e606d92ac4bdb8fe Mon Sep 17 00:00:00 2001 From: Florian Zevedei Date: Sun, 28 Jan 2024 18:49:52 +0100 Subject: [PATCH 16/39] Adding credits --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 961f17f..44af04d 100644 --- a/README.md +++ b/README.md @@ -1074,6 +1074,7 @@ Source code: [TelegramBotBase.Extensions.Serializer.Database.PostgreSql/](/Teleg Nuget package: [https://www.nuget.org/packages/TelegramBotBase.Extensions.Serializer.Database.PostgreSql/](https://www.nuget.org/packages/TelegramBotBase.Extensions.Serializer.Database.PostgreSql/) +Credits: [@Kataane](https://github.com/Kataane) ## Test Project From 339319ef2a500a586326020774315414ebe1b1d3 Mon Sep 17 00:00:00 2001 From: Florian Zevedei Date: Sun, 28 Jan 2024 18:50:27 +0100 Subject: [PATCH 17/39] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 44af04d..f6b217a 100644 --- a/README.md +++ b/README.md @@ -1063,7 +1063,7 @@ Source code: [TelegramBotBase.Extensions.Serializer.Database.MSSQL/](/TelegramBo Nuget package: [https://www.nuget.org/packages/TelegramBotBase.Extensions.Serializer.Database.MSSQL/](https://www.nuget.org/packages/TelegramBotBase.Extensions.Serializer.Database.MSSQL/) -### TelegramBotBase.Extensions.Serializer.Database.MSSQL +### TelegramBotBase.Extensions.Serializer.Database.PostgreSql A session serializer for PostgreSql Server. From 2e454d7f5c9419cf78315db0ff0a07f99ab13742 Mon Sep 17 00:00:00 2001 From: Florian Zevedei Date: Sun, 28 Jan 2024 19:17:15 +0100 Subject: [PATCH 18/39] Removing SQLClient dependency --- ...egramBotBase.Extensions.Serializer.Database.PostgreSql.csproj | 1 - 1 file changed, 1 deletion(-) diff --git a/TelegramBotBase.Extensions.Serializer.Database.PostgreSql/TelegramBotBase.Extensions.Serializer.Database.PostgreSql.csproj b/TelegramBotBase.Extensions.Serializer.Database.PostgreSql/TelegramBotBase.Extensions.Serializer.Database.PostgreSql.csproj index bef9efe..ce2b6ef 100644 --- a/TelegramBotBase.Extensions.Serializer.Database.PostgreSql/TelegramBotBase.Extensions.Serializer.Database.PostgreSql.csproj +++ b/TelegramBotBase.Extensions.Serializer.Database.PostgreSql/TelegramBotBase.Extensions.Serializer.Database.PostgreSql.csproj @@ -22,7 +22,6 @@ runtime; build; native; contentfiles; analyzers; buildtransitive - From 9927a034b0f8f0135c0d907ea1c5c17a2e6391c0 Mon Sep 17 00:00:00 2001 From: Florian Zevedei Date: Thu, 4 Jan 2024 13:44:18 +0100 Subject: [PATCH 19/39] First release of IronSoftware drawing extension --- .../ImageExtensions.cs | 73 +++++++++++++++++++ .../README.md | 7 ++ ...Base.Extensions.Images.IronSoftware.csproj | 25 +++++++ TelegramBotFramework.sln | 7 ++ 4 files changed, 112 insertions(+) create mode 100644 TelegramBotBase.Extensions.Images.IronSoftware/ImageExtensions.cs create mode 100644 TelegramBotBase.Extensions.Images.IronSoftware/README.md create mode 100644 TelegramBotBase.Extensions.Images.IronSoftware/TelegramBotBase.Extensions.Images.IronSoftware.csproj diff --git a/TelegramBotBase.Extensions.Images.IronSoftware/ImageExtensions.cs b/TelegramBotBase.Extensions.Images.IronSoftware/ImageExtensions.cs new file mode 100644 index 0000000..bc067ee --- /dev/null +++ b/TelegramBotBase.Extensions.Images.IronSoftware/ImageExtensions.cs @@ -0,0 +1,73 @@ +using IronSoftware.Drawing; +using SixLabors.ImageSharp; +using System.IO; +using System.Threading.Tasks; +using Telegram.Bot.Types; +using TelegramBotBase.Form; +using TelegramBotBase.Sessions; +using static IronSoftware.Drawing.AnyBitmap; +using SKImage = SixLabors.ImageSharp.Image; + +namespace TelegramBotBase.Extensions.Images.IronSoftware +{ + public static class ImageExtensions + { + public static Stream ToStream(this AnyBitmap image, ImageFormat format) + { + var stream = new MemoryStream(); + image.ExportStream(stream, format); + stream.Position = 0; + return stream; + } + + public static async Task ToStream(this SKImage image) + { + var stream = new MemoryStream(); + await image.SaveAsPngAsync(stream); + stream.Position = 0; + return stream; + } + + /// + /// Sends an image + /// + /// + /// + /// + /// + /// + /// + public static async Task SendPhoto(this DeviceSession session, AnyBitmap image, string name, + string caption, ButtonForm buttons = null, int replyTo = 0, + bool disableNotification = false) + { + using (var fileStream = ToStream(image, ImageFormat.Png)) + { + var fts = InputFile.FromStream(fileStream, name); + + return await session.SendPhoto(fts, caption, buttons, replyTo, disableNotification); + } + } + + /// + /// Sends an image + /// + /// + /// + /// + /// + /// + /// + public static async Task SendPhoto(this DeviceSession session, SKImage image, string name, + string caption, ButtonForm buttons = null, int replyTo = 0, + bool disableNotification = false) + { + using (var fileStream = await ToStream(image)) + { + var fts = InputFile.FromStream(fileStream, name); + + return await session.SendPhoto(fts, caption, buttons, replyTo, disableNotification); + } + } + } +} \ No newline at end of file diff --git a/TelegramBotBase.Extensions.Images.IronSoftware/README.md b/TelegramBotBase.Extensions.Images.IronSoftware/README.md new file mode 100644 index 0000000..879e552 --- /dev/null +++ b/TelegramBotBase.Extensions.Images.IronSoftware/README.md @@ -0,0 +1,7 @@ +# TelegramBotBase.Extensions.Images.IronSoftware + +[![NuGet version (TelegramBotBase)](https://img.shields.io/nuget/v/TelegramBotBase.Extensions.Images.IronSoftware.svg?style=flat-square)](https://www.nuget.org/packages/TelegramBotBase.Extensions.Images.IronSoftware/) +[![Telegram chat](https://img.shields.io/badge/Support_Chat-Telegram-blue.svg?style=flat-square)](https://www.t.me/tgbotbase) + +[![License](https://img.shields.io/github/license/MajMcCloud/telegrambotframework.svg?style=flat-square&maxAge=2592000&label=License)](https://raw.githubusercontent.com/MajMcCloud/TelegramBotFramework/master/LICENCE.md) +[![Package Downloads](https://img.shields.io/nuget/dt/TelegramBotBase.Extensions.Images.IronSoftware.svg?style=flat-square&label=Package%20Downloads)](https://www.nuget.org/packages/TelegramBotBase.Extensions.Images.IronSoftware) diff --git a/TelegramBotBase.Extensions.Images.IronSoftware/TelegramBotBase.Extensions.Images.IronSoftware.csproj b/TelegramBotBase.Extensions.Images.IronSoftware/TelegramBotBase.Extensions.Images.IronSoftware.csproj new file mode 100644 index 0000000..0e60a55 --- /dev/null +++ b/TelegramBotBase.Extensions.Images.IronSoftware/TelegramBotBase.Extensions.Images.IronSoftware.csproj @@ -0,0 +1,25 @@ + + + + netstandard2.0;netcoreapp3.1;net6 + https://github.com/MajMcCloud/TelegramBotFramework + https://github.com/MajMcCloud/TelegramBotFramework + MIT + true + snupkg + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + diff --git a/TelegramBotFramework.sln b/TelegramBotFramework.sln index 4d81707..409d950 100644 --- a/TelegramBotFramework.sln +++ b/TelegramBotFramework.sln @@ -36,6 +36,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DependencyInjection", "Exam EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TelegramBotBase.Extensions.Serializer.Database.PostgreSql", "TelegramBotBase.Extensions.Serializer.Database.PostgreSql\TelegramBotBase.Extensions.Serializer.Database.PostgreSql.csproj", "{7C55D9FF-7DC1-41D0-809C-469EBFA20992}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TelegramBotBase.Extensions.Images.IronSoftware", "TelegramBotBase.Extensions.Images.IronSoftware\TelegramBotBase.Extensions.Images.IronSoftware.csproj", "{DC521A4C-7446-46F7-845B-AAF10EDCF8C6}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -90,6 +92,10 @@ Global {7C55D9FF-7DC1-41D0-809C-469EBFA20992}.Debug|Any CPU.Build.0 = Debug|Any CPU {7C55D9FF-7DC1-41D0-809C-469EBFA20992}.Release|Any CPU.ActiveCfg = Release|Any CPU {7C55D9FF-7DC1-41D0-809C-469EBFA20992}.Release|Any CPU.Build.0 = Release|Any CPU + {DC521A4C-7446-46F7-845B-AAF10EDCF8C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DC521A4C-7446-46F7-845B-AAF10EDCF8C6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DC521A4C-7446-46F7-845B-AAF10EDCF8C6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DC521A4C-7446-46F7-845B-AAF10EDCF8C6}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -105,6 +111,7 @@ Global {067E8EBE-F90A-4AFF-A0FF-20578216486E} = {BFA71E3F-31C0-4FC1-A320-4DCF704768C5} {689B16BC-200E-4C68-BB2E-8B209070849B} = {BFA71E3F-31C0-4FC1-A320-4DCF704768C5} {7C55D9FF-7DC1-41D0-809C-469EBFA20992} = {E3193182-6FDA-4FA3-AD26-A487291E7681} + {DC521A4C-7446-46F7-845B-AAF10EDCF8C6} = {E3193182-6FDA-4FA3-AD26-A487291E7681} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {59CB40E1-9FA7-4867-A56F-4F418286F057} From e34c71b42b0bb682ca0d3d692b0f8fb86f174352 Mon Sep 17 00:00:00 2001 From: Florian Zevedei Date: Thu, 4 Jan 2024 13:46:58 +0100 Subject: [PATCH 20/39] Update README.md --- TelegramBotBase.Extensions.Images.IronSoftware/README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/TelegramBotBase.Extensions.Images.IronSoftware/README.md b/TelegramBotBase.Extensions.Images.IronSoftware/README.md index 879e552..357438b 100644 --- a/TelegramBotBase.Extensions.Images.IronSoftware/README.md +++ b/TelegramBotBase.Extensions.Images.IronSoftware/README.md @@ -5,3 +5,8 @@ [![License](https://img.shields.io/github/license/MajMcCloud/telegrambotframework.svg?style=flat-square&maxAge=2592000&label=License)](https://raw.githubusercontent.com/MajMcCloud/TelegramBotFramework/master/LICENCE.md) [![Package Downloads](https://img.shields.io/nuget/dt/TelegramBotBase.Extensions.Images.IronSoftware.svg?style=flat-square&label=Package%20Downloads)](https://www.nuget.org/packages/TelegramBotBase.Extensions.Images.IronSoftware) + + +This extension uses the [IronSoftware](https://ironsoftware.com/open-source/csharp/drawing/docs/) drawing library. + +Check [https://ironsoftware.com/open-source/csharp/drawing/docs/](https://ironsoftware.com/open-source/csharp/drawing/docs/) for more details on this library. \ No newline at end of file From 71aa0c3d91b219beeeffaa6b8dc2b33dc2d1c789 Mon Sep 17 00:00:00 2001 From: Florian Zevedei Date: Thu, 4 Jan 2024 14:11:21 +0100 Subject: [PATCH 21/39] Adding nuget references and nuget specs --- ...mBotBase.Extensions.Images.IronSoftware.csproj | 8 ++++++-- .../TelegramBotBase.Extensions.Images.csproj | 15 +++++++++------ 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/TelegramBotBase.Extensions.Images.IronSoftware/TelegramBotBase.Extensions.Images.IronSoftware.csproj b/TelegramBotBase.Extensions.Images.IronSoftware/TelegramBotBase.Extensions.Images.IronSoftware.csproj index 0e60a55..df94a01 100644 --- a/TelegramBotBase.Extensions.Images.IronSoftware/TelegramBotBase.Extensions.Images.IronSoftware.csproj +++ b/TelegramBotBase.Extensions.Images.IronSoftware/TelegramBotBase.Extensions.Images.IronSoftware.csproj @@ -2,11 +2,15 @@ netstandard2.0;netcoreapp3.1;net6 - https://github.com/MajMcCloud/TelegramBotFramework - https://github.com/MajMcCloud/TelegramBotFramework + https://github.com/MajMcCloud/TelegramBotFramework/tree/development/TelegramBotBase.Extensions.Images.IronSoftware + https://github.com/MajMcCloud/TelegramBotFramework/tree/development/TelegramBotBase.Extensions.Images.IronSoftware MIT true snupkg + 1.0.1 + 1.0.1 + This is an extension for sending Bitmap/Images platform independent by using IronSoftware's drawing library via TelegramBotBase. + 1.0.1 diff --git a/TelegramBotBase.Extensions.Images/TelegramBotBase.Extensions.Images.csproj b/TelegramBotBase.Extensions.Images/TelegramBotBase.Extensions.Images.csproj index 347e740..6eb1036 100644 --- a/TelegramBotBase.Extensions.Images/TelegramBotBase.Extensions.Images.csproj +++ b/TelegramBotBase.Extensions.Images/TelegramBotBase.Extensions.Images.csproj @@ -2,11 +2,17 @@ netstandard2.0;netcoreapp3.1;net6 - https://github.com/MajMcCloud/TelegramBotFramework - https://github.com/MajMcCloud/TelegramBotFramework + https://github.com/MajMcCloud/TelegramBotFramework/tree/development/TelegramBotBase.Extensions.Images + https://github.com/MajMcCloud/TelegramBotFramework/tree/development/TelegramBotBase.Extensions.Images MIT true snupkg + False + $(AssemblyName) + This is an extension for sending Bitmap/Images via TelegramBotBase. + 1.1.1 + 1.1.1 + 1.1.1 @@ -15,14 +21,11 @@ runtime; build; native; contentfiles; analyzers; buildtransitive + - - - - From 5e166db243e290631e11eebee807dcac720222b9 Mon Sep 17 00:00:00 2001 From: Florian Zevedei Date: Wed, 17 Jan 2024 22:51:40 +0100 Subject: [PATCH 22/39] Adding readme note for IronSoftware extension --- README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/README.md b/README.md index f6b217a..6caca80 100644 --- a/README.md +++ b/README.md @@ -1052,6 +1052,17 @@ Source code: [TelegramBotBase.Extensions.Images/](/TelegramBotBase.Extensions.Im Nuget package: [https://www.nuget.org/packages/TelegramBotBase.Extensions.Images/](https://www.nuget.org/packages/TelegramBotBase.Extensions.Images/) +### TelegramBotBase.Extensions.Images.IronSoftware + +Extends the base package with some additional image methods like SendPhoto (using Bitmap) + +Important: This extension uses the IronSoftware drawing library. + +[![NuGet version (TelegramBotBase)](https://img.shields.io/nuget/v/TelegramBotBase.Extensions.Images.IronSoftware.svg?style=flat-square)](https://www.nuget.org/packages/TelegramBotBase.Extensions.Images.IronSoftware/) +[![Downloads](https://img.shields.io/nuget/dt/TelegramBotBase.Extensions.Images.IronSoftware.svg?style=flat-square&label=Package%20Downloads)](https://www.nuget.org/packages/TelegramBotBase.Extensions.Images.IronSoftware) + +[https://www.nuget.org/packages/TelegramBotBase.Extensions.Images.IronSoftware/](https://www.nuget.org/packages/TelegramBotBase.Extensions.Images.IronSoftware/) + ### TelegramBotBase.Extensions.Serializer.Database.MSSQL A session serializer for Microsoft SQL Server. From 52517534f81e26761b8258e083d5186a090e6233 Mon Sep 17 00:00:00 2001 From: Florian Zevedei Date: Wed, 17 Jan 2024 22:55:11 +0100 Subject: [PATCH 23/39] Update README.md --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index 6caca80..3368fd7 100644 --- a/README.md +++ b/README.md @@ -1052,6 +1052,7 @@ Source code: [TelegramBotBase.Extensions.Images/](/TelegramBotBase.Extensions.Im Nuget package: [https://www.nuget.org/packages/TelegramBotBase.Extensions.Images/](https://www.nuget.org/packages/TelegramBotBase.Extensions.Images/) + ### TelegramBotBase.Extensions.Images.IronSoftware Extends the base package with some additional image methods like SendPhoto (using Bitmap) @@ -1063,6 +1064,10 @@ Important: This extension uses the IronSoftware drawing library. [https://www.nuget.org/packages/TelegramBotBase.Extensions.Images.IronSoftware/](https://www.nuget.org/packages/TelegramBotBase.Extensions.Images.IronSoftware/) +Source code: [open source](TelegramBotBase.Extensions.Images.IronSoftware/) + +Nuget package: [https://www.nuget.org/packages/TelegramBotBase.Extensions.IronSoftware/](https://www.nuget.org/packages/TelegramBotBase.Extensions.IronSoftware/) + ### TelegramBotBase.Extensions.Serializer.Database.MSSQL A session serializer for Microsoft SQL Server. @@ -1087,6 +1092,7 @@ Nuget package: [https://www.nuget.org/packages/TelegramBotBase.Extensions.Serial Credits: [@Kataane](https://github.com/Kataane) + ## Test Project There is a "TelegramBotBase.Test" project inside the repository which includes minimal examples for all controls available. From 9cac57b8e7ba984b99884eb5a416e1e89af9b283 Mon Sep 17 00:00:00 2001 From: Florian Zevedei Date: Sun, 28 Jan 2024 19:32:26 +0100 Subject: [PATCH 24/39] Update README.md --- README.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 3368fd7..e8066b8 100644 --- a/README.md +++ b/README.md @@ -1039,6 +1039,8 @@ again at 1 (due to `PopAsync` or `PopToRootAsync` calls) it will replace the con you have given to the constructor at the beginning.* +--- + ## Extensions ### TelegramBotBase.Extensions.Images @@ -1052,6 +1054,7 @@ Source code: [TelegramBotBase.Extensions.Images/](/TelegramBotBase.Extensions.Im Nuget package: [https://www.nuget.org/packages/TelegramBotBase.Extensions.Images/](https://www.nuget.org/packages/TelegramBotBase.Extensions.Images/) +--- ### TelegramBotBase.Extensions.Images.IronSoftware @@ -1064,10 +1067,12 @@ Important: This extension uses the IronSoftware drawing library. [https://www.nuget.org/packages/TelegramBotBase.Extensions.Images.IronSoftware/](https://www.nuget.org/packages/TelegramBotBase.Extensions.Images.IronSoftware/) -Source code: [open source](TelegramBotBase.Extensions.Images.IronSoftware/) +Source code: [TelegramBotBase.Extensions.Images.IronSoftware/](TelegramBotBase.Extensions.Images.IronSoftware/) Nuget package: [https://www.nuget.org/packages/TelegramBotBase.Extensions.IronSoftware/](https://www.nuget.org/packages/TelegramBotBase.Extensions.IronSoftware/) +--- + ### TelegramBotBase.Extensions.Serializer.Database.MSSQL A session serializer for Microsoft SQL Server. @@ -1079,6 +1084,8 @@ Source code: [TelegramBotBase.Extensions.Serializer.Database.MSSQL/](/TelegramBo Nuget package: [https://www.nuget.org/packages/TelegramBotBase.Extensions.Serializer.Database.MSSQL/](https://www.nuget.org/packages/TelegramBotBase.Extensions.Serializer.Database.MSSQL/) +--- + ### TelegramBotBase.Extensions.Serializer.Database.PostgreSql A session serializer for PostgreSql Server. @@ -1092,6 +1099,7 @@ Nuget package: [https://www.nuget.org/packages/TelegramBotBase.Extensions.Serial Credits: [@Kataane](https://github.com/Kataane) +--- ## Test Project From 848b5d29cfd0f3c634a4a6b2c0a1ad6dbac63ab9 Mon Sep 17 00:00:00 2001 From: Florian Zevedei Date: Tue, 30 Jan 2024 14:47:23 +0100 Subject: [PATCH 25/39] Add missing Russian localization due to PR #58 --- TelegramBotBase/Localizations/Russian.cs | 36 ++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 TelegramBotBase/Localizations/Russian.cs diff --git a/TelegramBotBase/Localizations/Russian.cs b/TelegramBotBase/Localizations/Russian.cs new file mode 100644 index 0000000..9045d44 --- /dev/null +++ b/TelegramBotBase/Localizations/Russian.cs @@ -0,0 +1,36 @@ +namespace TelegramBotBase.Localizations; + +public sealed class Russian : Localization +{ + public Russian() + { + Values["Language"] = "Русский (Russian)"; + Values["ButtonGrid_Title"] = "Меню"; + Values["ButtonGrid_NoItems"] = "Нет доступных элементов."; + Values["ButtonGrid_PreviousPage"] = "◀️"; + Values["ButtonGrid_NextPage"] = "▶️"; + Values["ButtonGrid_CurrentPage"] = "Страница {0} из {1}"; + Values["ButtonGrid_SearchFeature"] = "💡 Отправьте сообщение, чтобы отфильтровать список. Нажмите на 🔍, чтобы сбросить фильтр."; + Values["ButtonGrid_Back"] = "Назада"; + Values["ButtonGrid_CheckAll"] = "Выделить все"; + Values["ButtonGrid_UncheckAll"] = "Отменить выбор"; + Values["CalendarPicker_Title"] = "Календарь / Выберите дату"; + Values["CalendarPicker_PreviousPage"] = "◀️"; + Values["CalendarPicker_NextPage"] = "▶️"; + Values["TreeView_Title"] = "Выберите пункт"; + Values["TreeView_LevelUp"] = "🔼 Обратно"; + Values["ToggleButton_On"] = "Вкл"; + Values["ToggleButton_Off"] = "Выкл"; + Values["ToggleButton_OnIcon"] = "⚫"; + Values["ToggleButton_OffIcon"] = "⚪"; + Values["ToggleButton_Title"] = "Переключить"; + Values["ToggleButton_Changed"] = "Выбрано"; + Values["MultiToggleButton_SelectedIcon"] = "✅"; + Values["MultiToggleButton_Title"] = "Множественный выбор"; + Values["MultiToggleButton_Changed"] = "Выбрано"; + Values["PromptDialog_Back"] = "Назад"; + Values["ToggleButton_Changed"] = "Настройки изменены"; + Values["ButtonGrid_SearchIcon"] = "🔍"; + Values["ButtonGrid_TagIcon"] = "📁"; + } +} \ No newline at end of file From 00dafd59a3139efd03bec087187382c04d2b7687 Mon Sep 17 00:00:00 2001 From: Florian Zevedei Date: Tue, 30 Jan 2024 14:47:52 +0100 Subject: [PATCH 26/39] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index e8066b8..b1f7706 100644 --- a/README.md +++ b/README.md @@ -723,6 +723,7 @@ The current available languages for controls are: - English - German - Persian +- Russian You can add other languages easily by creating a subclass of the [TelegramBotBase/Localizations/Localization.cs](TelegramBotBase/Localizations/Localization.cs) class. From f60e1000c3112bd48b63b6c878e40998789e58a1 Mon Sep 17 00:00:00 2001 From: Florian Zevedei Date: Tue, 30 Jan 2024 15:08:40 +0100 Subject: [PATCH 27/39] Changing datatype of port from string to int --- .../BotBaseBuilderExtensions.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/TelegramBotBase.Extensions.Serializer.Database.PostgreSql/BotBaseBuilderExtensions.cs b/TelegramBotBase.Extensions.Serializer.Database.PostgreSql/BotBaseBuilderExtensions.cs index ad0556b..7b79d06 100644 --- a/TelegramBotBase.Extensions.Serializer.Database.PostgreSql/BotBaseBuilderExtensions.cs +++ b/TelegramBotBase.Extensions.Serializer.Database.PostgreSql/BotBaseBuilderExtensions.cs @@ -44,7 +44,7 @@ namespace TelegramBotBase.Extensions.Serializer.Database.PostgreSql /// The language selection stage builder. public static ILanguageSelectionStage UsePostgreSqlDatabase( this ISessionSerializationStage builder, - string hostOrIp, string port, + string hostOrIp, int port, string databaseName, string userId, string password, Type fallbackForm = null, string tablePrefix = "tgb_") @@ -71,7 +71,7 @@ namespace TelegramBotBase.Extensions.Serializer.Database.PostgreSql /// The language selection stage builder. public static ILanguageSelectionStage UsePostgreSqlDatabase( this ISessionSerializationStage builder, - string hostOrIp, string port, + string hostOrIp, int port, string databaseName, bool integratedSecurity = true, Type fallbackForm = null, string tablePrefix = "tgb_") { From cb5fa352697f543d67f9925672bee3049bb87963 Mon Sep 17 00:00:00 2001 From: Florian Zevedei Date: Tue, 30 Jan 2024 16:07:08 +0100 Subject: [PATCH 28/39] Fix #60 --- TelegramBotBase/Controls/Hybrid/ButtonGrid.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/TelegramBotBase/Controls/Hybrid/ButtonGrid.cs b/TelegramBotBase/Controls/Hybrid/ButtonGrid.cs index ca0a895..bc06b06 100644 --- a/TelegramBotBase/Controls/Hybrid/ButtonGrid.cs +++ b/TelegramBotBase/Controls/Hybrid/ButtonGrid.cs @@ -426,8 +426,6 @@ public class ButtonGrid : ControlBase return; } - await result.ConfirmAction(ConfirmationText ?? ""); - ButtonRow match = null; var index = -1; @@ -462,6 +460,8 @@ public class ButtonGrid : ControlBase check: if (match != null) { + await result.ConfirmAction(ConfirmationText ?? ""); + await OnButtonClicked(new ButtonClickedEventArgs(match.GetButtonMatch(result.RawData, false), index, match)); From 1b14b7b3cfb00ae7b80e694a6df1e39689c77ee8 Mon Sep 17 00:00:00 2001 From: Florian Zevedei Date: Tue, 30 Jan 2024 18:21:25 +0100 Subject: [PATCH 29/39] Adding missing localization to german file --- TelegramBotBase/Localizations/German.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/TelegramBotBase/Localizations/German.cs b/TelegramBotBase/Localizations/German.cs index 6380635..e8dd0e9 100644 --- a/TelegramBotBase/Localizations/German.cs +++ b/TelegramBotBase/Localizations/German.cs @@ -31,5 +31,7 @@ public sealed class German : Localization Values["MultiToggleButton_Changed"] = "Ausgewählt"; Values["PromptDialog_Back"] = "Zurück"; Values["ToggleButton_Changed"] = "Einstellung geändert"; + Values["ButtonGrid_SearchIcon"] = "🔍"; + Values["ButtonGrid_TagIcon"] = "📁"; } } \ No newline at end of file From c4a589d47604f8132f2f032b96395b3f2542ccc7 Mon Sep 17 00:00:00 2001 From: Florian Zevedei Date: Tue, 30 Jan 2024 18:23:02 +0100 Subject: [PATCH 30/39] Renaming TaggedButtonGrid specific localizations --- TelegramBotBase/Controls/Hybrid/TaggedButtonGrid.cs | 12 ++++++++---- TelegramBotBase/Localizations/English.cs | 8 +++++--- TelegramBotBase/Localizations/German.cs | 8 +++++--- TelegramBotBase/Localizations/Persian.cs | 6 +++--- TelegramBotBase/Localizations/Russian.cs | 6 +++--- 5 files changed, 24 insertions(+), 16 deletions(-) diff --git a/TelegramBotBase/Controls/Hybrid/TaggedButtonGrid.cs b/TelegramBotBase/Controls/Hybrid/TaggedButtonGrid.cs index c2fec7e..ce92c96 100644 --- a/TelegramBotBase/Controls/Hybrid/TaggedButtonGrid.cs +++ b/TelegramBotBase/Controls/Hybrid/TaggedButtonGrid.cs @@ -29,8 +29,6 @@ public class TaggedButtonGrid : MultiView public string BackLabel = Default.Language["ButtonGrid_Back"]; - public string CheckAllLabel = Default.Language["ButtonGrid_CheckAll"]; - public string NextPageLabel = Default.Language["ButtonGrid_NextPage"]; public string NoItemsLabel = Default.Language["ButtonGrid_NoItems"]; @@ -39,11 +37,17 @@ public class TaggedButtonGrid : MultiView public string SearchLabel = Default.Language["ButtonGrid_SearchFeature"]; - public string UncheckAllLabel = Default.Language["ButtonGrid_UncheckAll"]; + public string TotalTagsLabel = Default.Language["TaggedButtonGrid_TotalTags"]; + + public string CheckedTagsLabel = Default.Language["TaggedButtonGrid_CheckedTags"]; + + public string CheckAllLabel = Default.Language["TaggedButtonGrid_CheckAll"]; + + public string UncheckAllLabel = Default.Language["TaggedButtonGrid_UncheckAll"]; public string SearchIcon = Default.Language["ButtonGrid_SearchIcon"]; - public string TagIcon = Default.Language["ButtonGrid_TagIcon"]; + public string TagIcon = Default.Language["TaggedButtonGrid_TagIcon"]; public TaggedButtonGrid() { diff --git a/TelegramBotBase/Localizations/English.cs b/TelegramBotBase/Localizations/English.cs index d69bbe2..974143b 100644 --- a/TelegramBotBase/Localizations/English.cs +++ b/TelegramBotBase/Localizations/English.cs @@ -12,8 +12,10 @@ public sealed class English : Localization Values["ButtonGrid_CurrentPage"] = "Page {0} of {1}"; Values["ButtonGrid_SearchFeature"] = "💡 Send a message to filter the list. Click the 🔍 to reset the filter."; Values["ButtonGrid_Back"] = "Back"; - Values["ButtonGrid_CheckAll"] = "Check all"; - Values["ButtonGrid_UncheckAll"] = "Uncheck all"; + Values["TaggedButtonGrid_TotalTags"] = "Total: {0}"; + Values["TaggedButtonGrid_CheckedTags"] = "Checked: {0}"; + Values["TaggedButtonGrid_CheckAll"] = "Check all"; + Values["TaggedButtonGrid_UncheckAll"] = "Uncheck all"; Values["CalendarPicker_Title"] = "Pick date"; Values["CalendarPicker_PreviousPage"] = "◀️"; Values["CalendarPicker_NextPage"] = "▶️"; @@ -31,6 +33,6 @@ public sealed class English : Localization Values["PromptDialog_Back"] = "Back"; Values["ToggleButton_Changed"] = "Setting changed"; Values["ButtonGrid_SearchIcon"] = "🔍"; - Values["ButtonGrid_TagIcon"] = "📁"; + Values["TaggedButtonGrid_TagIcon"] = "📁"; } } diff --git a/TelegramBotBase/Localizations/German.cs b/TelegramBotBase/Localizations/German.cs index e8dd0e9..02f32c2 100644 --- a/TelegramBotBase/Localizations/German.cs +++ b/TelegramBotBase/Localizations/German.cs @@ -13,8 +13,10 @@ public sealed class German : Localization Values["ButtonGrid_SearchFeature"] = "💡 Sende eine Nachricht um die Liste zu filtern. Klicke die 🔍 um den Filter zurückzusetzen."; Values["ButtonGrid_Back"] = "Zurück"; - Values["ButtonGrid_CheckAll"] = "Alle auswählen"; - Values["ButtonGrid_UncheckAll"] = "Keine auswählen"; + Values["TaggedButtonGrid_TotalTags"] = "Gesamt: {0}"; + Values["TaggedButtonGrid_CheckedTags"] = "Ausgewählt: {0}"; + Values["TaggedButtonGrid_CheckAll"] = "Alle auswählen"; + Values["TaggedButtonGrid_UncheckAll"] = "Keine auswählen"; Values["CalendarPicker_Title"] = "Datum auswählen"; Values["CalendarPicker_PreviousPage"] = "◀️"; Values["CalendarPicker_NextPage"] = "▶️"; @@ -32,6 +34,6 @@ public sealed class German : Localization Values["PromptDialog_Back"] = "Zurück"; Values["ToggleButton_Changed"] = "Einstellung geändert"; Values["ButtonGrid_SearchIcon"] = "🔍"; - Values["ButtonGrid_TagIcon"] = "📁"; + Values["TaggedButtonGrid_TagIcon"] = "📁"; } } \ No newline at end of file diff --git a/TelegramBotBase/Localizations/Persian.cs b/TelegramBotBase/Localizations/Persian.cs index 919e355..82ec799 100644 --- a/TelegramBotBase/Localizations/Persian.cs +++ b/TelegramBotBase/Localizations/Persian.cs @@ -12,8 +12,8 @@ Values["ButtonGrid_CurrentPage"] = "صفحه ی {0} از {1}"; Values["ButtonGrid_SearchFeature"] = "💡 برای فیلتر کردن لیست پیام ارسال کنید. برای بازنشانی فیلتر روی 🔍 کلیک کنید."; Values["ButtonGrid_Back"] = "بازگشت"; - Values["ButtonGrid_CheckAll"] = "بررسی کردن همه"; - Values["ButtonGrid_UncheckAll"] = "بررسی نکردن همه"; + Values["TaggedButtonGrid_CheckAll"] = "بررسی کردن همه"; + Values["TaggedButtonGrid_UncheckAll"] = "بررسی نکردن همه"; Values["CalendarPicker_Title"] = "تاریخ را انتخاب کنید"; Values["CalendarPicker_PreviousPage"] = "◀️"; Values["CalendarPicker_NextPage"] = "▶️"; @@ -31,7 +31,7 @@ Values["PromptDialog_Back"] = "بازگشت"; Values["ToggleButton_Changed"] = "تنظیمات تغییر کرد"; Values["ButtonGrid_SearchIcon"] = "🔍"; - Values["ButtonGrid_TagIcon"] = "📁"; + Values["TaggedButtonGrid_TagIcon"] = "📁"; } } } diff --git a/TelegramBotBase/Localizations/Russian.cs b/TelegramBotBase/Localizations/Russian.cs index 9045d44..f2fceeb 100644 --- a/TelegramBotBase/Localizations/Russian.cs +++ b/TelegramBotBase/Localizations/Russian.cs @@ -12,8 +12,8 @@ public sealed class Russian : Localization Values["ButtonGrid_CurrentPage"] = "Страница {0} из {1}"; Values["ButtonGrid_SearchFeature"] = "💡 Отправьте сообщение, чтобы отфильтровать список. Нажмите на 🔍, чтобы сбросить фильтр."; Values["ButtonGrid_Back"] = "Назада"; - Values["ButtonGrid_CheckAll"] = "Выделить все"; - Values["ButtonGrid_UncheckAll"] = "Отменить выбор"; + Values["TaggedButtonGrid_CheckAll"] = "Выделить все"; + Values["TaggedButtonGrid_UncheckAll"] = "Отменить выбор"; Values["CalendarPicker_Title"] = "Календарь / Выберите дату"; Values["CalendarPicker_PreviousPage"] = "◀️"; Values["CalendarPicker_NextPage"] = "▶️"; @@ -31,6 +31,6 @@ public sealed class Russian : Localization Values["PromptDialog_Back"] = "Назад"; Values["ToggleButton_Changed"] = "Настройки изменены"; Values["ButtonGrid_SearchIcon"] = "🔍"; - Values["ButtonGrid_TagIcon"] = "📁"; + Values["TaggedButtonGrid_TagIcon"] = "📁"; } } \ No newline at end of file From 6f930eee8ce573fd5481cb4a580ecd9efd212031 Mon Sep 17 00:00:00 2001 From: Florian Zevedei Date: Tue, 30 Jan 2024 18:23:29 +0100 Subject: [PATCH 31/39] Adding new constructor and additonal ToRowList method to ButtonForm --- TelegramBotBase/Form/ButtonForm.cs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/TelegramBotBase/Form/ButtonForm.cs b/TelegramBotBase/Form/ButtonForm.cs index 9591ddf..c5f745a 100644 --- a/TelegramBotBase/Form/ButtonForm.cs +++ b/TelegramBotBase/Form/ButtonForm.cs @@ -23,6 +23,11 @@ public class ButtonForm DependencyControl = control; } + public ButtonForm(IEnumerable rows) + { + _buttons = rows.ToList(); + } + public IReplyMarkup Markup { get; set; } @@ -149,6 +154,11 @@ public class ButtonForm .Aggregate((a, b) => a.Union(b).ToList()); } + public List ToRowList() + { + return _buttons; + } + public InlineKeyboardButton[][] ToInlineButtonArray() { var ikb = _buttons.Select(a => a.ToArray().Select(b => b.ToInlineButton(this)).ToArray()).ToArray(); From c8c56a42c09d85d8e596d6aef3385e305fbb03f6 Mon Sep 17 00:00:00 2001 From: Florian Zevedei Date: Tue, 30 Jan 2024 18:24:31 +0100 Subject: [PATCH 32/39] Bugfix for TaggedButtonGrid --- TelegramBotBase/Controls/Hybrid/TaggedButtonGrid.cs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/TelegramBotBase/Controls/Hybrid/TaggedButtonGrid.cs b/TelegramBotBase/Controls/Hybrid/TaggedButtonGrid.cs index ce92c96..9b3ef42 100644 --- a/TelegramBotBase/Controls/Hybrid/TaggedButtonGrid.cs +++ b/TelegramBotBase/Controls/Hybrid/TaggedButtonGrid.cs @@ -494,10 +494,16 @@ public class TaggedButtonGrid : MultiView if (result.MessageText == CheckAllLabel) { CheckAllTags(); + Updated(); + result.Handled = true; + return; } else if (result.MessageText == UncheckAllLabel) { UncheckAllTags(); + Updated(); + result.Handled = true; + return; } var i = result.MessageText.LastIndexOf(" "); From 946420f9c69de36a17acf2fae6d6549d0eabe17e Mon Sep 17 00:00:00 2001 From: Florian Zevedei Date: Tue, 30 Jan 2024 18:26:40 +0100 Subject: [PATCH 33/39] Fixing InlineKeyboard use - tags cant be change when using InlineKeyboard mode --- .../Controls/Hybrid/TaggedButtonGrid.cs | 60 +++++++++++++++---- 1 file changed, 47 insertions(+), 13 deletions(-) diff --git a/TelegramBotBase/Controls/Hybrid/TaggedButtonGrid.cs b/TelegramBotBase/Controls/Hybrid/TaggedButtonGrid.cs index 9b3ef42..433b5b8 100644 --- a/TelegramBotBase/Controls/Hybrid/TaggedButtonGrid.cs +++ b/TelegramBotBase/Controls/Hybrid/TaggedButtonGrid.cs @@ -629,22 +629,56 @@ public class TaggedButtonGrid : MultiView break; - case "$back$": - SelectedViewIndex = 0; + default: + + if (SelectedViewIndex != 1) + return; + + + switch (result.RawData) + { + case "$back$": + + SelectedViewIndex = 0; + Updated(); + + return; + + case "$checkall$": + + CheckAllTags(); + + return; + + case "$uncheckall$": + + UncheckAllTags(); + + return; + + } + + + //var i = result.RawData.LastIndexOf(" "); + //if (i == -1) + //{ + // i = result.RawData.Length; + //} + + //var t = result.RawData.Substring(0, i); + + if (SelectedTags.Contains(result.RawData)) + { + SelectedTags.Remove(result.RawData); + } + else + { + SelectedTags.Add(result.RawData); + } + Updated(); - break; - - case "$checkall$": - - CheckAllTags(); - - break; - - case "$uncheckall$": - - UncheckAllTags(); break; } From b3edb95b55fbf3f8ea5d67594e0bf792656fdb78 Mon Sep 17 00:00:00 2001 From: Florian Zevedei Date: Tue, 30 Jan 2024 18:27:05 +0100 Subject: [PATCH 34/39] Adding new total tag and checked tag count --- TelegramBotBase/Controls/Hybrid/TaggedButtonGrid.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/TelegramBotBase/Controls/Hybrid/TaggedButtonGrid.cs b/TelegramBotBase/Controls/Hybrid/TaggedButtonGrid.cs index 433b5b8..666382b 100644 --- a/TelegramBotBase/Controls/Hybrid/TaggedButtonGrid.cs +++ b/TelegramBotBase/Controls/Hybrid/TaggedButtonGrid.cs @@ -767,8 +767,10 @@ public class TaggedButtonGrid : MultiView if (EnableCheckAllTools) { - TagsSubHeadLayoutButtonRow = new ButtonRow(new ButtonBase(CheckAllLabel, "$checkall$"), - new ButtonBase(UncheckAllLabel, "$uncheckall$")); + TagsSubHeadLayoutButtonRow = new ButtonRow(new ButtonBase(string.Format(TotalTagsLabel, Tags.Count), "$total$"), + new ButtonBase(CheckAllLabel, "$checkall$"), + new ButtonBase(UncheckAllLabel, "$uncheckall$"), + new ButtonBase(string.Format(CheckedTagsLabel, SelectedTags.Count), "checked$")); bf.AddButtonRow(TagsSubHeadLayoutButtonRow); } From 86792af2141787630bb6d44102da6cafedf9ce40 Mon Sep 17 00:00:00 2001 From: Florian Zevedei Date: Tue, 30 Jan 2024 18:27:48 +0100 Subject: [PATCH 35/39] Fixing incorrect behaviour with tags --- TelegramBotBase/Controls/Hybrid/TaggedButtonGrid.cs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/TelegramBotBase/Controls/Hybrid/TaggedButtonGrid.cs b/TelegramBotBase/Controls/Hybrid/TaggedButtonGrid.cs index 666382b..1d19519 100644 --- a/TelegramBotBase/Controls/Hybrid/TaggedButtonGrid.cs +++ b/TelegramBotBase/Controls/Hybrid/TaggedButtonGrid.cs @@ -927,8 +927,7 @@ public class TaggedButtonGrid : MultiView { Message m = null; - var form = DataSource.PickItems(CurrentPageIndex * ItemRowsPerPage, ItemRowsPerPage, - EnableSearch ? SearchQuery : null); + ButtonForm form = null; //if (this.EnableSearch && this.SearchQuery != null && this.SearchQuery != "") //{ @@ -941,7 +940,16 @@ public class TaggedButtonGrid : MultiView if (Tags != null && SelectedTags != null) { + form = DataSource.PickAllItems(EnableSearch ? SearchQuery : null); //CurrentPageIndex * ItemRowsPerPage, ItemRowsPerPage, + form = form.TagDuplicate(SelectedTags); + + form = new ButtonForm(form.ToRowList().Skip(CurrentPageIndex * ItemRowsPerPage).Take(ItemRowsPerPage)); + } + else + { + form = DataSource.PickItems(CurrentPageIndex * ItemRowsPerPage, ItemRowsPerPage, + EnableSearch ? SearchQuery : null); } if (EnablePaging) From 727375f7aa6c6a5c44b48e5f41ed52a5917f56a0 Mon Sep 17 00:00:00 2001 From: Florian Zevedei Date: Tue, 30 Jan 2024 19:15:11 +0100 Subject: [PATCH 36/39] Localization fixes --- TelegramBotBase/Localizations/German.cs | 3 +- TelegramBotBase/Localizations/Persian.cs | 68 ++++++++++++------------ TelegramBotBase/Localizations/Russian.cs | 2 + 3 files changed, 38 insertions(+), 35 deletions(-) diff --git a/TelegramBotBase/Localizations/German.cs b/TelegramBotBase/Localizations/German.cs index 02f32c2..ffe99c4 100644 --- a/TelegramBotBase/Localizations/German.cs +++ b/TelegramBotBase/Localizations/German.cs @@ -10,8 +10,7 @@ public sealed class German : Localization Values["ButtonGrid_PreviousPage"] = "◀️"; Values["ButtonGrid_NextPage"] = "▶️"; Values["ButtonGrid_CurrentPage"] = "Seite {0} von {1}"; - Values["ButtonGrid_SearchFeature"] = - "💡 Sende eine Nachricht um die Liste zu filtern. Klicke die 🔍 um den Filter zurückzusetzen."; + Values["ButtonGrid_SearchFeature"] = "💡 Sende eine Nachricht um die Liste zu filtern. Klicke die 🔍 um den Filter zurückzusetzen."; Values["ButtonGrid_Back"] = "Zurück"; Values["TaggedButtonGrid_TotalTags"] = "Gesamt: {0}"; Values["TaggedButtonGrid_CheckedTags"] = "Ausgewählt: {0}"; diff --git a/TelegramBotBase/Localizations/Persian.cs b/TelegramBotBase/Localizations/Persian.cs index 82ec799..72c6b40 100644 --- a/TelegramBotBase/Localizations/Persian.cs +++ b/TelegramBotBase/Localizations/Persian.cs @@ -1,37 +1,39 @@ -namespace TelegramBotBase.Localizations +namespace TelegramBotBase.Localizations; + +public sealed class Persian : Localization { - public sealed class Persian : Localization + public Persian() { - public Persian() - { - Values["Language"] = "فارسی"; - Values["ButtonGrid_Title"] = "منو"; - Values["ButtonGrid_NoItems"] = "هیچ آیتمی وجود ندارد."; - Values["ButtonGrid_PreviousPage"] = "◀️"; - Values["ButtonGrid_NextPage"] = "▶️"; - Values["ButtonGrid_CurrentPage"] = "صفحه ی {0} از {1}"; - Values["ButtonGrid_SearchFeature"] = "💡 برای فیلتر کردن لیست پیام ارسال کنید. برای بازنشانی فیلتر روی 🔍 کلیک کنید."; - Values["ButtonGrid_Back"] = "بازگشت"; - Values["TaggedButtonGrid_CheckAll"] = "بررسی کردن همه"; - Values["TaggedButtonGrid_UncheckAll"] = "بررسی نکردن همه"; - Values["CalendarPicker_Title"] = "تاریخ را انتخاب کنید"; - Values["CalendarPicker_PreviousPage"] = "◀️"; - Values["CalendarPicker_NextPage"] = "▶️"; - Values["TreeView_Title"] = "گره را انتخاب کنید"; - Values["TreeView_LevelUp"] = "🔼 سطح بالا"; - Values["ToggleButton_On"] = "روشن"; - Values["ToggleButton_Off"] = "خاموش"; - Values["ToggleButton_OnIcon"] = "⚫"; - Values["ToggleButton_OffIcon"] = "⚪"; - Values["ToggleButton_Title"] = "تغییر وضعیت"; - Values["ToggleButton_Changed"] = "انتخاب شده"; - Values["MultiToggleButton_SelectedIcon"] = "✅"; - Values["MultiToggleButton_Title"] = "چند تعویض"; - Values["MultiToggleButton_Changed"] = "انتخاب شده"; - Values["PromptDialog_Back"] = "بازگشت"; - Values["ToggleButton_Changed"] = "تنظیمات تغییر کرد"; - Values["ButtonGrid_SearchIcon"] = "🔍"; - Values["TaggedButtonGrid_TagIcon"] = "📁"; - } + Values["Language"] = "فارسی"; + Values["ButtonGrid_Title"] = "منو"; + Values["ButtonGrid_NoItems"] = "هیچ آیتمی وجود ندارد."; + Values["ButtonGrid_PreviousPage"] = "◀️"; + Values["ButtonGrid_NextPage"] = "▶️"; + Values["ButtonGrid_CurrentPage"] = "صفحه ی {0} از {1}"; + Values["ButtonGrid_SearchFeature"] = "💡 برای فیلتر کردن لیست پیام ارسال کنید. برای بازنشانی فیلتر روی 🔍 کلیک کنید."; + Values["ButtonGrid_Back"] = "بازگشت"; + Values["TaggedButtonGrid_TotalTags"] = "Total: {0}"; + Values["TaggedButtonGrid_CheckedTags"] = "Checked: {0}"; + Values["TaggedButtonGrid_CheckAll"] = "بررسی کردن همه"; + Values["TaggedButtonGrid_UncheckAll"] = "بررسی نکردن همه"; + Values["CalendarPicker_Title"] = "تاریخ را انتخاب کنید"; + Values["CalendarPicker_PreviousPage"] = "◀️"; + Values["CalendarPicker_NextPage"] = "▶️"; + Values["TreeView_Title"] = "گره را انتخاب کنید"; + Values["TreeView_LevelUp"] = "🔼 سطح بالا"; + Values["ToggleButton_On"] = "روشن"; + Values["ToggleButton_Off"] = "خاموش"; + Values["ToggleButton_OnIcon"] = "⚫"; + Values["ToggleButton_OffIcon"] = "⚪"; + Values["ToggleButton_Title"] = "تغییر وضعیت"; + Values["ToggleButton_Changed"] = "انتخاب شده"; + Values["MultiToggleButton_SelectedIcon"] = "✅"; + Values["MultiToggleButton_Title"] = "چند تعویض"; + Values["MultiToggleButton_Changed"] = "انتخاب شده"; + Values["PromptDialog_Back"] = "بازگشت"; + Values["ToggleButton_Changed"] = "تنظیمات تغییر کرد"; + Values["ButtonGrid_SearchIcon"] = "🔍"; + Values["TaggedButtonGrid_TagIcon"] = "📁"; } } + diff --git a/TelegramBotBase/Localizations/Russian.cs b/TelegramBotBase/Localizations/Russian.cs index f2fceeb..7c1ff5f 100644 --- a/TelegramBotBase/Localizations/Russian.cs +++ b/TelegramBotBase/Localizations/Russian.cs @@ -12,6 +12,8 @@ public sealed class Russian : Localization Values["ButtonGrid_CurrentPage"] = "Страница {0} из {1}"; Values["ButtonGrid_SearchFeature"] = "💡 Отправьте сообщение, чтобы отфильтровать список. Нажмите на 🔍, чтобы сбросить фильтр."; Values["ButtonGrid_Back"] = "Назада"; + Values["TaggedButtonGrid_TotalTags"] = "Total: {0}"; + Values["TaggedButtonGrid_CheckedTags"] = "Checked: {0}"; Values["TaggedButtonGrid_CheckAll"] = "Выделить все"; Values["TaggedButtonGrid_UncheckAll"] = "Отменить выбор"; Values["CalendarPicker_Title"] = "Календарь / Выберите дату"; From 4635a96fc72aa68144ddf94046da42e238027bb3 Mon Sep 17 00:00:00 2001 From: Florian Zevedei Date: Tue, 30 Jan 2024 19:24:13 +0100 Subject: [PATCH 37/39] Removing old comments --- .../Controls/Hybrid/TaggedButtonGrid.cs | 39 ------------------- 1 file changed, 39 deletions(-) diff --git a/TelegramBotBase/Controls/Hybrid/TaggedButtonGrid.cs b/TelegramBotBase/Controls/Hybrid/TaggedButtonGrid.cs index 1d19519..94266b7 100644 --- a/TelegramBotBase/Controls/Hybrid/TaggedButtonGrid.cs +++ b/TelegramBotBase/Controls/Hybrid/TaggedButtonGrid.cs @@ -383,14 +383,6 @@ public class TaggedButtonGrid : MultiView index = br.Item2; } - - //var button = HeadLayoutButtonRow?. .FirstOrDefault(a => a.Text.Trim() == result.MessageText) - // ?? SubHeadLayoutButtonRow?.FirstOrDefault(a => a.Text.Trim() == result.MessageText); - - // bf.ToList().FirstOrDefault(a => a.Text.Trim() == result.MessageText) - - //var index = bf.FindRowByButton(button); - check: @@ -579,15 +571,6 @@ public class TaggedButtonGrid : MultiView index = br.Item2; } - - //var bf = DataSource.ButtonForm; - - //var button = HeadLayoutButtonRow?.FirstOrDefault(a => a.Value == result.RawData) - // ?? SubHeadLayoutButtonRow?.FirstOrDefault(a => a.Value == result.RawData) - // ?? bf.ToList().FirstOrDefault(a => a.Value == result.RawData); - - //var index = bf.FindRowByButton(button); - check: if (match != null) { @@ -659,15 +642,6 @@ public class TaggedButtonGrid : MultiView } - - //var i = result.RawData.LastIndexOf(" "); - //if (i == -1) - //{ - // i = result.RawData.Length; - //} - - //var t = result.RawData.Substring(0, i); - if (SelectedTags.Contains(result.RawData)) { SelectedTags.Remove(result.RawData); @@ -802,10 +776,6 @@ public class TaggedButtonGrid : MultiView return; } - //if (bf.Count == 0) - // return; - - var rkm = (ReplyKeyboardMarkup)bf; rkm.ResizeKeyboard = ResizeKeyboard; rkm.OneTimeKeyboard = OneTimeKeyboard; @@ -929,15 +899,6 @@ public class TaggedButtonGrid : MultiView ButtonForm form = null; - //if (this.EnableSearch && this.SearchQuery != null && this.SearchQuery != "") - //{ - // form = form.FilterDuplicate(this.SearchQuery, true); - //} - //else - //{ - // form = form.Duplicate(); - //} - if (Tags != null && SelectedTags != null) { form = DataSource.PickAllItems(EnableSearch ? SearchQuery : null); //CurrentPageIndex * ItemRowsPerPage, ItemRowsPerPage, From a483bc7c0b6e5b759f725820d72187a39d4d5c9e Mon Sep 17 00:00:00 2001 From: Florian Zevedei Date: Tue, 30 Jan 2024 21:57:05 +0100 Subject: [PATCH 38/39] Update Russian.cs --- TelegramBotBase/Localizations/Russian.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/TelegramBotBase/Localizations/Russian.cs b/TelegramBotBase/Localizations/Russian.cs index 7c1ff5f..21967ac 100644 --- a/TelegramBotBase/Localizations/Russian.cs +++ b/TelegramBotBase/Localizations/Russian.cs @@ -12,8 +12,8 @@ public sealed class Russian : Localization Values["ButtonGrid_CurrentPage"] = "Страница {0} из {1}"; Values["ButtonGrid_SearchFeature"] = "💡 Отправьте сообщение, чтобы отфильтровать список. Нажмите на 🔍, чтобы сбросить фильтр."; Values["ButtonGrid_Back"] = "Назада"; - Values["TaggedButtonGrid_TotalTags"] = "Total: {0}"; - Values["TaggedButtonGrid_CheckedTags"] = "Checked: {0}"; + Values["TaggedButtonGrid_TotalTags"] = "Всего: {0}"; + Values["TaggedButtonGrid_CheckedTags"] = "Отмечено: {0}"; Values["TaggedButtonGrid_CheckAll"] = "Выделить все"; Values["TaggedButtonGrid_UncheckAll"] = "Отменить выбор"; Values["CalendarPicker_Title"] = "Календарь / Выберите дату"; From b25282929686e48314463c013a54c5fbf324b7d2 Mon Sep 17 00:00:00 2001 From: ramax495 Date: Wed, 31 Jan 2024 10:01:13 +0300 Subject: [PATCH 39/39] Fix typo --- TelegramBotBase/Localizations/Russian.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TelegramBotBase/Localizations/Russian.cs b/TelegramBotBase/Localizations/Russian.cs index 21967ac..08315e6 100644 --- a/TelegramBotBase/Localizations/Russian.cs +++ b/TelegramBotBase/Localizations/Russian.cs @@ -11,7 +11,7 @@ public sealed class Russian : Localization Values["ButtonGrid_NextPage"] = "▶️"; Values["ButtonGrid_CurrentPage"] = "Страница {0} из {1}"; Values["ButtonGrid_SearchFeature"] = "💡 Отправьте сообщение, чтобы отфильтровать список. Нажмите на 🔍, чтобы сбросить фильтр."; - Values["ButtonGrid_Back"] = "Назада"; + Values["ButtonGrid_Back"] = "Назад"; Values["TaggedButtonGrid_TotalTags"] = "Всего: {0}"; Values["TaggedButtonGrid_CheckedTags"] = "Отмечено: {0}"; Values["TaggedButtonGrid_CheckAll"] = "Выделить все";