Esempio n. 1
0
        public static async Task CheckRuleAgreement(Guild guild, SocketGuildUser socketGuildUser, SocketReaction reaction)
        {
            try
            {
                if (socketGuildUser is null || socketGuildUser.IsBot || reaction?.MessageId != guild.Admin.Rulebox.MessageId)
                {
                    return;
                }

                var user = await GuildUsers.GetAsync(socketGuildUser);

                if (reaction.Emote.Name == guild.Admin.Rulebox.AgreeEmote)
                {
                    var role = socketGuildUser.Guild.Roles.First(r => r.Id == guild.Admin.Rulebox.Role);
                    await socketGuildUser.AddRoleAsync(role);
                }
                else if (reaction.Emote.Name == guild.Admin.Rulebox.DisagreeEmote)
                {
                    var roles = socketGuildUser.Roles.ToList();
                    roles.RemoveAt(0);

                    var bot = socketGuildUser.Guild.GetUser(Global.Client.CurrentUser.Id);
                    if (guild.Admin.Rulebox.RemoveRolesOnDisagree && socketGuildUser.Hierarchy <= bot.Hierarchy)
                    {
                        await socketGuildUser.RemoveRolesAsync(roles);
                    }
                    if (guild.Admin.Rulebox.KickOnDisagree && socketGuildUser.Hierarchy <= bot.Hierarchy)
                    {
                        await user.KickAsync($"Please agree to the rules to use `{socketGuildUser.Guild.Name}`.", Global.Client.CurrentUser);
                    }
                }
                await GuildUsers.Save(user);
            }
            catch (Exception ex) { await Debug.LogErrorAsync("rulebox", ex.StackTrace); }
        }
Esempio n. 2
0
        public static async Task ValidateForEXPAsync(IUserMessage message, Guild guild)
        {
            var guildUser = await ValidateCanEarnEXP(message, guild);

            var user = await Users.GetAsync(message.Author as SocketUser);

            guildUser.Status.LastMessage = message.Content;
            guildUser.XP.LastXPMsg       = DateTime.Now;

            int oldLevel = guildUser.XP.Level;

            guildUser.XP.EXP += guild.XP.EXPPerMessage;

            int newLevel = guildUser.XP.Level;

            guildUser.Status.MessageCount++;
            user.MessageCount++;

            await GuildUsers.Save(guildUser);

            await Users.Save(user);

            if (oldLevel != newLevel)
            {
                await SendLevelUpMessageAsync(message, guild, guildUser, oldLevel, newLevel);
            }
        }
Esempio n. 3
0
        public static async Task OnReactionRemoved(Cacheable <IUserMessage, ulong> before, ISocketMessageChannel channel, SocketReaction reaction)
        {
            try
            {
                var socketGuildUser = reaction.User.Value as SocketGuildUser;
                var user            = await GuildUsers.GetAsync(socketGuildUser);

                var guild = await Guilds.GetAsync(socketGuildUser.Guild);

                if (!socketGuildUser.IsBot && reaction.MessageId == guild.Admin.Rulebox.MessageId && reaction.Emote.Name == guild.Admin.Rulebox.AgreeEmote)
                {
                    var roles = socketGuildUser.Roles.ToList();
                    roles.RemoveAt(0);
                    await socketGuildUser.RemoveRolesAsync(roles);
                }
                await GuildUsers.Save(user);
            }
            catch (Exception ex) { await Debug.LogErrorAsync("rulebox", ex.StackTrace); }
        }
Esempio n. 4
0
        public static async Task ValidateMessage(SocketMessage message)
        {
            try
            {
                if (message is null || !(message.Author is SocketGuildUser guildAuthor) || guildAuthor.IsBot)
                {
                    return;
                }

                var user = await GuildUsers.GetAsync(guildAuthor);

                var guild = await Guilds.GetAsync(guildAuthor.Guild);

                var autoMod = guild.Moderation.Auto;

                ValidateUserNotExempt(guildAuthor, guild);

                if (autoMod.SpamNotification)
                {
                    await SendSpamNotification(message, guildAuthor, guild);
                }

                var messageValidation = GetContentValidation(guild, message.Content, user);
                if (messageValidation != null)
                {
                    ValidateChannelNotExempt((FilterType)messageValidation, guildAuthor.Guild, guild);
                    ValidateRoleNotExempt((FilterType)messageValidation, guildAuthor, guild);

                    var filter = guild.Moderation.Auto.Filters.FirstOrDefault(f => f.Filter == messageValidation);
                    await PunishUser(filter.Punishment, user, messageValidation.ToString().ToSentenceCase());

                    try { await message.DeleteAsync(); } // 404 - there may be other auto mod bots -> message already deleted
                    catch {}
                    finally { await user.XP.ExtendXPCooldown(); }
                }
                user.Status.LastMessage = message.Content;
                await GuildUsers.Save(user);
            }
            catch (InvalidOperationException) {}
            catch (Exception) {}//{ await Debug.LogAsync("auto", LogSeverity.Error, ex); }
        }