예제 #1
0
파일: Flags.cs 프로젝트: Jammyhammy/Nekobot
 internal static bool GetNsfw(Channel chan) => SQL.ReadBool(SQL.ReadChannel(chan.Id, "nsfw"));
예제 #2
0
파일: Flags.cs 프로젝트: Jammyhammy/Nekobot
        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);
            });
        }
예제 #3
0
파일: Flags.cs 프로젝트: Jammyhammy/Nekobot
 static bool GetIgnored(string row, string table, ulong id) => SQL.ReadBool(SQL.ReadSingle(row, table, id, "ignored"));