diff --git a/src/Modix.Bot/Modules/TagModule.cs b/src/Modix.Bot/Modules/TagModule.cs index d701d83bd..f44f3616b 100644 --- a/src/Modix.Bot/Modules/TagModule.cs +++ b/src/Modix.Bot/Modules/TagModule.cs @@ -61,6 +61,8 @@ public async Task ModifyTagAsync( { name = name.Trim().ToLower(); + await _tagService.EnsureUserCanMaintainTagAsync(Context.Guild.Id, name, Context.User.Id); + var currentTagData = await _tagService.GetTagAsync(Context.Guild.Id, name); if (currentTagData is null) diff --git a/src/Modix.Services/Tags/TagService.cs b/src/Modix.Services/Tags/TagService.cs index 331786c40..eb58a81fb 100644 --- a/src/Modix.Services/Tags/TagService.cs +++ b/src/Modix.Services/Tags/TagService.cs @@ -42,6 +42,8 @@ public interface ITagService Task TagExistsAsync(ulong guildId, string name); Task RefreshCache(ulong guildId); + + Task EnsureUserCanMaintainTagAsync(ulong guildId, string name, ulong currentUserId); } internal class TagService : ITagService @@ -340,6 +342,20 @@ public async Task RefreshCache(ulong guildId) _tagCache.Set(guildId, tags); } + public async Task EnsureUserCanMaintainTagAsync(ulong guildId, string name, ulong currentUserId) + { + var tag = await _modixContext + .Set() + .Include(x => x.OwnerRole) + .Include(x => x.OwnerUser) + .Where(x => x.GuildId == guildId) + .Where(x => x.DeleteActionId == null) + .Where(x => x.Name == name) + .SingleOrDefaultAsync(); + + await EnsureUserCanMaintainTagAsync(tag, currentUserId); + } + private async Task EnsureUserCanMaintainTagAsync(TagEntity tag, ulong currentUserId) { var currentUser = await _userService.GetGuildUserAsync(tag.GuildId, currentUserId);