Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Claim drop on event message received #559

Merged
merged 5 commits into from
Aug 14, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion miner/docs/modules/ROOT/pages/configuration/discord.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ include::example$discord-filtering.json[]
Format works the same way as <<filtering, filtering>> except that additional parameters are provided.

Placeholders are expected to be between braces, example: `\{placeholder_name}`.
Available values can be seen in link:https://github.com/Rakambda/ChannelPointsMiner/blob/filter/develop/miner/src/main/java/fr/rakambda/channelpointsminer/miner/event/EventVariableKey.java[EventVariableKey].
Available values can be seen in link:https://github.com/Rakambda/ChannelPointsMiner/blob/develop/miner/src/main/java/fr/rakambda/channelpointsminer/miner/event/EventVariableKey.java[EventVariableKey].

NOTE: If you want to override the format of one event, you'll have to do the all as it'll also act as a filter.

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package fr.rakambda.channelpointsminer.miner.api.ws.data.message;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeName;
import fr.rakambda.channelpointsminer.miner.api.ws.data.message.dropclaim.DropClaimData;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.ToString;
import org.jetbrains.annotations.NotNull;

@JsonTypeName("drop-claim")
@Getter
@EqualsAndHashCode(callSuper = true)
@ToString
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class DropClaim extends IPubSubMessage{
@JsonProperty("data")
@NotNull
private DropClaimData data;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package fr.rakambda.channelpointsminer.miner.api.ws.data.message;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeName;
import fr.rakambda.channelpointsminer.miner.api.ws.data.message.dropprogress.DropProgressData;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.ToString;
import org.jetbrains.annotations.NotNull;

@JsonTypeName("drop-progress")
@Getter
@EqualsAndHashCode(callSuper = true)
@ToString
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class DropProgress extends IPubSubMessage{
@JsonProperty("data")
@NotNull
private DropProgressData data;
}
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@
@JsonSubTypes.Type(value = CommunityMomentStart.class, name = "active"),
@JsonSubTypes.Type(value = ActiveMultipliersUpdated.class, name = "active-multipliers-updated"),
@JsonSubTypes.Type(value = ReadNotifications.class, name = "read-notifications"),
@JsonSubTypes.Type(value = DropProgress.class, name = "drop-progress"),
@JsonSubTypes.Type(value = DropClaim.class, name = "drop-claim"),
})
@EqualsAndHashCode
@ToString
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package fr.rakambda.channelpointsminer.miner.api.ws.data.message.dropclaim;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.ToString;
import org.jetbrains.annotations.NotNull;

