.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:
Kwoth
2021-12-09 01:48:39 +01:00
parent 9f219cddbb
commit b7ead22e09
5 changed files with 97 additions and 9 deletions

View File

@@ -4,6 +4,9 @@ Experimental changelog. Mostly based on [keepachangelog](https://keepachangelog.
## Unreleased
### Added
- `.remindl` and `.remindrm` commands now supports optional 'server' parameter for Administrators which allows them to delete any reminder created on the server
### Fixed
- `.crypto` now supports top 5000 coins

View File

@@ -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);
}
}

View File

@@ -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)

View File

@@ -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:

View File

@@ -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.",