コード例 #1
0
        public BetsResponse Parse(string html, AgilityRestManager arm, TipsterResponse tipster, ExtendedTime fromDateClientLocal, TimeZoneKind serverTimezone)
        {
            HandleErrors(html);

            var fromDate = fromDateClientLocal?.ToTimezone(serverTimezone); // konwertuj na strefę czasową serwera, nie znamy czasu serwera, prawdopodobnie UTC
            var newBets  = new List <BetResponse>();

            var spanBettingPicks = html.HtmlRoot()
                                   .Descendants()
                                   .Where(n => n.HasClass("bettingpick"))
                                   .ToArray();

            var i = 0;

            var brpLs = LocalizationManager.GetLoaderBetshootResponseParseLocalizedStrings();

            foreach (var spanBp in spanBettingPicks)
            {
                OnInformationSending($"{brpLs[0][0]} ({++i} {brpLs[0][1]} {spanBettingPicks.Length})..."); // ($"Wczytywanie zakładów ({++i} z {spanBettingPicks.Length})...");
                var strDate = spanBp.Descendants()
                              .Single(x => x.HasClass("bettingpickdate"))
                              .InnerText;
                var dateArr            = strDate.Split('-').Swap(0, 2);
                var date               = new ExtendedTime(new DateTime(dateArr[2].ToInt(), dateArr[1].ToInt(), dateArr[0].ToInt()));
                var spanBetResultClass = spanBp.Descendants("span")
                                         .Single(span => span.HasClass("mgreen", "mred", "morange", "munits2"))
                                         .GetOnlyClass(); // fix opisany w konwerterze
                var stake  = spanBp.Descendants("span").Single(span => span.HasClass("pick-stake")).InnerText.Trim().ToInt();
                var profit = spanBp.Descendants("span").Single(span => span.HasClass("munits")).InnerText.Trim().ToDoubleN();

                var pickStr           = spanBp.Descendants("span").Single(span => span.HasClass("predict")).InnerText.RemoveHTMLSymbols();
                var spanPickTeams     = spanBp.Descendants("span").Single(span => span.HasClass("pick-teams"));
                var aPickTeams        = spanPickTeams.Descendants("a").SingleOrDefault();
                var matchStr          = (aPickTeams ?? spanPickTeams).InnerText.RemoveHTMLSymbols();
                var rawMatchResultStr = spanBp.Descendants("span").Single(x => x.HasClass("mresult")).InnerText;
                var odds = spanBp.Descendants("span").Single(x => x.HasClass("pick-odd")).InnerText.ToDouble();

                var    hrefAPickTeams = aPickTeams?.GetAttributeValue("href", "");
                string disciplineStr  = null;
                string leagueName     = null;
                if (hrefAPickTeams != null)
                {
                    var disciplineLeagueStr = arm.GetHtml(hrefAPickTeams).HtmlRoot().Descendants("p")
                                              .Single(p => p.InnerText.Trim().EndsWithAny(tipster.Name)).InnerText.RemoveHTMLSymbols().Split(" - ");
                    disciplineStr = disciplineLeagueStr[0];
                    leagueName    = disciplineLeagueStr[1];
                }

                var newBet = new BetResponse
                {
                    Date        = date,
                    HomeName    = matchStr.BeforeFirst(" - "),
                    AwayName    = matchStr.AfterFirst(" - "),
                    Pick        = PickConverter.ParseToPickResponse(pickStr, matchStr),
                    MatchResult = MatchConverter.ToMatchResultResponse(rawMatchResultStr),
                    BetResult   = BetConverter.ParseBetshootResultStringToBetResult(spanBetResultClass, stake, odds, profit),
                    Odds        = odds,
                    Discipline  = DisciplineConverter.ToDisciplineTypeOrNull(disciplineStr),
                    LeagueName  = leagueName
                };

                if (fromDate != null && date < fromDate)
                {
                    break;
                }

                newBets.Add(newBet);
            }

            OnInformationSending(brpLs[1][0]);

            Tipster = tipster;
            Bets    = newBets;
            return(this);
        }
コード例 #2
0
ファイル: DbBet.cs プロジェクト: blairt001/BettingBot
 public SentBetGvVM ToSentBetGvVM()
 {
     return(BetConverter.ToSentBetGvVM(this));
 }
コード例 #3
0
ファイル: DbBet.cs プロジェクト: blairt001/BettingBot
 public BetToDisplayGvVM ToBetToDisplayGvVM()
 {
     return(BetConverter.ToBetToDisplayGvVM(this));
 }
コード例 #4
0
ファイル: DbBet.cs プロジェクト: blairt001/BettingBot
 public DbBet CopyWithoutNavigationProperties()
 {
     return(BetConverter.CopyWithoutNavigationProperties(this));
 }
コード例 #5
0
ファイル: DbBet.cs プロジェクト: blairt001/BettingBot
 public BetToAssociateGvVM ToBetToAssociateGvVM()
 {
     return(BetConverter.ToBetToAssociateGvVM(this));
 }
