public void Invoke(DiscordHandler client, CommandHandler handler, CommandEventArg args) { using DBContext c = new DBContext(); DiscordGuildConfig dgc = args.Config; if (dgc == null || dgc.MutedRoleId == 0) { args.Channel.SendMessageAsync("You need to setup your muted role first in the config"); return; } args.Parameters[0] = args.Parameters[0].Trim('<', '@', '!', '>'); DiscordMember member = null; if (ulong.TryParse(args.Parameters[0], out ulong uid)) { try { member = args.Guild.GetMemberAsync(uid).ConfigureAwait(false).GetAwaiter().GetResult(); } catch (DSharpPlus.Exceptions.NotFoundException) { } } if (member == null) { HelpCommand.ShowHelp(args.Channel, this, "Could not find member or parse id: " + args.Parameters[0]); return; } if (!long.TryParse(args.Parameters[1], out long durationM)) { HelpCommand.ShowHelp(args.Channel, this, "Failed to parse duration: " + args.Parameters[1]); return; } var drole = args.Guild.GetRole((ulong)dgc.MutedRoleId); Mute m; if (member.Roles.Contains(drole)) { //Update duration if diffrent m = c.Mute.FirstOrDefault(mu => mu.DiscordGuildId == (long)args.Guild.Id && mu.DiscordUserId == (long)uid && !mu.Unmuted); if (m != null) { if (m.DurationM == durationM) { args.Channel.SendMessageAsync("Not updated, time is the same"); return; } m.DurationM = durationM; c.Mute.Update(m); c.SaveChanges(); args.Channel.SendMessageAsync("Updated duration"); return; } else { member.RevokeRoleAsync(drole, "invalid mute, revoking").ConfigureAwait(false).GetAwaiter().GetResult(); } } if (args.Parameters.Count < 3) { HelpCommand.ShowHelp(args.Channel, this); return; } StringBuilder reasonBuilder = new StringBuilder(args.Parameters[2]); for (int i = 3; i < args.Parameters.Count; i++) { reasonBuilder.Append(" " + args.Parameters[i]); } m = new Mute((long)uid, (long)args.Guild.Id, DateTime.UtcNow, durationM, args.ParameterString.Remove(0, args.Parameters[0].Length + args.Parameters[1].Length + 2)); member.GrantRoleAsync(drole, $"muted by {args.User.Username} for {durationM} minutes, reason: {m.Reason}"); c.Mute.Add(m); c.SaveChanges(); args.Channel.SendMessageAsync($"Muted {member.Username} for {durationM} minutes, reason: {m.Reason}"); }
public void Invoke(DiscordHandler client, CommandHandler handler, CommandEventArg args) { if (args.Parameters[0].Equals("list", StringComparison.CurrentCultureIgnoreCase)) { int page = 1; if (args.Parameters.Count > 1 && int.TryParse(args.Parameters[1], out int newPage)) { page = newPage; } using DBContext c = new DBContext(); List <DiscordRoleBind> drbs = c.DiscordRoleBind.Where(drb => drb.GuildId == (long)args.Guild.Id).ToList(); if (drbs.Count == 0) { client.SendSimpleEmbed(args.Channel, "Could not find any role binds").ConfigureAwait(false); return; } StringBuilder roleIdBuilder = new StringBuilder(); StringBuilder accessBuilder = new StringBuilder(); for (int i = 0; i < drbs.Count; i++) { roleIdBuilder.AppendLine(((ulong)drbs[i].RoleId).ToString(CultureInfo.CurrentCulture)); accessBuilder.AppendLine(drbs[i].AccessLevel.ToString(CultureInfo.CurrentCulture)); } EmbedPageBuilder epb = new EmbedPageBuilder(2); epb.AddColumn("RoleId", roleIdBuilder.ToString()); epb.AddColumn("Access Level", accessBuilder.ToString()); args.Channel.SendMessageAsync(embed: epb.BuildPage(page)); return; } else if (args.Parameters.Count < 2) { HelpCommand.ShowHelp(args.Channel, this, ResourceExceptions.NotEnoughParameters); return; } if (!ulong.TryParse(args.Parameters[1], out ulong roleId)) { HelpCommand.ShowHelp(args.Channel, this, string.Format(CultureInfo.CurrentCulture, ResourceExceptions.FailedParseException, args.Parameters[1])); return; } else if (args.Guild.GetRole(roleId) == null) { HelpCommand.ShowHelp(args.Channel, this, $"Discord Role {args.Parameters[1]} not found!"); return; } AccessLevel?access = null; if (args.Parameters.Count > 2) { if (args.Parameters[2].TryParseEnum(out AccessLevel acc)) { access = acc; } else { HelpCommand.ShowHelp(args.Channel, this, $"Access Level {args.Parameters[2]} not found!"); return; } if (access.HasValue) { switch (access.Value) { case AccessLevel.Dev: args.Channel.SendMessageAsync("You do not have enough permissions"); return; case AccessLevel.Admin: case AccessLevel.Host: if (args.AccessLevel < AccessLevel.Host) { args.Channel.SendMessageAsync("You do not have enough permissions"); return; } break; } } } switch (args.Parameters[0].ToLower(CultureInfo.CurrentCulture)) { case "bind": if (!access.HasValue) { HelpCommand.ShowHelp(args.Channel, this, $"Access Level {args.Parameters[2]} not found!"); return; } if (CommandHandler.BindPermssion(args.Guild, roleId, access.Value)) { args.Channel.SendMessageAsync("Binded permission"); } else { args.Channel.SendMessageAsync("Already binded or failed to bind"); } break; case "unbind": if (CommandHandler.UnbindPermission(args.Guild, roleId, access)) { args.Channel.SendMessageAsync("Unbinded permission"); } else { args.Channel.SendMessageAsync("Already unbinded or failed to unbind"); } break; } }