Esempio n. 1
0
        public Task MessageDeletedByBot(SocketMessage before, ITextChannel channel, string reason = "N/A")
        {
            var _ = Task.Run(async() =>
            {
                try
                {
                    if (before.Author.IsBot)
                    {
                        return;
                    }

                    // deal with empty message
                    if (before.Content == null)
                    {
                        return;
                    }

                    if (channel == null)
                    {
                        return;
                    }

                    if ((IsToggled(channel.Guild)) == false) // not toggled on
                    {
                        return;
                    }

                    Discord.ITextChannel logChannel = await GetChannel(channel.Guild, "MessageDeletedChannel");
                    if (logChannel == null)
                    {
                        return;
                    }

                    var embed = new EmbedBuilder();

                    embed.WithTitle($"⚠️ Message Deleted By Bot | {before.Author.Username}#{before.Author.Discriminator}")
                    .WithColor(Color.Gold)
                    .WithDescription($"{before.Author.Mention} ({before.Author.Id}) has had their message deleted in {channel.Mention}!")
                    .AddField("Content", before.Content)
                    .AddField("Reason", reason)
                    .WithFooter($"user_message_bot_delete user_messagelog {before.Author.Id}")
                    .WithCurrentTimestamp();

                    if (Uri.IsWellFormedUriString(before.Author.GetAvatarUrl(), UriKind.Absolute))
                    {
                        embed.WithThumbnailUrl(before.Author.GetAvatarUrl());
                    }

                    await logChannel.SendMessageAsync("", false, embed.Build());
                }
                catch (Exception ex)
                {
                    Log.Error("Error with the message deleted by bot event handler: " + ex);
                    return;
                }
            });

            return(Task.CompletedTask);
        }
Esempio n. 2
0
        public Task UserBanned(IUser user, IGuild guild)
        {
            var _ = Task.Run(async() =>
            {
                try
                {
                    if (user.IsBot)
                    {
                        return;
                    }

                    if ((IsToggled(guild)) == false)
                    {
                        return;
                    }

                    Discord.ITextChannel channel = await GetChannel(guild, "UserBannedChannel");
                    if (channel == null)
                    {
                        return;
                    }

                    var banReason = guild.GetBanAsync(user.Id).Result.Reason;

                    var embed = new EmbedBuilder();

                    embed.WithTitle($"🔨 User Banned | {user.Username}#{user.Discriminator}")
                    .WithColor(Color.Red)
                    .WithDescription($"{user.Mention} | ``{user.Id}``")
                    .WithFooter($"user_banned user_banlog {user.Id}")
                    .WithCurrentTimestamp();

                    if (banReason == null)
                    {
                        embed.AddField("Reason", "No Reason Provided");
                    }
                    else
                    {
                        embed.AddField("Reason", banReason);
                    }

                    if (Uri.IsWellFormedUriString(user.GetAvatarUrl(), UriKind.Absolute))
                    {
                        embed.WithThumbnailUrl(user.GetAvatarUrl());
                    }

                    await channel.SendMessageAsync("", false, embed.Build());
                }
                catch (Exception ex)
                {
                    Log.Error("Error with the user banned event handler: " + ex);
                    return;
                }
            });

            return(Task.CompletedTask);
        }
Esempio n. 3
0
        public Task UserLeft(IGuildUser user)
        {
            var _ = Task.Run(async() =>
            {
                try
                {
                    if (user.IsBot)
                    {
                        return;
                    }

                    await _userRoleRetentionService.LogUserRoles(user);

                    if ((IsToggled(user.Guild)) == false)
                    {
                        return;
                    }

                    Discord.ITextChannel channel = await GetChannel(user.Guild, "UserLeftChannel");
                    if (channel == null)
                    {
                        return;
                    }

                    var embed = new EmbedBuilder();
                    embed.WithTitle($"❌ User Left | {user.Username}#{user.Discriminator}")
                    .WithColor(Color.Red)
                    .WithDescription($"{user.Mention} | ``{user.Id}``");
                    if (user.JoinedAt != null)
                    {
                        DateTimeOffset userJoined = ((DateTimeOffset)user.JoinedAt);
                        TimeSpan interval         = DateTime.UtcNow - userJoined.DateTime;
                        string day_word           = interval.Days == 1 ? "day" : "days";
                        embed.AddField("Joined Server", userJoined.ToString("ddd, dd MMM yyyy"), true);
                        embed.AddField("Time at Server", $"{interval.Days} {day_word}", true);
                    }
                    embed.WithFooter($"user_leave user_joinlog {user.Id}")
                    .WithCurrentTimestamp();

                    if (Uri.IsWellFormedUriString(user.GetAvatarUrl(), UriKind.Absolute))
                    {
                        embed.WithThumbnailUrl(user.GetAvatarUrl());
                    }

                    await channel.SendMessageAsync("", false, embed.Build());
                }
                catch (Exception ex)
                {
                    Log.Error("Error with the user left event handler: " + ex);
                    return;
                }
            });

            return(Task.CompletedTask);
        }
