Exemplo n.º 1
0
        public async Task <List <Item> > GetItems(int tabIndex, string league, Player player)
        {
            if (Settings.Data().Get <bool>("Debug"))
            {
                MessageController.Instance().Log($"[Debug][API] Retrieving items of tab #{tabIndex} of {league} league...");
            }

            var uri             = new Uri(Url_MainPoEPage);
            var cookieContainer = new CookieContainer();

            using (var handler = new HttpClientHandler()
            {
                CookieContainer = cookieContainer
            })
                using (var client = new HttpClient(handler)
                {
                    BaseAddress = uri
                }) {
                    cookieContainer.Add(uri, new Cookie(PoESessionIdCookieName, player.SessionId));

                    UrlQuery query = new UrlQuery();
                    query.Add("league", league);
                    query.Add("tabs", "0");
                    query.Add("tabIndex", tabIndex.ToString());
                    query.Add("accountName", player.AccountName);

                    try {
                        var data = await client.GetStringAsync(BaseUrl_StashItems + query.Build(true));

                        var parsedData = JsonConvert.DeserializeObject <Dictionary <string, object> >(data);

                        var         itemsStr    = parsedData["items"].ToString();
                        var         parsedItems = JsonConvert.DeserializeObject <List <Dictionary <string, object> > >(itemsStr);
                        List <Item> items       = ParseItems(parsedItems);

                        return(items);
                    } catch (HttpRequestException e) {
                        MessageController.Instance().Log($"[Error][API] Error while retrieving items of tab #{tabIndex} of {league} league: {e.Message}");
                        return(null);
                    }
                }
        }
Exemplo n.º 2
0
        public async Task <bool> UpdateShopThread(int threadId, Player player, string content)
        {
            string editThreadPage = await GetEditThreadPage(threadId, player.SessionId);

            if (editThreadPage == null)
            {
                return(false);
            }

            string csrfToken = Utils.GetCsrfToken(editThreadPage, "hash");

            if (string.IsNullOrEmpty(csrfToken))
            {
                return(false);
            }

            string title = Utils.FindTextBetween(editThreadPage, "<input type=\"text\" name=\"title\" id=\"title\" onkeypress=\"return&#x20;event.keyCode&#x21;&#x3D;13\" value=\"", "\">");

            UrlQuery data = new UrlQuery();

            data.Add("hash", csrfToken);
            data.Add("title", title);
            data.Add("content", content);
            data.Add("submit", "Submit");

            var uri             = new Uri(Url_MainPoEPage);
            var cookieContainer = new CookieContainer();

            using (var handler = new HttpClientHandler()
            {
                CookieContainer = cookieContainer
            })
                using (var client = new HttpClient(handler)
                {
                    BaseAddress = uri
                }) {
                    cookieContainer.Add(uri, new Cookie(PoESessionIdCookieName, player.SessionId));
                    var baseUrl = BaseUrlTemplate_EditThread.Replace("$threadId$", threadId.ToString());
                    try {
                        var response = await client.PostAsync(baseUrl, new StringContent(data.Build(), Encoding.UTF8, "application/x-www-form-urlencoded"));

                        if (response.IsSuccessStatusCode)
                        {
                            if (await NotifyPoETrade(threadId, player.SessionId))
                            {
                                return(true);
                            }
                        }
                    } catch (HttpRequestException e) {
                        MessageController.Instance().Log($"[Error][API] Error while updating shop thread {threadId}: {e.Message}");
                        return(false);
                    }
                }

            return(false);
        }
Exemplo n.º 3
0
        public async Task <List <StashTab> > GetStashTabs(string league, Player player)
        {
            if (Settings.Data().Get <bool>("Debug"))
            {
                MessageController.Instance().Log($"[Debug][API] Retrieving stash tabs for league {league}...");
            }

            List <StashTab> stashTabs = new List <StashTab>();

            var uri             = new Uri(Url_MainPoEPage);
            var cookieContainer = new CookieContainer();

            using (var handler = new HttpClientHandler()
            {
                CookieContainer = cookieContainer
            })
                using (var client = new HttpClient(handler)
                {
                    BaseAddress = uri
                }) {
                    cookieContainer.Add(uri, new Cookie(PoESessionIdCookieName, player.SessionId));

                    UrlQuery query = new UrlQuery();
                    query.Add("league", league);
                    query.Add("tabs", "1");
                    query.Add("tabIndex", "0");
                    query.Add("accountName", player.AccountName);
                    try {
                        var data = await client.GetStringAsync(BaseUrl_StashItems + query.Build(true));

                        var parsedData = JsonConvert.DeserializeObject <Dictionary <string, object> >(data);
                        var tabsStr    = parsedData["tabs"].ToString();
                        var parsedTabs = JsonConvert.DeserializeObject <List <Dictionary <string, object> > >(tabsStr);
                        stashTabs = parsedTabs.Select(t => new StashTab(t, league)).ToList();

                        var         itemsStr    = parsedData["items"].ToString();
                        var         parsedItems = JsonConvert.DeserializeObject <List <Dictionary <string, object> > >(itemsStr);
                        List <Item> items       = ParseItems(parsedItems);

                        stashTabs.Find(t => t.Index == 0).Items = items;
                    } catch (HttpRequestException e) {
                        MessageController.Instance().Log($"[Error][API] Error while retrieving stash tabs for league {league}: {e.Message}");
                        return(null);
                    }
                }

            foreach (var tab in stashTabs)
            {
                if (tab.Index > 0)
                {
                    var items = await GetItems(tab.Index, league, player);

                    if (items != null)
                    {
                        tab.Items = items;
                    }
                    else
                    {
                        MessageController.Instance().Log($"[Warn][API] Getting items for tab #{tab.Index} failed.");
                    }
                }
            }

            return(stashTabs);
        }
Exemplo n.º 4
0
        public async Task <int> GenerateShopThread(string league, Player player)
        {
            string html = await GetForumPage();

            string forumId = GetForumId(html, league);

            if (!string.IsNullOrEmpty(forumId))
            {
                var newThreadPage = await GetNewThreadPage(forumId, player.SessionId);

                string csrfToken = Utils.GetCsrfToken(newThreadPage, "hash");

                UrlQuery data = new UrlQuery();
                data.Add("hash", csrfToken);
                data.Add("title", $"{player.AccountName}'s {league} Shop");
                data.Add("content", "reserved");
                data.Add("submit", "Submit");

                var uri             = new Uri(Url_MainPoEPage);
                var cookieContainer = new CookieContainer();
                using (var handler = new HttpClientHandler()
                {
                    CookieContainer = cookieContainer
                })
                    using (var client = new HttpClient(handler)
                    {
                        BaseAddress = uri
                    }) {
                        cookieContainer.Add(uri, new Cookie(PoESessionIdCookieName, player.SessionId));
                        var baseUrl = BaseUrlTemplate_NewThread.Replace("$forumId$", forumId);
                        try {
                            var response = await client.PostAsync(baseUrl, new StringContent(data.Build(), Encoding.UTF8, "application/x-www-form-urlencoded"));

                            if (response.IsSuccessStatusCode)
                            {
                                return(Convert.ToInt32(response.RequestMessage.RequestUri.Segments.Last()));
                            }

                            MessageController.Instance().Log($"[Error][API] Error while generating a new forum thread: HTTP{response.StatusCode} {response.ReasonPhrase}");
                        } catch (HttpRequestException e) {
                            MessageController.Instance().Log($"[Error][API] Error while generating a new forum thread: {e.Message}");

                            return(-1);
                        }
                    }
            }

            return(-1);
        }