コード例 #1
0
        public void IncrementUrl(string url, int uid, string usage)
        {
            lock (LockObj)
            {
                LockObj.LockMessage = MiscTools.GetCurrentMethod();
                var matches = from tUrl in SqlConnector.LinkedUrls
                              where tUrl.Url == url
                              select tUrl;

                if (!matches.Any())
                {
                    var u = new LinkedUrl
                    {
                        LastUsage    = usage,
                        LastUsedById = uid,
                        Url          = url,
                        Uses         = 1
                    };
                    SqlConnector.Insert(u);
                }
                else
                {
                    matches.Set(m => m.Uses, m => m.Uses + 1)
                    .Set(m => m.LastUsage, usage)
                    .Set(m => m.LastUsedById, uid)
                    .Update();
                }
                Logger.Log(this, "Incremented URL count with URL: " + url + ".");
            }
            LockObj.LockMessage = "None";
        }
コード例 #2
0
        public void IncrementWord(string word)
        {
            lock (LockObj)
            {
                LockObj.LockMessage = MiscTools.GetCurrentMethod();

                var matches = from usedWord in SqlConnector.Words
                              where usedWord.Word == word
                              select usedWord;

                if (matches.Any())
                {
                    var match = matches.First();
                    match.Uses++;
                    Update(match);
                }
                else
                {
                    SqlConnector.Insert(new UsedWord
                    {
                        Uses = 1,
                        Word = word
                    });
                }
            }
            LockObj.LockMessage = "None";
        }
コード例 #3
0
        public void IncrementVar(string key, int amount = 1)
        {
            lock (LockObj)
            {
                LockObj.LockMessage = MiscTools.GetCurrentMethod();
                var matches = from pair in SqlConnector.KeyValuePairs
                              where pair.Key == key
                              select pair;

                if (!matches.Any())
                {
                    var p = new KeyValuePair
                    {
                        Key   = key,
                        Value = amount
                    };
                    SqlConnector.Insert(p);
                    Logger.Log(this, $"Inserted keyvaluepair with key: {key}.");
                }
                else
                {
                    var m = matches.First();
                    m.Value += amount;
                    Update(m);
                }
            }
            LockObj.LockMessage = "None";
        }
コード例 #4
0
 public void UpsertMiscData(string type, string key, string value)
 {
     lock (LockObj)
     {
         LockObj.LockMessage = MiscTools.GetCurrentMethod();
         var matches = from pair in SqlConnector.MiscData
                       where pair.Type == type &&
                       pair.Key == key
                       select pair;
         if (matches.Any())
         {
             matches.Set(data => data.Value, () => value).Update();
         }
         else
         {
             SqlConnector.Insert(new MiscData
             {
                 Type    = type,
                 Key     = key,
                 Value   = value,
                 Enabled = true
             });
         }
     }
     LockObj.LockMessage = "None";
 }
コード例 #5
0
 public void IncrementEmoticon(string emoticon, int uid)
 {
     lock (LockObj)
     {
         LockObj.LockMessage = MiscTools.GetCurrentMethod();
         var matches = from tEmoticon in SqlConnector.Emoticons
                       where tEmoticon.Emoticon == emoticon
                       select tEmoticon;
         if (!matches.Any())
         {
             var insert = new UsedEmoticon
             {
                 Emoticon     = emoticon,
                 LastUsedById = uid,
                 Uses         = 1
             };
             SqlConnector.Insert(insert);
         }
         else
         {
             matches.Set(m => m.Uses, m => m.Uses + 1)
             .Set(m => m.LastUsedById, uid).Update();
         }
         Logger.Log(this, $"Incremented emoticon count with emoticon: {emoticon}.");
     }
     LockObj.LockMessage = "None";
 }
コード例 #6
0
        public void IncrementLineCount(int uid)
        {
            lock (LockObj)
            {
                LockObj.LockMessage = MiscTools.GetCurrentMethod();

                var matches =
                    from stat in SqlConnector.UserStatistics
                    where stat.UserId == uid
                    select stat;

                if (matches.Count() != 0)
                {
                    var match = matches.First();
                    match.Lines++;
                    Update(match);
                }
                else
                {
                    var nstat = new UserStatistic {
                        UserId = uid, Lines = 1
                    };
                    SqlConnector.Insert(nstat);
                    Logger.Log(this, $"Created new stats row for {uid}.");
                }
            }
            LockObj.LockMessage = "None";
        }
コード例 #7
0
        /// <summary>
        /// Returns the matching database user for the given ChatUser.
        /// Will create a database user if one does not exist, and updates
        /// it if the user's nickname or AddressableName have changed.
        /// </summary>
        public User UpsertUser(ChatUser user)
        {
            lock (LockObj)
            {
                LockObj.LockMessage = MiscTools.GetCurrentMethod();

                // TODO: implement IRC user mapping
                if (user.HasTemporallyUniqueId)
                {
                    // The user's UniqueId is guaranteed to be correct, so we can simply match on that
                    var matches = SqlConnector.Users.Where(u => u.UniqueId == user.UniqueId).ToArray();
                    if (matches.Length == 0)
                    {
                        Logger.Log(this, $"Adding new user {user} to the database");
                        var dbUser = new User
                        {
                            AddressableName  = user.AddressableName,
                            Nickname         = user.Nickname,
                            OriginalNickname = user.Nickname,
                            UniqueId         = user.UniqueId
                        };
                        SqlConnector.Insert(dbUser);
                        // Instead of returning dbUser, grab the newly added user from the database,
                        // which will set their userId to the generated value.
                        return(SqlConnector.Users.First(u => u.UniqueId == user.UniqueId));
                    }
                    if (matches.Length == 1)
                    {
                        var dbUser = matches[0];
                        if (dbUser.AddressableName != user.AddressableName)
                        {
                            Logger.Log(this, $"Updating AddressableName for {dbUser} to {user.AddressableName}");
                            dbUser.AddressableName = user.AddressableName;
                        }
                        if (dbUser.Nickname != user.Nickname)
                        {
                            Logger.Log(this, $"Updating Nickname for {dbUser} to {user.Nickname}");
                            dbUser.Nickname = user.Nickname;
                        }
                        Update(dbUser);
                        return(matches[0]);
                    }
                    throw new CorruptedDatabaseException($"Multiple users with the same UniqueId (\"{user.UniqueId}\") found");
                }
                else
                {
                    throw new NotImplementedException("IRC user mapping is not supported yet");
                }
            }
        }
コード例 #8
0
        internal void Snag(ChatMessage message)
        {
            lock (LockObj)
            {
                LockObj.LockMessage = MiscTools.GetCurrentMethod();
                var q = new Quote
                {
                    Text     = message.Body,
                    AuthorId = message.Sender.DbUser.Id,
                    TakenAt  = DateTime.Now
                };

                SqlConnector.Insert(q);
                Logger.Log(this, $"Added quote for {message.Sender.Nickname}.");
            }
            LockObj.LockMessage = "None";
        }
コード例 #9
0
        public void AddMessage(ChatMessage message)
        {
            lock (LockObj)
            {
                LockObj.LockMessage = MiscTools.GetCurrentMethod();
                var line = new ChatLog
                {
                    SentAt      = message.SentAt,
                    MessageType = MessageTypes.ChatMessage,
                    ChannelId   = message.Channel.Identifier,
                    Channel     = message.Channel.Name,
                    SenderId    = message.Sender.DbUser.Id,
                    Nick        = message.Sender.Nickname,
                    Message     = message.Body
                };

                SqlConnector.Insert(line);
            }
            LockObj.LockMessage = "None";
        }