Esempio n. 4
0
        public Task UserJoined(IGuildUser user)
        {
            var _ = Task.Run(async() =>
            {
                try
                {
                    await CheckUserAutoban(user); // check if the user is to be automatically banned on join

                    if (user.IsBot)
                    {
                        return;
                    }

                    await _raidProtectionService.CheckForExcessiveJoins(user.Guild);
                    await _userRoleRetentionService.RestoreUserRoles(user);

                    if ((IsToggled(user.Guild)) == false)
                    {
                        return;
                    }

                    Discord.ITextChannel channel = await GetChannel(user.Guild, "UserJoinedChannel");
                    if (channel == null)
                    {
                        return;
                    }


                    var embed = new EmbedBuilder();

                    embed.WithTitle($"✅ User Joined | {user.Username}#{user.Discriminator}")
                    .WithColor(Color.Green)
                    .WithDescription($"{user.Mention} | ``{user.Id}``")
                    .AddField("Joined Server", user.JoinedAt?.ToString("ddd, dd MMM yyyy"), true)
                    .AddField("Joined Discord", user.CreatedAt.ToString("ddd, dd MMM yyyy"), true)
                    .WithFooter($"user_join user_joinlog {user.Id}")
                    .WithCurrentTimestamp();

                    if (Uri.IsWellFormedUriString(user.GetAvatarUrl(), UriKind.Absolute))
                    {
                        embed.WithThumbnailUrl(user.GetAvatarUrl());
                    }

                    await channel.SendMessageAsync("", false, embed.Build());
                }
                catch (Exception ex)
                {
                    Log.Error("Error with the user joined event handler: " + ex);
                    return;
                }
            });

            return(Task.CompletedTask);
        }
Esempio n. 5
0
        private async Task LogErrorInDiscordChannel(IResult result, SocketMessage originalMessage)
        {
            FloofDataContext _floofDb = new FloofDataContext();

            var userMsg = originalMessage as SocketUserMessage; // the original command
            var channel = userMsg.Channel as ITextChannel;      // the channel of the original command

            if (channel == null)
            {
                return;
            }

            var serverConfig = _floofDb.ErrorLoggingConfigs.Find(channel.GuildId); // no db result

            if (serverConfig == null)
            {
                return;
            }

            if ((!serverConfig.IsOn) || (serverConfig.ChannelId == null)) // not configured or disabled
            {
                return;
            }

            Discord.ITextChannel errorLoggingChannel = await channel.Guild.GetTextChannelAsync((ulong)serverConfig.ChannelId); // can return null if channel invalid

            if (errorLoggingChannel == null)
            {
                return;
            }


            Embed embed = generateErrorEmbed(userMsg.Author, result, userMsg);
            await errorLoggingChannel.SendMessageAsync("", false, embed);

            return;
        }
