public static async Task OnBuy(SocketGuildUser customer)
        {
            int spent = UserDataManager.GetUserData(customer).KamtrokensSpent;

            if (spent > 1)
            {
                await AddTitle(customer, TitleIDs.FIRST_BUY);
            }
            else if (spent > 50)
            {
                await AddTitle(customer, TitleIDs.SHOPPER);
            }
            else if (spent > 200)
            {
                await AddTitle(customer, TitleIDs.FRIDAY_EXPERT);
            }
            else if (spent > 1000)
            {
                await AddTitle(customer, TitleIDs.SHOPMASTER);
            }
            else
            {
                return;
            }

            UserDataManager.SaveUserData();
        }
        public static async Task AddTitle(SocketGuildUser user, int titleid)
        {
            if (!NodeMap.ContainsKey(titleid))
            {
                KLog.Error($"Attempted to give user {BotUtils.GetFullUsername(user)} invalid title ID #{titleid}");
                return;
            }

            TitleNode node = NodeMap[titleid];

            if (node == null)
            {
                KLog.Error($"Attempted to give user {BotUtils.GetFullUsername(user)} null title with ID #{titleid}");
                return;
            }

            UserDataNode u = UserDataManager.GetUserData(user);

            if (u.Titles == null)
            {
                u.Titles = new List <int>();
            }

            if (u.Titles.Contains(titleid))
            {
                return;                              // Don't give duplicate titles
            }
            u.Titles.Add(titleid);
            node.OnComplete(user);

            KLog.Important($"User {BotUtils.GetFullUsername(user)} has earned title {node.Name}");

            UserDataManager.SaveUserData();

            await AnnounceAchievement(user, node);
        }