@Nonnull
    public static <T> ChannelPublisher<T> create(@Nonnull Channel<T> channel, long duration, @Nonnull TimeUnit unit, @Nonnull ThreadContext threadContext, @Nonnull Supplier<? extends T> supplier) {
        Objects.requireNonNull(channel, "channel");
        Objects.requireNonNull(unit, "unit");
        Objects.requireNonNull(threadContext, "threadContext");
        Objects.requireNonNull(supplier, "supplier");

        return new ChannelPublisher<>(channel, supplier, duration, unit, threadContext);
    }
Creates a new channel publisher.

@param channel the channel
@param duration the duration to wait between publishing
@param unit the unit of duration
@param threadContext the context to call the supplier in
@param supplier the message supplier
@param <T> the type of the message
@return a channel publisher
helper/src/main/java/me/lucko/helper/messaging/util/ChannelPublisher.java