mirror of
				https://gitlab.com/Kwoth/nadekobot.git
				synced 2025-11-04 00:34:26 -05:00 
			
		
		
		
	.remindl and .remindrm commands now supports optional 'server' parameter for Administrators which allows them to delete any reminder created on the server
This commit is contained in:
		@@ -18,5 +18,12 @@ namespace NadekoBot.Db
 | 
			
		||||
                .OrderBy(x => x.DateAdded)
 | 
			
		||||
                .Skip(page * 10)
 | 
			
		||||
                .Take(10);
 | 
			
		||||
        
 | 
			
		||||
        public static IEnumerable<Reminder> RemindersForServer(this DbSet<Reminder> reminders, ulong serverId, int page)
 | 
			
		||||
            => reminders.AsQueryable()
 | 
			
		||||
                .Where(x => x.ServerId == serverId)
 | 
			
		||||
                .OrderBy(x => x.DateAdded)
 | 
			
		||||
                .Skip(page * 10)
 | 
			
		||||
                .Take(10);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -80,21 +80,50 @@ namespace NadekoBot.Modules.Utility
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            public enum Server
 | 
			
		||||
            {
 | 
			
		||||
                Server = int.MinValue,
 | 
			
		||||
                Srvr = int.MinValue,
 | 
			
		||||
                Serv = int.MinValue,
 | 
			
		||||
                S = int.MinValue, 
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            [NadekoCommand, Aliases]
 | 
			
		||||
            public async Task RemindList(int page = 1)
 | 
			
		||||
            [RequireContext(ContextType.Guild)]
 | 
			
		||||
            [RequireUserPermission(GuildPermission.Administrator)]
 | 
			
		||||
            [Priority(0)]
 | 
			
		||||
            public Task RemindList(Server _, int page = 1)
 | 
			
		||||
                => RemindList(page, true);
 | 
			
		||||
            
 | 
			
		||||
            [NadekoCommand, Aliases]
 | 
			
		||||
            [Priority(1)]
 | 
			
		||||
            public Task RemindList(int page = 1)
 | 
			
		||||
                => RemindList(page, false);
 | 
			
		||||
            
 | 
			
		||||
            private async Task RemindList(int page, bool isServer)
 | 
			
		||||
            {
 | 
			
		||||
                if (--page < 0)
 | 
			
		||||
                    return;
 | 
			
		||||
 | 
			
		||||
                var embed = _eb.Create()
 | 
			
		||||
                    .WithOkColor()
 | 
			
		||||
                    .WithTitle(GetText(strs.reminder_list));
 | 
			
		||||
                    .WithTitle(GetText(isServer ? strs.reminder_server_list : strs.reminder_list));
 | 
			
		||||
 | 
			
		||||
                List<Reminder> rems;
 | 
			
		||||
                using (var uow = _db.GetDbContext())
 | 
			
		||||
                {
 | 
			
		||||
                    rems = uow.Reminders.RemindersFor(ctx.User.Id, page)
 | 
			
		||||
                        .ToList();
 | 
			
		||||
                    if (isServer)
 | 
			
		||||
                    {
 | 
			
		||||
                        rems = uow.Reminders
 | 
			
		||||
                            .RemindersForServer(ctx.Guild.Id, page)
 | 
			
		||||
                            .ToList();
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        rems = uow.Reminders
 | 
			
		||||
                            .RemindersFor(ctx.User.Id, page)
 | 
			
		||||
                            .ToList();
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                if (rems.Any())
 | 
			
		||||
@@ -121,17 +150,63 @@ namespace NadekoBot.Modules.Utility
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            [NadekoCommand, Aliases]
 | 
			
		||||
            public async Task RemindDelete(int index)
 | 
			
		||||
            [RequireContext(ContextType.Guild)]
 | 
			
		||||
            [RequireUserPermission(GuildPermission.Administrator)]
 | 
			
		||||
            [Priority(0)]
 | 
			
		||||
            public Task RemindDelete(Server _, int index)
 | 
			
		||||
                => RemindDelete(index, true);
 | 
			
		||||
            
 | 
			
		||||
            [NadekoCommand, Aliases]
 | 
			
		||||
            [Priority(1)]
 | 
			
		||||
            public Task RemindDelete(int index)
 | 
			
		||||
                => RemindDelete(index, false);
 | 
			
		||||
            
 | 
			
		||||
            private async Task RemindDelete(int index, bool isServer)
 | 
			
		||||
            {
 | 
			
		||||
                if (--index < 0)
 | 
			
		||||
                    return;
 | 
			
		||||
 | 
			
		||||
                var embed = _eb.Create();
 | 
			
		||||
                Reminder rem = null;
 | 
			
		||||
                using (var uow = _db.GetDbContext())
 | 
			
		||||
                {
 | 
			
		||||
                    var rems = isServer
 | 
			
		||||
                        ? uow.Reminders
 | 
			
		||||
                            .RemindersForServer(ctx.Guild.Id, index / 10)
 | 
			
		||||
                            .ToList()
 | 
			
		||||
                        : uow.Reminders
 | 
			
		||||
                            .RemindersFor(ctx.User.Id, index / 10)
 | 
			
		||||
                            .ToList();
 | 
			
		||||
                    
 | 
			
		||||
                    var pageIndex = index % 10;
 | 
			
		||||
                    if (rems.Count > pageIndex)
 | 
			
		||||
                    {
 | 
			
		||||
                        rem = rems[pageIndex];
 | 
			
		||||
                        uow.Reminders.Remove(rem);
 | 
			
		||||
                        uow.SaveChanges();
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                if (rem is null)
 | 
			
		||||
                {
 | 
			
		||||
                    await ReplyErrorLocalizedAsync(strs.reminder_not_exist).ConfigureAwait(false);
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    await ReplyConfirmLocalizedAsync(strs.reminder_deleted(index + 1));
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
            [NadekoCommand, Aliases]
 | 
			
		||||
            public async Task ServerRemindDelete(int index)
 | 
			
		||||
            {
 | 
			
		||||
                if (--index < 0)
 | 
			
		||||
                    return;
 | 
			
		||||
 | 
			
		||||
                Reminder rem = null;
 | 
			
		||||
                using (var uow = _db.GetDbContext())
 | 
			
		||||
                {
 | 
			
		||||
                    var rems = uow.Reminders.RemindersFor(ctx.User.Id, index / 10)
 | 
			
		||||
                    var rems = uow.Reminders
 | 
			
		||||
                        .RemindersForServer(ctx.Guild.Id, index / 10)
 | 
			
		||||
                        .ToList();
 | 
			
		||||
                    var pageIndex = index % 10;
 | 
			
		||||
                    if (rems.Count > pageIndex)
 | 
			
		||||
 
 | 
			
		||||
@@ -406,13 +406,15 @@ remind:
 | 
			
		||||
    - "me 1d5h Do something"
 | 
			
		||||
    - "#general 1m Start now!"
 | 
			
		||||
reminddelete:
 | 
			
		||||
  desc: "Deletes a reminder on the specified index."
 | 
			
		||||
  desc: "Deletes a reminder on the specified index. You can specify 'server' option if you're an Administrator, and you want to delete a reminder on this server created by someone else. "
 | 
			
		||||
  args:
 | 
			
		||||
    - "3"
 | 
			
		||||
    - "server 2"
 | 
			
		||||
remindlist:
 | 
			
		||||
  desc: "Lists all reminders you created. Paginated."
 | 
			
		||||
  desc: "Lists all reminders you created. You can specify 'server' option if you're an Administrator to list all reminders created on this server. Paginated."
 | 
			
		||||
  args:
 | 
			
		||||
    - "1"
 | 
			
		||||
    - "server 2"
 | 
			
		||||
serverinfo:
 | 
			
		||||
  desc: "Shows info about the server the bot is on. If no server is supplied, it defaults to current one."
 | 
			
		||||
  args:
 | 
			
		||||
 
 | 
			
		||||
@@ -919,6 +919,7 @@
 | 
			
		||||
  "reaction_role_removed": "Removed ReactionRole message #{0}",
 | 
			
		||||
  "reaction_roles_full": "You've reached the limit on ReactionRole messages. You have to delete some.",
 | 
			
		||||
  "reminder_list": "List of reminders",
 | 
			
		||||
  "reminder_server_list": "List of server reminders",
 | 
			
		||||
  "reminder_deleted": "Reminder #{0} was deleted.",
 | 
			
		||||
  "reminder_not_exist": "Reminder at that index does not exist.",
 | 
			
		||||
  "reminders_none": "No reminder on this page.",
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user