Beispiel #1
0
        private async IAsyncEnumerable <AutoroleConfiguration> GetRelevantReactionAutoroles
        (
            AutoroleService autoroles,
            Cacheable <IUserMessage, ulong> message,
            SocketReaction?reaction = null
        )
        {
            var realMessage = await message.GetOrDownloadAsync();

            if (!(realMessage.Channel is ITextChannel textChannel))
            {
                yield break;
            }

            var guildAutoroles = await autoroles.GetAutoroles(textChannel.Guild).ToListAsync();

            if (guildAutoroles.Count == 0)
            {
                yield break;
            }

            foreach (var autorole in guildAutoroles)
            {
                var isRelevant = autorole.Conditions.Any
                                 (
                    c =>
                {
                    if (!(c is ReactionCondition reactionCondition))
                    {
                        return(false);
                    }

                    if (reactionCondition.MessageID != (long)realMessage.Id)
                    {
                        return(false);
                    }

                    if (reaction is null)
                    {
                        return(true);
                    }

                    if (reactionCondition.EmoteName != reaction.Emote.Name)
                    {
                        return(false);
                    }

                    return(true);
                }
                                 );

                if (isRelevant)
                {
                    yield return(autorole);
                }
            }
        }