Nadeko's output will be cleaner, Reworked migrations

This commit is contained in:
Kwoth
2024-05-03 00:35:17 +00:00
parent 4fc0cded15
commit 7d916a5513
13 changed files with 16602 additions and 3430 deletions

View File

@@ -6,6 +6,7 @@ global using Serilog;
// nadekobot
global using NadekoBot;
global using NadekoBot.Db;
global using NadekoBot.Services;
global using Nadeko.Common; // new project
global using NadekoBot.Common; // old + nadekobot specific things

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,327 @@
using System;
using Microsoft.EntityFrameworkCore.Migrations;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
#nullable disable
namespace NadekoBot.Migrations.PostgreSql
{
/// <inheritdoc />
public partial class v5 : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "nsfwblacklistedtags");
migrationBuilder.DropTable(
name: "pollanswer");
migrationBuilder.DropTable(
name: "pollvote");
migrationBuilder.DropTable(
name: "poll");
migrationBuilder.DropUniqueConstraint(
name: "ak_clubs_name",
table: "clubs");
migrationBuilder.AddColumn<string>(
name: "command",
table: "shopentry",
type: "text",
nullable: true);
migrationBuilder.AddColumn<int>(
name: "type",
table: "reminders",
type: "integer",
nullable: false,
defaultValue: 0);
migrationBuilder.AddColumn<bool>(
name: "stickyroles",
table: "guildconfigs",
type: "boolean",
nullable: false,
defaultValue: false);
migrationBuilder.AlterColumn<string>(
name: "name",
table: "clubs",
type: "character varying(20)",
maxLength: 20,
nullable: true,
oldClrType: typeof(string),
oldType: "character varying(20)",
oldMaxLength: 20);
migrationBuilder.CreateTable(
name: "giveawaymodel",
columns: table => new
{
id = table.Column<int>(type: "integer", nullable: false)
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
guildid = table.Column<decimal>(type: "numeric(20,0)", nullable: false),
messageid = table.Column<decimal>(type: "numeric(20,0)", nullable: false),
channelid = table.Column<decimal>(type: "numeric(20,0)", nullable: false),
message = table.Column<string>(type: "text", nullable: true),
endsat = table.Column<DateTime>(type: "timestamp without time zone", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("pk_giveawaymodel", x => x.id);
});
migrationBuilder.CreateTable(
name: "stickyroles",
columns: table => new
{
id = table.Column<int>(type: "integer", nullable: false)
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
guildid = table.Column<decimal>(type: "numeric(20,0)", nullable: false),
roleids = table.Column<string>(type: "text", nullable: true),
userid = table.Column<decimal>(type: "numeric(20,0)", nullable: false),
dateadded = table.Column<DateTime>(type: "timestamp without time zone", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("pk_stickyroles", x => x.id);
});
migrationBuilder.CreateTable(
name: "todosarchive",
columns: table => new
{
id = table.Column<int>(type: "integer", nullable: false)
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
userid = table.Column<decimal>(type: "numeric(20,0)", nullable: false),
name = table.Column<string>(type: "text", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("pk_todosarchive", x => x.id);
});
migrationBuilder.CreateTable(
name: "giveawayuser",
columns: table => new
{
id = table.Column<int>(type: "integer", nullable: false)
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
giveawayid = table.Column<int>(type: "integer", nullable: false),
userid = table.Column<decimal>(type: "numeric(20,0)", nullable: false),
name = table.Column<string>(type: "text", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("pk_giveawayuser", x => x.id);
table.ForeignKey(
name: "fk_giveawayuser_giveawaymodel_giveawayid",
column: x => x.giveawayid,
principalTable: "giveawaymodel",
principalColumn: "id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "todos",
columns: table => new
{
id = table.Column<int>(type: "integer", nullable: false)
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
userid = table.Column<decimal>(type: "numeric(20,0)", nullable: false),
todo = table.Column<string>(type: "text", nullable: true),
dateadded = table.Column<DateTime>(type: "timestamp without time zone", nullable: false),
isdone = table.Column<bool>(type: "boolean", nullable: false),
archiveid = table.Column<int>(type: "integer", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("pk_todos", x => x.id);
table.ForeignKey(
name: "fk_todos_todosarchive_archiveid",
column: x => x.archiveid,
principalTable: "todosarchive",
principalColumn: "id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateIndex(
name: "ix_clubs_name",
table: "clubs",
column: "name",
unique: true);
migrationBuilder.CreateIndex(
name: "ix_giveawayuser_giveawayid_userid",
table: "giveawayuser",
columns: new[] { "giveawayid", "userid" },
unique: true);
migrationBuilder.CreateIndex(
name: "ix_stickyroles_guildid_userid",
table: "stickyroles",
columns: new[] { "guildid", "userid" },
unique: true);
migrationBuilder.CreateIndex(
name: "ix_todos_archiveid",
table: "todos",
column: "archiveid");
migrationBuilder.CreateIndex(
name: "ix_todos_userid",
table: "todos",
column: "userid");
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "giveawayuser");
migrationBuilder.DropTable(
name: "stickyroles");
migrationBuilder.DropTable(
name: "todos");
migrationBuilder.DropTable(
name: "giveawaymodel");
migrationBuilder.DropTable(
name: "todosarchive");
migrationBuilder.DropIndex(
name: "ix_clubs_name",
table: "clubs");
migrationBuilder.DropColumn(
name: "command",
table: "shopentry");
migrationBuilder.DropColumn(
name: "type",
table: "reminders");
migrationBuilder.DropColumn(
name: "stickyroles",
table: "guildconfigs");
migrationBuilder.AlterColumn<string>(
name: "name",
table: "clubs",
type: "character varying(20)",
maxLength: 20,
nullable: false,
defaultValue: "",
oldClrType: typeof(string),
oldType: "character varying(20)",
oldMaxLength: 20,
oldNullable: true);
migrationBuilder.AddUniqueConstraint(
name: "ak_clubs_name",
table: "clubs",
column: "name");
migrationBuilder.CreateTable(
name: "nsfwblacklistedtags",
columns: table => new
{
id = table.Column<int>(type: "integer", nullable: false)
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
dateadded = table.Column<DateTime>(type: "timestamp without time zone", nullable: true),
guildid = table.Column<decimal>(type: "numeric(20,0)", nullable: false),
tag = table.Column<string>(type: "text", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("pk_nsfwblacklistedtags", x => x.id);
});
migrationBuilder.CreateTable(
name: "poll",
columns: table => new
{
id = table.Column<int>(type: "integer", nullable: false)
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
channelid = table.Column<decimal>(type: "numeric(20,0)", nullable: false),
dateadded = table.Column<DateTime>(type: "timestamp without time zone", nullable: true),
guildid = table.Column<decimal>(type: "numeric(20,0)", nullable: false),
question = table.Column<string>(type: "text", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("pk_poll", x => x.id);
});
migrationBuilder.CreateTable(
name: "pollanswer",
columns: table => new
{
id = table.Column<int>(type: "integer", nullable: false)
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
dateadded = table.Column<DateTime>(type: "timestamp without time zone", nullable: true),
index = table.Column<int>(type: "integer", nullable: false),
pollid = table.Column<int>(type: "integer", nullable: true),
text = table.Column<string>(type: "text", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("pk_pollanswer", x => x.id);
table.ForeignKey(
name: "fk_pollanswer_poll_pollid",
column: x => x.pollid,
principalTable: "poll",
principalColumn: "id");
});
migrationBuilder.CreateTable(
name: "pollvote",
columns: table => new
{
id = table.Column<int>(type: "integer", nullable: false)
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
dateadded = table.Column<DateTime>(type: "timestamp without time zone", nullable: true),
pollid = table.Column<int>(type: "integer", nullable: true),
userid = table.Column<decimal>(type: "numeric(20,0)", nullable: false),
voteindex = table.Column<int>(type: "integer", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("pk_pollvote", x => x.id);
table.ForeignKey(
name: "fk_pollvote_poll_pollid",
column: x => x.pollid,
principalTable: "poll",
principalColumn: "id");
});
migrationBuilder.CreateIndex(
name: "ix_nsfwblacklistedtags_guildid",
table: "nsfwblacklistedtags",
column: "guildid");
migrationBuilder.CreateIndex(
name: "ix_poll_guildid",
table: "poll",
column: "guildid",
unique: true);
migrationBuilder.CreateIndex(
name: "ix_pollanswer_pollid",
table: "pollanswer",
column: "pollid");
migrationBuilder.CreateIndex(
name: "ix_pollvote_pollid",
table: "pollvote",
column: "pollid");
}
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,326 @@
using System;
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace NadekoBot.Migrations
{
/// <inheritdoc />
public partial class v5 : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "NsfwBlacklistedTags");
migrationBuilder.DropTable(
name: "PollAnswer");
migrationBuilder.DropTable(
name: "PollVote");
migrationBuilder.DropTable(
name: "Poll");
migrationBuilder.DropUniqueConstraint(
name: "AK_Clubs_Name",
table: "Clubs");
migrationBuilder.AddColumn<string>(
name: "Command",
table: "ShopEntry",
type: "TEXT",
nullable: true);
migrationBuilder.AddColumn<int>(
name: "Type",
table: "Reminders",
type: "INTEGER",
nullable: false,
defaultValue: 0);
migrationBuilder.AddColumn<bool>(
name: "StickyRoles",
table: "GuildConfigs",
type: "INTEGER",
nullable: false,
defaultValue: false);
migrationBuilder.AlterColumn<string>(
name: "Name",
table: "Clubs",
type: "TEXT",
maxLength: 20,
nullable: true,
oldClrType: typeof(string),
oldType: "TEXT",
oldMaxLength: 20);
migrationBuilder.CreateTable(
name: "GiveawayModel",
columns: table => new
{
Id = table.Column<int>(type: "INTEGER", nullable: false)
.Annotation("Sqlite:Autoincrement", true),
GuildId = table.Column<ulong>(type: "INTEGER", nullable: false),
MessageId = table.Column<ulong>(type: "INTEGER", nullable: false),
ChannelId = table.Column<ulong>(type: "INTEGER", nullable: false),
Message = table.Column<string>(type: "TEXT", nullable: true),
EndsAt = table.Column<DateTime>(type: "TEXT", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_GiveawayModel", x => x.Id);
});
migrationBuilder.CreateTable(
name: "StickyRoles",
columns: table => new
{
Id = table.Column<int>(type: "INTEGER", nullable: false)
.Annotation("Sqlite:Autoincrement", true),
GuildId = table.Column<ulong>(type: "INTEGER", nullable: false),
RoleIds = table.Column<string>(type: "TEXT", nullable: true),
UserId = table.Column<ulong>(type: "INTEGER", nullable: false),
DateAdded = table.Column<DateTime>(type: "TEXT", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_StickyRoles", x => x.Id);
});
migrationBuilder.CreateTable(
name: "TodosArchive",
columns: table => new
{
Id = table.Column<int>(type: "INTEGER", nullable: false)
.Annotation("Sqlite:Autoincrement", true),
UserId = table.Column<ulong>(type: "INTEGER", nullable: false),
Name = table.Column<string>(type: "TEXT", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_TodosArchive", x => x.Id);
});
migrationBuilder.CreateTable(
name: "GiveawayUser",
columns: table => new
{
Id = table.Column<int>(type: "INTEGER", nullable: false)
.Annotation("Sqlite:Autoincrement", true),
GiveawayId = table.Column<int>(type: "INTEGER", nullable: false),
UserId = table.Column<ulong>(type: "INTEGER", nullable: false),
Name = table.Column<string>(type: "TEXT", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_GiveawayUser", x => x.Id);
table.ForeignKey(
name: "FK_GiveawayUser_GiveawayModel_GiveawayId",
column: x => x.GiveawayId,
principalTable: "GiveawayModel",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "Todos",
columns: table => new
{
Id = table.Column<int>(type: "INTEGER", nullable: false)
.Annotation("Sqlite:Autoincrement", true),
UserId = table.Column<ulong>(type: "INTEGER", nullable: false),
Todo = table.Column<string>(type: "TEXT", nullable: true),
DateAdded = table.Column<DateTime>(type: "TEXT", nullable: false),
IsDone = table.Column<bool>(type: "INTEGER", nullable: false),
ArchiveId = table.Column<int>(type: "INTEGER", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_Todos", x => x.Id);
table.ForeignKey(
name: "FK_Todos_TodosArchive_ArchiveId",
column: x => x.ArchiveId,
principalTable: "TodosArchive",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateIndex(
name: "IX_Clubs_Name",
table: "Clubs",
column: "Name",
unique: true);
migrationBuilder.CreateIndex(
name: "IX_GiveawayUser_GiveawayId_UserId",
table: "GiveawayUser",
columns: new[] { "GiveawayId", "UserId" },
unique: true);
migrationBuilder.CreateIndex(
name: "IX_StickyRoles_GuildId_UserId",
table: "StickyRoles",
columns: new[] { "GuildId", "UserId" },
unique: true);
migrationBuilder.CreateIndex(
name: "IX_Todos_ArchiveId",
table: "Todos",
column: "ArchiveId");
migrationBuilder.CreateIndex(
name: "IX_Todos_UserId",
table: "Todos",
column: "UserId");
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "GiveawayUser");
migrationBuilder.DropTable(
name: "StickyRoles");
migrationBuilder.DropTable(
name: "Todos");
migrationBuilder.DropTable(
name: "GiveawayModel");
migrationBuilder.DropTable(
name: "TodosArchive");
migrationBuilder.DropIndex(
name: "IX_Clubs_Name",
table: "Clubs");
migrationBuilder.DropColumn(
name: "Command",
table: "ShopEntry");
migrationBuilder.DropColumn(
name: "Type",
table: "Reminders");
migrationBuilder.DropColumn(
name: "StickyRoles",
table: "GuildConfigs");
migrationBuilder.AlterColumn<string>(
name: "Name",
table: "Clubs",
type: "TEXT",
maxLength: 20,
nullable: false,
defaultValue: "",
oldClrType: typeof(string),
oldType: "TEXT",
oldMaxLength: 20,
oldNullable: true);
migrationBuilder.AddUniqueConstraint(
name: "AK_Clubs_Name",
table: "Clubs",
column: "Name");
migrationBuilder.CreateTable(
name: "NsfwBlacklistedTags",
columns: table => new
{
Id = table.Column<int>(type: "INTEGER", nullable: false)
.Annotation("Sqlite:Autoincrement", true),
DateAdded = table.Column<DateTime>(type: "TEXT", nullable: true),
GuildId = table.Column<ulong>(type: "INTEGER", nullable: false),
Tag = table.Column<string>(type: "TEXT", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_NsfwBlacklistedTags", x => x.Id);
});
migrationBuilder.CreateTable(
name: "Poll",
columns: table => new
{
Id = table.Column<int>(type: "INTEGER", nullable: false)
.Annotation("Sqlite:Autoincrement", true),
ChannelId = table.Column<ulong>(type: "INTEGER", nullable: false),
DateAdded = table.Column<DateTime>(type: "TEXT", nullable: true),
GuildId = table.Column<ulong>(type: "INTEGER", nullable: false),
Question = table.Column<string>(type: "TEXT", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_Poll", x => x.Id);
});
migrationBuilder.CreateTable(
name: "PollAnswer",
columns: table => new
{
Id = table.Column<int>(type: "INTEGER", nullable: false)
.Annotation("Sqlite:Autoincrement", true),
DateAdded = table.Column<DateTime>(type: "TEXT", nullable: true),
Index = table.Column<int>(type: "INTEGER", nullable: false),
PollId = table.Column<int>(type: "INTEGER", nullable: true),
Text = table.Column<string>(type: "TEXT", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_PollAnswer", x => x.Id);
table.ForeignKey(
name: "FK_PollAnswer_Poll_PollId",
column: x => x.PollId,
principalTable: "Poll",
principalColumn: "Id");
});
migrationBuilder.CreateTable(
name: "PollVote",
columns: table => new
{
Id = table.Column<int>(type: "INTEGER", nullable: false)
.Annotation("Sqlite:Autoincrement", true),
DateAdded = table.Column<DateTime>(type: "TEXT", nullable: true),
PollId = table.Column<int>(type: "INTEGER", nullable: true),
UserId = table.Column<ulong>(type: "INTEGER", nullable: false),
VoteIndex = table.Column<int>(type: "INTEGER", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_PollVote", x => x.Id);
table.ForeignKey(
name: "FK_PollVote_Poll_PollId",
column: x => x.PollId,
principalTable: "Poll",
principalColumn: "Id");
});
migrationBuilder.CreateIndex(
name: "IX_NsfwBlacklistedTags_GuildId",
table: "NsfwBlacklistedTags",
column: "GuildId");
migrationBuilder.CreateIndex(
name: "IX_Poll_GuildId",
table: "Poll",
column: "GuildId",
unique: true);
migrationBuilder.CreateIndex(
name: "IX_PollAnswer_PollId",
table: "PollAnswer",
column: "PollId");
migrationBuilder.CreateIndex(
name: "IX_PollVote_PollId",
table: "PollVote",
column: "PollId");
}
}
}

View File

@@ -140,6 +140,7 @@ public class PatreonClient : IDisposable
LastChargeDate = m.Attributes.LastChargeDate,
LastChargeStatus = m.Attributes.LastChargeStatus
})
.Where(x => x.UserId == 140788173885276160)
.ToArray();
yield return userData;

View File

@@ -4,6 +4,7 @@
<TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>true</ImplicitUsings>
<SatelliteResourceLanguages>en</SatelliteResourceLanguages>
<Version>5.0.0</Version>
<!-- Output/build -->
@@ -18,7 +19,8 @@
<!-- Profile-guided optimization -->
<TieredPGO>true</TieredPGO>
<DebugType>embedded</DebugType>
</PropertyGroup>
<ItemGroup>
@@ -26,103 +28,106 @@
<PrivateAssets>all</PrivateAssets>
<Publish>True</Publish>
</PackageReference>
<PackageReference Include="AWSSDK.S3" Version="3.7.307" />
<PackageReference Include="CodeHollow.FeedReader" Version="1.2.6" />
<PackageReference Include="CommandLineParser" Version="2.9.1" />
<PackageReference Include="Discord.Net" Version="3.204.0" />
<PackageReference Include="CoreCLR-NCalc" Version="3.0.203" />
<PackageReference Include="Google.Apis.Urlshortener.v1" Version="1.41.1.138" />
<PackageReference Include="Google.Apis.YouTube.v3" Version="1.62.1.3205" />
<PackageReference Include="Google.Apis.Customsearch.v1" Version="1.49.0.2084" />
<PackageReference Include="Grpc.AspNetCore" Version="2.62.0" />
<PackageReference Include="Google.Protobuf" Version="3.26.1" />
<PackageReference Include="Grpc.Net.ClientFactory" Version="2.62.0" />
<PackageReference Include="AWSSDK.S3" Version="3.7.307"/>
<PackageReference Include="CodeHollow.FeedReader" Version="1.2.6"/>
<PackageReference Include="CommandLineParser" Version="2.9.1"/>
<PackageReference Include="Discord.Net" Version="3.204.0"/>
<PackageReference Include="CoreCLR-NCalc" Version="3.0.203"/>
<PackageReference Include="Google.Apis.Urlshortener.v1" Version="1.41.1.138"/>
<PackageReference Include="Google.Apis.YouTube.v3" Version="1.62.1.3205"/>
<PackageReference Include="Google.Apis.Customsearch.v1" Version="1.49.0.2084"/>
<!-- <PackageReference Include="Grpc.AspNetCore" Version="2.62.0" />-->
<PackageReference Include="Google.Protobuf" Version="3.26.1"/>
<PackageReference Include="Grpc.Net.ClientFactory" Version="2.62.0"/>
<PackageReference Include="Grpc.Tools" Version="2.62.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Html2Markdown" Version="6.2.0.3" />
<PackageReference Include="Microsoft.CodeAnalysis.CSharp.Scripting" Version="4.5.0" />
<PackageReference Include="Html2Markdown" Version="6.2.0.3"/>
<PackageReference Include="Microsoft.CodeAnalysis.CSharp.Scripting" Version="4.5.0"/>
<PackageReference Include="Microsoft.Extensions.Configuration" Version="8.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="8.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="8.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration" Version="8.0.0"/>
<PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="8.0.0"/>
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="8.0.0"/>
<PackageReference Include="MorseCode.ITask" Version="2.0.3" />
<PackageReference Include="NetEscapades.Configuration.Yaml" Version="3.1.0" />
<PackageReference Include="MorseCode.ITask" Version="2.0.3"/>
<PackageReference Include="NetEscapades.Configuration.Yaml" Version="3.1.0"/>
<!-- DI -->
<PackageReference Include="Ninject" Version="3.3.6" />
<PackageReference Include="Ninject.Extensions.Conventions" Version="3.3.0" />
<PackageReference Include="Ninject" Version="3.3.6"/>
<PackageReference Include="Ninject.Extensions.Conventions" Version="3.3.0"/>
<!-- <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="8.0.0" />-->
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="8.0.1" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="8.0.1"/>
<!-- <PackageReference Include="Scrutor" Version="4.2.0" />-->
<PackageReference Include="Microsoft.Extensions.Http" Version="8.0.0" />
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="8.0.0" />
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="8.0.0" />
<PackageReference Include="Microsoft.SyndicationFeed.ReaderWriter" Version="1.0.2" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="NonBlocking" Version="2.1.2" />
<PackageReference Include="OneOf" Version="3.0.263" />
<PackageReference Include="OneOf.SourceGenerator" Version="3.0.263" />
<PackageReference Include="Serilog.Sinks.Console" Version="5.0.1" />
<PackageReference Include="Serilog.Sinks.Seq" Version="7.0.0" />
<PackageReference Include="Microsoft.Extensions.Http" Version="8.0.0"/>
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="8.0.0"/>
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="8.0.0"/>
<PackageReference Include="Microsoft.SyndicationFeed.ReaderWriter" Version="1.0.2"/>
<PackageReference Include="Newtonsoft.Json" Version="13.0.3"/>
<PackageReference Include="NonBlocking" Version="2.1.2"/>
<PackageReference Include="OneOf" Version="3.0.263"/>
<PackageReference Include="OneOf.SourceGenerator" Version="3.0.263"/>
<PackageReference Include="Serilog.Sinks.Console" Version="5.0.1"/>
<PackageReference Include="Serilog.Sinks.Seq" Version="7.0.0"/>
<PackageReference Include="SixLabors.Fonts" Version="1.0.0-beta17" />
<PackageReference Include="SixLabors.ImageSharp" Version="2.1.8" />
<PackageReference Include="SixLabors.ImageSharp.Drawing" Version="1.0.0-beta14" />
<PackageReference Include="SixLabors.Shapes" Version="1.0.0-beta0009" />
<PackageReference Include="StackExchange.Redis" Version="2.7.33" />
<PackageReference Include="YamlDotNet" Version="15.1.2" />
<PackageReference Include="SharpToken" Version="2.0.2" />
<PackageReference Include="SixLabors.Fonts" Version="1.0.0-beta17"/>
<PackageReference Include="SixLabors.ImageSharp" Version="2.1.8"/>
<PackageReference Include="SixLabors.ImageSharp.Drawing" Version="1.0.0-beta14"/>
<PackageReference Include="SixLabors.Shapes" Version="1.0.0-beta0009"/>
<PackageReference Include="StackExchange.Redis" Version="2.7.33"/>
<PackageReference Include="YamlDotNet" Version="15.1.2"/>
<PackageReference Include="SharpToken" Version="2.0.2"/>
<PackageReference Include="JetBrains.Annotations" Version="2023.3.0" />
<PackageReference Include="JetBrains.Annotations" Version="2023.3.0"/>
<!-- Db-related packages -->
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="8.0.4" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="8.0.4"/>
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.4">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="linq2db.EntityFrameworkCore" Version="8.1.0" />
<PackageReference Include="linq2db.EntityFrameworkCore" Version="8.1.0"/>
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="8.0.4" />
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="8.0.2" />
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="8.0.2" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="8.0.4"/>
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="8.0.2"/>
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="8.0.2"/>
<PackageReference Include="EFCore.NamingConventions" Version="8.0.3" />
<PackageReference Include="EFCore.NamingConventions" Version="8.0.3"/>
<!-- Used by stream notifications -->
<PackageReference Include="TwitchLib.Api" Version="3.4.1" />
<PackageReference Include="TwitchLib.Api" Version="3.4.1"/>
<!-- sqlselectcsv and stock -->
<PackageReference Include="CsvHelper" Version="28.0.1" />
<PackageReference Include="CsvHelper" Version="28.0.1"/>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Nadeko.Medusa\Nadeko.Medusa.csproj" />
<ProjectReference Include="..\NadekoBot.Voice\NadekoBot.Voice.csproj" />
<ProjectReference Include="..\NadekoBot.Generators\NadekoBot.Generators.csproj" OutputItemType="Analyzer" />
<ProjectReference Include="..\Nadeko.Medusa\Nadeko.Medusa.csproj"/>
<ProjectReference Include="..\NadekoBot.Voice\NadekoBot.Voice.csproj"/>
<ProjectReference Include="..\NadekoBot.Generators\NadekoBot.Generators.csproj" OutputItemType="Analyzer"/>
</ItemGroup>
<ItemGroup>
<AdditionalFiles Include="data\strings\responses\responses.en-US.json" />
<AdditionalFiles Include="data\strings\responses\responses.en-US.json"/>
</ItemGroup>
<ItemGroup>
<Protobuf Include="..\NadekoBot.Coordinator\Protos\coordinator.proto" GrpcServices="Client">
<Link>Protos\coordinator.proto</Link>
</Protobuf>
<None Update="data\**\*">
<ExcludeFromSingleFile>true</ExcludeFromSingleFile>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="nadeko_icon.ico">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<None Update="creds.yml">
<ExcludeFromSingleFile>true</ExcludeFromSingleFile>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="creds.yml;creds_example.yml">
<None Update="creds_example.yml">
<ExcludeFromSingleFile>true</ExcludeFromSingleFile>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>