Пример #1
0
    public async Task Handle(PublishFixtureEventsToSlackWorkspace message, IMessageHandlerContext messageContext)
    {
        _logger.LogInformation($"Publishing {message.FixtureEvents.Count} fixture events to {message.WorkspaceId}");
        var slackTeam = await _slackTeamRepo.GetTeam(message.WorkspaceId);

        TauntData tauntData = null;

        if (slackTeam.Subscriptions.ContainsSubscriptionFor(EventSubscription.Taunts) && slackTeam.FplbotLeagueId.HasValue)
        {
            var gws = await _globalSettingsClient.GetGlobalSettings();

            var currentGw  = gws.Gameweeks.GetCurrentGameweek();
            var slackUsers = await GetSlackUsers(slackTeam);

            var entries = await _leagueEntriesByGameweek.GetEntriesForGameweek(currentGw.Id, slackTeam.FplbotLeagueId.Value);

            var transfers = await _transfersByGameWeek.GetTransfersByGameweek(currentGw.Id, slackTeam.FplbotLeagueId.Value);

            tauntData = new TauntData(transfers, entries, entryName => SlackHandleHelper.GetSlackHandleOrFallback(slackUsers, entryName));
        }

        if (!string.IsNullOrEmpty(slackTeam.FplBotSlackChannel))
        {
            var eventMessages = GameweekEventsFormatter.FormatNewFixtureEvents(message.FixtureEvents, slackTeam.Subscriptions.ContainsStat, FormattingType.Slack, tauntData);
            var formattedStr  = eventMessages.Select(evtMsg => $"{evtMsg.Title}\n{evtMsg.Details}");
            await _publisher.PublishToWorkspace(slackTeam.TeamId, slackTeam.FplBotSlackChannel, formattedStr.ToArray());
        }
    }
Пример #2
0
    public async Task Handle(PublishFixtureEventsToGuild message, IMessageHandlerContext context)
    {
        _logger.LogInformation($"Publishing {message.FixtureEvents.Count} fixture events to {message.GuildId} and {message.ChannelId}");
        var sub = await _repo.GetGuildSubscription(message.GuildId, message.ChannelId);

        if (sub != null)
        {
            TauntData tauntData = null;
            if (sub.LeagueId.HasValue && sub.Subscriptions.ContainsSubscriptionFor(EventSubscription.Taunts))
            {
                var gws = await _globalSettingsClient.GetGlobalSettings();

                var currentGw = gws.Gameweeks.GetCurrentGameweek();
                var entries   = await _leagueEntriesByGameweek.GetEntriesForGameweek(currentGw.Id, sub.LeagueId.Value);

                var transfers = await _transfersByGameWeek.GetTransfersByGameweek(currentGw.Id, sub.LeagueId.Value);

                tauntData = new TauntData(transfers, entries);
            }
            var eventMessages = GameweekEventsFormatter.FormatNewFixtureEvents(message.FixtureEvents, sub.Subscriptions.ContainsStat, FormattingType.Discord, tauntData);
            var i             = 0;
            foreach (var eventMsg in eventMessages)
            {
                i += 2;
                var sendOptions = new SendOptions();
                sendOptions.DelayDeliveryWith(TimeSpan.FromSeconds(i));
                sendOptions.RouteToThisEndpoint();

                await context.Send(new PublishRichToGuildChannel(message.GuildId, message.ChannelId, eventMsg.Title, eventMsg.Details), sendOptions);
            }
        }
        else
        {
            _logger.LogInformation($"Guild {message.GuildId} in channel {message.ChannelId} not subbing to fixture events. Not sending");
        }
    }
Пример #3
0
 public TauntyFormatter(IDescribeTaunts describer, TauntData tauntData, FormattingType formattingType)
 {
     _describer      = describer;
     _tauntData      = tauntData;
     _formattingType = formattingType;
 }
Пример #4
0
 public StatFormatterFactory(TauntData tauntData, FormattingType formattingType)
 {
     _tauntData      = tauntData;
     _formattingType = formattingType;
 }
