feat: added database
This commit is contained in:
parent
baf797d8c3
commit
c7b933b3f8
9 changed files with 281 additions and 80 deletions
|
@ -12,7 +12,8 @@ namespace Sharpy.Commands.Music
|
||||||
{
|
{
|
||||||
[SlashCommand("play", "Plays a song")]
|
[SlashCommand("play", "Plays a song")]
|
||||||
[SlashRequireGuild]
|
[SlashRequireGuild]
|
||||||
public async Task PlayCommand(InteractionContext ctx, [Option("song", "The song to play. (Accepts YouTube URLs too)")] string song)
|
public async Task PlayCommand(InteractionContext ctx,
|
||||||
|
[Option("song", "The song to play. (Accepts YouTube URLs too)")] string song)
|
||||||
{
|
{
|
||||||
if (ctx.Member.VoiceState == null || ctx.Member.VoiceState.Channel == null)
|
if (ctx.Member.VoiceState == null || ctx.Member.VoiceState.Channel == null)
|
||||||
{
|
{
|
||||||
|
|
|
@ -12,7 +12,8 @@ namespace Sharpy.Commands.Music
|
||||||
{
|
{
|
||||||
[SlashCommand("search", "Searches for songs")]
|
[SlashCommand("search", "Searches for songs")]
|
||||||
[SlashRequireGuild]
|
[SlashRequireGuild]
|
||||||
public async Task SearchCommand(InteractionContext ctx, [Option("search", "The song to search for. (Accepts YouTube URLs too)")] string search)
|
public async Task SearchCommand(InteractionContext ctx,
|
||||||
|
[Option("search", "The song to search for. (Accepts YouTube URLs too)")] string search)
|
||||||
{
|
{
|
||||||
var lava = ctx.Client.GetLavalink();
|
var lava = ctx.Client.GetLavalink();
|
||||||
|
|
||||||
|
|
17
Sharpy/Database/Context.cs
Normal file
17
Sharpy/Database/Context.cs
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Microsoft.Extensions.Configuration;
|
||||||
|
using Sharpy.Database.Models;
|
||||||
|
|
||||||
|
namespace Sharpy.Database
|
||||||
|
{
|
||||||
|
public class Context : DbContext
|
||||||
|
{
|
||||||
|
public DbSet<Infractions> Infractions { get; set; }
|
||||||
|
|
||||||
|
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
|
||||||
|
{
|
||||||
|
optionsBuilder.UseNpgsql(
|
||||||
|
$"Host={Sharpy.config.GetSection("database").GetValue<string>("host")};Port={Sharpy.config.GetSection("database").GetValue<string>("port")};Database={Sharpy.config.GetSection("database").GetValue<string>("database")};Username={Sharpy.config.GetSection("database").GetValue<string>("username")};Password={Sharpy.config.GetSection("database").GetValue<string>("password")}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
28
Sharpy/Database/Models/Infractions.cs
Normal file
28
Sharpy/Database/Models/Infractions.cs
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
using System;
|
||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
|
||||||
|
namespace Sharpy.Database.Models
|
||||||
|
{
|
||||||
|
public class Infractions
|
||||||
|
{
|
||||||
|
[Key]
|
||||||
|
public Guid InfractionId { get; set; }
|
||||||
|
|
||||||
|
[Required]
|
||||||
|
public InfractionTypes InfractionType { get; set; }
|
||||||
|
|
||||||
|
[Required]
|
||||||
|
public string InfractionReason { get; set; }
|
||||||
|
|
||||||
|
[Required]
|
||||||
|
public ulong UserId { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum InfractionTypes
|
||||||
|
{
|
||||||
|
Ban,
|
||||||
|
Kick,
|
||||||
|
Mute,
|
||||||
|
Warn
|
||||||
|
}
|
||||||
|
}
|
50
Sharpy/Migrations/20211016030853_InitialCreate.Designer.cs
generated
Normal file
50
Sharpy/Migrations/20211016030853_InitialCreate.Designer.cs
generated
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
// <auto-generated />
|
||||||
|
using System;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||||
|
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
|
||||||
|
using Sharpy.Database;
|
||||||
|
|
||||||
|
#nullable disable
|
||||||
|
|
||||||
|
namespace Sharpy.Migrations
|
||||||
|
{
|
||||||
|
[DbContext(typeof(Context))]
|
||||||
|
[Migration("20211016030853_InitialCreate")]
|
||||||
|
partial class InitialCreate
|
||||||
|
{
|
||||||
|
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
||||||
|
{
|
||||||
|
#pragma warning disable 612, 618
|
||||||
|
modelBuilder
|
||||||
|
.HasAnnotation("ProductVersion", "6.0.0-rc.2.21480.5")
|
||||||
|
.HasAnnotation("Relational:MaxIdentifierLength", 63);
|
||||||
|
|
||||||
|
NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
|
||||||
|
|
||||||
|
modelBuilder.Entity("Sharpy.Database.Models.Infractions", b =>
|
||||||
|
{
|
||||||
|
b.Property<Guid>("InfractionId")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("uuid");
|
||||||
|
|
||||||
|
b.Property<string>("InfractionReason")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("text");
|
||||||
|
|
||||||
|
b.Property<int>("InfractionType")
|
||||||
|
.HasColumnType("integer");
|
||||||
|
|
||||||
|
b.Property<decimal>("UserId")
|
||||||
|
.HasColumnType("numeric(20,0)");
|
||||||
|
|
||||||
|
b.HasKey("InfractionId");
|
||||||
|
|
||||||
|
b.ToTable("Infractions");
|
||||||
|
});
|
||||||
|
#pragma warning restore 612, 618
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
33
Sharpy/Migrations/20211016030853_InitialCreate.cs
Normal file
33
Sharpy/Migrations/20211016030853_InitialCreate.cs
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
using System;
|
||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
|
||||||
|
#nullable disable
|
||||||
|
|
||||||
|
namespace Sharpy.Migrations
|
||||||
|
{
|
||||||
|
public partial class InitialCreate : Migration
|
||||||
|
{
|
||||||
|
protected override void Up(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.CreateTable(
|
||||||
|
name: "Infractions",
|
||||||
|
columns: table => new
|
||||||
|
{
|
||||||
|
InfractionId = table.Column<Guid>(type: "uuid", nullable: false),
|
||||||
|
InfractionType = table.Column<int>(type: "integer", nullable: false),
|
||||||
|
InfractionReason = table.Column<string>(type: "text", nullable: false),
|
||||||
|
UserId = table.Column<decimal>(type: "numeric(20,0)", nullable: false)
|
||||||
|
},
|
||||||
|
constraints: table =>
|
||||||
|
{
|
||||||
|
table.PrimaryKey("PK_Infractions", x => x.InfractionId);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void Down(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.DropTable(
|
||||||
|
name: "Infractions");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
48
Sharpy/Migrations/ContextModelSnapshot.cs
Normal file
48
Sharpy/Migrations/ContextModelSnapshot.cs
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
// <auto-generated />
|
||||||
|
using System;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
|
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||||
|
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
|
||||||
|
using Sharpy.Database;
|
||||||
|
|
||||||
|
#nullable disable
|
||||||
|
|
||||||
|
namespace Sharpy.Migrations
|
||||||
|
{
|
||||||
|
[DbContext(typeof(Context))]
|
||||||
|
partial class ContextModelSnapshot : ModelSnapshot
|
||||||
|
{
|
||||||
|
protected override void BuildModel(ModelBuilder modelBuilder)
|
||||||
|
{
|
||||||
|
#pragma warning disable 612, 618
|
||||||
|
modelBuilder
|
||||||
|
.HasAnnotation("ProductVersion", "6.0.0-rc.2.21480.5")
|
||||||
|
.HasAnnotation("Relational:MaxIdentifierLength", 63);
|
||||||
|
|
||||||
|
NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
|
||||||
|
|
||||||
|
modelBuilder.Entity("Sharpy.Database.Models.Infractions", b =>
|
||||||
|
{
|
||||||
|
b.Property<Guid>("InfractionId")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("uuid");
|
||||||
|
|
||||||
|
b.Property<string>("InfractionReason")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("text");
|
||||||
|
|
||||||
|
b.Property<int>("InfractionType")
|
||||||
|
.HasColumnType("integer");
|
||||||
|
|
||||||
|
b.Property<decimal>("UserId")
|
||||||
|
.HasColumnType("numeric(20,0)");
|
||||||
|
|
||||||
|
b.HasKey("InfractionId");
|
||||||
|
|
||||||
|
b.ToTable("Infractions");
|
||||||
|
});
|
||||||
|
#pragma warning restore 612, 618
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,7 +1,4 @@
|
||||||
using System;
|
using System;
|
||||||
#if RELEASE
|
|
||||||
using System.Net;
|
|
||||||
#endif
|
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using DSharpPlus;
|
using DSharpPlus;
|
||||||
using DSharpPlus.Entities;
|
using DSharpPlus.Entities;
|
||||||
|
@ -13,82 +10,94 @@ using Microsoft.Extensions.DependencyInjection;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using Sharpy.Commands.General;
|
using Sharpy.Commands.General;
|
||||||
using Sharpy.Commands.Music;
|
using Sharpy.Commands.Music;
|
||||||
|
#if RELEASE
|
||||||
IConfiguration config = new ConfigurationBuilder()
|
using System.Net;
|
||||||
.AddJsonFile("appsettings.json", false, true)
|
|
||||||
.Build();
|
|
||||||
|
|
||||||
#if DEBUG
|
|
||||||
var discord = new DiscordClient(new DiscordConfiguration
|
|
||||||
{
|
|
||||||
AlwaysCacheMembers = true,
|
|
||||||
AutoReconnect = true,
|
|
||||||
GatewayCompressionLevel = GatewayCompressionLevel.Stream,
|
|
||||||
HttpTimeout = TimeSpan.FromSeconds(10),
|
|
||||||
Intents = DiscordIntents.All,
|
|
||||||
LogTimestampFormat = "MMM dd yyyy - hh:mm:ss tt",
|
|
||||||
MinimumLogLevel = LogLevel.Debug,
|
|
||||||
ReconnectIndefinitely = false,
|
|
||||||
Token = config.GetValue<string>("token"),
|
|
||||||
TokenType = TokenType.Bot
|
|
||||||
});
|
|
||||||
#else
|
|
||||||
var discord = new DiscordClient(new DiscordConfiguration
|
|
||||||
{
|
|
||||||
AlwaysCacheMembers = true,
|
|
||||||
AutoReconnect = true,
|
|
||||||
GatewayCompressionLevel = GatewayCompressionLevel.Stream,
|
|
||||||
HttpTimeout = TimeSpan.FromSeconds(10),
|
|
||||||
Intents = DiscordIntents.All,
|
|
||||||
LogTimestampFormat = "MMM dd yyyy - hh:mm:ss tt",
|
|
||||||
MinimumLogLevel = LogLevel.Information,
|
|
||||||
ReconnectIndefinitely = false,
|
|
||||||
ShardCount = Convert.ToInt32(Dns.GetHostName().Substring(Dns.GetHostName().IndexOf('-') + 1)),
|
|
||||||
ShardId = Convert.ToInt32(Dns.GetHostName().Substring(Dns.GetHostName().IndexOf('-') + 1)),
|
|
||||||
Token = config.GetValue<string>("token"),
|
|
||||||
TokenType = TokenType.Bot,
|
|
||||||
});
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
var services = new ServiceCollection()
|
namespace Sharpy
|
||||||
.BuildServiceProvider();
|
|
||||||
|
|
||||||
// Register Lavalink
|
|
||||||
var lavalink = discord.UseLavalink();
|
|
||||||
|
|
||||||
// Register Slash Commands
|
|
||||||
var slash = discord.UseSlashCommands(new SlashCommandsConfiguration
|
|
||||||
{
|
{
|
||||||
Services = services
|
public static class Sharpy
|
||||||
});
|
|
||||||
|
|
||||||
// Register Commands
|
|
||||||
// General
|
|
||||||
slash.RegisterCommands<Info>(772228301552222258);
|
|
||||||
|
|
||||||
// Music
|
|
||||||
slash.RegisterCommands<Play>(772228301552222258);
|
|
||||||
slash.RegisterCommands<Search>(772228301552222258);
|
|
||||||
|
|
||||||
await discord.ConnectAsync(new DiscordActivity("With DSharpPlus"));
|
|
||||||
await lavalink.ConnectAsync(new LavalinkConfiguration
|
|
||||||
{
|
|
||||||
Password = config.GetSection("lavalink").GetValue<string>("password"),
|
|
||||||
RestEndpoint = new ConnectionEndpoint
|
|
||||||
{
|
{
|
||||||
Hostname = config.GetSection("lavalink").GetValue<string>("host"),
|
public static readonly IConfiguration config = new ConfigurationBuilder()
|
||||||
Port = config.GetSection("lavalink").GetValue<int>("port"),
|
.AddJsonFile("appsettings.json", false, true)
|
||||||
Secured = false
|
.Build();
|
||||||
},
|
|
||||||
ResumeTimeout = 30,
|
|
||||||
SocketAutoReconnect = true,
|
|
||||||
SocketEndpoint = new ConnectionEndpoint
|
|
||||||
{
|
|
||||||
Hostname = config.GetSection("lavalink").GetValue<string>("host"),
|
|
||||||
Port = config.GetSection("lavalink").GetValue<int>("port"),
|
|
||||||
Secured = false
|
|
||||||
},
|
|
||||||
WebSocketCloseTimeout = 30
|
|
||||||
});
|
|
||||||
|
|
||||||
await Task.Delay(-1);
|
public static async Task Main()
|
||||||
|
{
|
||||||
|
#if DEBUG
|
||||||
|
var discord = new DiscordClient(new DiscordConfiguration
|
||||||
|
{
|
||||||
|
AlwaysCacheMembers = true,
|
||||||
|
AutoReconnect = true,
|
||||||
|
GatewayCompressionLevel = GatewayCompressionLevel.Stream,
|
||||||
|
HttpTimeout = TimeSpan.FromSeconds(10),
|
||||||
|
Intents = DiscordIntents.All,
|
||||||
|
LogTimestampFormat = "MMM dd yyyy - hh:mm:ss tt",
|
||||||
|
MinimumLogLevel = LogLevel.Debug,
|
||||||
|
ReconnectIndefinitely = false,
|
||||||
|
Token = config.GetValue<string>("token"),
|
||||||
|
TokenType = TokenType.Bot
|
||||||
|
});
|
||||||
|
#else
|
||||||
|
var discord = new DiscordClient(new DiscordConfiguration
|
||||||
|
{
|
||||||
|
AlwaysCacheMembers = true,
|
||||||
|
AutoReconnect = true,
|
||||||
|
GatewayCompressionLevel = GatewayCompressionLevel.Stream,
|
||||||
|
HttpTimeout = TimeSpan.FromSeconds(10),
|
||||||
|
Intents = DiscordIntents.All,
|
||||||
|
LogTimestampFormat = "MMM dd yyyy - hh:mm:ss tt",
|
||||||
|
MinimumLogLevel = LogLevel.Information,
|
||||||
|
ReconnectIndefinitely = false,
|
||||||
|
ShardCount = Convert.ToInt32(Dns.GetHostName().Substring(Dns.GetHostName().IndexOf('-') + 1)),
|
||||||
|
ShardId = Convert.ToInt32(Dns.GetHostName().Substring(Dns.GetHostName().IndexOf('-') + 1)),
|
||||||
|
Token = config.GetValue<string>("token"),
|
||||||
|
TokenType = TokenType.Bot,
|
||||||
|
});
|
||||||
|
#endif
|
||||||
|
|
||||||
|
var services = new ServiceCollection()
|
||||||
|
.BuildServiceProvider();
|
||||||
|
|
||||||
|
// Register Lavalink
|
||||||
|
var lavalink = discord.UseLavalink();
|
||||||
|
|
||||||
|
// Register Slash Commands
|
||||||
|
var slash = discord.UseSlashCommands(new SlashCommandsConfiguration
|
||||||
|
{
|
||||||
|
Services = services
|
||||||
|
});
|
||||||
|
|
||||||
|
// Register Commands
|
||||||
|
// General
|
||||||
|
slash.RegisterCommands<Info>(772228301552222258);
|
||||||
|
|
||||||
|
// Music
|
||||||
|
slash.RegisterCommands<Play>(772228301552222258);
|
||||||
|
slash.RegisterCommands<Search>(772228301552222258);
|
||||||
|
|
||||||
|
await discord.ConnectAsync(new DiscordActivity("With DSharpPlus"));
|
||||||
|
await lavalink.ConnectAsync(new LavalinkConfiguration
|
||||||
|
{
|
||||||
|
Password = config.GetSection("lavalink").GetValue<string>("password"),
|
||||||
|
RestEndpoint = new ConnectionEndpoint
|
||||||
|
{
|
||||||
|
Hostname = config.GetSection("lavalink").GetValue<string>("host"),
|
||||||
|
Port = config.GetSection("lavalink").GetValue<int>("port"),
|
||||||
|
Secured = false
|
||||||
|
},
|
||||||
|
ResumeTimeout = 30,
|
||||||
|
SocketAutoReconnect = true,
|
||||||
|
SocketEndpoint = new ConnectionEndpoint
|
||||||
|
{
|
||||||
|
Hostname = config.GetSection("lavalink").GetValue<string>("host"),
|
||||||
|
Port = config.GetSection("lavalink").GetValue<int>("port"),
|
||||||
|
Secured = false
|
||||||
|
},
|
||||||
|
WebSocketCloseTimeout = 30
|
||||||
|
});
|
||||||
|
|
||||||
|
await Task.Delay(-1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<OutputType>Exe</OutputType>
|
<OutputType>Exe</OutputType>
|
||||||
<TargetFramework>net6.0</TargetFramework>
|
<TargetFramework>net6.0</TargetFramework>
|
||||||
<Nullable>enable</Nullable>
|
<Nullable>disable</Nullable>
|
||||||
<IsPackable>false</IsPackable>
|
<IsPackable>false</IsPackable>
|
||||||
<Configurations>Release;Debug</Configurations>
|
<Configurations>Release;Debug</Configurations>
|
||||||
<Platforms>x64</Platforms>
|
<Platforms>x64</Platforms>
|
||||||
|
@ -39,11 +39,21 @@
|
||||||
<PackageReference Include="DSharpPlus.Lavalink" Version="4.2.0-nightly-01030" />
|
<PackageReference Include="DSharpPlus.Lavalink" Version="4.2.0-nightly-01030" />
|
||||||
<PackageReference Include="DSharpPlus.SlashCommands" Version="4.2.0-nightly-01030" />
|
<PackageReference Include="DSharpPlus.SlashCommands" Version="4.2.0-nightly-01030" />
|
||||||
<PackageReference Include="Hardware.Info" Version="1.1.1.1" />
|
<PackageReference Include="Hardware.Info" Version="1.1.1.1" />
|
||||||
|
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="6.0.0-rc.2.21480.5" />
|
||||||
|
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="6.0.0-rc.2.21480.5">
|
||||||
|
<PrivateAssets>all</PrivateAssets>
|
||||||
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
|
</PackageReference>
|
||||||
|
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="6.0.0-rc.2.21480.5">
|
||||||
|
<PrivateAssets>all</PrivateAssets>
|
||||||
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
|
</PackageReference>
|
||||||
<PackageReference Include="Microsoft.Extensions.Configuration" Version="6.0.0-rc.2.21480.5" />
|
<PackageReference Include="Microsoft.Extensions.Configuration" Version="6.0.0-rc.2.21480.5" />
|
||||||
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="6.0.0-rc.2.21480.5" />
|
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="6.0.0-rc.2.21480.5" />
|
||||||
<PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="6.0.0-rc.2.21480.5" />
|
<PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="6.0.0-rc.2.21480.5" />
|
||||||
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="6.0.0-rc.2.21480.5" />
|
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="6.0.0-rc.2.21480.5" />
|
||||||
<PackageReference Include="NATS.Client" Version="0.14.0-pre3" />
|
<PackageReference Include="NATS.Client" Version="0.14.0-pre3" />
|
||||||
|
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="6.0.0-rc.2" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
@ -52,4 +62,8 @@
|
||||||
</None>
|
</None>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Folder Include="Commands\Moderation" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|
Reference in a new issue