#pragma warning disable CS1998 // Async method lacks 'await' operators and will run synchronously public override async Task <bool> ExecuteCheckAsync(CommandContext ctx, bool help) { if (ctx.Channel.IsPrivate || ctx.Guild.Id != Program.cfgjson.ServerID) { return(false); } var level = Warnings.GetPermLevel(ctx.Member); if (level >= this.TargetLvl) { return(true); } else if (!help) { await ctx.RespondAsync($"{Program.cfgjson.Emoji.NoPermissions} Invalid permissions to use command **{ctx.Command.Name}**!"); } return(false); }
public async Task WarnCmd( CommandContext ctx, [Description("The channel you wish for the warning message to appear in.")] DiscordChannel targetChannel, [Description("The user you are warning. Accepts many formats.")] DiscordUser targetUser, [RemainingText, Description("The reason for giving this warning.")] string reason = null ) { DiscordMember targetMember; try { targetMember = await ctx.Guild.GetMemberAsync(targetUser.Id); if (GetPermLevel(ctx.Member) == ServerPermLevel.CommunityManager && (Warnings.GetPermLevel(targetMember) >= ServerPermLevel.CommunityManager || targetMember.IsBot)) { await ctx.RespondAsync($"{Program.cfgjson.Emoji.Error} {ctx.User.Mention}, as a Trial Moderator you cannot perform moderation actions on other staff members or bots."); return; } } catch { // do nothing :/ } await ctx.Message.DeleteAsync(); if (reason == null) { await ctx.Member.SendMessageAsync($"{Program.cfgjson.Emoji.Warning} Reason must be included for the warning command to work."); return; } DiscordMessage msg = await targetChannel.SendMessageAsync($"{Program.cfgjson.Emoji.Warning} {targetUser.Mention} was warned: **{reason.Replace("`", "\\`").Replace("*", "\\*")}**", null); await ctx.RespondAsync($"{Program.cfgjson.Emoji.Warning} {targetUser.Mention} was warned in {targetChannel.Mention}: **{reason.Replace("`", "\\`").Replace("*", "\\*")}**"); UserWarning warning = await GiveWarningAsync(targetUser, ctx.User, reason, MessageLink(msg), ctx.Channel); }
public async Task MuteCmd( CommandContext ctx, [Description("The user you're trying to mute")] DiscordUser targetUser, [RemainingText, Description("Combined argument for the time and reason for the mute. For example '1h rule 7' or 'rule 10'")] string timeAndReason = "No reason specified." ) { DiscordMember targetMember; try { targetMember = await ctx.Guild.GetMemberAsync(targetUser.Id); } catch (DSharpPlus.Exceptions.NotFoundException) { // TODO: Rework mutes to allow this await ctx.Message.DeleteAsync(); var msg = await ctx.RespondAsync($"{Program.cfgjson.Emoji.Error} The user you're trying to mute is not in the server!"); await Task.Delay(3000); await msg.DeleteAsync(); return; } if (Warnings.GetPermLevel(ctx.Member) == ServerPermLevel.CommunityManager && (Warnings.GetPermLevel(targetMember) >= ServerPermLevel.CommunityManager || targetMember.IsBot)) { await ctx.RespondAsync($"{Program.cfgjson.Emoji.Error} {ctx.User.Mention}, as a Trial Moderator you cannot perform moderation actions on other staff members or bots."); return; } await ctx.Message.DeleteAsync(); TimeSpan muteDuration = default; string possibleTime = timeAndReason.Split(' ').First(); if (possibleTime.Length != 1) { string reason = timeAndReason; // Everything BUT the last character should be a number. string possibleNum = possibleTime.Remove(possibleTime.Length - 1); if (int.TryParse(possibleNum, out int timeLength)) { char possibleTimePeriod = possibleTime.Last(); muteDuration = ModCmds.ParseTime(possibleTimePeriod, timeLength); } else { muteDuration = default; } if (muteDuration != default || possibleNum == "0") { if (!timeAndReason.Contains(" ")) { reason = "No reason specified."; } else { reason = timeAndReason.Substring(timeAndReason.IndexOf(' ') + 1, timeAndReason.Length - (timeAndReason.IndexOf(' ') + 1)); } } // await ctx.RespondAsync($"debug: {possibleNum}, {possibleTime}, {muteDuration.ToString()}, {reason}"); _ = Mutes.MuteUserAsync(targetMember, reason, ctx.User.Id, ctx.Guild, ctx.Channel, muteDuration, true); } }