// Only to be used on naughty users. public static async Task <bool> MuteUserAsync(DiscordMember naughtyMember, string reason, ulong moderatorId, DiscordGuild guild, DiscordChannel channel = null, TimeSpan muteDuration = default, bool alwaysRespond = false) { bool permaMute = false; DiscordChannel logChannel = await Program.discord.GetChannelAsync(Program.cfgjson.LogChannel); DiscordRole mutedRole = guild.GetRole(Program.cfgjson.MutedRole); DateTime? expireTime = DateTime.Now + muteDuration; DiscordMember moderator = await guild.GetMemberAsync(moderatorId); if (muteDuration == default) { permaMute = true; expireTime = null; } MemberPunishment newMute = new MemberPunishment() { MemberId = naughtyMember.Id, ModId = moderatorId, ServerId = guild.Id, ExpireTime = expireTime }; await Program.db.HashSetAsync("mutes", naughtyMember.Id, JsonConvert.SerializeObject(newMute)); try { await naughtyMember.GrantRoleAsync(mutedRole, $"[Mute by {moderator.Username}#{moderator.Discriminator}]: {reason}"); } catch { return(false); } try { if (permaMute) { await logChannel.SendMessageAsync($"{Program.cfgjson.Emoji.Muted} {naughtyMember.Mention} was successfully muted by `{moderator.Username}#{moderator.Discriminator}` (`{moderatorId}`).\nReason: **{reason}**"); await naughtyMember.SendMessageAsync($"{Program.cfgjson.Emoji.Muted} You have been muted in **{guild.Name}**!\nReason: **{reason}**"); } else { await logChannel.SendMessageAsync($"{Program.cfgjson.Emoji.Muted} {naughtyMember.Mention} was successfully muted for {Warnings.TimeToPrettyFormat(muteDuration, false)} by `{moderator.Username}#{moderator.Discriminator}` (`{moderatorId}`).\nReason: **{reason}**"); await naughtyMember.SendMessageAsync($"{Program.cfgjson.Emoji.Muted} You have been muted in **{guild.Name}** for {Warnings.TimeToPrettyFormat(muteDuration, false)}!\nReason: **{reason}**"); } } catch { // A DM failing to send isn't important, but let's put it in chat just so it's somewhere. if (!(channel is null)) { if (muteDuration == default) { await channel.SendMessageAsync($"{Program.cfgjson.Emoji.Muted} {naughtyMember.Mention} has been muted: **{reason}**"); } else { await channel.SendMessageAsync($"{Program.cfgjson.Emoji.Muted} {naughtyMember.Mention} has been muted for **{Warnings.TimeToPrettyFormat(muteDuration, false)}**: **{reason}**"); } return(true); } } if (!(channel is null) && alwaysRespond) { reason = reason.Replace("`", "\\`").Replace("*", "\\*"); if (muteDuration == default) { await channel.SendMessageAsync($"{Program.cfgjson.Emoji.Muted} {naughtyMember.Mention} has been muted: **{reason}**"); } else { await channel.SendMessageAsync($"{Program.cfgjson.Emoji.Muted} {naughtyMember.Mention} has been muted for **{Warnings.TimeToPrettyFormat(muteDuration, false)}**: **{reason}**"); } } return(true); }
public static async Task <bool> BanFromServerAsync(ulong targetUserId, string reason, ulong moderatorId, DiscordGuild guild, int deleteDays = 7, DiscordChannel channel = null, TimeSpan banDuration = default, bool appealable = false) { DiscordUser naughtyUser = await Program.discord.GetUserAsync(targetUserId); bool permaBan = false; DiscordChannel logChannel = await Program.discord.GetChannelAsync(Program.cfgjson.LogChannel); DiscordRole mutedRole = guild.GetRole(Program.cfgjson.MutedRole); DateTime? expireTime = DateTime.Now + banDuration; DiscordMember moderator = await guild.GetMemberAsync(moderatorId); if (banDuration == default) { permaBan = true; expireTime = null; } MemberPunishment newBan = new MemberPunishment() { MemberId = targetUserId, ModId = moderatorId, ServerId = guild.Id, ExpireTime = expireTime }; await Program.db.HashSetAsync("bans", targetUserId, JsonConvert.SerializeObject(newBan)); try { DiscordMember targetMember = await guild.GetMemberAsync(targetUserId); if (permaBan) { if (appealable) { await targetMember.SendMessageAsync($"{Program.cfgjson.Emoji.Banned} You have been banned from **{guild.Name}**!\nReason: **{reason}**\nYou can appeal the ban here: https://msft.chat/member/#ban-appeal-process"); } else { await targetMember.SendMessageAsync($"{Program.cfgjson.Emoji.Banned} You have been permanently banned from **{guild.Name}**!\nReason: **{reason}**"); } } else { await targetMember.SendMessageAsync($"{Program.cfgjson.Emoji.Banned} You have been banned from **{guild.Name}** for {Warnings.TimeToPrettyFormat(banDuration, false)}!\nReason: **{reason}**"); } } catch { // A DM failing to send isn't important. } try { await guild.BanMemberAsync(targetUserId, deleteDays, reason); if (permaBan) { await logChannel.SendMessageAsync($"{Program.cfgjson.Emoji.Banned} <@{targetUserId}> was permanently banned by `{moderator.Username}#{moderator.Discriminator}` (`{moderatorId}`).\nReason: **{reason}**"); } else { await logChannel.SendMessageAsync($"{Program.cfgjson.Emoji.Banned} <@{targetUserId}> was banned for {Warnings.TimeToPrettyFormat(banDuration, false)} by `{moderator.Username}#{moderator.Discriminator}` (`{moderatorId}`).\nReason: **{reason}**"); } } catch { return(false); } return(true); }