Esempio n. 6
0
        public Task GuildMemberUpdated(SocketGuildUser before, SocketGuildUser after)
        {
            var _ = Task.Run(async() =>
            {
                try
                {
                    if (before == null || after == null) // empty user params
                    {
                        return;
                    }

                    if (after.IsBot)
                    {
                        return;
                    }

                    var user = after as SocketGuildUser;

                    if ((IsToggled(user.Guild) == false)) // turned off
                    {
                        return;
                    }

                    Discord.ITextChannel channel = await GetChannel(user.Guild, "MemberUpdatesChannel");
                    if (channel == null) // no log channel set
                    {
                        return;
                    }

                    var embed = new EmbedBuilder();

                    if (before.Username != after.Username)
                    {
                        embed.WithTitle($"👥 Username Changed | {user.Username}#{user.Discriminator}")
                        .WithColor(Color.Purple)
                        .WithDescription($"{user.Mention} | ``{user.Id}``")
                        .AddField("Old Username", user.Username, true)
                        .AddField("New Name", user.Username, true)
                        .WithFooter($"user_username_change user_namelog {user.Id}")
                        .WithCurrentTimestamp();

                        if (Uri.IsWellFormedUriString(user.GetAvatarUrl(), UriKind.Absolute))
                        {
                            embed.WithThumbnailUrl(user.GetAvatarUrl());
                        }

                        bool hasBadWord = _wordFilterService.hasFilteredWord(new FloofDataContext(), after.Username, channel.Guild.Id);
                        if (hasBadWord)
                        {
                            await _nicknameAlertService.HandleBadNickname(user, user.Guild);
                        }
                    }
                    else if (before.Nickname != after.Nickname)
                    {
                        embed.WithTitle($"👥 Nickname Changed | {user.Username}#{user.Discriminator}")
                        .WithColor(Color.Purple)
                        .WithDescription($"{user.Mention} | ``{user.Id}``")
                        .WithFooter($"user_nickname_change user_namelog {user.Id}")
                        .WithCurrentTimestamp();

                        if (before.Nickname != null && after.Nickname != null) // changing nickname
                        {
                            embed.AddField("Old Nickname", before.Nickname, true);
                            embed.AddField("New Nickname", user.Nickname, true);
                        }
                        else if (after.Nickname == null) // removed their nickname
                        {
                            embed.AddField("Old Nickname", before.Nickname, true);
                        }
                        else // new nickname, didnt have one before
                        {
                            embed.AddField("New Nickname", user.Nickname, true);
                        }

                        if (Uri.IsWellFormedUriString(user.GetAvatarUrl(), UriKind.Absolute))
                        {
                            embed.WithThumbnailUrl(user.GetAvatarUrl());
                        }
                        if (after.Nickname != null)
                        {
                            bool hasBadWord = _wordFilterService.hasFilteredWord(new FloofDataContext(), after.Nickname, channel.Guild.Id);
                            if (hasBadWord)
                            {
                                await _nicknameAlertService.HandleBadNickname(user, user.Guild);
                            }
                        }
                    }
                    else if (before.AvatarId != after.AvatarId)
                    {
                        embed.WithTitle($"🖼️ Avatar Changed | {user.Username}#{user.Discriminator}")
                        .WithColor(Color.Purple)
                        .WithDescription($"{user.Mention} | ``{user.Id}``")
                        .WithFooter($"user_avatar_change {user.Id}")
                        .WithCurrentTimestamp();
                        if (Uri.IsWellFormedUriString(before.GetAvatarUrl(), UriKind.Absolute))
                        {
                            embed.WithThumbnailUrl(before.GetAvatarUrl());
                        }
                        if (Uri.IsWellFormedUriString(after.GetAvatarUrl(), UriKind.Absolute))
                        {
                            embed.WithImageUrl(after.GetAvatarUrl());
                        }
                    }
                    else if (before.Roles.Count != after.Roles.Count)
                    {
                        List <SocketRole> beforeRoles    = new List <SocketRole>(before.Roles);
                        List <SocketRole> afterRoles     = new List <SocketRole>(after.Roles);
                        List <SocketRole> roleDifference = new List <SocketRole>();

                        if (before.Roles.Count > after.Roles.Count) // roles removed
                        {
                            roleDifference = beforeRoles.Except(afterRoles).ToList();
                            embed.WithTitle($"❗ Roles Removed | {user.Username}#{user.Discriminator}")
                            .WithColor(Color.Orange)
                            .WithDescription($"{user.Mention} | ``{user.Id}``")
                            .WithFooter($"user_roles_removed user_rolelog {user.Id}")
                            .WithCurrentTimestamp();

                            foreach (SocketRole role in roleDifference)
                            {
                                embed.AddField("Role Removed", role);
                            }

                            if (Uri.IsWellFormedUriString(user.GetAvatarUrl(), UriKind.Absolute))
                            {
                                embed.WithThumbnailUrl(user.GetAvatarUrl());
                            }
                        }
                        else if (before.Roles.Count < after.Roles.Count) // roles added
                        {
                            roleDifference = afterRoles.Except(beforeRoles).ToList();
                            embed.WithTitle($"❗ Roles Added | {user.Username}#{user.Discriminator}")
                            .WithColor(Color.Orange)
                            .WithDescription($"{user.Mention} | ``{user.Id}``")
                            .WithFooter($"user_roles_added user_rolelog {user.Id}")
                            .WithCurrentTimestamp();
                            foreach (SocketRole role in roleDifference)
                            {
                                embed.AddField("Role Added", role);
                            }
                            if (Uri.IsWellFormedUriString(user.GetAvatarUrl(), UriKind.Absolute))
                            {
                                embed.WithThumbnailUrl(user.GetAvatarUrl());
                            }
                        }
                    }
                    else
                    {
                        return;
                    }
                    await channel.SendMessageAsync("", false, embed.Build());
                }
                catch (Exception ex)
                {
                    Log.Error("Error with the guild member updated event handler: " + ex);
                    return;
                }
            });

            return(Task.CompletedTask);
        }