コード例 #6
0
 public DbBet ToDbBet() => BetConverter.ToDbBet(this); // data jest już w utc przed konwersją
コード例 #7
0
 public DbBet ToDbBet()
 {
     return(BetConverter.ToDbBet(this));
 }
コード例 #8
0
ファイル: BetResponse.cs プロジェクト: rvnlord/BettingBot
 public DbBet ToDbBet() => BetConverter.ToDbBet(this);
コード例 #9
0
ファイル: Hand.cs プロジェクト: Parahet/HandsConverter
        public List <string> ToParty()
        {
            InitializeParty();
            if (SHOULD_CONVERT == false)
            {
                return(null);                         // return null - if not need to convert
            }
            var result = new List <string>();

            var uncalledBetPlayers = new Dictionary <string, long>(); //need to add uncalled bet to win chips count

            var seatPreviewCount = 0;                                 // or after seatPreview rows
            var state            = Enums.State.PreFlop;


            foreach (var line in hand)
            {
                var uncalledBetConv = new UncalledBetConverter(line);
                if (uncalledBetConv.IsMatch())
                {
                    uncalledBetPlayers.Add(uncalledBetConv.playerName, uncalledBetConv.uncalledBet);
                    continue;
                }

                var collectedPotConv = new CollectedPotConverter(line, sidePotNumber, playersPutInAmount);
                if (collectedPotConv.IsMatch())
                {
                    result.Add(collectedPotConv.ConvertToParty(uncalledBetPlayers));
                    sidePotNumber      = collectedPotConv.sidePotNumber;
                    playersPutInAmount = collectedPotConv.playersPutInAmount;
                    if (uncalledBetPlayers.ContainsKey(collectedPotConv.playerName))
                    {
                        uncalledBetPlayers.Remove(collectedPotConv.playerName);
                    }
                    continue;
                }

                #region FLOP TURN RIVER Converters and reset playersPutInAmount after each street
                var flopConv = new FlopConverter(line);
                if (flopConv.IsMatch())
                {
                    state = Enums.State.Flop;
                    ResetPlayersPutInCollection();
                    result.Add(flopConv.ConvertToParty());
                    continue;
                }

                var turnConv = new TurnConverter(line);
                if (turnConv.IsMatch())
                {
                    state = Enums.State.Turn;
                    ResetPlayersPutInCollection();
                    result.Add(turnConv.ConvertToParty());
                    continue;
                }

                var riverConv = new RiverConverter(line);
                if (riverConv.IsMatch())
                {
                    state = Enums.State.River;
                    ResetPlayersPutInCollection();
                    result.Add(riverConv.ConvertToParty());
                    continue;
                }
                #endregion

                var postBBConv = new PostBBConverter(line, playersPutInAmount);
                if (postBBConv.IsMatch())
                {
                    result.Add(postBBConv.ConvertToParty());
                    playersPutInAmount = postBBConv.playersPutInAmount;
                    continue;
                }

                var postSBConv = new PostSBConverter(line, playersPutInAmount);
                if (postSBConv.IsMatch())
                {
                    result.Add(postSBConv.ConvertToParty());
                    playersPutInAmount = postSBConv.playersPutInAmount;
                    continue;
                }

                var betConv = new BetConverter(line, playersPutInAmount);
                if (betConv.IsMatch())
                {
                    result.Add(betConv.ConvertToParty());
                    playersPutInAmount = betConv.playersPutInAmount;
                    continue;
                }

                var callConv = new CallConverter(line, playersPutInAmount);
                if (callConv.IsMatch())
                {
                    result.Add(callConv.ConvertToParty());
                    playersPutInAmount = callConv.playersPutInAmount;
                    continue;
                }

                var raiseConv = new RaiseConverter(line, playersPutInAmount);
                if (raiseConv.IsMatch())
                {
                    result.Add(raiseConv.ConvertToParty());
                    playersPutInAmount = raiseConv.playersPutInAmount;
                    continue;
                }

                //Add two aditional rows befor post ante or after seat preview
                var seatPrevConv = new SeatPreviewConverter(line);
                if (seatPrevConv.IsMatch())
                {
                    result.Add(seatPrevConv.ConvertToParty());
                    seatPreviewCount++;
                    if (seatPreviewCount == numberOfPlayers)
                    {
                        result.Add($@"Trny:{tournamentNumber.ToString()} Level:{arabicLevel.ToString()} ");
                        if (ante != 0)
                        {
                            result.Add($@"Blinds-Antes({smallBlind.ToSeparateString().Trim()}/{
			                            bigBlind.ToSeparateString().Trim()
		                            } -{ante.ToSeparateString().Trim()})"        );
                        }
                        else
                        {
                            result.Add($@"Blinds-Antes({smallBlind.ToSeparateString().Trim()}/{
			                            bigBlind.ToSeparateString().Trim()
		                            })"        );
                        }
                    }
                    continue;
                }

                var converters = new List <Converter>()
                {
                    new CheckConverter(line),
                    new PostAnteConverter(line),
                    new HoleCardsConverter(line),
                    new DealtToPlayerConverter(line),
                    new PlayerShowsConverter(line),
                    new MuckHandConverter(line),
                    new HandHeaderConverter(line, ante),
                    new TableHeaderConverter(line, numberOfPlayers),
                    new FoldConverter(line)
                };

                foreach (var converter in converters)
                {
                    if (converter.IsMatch())
                    {
                        result.Add(converter.ConvertToParty());
                        break;
                    }
                }
            }

            foreach (var pl in uncalledBetPlayers)//in the end add not used uncalled bet players strings
            {
                var players             = Helper.PartyPlayers;
                var convertedPlayerName = players.ContainsKey(pl.Key)
                   ? players[pl.Key]
                   : pl.Key.GetHashCode().ToString();

                result.Add($"{convertedPlayerName} wins {pl.Value.ToCommaSeparateString()} chips");
            }
            return(result);
        }
