Exemplo n.º 1
0
        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));
                    }
                }
            });
        }
Exemplo n.º 2
0
        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));
                    }
                }
            });
        }