Esempio n. 7
0
        public Task MessageDeleted(Cacheable <IMessage, ulong> before, ISocketMessageChannel chan)
        {
            var _ = Task.Run(async() =>
            {
                try
                {
                    // deal with empty message
                    var message = (before.HasValue ? before.Value : null) as IUserMessage;
                    if (message == null)
                    {
                        return;
                    }

                    if (message.Author.IsBot)
                    {
                        return;
                    }

                    var channel = chan as ITextChannel; // channel null, dm message?
                    if (channel == null)
                    {
                        return;
                    }

                    if ((IsToggled(channel.Guild)) == false) // not toggled on
                    {
                        return;
                    }


                    Discord.ITextChannel logChannel = await GetChannel(channel.Guild, "MessageDeletedChannel");
                    if (logChannel == null)
                    {
                        return;
                    }

                    var embed = new EmbedBuilder();

                    embed.WithTitle($"⚠️ Message Deleted | {message.Author.Username}#{message.Author.Discriminator}")
                    .WithColor(Color.Gold)
                    .WithDescription($"{message.Author.Mention} ({message.Author.Id}) has had their message deleted in {channel.Mention}!")
                    .AddField("Content", message.Content)
                    .WithCurrentTimestamp()
                    .WithFooter($"user_message_deleted user_messagelog {message.Author.Id}");

                    if (Uri.IsWellFormedUriString(message.Author.GetAvatarUrl(), UriKind.Absolute))
                    {
                        embed.WithThumbnailUrl(message.Author.GetAvatarUrl());
                    }

                    await logChannel.SendMessageAsync("", false, embed.Build());
                }
                catch (Exception ex)
                {
                    Log.Error("Error with the message deleted event handler: " + ex);
                    return;
                }
            });

            return(Task.CompletedTask);
        }
Esempio n. 8
0
        public Task MessageUpdated(Cacheable <IMessage, ulong> before, SocketMessage after, ISocketMessageChannel chan)
        {
            var _ = Task.Run(async() =>
            {
                try
                {
                    // deal with empty message
                    var messageBefore = (before.HasValue ? before.Value : null) as IUserMessage;
                    if (messageBefore == null)
                    {
                        return;
                    }

                    if (after.Author.IsBot)
                    {
                        return;
                    }

                    var channel = chan as ITextChannel; // channel null, dm message?
                    if (channel == null)
                    {
                        return;
                    }

                    if (messageBefore.Content == after.Content) // no change
                    {
                        return;
                    }

                    if ((IsToggled(channel.Guild)) == false) // not toggled on
                    {
                        return;
                    }

                    Discord.ITextChannel logChannel = await GetChannel(channel.Guild, "MessageUpdatedChannel");
                    if (logChannel == null)
                    {
                        return;
                    }

                    var embed = new EmbedBuilder();

                    embed.WithTitle($"⚠️ Message Edited | {after.Author.Username}#{after.Author.Discriminator}")
                    .WithColor(Color.DarkGrey)
                    .WithDescription($"{after.Author.Mention} ({after.Author.Id}) has edited their message in {channel.Mention}!")
                    .AddField("Before", messageBefore.Content, true)
                    .AddField("After", after.Content, true)
                    .WithCurrentTimestamp()
                    .WithFooter($"user_message_edited user_messagelog {after.Author.Id}");

                    if (Uri.IsWellFormedUriString(after.Author.GetAvatarUrl(), UriKind.Absolute))
                    {
                        embed.WithThumbnailUrl(after.Author.GetAvatarUrl());
                    }

                    await logChannel.SendMessageAsync("", false, embed.Build());

                    bool hasBadWord = _wordFilterService.hasFilteredWord(new FloofDataContext(), after.Content, channel.Guild.Id, channel.Id);
                    if (hasBadWord)
                    {
                        await HandleBadMessage(after.Author, after);
                    }
                }
                catch (Exception ex)
                {
                    Log.Error("Error with the message updated event handler: " + ex);
                    return;
                }
            });

            return(Task.CompletedTask);
        }
