private static List <string> FormatEvent( List <PlayerEvent> newGoalEvents, GameweekLeagueContext context, string eventDescription, string eventEmoji, ITaunt taunt) { return(newGoalEvents.Select(g => { var player = context.Players.Single(x => x.Id == g.PlayerId); var message = $"{player.FirstName} {player.SecondName} {eventDescription} {eventEmoji} "; if (g.IsRemoved) { message = $"~{message.TrimEnd()}~ (VAR? :shrug:)"; } else if (taunt != null && context.SlackTeam.Subscriptions.ContainsSubscriptionFor(EventSubscription.Taunts)) { var tauntibleEntries = GetTauntibleEntries(context, player, taunt.Type); var append = tauntibleEntries.Any() ? $" {string.Format(taunt.JokePool.GetRandom(), string.Join(", ", tauntibleEntries))}" : null; message += append; } return message; }).WhereNotNull().ToList()); }
private static IEnumerable <object> FormatNewPenaltiesMissed( List <PlayerEvent> newPenaltiesMissedEvents, GameweekLeagueContext context) { return(FormatEvent( newPenaltiesMissedEvents, context, "missed a penalty!", ":dizzy_face:", new PenaltyMissTaunt())); }
private static IEnumerable <object> FormatOwnGoals( List <PlayerEvent> newOwnGoalEvents, GameweekLeagueContext context) { return(FormatEvent( newOwnGoalEvents, context, "scored a goal! In his own goal!", ":face_palm:", new OwnGoalTaunt())); }
private static IEnumerable <object> FormatNewAssists( List <PlayerEvent> newAssistEvents, GameweekLeagueContext context) { return(FormatEvent( newAssistEvents, context, "got an assist!", ":handshake:", new AssistTaunt())); }
private static List <string> FormatNewRedCards( List <PlayerEvent> newRedCardEvents, GameweekLeagueContext context) { return(FormatEvent( newRedCardEvents, context, "got a red card!", ":red_circle:", new RedCardTaunt())); }
private static List <string> FormatNewGoals( List <PlayerEvent> newGoalEvents, GameweekLeagueContext context) { return(FormatEvent( newGoalEvents, context, "scored a goal!", ":soccer:", new GoalTaunt())); }
private static IEnumerable <object> FormatNewPenaltiesSaved( List <PlayerEvent> newPenaltiesSavedEvents, GameweekLeagueContext context) { return(FormatEvent( newPenaltiesSavedEvents, context, "saved a penalty!", ":man-cartwheeling:", null)); }
private static string[] GetTauntibleEntries(GameweekLeagueContext context, Player player, TauntType tauntType) { switch (tauntType) { case TauntType.HasPlayerInTeam: return(EntriesThatHasPlayerInTeam(player.Id, context.GameweekEntries, context.Users).ToArray()); case TauntType.InTransfers: return(EntriesThatTransferredPlayerInThisGameweek(player.Id, context.TransfersForLeague, context.Users).ToArray()); case TauntType.OutTransfers: return(EntriesThatTransferredPlayerOutThisGameweek(player.Id, context.TransfersForLeague, context.Users).ToArray()); default: return(Array.Empty <string>()); } }
public async Task HandleForTeam(FixtureUpdates updates, SlackTeam slackTeam) { var slackUsers = await GetSlackUsers(slackTeam); var entries = await _leagueEntriesByGameweek.GetEntriesForGameweek(updates.CurrentGameweek, (int)slackTeam.FplbotLeagueId); var transfers = await _transfersByGameWeek.GetTransfersByGameweek(updates.CurrentGameweek, (int)slackTeam.FplbotLeagueId); var context = new GameweekLeagueContext { Players = updates.Players, Teams = updates.Teams, Users = slackUsers, GameweekEntries = entries, SlackTeam = slackTeam, TransfersForLeague = transfers }; var formattedStr = GameweekEventsFormatter.FormatNewFixtureEvents(updates.Events.ToList(), context); await _publisher.PublishToWorkspace(slackTeam.TeamId, slackTeam.FplBotSlackChannel, formattedStr.ToArray()); }
private static bool TeamSubscribesForThisEvent(GameweekLeagueContext context, StatType statType) { var subscriptionType = statType.GetSubscriptionType(); return(subscriptionType.HasValue && context.SlackTeam.Subscriptions.ContainsSubscriptionFor(subscriptionType.Value)); }
public static List <string> FormatNewFixtureEvents(List <FixtureEvents> newFixtureEvents, GameweekLeagueContext context) { var formattedStrings = new List <string>(); newFixtureEvents.ForEach(newFixtureEvent => { var scoreHeading = $"{GetScore(context.Teams, newFixtureEvent)}\n"; var eventMessages = newFixtureEvent.StatMap .Where(stat => TeamSubscribesForThisEvent(context, stat.Key)) .SelectMany(stat => { switch (stat.Key) { case StatType.GoalsScored: return(FormatNewGoals(stat.Value, context)); case StatType.Assists: return(FormatNewAssists(stat.Value, context)); case StatType.OwnGoals: return(FormatOwnGoals(stat.Value, context)); case StatType.RedCards: return(FormatNewRedCards(stat.Value, context)); case StatType.PenaltiesMissed: return(FormatNewPenaltiesMissed(stat.Value, context)); case StatType.PenaltiesSaved: return(FormatNewPenaltiesSaved(stat.Value, context)); default: return(Enumerable.Empty <string>()); } }).MaterializeToArray(); if (eventMessages.Any()) { formattedStrings.Add(scoreHeading + Formatter.BulletPoints(eventMessages)); } }); return(formattedStrings); }