From 1b3a4786bf04cbadb387286dd858be87a17a2d9b Mon Sep 17 00:00:00 2001 From: Sergey Gut Date: Sat, 25 Dec 2021 20:08:40 +0400 Subject: [PATCH 1/4] Fixes for multiple handlers --- .gitignore | 1 + Core/GeneralHandler.cs | 6 ++---- Kruzya.TelegramBot.sln | 1 + docker/Dockerfile.aarch64 | 4 ++-- modules/CombotAntiSpam/UserJoinHandler.cs | 2 +- modules/UrlLimitations/MessageHandler.cs | 2 +- 6 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.gitignore b/.gitignore index 587fcbc..522f82f 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,7 @@ obj/ /packages/ .idea +.vs .DS_Store appsettings.json diff --git a/Core/GeneralHandler.cs b/Core/GeneralHandler.cs index c4d7300..65388ca 100644 --- a/Core/GeneralHandler.cs +++ b/Core/GeneralHandler.cs @@ -28,9 +28,9 @@ namespace Kruzya.TelegramBot.Core } [HandleEverything] + [Priority(-10)] public async Task Listener() { - Console.WriteLine("handle"); foreach (var message in new Message[] {RawUpdate.Message, RawUpdate.EditedMessage, RawUpdate.ChannelPost, RawUpdate.EditedChannelPost}) { if (message == null) @@ -38,10 +38,8 @@ namespace Kruzya.TelegramBot.Core continue; } - return new Task(); + await VerifyChatPair(message); } - - throw new ArgumentException(); } public async Task VerifyChatPair(Message message) diff --git a/Kruzya.TelegramBot.sln b/Kruzya.TelegramBot.sln index 9681417..a5069e8 100644 --- a/Kruzya.TelegramBot.sln +++ b/Kruzya.TelegramBot.sln @@ -1,5 +1,6 @@  Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core", "Core\Core.csproj", "{B41CB31A-641E-4079-87ED-5CE310B2D8C1}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Modules", "Modules", "{C7821F15-DEDD-474F-A575-A296D4B58F10}" diff --git a/docker/Dockerfile.aarch64 b/docker/Dockerfile.aarch64 index 6794e72..ed20f60 100644 --- a/docker/Dockerfile.aarch64 +++ b/docker/Dockerfile.aarch64 @@ -1,5 +1,5 @@ # Build a project -FROM mcr.microsoft.com/dotnet/sdk:3.1.416-bullseye-arm64v8 AS build +FROM mcr.microsoft.com/dotnet/sdk:5.0.404-buster-slim-arm64v8 AS build WORKDIR /source # Copy project and perform restoring @@ -20,7 +20,7 @@ RUN dotnet publish -c release -o /app --no-restore Kruzya.TelegramBot.sln && \ rm -f /app/TelegramBot.*.{dll,pdb,json} # Now reuse image with only runtime -FROM mcr.microsoft.com/dotnet/aspnet:3.1.22-alpine3.14-arm64v8 +FROM mcr.microsoft.com/dotnet/aspnet:5.0.13-alpine3.14-arm64v8 WORKDIR /user COPY --from=build /app /app ENTRYPOINT ["dotnet", "/app/TelegramBot.dll"] diff --git a/modules/CombotAntiSpam/UserJoinHandler.cs b/modules/CombotAntiSpam/UserJoinHandler.cs index 60fced1..ff66722 100644 --- a/modules/CombotAntiSpam/UserJoinHandler.cs +++ b/modules/CombotAntiSpam/UserJoinHandler.cs @@ -53,7 +53,7 @@ namespace Kruzya.TelegramBot.CombotAntiSpam if (canKickMembers) { - await Bot.KickChatMemberAsync(Chat, member.Id); + await Bot.BanChatMemberAsync(Chat, member.Id); } } } diff --git a/modules/UrlLimitations/MessageHandler.cs b/modules/UrlLimitations/MessageHandler.cs index 0bc4726..b7c307d 100644 --- a/modules/UrlLimitations/MessageHandler.cs +++ b/modules/UrlLimitations/MessageHandler.cs @@ -49,7 +49,7 @@ namespace Kruzya.TelegramBot.UrlLimitations { var targetChat = new ChatId(Chat.Id); Task.WaitAll(new Task[] { - Bot.KickChatMemberAsync(new ChatId(Chat.Id), From.Id, DateTime.Now.AddDays(1)), + Bot.BanChatMemberAsync(new ChatId(Chat.Id), From.Id, DateTime.Now.AddDays(1)), Bot.DeleteMessageAsync(targetChat, message.MessageId), Bot.SendTextMessageAsync(targetChat, $"Member {From.ToHtml()} has been banned.\nReason:
Spam suspicion
", ParseMode.Html) From 08d9474e43d7363fd6b4ec3ab5e94874586b88d8 Mon Sep 17 00:00:00 2001 From: Sergey Gut Date: Sat, 25 Dec 2021 21:44:39 +0400 Subject: [PATCH 2/4] Fix multiple handling --- Core/GeneralHandler.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Core/GeneralHandler.cs b/Core/GeneralHandler.cs index 65388ca..d17a472 100644 --- a/Core/GeneralHandler.cs +++ b/Core/GeneralHandler.cs @@ -29,7 +29,7 @@ namespace Kruzya.TelegramBot.Core [HandleEverything] [Priority(-10)] - public async Task Listener() + public async Task Listener() { foreach (var message in new Message[] {RawUpdate.Message, RawUpdate.EditedMessage, RawUpdate.ChannelPost, RawUpdate.EditedChannelPost}) { @@ -40,6 +40,8 @@ namespace Kruzya.TelegramBot.Core await VerifyChatPair(message); } + + return true; } public async Task VerifyChatPair(Message message) From 4807296992f55004bfcacb819a2c1858093bdd17 Mon Sep 17 00:00:00 2001 From: Sergey Gut Date: Sat, 25 Dec 2021 22:15:36 +0400 Subject: [PATCH 3/4] Fix assembly name in D2 Xur module --- modules/Destiny2.WhereIsXur/Destiny2.WhereIsXur.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/Destiny2.WhereIsXur/Destiny2.WhereIsXur.csproj b/modules/Destiny2.WhereIsXur/Destiny2.WhereIsXur.csproj index d207072..eb91cf1 100644 --- a/modules/Destiny2.WhereIsXur/Destiny2.WhereIsXur.csproj +++ b/modules/Destiny2.WhereIsXur/Destiny2.WhereIsXur.csproj @@ -2,7 +2,7 @@ net5.0 - Kruzya.TelegramBot.D2_WhereIsXur + TelegramBot.D2_WhereIsXur Kruzya.TelegramBot.Destiny2.WhereIsXur From 5f93d602779c51d0ef9e4ba39e289590f339193b Mon Sep 17 00:00:00 2001 From: Sergey Gut Date: Sat, 25 Dec 2021 23:52:09 +0400 Subject: [PATCH 4/4] Fix user option values on .NET 5+ --- Core/Data/BotUserValue.cs | 42 +++++------ Core/Extensions/RepositoryExtension.cs | 11 ++- Core/GeneralHandler.cs | 1 + .../20211225192324_AddValueType.Designer.cs | 73 +++++++++++++++++++ .../Migrations/20211225192324_AddValueType.cs | 36 +++++++++ Core/Migrations/CoreContextModelSnapshot.cs | 7 +- 6 files changed, 145 insertions(+), 25 deletions(-) create mode 100644 Core/Migrations/20211225192324_AddValueType.Designer.cs create mode 100644 Core/Migrations/20211225192324_AddValueType.cs diff --git a/Core/Data/BotUserValue.cs b/Core/Data/BotUserValue.cs index 9a95827..f4f1622 100644 --- a/Core/Data/BotUserValue.cs +++ b/Core/Data/BotUserValue.cs @@ -1,7 +1,10 @@ using System; using System.ComponentModel.DataAnnotations; +using System.Diagnostics.CodeAnalysis; using System.IO; using System.Runtime.Serialization.Formatters.Binary; +using System.Text.Json; +using System.Xml.Serialization; namespace Kruzya.TelegramBot.Core.Data { @@ -13,30 +16,27 @@ namespace Kruzya.TelegramBot.Core.Data public BotUser BotUser { get; set; } public string Name { get; set; } - public byte[] Value - { - get - { - var fmt = new BinaryFormatter(); - using var memStream = new MemoryStream(); - fmt.Serialize(memStream, data); - - return memStream.ToArray(); - } - set - { - var fmt = new BinaryFormatter(); - using var memStream = new MemoryStream(); - memStream.Write(value); - memStream.Position = 0; + public string ValueType { get; set; } - data = fmt.Deserialize(memStream); + public byte[] Value { get; set; } + + public T GetValue(T defVal = default) + { + try + { + return JsonSerializer.Deserialize(new ReadOnlySpan(Value)); + } + catch (Exception) + { + return defVal; } } - [NonSerialized] public object data; - - public T GetValue() => (T) data; - public void SetValue(T value) => data = value; + public void SetValue(T value) + { + Value = JsonSerializer.SerializeToUtf8Bytes(value, new JsonSerializerOptions { WriteIndented = false, + IgnoreNullValues = true }); + ValueType = value.GetType().FullName; + } } } \ No newline at end of file diff --git a/Core/Extensions/RepositoryExtension.cs b/Core/Extensions/RepositoryExtension.cs index db33374..0c2b834 100644 --- a/Core/Extensions/RepositoryExtension.cs +++ b/Core/Extensions/RepositoryExtension.cs @@ -30,8 +30,14 @@ namespace Kruzya.TelegramBot.Core.Extensions /// /// /// Entity for marking as modified. - public static void MarkAsModified(this DbContext dbContext, object entity) => - dbContext.Entry(entity).State = EntityState.Modified; + public static void MarkAsModified(this DbContext dbContext, object entity) + { + var entry = dbContext.Entry(entity); + if (entry.State == EntityState.Added) + return; + + entry.State = EntityState.Modified; + } #endregion @@ -97,6 +103,7 @@ namespace Kruzya.TelegramBot.Core.Extensions if (opt == null) { opt = repository.Create(); + opt.Name = option; opt.BotUser = await repository.GetService().Users.FindOrCreate(chatId, userId); } diff --git a/Core/GeneralHandler.cs b/Core/GeneralHandler.cs index d17a472..163cd32 100644 --- a/Core/GeneralHandler.cs +++ b/Core/GeneralHandler.cs @@ -4,6 +4,7 @@ using System.Threading.Tasks; using BotFramework; using BotFramework.Attributes; using Kruzya.TelegramBot.Core.Data; +using Kruzya.TelegramBot.Core.Extensions; using Microsoft.EntityFrameworkCore; using Telegram.Bot.Types; diff --git a/Core/Migrations/20211225192324_AddValueType.Designer.cs b/Core/Migrations/20211225192324_AddValueType.Designer.cs new file mode 100644 index 0000000..059b4ef --- /dev/null +++ b/Core/Migrations/20211225192324_AddValueType.Designer.cs @@ -0,0 +1,73 @@ +// +using System; +using Kruzya.TelegramBot.Core.Data; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +namespace Kruzya.TelegramBot.Core.Migrations +{ + [DbContext(typeof(CoreContext))] + [Migration("20211225192324_AddValueType")] + partial class AddValueType + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "3.1.2") + .HasAnnotation("Relational:MaxIdentifierLength", 64); + + modelBuilder.Entity("Kruzya.TelegramBot.Core.Data.BotUser", b => + { + b.Property("BotUserId") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("ChatId") + .HasColumnType("bigint"); + + b.Property("UserId") + .HasColumnType("bigint"); + + b.HasKey("BotUserId"); + + b.ToTable("Users"); + }); + + modelBuilder.Entity("Kruzya.TelegramBot.Core.Data.BotUserValue", b => + { + b.Property("BotUserValueId") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("BotUserId") + .HasColumnType("char(36)"); + + b.Property("Name") + .HasColumnType("longtext CHARACTER SET utf8mb4"); + + b.Property("Value") + .HasColumnType("longblob"); + + b.Property("ValueType") + .HasColumnType("longtext CHARACTER SET utf8mb4"); + + b.HasKey("BotUserValueId"); + + b.HasIndex("BotUserId"); + + b.ToTable("UserValues"); + }); + + modelBuilder.Entity("Kruzya.TelegramBot.Core.Data.BotUserValue", b => + { + b.HasOne("Kruzya.TelegramBot.Core.Data.BotUser", "BotUser") + .WithMany() + .HasForeignKey("BotUserId"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Core/Migrations/20211225192324_AddValueType.cs b/Core/Migrations/20211225192324_AddValueType.cs new file mode 100644 index 0000000..acb070b --- /dev/null +++ b/Core/Migrations/20211225192324_AddValueType.cs @@ -0,0 +1,36 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +namespace Kruzya.TelegramBot.Core.Migrations +{ + public partial class AddValueType : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "ValueType", + table: "UserValues", + nullable: true); + + migrationBuilder.AlterColumn( + name: "UserId", + table: "Users", + nullable: false, + oldClrType: typeof(int), + oldType: "int"); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "ValueType", + table: "UserValues"); + + migrationBuilder.AlterColumn( + name: "UserId", + table: "Users", + type: "int", + nullable: false, + oldClrType: typeof(long)); + } + } +} diff --git a/Core/Migrations/CoreContextModelSnapshot.cs b/Core/Migrations/CoreContextModelSnapshot.cs index 827b255..8545ed9 100644 --- a/Core/Migrations/CoreContextModelSnapshot.cs +++ b/Core/Migrations/CoreContextModelSnapshot.cs @@ -26,8 +26,8 @@ namespace Kruzya.TelegramBot.Core.Migrations b.Property("ChatId") .HasColumnType("bigint"); - b.Property("UserId") - .HasColumnType("int"); + b.Property("UserId") + .HasColumnType("bigint"); b.HasKey("BotUserId"); @@ -49,6 +49,9 @@ namespace Kruzya.TelegramBot.Core.Migrations b.Property("Value") .HasColumnType("longblob"); + b.Property("ValueType") + .HasColumnType("longtext CHARACTER SET utf8mb4"); + b.HasKey("BotUserValueId"); b.HasIndex("BotUserId");