Пример #5
0
        /// <summary>
        /// Creates the data for the specified row.
        /// </summary>
        /// <param name="Row">The row.</param>
        internal Data Create(Row Row)
        {
            Data Data;

            switch (this.Index)
            {
            case 1:
            {
                Data = new LocaleData(Row, this);
                break;
            }

            case 2:
            {
                Data = new ResourceData(Row, this);
                break;
            }

            case 3:
            {
                Data = new EffectData(Row, this);
                break;
            }

            case 4:
            {
                Data = new ParticleEmitterData(Row, this);
                break;
            }

            case 5:
            {
                Data = new GlobalData(Row, this);
                break;
            }

            case 6:
            {
                Data = new QuestData(Row, this);
                break;
            }

            case 10:
            {
                Data = new WorldData(Row, this);
                break;
            }

            case 11:
            {
                Data = new HeroData(Row, this);
                break;
            }

            case 24:
            {
                Data = new TauntData(Row, this);
                break;
            }

            case 25:
            {
                Data = new DecoData(Row, this);
                break;
            }

            case 26:
            {
                Data = new VariableData(Row, this);
                break;
            }

            case 32:
            {
                Data = new EnergyPackageData(Row, this);
                break;
            }

            default:
            {
                Data = new Data(Row, this);
                break;
            }
            }

            return(Data);
        }
Пример #6
0
        /// <summary>
        /// Creates the data for the specified row.
        /// </summary>
        /// <param name="Row">The row.</param>
        internal Data Create(Row Row)
        {
            Data Data;

            switch (this.Index)
            {
            case 1:
            {
                Data = new LocaleData(Row, this);
                break;
            }

            case 2:
            {
                Data = new BillingPackageData(Row, this);
                break;
            }

            case 3:
            case 20:
            {
                Data = new GlobalData(Row, this);
                break;
            }

            case 4:
            {
                Data = new SoundData(Row, this);
                break;
            }

            case 5:
            {
                Data = new ResourceData(Row, this);
                break;
            }

            case 9:
            {
                Data = new CharacterBuffData(Row, this);
                break;
            }

            case 10:
            {
                Data = new ProjectileData(Row, this);
                break;
            }

            case 11:
            {
                Data = new EffectData(Row, this);
                break;
            }

            case 12:
            {
                Data = new PredefinedDeckData(Row, this);
                break;
            }

            case 14:
            {
                Data = new RarityData(Row, this);
                break;
            }

            case 15:
            {
                Data = new LocationData(Row, this);
                break;
            }

            case 16:
            {
                Data = new AllianceBadgeData(Row, this);
                break;
            }

            case 18:
            {
                Data = new NpcData(Row, this);
                break;
            }

            case 19:
            {
                Data = new TreasureChestData(Row, this);
                break;
            }

            case 21:
            {
                Data = new ParticleEmitterData(Row, this);
                break;
            }

            case 22:
            {
                Data = new AreaEffectObjectData(Row, this);
                break;
            }

            case 26:
            case 27:
            case 28:
            case 29:
            {
                Data = new SpellData(Row, this);
                break;
            }

            case 34:
            case 35:
            {
                Data = new CharacterData(Row, this);
                break;
            }

            case 40:
            {
                Data = new HealthBarData(Row, this);
                break;
            }

            case 41:
            {
                Data = new MusicData(Row, this);
                break;
            }

            case 42:
            {
                Data = new DecoData(Row, this);
                break;
            }

            case 43:
            {
                Data = new GambleChestData(Row, this);
                break;
            }

            case 45:
            case 48:
            {
                Data = new TutorialData(Row, this);
                break;
            }

            case 46:
            {
                Data = new ExpLevelData(Row, this);
                break;
            }

            case 50:
            {
                Data = new BackgroundDecoData(Row, this);
                break;
            }

            case 51:
            {
                Data = new SpellSetData(Row, this);
                break;
            }

            case 52:
            {
                Data = new ChestOrderData(Row, this);
                break;
            }

            case 53:
            {
                Data = new TauntData(Row, this);
                break;
            }

            case 54:
            {
                Data = new ArenaData(Row, this);
                break;
            }

            case 55:
            {
                Data = new ResourcePackData(Row, this);
                break;
            }

            case 56:
            {
                Data = new Data(Row, this);
                break;
            }

            case 57:
            {
                Data = new RegionData(Row, this);
                break;
            }

            case 58:
            {
                Data = new NewsData(Row, this);
                break;
            }

            case 59:
            {
                Data = new AllianceRoleData(Row, this);
                break;
            }

            case 60:
            {
                Data = new AchievementData(Row, this);
                break;
            }

            case 61:
            {
                Data = new HintData(Row, this);
                break;
            }

            case 62:
            {
                Data = new HelpshiftData(Row, this);
                break;
            }

            default:
            {
                Logging.Info(this.GetType(), "Invalid data table id: " + this.Index + ".");
                Data = null;
                break;
            }
            }

            return(Data);
        }