コード例 #10
0
ファイル: Hand.cs プロジェクト: Parahet/HandsConverter
        public List <string> To888()
        {
            Initialize888();
            if (SHOULD_CONVERT == false)
            {
                return(null);                                 // return null - if not need to convert
            }
            var result = new List <string>();

            var seatPreviewCount = 0;        // or after seatPreview rows
            var state            = Enums.State.PreFlop;


            foreach (var line in hand)
            {
                var uncalledBetConv = new UncalledBetConverter(line);
                if (uncalledBetConv.IsMatch())            //not using in 888
                {
                    continue;
                }

                var collectedPotConv = new CollectedPotConverter(line, sidePotNumber, playersPutInAmount);
                if (collectedPotConv.IsMatch())
                {
                    result.Add(collectedPotConv.ConvertTo888());
                    sidePotNumber      = collectedPotConv.sidePotNumber;
                    playersPutInAmount = collectedPotConv.playersPutInAmount;
                    continue;
                }

                #region FLOP TURN RIVER Converters and reset playersPutInAmount after each street
                var flopConv = new FlopConverter(line);
                if (flopConv.IsMatch())
                {
                    state = Enums.State.Flop;
                    ResetPlayersPutInCollection();
                    result.Add(flopConv.ConvertTo888());
                    continue;
                }

                var turnConv = new TurnConverter(line);
                if (turnConv.IsMatch())
                {
                    state = Enums.State.Turn;
                    ResetPlayersPutInCollection();
                    result.Add(turnConv.ConvertTo888());
                    continue;
                }

                var riverConv = new RiverConverter(line);
                if (riverConv.IsMatch())
                {
                    state = Enums.State.River;
                    ResetPlayersPutInCollection();
                    result.Add(riverConv.ConvertTo888());
                    continue;
                }
                #endregion

                var postBBConv = new PostBBConverter(line, playersPutInAmount);
                if (postBBConv.IsMatch())
                {
                    result.Add(postBBConv.ConvertTo888());
                    playersPutInAmount = postBBConv.playersPutInAmount;
                    continue;
                }

                var postSBConv = new PostSBConverter(line, playersPutInAmount);
                if (postSBConv.IsMatch())
                {
                    result.Add(postSBConv.ConvertTo888());
                    playersPutInAmount = postSBConv.playersPutInAmount;
                    continue;
                }

                var betConv = new BetConverter(line, playersPutInAmount);
                if (betConv.IsMatch())
                {
                    result.Add(betConv.ConvertTo888());
                    playersPutInAmount = betConv.playersPutInAmount;
                    continue;
                }

                var callConv = new CallConverter(line, playersPutInAmount);
                if (callConv.IsMatch())
                {
                    result.Add(callConv.ConvertTo888());
                    playersPutInAmount = callConv.playersPutInAmount;
                    continue;
                }

                var raiseConv = new RaiseConverter(line, playersPutInAmount);
                if (raiseConv.IsMatch())
                {
                    result.Add(raiseConv.ConvertTo888());
                    playersPutInAmount = raiseConv.playersPutInAmount;
                    continue;
                }

                var converters = new List <Converter>()
                {
                    new CheckConverter(line),
                    new PostAnteConverter(line),
                    new HoleCardsConverter(line),
                    new DealtToPlayerConverter(line),
                    new PlayerShowsConverter(line),
                    new MuckHandConverter(line),
                    new HandHeaderConverter(line, ante),
                    new TableHeaderConverter(line, numberOfPlayers),
                    new FoldConverter(line),
                    new SeatPreviewConverter(line)
                };

                foreach (var converter in converters)
                {
                    if (converter.IsMatch())
                    {
                        result.Add(converter.ConvertTo888());
                        break;
                    }
                }
            }
            return(result);
        }
コード例 #11
0
 /// <summary>
 /// Called by slider
 /// </summary>
 public void OnValueChanged(float value)
 {
     FloorValue = BetConverter.MapToAllowedBet(value);
     Text.text  = BetConverter.ToString(FloorValue);
 }
コード例 #12
0
 private void Awake()
 {
     _slider    = GetComponent <Slider>();
     FloorValue = BetConverter.FloorToAllowedBet(_slider.value);
     Text.text  = FloorValue.ToString();
 }