/// <summary> /// Get all the event listeners for the given event type. /// </summary> /// <param name="services">Current service provider.</param> /// <param name="modules">Active modules for the current guild..</param> /// <returns>The event listeners.</returns> private static IEnumerable <EventHandler> GetHandlers <TEvent>( IServiceProvider services, IReadOnlyCollection <string> modules = null) where TEvent : IEvent { var checkEnabledModule = modules != null; foreach (var handler in services.GetServices <IEventListener>()) { var events = RegisteredEventListener.FromType(handler.GetType()); foreach (var eventHandler in events) { if (eventHandler.EventType != typeof(TEvent) || checkEnabledModule && eventHandler.Module != null && !modules.Contains(eventHandler.Module)) { continue; } yield return(new EventHandler(handler, eventHandler)); } } }