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

View File

@@ -22,5 +22,9 @@
<groupId>net.dv8tion</groupId>
<artifactId>JDA</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
</dependencies>
</project>

View File

@@ -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;
}
}
}

View File

@@ -0,0 +1,5 @@
package dev.sheldan.abstracto.core.models;
public enum AChannelType {
TEXT, DM, VOICE, NEWS, CATEGORY, UNKOWN
}

View File

@@ -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;
}

View File

@@ -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<>();
}

View File

@@ -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;
}

View File

@@ -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);
}

View File

@@ -0,0 +1,5 @@
package dev.sheldan.abstracto.core.models;
public interface SnowFlake {
Long getId();
}

View File

@@ -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;

View File

@@ -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);
}

View File

@@ -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);
}

View File

@@ -0,0 +1,7 @@
package dev.sheldan.abstracto.core.service;
import dev.sheldan.abstracto.core.models.ARole;
public interface RoleService {
ARole createRole(Long id);
}

View File

@@ -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);
}

View File

@@ -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();
}