mirror of
https://gitlab.com/Kwoth/nadekobot.git
synced 2025-09-10 09:18:27 -04: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:
@@ -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
|
||||
|
||||
|
@@ -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