Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rework d sharp plus #2

Merged
merged 3 commits into from
Aug 26, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/docker.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,6 @@ jobs:
- name: Push to Docker Hub
uses: docker/build-push-action@v2
with:
file: DiscordBot/Dockerfile
file: DiscordBot.ConsoleApp/Dockerfile
push: true
tags: ${{ secrets.DOCKER_USERNAME }}/discordbot:latest
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -354,3 +354,8 @@ appsettings.json

#jetbrains
.idea/

*ncrunch*

onlyForMigrations

33 changes: 33 additions & 0 deletions DiscordBot.Configuration.Test/ConsoleConfigurationTest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
using DiscordBot.Core.Interfaces;
using FluentAssertions;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using NUnit.Framework;

namespace DiscordBot.Configuration.Test
{
public class ConsoleConfigurationTest
{
[SetUp]
public void Setup()
{
}

[Test]
public void ConsoleConfiguration_Should_LoadDependencies()
{
ConsoleConfiguration consoleConfiguration = new ConsoleConfiguration();
ServiceProvider services = consoleConfiguration.Setup();

IUploadOnlyRepository uploadOnlyRepository = services.GetRequiredService<IUploadOnlyRepository>();
Core.DiscordBot discordBot = services.GetRequiredService<Core.DiscordBot>();
IConfigurationRoot configurationRoot = services.GetRequiredService<IConfigurationRoot>();

uploadOnlyRepository.Should().NotBeNull();
discordBot.Should().NotBeNull();

configurationRoot.GetSection("ApiToken").Value.Should().Be("testToken");
configurationRoot.GetSection("SqlitePath").Value.Should().Be("TestDB");
}
}
}
33 changes: 33 additions & 0 deletions DiscordBot.Configuration.Test/DiscordBot.Configuration.Test.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>

<IsPackable>false</IsPackable>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="FakeItEasy" Version="7.1.0" />
<PackageReference Include="FluentAssertions" Version="6.1.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.11.0" />
<PackageReference Include="NUnit" Version="3.13.2" />
<PackageReference Include="NUnit3TestAdapter" Version="4.0.0" />
<PackageReference Include="coverlet.collector" Version="3.1.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Serilog.Sinks.Console" Version="4.0.0" />
<PackageReference Include="Serilog.Sinks.File" Version="5.0.0" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\DiscordBot.Configuration\DiscordBot.Configuration.csproj" />
</ItemGroup>

<ItemGroup>
<None Update="appsettings.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>

</Project>
33 changes: 33 additions & 0 deletions DiscordBot.Configuration.Test/appsettings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
{
"Serilog": {
"Using": [
"Serilog.Sinks.Console",
"Serilog.Sinks.File"
],
"MinimumLevel": "Information",
"WriteTo": [
{
"Name": "Console",
"Args": {
"outputTemplate": "{NewLine}{Timestamp:HH:mm:ss} [{Level}] ({SourceContext}) {Message}{NewLine}{Exception}"
}
},
{
"Name": "File",
"Args": {
"path": "Logs/logs.txt",
"rollingInterval": "Day",
"outputTemplate": "{NewLine}{Timestamp:HH:mm:ss} [{Level}] ({SourceContext}) {Message}{NewLine}{Exception}"
}
}
],
"Enrich": [
"FromLogContext"
],
"Properties": {
"Application": "DiscordBot"
}
},
"ApiToken": "testToken",
"SqlitePath": "TestDB"
}
41 changes: 41 additions & 0 deletions DiscordBot.Configuration/ConsoleConfiguration.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
using DiscordBot.Configuration.Module;
using DiscordBot.Core.Handler;
using DiscordBot.Core.Interfaces;
using Discordbot.Infrastructure;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;

namespace DiscordBot.Configuration
{
public class ConsoleConfiguration
{
public ServiceProvider Setup()
{
IConfigurationRoot configurationRoot = AppSettingsModule.GetAppConfig();
ServiceCollection services = new ServiceCollection();

services.AddLogModule(configurationRoot);
services.AddSingleton(configurationRoot);

string sqlitePath = configurationRoot.GetSection("SqlitePath").Value;

services.AddDbContext<DatabaseContext>(config =>
{
config.UseLazyLoadingProxies();
config.UseSqlite($"DataSource={sqlitePath}");
},
ServiceLifetime.Transient);

services.AddTransient<IUploadOnlyRepository, UploadOnlyRepository>();
services.AddTransient<IEventRepository, EventRepository>();
services.AddTransient<ITimeRepository, TimeRepository>();
services.AddTransient<IMessageHandler, MessageHandler>();
services.AddTransient<IDiscordEventHandler, DiscordEventHandler>();

services.AddSingleton<Core.DiscordBot>();

return services.BuildServiceProvider();
}
}
}
17 changes: 17 additions & 0 deletions DiscordBot.Configuration/DiscordBot.Configuration.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
<Nullable>enable</Nullable>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="5.0.2"/>
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\DiscordBot.Core\DiscordBot.Core.csproj"/>
<ProjectReference Include="..\Discordbot.Infrastructure\Discordbot.Infrastructure.csproj"/>
</ItemGroup>