Пример #7
0
        internal override void Process()
        {
            if (this.Data != null)
            {
                if (this.DataType == 0)
                {
                    TauntData Taunt = (TauntData)this.Data;

                    if (!this.Device.Player.Extras.ContainsKey(Taunt.GlobalID))
                    {
                        if (!string.IsNullOrEmpty(Taunt.CharacterUnlock))
                        {
                            HeroData Hero = (HeroData)CSV.Tables.Get(Gamefile.Heroes).GetData(Taunt.CharacterUnlock);

                            if (!this.Device.Player.HeroLevels.ContainsKey(Hero.GlobalID))
                            {
                                Logging.Error(this.GetType(), "Unable to buy the taunt. Avatar doesn't unlock the hero " + Taunt.CharacterUnlock + ". AvatarId:" + this.Device.Player + ".");
                                return;
                            }
                        }

                        if (Taunt.Cost > 0)
                        {
                            ResourceData Resource = (ResourceData)CSV.Tables.Get(Gamefile.Resources).GetData(Taunt.Resource);

                            if (this.Device.Player.Resources.GetCount(Resource.GlobalID) < Taunt.Cost)
                            {
                                Logging.Error(this.GetType(), "Unable to buy the taunt. You do not have enough " + Taunt.Resource + ". Have:" + this.Device.Player.Resources.GetCount(Resource.GlobalID) + ", Require:" + Taunt.Cost + ".");
                                return;
                            }

                            this.Device.Player.Resources.Remove(Resource.GlobalID, Taunt.Cost);
                        }

                        this.Device.Player.Extras.Set(Taunt.GlobalID, 1);
                    }
                }
                else
                {
                    DecoData Deco = (DecoData)this.Data;

                    if (!this.Device.Player.Extras.ContainsKey(Deco.GlobalID))
                    {
                        if (Deco.UnlockLevel > this.Device.Player.ExpLevel)
                        {
                            Logging.Error(this.GetType(), "Unable to buy the deco. You do not have the required level. AvatarId:" + this.Device.Player + ".");
                            return;
                        }

                        if (Deco.Cost > 0)
                        {
                            ResourceData Resource = (ResourceData)CSV.Tables.Get(Gamefile.Resources).GetData(Deco.Resource);

                            if (this.Device.Player.Resources.GetCount(Resource.GlobalID) < Deco.Cost)
                            {
                                Logging.Error(this.GetType(), "Unable to buy the deco. You do not have enough " + Deco.Resource + ". Have:" + this.Device.Player.Resources.GetCount(Resource.GlobalID) + ", Require:" + Deco.Cost + ".");
                                return;
                            }

                            this.Device.Player.Resources.Remove(Resource.GlobalID, Deco.Cost);
                        }

                        this.Device.Player.Extras.Set(Deco.GlobalID, 2);

                        if (this.Device.Player.Extras.Count > 1)
                        {
                            foreach (Item Item in this.Device.Player.Extras.Values)
                            {
                                if (Item.Id / 1000000 == Deco.GetDataType())
                                {
                                    if (Item.Count != 1 && Item.Id != Deco.GlobalID)
                                    {
                                        Item.Count = 1;
                                    }
                                }
                            }
                        }
                    }
                    else
                    {
                        if (this.Device.Player.Extras.GetCount(Deco.GlobalID) == 1)
                        {
                            this.Device.Player.Extras.Set(Deco.GlobalID, 2);

                            foreach (Item Item in this.Device.Player.Extras.Values)
                            {
                                if (Item.Id / 1000000 == Deco.GetDataType())
                                {
                                    if (Item.Count != 1 && Item.Id != Deco.GlobalID)
                                    {
                                        Item.Count = 1;
                                    }
                                }
                            }
                        }
                        else
                        {
                            this.Device.Player.Extras.Set(Deco.GlobalID, 1);
                        }
                    }
                }
            }
            else
            {
                Logging.Error(this.GetType(), "Unable to buy the extra. Data is null.");
            }
        }
Пример #8
0
    public static List <FixtureEventMessage> FormatNewFixtureEvents(List <FixtureEvents> newFixtureEvents, Func <StatType, bool> subscribesToStat, FormattingType formattingType, TauntData tauntData = null)
    {
        var formattedStrings     = new List <FixtureEventMessage>();
        var statFormatterFactory = new StatFormatterFactory(tauntData, formattingType);

        newFixtureEvents.ForEach(newFixtureEvent =>
        {
            var eventMessages = newFixtureEvent.StatMap
                                .Where(stat => subscribesToStat(stat.Key))
                                .SelectMany(stat => statFormatterFactory.Create(stat.Key).Format(stat.Value))
                                .WhereNotNull()
                                .MaterializeToArray();
            if (eventMessages.Any())
            {
                formattedStrings.Add(new($"{GetScore(newFixtureEvent)}", Formatter.BulletPoints(eventMessages)));
            }
        });

        return(formattedStrings);
    }