internal static bool GetNsfw(Channel chan) => SQL.ReadBool(SQL.ReadChannel(chan.Id, "nsfw"));
internal static void AddCommands(Commands.CommandGroupBuilder group) { group.CreateCommand("nsfw status") .Alias("canlewd status") .Description("I'll tell you if this channel allows nsfw commands.") .Do(async e => await e.Channel.SendMessage($"This channel {(GetNsfw(e.Channel) ? "allows" : "doesn't allow")} nsfw commands.")); // Moderator Commands group.CreateCommand("nsfw") .Alias("canlewd") .Parameter("on/off", Commands.ParameterType.Required) .MinPermissions(1) .Description("I'll set a channel's nsfw flag to on or off.") .Do(e => { Helpers.OnOffCmd(e, on => { string status = on ? "allow" : "disallow"; if (GetNsfw(e.Channel) == on) { e.Channel.SendMessage($"{e.User.Mention}, this channel is already {status}ing nsfw commands."); } else { SQL.AddOrUpdateFlag(e.Channel.Id, "nsfw", on ? "1" : "0"); e.Channel.SendMessage($"I've set this channel to {status} nsfw commands."); } }); }); Func <Role, EMentionType> mention_type = r => r.IsEveryone ? EMentionType.everyoneRole : r.IsMentionable ? EMentionType.role : EMentionType.unmentionableRole; // Administrator Commands group.CreateCommand("ignore") .Parameter("channel", Commands.ParameterType.Optional) .Parameter("user", Commands.ParameterType.Optional) .Parameter("role", Commands.ParameterType.Optional) .Parameter("...", Commands.ParameterType.Multiple) .MinPermissions(1) .Description("I'll ignore a particular channel, user or role") .Do(async e => { if (e.Message.MentionedChannels.Any() || e.Message.MentionedUsers.Any() || e.Message.MentionedRoles.Any()) { int perms = Helpers.GetPermissions(e.User, e.Channel); string reply = ""; foreach (Channel c in e.Message.MentionedChannels) { reply += (reply != "" ? "\n" : "") + await SetIgnored("channel", "flags", c.Id, EMentionType.channel, perms); } foreach (User u in e.Message.MentionedUsers) { reply += (reply != "" ? "\n" : "") + await SetIgnored("user", "users", u.Id, EMentionType.user, perms, Helpers.GetPermissions(u, e.Channel)); } var senpai = e.Server.GetUser(Program.masterId); foreach (Role r in e.Message.MentionedRoles) { reply += (reply != "" ? "\n" : "") + await SetIgnored("role", "roles", r.Id, mention_type(r), perms, senpai.Roles.Contains(r) ? -2 : e.User.Roles.Contains(r) ? -1 : perms); } await e.Channel.SendMessage(reply); } else { await e.Channel.SendMessage("You need to mention at least one user, channel or role!"); } }); group.CreateCommand("ignore role") .Parameter("role(s)", Commands.ParameterType.Unparsed) .MinPermissions(3) .Description("I'll ignore particular roles by name (comma separated)") .Do(async e => { string reply = ""; if (e.Args[0].Length == 0) { reply = "You need to provide at least one role name!"; } else { int perms = Helpers.GetPermissions(e.User, e.Channel); var senpai = e.Server.GetUser(Program.masterId); Helpers.CommaSeparateRoleNames(e, async(roles, str) => { var count = roles.Count(); if (reply != "") { reply += '\n'; } if (count != 1) { reply += $"{(count == 0 ? "No" : count.ToString())} roles found for {str}"; } else { var r = roles.Single(); reply += await SetIgnored("role", "roles", r.Id, mention_type(r), perms, senpai.Roles.Contains(r) ? -2 : e.User.Roles.Contains(r) ? -1 : perms); } }); } await e.Channel.SendMessage(reply); }); }
static bool GetIgnored(string row, string table, ulong id) => SQL.ReadBool(SQL.ReadSingle(row, table, id, "ignored"));