.rlr - Set a level requirement on a self-assignable role
This commit is contained in:
		
							
								
								
									
										1994
									
								
								NadekoBot.Core/Migrations/20171107131810_sar-level-req.Designer.cs
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										1994
									
								
								NadekoBot.Core/Migrations/20171107131810_sar-level-req.Designer.cs
									
									
									
										generated
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										26
									
								
								NadekoBot.Core/Migrations/20171107131810_sar-level-req.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								NadekoBot.Core/Migrations/20171107131810_sar-level-req.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,26 @@ | |||||||
|  | using Microsoft.EntityFrameworkCore.Migrations; | ||||||
|  | using System; | ||||||
|  | using System.Collections.Generic; | ||||||
|  |  | ||||||
|  | namespace NadekoBot.Migrations | ||||||
|  | { | ||||||
|  |     public partial class sarlevelreq : Migration | ||||||
|  |     { | ||||||
|  |         protected override void Up(MigrationBuilder migrationBuilder) | ||||||
|  |         { | ||||||
|  |             migrationBuilder.AddColumn<int>( | ||||||
|  |                 name: "LevelRequirement", | ||||||
|  |                 table: "SelfAssignableRoles", | ||||||
|  |                 type: "INTEGER", | ||||||
|  |                 nullable: false, | ||||||
|  |                 defaultValue: 0); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         protected override void Down(MigrationBuilder migrationBuilder) | ||||||
|  |         { | ||||||
|  |             migrationBuilder.DropColumn( | ||||||
|  |                 name: "LevelRequirement", | ||||||
|  |                 table: "SelfAssignableRoles"); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -1149,6 +1149,8 @@ namespace NadekoBot.Migrations | |||||||
|  |  | ||||||
|                     b.Property<ulong>("GuildId"); |                     b.Property<ulong>("GuildId"); | ||||||
|  |  | ||||||
|  |                     b.Property<int>("LevelRequirement"); | ||||||
|  |  | ||||||
|                     b.Property<ulong>("RoleId"); |                     b.Property<ulong>("RoleId"); | ||||||
|  |  | ||||||
|                     b.HasKey("Id"); |                     b.HasKey("Id"); | ||||||
|   | |||||||
| @@ -10,6 +10,8 @@ using System.Text; | |||||||
| using System.Threading.Tasks; | using System.Threading.Tasks; | ||||||
| using NadekoBot.Common.Attributes; | using NadekoBot.Common.Attributes; | ||||||
| using NadekoBot.Common.Collections; | using NadekoBot.Common.Collections; | ||||||
|  | using Microsoft.EntityFrameworkCore; | ||||||
|  | using NadekoBot.Modules.Xp.Common; | ||||||
|  |  | ||||||
| namespace NadekoBot.Modules.Administration | namespace NadekoBot.Modules.Administration | ||||||
| { | { | ||||||
| @@ -147,7 +149,10 @@ namespace NadekoBot.Modules.Administration | |||||||
|                             } |                             } | ||||||
|                             else |                             else | ||||||
|                             { |                             { | ||||||
|  |                                 if (roleModel.LevelRequirement == 0) | ||||||
|                                     rolesStr.AppendLine(Format.Bold(role.Name)); |                                     rolesStr.AppendLine(Format.Bold(role.Name)); | ||||||
|  |                                 else | ||||||
|  |                                     rolesStr.AppendLine(Format.Bold(role.Name) + $" (lvl {roleModel.LevelRequirement}+)"); | ||||||
|                                 roleCnt++; |                                 roleCnt++; | ||||||
|                             } |                             } | ||||||
|                         } |                         } | ||||||
| @@ -188,6 +193,42 @@ namespace NadekoBot.Modules.Administration | |||||||
|                     await ReplyConfirmLocalized("self_assign_no_excl").ConfigureAwait(false); |                     await ReplyConfirmLocalized("self_assign_no_excl").ConfigureAwait(false); | ||||||
|             } |             } | ||||||
|  |  | ||||||
|  |             [NadekoCommand, Usage, Description, Aliases] | ||||||
|  |             [RequireContext(ContextType.Guild)] | ||||||
|  |             [RequireUserPermission(GuildPermission.ManageRoles)] | ||||||
|  |             public async Task RoleLevelReq(int level, [Remainder] IRole role) | ||||||
|  |             { | ||||||
|  |                 if (level < 0) | ||||||
|  |                     return; | ||||||
|  |  | ||||||
|  |                 bool notExists = false; | ||||||
|  |                 using (var uow = _db.UnitOfWork) | ||||||
|  |                 { | ||||||
|  |                     //todo add firacode font to visual studio | ||||||
|  |                     var roles = uow.SelfAssignedRoles.GetFromGuild(Context.Guild.Id); | ||||||
|  |                     var sar = roles.SelectMany(x => x).FirstOrDefault(x => x.RoleId == role.Id); | ||||||
|  |                     if (sar != null) | ||||||
|  |                     { | ||||||
|  |                         sar.LevelRequirement = level; | ||||||
|  |                         uow.Complete(); | ||||||
|  |                     } | ||||||
|  |                     else | ||||||
|  |                     { | ||||||
|  |                         notExists = true; | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |  | ||||||
|  |                 if (notExists) | ||||||
|  |                 { | ||||||
|  |                     await ReplyErrorLocalized("self_assign_not").ConfigureAwait(false); | ||||||
|  |                     return; | ||||||
|  |                 } | ||||||
|  |  | ||||||
|  |                 await ReplyConfirmLocalized("self_assign_level_req",  | ||||||
|  |                     Format.Bold(role.Name),  | ||||||
|  |                     Format.Bold(level.ToString())).ConfigureAwait(false); | ||||||
|  |             } | ||||||
|  |  | ||||||
|             [NadekoCommand, Usage, Description, Aliases] |             [NadekoCommand, Usage, Description, Aliases] | ||||||
|             [RequireContext(ContextType.Guild)] |             [RequireContext(ContextType.Guild)] | ||||||
|             public async Task Iam([Remainder] IRole role) |             public async Task Iam([Remainder] IRole role) | ||||||
| @@ -196,12 +237,16 @@ namespace NadekoBot.Modules.Administration | |||||||
|  |  | ||||||
|                 GuildConfig conf; |                 GuildConfig conf; | ||||||
|                 SelfAssignedRole[] roles; |                 SelfAssignedRole[] roles; | ||||||
|  |                 LevelStats userLevelData; | ||||||
|                 using (var uow = _db.UnitOfWork) |                 using (var uow = _db.UnitOfWork) | ||||||
|                 { |                 { | ||||||
|                     conf = uow.GuildConfigs.For(Context.Guild.Id, set => set); |                     conf = uow.GuildConfigs.For(Context.Guild.Id, set => set); | ||||||
|                     roles = uow.SelfAssignedRoles.GetFromGuild(Context.Guild.Id) |                     roles = uow.SelfAssignedRoles.GetFromGuild(Context.Guild.Id) | ||||||
|                         .SelectMany(x => x) |                         .SelectMany(x => x) | ||||||
|                         .ToArray(); |                         .ToArray(); | ||||||
|  |  | ||||||
|  |                     var stats = uow.Xp.GetOrCreateUser(Context.Guild.Id, Context.User.Id); | ||||||
|  |                     userLevelData = new LevelStats(stats.Xp + stats.AwardedXp); | ||||||
|                 } |                 } | ||||||
|                 var theRoleYouWant = roles.FirstOrDefault(r => r.RoleId == role.Id); |                 var theRoleYouWant = roles.FirstOrDefault(r => r.RoleId == role.Id); | ||||||
|                 if (theRoleYouWant == null) |                 if (theRoleYouWant == null) | ||||||
| @@ -209,6 +254,11 @@ namespace NadekoBot.Modules.Administration | |||||||
|                     await ReplyErrorLocalized("self_assign_not").ConfigureAwait(false); |                     await ReplyErrorLocalized("self_assign_not").ConfigureAwait(false); | ||||||
|                     return; |                     return; | ||||||
|                 } |                 } | ||||||
|  |                 if (theRoleYouWant.LevelRequirement > userLevelData.Level) | ||||||
|  |                 { | ||||||
|  |                     await ReplyErrorLocalized("self_assign_not_level", Format.Bold(theRoleYouWant.LevelRequirement.ToString())).ConfigureAwait(false); | ||||||
|  |                     return; | ||||||
|  |                 } | ||||||
|                 if (guildUser.RoleIds.Contains(role.Id)) |                 if (guildUser.RoleIds.Contains(role.Id)) | ||||||
|                 { |                 { | ||||||
|                     await ReplyErrorLocalized("self_assign_already", Format.Bold(role.Name)).ConfigureAwait(false); |                     await ReplyErrorLocalized("self_assign_already", Format.Bold(role.Name)).ConfigureAwait(false); | ||||||
|   | |||||||
| @@ -6,5 +6,6 @@ | |||||||
|         public ulong RoleId { get; set; } |         public ulong RoleId { get; set; } | ||||||
|          |          | ||||||
|         public int Group { get; set; } |         public int Group { get; set; } | ||||||
|  |         public int LevelRequirement { get; set; } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user