CreateMonitor(ulong messageId, IUser targetUser, MonitorType monitorType) { return(async(Cacheable <IUserMessage, ulong> userMessageProvider, ISocketMessageChannel channel, SocketReaction reaction) => { if (reaction.MessageId == messageId) { IUserMessage message = await userMessageProvider.GetOrDownloadAsync(); int playerCount = GetPlayerCountByMonitorType(monitorType) + 1; ReactionSummary reactionSummary = message.Reactions .Select(r => new ReactionSummary(r.Key.Name, r.Value.ReactionCount)) .FirstOrDefault(r => r.Name == YES && r.Count == playerCount); if (reactionSummary != null) { await CommandChannel.SendMessageAsync(CommandByMonitorType(targetUser, monitorType)); } } }); }
CreateOptionsMonitor(ulong messageId, List <PlayerOption> options, MonitorType monitorType, int voteCount = 1) { return(async(Cacheable <IUserMessage, ulong> userMessageProvider, ISocketMessageChannel channel, SocketReaction reaction) => { if (reaction.MessageId == messageId) { IUserMessage message = await userMessageProvider.GetOrDownloadAsync(); int playerCount = voteCount + 1; ReactionSummary reactionSummary = message.Reactions .Select(r => new ReactionSummary(r.Key.Name, r.Value.ReactionCount)) .FirstOrDefault(r => r.Count == playerCount); if (reactionSummary != null) { PlayerOption pickedOption = options.FirstOrDefault(o => o.Emote == reactionSummary.Name); await CommandChannel.SendMessageAsync(CommandByMonitorType(pickedOption.Player.User, monitorType)); } } }); }