Exemple #1
0
        private void LogMessageCount(MomentumDiscordDbContext dbContext, DiscordMessage message)
        {
            var user = dbContext.DailyMessageCount
                       .SingleOrDefault(x => x.UserId == message.Author.Id &&
                                        x.ChannelId == message.Channel.Id &&
                                        x.Date == message.CreationTimestamp.UtcDateTime.Date);

            if (user != null)
            {
                // If they have a message count for that day, just increment
                user.MessageCount++;
            }
            else
            {
                // No data for the current state, make a new message count
                var newUser = new DailyMessageCount
                {
                    ChannelId    = message.Channel.Id,
                    Date         = message.CreationTimestamp.UtcDateTime.Date,
                    UserId       = message.Author.Id,
                    MessageCount = 1
                };

                dbContext.Add(newUser);
            }

            dbContext.SaveChanges();
        }
Exemple #2
0
        private async Task CheckVerifiedRoleAsync(MomentumDiscordDbContext dbContext, DiscordMessage message)
        {
            // If they already have the verified role, or they have the blacklist role, no need to check
            if (!(message.Author is DiscordMember member))
            {
                return;
            }

            if (!member.Roles.Any(x => x.Id == _config.MediaVerifiedRoleId || x.Id == _config.MediaBlacklistedRoleId))
            {
                // Have they been here for the minimum days
                var messagesFromUser = dbContext.DailyMessageCount.ToList()
                                       .Where(x => x.UserId == member.Id)
                                       .OrderBy(x => x.Date)
                                       .ToList();

                if (!messagesFromUser.Any())
                {
                    // Haven't sent a message
                    return;
                }

                // Has to be at least one message, because this runs after message received event
                var earliestMessage = messagesFromUser.First();

                if ((DateTime.UtcNow - earliestMessage.Date).TotalDays > _config.MediaMinimumDays)
                {
                    // They have been here minimum days, sum messages
                    var messageCount = messagesFromUser.Sum(x => x.MessageCount);

                    if (messageCount > _config.MediaMinimumMessages)
                    {
                        // User meets all the requirements
                        var verifiedRole = member.Guild.GetRole(_config.MediaVerifiedRoleId);

                        await member.GrantRoleAsync(verifiedRole);
                    }
                }
            }
        }