</Project>
22 changes: 22 additions & 0 deletions DiscordBot.Configuration/Module/AppSettingsModule.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
using System;
using Microsoft.Extensions.Configuration;

namespace DiscordBot.Configuration.Module
{
public class AppSettingsModule
{
public static IConfigurationRoot GetAppConfig()
{
string appSettingsPath = "appsettings.json";

string? pathFromEnvironment = Environment.GetEnvironmentVariable("AppSettingsPath");
if (!string.IsNullOrEmpty(pathFromEnvironment))
appSettingsPath = pathFromEnvironment;

ConfigurationBuilder configurationBuilder = new ConfigurationBuilder();
configurationBuilder.AddJsonFile(appSettingsPath, false);

return configurationBuilder.Build();
}
}
}
21 changes: 21 additions & 0 deletions DiscordBot.Configuration/Module/LogModule.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Serilog;

namespace DiscordBot.Configuration.Module
{
public static class LogModule
{
public static IServiceCollection AddLogModule(this IServiceCollection services, IConfiguration config)
{
Log.Logger = new LoggerConfiguration()
.ReadFrom.Configuration(config)
.Enrich.FromLogContext()
.CreateLogger();

services.AddSingleton(Log.Logger);

return services;
}
}
}
File renamed without changes.
24 changes: 24 additions & 0 deletions DiscordBot.ConsoleApp/DiscordBot.ConsoleApp.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net5.0</TargetFramework>
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
</PropertyGroup>

<ItemGroup>
<None Update="appsettings.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\DiscordBot.Configuration\DiscordBot.Configuration.csproj"/>
</ItemGroup>

<ItemGroup>
<PackageReference Include="Serilog.Sinks.Console" Version="4.0.0"/>
<PackageReference Include="Serilog.Sinks.File" Version="5.0.0"/>
</ItemGroup>

</Project>
25 changes: 25 additions & 0 deletions DiscordBot.ConsoleApp/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
FROM mcr.microsoft.com/dotnet/runtime:5.0 AS base
WORKDIR /app

FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /src
COPY ["DiscordBot.ConsoleApp/DiscordBot.ConsoleApp.csproj", "DiscordBot.ConsoleApp/"]
RUN dotnet restore "DiscordBot.ConsoleApp/DiscordBot.ConsoleApp.csproj"
COPY . .
WORKDIR "/src/DiscordBot.ConsoleApp"
RUN dotnet build "DiscordBot.ConsoleApp.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "DiscordBot.ConsoleApp.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .

ENV DOTNET_RUNNING_IN_CONTAINER=true
ENV TZ=Europe/Berlin
ENV LANG de_AT.UTF-8
ENV LANGUAGE ${LANG}
ENV LC_ALL ${LANG}

ENTRYPOINT ["dotnet", "DiscordBot.ConsoleApp.dll"]
16 changes: 16 additions & 0 deletions DiscordBot.ConsoleApp/Program.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
using DiscordBot.Configuration;
using Microsoft.Extensions.DependencyInjection;

namespace DiscordBot.ConsoleApp
{
internal class Program
{
private static void Main()
{
ServiceProvider container = new ConsoleConfiguration().Setup();

Core.DiscordBot bot = container.GetRequiredService<Core.DiscordBot>();
bot.Start().GetAwaiter().GetResult();
}
}
}
27 changes: 27 additions & 0 deletions DiscordBot.Core.Test/ClearCommandTest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
using System.Threading.Tasks;
using DiscordBot.Core.Commands;
using DSharpPlus;
using DSharpPlus.Entities;
using DSharpPlus.SlashCommands;
using FakeItEasy;
using FluentAssertions;
using NUnit.Framework;
using Serilog;

namespace DiscordBot.Core.Test
{
public class ClearCommandTest
{

[OneTimeSetUp]
public void Setup()
{

}

[Test]
public async Task Clear_Should_ReturnErrorMessage_WrongParameterAmount()
{
}
}
}
25 changes: 25 additions & 0 deletions DiscordBot.Core.Test/DiscordBot.Core.Test.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>

<IsPackable>false</IsPackable>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="FakeItEasy" Version="7.1.0" />
<PackageReference Include="FluentAssertions" Version="6.1.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.11.0" />
<PackageReference Include="NUnit" Version="3.13.2" />
<PackageReference Include="NUnit3TestAdapter" Version="4.0.0" />
<PackageReference Include="coverlet.collector" Version="3.1.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\DiscordBot.Core\DiscordBot.Core.csproj" />
</ItemGroup>

</Project>
Loading