mirror of
https://github.com/Sheldan/abstracto.git
synced 2026-04-19 13:10:20 +00:00
[AB-53] adding economy related commands
adding runtime exception to root command handling adding simple custom command module disabling slash command for show emote the utility is not given (the bot cannot show any emotes from servers its not in) fixing post target setup not allowing threads fixing post targets not supporting threads fixing interactions not considering the actual amount of embeds fixing some cases for events which are not in a guild
This commit is contained in:
@@ -0,0 +1,26 @@
|
||||
package dev.sheldan.abstracto.entertainment.config;
|
||||
|
||||
import dev.sheldan.abstracto.core.config.FeatureConfig;
|
||||
import dev.sheldan.abstracto.core.config.FeatureDefinition;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
@Component
|
||||
public class EconomyFeatureConfig implements FeatureConfig {
|
||||
|
||||
public static final String PAYDAY_CREDITS_CONFIG_KEY = "paydayCredits";
|
||||
public static final String PAYDAY_COOLDOWN_CONFIG_KEY = "paydayCooldown";
|
||||
public static final String SLOTS_COOLDOWN_CONFIG_KEY = "slotsCooldown";
|
||||
|
||||
@Override
|
||||
public FeatureDefinition getFeature() {
|
||||
return EntertainmentFeatureDefinition.ECONOMY;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getRequiredSystemConfigKeys() {
|
||||
return Arrays.asList(PAYDAY_CREDITS_CONFIG_KEY, PAYDAY_COOLDOWN_CONFIG_KEY, SLOTS_COOLDOWN_CONFIG_KEY);
|
||||
}
|
||||
}
|
||||
@@ -5,7 +5,7 @@ import lombok.Getter;
|
||||
|
||||
@Getter
|
||||
public enum EntertainmentFeatureDefinition implements FeatureDefinition {
|
||||
ENTERTAINMENT("entertainment");
|
||||
ENTERTAINMENT("entertainment"), ECONOMY("economy");
|
||||
|
||||
private String key;
|
||||
|
||||
|
||||
@@ -3,4 +3,5 @@ package dev.sheldan.abstracto.entertainment.config;
|
||||
public class EntertainmentSlashCommandNames {
|
||||
public static final String ENTERTAINMENT = "entertainment";
|
||||
public static final String UTILITY = "utility";
|
||||
public static final String ECONOMY = "economy";
|
||||
}
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
package dev.sheldan.abstracto.entertainment.dto;
|
||||
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Builder
|
||||
@Getter
|
||||
public class CreditGambleResult {
|
||||
private List<Integer> rolls;
|
||||
private Integer uniqueNumbers;
|
||||
private Long bid;
|
||||
private Long toBank;
|
||||
private Long toJackpot;
|
||||
private Long currentJackpot;
|
||||
private Boolean won;
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
package dev.sheldan.abstracto.entertainment.dto;
|
||||
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
|
||||
@Builder
|
||||
@Getter
|
||||
public class PayDayResult {
|
||||
private Long currentCredits;
|
||||
private Long gainedCredits;
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
package dev.sheldan.abstracto.entertainment.dto;
|
||||
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Builder
|
||||
@Getter
|
||||
public class SlotsResult {
|
||||
private Long bid;
|
||||
private Long oldCredits;
|
||||
private Long newCredits;
|
||||
private Long winnings;
|
||||
private Long factor;
|
||||
private String outComeKey;
|
||||
private List<List<String>> rows;
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package dev.sheldan.abstracto.entertainment.exception;
|
||||
|
||||
import dev.sheldan.abstracto.core.exception.AbstractoTemplatableException;
|
||||
|
||||
public class NotEnoughCreditsException extends AbstractoTemplatableException {
|
||||
@Override
|
||||
public String getTemplateName() {
|
||||
return "not_enough_wealth_exception";
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getTemplateModel() {
|
||||
return new Object();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
package dev.sheldan.abstracto.entertainment.exception;
|
||||
|
||||
import dev.sheldan.abstracto.core.exception.AbstractoTemplatableException;
|
||||
import dev.sheldan.abstracto.entertainment.model.exception.PayDayCooldownExceptionModel;
|
||||
|
||||
import java.time.Duration;
|
||||
|
||||
public class PayDayCooldownException extends AbstractoTemplatableException {
|
||||
|
||||
private final PayDayCooldownExceptionModel model;
|
||||
|
||||
public PayDayCooldownException(Duration duration) {
|
||||
this.model = PayDayCooldownExceptionModel
|
||||
.builder()
|
||||
.tryAgainDuration(duration)
|
||||
.build();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getTemplateName() {
|
||||
return "payday_cooldown_exception";
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getTemplateModel() {
|
||||
return model;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
package dev.sheldan.abstracto.entertainment.exception;
|
||||
|
||||
import dev.sheldan.abstracto.core.exception.AbstractoTemplatableException;
|
||||
import dev.sheldan.abstracto.entertainment.model.exception.PayDayCooldownExceptionModel;
|
||||
import dev.sheldan.abstracto.entertainment.model.exception.SlotsCooldownExceptionModel;
|
||||
|
||||
import java.time.Duration;
|
||||
|
||||
public class SlotsCooldownException extends AbstractoTemplatableException {
|
||||
|
||||
private final SlotsCooldownExceptionModel model;
|
||||
|
||||
public SlotsCooldownException(Duration duration) {
|
||||
this.model = SlotsCooldownExceptionModel
|
||||
.builder()
|
||||
.tryAgainDuration(duration)
|
||||
.build();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getTemplateName() {
|
||||
return "slots_cooldown_exception";
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getTemplateModel() {
|
||||
return model;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
package dev.sheldan.abstracto.entertainment.model.command;
|
||||
|
||||
import dev.sheldan.abstracto.entertainment.dto.CreditGambleResult;
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Getter
|
||||
@Builder
|
||||
public class CreditGambleResultModel {
|
||||
private List<Integer> rolls;
|
||||
private Integer uniqueNumbers;
|
||||
private Long bid;
|
||||
private Long toBank;
|
||||
private Long toJackpot;
|
||||
private Long currentJackpot;
|
||||
private Boolean won;
|
||||
|
||||
public static CreditGambleResultModel fromCreditGambleResult(CreditGambleResult creditGambleResult) {
|
||||
return CreditGambleResultModel
|
||||
.builder()
|
||||
.rolls(creditGambleResult.getRolls())
|
||||
.uniqueNumbers(creditGambleResult.getUniqueNumbers())
|
||||
.bid(creditGambleResult.getBid())
|
||||
.toBank(creditGambleResult.getToBank())
|
||||
.toJackpot(creditGambleResult.getToJackpot())
|
||||
.currentJackpot(creditGambleResult.getCurrentJackpot())
|
||||
.won(creditGambleResult.getWon())
|
||||
.build();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package dev.sheldan.abstracto.entertainment.model.command;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.template.display.MemberDisplay;
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@Builder
|
||||
public class CreditsLeaderboardEntry {
|
||||
private MemberDisplay memberDisplay;
|
||||
private Member member;
|
||||
private Long credits;
|
||||
private Integer rank;
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package dev.sheldan.abstracto.entertainment.model.command;
|
||||
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Getter
|
||||
@Builder
|
||||
public class CreditsLeaderboardResponseModel {
|
||||
private List<CreditsLeaderboardEntry> entries;
|
||||
private CreditsLeaderboardEntry ownRank;
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
package dev.sheldan.abstracto.entertainment.model.command;
|
||||
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
|
||||
@Getter
|
||||
@Builder
|
||||
public class CreditsModel {
|
||||
private CreditsLeaderboardEntry entry;
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
package dev.sheldan.abstracto.entertainment.model.command;
|
||||
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
|
||||
@Getter
|
||||
@Builder
|
||||
public class PayDayResponseModel {
|
||||
private Long currentCredits;
|
||||
private Long leaderboardPosition;
|
||||
private Long gainedCredits;
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
package dev.sheldan.abstracto.entertainment.model.command;
|
||||
|
||||
import dev.sheldan.abstracto.entertainment.dto.SlotsResult;
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Builder
|
||||
@Getter
|
||||
public class SlotsResponseModel {
|
||||
private Long bid;
|
||||
private Long oldCredits;
|
||||
private Long newCredits;
|
||||
private Long winnings;
|
||||
private Long factor;
|
||||
private String outComeKey;
|
||||
private List<List<String>> rows;
|
||||
|
||||
public static SlotsResponseModel fromSlotsResult(SlotsResult result) {
|
||||
return SlotsResponseModel
|
||||
.builder()
|
||||
.bid(result.getBid())
|
||||
.factor(result.getFactor())
|
||||
.newCredits(result.getNewCredits())
|
||||
.outComeKey(result.getOutComeKey())
|
||||
.oldCredits(result.getOldCredits())
|
||||
.rows(result.getRows())
|
||||
.winnings(result.getWinnings())
|
||||
.build();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
package dev.sheldan.abstracto.entertainment.model.database;
|
||||
|
||||
public interface EconomyLeaderboardResult {
|
||||
|
||||
Long getId();
|
||||
|
||||
Long getUserid();
|
||||
|
||||
Long getCredits();
|
||||
|
||||
Integer getRank();
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
package dev.sheldan.abstracto.entertainment.model.database;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
||||
import lombok.*;
|
||||
|
||||
import javax.persistence.*;
|
||||
import java.io.Serializable;
|
||||
import java.time.Instant;
|
||||
|
||||
@Builder
|
||||
@Entity
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Table(name = "economy_user")
|
||||
@Getter
|
||||
@Setter
|
||||
@EqualsAndHashCode
|
||||
public class EconomyUser implements Serializable {
|
||||
|
||||
@Id
|
||||
@Column(name = "id", nullable = false)
|
||||
private Long id;
|
||||
|
||||
@OneToOne(fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST, CascadeType.MERGE})
|
||||
@PrimaryKeyJoinColumn
|
||||
private AUserInAServer user;
|
||||
|
||||
@ManyToOne(fetch = FetchType.LAZY)
|
||||
@JoinColumn(name = "server_id", nullable = false)
|
||||
private AServer server;
|
||||
|
||||
@Column(name = "credits", nullable = false)
|
||||
private Long credits;
|
||||
|
||||
@Column(name = "last_slots", nullable = false)
|
||||
private Instant lastSlots;
|
||||
|
||||
@Column(name = "last_pay_day", nullable = false)
|
||||
private Instant lastPayDay;
|
||||
|
||||
@Column(name = "created", nullable = false, insertable = false, updatable = false)
|
||||
private Instant created;
|
||||
|
||||
@Column(name = "updated", insertable = false, updatable = false)
|
||||
private Instant updated;
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
package dev.sheldan.abstracto.entertainment.model.exception;
|
||||
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
|
||||
import java.time.Duration;
|
||||
|
||||
@Builder
|
||||
@Getter
|
||||
public class PayDayCooldownExceptionModel {
|
||||
private Duration tryAgainDuration;
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
package dev.sheldan.abstracto.entertainment.model.exception;
|
||||
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
|
||||
import java.time.Duration;
|
||||
|
||||
@Builder
|
||||
@Getter
|
||||
public class SlotsCooldownExceptionModel {
|
||||
private Duration tryAgainDuration;
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
package dev.sheldan.abstracto.entertainment.service;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
||||
import dev.sheldan.abstracto.entertainment.dto.CreditGambleResult;
|
||||
import dev.sheldan.abstracto.entertainment.dto.PayDayResult;
|
||||
import dev.sheldan.abstracto.entertainment.dto.SlotsResult;
|
||||
import dev.sheldan.abstracto.entertainment.model.command.CreditsLeaderboardEntry;
|
||||
import dev.sheldan.abstracto.entertainment.model.database.EconomyUser;
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
|
||||
import java.time.Duration;
|
||||
import java.util.List;
|
||||
|
||||
public interface EconomyService {
|
||||
boolean canTriggerPayDay(AUserInAServer aUserInAServer);
|
||||
boolean canTriggerSlots(AUserInAServer aUserInAServer);
|
||||
boolean canTriggerPayDay(EconomyUser economyUser);
|
||||
boolean canTriggerSlots(EconomyUser economyUser);
|
||||
Duration payDayTriggerIn(EconomyUser economyUser);
|
||||
Duration slotsTriggerIn(EconomyUser economyUser);
|
||||
EconomyUser addCredits(AUserInAServer aUserInAServer, Long credits);
|
||||
void addCredits(EconomyUser economyUser, Long credits);
|
||||
void addPayDayCredits(AUserInAServer aUserInAServer);
|
||||
PayDayResult triggerPayDay(AUserInAServer aUserInAServer);
|
||||
SlotsResult triggerSlots(AUserInAServer aUserInAServer, Long bid);
|
||||
SlotGame playSlots();
|
||||
List<CreditsLeaderboardEntry> getCreditLeaderboard(AServer server, Integer page);
|
||||
CreditsLeaderboardEntry getRankOfUser(AUserInAServer aUserInAServer);
|
||||
void transferCredits(AUserInAServer source, AUserInAServer target, Long amount);
|
||||
CreditGambleResult triggerCreditGamble(AUserInAServer aUserInAServer);
|
||||
|
||||
@Builder
|
||||
@Getter
|
||||
class SlotGame {
|
||||
private List<List<String>> rows;
|
||||
private String outcome;
|
||||
private Integer resultFactor;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package dev.sheldan.abstracto.entertainment.service.management;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
||||
import dev.sheldan.abstracto.entertainment.model.database.EconomyLeaderboardResult;
|
||||
import dev.sheldan.abstracto.entertainment.model.database.EconomyUser;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
public interface EconomyUserManagementService {
|
||||
EconomyUser createUser(AUserInAServer aUserInAServer);
|
||||
Optional<EconomyUser> getUser(AUserInAServer aUserInAServer);
|
||||
EconomyLeaderboardResult getRankOfUserInServer(AUserInAServer aUserInAServer);
|
||||
List<EconomyUser> getRanksInServer(AServer server, Integer page, Integer size);
|
||||
}
|
||||
Reference in New Issue
Block a user