Skip to content
This repository was archived by the owner on Aug 18, 2020. It is now read-only.

Commit 13dd701

Browse files
committed
Merge branch 'feature/129-streamelements-connector' into develop
2 parents 136781c + 0254ac1 commit 13dd701

16 files changed

+315
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package org.codeoverflow.chatoverflow.api.io.dto.stat.stream.streamelements;
2+
3+
import org.codeoverflow.chatoverflow.api.io.dto.User;
4+
import org.codeoverflow.chatoverflow.api.io.dto.stat.stream.Cheer;
5+
6+
import java.time.OffsetDateTime;
7+
8+
public class StreamElementsCheer extends Cheer<User> {
9+
public StreamElementsCheer(User cheerer, int amount, String cheerMessage, OffsetDateTime time) {
10+
super(cheerer, amount, cheerMessage, time);
11+
}
12+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package org.codeoverflow.chatoverflow.api.io.dto.stat.stream.streamelements;
2+
3+
import org.codeoverflow.chatoverflow.api.io.dto.User;
4+
import org.codeoverflow.chatoverflow.api.io.dto.stat.stream.Donation;
5+
6+
import java.time.OffsetDateTime;
7+
import java.util.Currency;
8+
9+
/**
10+
* A donation for the streamer at StreamElements
11+
*/
12+
public class StreamElementsDonation extends Donation<User> {
13+
private final String donationMessage;
14+
15+
public StreamElementsDonation(User donor, float amount, Currency currency, OffsetDateTime time, String donationMessage) {
16+
super(donor, amount, currency, time);
17+
this.donationMessage = donationMessage;
18+
}
19+
20+
/**
21+
* Get the message that a user included in his donation
22+
*
23+
* @return the donation message
24+
*/
25+
public String getDonationMessage() {
26+
return donationMessage;
27+
}
28+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package org.codeoverflow.chatoverflow.api.io.dto.stat.stream.streamelements;
2+
3+
import org.codeoverflow.chatoverflow.api.io.dto.User;
4+
import org.codeoverflow.chatoverflow.api.io.dto.stat.stream.Follow;
5+
6+
import java.time.OffsetDateTime;
7+
8+
/**
9+
* A follow that is reported by StreamElements.
10+
*/
11+
public class StreamElementsFollow extends Follow<User> {
12+
13+
private final StreamElementsProvider provider;
14+
15+
public StreamElementsFollow(User follower, OffsetDateTime time, StreamElementsProvider provider) {
16+
super(follower, time);
17+
this.provider = provider;
18+
}
19+
20+
public StreamElementsProvider getProvider() {
21+
return provider;
22+
}
23+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package org.codeoverflow.chatoverflow.api.io.dto.stat.stream.streamelements;
2+
3+
import org.codeoverflow.chatoverflow.api.io.dto.User;
4+
import org.codeoverflow.chatoverflow.api.io.dto.stat.stream.Host;
5+
6+
import java.time.OffsetDateTime;
7+
8+
public class StreamElementsHost extends Host<User> {
9+
public StreamElementsHost(User streamer, String message, int viewerCount, OffsetDateTime time) {
10+
super(streamer, message, viewerCount, time);
11+
}
12+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package org.codeoverflow.chatoverflow.api.io.dto.stat.stream.streamelements;
2+
3+
4+
import java.util.Arrays;
5+
6+
/**
7+
* The streaming provider from which a StreamElements event is originated. Either Twitch or Youtube.
8+
*/
9+
public enum StreamElementsProvider {
10+
// StreamElements only supports Twitch and Youtube
11+
TWITCH,
12+
YOUTUBE;
13+
14+
@Override
15+
public String toString() {
16+
return name().toLowerCase();
17+
}
18+
19+
/**
20+
* Parse the provider from a string
21+
* @param provider string with the providers name
22+
* @return the provider for that string or null, if it doesn't exists.
23+
*/
24+
public static StreamElementsProvider parse(String provider) {
25+
return Arrays.stream(values()).filter(p -> p.toString().equals(provider.trim().toLowerCase())).findAny().orElse(null);
26+
}
27+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package org.codeoverflow.chatoverflow.api.io.dto.stat.stream.streamelements;
2+
3+
import org.codeoverflow.chatoverflow.api.io.dto.User;
4+
import org.codeoverflow.chatoverflow.api.io.dto.stat.stream.Raid;
5+
6+
import java.time.OffsetDateTime;
7+
8+
public class StreamElementsRaid extends Raid<User> {
9+
public StreamElementsRaid(User streamer, String message, int viewerCount, OffsetDateTime time) {
10+
super(streamer, message, viewerCount, time);
11+
}
12+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package org.codeoverflow.chatoverflow.api.io.dto.stat.stream.streamelements;
2+
3+
import org.codeoverflow.chatoverflow.api.io.dto.User;
4+
import org.codeoverflow.chatoverflow.api.io.dto.stat.stream.Subscription;
5+
import org.codeoverflow.chatoverflow.api.io.dto.stat.stream.SubscriptionTier;
6+
7+
import java.time.OffsetDateTime;
8+
9+
/**
10+
* A subscription to the channel of the streamer that is reported by StreamElements.
11+
*/
12+
public class StreamElementsSubscription extends Subscription<User> {
13+
14+
private final StreamElementsProvider provider;
15+
16+
public StreamElementsSubscription(User subscriber, OffsetDateTime time, int resub, SubscriptionTier tier, boolean gifted, User donor, StreamElementsProvider provider) {
17+
super(subscriber, time, resub, tier, gifted, donor);
18+
this.provider = provider;
19+
}
20+
21+
public StreamElementsProvider getProvider() {
22+
return provider;
23+
}
24+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package org.codeoverflow.chatoverflow.api.io.event.stream.streamelements;
2+
3+
import org.codeoverflow.chatoverflow.api.io.dto.stat.stream.streamelements.StreamElementsCheer;
4+
import org.codeoverflow.chatoverflow.api.io.event.stream.CheerEvent;
5+
6+
/**
7+
* Event that is triggered by StreamElements if a user has cheered to your stream.
8+
*/
9+
public class StreamElementsCheerEvent extends CheerEvent<StreamElementsCheer> implements StreamElementsEvent {
10+
public StreamElementsCheerEvent(StreamElementsCheer cheerInfo) {
11+
super(cheerInfo);
12+
}
13+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package org.codeoverflow.chatoverflow.api.io.event.stream.streamelements;
2+
3+
import org.codeoverflow.chatoverflow.api.io.dto.stat.stream.streamelements.StreamElementsDonation;
4+
import org.codeoverflow.chatoverflow.api.io.event.stream.DonationEvent;
5+
6+
/**
7+
* A event that is triggered if a user donates on StreamElements.
8+
*/
9+
public class StreamElementsDonationEvent extends DonationEvent<StreamElementsDonation> implements StreamElementsEvent {
10+
public StreamElementsDonationEvent(StreamElementsDonation donationInfo) {
11+
super(donationInfo);
12+
}
13+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package org.codeoverflow.chatoverflow.api.io.event.stream.streamelements;
2+
3+
import org.codeoverflow.chatoverflow.api.io.event.Event;
4+
5+
/**
6+
* Common interface between all StreamElements events.
7+
*/
8+
public interface StreamElementsEvent extends Event {
9+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package org.codeoverflow.chatoverflow.api.io.event.stream.streamelements;
2+
3+
import org.codeoverflow.chatoverflow.api.io.dto.stat.stream.streamelements.StreamElementsFollow;
4+
import org.codeoverflow.chatoverflow.api.io.event.stream.FollowEvent;
5+
6+
/**
7+
* Event that is triggered by StreamElements if a user starts following your channel.
8+
*/
9+
public class StreamElementsFollowEvent extends FollowEvent<StreamElementsFollow> implements StreamElementsEvent {
10+
public StreamElementsFollowEvent(StreamElementsFollow info) {
11+
super(info);
12+
}
13+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package org.codeoverflow.chatoverflow.api.io.event.stream.streamelements;
2+
3+
import org.codeoverflow.chatoverflow.api.io.dto.stat.stream.streamelements.StreamElementsHost;
4+
import org.codeoverflow.chatoverflow.api.io.event.stream.HostEvent;
5+
6+
/**
7+
* Event that is triggered by StreamElements if a streamer starts hosting your stream on their channel
8+
*/
9+
public class StreamElementsHostEvent extends HostEvent<StreamElementsHost> implements StreamElementsEvent {
10+
public StreamElementsHostEvent(StreamElementsHost cheerInfo) {
11+
super(cheerInfo);
12+
}
13+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package org.codeoverflow.chatoverflow.api.io.event.stream.streamelements;
2+
3+
import org.codeoverflow.chatoverflow.api.io.event.stream.RaidEvent;
4+
import org.codeoverflow.chatoverflow.api.io.dto.stat.stream.streamelements.StreamElementsRaid;
5+
6+
/**
7+
* Event that is triggered by StreamElements if a streamer raids your channel
8+
*/
9+
public class StreamElementsRaidEvent extends RaidEvent<StreamElementsRaid> implements StreamElementsEvent {
10+
public StreamElementsRaidEvent(StreamElementsRaid raidInfo) {
11+
super(raidInfo);
12+
}
13+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package org.codeoverflow.chatoverflow.api.io.event.stream.streamelements;
2+
3+
import org.codeoverflow.chatoverflow.api.io.dto.stat.stream.streamelements.StreamElementsSubscription;
4+
import org.codeoverflow.chatoverflow.api.io.event.stream.SubscriptionEvent;
5+
6+
/**
7+
* A event that is triggered by StreamElements if a users subscribes your channel.
8+
*/
9+
public class StreamElementsSubscriptionEvent extends SubscriptionEvent<StreamElementsSubscription> implements StreamElementsEvent {
10+
public StreamElementsSubscriptionEvent(StreamElementsSubscription info) {
11+
super(info);
12+
}
13+
}
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package org.codeoverflow.chatoverflow.api.io.input.event;
2+
3+
import org.codeoverflow.chatoverflow.api.IsRequirement;
4+
import org.codeoverflow.chatoverflow.api.io.event.stream.streamelements.*;
5+
6+
import java.util.function.Consumer;
7+
8+
/**
9+
* A Input which allows you to add event handlers for various StreamElements related events like donations.
10+
*/
11+
@IsRequirement(requires = "access to the StreamElements api", methodName = "streamElements")
12+
public interface StreamElementsEventInput extends EventInput<StreamElementsEvent> {
13+
14+
/**
15+
* Register an event handler that listens to all {@link StreamElementsSubscriptionEvent}
16+
*
17+
* @param eventHandler consumer that receives the Events
18+
*/
19+
default void registerSubscriptionEventHandler(Consumer<StreamElementsSubscriptionEvent> eventHandler) {
20+
registerEventHandler(eventHandler, StreamElementsSubscriptionEvent.class);
21+
}
22+
23+
/**
24+
* Register an event handler that listens to all {@link StreamElementsFollowEvent}
25+
*
26+
* @param eventHandler consumer that receives the Events
27+
*/
28+
default void registerFollowEventHandler(Consumer<StreamElementsFollowEvent> eventHandler) {
29+
registerEventHandler(eventHandler, StreamElementsFollowEvent.class);
30+
}
31+
32+
/**
33+
* Register an event handler that listens to all {@link StreamElementsDonationEvent}
34+
*
35+
* @param eventHandler consumer that receives the Events
36+
*/
37+
default void registerDonationEventHandler(Consumer<StreamElementsDonationEvent> eventHandler) {
38+
registerEventHandler(eventHandler, StreamElementsDonationEvent.class);
39+
}
40+
41+
/**
42+
* Register an event handler that listens to all {@link StreamElementsCheerEvent}
43+
*
44+
* @param eventHandler consumer that receives the Events
45+
*/
46+
default void registerCheerEventHandler(Consumer<StreamElementsCheerEvent> eventHandler) {
47+
registerEventHandler(eventHandler, StreamElementsCheerEvent.class);
48+
}
49+
50+
/**
51+
* Register an event handler that listens to all {@link StreamElementsRaidEvent}
52+
*
53+
* @param eventHandler consumer that receives the Events
54+
*/
55+
default void registerRaidEventHandler(Consumer<StreamElementsRaidEvent> eventHandler) {
56+
registerEventHandler(eventHandler, StreamElementsRaidEvent.class);
57+
}
58+
59+
/**
60+
* Register an event handler that listens to all {@link StreamElementsHostEvent}
61+
*
62+
* @param eventHandler consumer that receives the Events
63+
*/
64+
default void registerHostEventHandler(Consumer<StreamElementsHostEvent> eventHandler) {
65+
registerEventHandler(eventHandler, StreamElementsHostEvent.class);
66+
}
67+
}

src/main/java/org/codeoverflow/chatoverflow/api/plugin/configuration/Input.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import org.codeoverflow.chatoverflow.api.io.input.SerialInput;
99
import org.codeoverflow.chatoverflow.api.io.input.chat.DiscordChatInput;
1010
import org.codeoverflow.chatoverflow.api.io.input.chat.TwitchChatInput;
11+
import org.codeoverflow.chatoverflow.api.io.input.event.StreamElementsEventInput;
1112
import org.codeoverflow.chatoverflow.api.io.input.event.TipeeestreamEventInput;
1213

1314
// THIS FILE IS GENERATED WHILE COMPILING. DO NOT CHANGE ANYTHING HERE!
@@ -155,6 +156,28 @@ public Requirement<TwitchChatInput> twitchChat(String uniqueRequirementId) {
155156
return requirements.requireInput(uniqueRequirementId, "Twitch Chat", false, TwitchChatInput.class);
156157
}
157158

159+
/**
160+
* Requires a access to the StreamElements api which has to be specified by the user.
161+
*
162+
* @param uniqueRequirementId a plugin unique identifier which is stored for your plugin
163+
* @param displayName a string to display to the user while setting your requirement
164+
* @param isOptional true if this requirement is optional, false if mandatory
165+
* @return the requirement object. Use the get() method only at runtime!
166+
*/
167+
public Requirement<StreamElementsEventInput> streamElements(String uniqueRequirementId, String displayName, boolean isOptional) {
168+
return requirements.requireInput(uniqueRequirementId, displayName, isOptional, StreamElementsEventInput.class);
169+
}
170+
171+
/**
172+
* Requires a access to the StreamElements api which has to be specified by the user.
173+
*
174+
* @param uniqueRequirementId a plugin unique identifier which is stored for your plugin
175+
* @return the requirement object. Use the get() method only at runtime!
176+
*/
177+
public Requirement<StreamElementsEventInput> streamElements(String uniqueRequirementId) {
178+
return requirements.requireInput(uniqueRequirementId, "Stream Elements Event", false, StreamElementsEventInput.class);
179+
}
180+
158181
/**
159182
* Requires a login for the TipeeeStream api which has to be specified by the user.
160183
*

0 commit comments

Comments
 (0)