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); } } }