Work on permissions, added tests for permission linked list
This commit is contained in:
		| @@ -16,6 +16,8 @@ Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "Discord.Net", "discord.net\ | |||||||
| EndProject | EndProject | ||||||
| Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "Discord.Net.Commands", "discord.net\src\Discord.Net.Commands\Discord.Net.Commands.xproj", "{078DD7E6-943D-4D09-AFC2-D2BA58B76C9C}" | Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "Discord.Net.Commands", "discord.net\src\Discord.Net.Commands\Discord.Net.Commands.xproj", "{078DD7E6-943D-4D09-AFC2-D2BA58B76C9C}" | ||||||
| EndProject | EndProject | ||||||
|  | Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "tests", "src\tests\tests.xproj", "{14CBADA0-971C-44E3-B331-C7D01DD74F0B}" | ||||||
|  | EndProject | ||||||
| Global | Global | ||||||
| 	GlobalSection(SolutionConfigurationPlatforms) = preSolution | 	GlobalSection(SolutionConfigurationPlatforms) = preSolution | ||||||
| 		Debug|Any CPU = Debug|Any CPU | 		Debug|Any CPU = Debug|Any CPU | ||||||
| @@ -34,11 +36,16 @@ Global | |||||||
| 		{078DD7E6-943D-4D09-AFC2-D2BA58B76C9C}.Debug|Any CPU.Build.0 = Debug|Any CPU | 		{078DD7E6-943D-4D09-AFC2-D2BA58B76C9C}.Debug|Any CPU.Build.0 = Debug|Any CPU | ||||||
| 		{078DD7E6-943D-4D09-AFC2-D2BA58B76C9C}.Release|Any CPU.ActiveCfg = Release|Any CPU | 		{078DD7E6-943D-4D09-AFC2-D2BA58B76C9C}.Release|Any CPU.ActiveCfg = Release|Any CPU | ||||||
| 		{078DD7E6-943D-4D09-AFC2-D2BA58B76C9C}.Release|Any CPU.Build.0 = Release|Any CPU | 		{078DD7E6-943D-4D09-AFC2-D2BA58B76C9C}.Release|Any CPU.Build.0 = Release|Any CPU | ||||||
|  | 		{14CBADA0-971C-44E3-B331-C7D01DD74F0B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | ||||||
|  | 		{14CBADA0-971C-44E3-B331-C7D01DD74F0B}.Debug|Any CPU.Build.0 = Debug|Any CPU | ||||||
|  | 		{14CBADA0-971C-44E3-B331-C7D01DD74F0B}.Release|Any CPU.ActiveCfg = Release|Any CPU | ||||||
|  | 		{14CBADA0-971C-44E3-B331-C7D01DD74F0B}.Release|Any CPU.Build.0 = Release|Any CPU | ||||||
| 	EndGlobalSection | 	EndGlobalSection | ||||||
| 	GlobalSection(SolutionProperties) = preSolution | 	GlobalSection(SolutionProperties) = preSolution | ||||||
| 		HideSolutionNode = FALSE | 		HideSolutionNode = FALSE | ||||||
| 	EndGlobalSection | 	EndGlobalSection | ||||||
| 	GlobalSection(NestedProjects) = preSolution | 	GlobalSection(NestedProjects) = preSolution | ||||||
| 		{45EC1473-C678-4857-A544-07DFE0D0B478} = {04929013-5BAB-42B0-B9B2-8F2BB8F16AF2} | 		{45EC1473-C678-4857-A544-07DFE0D0B478} = {04929013-5BAB-42B0-B9B2-8F2BB8F16AF2} | ||||||
|  | 		{14CBADA0-971C-44E3-B331-C7D01DD74F0B} = {04929013-5BAB-42B0-B9B2-8F2BB8F16AF2} | ||||||
| 	EndGlobalSection | 	EndGlobalSection | ||||||
| EndGlobal | EndGlobal | ||||||
|   | |||||||
							
								
								
									
										596
									
								
								src/NadekoBot/Migrations/20160927023659_moar perms.Designer.cs
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										596
									
								
								src/NadekoBot/Migrations/20160927023659_moar perms.Designer.cs
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,596 @@ | |||||||
|  | using System; | ||||||
|  | using Microsoft.EntityFrameworkCore; | ||||||
|  | using Microsoft.EntityFrameworkCore.Infrastructure; | ||||||
|  | using Microsoft.EntityFrameworkCore.Metadata; | ||||||
|  | using Microsoft.EntityFrameworkCore.Migrations; | ||||||
|  | using NadekoBot.Services.Database.Impl; | ||||||
|  |  | ||||||
|  | namespace NadekoBot.Migrations | ||||||
|  | { | ||||||
|  |     [DbContext(typeof(NadekoSqliteContext))] | ||||||
|  |     [Migration("20160927023659_moar perms")] | ||||||
|  |     partial class moarperms | ||||||
|  |     { | ||||||
|  |         protected override void BuildTargetModel(ModelBuilder modelBuilder) | ||||||
|  |         { | ||||||
|  |             modelBuilder | ||||||
|  |                 .HasAnnotation("ProductVersion", "1.0.0-rtm-21431"); | ||||||
|  |  | ||||||
|  |             modelBuilder.Entity("NadekoBot.Services.Database.Models.BlacklistItem", b => | ||||||
|  |                 { | ||||||
|  |                     b.Property<int>("Id") | ||||||
|  |                         .ValueGeneratedOnAdd(); | ||||||
|  |  | ||||||
|  |                     b.Property<int?>("BotConfigId"); | ||||||
|  |  | ||||||
|  |                     b.Property<ulong>("ItemId"); | ||||||
|  |  | ||||||
|  |                     b.HasKey("Id"); | ||||||
|  |  | ||||||
|  |                     b.HasIndex("BotConfigId"); | ||||||
|  |  | ||||||
|  |                     b.ToTable("BlacklistItem"); | ||||||
|  |                 }); | ||||||
|  |  | ||||||
|  |             modelBuilder.Entity("NadekoBot.Services.Database.Models.BotConfig", b => | ||||||
|  |                 { | ||||||
|  |                     b.Property<int>("Id") | ||||||
|  |                         .ValueGeneratedOnAdd(); | ||||||
|  |  | ||||||
|  |                     b.Property<ulong>("BufferSize"); | ||||||
|  |  | ||||||
|  |                     b.Property<float>("CurrencyGenerationChance"); | ||||||
|  |  | ||||||
|  |                     b.Property<int>("CurrencyGenerationCooldown"); | ||||||
|  |  | ||||||
|  |                     b.Property<string>("CurrencyName"); | ||||||
|  |  | ||||||
|  |                     b.Property<string>("CurrencyPluralName"); | ||||||
|  |  | ||||||
|  |                     b.Property<string>("CurrencySign"); | ||||||
|  |  | ||||||
|  |                     b.Property<bool>("DontJoinServers"); | ||||||
|  |  | ||||||
|  |                     b.Property<bool>("ForwardMessages"); | ||||||
|  |  | ||||||
|  |                     b.Property<bool>("ForwardToAllOwners"); | ||||||
|  |  | ||||||
|  |                     b.Property<string>("RemindMessageFormat"); | ||||||
|  |  | ||||||
|  |                     b.Property<bool>("RotatingStatuses"); | ||||||
|  |  | ||||||
|  |                     b.HasKey("Id"); | ||||||
|  |  | ||||||
|  |                     b.ToTable("BotConfig"); | ||||||
|  |                 }); | ||||||
|  |  | ||||||
|  |             modelBuilder.Entity("NadekoBot.Services.Database.Models.ClashCaller", b => | ||||||
|  |                 { | ||||||
|  |                     b.Property<int>("Id") | ||||||
|  |                         .ValueGeneratedOnAdd(); | ||||||
|  |  | ||||||
|  |                     b.Property<bool>("BaseDestroyed"); | ||||||
|  |  | ||||||
|  |                     b.Property<string>("CallUser"); | ||||||
|  |  | ||||||
|  |                     b.Property<int>("ClashWarId"); | ||||||
|  |  | ||||||
|  |                     b.Property<int>("Stars"); | ||||||
|  |  | ||||||
|  |                     b.Property<DateTime>("TimeAdded"); | ||||||
|  |  | ||||||
|  |                     b.HasKey("Id"); | ||||||
|  |  | ||||||
|  |                     b.HasIndex("ClashWarId"); | ||||||
|  |  | ||||||
|  |                     b.ToTable("ClashCallers"); | ||||||
|  |                 }); | ||||||
|  |  | ||||||
|  |             modelBuilder.Entity("NadekoBot.Services.Database.Models.ClashWar", b => | ||||||
|  |                 { | ||||||
|  |                     b.Property<int>("Id") | ||||||
|  |                         .ValueGeneratedOnAdd(); | ||||||
|  |  | ||||||
|  |                     b.Property<ulong>("ChannelId"); | ||||||
|  |  | ||||||
|  |                     b.Property<string>("EnemyClan"); | ||||||
|  |  | ||||||
|  |                     b.Property<ulong>("GuildId"); | ||||||
|  |  | ||||||
|  |                     b.Property<int>("Size"); | ||||||
|  |  | ||||||
|  |                     b.Property<DateTime>("StartedAt"); | ||||||
|  |  | ||||||
|  |                     b.Property<int>("WarState"); | ||||||
|  |  | ||||||
|  |                     b.HasKey("Id"); | ||||||
|  |  | ||||||
|  |                     b.ToTable("ClashOfClans"); | ||||||
|  |                 }); | ||||||
|  |  | ||||||
|  |             modelBuilder.Entity("NadekoBot.Services.Database.Models.ConvertUnit", b => | ||||||
|  |                 { | ||||||
|  |                     b.Property<int>("Id") | ||||||
|  |                         .ValueGeneratedOnAdd(); | ||||||
|  |  | ||||||
|  |                     b.Property<string>("InternalTrigger"); | ||||||
|  |  | ||||||
|  |                     b.Property<decimal>("Modifier"); | ||||||
|  |  | ||||||
|  |                     b.Property<string>("UnitType"); | ||||||
|  |  | ||||||
|  |                     b.HasKey("Id"); | ||||||
|  |  | ||||||
|  |                     b.ToTable("ConversionUnits"); | ||||||
|  |                 }); | ||||||
|  |  | ||||||
|  |             modelBuilder.Entity("NadekoBot.Services.Database.Models.Currency", b => | ||||||
|  |                 { | ||||||
|  |                     b.Property<int>("Id") | ||||||
|  |                         .ValueGeneratedOnAdd(); | ||||||
|  |  | ||||||
|  |                     b.Property<long>("Amount"); | ||||||
|  |  | ||||||
|  |                     b.Property<ulong>("UserId"); | ||||||
|  |  | ||||||
|  |                     b.HasKey("Id"); | ||||||
|  |  | ||||||
|  |                     b.HasIndex("UserId") | ||||||
|  |                         .IsUnique(); | ||||||
|  |  | ||||||
|  |                     b.ToTable("Currency"); | ||||||
|  |                 }); | ||||||
|  |  | ||||||
|  |             modelBuilder.Entity("NadekoBot.Services.Database.Models.Donator", b => | ||||||
|  |                 { | ||||||
|  |                     b.Property<int>("Id") | ||||||
|  |                         .ValueGeneratedOnAdd(); | ||||||
|  |  | ||||||
|  |                     b.Property<int>("Amount"); | ||||||
|  |  | ||||||
|  |                     b.Property<string>("Name"); | ||||||
|  |  | ||||||
|  |                     b.Property<ulong>("UserId"); | ||||||
|  |  | ||||||
|  |                     b.HasKey("Id"); | ||||||
|  |  | ||||||
|  |                     b.HasIndex("UserId") | ||||||
|  |                         .IsUnique(); | ||||||
|  |  | ||||||
|  |                     b.ToTable("Donators"); | ||||||
|  |                 }); | ||||||
|  |  | ||||||
|  |             modelBuilder.Entity("NadekoBot.Services.Database.Models.EightBallResponse", b => | ||||||
|  |                 { | ||||||
|  |                     b.Property<int>("Id") | ||||||
|  |                         .ValueGeneratedOnAdd(); | ||||||
|  |  | ||||||
|  |                     b.Property<int?>("BotConfigId"); | ||||||
|  |  | ||||||
|  |                     b.Property<string>("Text"); | ||||||
|  |  | ||||||
|  |                     b.HasKey("Id"); | ||||||
|  |  | ||||||
|  |                     b.HasIndex("BotConfigId"); | ||||||
|  |  | ||||||
|  |                     b.ToTable("EightBallResponses"); | ||||||
|  |                 }); | ||||||
|  |  | ||||||
|  |             modelBuilder.Entity("NadekoBot.Services.Database.Models.FollowedStream", b => | ||||||
|  |                 { | ||||||
|  |                     b.Property<int>("Id") | ||||||
|  |                         .ValueGeneratedOnAdd(); | ||||||
|  |  | ||||||
|  |                     b.Property<ulong>("ChannelId"); | ||||||
|  |  | ||||||
|  |                     b.Property<int?>("GuildConfigId"); | ||||||
|  |  | ||||||
|  |                     b.Property<ulong>("GuildId"); | ||||||
|  |  | ||||||
|  |                     b.Property<bool>("LastStatus"); | ||||||
|  |  | ||||||
|  |                     b.Property<int>("Type"); | ||||||
|  |  | ||||||
|  |                     b.Property<string>("Username"); | ||||||
|  |  | ||||||
|  |                     b.HasKey("Id"); | ||||||
|  |  | ||||||
|  |                     b.HasIndex("GuildConfigId"); | ||||||
|  |  | ||||||
|  |                     b.ToTable("FollowedStream"); | ||||||
|  |                 }); | ||||||
|  |  | ||||||
|  |             modelBuilder.Entity("NadekoBot.Services.Database.Models.GuildConfig", b => | ||||||
|  |                 { | ||||||
|  |                     b.Property<int>("Id") | ||||||
|  |                         .ValueGeneratedOnAdd(); | ||||||
|  |  | ||||||
|  |                     b.Property<ulong>("AutoAssignRoleId"); | ||||||
|  |  | ||||||
|  |                     b.Property<bool>("AutoDeleteByeMessages"); | ||||||
|  |  | ||||||
|  |                     b.Property<bool>("AutoDeleteGreetMessages"); | ||||||
|  |  | ||||||
|  |                     b.Property<int>("AutoDeleteGreetMessagesTimer"); | ||||||
|  |  | ||||||
|  |                     b.Property<bool>("AutoDeleteSelfAssignedRoleMessages"); | ||||||
|  |  | ||||||
|  |                     b.Property<ulong>("ByeMessageChannelId"); | ||||||
|  |  | ||||||
|  |                     b.Property<string>("ChannelByeMessageText"); | ||||||
|  |  | ||||||
|  |                     b.Property<string>("ChannelGreetMessageText"); | ||||||
|  |  | ||||||
|  |                     b.Property<float>("DefaultMusicVolume"); | ||||||
|  |  | ||||||
|  |                     b.Property<bool>("DeleteMessageOnCommand"); | ||||||
|  |  | ||||||
|  |                     b.Property<string>("DmGreetMessageText"); | ||||||
|  |  | ||||||
|  |                     b.Property<bool>("ExclusiveSelfAssignedRoles"); | ||||||
|  |  | ||||||
|  |                     b.Property<ulong?>("GenerateCurrencyChannelId"); | ||||||
|  |  | ||||||
|  |                     b.Property<ulong>("GreetMessageChannelId"); | ||||||
|  |  | ||||||
|  |                     b.Property<ulong>("GuildId"); | ||||||
|  |  | ||||||
|  |                     b.Property<int?>("LogSettingId"); | ||||||
|  |  | ||||||
|  |                     b.Property<int?>("RootPermissionId"); | ||||||
|  |  | ||||||
|  |                     b.Property<bool>("SendChannelByeMessage"); | ||||||
|  |  | ||||||
|  |                     b.Property<bool>("SendChannelGreetMessage"); | ||||||
|  |  | ||||||
|  |                     b.Property<bool>("SendDmGreetMessage"); | ||||||
|  |  | ||||||
|  |                     b.Property<bool>("VoicePlusTextEnabled"); | ||||||
|  |  | ||||||
|  |                     b.HasKey("Id"); | ||||||
|  |  | ||||||
|  |                     b.HasIndex("GuildId") | ||||||
|  |                         .IsUnique(); | ||||||
|  |  | ||||||
|  |                     b.HasIndex("LogSettingId"); | ||||||
|  |  | ||||||
|  |                     b.HasIndex("RootPermissionId"); | ||||||
|  |  | ||||||
|  |                     b.ToTable("GuildConfigs"); | ||||||
|  |                 }); | ||||||
|  |  | ||||||
|  |             modelBuilder.Entity("NadekoBot.Services.Database.Models.IgnoredLogChannel", b => | ||||||
|  |                 { | ||||||
|  |                     b.Property<int>("Id") | ||||||
|  |                         .ValueGeneratedOnAdd(); | ||||||
|  |  | ||||||
|  |                     b.Property<ulong>("ChannelId"); | ||||||
|  |  | ||||||
|  |                     b.Property<int?>("LogSettingId"); | ||||||
|  |  | ||||||
|  |                     b.HasKey("Id"); | ||||||
|  |  | ||||||
|  |                     b.HasIndex("LogSettingId"); | ||||||
|  |  | ||||||
|  |                     b.ToTable("IgnoredLogChannels"); | ||||||
|  |                 }); | ||||||
|  |  | ||||||
|  |             modelBuilder.Entity("NadekoBot.Services.Database.Models.IgnoredVoicePresenceChannel", b => | ||||||
|  |                 { | ||||||
|  |                     b.Property<int>("Id") | ||||||
|  |                         .ValueGeneratedOnAdd(); | ||||||
|  |  | ||||||
|  |                     b.Property<ulong>("ChannelId"); | ||||||
|  |  | ||||||
|  |                     b.Property<int?>("LogSettingId"); | ||||||
|  |  | ||||||
|  |                     b.HasKey("Id"); | ||||||
|  |  | ||||||
|  |                     b.HasIndex("LogSettingId"); | ||||||
|  |  | ||||||
|  |                     b.ToTable("IgnoredVoicePresenceCHannels"); | ||||||
|  |                 }); | ||||||
|  |  | ||||||
|  |             modelBuilder.Entity("NadekoBot.Services.Database.Models.LogSetting", b => | ||||||
|  |                 { | ||||||
|  |                     b.Property<int>("Id") | ||||||
|  |                         .ValueGeneratedOnAdd(); | ||||||
|  |  | ||||||
|  |                     b.Property<bool>("ChannelCreated"); | ||||||
|  |  | ||||||
|  |                     b.Property<bool>("ChannelDestroyed"); | ||||||
|  |  | ||||||
|  |                     b.Property<ulong>("ChannelId"); | ||||||
|  |  | ||||||
|  |                     b.Property<bool>("ChannelUpdated"); | ||||||
|  |  | ||||||
|  |                     b.Property<bool>("IsLogging"); | ||||||
|  |  | ||||||
|  |                     b.Property<bool>("LogUserPresence"); | ||||||
|  |  | ||||||
|  |                     b.Property<bool>("LogVoicePresence"); | ||||||
|  |  | ||||||
|  |                     b.Property<bool>("MessageDeleted"); | ||||||
|  |  | ||||||
|  |                     b.Property<bool>("MessageReceived"); | ||||||
|  |  | ||||||
|  |                     b.Property<bool>("MessageUpdated"); | ||||||
|  |  | ||||||
|  |                     b.Property<bool>("UserBanned"); | ||||||
|  |  | ||||||
|  |                     b.Property<bool>("UserJoined"); | ||||||
|  |  | ||||||
|  |                     b.Property<bool>("UserLeft"); | ||||||
|  |  | ||||||
|  |                     b.Property<ulong>("UserPresenceChannelId"); | ||||||
|  |  | ||||||
|  |                     b.Property<bool>("UserUnbanned"); | ||||||
|  |  | ||||||
|  |                     b.Property<bool>("UserUpdated"); | ||||||
|  |  | ||||||
|  |                     b.Property<ulong>("VoicePresenceChannelId"); | ||||||
|  |  | ||||||
|  |                     b.HasKey("Id"); | ||||||
|  |  | ||||||
|  |                     b.ToTable("LogSettings"); | ||||||
|  |                 }); | ||||||
|  |  | ||||||
|  |             modelBuilder.Entity("NadekoBot.Services.Database.Models.ModulePrefix", b => | ||||||
|  |                 { | ||||||
|  |                     b.Property<int>("Id") | ||||||
|  |                         .ValueGeneratedOnAdd(); | ||||||
|  |  | ||||||
|  |                     b.Property<int>("BotConfigId"); | ||||||
|  |  | ||||||
|  |                     b.Property<string>("ModuleName"); | ||||||
|  |  | ||||||
|  |                     b.Property<string>("Prefix"); | ||||||
|  |  | ||||||
|  |                     b.HasKey("Id"); | ||||||
|  |  | ||||||
|  |                     b.HasIndex("BotConfigId"); | ||||||
|  |  | ||||||
|  |                     b.ToTable("ModulePrefixes"); | ||||||
|  |                 }); | ||||||
|  |  | ||||||
|  |             modelBuilder.Entity("NadekoBot.Services.Database.Models.Permission", b => | ||||||
|  |                 { | ||||||
|  |                     b.Property<int>("Id") | ||||||
|  |                         .ValueGeneratedOnAdd(); | ||||||
|  |  | ||||||
|  |                     b.Property<int?>("NextId"); | ||||||
|  |  | ||||||
|  |                     b.Property<int>("PrimaryTarget"); | ||||||
|  |  | ||||||
|  |                     b.Property<ulong>("PrimaryTargetId"); | ||||||
|  |  | ||||||
|  |                     b.Property<int>("SecondaryTarget"); | ||||||
|  |  | ||||||
|  |                     b.Property<string>("SecondaryTargetName"); | ||||||
|  |  | ||||||
|  |                     b.Property<bool>("State"); | ||||||
|  |  | ||||||
|  |                     b.HasKey("Id"); | ||||||
|  |  | ||||||
|  |                     b.HasIndex("NextId") | ||||||
|  |                         .IsUnique(); | ||||||
|  |  | ||||||
|  |                     b.ToTable("Permission"); | ||||||
|  |                 }); | ||||||
|  |  | ||||||
|  |             modelBuilder.Entity("NadekoBot.Services.Database.Models.PlayingStatus", b => | ||||||
|  |                 { | ||||||
|  |                     b.Property<int>("Id") | ||||||
|  |                         .ValueGeneratedOnAdd(); | ||||||
|  |  | ||||||
|  |                     b.Property<int?>("BotConfigId"); | ||||||
|  |  | ||||||
|  |                     b.Property<string>("Status"); | ||||||
|  |  | ||||||
|  |                     b.HasKey("Id"); | ||||||
|  |  | ||||||
|  |                     b.HasIndex("BotConfigId"); | ||||||
|  |  | ||||||
|  |                     b.ToTable("PlayingStatus"); | ||||||
|  |                 }); | ||||||
|  |  | ||||||
|  |             modelBuilder.Entity("NadekoBot.Services.Database.Models.Quote", b => | ||||||
|  |                 { | ||||||
|  |                     b.Property<int>("Id") | ||||||
|  |                         .ValueGeneratedOnAdd(); | ||||||
|  |  | ||||||
|  |                     b.Property<ulong>("AuthorId"); | ||||||
|  |  | ||||||
|  |                     b.Property<string>("AuthorName") | ||||||
|  |                         .IsRequired(); | ||||||
|  |  | ||||||
|  |                     b.Property<ulong>("GuildId"); | ||||||
|  |  | ||||||
|  |                     b.Property<string>("Keyword") | ||||||
|  |                         .IsRequired(); | ||||||
|  |  | ||||||
|  |                     b.Property<string>("Text") | ||||||
|  |                         .IsRequired(); | ||||||
|  |  | ||||||
|  |                     b.HasKey("Id"); | ||||||
|  |  | ||||||
|  |                     b.ToTable("Quotes"); | ||||||
|  |                 }); | ||||||
|  |  | ||||||
|  |             modelBuilder.Entity("NadekoBot.Services.Database.Models.RaceAnimal", b => | ||||||
|  |                 { | ||||||
|  |                     b.Property<int>("Id") | ||||||
|  |                         .ValueGeneratedOnAdd(); | ||||||
|  |  | ||||||
|  |                     b.Property<int?>("BotConfigId"); | ||||||
|  |  | ||||||
|  |                     b.Property<string>("Icon"); | ||||||
|  |  | ||||||
|  |                     b.Property<string>("Name"); | ||||||
|  |  | ||||||
|  |                     b.HasKey("Id"); | ||||||
|  |  | ||||||
|  |                     b.HasIndex("BotConfigId"); | ||||||
|  |  | ||||||
|  |                     b.ToTable("RaceAnimals"); | ||||||
|  |                 }); | ||||||
|  |  | ||||||
|  |             modelBuilder.Entity("NadekoBot.Services.Database.Models.Reminder", b => | ||||||
|  |                 { | ||||||
|  |                     b.Property<int>("Id") | ||||||
|  |                         .ValueGeneratedOnAdd(); | ||||||
|  |  | ||||||
|  |                     b.Property<ulong>("ChannelId"); | ||||||
|  |  | ||||||
|  |                     b.Property<bool>("IsPrivate"); | ||||||
|  |  | ||||||
|  |                     b.Property<string>("Message"); | ||||||
|  |  | ||||||
|  |                     b.Property<ulong>("ServerId"); | ||||||
|  |  | ||||||
|  |                     b.Property<ulong>("UserId"); | ||||||
|  |  | ||||||
|  |                     b.Property<DateTime>("When"); | ||||||
|  |  | ||||||
|  |                     b.HasKey("Id"); | ||||||
|  |  | ||||||
|  |                     b.ToTable("Reminders"); | ||||||
|  |                 }); | ||||||
|  |  | ||||||
|  |             modelBuilder.Entity("NadekoBot.Services.Database.Models.Repeater", b => | ||||||
|  |                 { | ||||||
|  |                     b.Property<int>("Id") | ||||||
|  |                         .ValueGeneratedOnAdd(); | ||||||
|  |  | ||||||
|  |                     b.Property<ulong>("ChannelId"); | ||||||
|  |  | ||||||
|  |                     b.Property<ulong>("GuildId"); | ||||||
|  |  | ||||||
|  |                     b.Property<TimeSpan>("Interval"); | ||||||
|  |  | ||||||
|  |                     b.Property<string>("Message"); | ||||||
|  |  | ||||||
|  |                     b.HasKey("Id"); | ||||||
|  |  | ||||||
|  |                     b.HasIndex("ChannelId") | ||||||
|  |                         .IsUnique(); | ||||||
|  |  | ||||||
|  |                     b.ToTable("Repeaters"); | ||||||
|  |                 }); | ||||||
|  |  | ||||||
|  |             modelBuilder.Entity("NadekoBot.Services.Database.Models.SelfAssignedRole", b => | ||||||
|  |                 { | ||||||
|  |                     b.Property<int>("Id") | ||||||
|  |                         .ValueGeneratedOnAdd(); | ||||||
|  |  | ||||||
|  |                     b.Property<ulong>("GuildId"); | ||||||
|  |  | ||||||
|  |                     b.Property<ulong>("RoleId"); | ||||||
|  |  | ||||||
|  |                     b.HasKey("Id"); | ||||||
|  |  | ||||||
|  |                     b.HasIndex("GuildId", "RoleId") | ||||||
|  |                         .IsUnique(); | ||||||
|  |  | ||||||
|  |                     b.ToTable("SelfAssignableRoles"); | ||||||
|  |                 }); | ||||||
|  |  | ||||||
|  |             modelBuilder.Entity("NadekoBot.Services.Database.Models.TypingArticle", b => | ||||||
|  |                 { | ||||||
|  |                     b.Property<int>("Id") | ||||||
|  |                         .ValueGeneratedOnAdd(); | ||||||
|  |  | ||||||
|  |                     b.Property<string>("Author"); | ||||||
|  |  | ||||||
|  |                     b.Property<string>("Text"); | ||||||
|  |  | ||||||
|  |                     b.HasKey("Id"); | ||||||
|  |  | ||||||
|  |                     b.ToTable("TypingArticles"); | ||||||
|  |                 }); | ||||||
|  |  | ||||||
|  |             modelBuilder.Entity("NadekoBot.Services.Database.Models.BlacklistItem", b => | ||||||
|  |                 { | ||||||
|  |                     b.HasOne("NadekoBot.Services.Database.Models.BotConfig") | ||||||
|  |                         .WithMany("Blacklist") | ||||||
|  |                         .HasForeignKey("BotConfigId"); | ||||||
|  |                 }); | ||||||
|  |  | ||||||
|  |             modelBuilder.Entity("NadekoBot.Services.Database.Models.ClashCaller", b => | ||||||
|  |                 { | ||||||
|  |                     b.HasOne("NadekoBot.Services.Database.Models.ClashWar", "ClashWar") | ||||||
|  |                         .WithMany("Bases") | ||||||
|  |                         .HasForeignKey("ClashWarId") | ||||||
|  |                         .OnDelete(DeleteBehavior.Cascade); | ||||||
|  |                 }); | ||||||
|  |  | ||||||
|  |             modelBuilder.Entity("NadekoBot.Services.Database.Models.EightBallResponse", b => | ||||||
|  |                 { | ||||||
|  |                     b.HasOne("NadekoBot.Services.Database.Models.BotConfig") | ||||||
|  |                         .WithMany("EightBallResponses") | ||||||
|  |                         .HasForeignKey("BotConfigId"); | ||||||
|  |                 }); | ||||||
|  |  | ||||||
|  |             modelBuilder.Entity("NadekoBot.Services.Database.Models.FollowedStream", b => | ||||||
|  |                 { | ||||||
|  |                     b.HasOne("NadekoBot.Services.Database.Models.GuildConfig") | ||||||
|  |                         .WithMany("FollowedStreams") | ||||||
|  |                         .HasForeignKey("GuildConfigId"); | ||||||
|  |                 }); | ||||||
|  |  | ||||||
|  |             modelBuilder.Entity("NadekoBot.Services.Database.Models.GuildConfig", b => | ||||||
|  |                 { | ||||||
|  |                     b.HasOne("NadekoBot.Services.Database.Models.LogSetting", "LogSetting") | ||||||
|  |                         .WithMany() | ||||||
|  |                         .HasForeignKey("LogSettingId"); | ||||||
|  |  | ||||||
|  |                     b.HasOne("NadekoBot.Services.Database.Models.Permission", "RootPermission") | ||||||
|  |                         .WithMany() | ||||||
|  |                         .HasForeignKey("RootPermissionId"); | ||||||
|  |                 }); | ||||||
|  |  | ||||||
|  |             modelBuilder.Entity("NadekoBot.Services.Database.Models.IgnoredLogChannel", b => | ||||||
|  |                 { | ||||||
|  |                     b.HasOne("NadekoBot.Services.Database.Models.LogSetting", "LogSetting") | ||||||
|  |                         .WithMany("IgnoredChannels") | ||||||
|  |                         .HasForeignKey("LogSettingId"); | ||||||
|  |                 }); | ||||||
|  |  | ||||||
|  |             modelBuilder.Entity("NadekoBot.Services.Database.Models.IgnoredVoicePresenceChannel", b => | ||||||
|  |                 { | ||||||
|  |                     b.HasOne("NadekoBot.Services.Database.Models.LogSetting", "LogSetting") | ||||||
|  |                         .WithMany("IgnoredVoicePresenceChannelIds") | ||||||
|  |                         .HasForeignKey("LogSettingId"); | ||||||
|  |                 }); | ||||||
|  |  | ||||||
|  |             modelBuilder.Entity("NadekoBot.Services.Database.Models.ModulePrefix", b => | ||||||
|  |                 { | ||||||
|  |                     b.HasOne("NadekoBot.Services.Database.Models.BotConfig", "BotConfig") | ||||||
|  |                         .WithMany("ModulePrefixes") | ||||||
|  |                         .HasForeignKey("BotConfigId") | ||||||
|  |                         .OnDelete(DeleteBehavior.Cascade); | ||||||
|  |                 }); | ||||||
|  |  | ||||||
|  |             modelBuilder.Entity("NadekoBot.Services.Database.Models.Permission", b => | ||||||
|  |                 { | ||||||
|  |                     b.HasOne("NadekoBot.Services.Database.Models.Permission", "Next") | ||||||
|  |                         .WithOne("Previous") | ||||||
|  |                         .HasForeignKey("NadekoBot.Services.Database.Models.Permission", "NextId"); | ||||||
|  |                 }); | ||||||
|  |  | ||||||
|  |             modelBuilder.Entity("NadekoBot.Services.Database.Models.PlayingStatus", b => | ||||||
|  |                 { | ||||||
|  |                     b.HasOne("NadekoBot.Services.Database.Models.BotConfig") | ||||||
|  |                         .WithMany("RotatingStatusMessages") | ||||||
|  |                         .HasForeignKey("BotConfigId"); | ||||||
|  |                 }); | ||||||
|  |  | ||||||
|  |             modelBuilder.Entity("NadekoBot.Services.Database.Models.RaceAnimal", b => | ||||||
|  |                 { | ||||||
|  |                     b.HasOne("NadekoBot.Services.Database.Models.BotConfig") | ||||||
|  |                         .WithMany("RaceAnimals") | ||||||
|  |                         .HasForeignKey("BotConfigId"); | ||||||
|  |                 }); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										106
									
								
								src/NadekoBot/Migrations/20160927023659_moar perms.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										106
									
								
								src/NadekoBot/Migrations/20160927023659_moar perms.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,106 @@ | |||||||
|  | using System; | ||||||
|  | using System.Collections.Generic; | ||||||
|  | using Microsoft.EntityFrameworkCore.Migrations; | ||||||
|  |  | ||||||
|  | namespace NadekoBot.Migrations | ||||||
|  | { | ||||||
|  |     public partial class moarperms : Migration | ||||||
|  |     { | ||||||
|  |         protected override void Up(MigrationBuilder migrationBuilder) | ||||||
|  |         { | ||||||
|  |             migrationBuilder.DropForeignKey( | ||||||
|  |                 name: "FK_Permission_GuildConfigs_GuildConfigId", | ||||||
|  |                 table: "Permission"); | ||||||
|  |  | ||||||
|  |             migrationBuilder.DropIndex( | ||||||
|  |                 name: "IX_Permission_GuildConfigId", | ||||||
|  |                 table: "Permission"); | ||||||
|  |  | ||||||
|  |             migrationBuilder.DropColumn( | ||||||
|  |                 name: "GuildConfigId", | ||||||
|  |                 table: "Permission"); | ||||||
|  |  | ||||||
|  |             migrationBuilder.AddColumn<int>( | ||||||
|  |                 name: "NextId", | ||||||
|  |                 table: "Permission", | ||||||
|  |                 nullable: true); | ||||||
|  |  | ||||||
|  |             migrationBuilder.AddColumn<int>( | ||||||
|  |                 name: "RootPermissionId", | ||||||
|  |                 table: "GuildConfigs", | ||||||
|  |                 nullable: true); | ||||||
|  |  | ||||||
|  |             migrationBuilder.CreateIndex( | ||||||
|  |                 name: "IX_Permission_NextId", | ||||||
|  |                 table: "Permission", | ||||||
|  |                 column: "NextId", | ||||||
|  |                 unique: true); | ||||||
|  |  | ||||||
|  |             migrationBuilder.CreateIndex( | ||||||
|  |                 name: "IX_GuildConfigs_RootPermissionId", | ||||||
|  |                 table: "GuildConfigs", | ||||||
|  |                 column: "RootPermissionId"); | ||||||
|  |  | ||||||
|  |             migrationBuilder.AddForeignKey( | ||||||
|  |                 name: "FK_GuildConfigs_Permission_RootPermissionId", | ||||||
|  |                 table: "GuildConfigs", | ||||||
|  |                 column: "RootPermissionId", | ||||||
|  |                 principalTable: "Permission", | ||||||
|  |                 principalColumn: "Id", | ||||||
|  |                 onDelete: ReferentialAction.Restrict); | ||||||
|  |  | ||||||
|  |             migrationBuilder.AddForeignKey( | ||||||
|  |                 name: "FK_Permission_Permission_NextId", | ||||||
|  |                 table: "Permission", | ||||||
|  |                 column: "NextId", | ||||||
|  |                 principalTable: "Permission", | ||||||
|  |                 principalColumn: "Id", | ||||||
|  |                 onDelete: ReferentialAction.Restrict); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         protected override void Down(MigrationBuilder migrationBuilder) | ||||||
|  |         { | ||||||
|  |             migrationBuilder.DropForeignKey( | ||||||
|  |                 name: "FK_GuildConfigs_Permission_RootPermissionId", | ||||||
|  |                 table: "GuildConfigs"); | ||||||
|  |  | ||||||
|  |             migrationBuilder.DropForeignKey( | ||||||
|  |                 name: "FK_Permission_Permission_NextId", | ||||||
|  |                 table: "Permission"); | ||||||
|  |  | ||||||
|  |             migrationBuilder.DropIndex( | ||||||
|  |                 name: "IX_Permission_NextId", | ||||||
|  |                 table: "Permission"); | ||||||
|  |  | ||||||
|  |             migrationBuilder.DropIndex( | ||||||
|  |                 name: "IX_GuildConfigs_RootPermissionId", | ||||||
|  |                 table: "GuildConfigs"); | ||||||
|  |  | ||||||
|  |             migrationBuilder.DropColumn( | ||||||
|  |                 name: "NextId", | ||||||
|  |                 table: "Permission"); | ||||||
|  |  | ||||||
|  |             migrationBuilder.DropColumn( | ||||||
|  |                 name: "RootPermissionId", | ||||||
|  |                 table: "GuildConfigs"); | ||||||
|  |  | ||||||
|  |             migrationBuilder.AddColumn<int>( | ||||||
|  |                 name: "GuildConfigId", | ||||||
|  |                 table: "Permission", | ||||||
|  |                 nullable: true); | ||||||
|  |  | ||||||
|  |             migrationBuilder.CreateIndex( | ||||||
|  |                 name: "IX_Permission_GuildConfigId", | ||||||
|  |                 table: "Permission", | ||||||
|  |                 column: "GuildConfigId"); | ||||||
|  |  | ||||||
|  |             migrationBuilder.AddForeignKey( | ||||||
|  |                 name: "FK_Permission_GuildConfigs_GuildConfigId", | ||||||
|  |                 table: "Permission", | ||||||
|  |                 column: "GuildConfigId", | ||||||
|  |                 principalTable: "GuildConfigs", | ||||||
|  |                 principalColumn: "Id", | ||||||
|  |                 onDelete: ReferentialAction.Restrict); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -236,6 +236,8 @@ namespace NadekoBot.Migrations | |||||||
|  |  | ||||||
|                     b.Property<int?>("LogSettingId"); |                     b.Property<int?>("LogSettingId"); | ||||||
|  |  | ||||||
|  |                     b.Property<int?>("RootPermissionId"); | ||||||
|  |  | ||||||
|                     b.Property<bool>("SendChannelByeMessage"); |                     b.Property<bool>("SendChannelByeMessage"); | ||||||
|  |  | ||||||
|                     b.Property<bool>("SendChannelGreetMessage"); |                     b.Property<bool>("SendChannelGreetMessage"); | ||||||
| @@ -251,6 +253,8 @@ namespace NadekoBot.Migrations | |||||||
|  |  | ||||||
|                     b.HasIndex("LogSettingId"); |                     b.HasIndex("LogSettingId"); | ||||||
|  |  | ||||||
|  |                     b.HasIndex("RootPermissionId"); | ||||||
|  |  | ||||||
|                     b.ToTable("GuildConfigs"); |                     b.ToTable("GuildConfigs"); | ||||||
|                 }); |                 }); | ||||||
|  |  | ||||||
| @@ -353,7 +357,7 @@ namespace NadekoBot.Migrations | |||||||
|                     b.Property<int>("Id") |                     b.Property<int>("Id") | ||||||
|                         .ValueGeneratedOnAdd(); |                         .ValueGeneratedOnAdd(); | ||||||
|  |  | ||||||
|                     b.Property<int?>("GuildConfigId"); |                     b.Property<int?>("NextId"); | ||||||
|  |  | ||||||
|                     b.Property<int>("PrimaryTarget"); |                     b.Property<int>("PrimaryTarget"); | ||||||
|  |  | ||||||
| @@ -367,7 +371,8 @@ namespace NadekoBot.Migrations | |||||||
|  |  | ||||||
|                     b.HasKey("Id"); |                     b.HasKey("Id"); | ||||||
|  |  | ||||||
|                     b.HasIndex("GuildConfigId"); |                     b.HasIndex("NextId") | ||||||
|  |                         .IsUnique(); | ||||||
|  |  | ||||||
|                     b.ToTable("Permission"); |                     b.ToTable("Permission"); | ||||||
|                 }); |                 }); | ||||||
| @@ -537,6 +542,10 @@ namespace NadekoBot.Migrations | |||||||
|                     b.HasOne("NadekoBot.Services.Database.Models.LogSetting", "LogSetting") |                     b.HasOne("NadekoBot.Services.Database.Models.LogSetting", "LogSetting") | ||||||
|                         .WithMany() |                         .WithMany() | ||||||
|                         .HasForeignKey("LogSettingId"); |                         .HasForeignKey("LogSettingId"); | ||||||
|  |  | ||||||
|  |                     b.HasOne("NadekoBot.Services.Database.Models.Permission", "RootPermission") | ||||||
|  |                         .WithMany() | ||||||
|  |                         .HasForeignKey("RootPermissionId"); | ||||||
|                 }); |                 }); | ||||||
|  |  | ||||||
|             modelBuilder.Entity("NadekoBot.Services.Database.Models.IgnoredLogChannel", b => |             modelBuilder.Entity("NadekoBot.Services.Database.Models.IgnoredLogChannel", b => | ||||||
| @@ -563,9 +572,9 @@ namespace NadekoBot.Migrations | |||||||
|  |  | ||||||
|             modelBuilder.Entity("NadekoBot.Services.Database.Models.Permission", b => |             modelBuilder.Entity("NadekoBot.Services.Database.Models.Permission", b => | ||||||
|                 { |                 { | ||||||
|                     b.HasOne("NadekoBot.Services.Database.Models.GuildConfig") |                     b.HasOne("NadekoBot.Services.Database.Models.Permission", "Next") | ||||||
|                         .WithMany("Permissions") |                         .WithOne("Previous") | ||||||
|                         .HasForeignKey("GuildConfigId"); |                         .HasForeignKey("NadekoBot.Services.Database.Models.Permission", "NextId"); | ||||||
|                 }); |                 }); | ||||||
|  |  | ||||||
|             modelBuilder.Entity("NadekoBot.Services.Database.Models.PlayingStatus", b => |             modelBuilder.Entity("NadekoBot.Services.Database.Models.PlayingStatus", b => | ||||||
|   | |||||||
| @@ -1,5 +1,6 @@ | |||||||
| using Discord; | using Discord; | ||||||
| using Discord.Commands; | using Discord.Commands; | ||||||
|  | using NadekoBot.Services.Database; | ||||||
| using NadekoBot.Services.Database.Models; | using NadekoBot.Services.Database.Models; | ||||||
| using System; | using System; | ||||||
| using System.Collections.Generic; | using System.Collections.Generic; | ||||||
| @@ -126,5 +127,109 @@ namespace NadekoBot.Modules.Permissions | |||||||
|             return NadekoBot.ModulePrefixes[typeof(Permissions).Name] + com; |             return NadekoBot.ModulePrefixes[typeof(Permissions).Name] + com; | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  |         public static void Add(this Permission perm, Permission toAdd) | ||||||
|  |         { | ||||||
|  |             var last = perm; | ||||||
|  |             while (last.Next != null) | ||||||
|  |             { | ||||||
|  |                 last = last.Next; | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             toAdd.Previous = last; | ||||||
|  |             last.Next = toAdd; | ||||||
|  |             toAdd.Next = null; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         public static void Insert(this Permission perm, int index, Permission toAdd) | ||||||
|  |         { | ||||||
|  |             if (index < 0) | ||||||
|  |                 throw new IndexOutOfRangeException(); | ||||||
|  |  | ||||||
|  |             if (index == 0) | ||||||
|  |             { | ||||||
|  |                 perm.Previous = toAdd; | ||||||
|  |                 toAdd.Next = perm; | ||||||
|  |                 return; | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             var atIndex = perm; | ||||||
|  |             var i = 0; | ||||||
|  |             while (i != index) | ||||||
|  |             { | ||||||
|  |                 atIndex = atIndex.Next; | ||||||
|  |                 i++; | ||||||
|  |                 if (atIndex == null) | ||||||
|  |                     throw new IndexOutOfRangeException(); | ||||||
|  |             } | ||||||
|  |             var previous = atIndex.Previous; | ||||||
|  |  | ||||||
|  |             //connect right side | ||||||
|  |             atIndex.Previous = toAdd; | ||||||
|  |             toAdd.Next = atIndex; | ||||||
|  |  | ||||||
|  |             //connect left side | ||||||
|  |             toAdd.Previous = previous; | ||||||
|  |             previous.Next = toAdd; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         public static Permission RemoveAt(this Permission perm, int index) | ||||||
|  |         { | ||||||
|  |             if (index < 0) | ||||||
|  |                 throw new IndexOutOfRangeException(); | ||||||
|  |  | ||||||
|  |             if (index == 0) | ||||||
|  |             { | ||||||
|  |                 perm.Next.Previous = null; | ||||||
|  |                 perm.Next = null; | ||||||
|  |                 return perm; | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             var toRemove = perm; | ||||||
|  |             var i = 0; | ||||||
|  |             while (i != index) | ||||||
|  |             { | ||||||
|  |                 toRemove = toRemove.Next; | ||||||
|  |                 i++; | ||||||
|  |                 if (toRemove == null) | ||||||
|  |                     throw new IndexOutOfRangeException(); | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             toRemove.Previous.Next = toRemove.Next; | ||||||
|  |             toRemove.Next.Previous = toRemove.Previous; | ||||||
|  |             return toRemove; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         public static Permission GetAt(this Permission perm, int index) | ||||||
|  |         { | ||||||
|  |             if (index < 0) | ||||||
|  |                 throw new IndexOutOfRangeException(); | ||||||
|  |             var temp = perm; | ||||||
|  |             while (index > 0) { temp = temp?.Next; index--; } | ||||||
|  |             if (temp == null) | ||||||
|  |                 throw new IndexOutOfRangeException(); | ||||||
|  |             return temp; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         public static int Count(this Permission perm) | ||||||
|  |         { | ||||||
|  |             var i = 1; | ||||||
|  |             var temp = perm; | ||||||
|  |             while ((temp = temp.Next) != null) { i++; } | ||||||
|  |             return i; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         public static IEnumerable<Permission> AsEnumerable(this Permission perm) | ||||||
|  |         { | ||||||
|  |             do yield return perm; | ||||||
|  |             while ((perm = perm.Next) != null); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         public static Permission GetRoot(this Permission perm) | ||||||
|  |         { | ||||||
|  |             Permission toReturn; | ||||||
|  |             do toReturn = perm; | ||||||
|  |             while ((perm = perm.Previous) != null); | ||||||
|  |             return toReturn; | ||||||
|  |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -30,7 +30,7 @@ namespace NadekoBot.Modules.Permissions | |||||||
|             string toSend = ""; |             string toSend = ""; | ||||||
|             using (var uow = DbHandler.UnitOfWork()) |             using (var uow = DbHandler.UnitOfWork()) | ||||||
|             { |             { | ||||||
|                 var perms = uow.GuildConfigs.For(channel.Guild.Id).Permissions.AsEnumerable().Reverse(); |                 var perms = uow.GuildConfigs.For(channel.Guild.Id).RootPermission.AsEnumerable().Reverse(); | ||||||
|  |  | ||||||
|                 var i = 1; |                 var i = 1; | ||||||
|                 toSend = String.Join("\n", perms.Select(p => $"`{(i++)}.` {p.GetCommand()}")); |                 toSend = String.Join("\n", perms.Select(p => $"`{(i++)}.` {p.GetCommand()}")); | ||||||
| @@ -52,10 +52,8 @@ namespace NadekoBot.Modules.Permissions | |||||||
|                 Permission p; |                 Permission p; | ||||||
|                 using (var uow = DbHandler.UnitOfWork()) |                 using (var uow = DbHandler.UnitOfWork()) | ||||||
|                 { |                 { | ||||||
|                     var perms = uow.GuildConfigs.For(channel.Guild.Id).Permissions.AsEnumerable().ToList(); |                     var perms = uow.GuildConfigs.For(channel.Guild.Id).RootPermission; | ||||||
|                     p = perms[perms.Count - index]; |                     p = perms.RemoveAt(perms.Count() - index); | ||||||
|                     perms.RemoveAt(perms.Count - index); |  | ||||||
|                     uow.GuildConfigs.For(channel.Guild.Id).Permissions = perms; |  | ||||||
|                     await uow.CompleteAsync().ConfigureAwait(false); |                     await uow.CompleteAsync().ConfigureAwait(false); | ||||||
|                 } |                 } | ||||||
|                 await channel.SendMessageAsync($"`Removed permission \"{p.GetCommand()}\" from position #{index}.`").ConfigureAwait(false); |                 await channel.SendMessageAsync($"`Removed permission \"{p.GetCommand()}\" from position #{index}.`").ConfigureAwait(false); | ||||||
| @@ -78,13 +76,13 @@ namespace NadekoBot.Modules.Permissions | |||||||
|                     Permission toInsert; |                     Permission toInsert; | ||||||
|                     using (var uow = DbHandler.UnitOfWork()) |                     using (var uow = DbHandler.UnitOfWork()) | ||||||
|                     { |                     { | ||||||
|                         var perms = uow.GuildConfigs.For(channel.Guild.Id).Permissions.AsEnumerable().ToList(); |                         var perms = uow.GuildConfigs.For(channel.Guild.Id).RootPermission; | ||||||
|                         toInsert = perms[perms.Count - from]; |                         var count = perms.Count(); | ||||||
|                         perms.RemoveAt(perms.Count - from); |                         toInsert = perms.RemoveAt(count - from); | ||||||
|                         uow.GuildConfigs.For(channel.Guild.Id).Permissions = perms; |  | ||||||
|                         if (from < to) |                         if (from < to) | ||||||
|                             to -= 1; |                             to -= 1; | ||||||
|                         perms.Insert(perms.Count - to, toInsert); |                         perms.Insert(count - to, toInsert); | ||||||
|  |                         uow.GuildConfigs.For(channel.Guild.Id).RootPermission = perms; | ||||||
|                         await uow.CompleteAsync().ConfigureAwait(false); |                         await uow.CompleteAsync().ConfigureAwait(false); | ||||||
|                     } |                     } | ||||||
|                     await channel.SendMessageAsync($"`Moved permission \"{toInsert.GetCommand()}\" from #{from} to #{to}.`").ConfigureAwait(false); |                     await channel.SendMessageAsync($"`Moved permission \"{toInsert.GetCommand()}\" from #{from} to #{to}.`").ConfigureAwait(false); | ||||||
| @@ -105,7 +103,7 @@ namespace NadekoBot.Modules.Permissions | |||||||
|  |  | ||||||
|             using (var uow = DbHandler.UnitOfWork()) |             using (var uow = DbHandler.UnitOfWork()) | ||||||
|             { |             { | ||||||
|                 uow.GuildConfigs.For(channel.Guild.Id).Permissions.Add(new Permission |                 uow.GuildConfigs.For(channel.Guild.Id).RootPermission.Add(new Permission | ||||||
|                 { |                 { | ||||||
|                     PrimaryTarget = PrimaryPermissionType.User, |                     PrimaryTarget = PrimaryPermissionType.User, | ||||||
|                     PrimaryTargetId = user.Id, |                     PrimaryTargetId = user.Id, | ||||||
| @@ -126,7 +124,7 @@ namespace NadekoBot.Modules.Permissions | |||||||
|  |  | ||||||
|             using (var uow = DbHandler.UnitOfWork()) |             using (var uow = DbHandler.UnitOfWork()) | ||||||
|             { |             { | ||||||
|                 uow.GuildConfigs.For(channel.Guild.Id).Permissions.Add(new Permission |                 uow.GuildConfigs.For(channel.Guild.Id).RootPermission.Add(new Permission | ||||||
|                 { |                 { | ||||||
|                     PrimaryTarget = PrimaryPermissionType.User, |                     PrimaryTarget = PrimaryPermissionType.User, | ||||||
|                     PrimaryTargetId = user.Id, |                     PrimaryTargetId = user.Id, | ||||||
| @@ -147,7 +145,7 @@ namespace NadekoBot.Modules.Permissions | |||||||
|  |  | ||||||
|             using (var uow = DbHandler.UnitOfWork()) |             using (var uow = DbHandler.UnitOfWork()) | ||||||
|             { |             { | ||||||
|                 uow.GuildConfigs.For(channel.Guild.Id).Permissions.Add(new Permission |                 uow.GuildConfigs.For(channel.Guild.Id).RootPermission.Add(new Permission | ||||||
|                 { |                 { | ||||||
|                     PrimaryTarget = PrimaryPermissionType.Role, |                     PrimaryTarget = PrimaryPermissionType.Role, | ||||||
|                     PrimaryTargetId = role.Id, |                     PrimaryTargetId = role.Id, | ||||||
| @@ -168,7 +166,7 @@ namespace NadekoBot.Modules.Permissions | |||||||
|  |  | ||||||
|             using (var uow = DbHandler.UnitOfWork()) |             using (var uow = DbHandler.UnitOfWork()) | ||||||
|             { |             { | ||||||
|                 uow.GuildConfigs.For(channel.Guild.Id).Permissions.Add(new Permission |                 uow.GuildConfigs.For(channel.Guild.Id).RootPermission.Add(new Permission | ||||||
|                 { |                 { | ||||||
|                     PrimaryTarget = PrimaryPermissionType.Role, |                     PrimaryTarget = PrimaryPermissionType.Role, | ||||||
|                     PrimaryTargetId = role.Id, |                     PrimaryTargetId = role.Id, | ||||||
| @@ -189,7 +187,7 @@ namespace NadekoBot.Modules.Permissions | |||||||
|  |  | ||||||
|             using (var uow = DbHandler.UnitOfWork()) |             using (var uow = DbHandler.UnitOfWork()) | ||||||
|             { |             { | ||||||
|                 uow.GuildConfigs.For(channel.Guild.Id).Permissions.Add(new Permission |                 uow.GuildConfigs.For(channel.Guild.Id).RootPermission.Add(new Permission | ||||||
|                 { |                 { | ||||||
|                     PrimaryTarget = PrimaryPermissionType.Channel, |                     PrimaryTarget = PrimaryPermissionType.Channel, | ||||||
|                     PrimaryTargetId = chnl.Id, |                     PrimaryTargetId = chnl.Id, | ||||||
| @@ -210,7 +208,7 @@ namespace NadekoBot.Modules.Permissions | |||||||
|  |  | ||||||
|             using (var uow = DbHandler.UnitOfWork()) |             using (var uow = DbHandler.UnitOfWork()) | ||||||
|             { |             { | ||||||
|                 uow.GuildConfigs.For(channel.Guild.Id).Permissions.Add(new Permission |                 uow.GuildConfigs.For(channel.Guild.Id).RootPermission.Add(new Permission | ||||||
|                 { |                 { | ||||||
|                     PrimaryTarget = PrimaryPermissionType.Channel, |                     PrimaryTarget = PrimaryPermissionType.Channel, | ||||||
|                     PrimaryTargetId = chnl.Id, |                     PrimaryTargetId = chnl.Id, | ||||||
| @@ -231,7 +229,7 @@ namespace NadekoBot.Modules.Permissions | |||||||
|  |  | ||||||
|             using (var uow = DbHandler.UnitOfWork()) |             using (var uow = DbHandler.UnitOfWork()) | ||||||
|             { |             { | ||||||
|                 uow.GuildConfigs.For(channel.Guild.Id).Permissions.Add(new Permission |                 uow.GuildConfigs.For(channel.Guild.Id).RootPermission.Add(new Permission | ||||||
|                 { |                 { | ||||||
|                     PrimaryTarget = PrimaryPermissionType.Channel, |                     PrimaryTarget = PrimaryPermissionType.Channel, | ||||||
|                     PrimaryTargetId = chnl.Id, |                     PrimaryTargetId = chnl.Id, | ||||||
| @@ -252,7 +250,7 @@ namespace NadekoBot.Modules.Permissions | |||||||
|  |  | ||||||
|             using (var uow = DbHandler.UnitOfWork()) |             using (var uow = DbHandler.UnitOfWork()) | ||||||
|             { |             { | ||||||
|                 uow.GuildConfigs.For(channel.Guild.Id).Permissions.Add(new Permission |                 uow.GuildConfigs.For(channel.Guild.Id).RootPermission.Add(new Permission | ||||||
|                 { |                 { | ||||||
|                     PrimaryTarget = PrimaryPermissionType.Role, |                     PrimaryTarget = PrimaryPermissionType.Role, | ||||||
|                     PrimaryTargetId = role.Id, |                     PrimaryTargetId = role.Id, | ||||||
| @@ -273,7 +271,7 @@ namespace NadekoBot.Modules.Permissions | |||||||
|  |  | ||||||
|             using (var uow = DbHandler.UnitOfWork()) |             using (var uow = DbHandler.UnitOfWork()) | ||||||
|             { |             { | ||||||
|                 uow.GuildConfigs.For(channel.Guild.Id).Permissions.Add(new Permission |                 uow.GuildConfigs.For(channel.Guild.Id).RootPermission.Add(new Permission | ||||||
|                 { |                 { | ||||||
|                     PrimaryTarget = PrimaryPermissionType.User, |                     PrimaryTarget = PrimaryPermissionType.User, | ||||||
|                     PrimaryTargetId = user.Id, |                     PrimaryTargetId = user.Id, | ||||||
| @@ -294,7 +292,7 @@ namespace NadekoBot.Modules.Permissions | |||||||
|  |  | ||||||
|             using (var uow = DbHandler.UnitOfWork()) |             using (var uow = DbHandler.UnitOfWork()) | ||||||
|             { |             { | ||||||
|                 uow.GuildConfigs.For(channel.Guild.Id).Permissions.Add(new Permission |                 uow.GuildConfigs.For(channel.Guild.Id).RootPermission.Add(new Permission | ||||||
|                 { |                 { | ||||||
|                     PrimaryTarget = PrimaryPermissionType.Channel, |                     PrimaryTarget = PrimaryPermissionType.Channel, | ||||||
|                     PrimaryTargetId = chnl.Id, |                     PrimaryTargetId = chnl.Id, | ||||||
| @@ -315,7 +313,7 @@ namespace NadekoBot.Modules.Permissions | |||||||
|  |  | ||||||
|             using (var uow = DbHandler.UnitOfWork()) |             using (var uow = DbHandler.UnitOfWork()) | ||||||
|             { |             { | ||||||
|                 uow.GuildConfigs.For(channel.Guild.Id).Permissions.Add(new Permission |                 uow.GuildConfigs.For(channel.Guild.Id).RootPermission.Add(new Permission | ||||||
|                 { |                 { | ||||||
|                     PrimaryTarget = PrimaryPermissionType.Role, |                     PrimaryTarget = PrimaryPermissionType.Role, | ||||||
|                     PrimaryTargetId = role.Id, |                     PrimaryTargetId = role.Id, | ||||||
| @@ -336,7 +334,7 @@ namespace NadekoBot.Modules.Permissions | |||||||
|  |  | ||||||
|             using (var uow = DbHandler.UnitOfWork()) |             using (var uow = DbHandler.UnitOfWork()) | ||||||
|             { |             { | ||||||
|                 uow.GuildConfigs.For(channel.Guild.Id).Permissions.Add(new Permission |                 uow.GuildConfigs.For(channel.Guild.Id).RootPermission.Add(new Permission | ||||||
|                 { |                 { | ||||||
|                     PrimaryTarget = PrimaryPermissionType.User, |                     PrimaryTarget = PrimaryPermissionType.User, | ||||||
|                     PrimaryTargetId = user.Id, |                     PrimaryTargetId = user.Id, | ||||||
|   | |||||||
| @@ -127,17 +127,17 @@ namespace NadekoBot.Services | |||||||
|                     } |                     } | ||||||
|                 } |                 } | ||||||
|                 var cmd = commands[i]; |                 var cmd = commands[i]; | ||||||
|                 List<Permission> perms; |                 Permission rootPerm; | ||||||
|                 //check permissions |                 //check permissions | ||||||
|                 if (guild != null) |                 if (guild != null) | ||||||
|                 { |                 { | ||||||
|                     using (var uow = DbHandler.UnitOfWork()) |                     using (var uow = DbHandler.UnitOfWork()) | ||||||
|                     { |                     { | ||||||
|                         perms = uow.GuildConfigs.For(guild.Id).Permissions; |                         rootPerm = uow.GuildConfigs.For(guild.Id).RootPermission; | ||||||
|                     } |                     } | ||||||
|                     int index; |                     int index; | ||||||
|                     if (!perms.CheckPermissions(message, cmd, out index)) |                     if (!rootPerm.AsEnumerable().CheckPermissions(message, cmd, out index)) | ||||||
|                         return new Tuple<Command, IResult>(null, SearchResult.FromError(CommandError.Exception, $"Permission error. Permission number {index} (`{(index != -1 ? perms[perms.Count - index].GetCommand() : "default")}`)")); |                         return new Tuple<Command, IResult>(null, SearchResult.FromError(CommandError.Exception, $"Permission error. Permission number {index} (`{(index != -1 ? rootPerm.GetAt(rootPerm.Count() - index).GetCommand() : "default")}`)")); | ||||||
|                 } |                 } | ||||||
|  |  | ||||||
|                 return new Tuple<Command, IResult>(commands[i], await commands[i].Execute(message, parseResult)); |                 return new Tuple<Command, IResult>(commands[i], await commands[i].Execute(message, parseResult)); | ||||||
|   | |||||||
| @@ -43,6 +43,14 @@ namespace NadekoBot.Services.Database.Models | |||||||
|         public ulong? GenerateCurrencyChannelId { get; set; } |         public ulong? GenerateCurrencyChannelId { get; set; } | ||||||
|  |  | ||||||
|         //permissions |         //permissions | ||||||
|         public List<Permission> Permissions { get; set; } = new List<Permission>(); |         public Permission RootPermission { get; set; } = new Permission() | ||||||
|  |         { | ||||||
|  |             Next = null, | ||||||
|  |             Previous = null, | ||||||
|  |             PrimaryTarget = PrimaryPermissionType.Role, | ||||||
|  |             PrimaryTargetId = 0, | ||||||
|  |             SecondaryTarget = SecondaryPermissionType.AllModules, | ||||||
|  |             SecondaryTargetName = "*", | ||||||
|  |         }; | ||||||
|     } |     } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -8,6 +8,9 @@ namespace NadekoBot.Services.Database.Models | |||||||
| { | { | ||||||
|     public class Permission : DbEntity |     public class Permission : DbEntity | ||||||
|     { |     { | ||||||
|  |         public Permission Previous { get; set; } = null; | ||||||
|  |         public Permission Next { get; set; } = null; | ||||||
|  |  | ||||||
|         public PrimaryPermissionType PrimaryTarget { get; set; } |         public PrimaryPermissionType PrimaryTarget { get; set; } | ||||||
|         public ulong PrimaryTargetId { get; set; } |         public ulong PrimaryTargetId { get; set; } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -181,6 +181,13 @@ namespace NadekoBot.Services.Database | |||||||
|                 .IsUnique(); |                 .IsUnique(); | ||||||
|             #endregion |             #endregion | ||||||
|  |  | ||||||
|  |             #region Permission | ||||||
|  |             var permissionEntity = modelBuilder.Entity<Permission>(); | ||||||
|  |             permissionEntity | ||||||
|  |                 .HasOne(p => p.Next) | ||||||
|  |                 .WithOne(p => p.Previous); | ||||||
|  |             #endregion | ||||||
|  |  | ||||||
|             #region LogSettings |             #region LogSettings | ||||||
|  |  | ||||||
|             //var logSettingEntity = modelBuilder.Entity<LogSetting>(); |             //var logSettingEntity = modelBuilder.Entity<LogSetting>(); | ||||||
|   | |||||||
| @@ -29,7 +29,7 @@ namespace NadekoBot.Services.Database.Repositories.Impl | |||||||
|         public GuildConfig For(ulong guildId) |         public GuildConfig For(ulong guildId) | ||||||
|         { |         { | ||||||
|             var config = _set.Include(gc => gc.FollowedStreams) |             var config = _set.Include(gc => gc.FollowedStreams) | ||||||
|                              .Include(gc => gc.Permissions) |                              .Include(gc => gc.RootPermission) | ||||||
|                              .Include(gc => gc.LogSetting) |                              .Include(gc => gc.LogSetting) | ||||||
|                                 .ThenInclude(ls=>ls.IgnoredChannels) |                                 .ThenInclude(ls=>ls.IgnoredChannels) | ||||||
|                              .FirstOrDefault(c => c.GuildId == guildId); |                              .FirstOrDefault(c => c.GuildId == guildId); | ||||||
|   | |||||||
| @@ -10,7 +10,7 @@ namespace NadekoBot.Services.Database | |||||||
| { | { | ||||||
|     public class UnitOfWork : IUnitOfWork |     public class UnitOfWork : IUnitOfWork | ||||||
|     { |     { | ||||||
|         private NadekoContext _context; |         public NadekoContext _context; | ||||||
|  |  | ||||||
|         private IQuoteRepository _quotes; |         private IQuoteRepository _quotes; | ||||||
|         public IQuoteRepository Quotes => _quotes ?? (_quotes = new QuoteRepository(_context)); |         public IQuoteRepository Quotes => _quotes ?? (_quotes = new QuoteRepository(_context)); | ||||||
|   | |||||||
							
								
								
									
										111
									
								
								src/tests/Tests.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										111
									
								
								src/tests/Tests.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,111 @@ | |||||||
|  | using NadekoBot.Modules.Permissions; | ||||||
|  | using NadekoBot.Services.Database.Models; | ||||||
|  | using System; | ||||||
|  | using System.Collections.Generic; | ||||||
|  | using System.Linq; | ||||||
|  | using Xunit; | ||||||
|  |  | ||||||
|  | namespace Tests | ||||||
|  | { | ||||||
|  |     public class Tests | ||||||
|  |     { | ||||||
|  |  | ||||||
|  |         private Permission GetRoot() | ||||||
|  |         { | ||||||
|  |             Permission root = new Permission(); | ||||||
|  |             root.SecondaryTargetName = "Root"; | ||||||
|  |             var cur = root; | ||||||
|  |             for (var i = 1; i < 10; i++) | ||||||
|  |             { | ||||||
|  |                 var p = new Permission(); | ||||||
|  |                 p.SecondaryTargetName = i.ToString(); | ||||||
|  |                 p.Previous = cur; | ||||||
|  |                 cur.Next = p; | ||||||
|  |                 cur = p; | ||||||
|  |             } | ||||||
|  |             return root; | ||||||
|  |         } | ||||||
|  |         [Fact] | ||||||
|  |         public void CountTest()  | ||||||
|  |         { | ||||||
|  |             var root = GetRoot(); | ||||||
|  |  | ||||||
|  |             Assert.Equal(10, root.Count()); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         [Fact] | ||||||
|  |         public void AddTest() | ||||||
|  |         { | ||||||
|  |             var root = GetRoot(); | ||||||
|  |  | ||||||
|  |             root.Add(new Permission() { SecondaryTargetName = "Added" }); | ||||||
|  |  | ||||||
|  |             Assert.Equal(11, root.Count()); | ||||||
|  |  | ||||||
|  |             Assert.Equal("Added", root.AsEnumerable().Last().SecondaryTargetName); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         [Fact] | ||||||
|  |         public void GetAtTest() | ||||||
|  |         { | ||||||
|  |             var root = GetRoot(); | ||||||
|  |             Assert.Equal("Root", root.GetAt(0).SecondaryTargetName); | ||||||
|  |             Assert.Equal("1", root.GetAt(1).SecondaryTargetName); | ||||||
|  |             Assert.Equal("5", root.GetAt(5).SecondaryTargetName); | ||||||
|  |             Assert.Equal("9", root.GetAt(9).SecondaryTargetName); | ||||||
|  |  | ||||||
|  |             Assert.Throws(typeof(IndexOutOfRangeException), () => { root.GetAt(-5); }); | ||||||
|  |             Assert.Throws(typeof(IndexOutOfRangeException), () => { root.GetAt(10); }); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         [Fact] | ||||||
|  |         public void InsertTest() { | ||||||
|  |  | ||||||
|  |             var root = GetRoot(); | ||||||
|  |  | ||||||
|  |             root.Insert(5, new Permission() { SecondaryTargetName = "in2" }); | ||||||
|  |  | ||||||
|  |             Assert.Equal(11, root.Count()); | ||||||
|  |             Assert.Equal("in2", root.GetAt(5).SecondaryTargetName); | ||||||
|  |  | ||||||
|  |             root.Insert(0, new Permission() { SecondaryTargetName = "Inserted" }); | ||||||
|  |  | ||||||
|  |             root = root.Previous; | ||||||
|  |             Assert.Equal("Inserted", root.SecondaryTargetName); | ||||||
|  |             Assert.Equal(12, root.Count()); | ||||||
|  |             Assert.Equal("Root", root.GetAt(1).SecondaryTargetName); | ||||||
|  |  | ||||||
|  |             Assert.Throws(typeof(IndexOutOfRangeException), () => { root.GetAt(12); }); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         [Fact] | ||||||
|  |         public void RemoveAtTest() | ||||||
|  |         { | ||||||
|  |             var root = GetRoot(); | ||||||
|  |  | ||||||
|  |             var removed = root.RemoveAt(3); | ||||||
|  |  | ||||||
|  |             Assert.Equal("3", removed.SecondaryTargetName); | ||||||
|  |             Assert.Equal(9, root.Count()); | ||||||
|  |  | ||||||
|  |             var temp = root.Next; | ||||||
|  |             removed = root.RemoveAt(0); | ||||||
|  |              | ||||||
|  |             Assert.Equal(8, temp.Count()); | ||||||
|  |             Assert.Equal(null, temp.Previous); | ||||||
|  |  | ||||||
|  |             Assert.Throws(typeof(IndexOutOfRangeException), () => { temp.RemoveAt(8); }); | ||||||
|  |             Assert.Throws(typeof(IndexOutOfRangeException), () => { temp.RemoveAt(-1); }); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         [Fact] | ||||||
|  |         public void TestGetRoot() | ||||||
|  |         { | ||||||
|  |             var root = GetRoot(); | ||||||
|  |  | ||||||
|  |             var random = root.GetAt(5).GetRoot(); | ||||||
|  |  | ||||||
|  |             Assert.Equal("Root", random.SecondaryTargetName); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										
											BIN
										
									
								
								src/tests/bin/Debug/netcoreapp1.0/Discord.Net.Commands.dll
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								src/tests/bin/Debug/netcoreapp1.0/Discord.Net.Commands.dll
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								src/tests/bin/Debug/netcoreapp1.0/Discord.Net.Commands.pdb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								src/tests/bin/Debug/netcoreapp1.0/Discord.Net.Commands.pdb
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										26
									
								
								src/tests/bin/Debug/netcoreapp1.0/Discord.Net.Commands.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								src/tests/bin/Debug/netcoreapp1.0/Discord.Net.Commands.xml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,26 @@ | |||||||
|  | <?xml version="1.0"?> | ||||||
|  | <doc> | ||||||
|  |     <assembly> | ||||||
|  |         <name>Discord.Net.Commands</name> | ||||||
|  |     </assembly> | ||||||
|  |     <members> | ||||||
|  |         <member name="T:Discord.Commands.AliasAttribute"> | ||||||
|  |             <summary> Provides aliases for a command. </summary> | ||||||
|  |         </member> | ||||||
|  |         <member name="P:Discord.Commands.AliasAttribute.Aliases"> | ||||||
|  |             <summary> The aliases which have been defined for the command. </summary> | ||||||
|  |         </member> | ||||||
|  |         <member name="M:Discord.Commands.AliasAttribute.#ctor(System.String[])"> | ||||||
|  |             <summary> Creates a new <see cref="T:Discord.Commands.AliasAttribute"/> with the given aliases. </summary> | ||||||
|  |         </member> | ||||||
|  |         <member name="T:Discord.Commands.PriorityAttribute"> | ||||||
|  |             <summary> Sets priority of commands </summary> | ||||||
|  |         </member> | ||||||
|  |         <member name="P:Discord.Commands.PriorityAttribute.Priority"> | ||||||
|  |             <summary> The priority which has been set for the command </summary> | ||||||
|  |         </member> | ||||||
|  |         <member name="M:Discord.Commands.PriorityAttribute.#ctor(System.Int32)"> | ||||||
|  |             <summary> Creates a new <see cref="T:Discord.Commands.PriorityAttribute"/> with the given priority. </summary> | ||||||
|  |         </member> | ||||||
|  |     </members> | ||||||
|  | </doc> | ||||||
							
								
								
									
										
											BIN
										
									
								
								src/tests/bin/Debug/netcoreapp1.0/Discord.Net.dll
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								src/tests/bin/Debug/netcoreapp1.0/Discord.Net.dll
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								src/tests/bin/Debug/netcoreapp1.0/Discord.Net.pdb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								src/tests/bin/Debug/netcoreapp1.0/Discord.Net.pdb
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										1129
									
								
								src/tests/bin/Debug/netcoreapp1.0/Discord.Net.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1129
									
								
								src/tests/bin/Debug/netcoreapp1.0/Discord.Net.xml
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								src/tests/bin/Debug/netcoreapp1.0/NadekoBot.dll
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								src/tests/bin/Debug/netcoreapp1.0/NadekoBot.dll
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								src/tests/bin/Debug/netcoreapp1.0/NadekoBot.pdb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								src/tests/bin/Debug/netcoreapp1.0/NadekoBot.pdb
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										1101
									
								
								src/tests/bin/Debug/netcoreapp1.0/tests.deps.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1101
									
								
								src/tests/bin/Debug/netcoreapp1.0/tests.deps.json
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								src/tests/bin/Debug/netcoreapp1.0/tests.dll
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								src/tests/bin/Debug/netcoreapp1.0/tests.dll
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								src/tests/bin/Debug/netcoreapp1.0/tests.pdb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								src/tests/bin/Debug/netcoreapp1.0/tests.pdb
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| @@ -0,0 +1,7 @@ | |||||||
|  | { | ||||||
|  |   "runtimeOptions": { | ||||||
|  |     "additionalProbingPaths": [ | ||||||
|  |       "C:\\Users\\Kwoth\\.nuget\\packages" | ||||||
|  |     ] | ||||||
|  |   } | ||||||
|  | } | ||||||
| @@ -0,0 +1,8 @@ | |||||||
|  | { | ||||||
|  |   "runtimeOptions": { | ||||||
|  |     "framework": { | ||||||
|  |       "name": "Microsoft.NETCore.App", | ||||||
|  |       "version": "1.0.0" | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										27
									
								
								src/tests/project.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								src/tests/project.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,27 @@ | |||||||
|  | { | ||||||
|  |   "version": "1.0.0-*", | ||||||
|  |   "buildOptions": { | ||||||
|  |     "debugType": "portable" | ||||||
|  |   }, | ||||||
|  |   "dependencies": { | ||||||
|  |     "System.Runtime.Serialization.Primitives": "4.1.1", | ||||||
|  |     "xunit": "2.1.0", | ||||||
|  |     "dotnet-test-xunit": "1.0.0-rc2-192208-24", | ||||||
|  |     "NadekoBot": "1.0.0-*" | ||||||
|  |   }, | ||||||
|  |   "testRunner": "xunit", | ||||||
|  |   "frameworks": { | ||||||
|  |     "netcoreapp1.0": { | ||||||
|  |       "dependencies": { | ||||||
|  |         "Microsoft.NETCore.App": { | ||||||
|  |           "type": "platform", | ||||||
|  |           "version": "1.0.0" | ||||||
|  |         } | ||||||
|  |       }, | ||||||
|  |       "imports": [ | ||||||
|  |         "dotnet5.4", | ||||||
|  |         "portable-net451+win8" | ||||||
|  |       ] | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										9841
									
								
								src/tests/project.lock.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9841
									
								
								src/tests/project.lock.json
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										21
									
								
								src/tests/tests.xproj
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								src/tests/tests.xproj
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,21 @@ | |||||||
|  | <?xml version="1.0" encoding="utf-8"?> | ||||||
|  | <Project ToolsVersion="14.0.25420" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||||||
|  |   <PropertyGroup> | ||||||
|  |     <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">14.0.25420</VisualStudioVersion> | ||||||
|  |     <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath> | ||||||
|  |   </PropertyGroup> | ||||||
|  |   <Import Project="$(VSToolsPath)\DotNet\Microsoft.DotNet.Props" Condition="'$(VSToolsPath)' != ''" /> | ||||||
|  |   <PropertyGroup Label="Globals"> | ||||||
|  |     <ProjectGuid>14cbada0-971c-44e3-b331-c7d01dd74f0b</ProjectGuid> | ||||||
|  |     <RootNamespace>tests</RootNamespace> | ||||||
|  |     <BaseIntermediateOutputPath Condition="'$(BaseIntermediateOutputPath)'=='' ">.\obj</BaseIntermediateOutputPath> | ||||||
|  |     <OutputPath Condition="'$(OutputPath)'=='' ">.\bin\</OutputPath> | ||||||
|  |   </PropertyGroup> | ||||||
|  |   <PropertyGroup> | ||||||
|  |     <SchemaVersion>2.0</SchemaVersion> | ||||||
|  |   </PropertyGroup> | ||||||
|  |   <ItemGroup> | ||||||
|  |     <Service Include="{82a7f48d-3b50-4b1e-b82e-3ada8210c358}" /> | ||||||
|  |   </ItemGroup> | ||||||
|  |   <Import Project="$(VSToolsPath)\DotNet\Microsoft.DotNet.targets" Condition="'$(VSToolsPath)' != ''" /> | ||||||
|  | </Project> | ||||||
		Reference in New Issue
	
	Block a user