added module responsible for accumulating the dependencies and resulting in a jar

added channels module
added help info object to command configuration
added description field to parameter
added modules for commands (and packed modules), they are mapped by name
added post command execution interface
added support for optional parameters
added support for using guildchannel as parameter
added printing of modules to help command
added service beans to wrap over the operations on the repository
added synchronizing of channels/roles on startup (controlled by flag)
added builder annotations to model classes
added more model classes
This commit is contained in:
Sheldan
2019-12-12 16:47:54 +01:00
parent 42cfe33b3a
commit 5c6b7b9a78
61 changed files with 1136 additions and 138 deletions
@@ -0,0 +1,40 @@
package dev.sheldan.abstracto.core.models;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import net.dv8tion.jda.api.entities.ChannelType;
import javax.persistence.*;
import java.util.Set;
@Entity
@Table(name="channel")
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class AChannel implements SnowFlake {
@Id
@Getter
public Long id;
@Getter
@ManyToMany(mappedBy = "channels")
private Set<ChannelGroup> groups;
@Getter
@Enumerated(EnumType.STRING)
private AChannelType type;
public static AChannelType getAChannelType(ChannelType type) {
switch (type) {
case TEXT: return AChannelType.TEXT;
case PRIVATE: return AChannelType.DM;
case VOICE: return AChannelType.VOICE;
case CATEGORY: return AChannelType.CATEGORY;
default: return AChannelType.UNKOWN;
}
}
}
@@ -0,0 +1,5 @@
package dev.sheldan.abstracto.core.models;
public enum AChannelType {
TEXT, DM, VOICE, NEWS, CATEGORY, UNKOWN
}
@@ -0,0 +1,25 @@
package dev.sheldan.abstracto.core.models;
import lombok.*;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name="role")
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ARole implements SnowFlake {
@Id
@Getter @Setter
private Long id;
@Column(unique = true)
@Getter @Setter
private String name;
}
@@ -0,0 +1,35 @@
package dev.sheldan.abstracto.core.models;
import lombok.*;
import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;
@Entity
@Table(name = "server")
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class AServer implements SnowFlake {
@Id
@Getter @Setter
private Long id;
@Getter
private String name;
@OneToMany(fetch = FetchType.LAZY)
@Getter
@Builder.Default
private List<ARole> roles = new ArrayList<>();
@OneToMany(fetch = FetchType.LAZY)
@Getter
@Builder.Default
private List<AChannel> channels = new ArrayList<>();
}
@@ -0,0 +1,33 @@
package dev.sheldan.abstracto.core.models;
import lombok.*;
import javax.persistence.*;
import java.util.Set;
@Entity
@Table(name="channelGroup")
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class ChannelGroup {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Getter
private Long id;
@Column
@Getter @Setter
private String groupName;
@ManyToMany
@JoinTable(
name = "channel_in_group",
joinColumns = @JoinColumn(name = "group_id"),
inverseJoinColumns = @JoinColumn(name = "channel_id"))
@Getter
private Set<AChannel> channels;
}
@@ -0,0 +1,34 @@
package dev.sheldan.abstracto.core.models;
import lombok.*;
import javax.persistence.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@Entity
@Table(name="posttarget")
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class PostTarget {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Getter
private Long id;
@Column(unique = true)
@Getter
private String name;
@OneToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "id", nullable = false)
@Getter @Setter
private AChannel AChannel;
public static String JOIN_LOG = "joinlog";
public static List<String> AVAILABLE_POST_TARGETS = Arrays.asList(JOIN_LOG);
}
@@ -0,0 +1,5 @@
package dev.sheldan.abstracto.core.models;
public interface SnowFlake {
Long getId();
}
@@ -1,4 +1,4 @@
package dev.sheldan.abstracto.service;
package dev.sheldan.abstracto.core.service;
import net.dv8tion.jda.api.JDA;
import org.springframework.stereotype.Service;
@@ -0,0 +1,9 @@
package dev.sheldan.abstracto.core.service;
import dev.sheldan.abstracto.core.models.AChannel;
import dev.sheldan.abstracto.core.models.AChannelType;
public interface ChannelService {
AChannel loadChannel(Long id);
AChannel createChannel(Long id, AChannelType type);
}
@@ -0,0 +1,10 @@
package dev.sheldan.abstracto.core.service;
import dev.sheldan.abstracto.core.models.AChannel;
import dev.sheldan.abstracto.core.models.PostTarget;
public interface PostTargetService {
void createPostTarget(String name, AChannel targetChanel);
void createOrUpdate(String name, AChannel targetChannel);
void updatePostTarget(PostTarget target, AChannel newTargetChannel);
}
@@ -0,0 +1,7 @@
package dev.sheldan.abstracto.core.service;
import dev.sheldan.abstracto.core.models.ARole;
public interface RoleService {
ARole createRole(Long id);
}
@@ -0,0 +1,9 @@
package dev.sheldan.abstracto.core.service;
import dev.sheldan.abstracto.core.models.AChannel;
import dev.sheldan.abstracto.core.models.AServer;
public interface ServerService {
AServer createServer(Long id);
void addChannelToServer(AServer server, AChannel channel);
}
@@ -1,4 +1,4 @@
package dev.sheldan.abstracto.service;
package dev.sheldan.abstracto.core.service;
import org.springframework.stereotype.Service;
@@ -6,5 +6,6 @@ import javax.security.auth.login.LoginException;
@Service
public interface Startup {
public void startBot() throws LoginException;
void startBot() throws LoginException;
void synchronize();
}