@NoArgsConstructor
@AllArgsConstructor
@Getter
@EqualsAndHashCode
@ToString
@Builder
public class DropClaimData{
@JsonProperty("drop_id")
@NotNull
private String dropId;
@JsonProperty("drop_instance_id")
@NotNull
private String dropInstanceId;
@JsonProperty("channel_id")
@NotNull
private String channelId;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package fr.rakambda.channelpointsminer.miner.api.ws.data.message.dropprogress;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.ToString;
import org.jetbrains.annotations.NotNull;

@NoArgsConstructor
@AllArgsConstructor
@Getter
@EqualsAndHashCode
@ToString
@Builder
public class DropProgressData{
@JsonProperty("drop_id")
@NotNull
private String dropId;
@JsonProperty("channel_id")
@NotNull
private String channelId;
@JsonProperty("current_progress_min")
private int currentProgressMin;
@JsonProperty("required_progress_min")
private int requiredProgressMin;
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@ public enum TopicName{
RAID("raid", false),
PREDICTIONS_CHANNEL_V1("predictions-channel-v1", false),
ONSITE_NOTIFICATIONS("onsite-notifications", true),
COMMUNITY_MOMENTS_CHANNEL_V1("community-moments-channel-v1", false);
COMMUNITY_MOMENTS_CHANNEL_V1("community-moments-channel-v1", false),
USER_DROP_EVENTS("user-drop-events", true);

@Getter(onMethod_ = @JsonValue)
private final String value;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ public class EventVariableKey{
public static final String COLOR = "color";
public static final String COMMIT = "commit";
public static final String DROP_NAME = "drop_name";
public static final String DROP_PROGRESS = "drop_progress";
public static final String MESSAGE = "message";
public static final String EMOJI = "emoji";
public static final String POINTS = "points";
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package fr.rakambda.channelpointsminer.miner.event.impl;

import fr.rakambda.channelpointsminer.miner.event.AbstractLoggableStreamerEvent;
import fr.rakambda.channelpointsminer.miner.streamer.Streamer;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.time.Instant;

@EqualsAndHashCode(callSuper = true)
@ToString
public class DropClaimedChannelEvent extends AbstractLoggableStreamerEvent{
public DropClaimedChannelEvent(@NotNull String streamerId, @Nullable String streamerUsername, @Nullable Streamer streamer, @NotNull Instant instant){
super(streamerId, streamerUsername, streamer, instant);
}

@Override
@NotNull
public String getConsoleLogFormat(){
return "Drop claimed on channel {streamer}";

Check warning on line 21 in miner/src/main/java/fr/rakambda/channelpointsminer/miner/event/impl/DropClaimedChannelEvent.java

View check run for this annotation

Codecov / codecov/patch

miner/src/main/java/fr/rakambda/channelpointsminer/miner/event/impl/DropClaimedChannelEvent.java#L21

Added line #L21 was not covered by tests
}

@Override
@NotNull
public String getDefaultFormat(){
return "[{username}] {emoji} : Drop claimed on channel {streamer}";
}

@Override
@NotNull
protected String getColor(){
return COLOR_INFO;
}

@Override
@NotNull
protected String getEmoji(){
return "🎁";
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
package fr.rakambda.channelpointsminer.miner.event.impl;

import fr.rakambda.channelpointsminer.miner.event.AbstractLoggableStreamerEvent;
import fr.rakambda.channelpointsminer.miner.event.EventVariableKey;
import fr.rakambda.channelpointsminer.miner.streamer.Streamer;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.time.Instant;
import java.util.Map;

@EqualsAndHashCode(callSuper = true)
@ToString
public class DropProgressChannelEvent extends AbstractLoggableStreamerEvent{
private final String progress;

public DropProgressChannelEvent(@NotNull String streamerId, @Nullable String streamerUsername, @Nullable Streamer streamer, @NotNull Instant instant, int progress){
super(streamerId, streamerUsername, streamer, instant);
this.progress = Integer.toString(progress);
}

@Override
@NotNull
public String getConsoleLogFormat(){
return "Drop progress on channel {streamer} : {drop_progress}%";

Check warning on line 26 in miner/src/main/java/fr/rakambda/channelpointsminer/miner/event/impl/DropProgressChannelEvent.java

View check run for this annotation

Codecov / codecov/patch

miner/src/main/java/fr/rakambda/channelpointsminer/miner/event/impl/DropProgressChannelEvent.java#L26

Added line #L26 was not covered by tests
}

@Override
@NotNull
public String getDefaultFormat(){
return "[{username}] {emoji} : Drop progress on channel {streamer} : {drop_progress}%";
}

@Override
public String lookup(String key){
if(EventVariableKey.DROP_PROGRESS.equals(key)){
return progress;
}
return super.lookup(key);
}

@Override
@NotNull
public Map<String, String> getEmbedFields(){
return Map.of("Progress", EventVariableKey.DROP_PROGRESS);
}

@Override
@NotNull
protected String getColor(){
return COLOR_INFO;
}

@Override
@NotNull
protected String getEmoji(){
return "🎁";
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -30,12 +30,16 @@ public static Miner create(@NotNull AccountConfiguration config, @NotNull IEvent
database,
eventManager);

var syncInventory = MinerRunnableFactory.createSyncInventory(miner, eventManager);
miner.setSyncInventory(syncInventory);

miner.addPubSubHandler(PubSubMessageHandlerFactory.createClaimAvailableHandler(miner, eventManager));
miner.addPubSubHandler(PubSubMessageHandlerFactory.createStreamStartEndHandler(miner, eventManager));
miner.addPubSubHandler(PubSubMessageHandlerFactory.createFollowRaidHandler(miner));
miner.addPubSubHandler(PubSubMessageHandlerFactory.createPredictionsHandler(miner, BetPlacerFactory.created(miner), eventManager));
miner.addPubSubHandler(PubSubMessageHandlerFactory.createPointsHandler(miner, eventManager));
miner.addPubSubHandler(PubSubMessageHandlerFactory.createClaimMomentHandler(miner, eventManager));
miner.addPubSubHandler(PubSubMessageHandlerFactory.createClaimDropHandler(miner, eventManager));

eventManager.addEventHandler(LogEventListenerFactory.createLogger());
if(Objects.nonNull(config.getDiscord().getUrl())){
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import fr.rakambda.channelpointsminer.miner.event.manager.IEventManager;
import fr.rakambda.channelpointsminer.miner.handler.ClaimAvailableHandler;
import fr.rakambda.channelpointsminer.miner.handler.ClaimDropHandler;
import fr.rakambda.channelpointsminer.miner.handler.ClaimMomentHandler;
import fr.rakambda.channelpointsminer.miner.handler.FollowRaidHandler;
import fr.rakambda.channelpointsminer.miner.handler.IPubSubMessageHandler;
Expand Down Expand Up @@ -45,4 +46,9 @@ public static IPubSubMessageHandler createPointsHandler(@NotNull IMiner miner, @
public static IPubSubMessageHandler createClaimMomentHandler(@NotNull IMiner miner, @NotNull IEventManager eventManager){
return new ClaimMomentHandler(miner, eventManager);
}

@NotNull
public static IPubSubMessageHandler createClaimDropHandler(@NotNull IMiner miner, @NotNull IEventManager eventManager){
return new ClaimDropHandler(miner, eventManager);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
package fr.rakambda.channelpointsminer.miner.handler;

import fr.rakambda.channelpointsminer.miner.api.ws.data.message.DropClaim;
import fr.rakambda.channelpointsminer.miner.api.ws.data.message.DropProgress;
import fr.rakambda.channelpointsminer.miner.api.ws.data.request.topic.Topic;
import fr.rakambda.channelpointsminer.miner.event.impl.DropClaimedChannelEvent;
import fr.rakambda.channelpointsminer.miner.event.impl.DropProgressChannelEvent;
import fr.rakambda.channelpointsminer.miner.event.manager.IEventManager;
import fr.rakambda.channelpointsminer.miner.factory.TimeFactory;
import fr.rakambda.channelpointsminer.miner.log.LogContext;
import fr.rakambda.channelpointsminer.miner.miner.IMiner;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.jetbrains.annotations.NotNull;
import java.util.Objects;

@Slf4j
@RequiredArgsConstructor
public class ClaimDropHandler extends PubSubMessageHandlerAdapter{
@NotNull
private IMiner miner;
@NotNull
private IEventManager eventManager;

@Override
public void onDropProgress(@NotNull Topic topic, @NotNull DropProgress message){
var channelId = message.getData().getChannelId();
var streamer = miner.getStreamerById(channelId).orElse(null);
var username = Objects.isNull(streamer) ? null : streamer.getUsername();

try(var ignored = LogContext.with(miner).withStreamer(streamer)){
var progress = 100 * message.getData().getCurrentProgressMin() / message.getData().getRequiredProgressMin();
var event = new DropProgressChannelEvent(channelId, username, streamer, TimeFactory.now(), progress);
eventManager.onEvent(event);
}
}

@Override
public void onDropClaim(@NotNull Topic topic, @NotNull DropClaim message){
var channelId = message.getData().getChannelId();
var streamer = miner.getStreamerById(channelId).orElse(null);
var username = Objects.isNull(streamer) ? null : streamer.getUsername();

try(var ignored = LogContext.with(miner).withStreamer(streamer)){
miner.getGqlApi().dropsPageClaimDropRewards(message.getData().getDropInstanceId())
.filter(r -> {
if(!r.isError()){
return true;
}
log.error("Failed to claim drop due to `{}` | {}", r.getError(), r.getErrors());
return false;
})
.map(r -> new DropClaimedChannelEvent(channelId, username, streamer, TimeFactory.now()))
.ifPresent(eventManager::onEvent);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
import fr.rakambda.channelpointsminer.miner.api.ws.data.message.CommunityMomentStart;
import fr.rakambda.channelpointsminer.miner.api.ws.data.message.CreateNotification;
import fr.rakambda.channelpointsminer.miner.api.ws.data.message.DeleteNotification;
import fr.rakambda.channelpointsminer.miner.api.ws.data.message.DropClaim;
import fr.rakambda.channelpointsminer.miner.api.ws.data.message.DropProgress;
import fr.rakambda.channelpointsminer.miner.api.ws.data.message.EventCreated;
import fr.rakambda.channelpointsminer.miner.api.ws.data.message.EventUpdated;
import fr.rakambda.channelpointsminer.miner.api.ws.data.message.GlobalLastViewedContentUpdated;
Expand Down Expand Up @@ -85,6 +87,10 @@

public void onReadNotifications(@NotNull Topic topic, @NotNull ReadNotifications message){}

public void onDropProgress(@NotNull Topic topic, @NotNull DropProgress message){}

Check warning on line 90 in miner/src/main/java/fr/rakambda/channelpointsminer/miner/handler/PubSubMessageHandlerAdapter.java

View check run for this annotation

Codecov / codecov/patch

miner/src/main/java/fr/rakambda/channelpointsminer/miner/handler/PubSubMessageHandlerAdapter.java#L90

Added line #L90 was not covered by tests

public void onDropClaim(@NotNull Topic topic, @NotNull DropClaim message){}

Check warning on line 92 in miner/src/main/java/fr/rakambda/channelpointsminer/miner/handler/PubSubMessageHandlerAdapter.java

View check run for this annotation

Codecov / codecov/patch

miner/src/main/java/fr/rakambda/channelpointsminer/miner/handler/PubSubMessageHandlerAdapter.java#L92

Added line #L92 was not covered by tests

@Override
public void handle(@NotNull Topic topic, @NotNull IPubSubMessage message){
for(var clazz : ClassWalker.range(message.getClass(), IPubSubMessage.class)){
Expand Down
Loading