diff --git a/Auth/AuthanticationByBearerToken.cs b/Auth/AuthanticationByBearerToken.cs index cdff743..29819e6 100644 --- a/Auth/AuthanticationByBearerToken.cs +++ b/Auth/AuthanticationByBearerToken.cs @@ -50,7 +50,7 @@ namespace DiscordApp.Auth private bool IsValidApiKey(string apiKey) { - return true; + return false; } private bool CheckForInvalidCharacters(string value) { diff --git a/Controllers/WeatherForecastController.cs b/Controllers/WeatherForecastController.cs index 170ce38..95de88f 100644 --- a/Controllers/WeatherForecastController.cs +++ b/Controllers/WeatherForecastController.cs @@ -29,12 +29,6 @@ namespace DiscordApp.Controllers }) .ToArray(); } - public static async Task isAllowed(IServiceProvider services) - { - var context = services.GetRequiredService(); - if (context.HttpContext.Request.Cookies["geff"] == "ok") { return true; } - else { return false; } - - } + } } \ No newline at end of file diff --git a/Database/Tables/Certificate.cs b/Database/Tables/Certificate.cs index 875f049..919ba81 100644 --- a/Database/Tables/Certificate.cs +++ b/Database/Tables/Certificate.cs @@ -14,7 +14,7 @@ namespace DiscordApp.Database.Tables public DateOnly Date { get; set; } public string Text { get; set; } public int DocumentId { get; set; } - + public string DocumentType { get; set; } } } diff --git a/Justice/Interactions/BiznessInteractions.cs b/Justice/Interactions/BiznessInteractions.cs index ac07b16..bb6ba88 100644 --- a/Justice/Interactions/BiznessInteractions.cs +++ b/Justice/Interactions/BiznessInteractions.cs @@ -26,8 +26,10 @@ namespace DiscordApp.Justice.Interactions return; } User spApplicant = await User.CreateUser(applicant.Applicant); - var employees = new List(); - employees.Add(applicant.Id); + var employees = new List + { + applicant.Id + }; Bizness biznessDB = new() { diff --git a/Justice/Interactions/NotaryInteractions.cs b/Justice/Interactions/NotaryInteractions.cs index b184eec..2bc879f 100644 --- a/Justice/Interactions/NotaryInteractions.cs +++ b/Justice/Interactions/NotaryInteractions.cs @@ -1,6 +1,10 @@ -using Discord.Interactions; +using Discord; +using Discord.Interactions; +using DiscordApp.Database.Tables; using DiscordApp.Justice.Modals; +using DiscordApp.Types; using DiscordApp.Utilities; +using Microsoft.AspNetCore.Authorization; namespace DiscordApp.Justice.Interactions { @@ -17,19 +21,75 @@ namespace DiscordApp.Justice.Interactions int passportId; int documentId; int certificateId; + string thumbnailUrl; + Passport passport; Random random = new Random(); - IdChecker.IdLenghtIsLower(out certificateId); - documentId = Startup.appDbContext.Certificates.OrderBy(t => t.Id).First().Id + 1; - bool isInt = int.TryParse(modal.passportId, out passportId); - if (!isInt) + Utilities.Utilities.IdGenerator(out certificateId); + documentId = Startup.appDbContext.Certificates.OrderBy(t => t.Id).FirstOrDefault().Id; + documentId += 1; + if (!int.TryParse(modal.passportId, out passportId)) { await FollowupAsync($"Айди паспорта еще старое, попробуй использовать другого бота.", ephemeral: true); + return; } - else if (Startup.appDbContext.Passport.Find(passportId) == null) + else if (Utilities.Utilities.IsPassport(passportId, out passport)) { await FollowupAsync($"Паспорт не найден в базе данных, попробуй написать правильно", ephemeral: true); + return; } + + Certificate certificate = new() + { + Date = DateOnly.FromDateTime(DateTime.Now), + DocumentId = documentId, + Employee = ((IGuildUser)Context.User).DisplayName, + Id = certificateId, + passport = passport, + Text = modal.documentText, + DocumentType = modal.documentType + }; + Reports report = new() + { + Employee = Startup.sp.GetUser(Context.User.Id.ToString()).Result.Name, + type = ReportTypes.editPassport + }; + await Startup.appDbContext.Reports.AddAsync(report); + await Startup.appDbContext.Certificates.AddAsync(certificate); + if (!modal.documentText.StartsWith("test")) + await Startup.appDbContext.SaveChangesAsync(); + + try + { + thumbnailUrl = spworlds.Types.User.CreateUser(passport.Applicant).Result.GetSkinPart(spworlds.Types.SkinPart.face); + } + catch + { + thumbnailUrl = null; + } + + var author = new EmbedAuthorBuilder() + .WithName(((IGuildUser)Context.User).DisplayName) + .WithIconUrl(((IGuildUser)Context.User).GetDisplayAvatarUrl()); + + var field1 = new EmbedFieldBuilder() + .WithName("Данные документа:") + .WithValue($"ID документа: {documentId}\nID паспорта: {passport.Id}\nID сертификата: {certificateId}\n\nАпликант: {passport.Applicant}"); + var field2 = new EmbedFieldBuilder() + .WithName("Текст документа:") + .WithValue($"```{modal.documentText}```"); + var embed = new EmbedBuilder() + .WithTitle("Заверен новый документ") + .WithAuthor(author) + .WithThumbnailUrl(thumbnailUrl) + .WithFields(field1) + .WithFields(field2) + .WithColor(Color.DarkBlue) + .Build(); + var channel = Context.Guild.GetChannel(1172879659193606164) as ITextChannel; + await channel.SendMessageAsync(embed: embed); + await FollowupAsync(embed: embed); + } } } diff --git a/Justice/Interactions/PassportGetterInteraction.cs b/Justice/Interactions/PassportGetterInteraction.cs index eeae545..6869695 100644 --- a/Justice/Interactions/PassportGetterInteraction.cs +++ b/Justice/Interactions/PassportGetterInteraction.cs @@ -15,6 +15,7 @@ namespace DiscordApp.Justice.Interactions { await DeferAsync(true); int passportId; + string thumbnailUrl; Passport passport; bool isInteger = int.TryParse(modal.passport, out passportId); if (isInteger) @@ -42,11 +43,18 @@ namespace DiscordApp.Justice.Interactions new EmbedFieldBuilder().WithName("Годен до").WithValue($"").WithIsInline(true), new EmbedFieldBuilder().WithName("Паспортист").WithValue($"<@{passport.Employee}>").WithIsInline(true) }; - var spUser = await spworlds.Types.User.CreateUser(passport.Applicant); - var embed = new EmbedBuilder() + try + { + thumbnailUrl = spworlds.Types.User.CreateUser(passport.Applicant).Result.GetSkinPart(spworlds.Types.SkinPart.face); + } + catch + { + thumbnailUrl = null; + } + var embed = new EmbedBuilder() .WithTitle("**Информация о паспорте**") .WithFields(fields) - .WithThumbnailUrl(spUser.GetSkinPart(spworlds.Types.SkinPart.face)) + .WithThumbnailUrl(thumbnailUrl) .Build(); await FollowupAsync(embed:embed, ephemeral: true); diff --git a/Justice/Interactions/PassportInteraction.cs b/Justice/Interactions/PassportInteraction.cs index bf64345..53ddef4 100644 --- a/Justice/Interactions/PassportInteraction.cs +++ b/Justice/Interactions/PassportInteraction.cs @@ -159,7 +159,7 @@ namespace DiscordApp.Justice.Interactions DateTimeOffset toTime; DateOnly birthDate; int id; - Utilities.IdChecker.IdLenghtIsLower(out id); + Utilities.Utilities.IdGenerator(out id); long unixBirthDateTime; string cityName; string cardNumber; @@ -242,7 +242,7 @@ namespace DiscordApp.Justice.Interactions bool isUnical = false; while (!isUnical) { - Utilities.IdChecker.IdLenghtIsLower(out id); + Utilities.Utilities.IdGenerator(out id); passport.Id = id; Console.WriteLine(passport.Id); if (Startup.appDbContext.Passport.FindAsync(passport.Id).Result == null) { break; } diff --git a/JusticeHandler.cs b/JusticeHandler.cs index 0c58610..e3fb284 100644 --- a/JusticeHandler.cs +++ b/JusticeHandler.cs @@ -3,8 +3,9 @@ using Discord.Interactions; using Discord.WebSocket; using DiscordApp.Database; using Microsoft.VisualBasic; +using Newtonsoft.Json; using System.Reflection; - +using System.Text.Json.Nodes; namespace DiscordApp { @@ -39,8 +40,17 @@ namespace DiscordApp private async Task ReadyAsync() { - await client.SetGameAsync("yaflay.ru", "https://yaflay.ru/", ActivityType.Watching); + HttpClient http = new HttpClient(); await handler.RegisterCommandsGloballyAsync(true); + while (true) + { + var request = await http.GetAsync("https://api.mcsrvstat.us/3/pl.spworlds.ru"); + JsonNode responseAboutPL = JsonNode.Parse(request.Content.ReadAsStringAsync().Result); + if (responseAboutPL["online"].Equals("false")) await client.SetGameAsync($"выключенный PL", "https://yaflay.ru/", ActivityType.Watching); + else await client.SetGameAsync($"онлайн на PL: {responseAboutPL["players"]["online"]}", "https://yaflay.ru/", ActivityType.Watching); + await Task.Delay(30000); + } + } private async Task HandleInteraction(SocketInteraction interaction) diff --git a/Migrations/20231111140218_Migrate11111701.Designer.cs b/Migrations/20231111140218_Migrate11111701.Designer.cs new file mode 100644 index 0000000..e17875b --- /dev/null +++ b/Migrations/20231111140218_Migrate11111701.Designer.cs @@ -0,0 +1,302 @@ +// +using System; +using DiscordApp.Database; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace DiscordApp.Migrations +{ + [DbContext(typeof(AppDbContext))] + [Migration("20231111140218_Migrate11111701")] + partial class Migrate11111701 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "7.0.13") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("DiscordApp.Database.Tables.ArtsPatents", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Date") + .HasColumnType("bigint"); + + b.Property("Employee") + .IsRequired() + .HasColumnType("text"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text"); + + b.Property("Number") + .IsRequired() + .HasColumnType("integer[]"); + + b.Property("Size") + .IsRequired() + .HasColumnType("text"); + + b.Property("isAllowedToResell") + .HasColumnType("boolean"); + + b.Property("passportId") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("passportId"); + + b.ToTable("ArtsPatent", "public"); + }); + + modelBuilder.Entity("DiscordApp.Database.Tables.Autobranches", b => + { + b.Property("ChannelId") + .ValueGeneratedOnAdd() + .HasColumnType("numeric(20,0)"); + + b.Property("BranchName") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("ChannelId"); + + b.ToTable("Autobranches", "public"); + }); + + modelBuilder.Entity("DiscordApp.Database.Tables.Bizness", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ApplicantId") + .HasColumnType("integer"); + + b.Property("BiznessEmployes") + .IsRequired() + .HasColumnType("integer[]"); + + b.Property("BiznessName") + .IsRequired() + .HasColumnType("text"); + + b.Property("BiznessType") + .IsRequired() + .HasColumnType("text"); + + b.Property("CardNumber") + .HasColumnType("integer"); + + b.Property("Date") + .HasColumnType("bigint"); + + b.Property("Employee") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("ApplicantId"); + + b.ToTable("Bizness", "public"); + }); + + modelBuilder.Entity("DiscordApp.Database.Tables.BooksPatents", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Annotation") + .IsRequired() + .HasColumnType("text"); + + b.Property("Date") + .HasColumnType("bigint"); + + b.Property("Employee") + .IsRequired() + .HasColumnType("text"); + + b.Property("Janre") + .IsRequired() + .HasColumnType("text"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text"); + + b.Property("isAllowedToResell") + .HasColumnType("boolean"); + + b.Property("passportId") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("passportId"); + + b.ToTable("BooksPatent", "public"); + }); + + modelBuilder.Entity("DiscordApp.Database.Tables.Certificate", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Date") + .HasColumnType("date"); + + b.Property("DocumentId") + .HasColumnType("integer"); + + b.Property("DocumentType") + .IsRequired() + .HasColumnType("text"); + + b.Property("Employee") + .IsRequired() + .HasColumnType("text"); + + b.Property("Text") + .IsRequired() + .HasColumnType("text"); + + b.Property("passportId") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("passportId"); + + b.ToTable("Certificate", "public"); + }); + + modelBuilder.Entity("DiscordApp.Database.Tables.Passport", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Applicant") + .IsRequired() + .HasColumnType("text"); + + b.Property("Date") + .HasColumnType("bigint"); + + b.Property("Employee") + .HasColumnType("numeric(20,0)"); + + b.Property("Gender") + .IsRequired() + .HasColumnType("text"); + + b.Property("RpName") + .IsRequired() + .HasColumnType("text"); + + b.Property("Support") + .HasColumnType("integer"); + + b.Property("birthDate") + .HasColumnType("bigint"); + + b.HasKey("Id"); + + b.ToTable("Passport", "public"); + }); + + modelBuilder.Entity("DiscordApp.Database.Tables.Reports", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Employee") + .IsRequired() + .HasColumnType("text"); + + b.Property("type") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.ToTable("Reports", "public"); + }); + + modelBuilder.Entity("DiscordApp.Database.Tables.ArtsPatents", b => + { + b.HasOne("DiscordApp.Database.Tables.Passport", "passport") + .WithMany() + .HasForeignKey("passportId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("passport"); + }); + + modelBuilder.Entity("DiscordApp.Database.Tables.Bizness", b => + { + b.HasOne("DiscordApp.Database.Tables.Passport", "Applicant") + .WithMany() + .HasForeignKey("ApplicantId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Applicant"); + }); + + modelBuilder.Entity("DiscordApp.Database.Tables.BooksPatents", b => + { + b.HasOne("DiscordApp.Database.Tables.Passport", "passport") + .WithMany() + .HasForeignKey("passportId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("passport"); + }); + + modelBuilder.Entity("DiscordApp.Database.Tables.Certificate", b => + { + b.HasOne("DiscordApp.Database.Tables.Passport", "passport") + .WithMany() + .HasForeignKey("passportId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("passport"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Migrations/20231111140218_Migrate11111701.cs b/Migrations/20231111140218_Migrate11111701.cs new file mode 100644 index 0000000..9a4545a --- /dev/null +++ b/Migrations/20231111140218_Migrate11111701.cs @@ -0,0 +1,56 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace DiscordApp.Migrations +{ + /// + public partial class Migrate11111701 : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "Certificate", + schema: "public", + columns: table => new + { + Id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + Employee = table.Column(type: "text", nullable: false), + passportId = table.Column(type: "integer", nullable: false), + Date = table.Column(type: "date", nullable: false), + Text = table.Column(type: "text", nullable: false), + DocumentId = table.Column(type: "integer", nullable: false), + DocumentType = table.Column(type: "text", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Certificate", x => x.Id); + table.ForeignKey( + name: "FK_Certificate_Passport_passportId", + column: x => x.passportId, + principalSchema: "public", + principalTable: "Passport", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateIndex( + name: "IX_Certificate_passportId", + schema: "public", + table: "Certificate", + column: "passportId"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "Certificate", + schema: "public"); + } + } +} diff --git a/Migrations/AppDbContextModelSnapshot.cs b/Migrations/AppDbContextModelSnapshot.cs index a92b542..d6f13c5 100644 --- a/Migrations/AppDbContextModelSnapshot.cs +++ b/Migrations/AppDbContextModelSnapshot.cs @@ -1,4 +1,5 @@ // +using System; using DiscordApp.Database; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; @@ -156,6 +157,42 @@ namespace DiscordApp.Migrations b.ToTable("BooksPatent", "public"); }); + modelBuilder.Entity("DiscordApp.Database.Tables.Certificate", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Date") + .HasColumnType("date"); + + b.Property("DocumentId") + .HasColumnType("integer"); + + b.Property("DocumentType") + .IsRequired() + .HasColumnType("text"); + + b.Property("Employee") + .IsRequired() + .HasColumnType("text"); + + b.Property("Text") + .IsRequired() + .HasColumnType("text"); + + b.Property("passportId") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("passportId"); + + b.ToTable("Certificate", "public"); + }); + modelBuilder.Entity("DiscordApp.Database.Tables.Passport", b => { b.Property("Id") @@ -245,6 +282,17 @@ namespace DiscordApp.Migrations b.Navigation("passport"); }); + + modelBuilder.Entity("DiscordApp.Database.Tables.Certificate", b => + { + b.HasOne("DiscordApp.Database.Tables.Passport", "passport") + .WithMany() + .HasForeignKey("passportId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("passport"); + }); #pragma warning restore 612, 618 } } diff --git a/Utilities/IdChecker.cs b/Utilities/IdChecker.cs index 5715509..bb65982 100644 --- a/Utilities/IdChecker.cs +++ b/Utilities/IdChecker.cs @@ -1,13 +1,20 @@ -namespace DiscordApp.Utilities +using DiscordApp.Database.Tables; + +namespace DiscordApp.Utilities { - public class IdChecker + public class Utilities { - public static void IdLenghtIsLower(out int id) + public static void IdGenerator(out int id) { Random random = new(); id = random.Next(00001, 99999); while (id.ToString().Length < 5) { id = random.Next(00001, 99999); } return; } + public static bool IsPassport(int id, out Passport passport) + { + passport = Startup.appDbContext.Passport.FirstOrDefault(x => x.Id == id); + return passport == null; + } } }