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()); } }
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"); } }
public TauntyFormatter(IDescribeTaunts describer, TauntData tauntData, FormattingType formattingType) { _describer = describer; _tauntData = tauntData; _formattingType = formattingType; }
public StatFormatterFactory(TauntData tauntData, FormattingType formattingType) { _tauntData = tauntData; _formattingType = formattingType; }
/// <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); }
/// <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); }
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."); } }
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); }