Esempio n. 9
0
        public async Task sendModMail([Summary("Message Content")][Remainder] string content = "")
        {
            try
            {
                if (string.IsNullOrEmpty(content))
                {
                    EmbedBuilder b;
                    b = new EmbedBuilder()
                    {
                        Description = $"Usage: `modmail [message]`",
                        Color       = Color.Magenta
                    };
                    await Context.Message.Author.SendMessageAsync("", false, b.Build());
                }

                // get values
                ModMail serverConfig         = _floofDb.ModMails.Find(SERVER_ID);
                IGuild  guild                = Context.Client.GetGuild(SERVER_ID);                             // can return null
                Discord.ITextChannel channel = await guild.GetTextChannelAsync((ulong)serverConfig.ChannelId); // can return null

                IRole role = null;

                if (!Context.User.MutualGuilds.Contains(guild)) // the modmail server is not a mutual server
                {
                    return;
                }

                if (serverConfig == null || serverConfig.IsEnabled == false || guild == null || channel == null) // not configured
                {
                    await Context.Channel.SendMessageAsync("Modmail is not configured on this server.");

                    return;
                }

                if (serverConfig.ModRoleId != null)
                {
                    role = guild.GetRole((ulong)serverConfig.ModRoleId); // can return null
                }

                if (content.Length > 500)
                {
                    await Context.Message.Author.SendMessageAsync("Mod mail content cannot exceed 500 characters");

                    return;
                }

                // form embed
                SocketUser   sender  = Context.Message.Author;
                EmbedBuilder builder = new EmbedBuilder()
                {
                    Title       = "⚠️ | MOD MAIL ALERT!",
                    Description = $"Modmail from: {sender.Mention} ({sender.Username}#{sender.Discriminator})",
                    Color       = Discord.Color.Gold
                };
                builder.WithCurrentTimestamp();
                builder.AddField("Message Content", $"```{content}```");
                string messageContent = (role == null) ? "Mod mail" : role.Mention; // role id can be set in database but deleted from server
                await Context.Channel.SendMessageAsync("Alerting all mods!");

                await channel.SendMessageAsync(messageContent, false, builder.Build());
            }
            catch (Exception ex)
            {
                await Context.Channel.SendMessageAsync(ex.ToString());

                return;
            }
        }
Esempio n. 10
0
        public Task UserUpdated(SocketUser before, SocketUser userAfter)
        {
            var _ = Task.Run(async() =>
            {
                try
                {
                    if (!(userAfter is SocketGuildUser after))
                    {
                        return;
                    }

                    if (before == null || after == null) // empty user params
                    {
                        return;
                    }

                    if (after.IsBot)
                    {
                        return;
                    }

                    if (IsToggled(after.Guild) == false) // turned off
                    {
                        return;
                    }

                    Discord.ITextChannel channel = await GetChannel(after.Guild, "MemberUpdatesChannel");
                    if (channel == null) // no log channel set
                    {
                        return;
                    }

                    var embed = new EmbedBuilder();

                    if (before.Username != after.Username)
                    {
                        embed.WithTitle($"👥 Username Changed | {after.Username}#{after.Discriminator}")
                        .WithColor(Color.Purple)
                        .WithDescription($"{after.Mention} | ``{after.Id}``")
                        .AddField("Old Username", before.Username, true)
                        .AddField("New Name", after.Username, true)
                        .WithFooter($"user_username_change user_namelog {after.Id}")
                        .WithCurrentTimestamp();

                        if (Uri.IsWellFormedUriString(after.GetAvatarUrl(), UriKind.Absolute))
                        {
                            embed.WithThumbnailUrl(after.GetAvatarUrl());
                        }

                        bool hasBadWord = _wordFilterService.hasFilteredWord(new FloofDataContext(), after.Username, channel.Guild.Id);
                        if (hasBadWord)
                        {
                            await _nicknameAlertService.HandleBadNickname(after, after.Guild);
                        }
                    }
                    else if (before.AvatarId != after.AvatarId)
                    {
                        embed.WithTitle($"🖼️ Avatar Changed | {after.Username}#{after.Discriminator}")
                        .WithColor(Color.Purple)
                        .WithDescription($"{after.Mention} | ``{after.Id}``")
                        .WithFooter($"user_avatar_change {after.Id}")
                        .WithCurrentTimestamp();
                        if (Uri.IsWellFormedUriString(before.GetAvatarUrl(), UriKind.Absolute))
                        {
                            embed.WithThumbnailUrl(before.GetAvatarUrl());
                        }
                        if (Uri.IsWellFormedUriString(after.GetAvatarUrl(), UriKind.Absolute))
                        {
                            embed.WithImageUrl(after.GetAvatarUrl());
                        }
                    }
                    else
                    {
                        return;
                    }
                    await channel.SendMessageAsync("", false, embed.Build());
                }
                catch (Exception ex)
                {
                    Log.Error("Error with the user updated event handler: " + ex);
                    return;
                }
            });

            return(Task.CompletedTask);
        }