Added the giveaway module V1
This commit is contained in:
parent
526dba12b8
commit
0817607697
3
SheepstarModules/GiveawayV1/.gitignore
vendored
Normal file
3
SheepstarModules/GiveawayV1/.gitignore
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
# Project exclude paths
|
||||
/target/
|
||||
.idea
|
2
SheepstarModules/GiveawayV1/README.md
Normal file
2
SheepstarModules/GiveawayV1/README.md
Normal file
@ -0,0 +1,2 @@
|
||||
# SheepstarModule-Giveaway
|
||||
The official sheepstar giveaway module
|
24
SheepstarModules/GiveawayV1/pom.xml
Normal file
24
SheepstarModules/GiveawayV1/pom.xml
Normal file
@ -0,0 +1,24 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<groupId>xyz.sheepstar</groupId>
|
||||
<artifactId>SheepstarModule-Giveaway</artifactId>
|
||||
<version>pre1.0.0</version>
|
||||
|
||||
<properties>
|
||||
<maven.compiler.source>8</maven.compiler.source>
|
||||
<maven.compiler.target>8</maven.compiler.target>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>xyz.sheepstar</groupId>
|
||||
<artifactId>SheepstarCore</artifactId>
|
||||
<version>beta1.0.2</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
</project>
|
@ -0,0 +1,27 @@
|
||||
package xyz.sheepstar.giveaway.action;
|
||||
|
||||
import xyz.sheepstar.giveaway.api.controller.GiveawayController;
|
||||
import xyz.sheepstar.giveaway.api.models.GiveawayManager;
|
||||
import xyz.sheepstar.giveaway.core.GiveawayCore;
|
||||
import xyz.sheepstar.util.action.RepeatedAction;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
public class AutomaticCloseAction extends RepeatedAction {
|
||||
|
||||
private final GiveawayManager giveawayManager = (GiveawayManager) api.getDatabase().getTableFactory().getTable(GiveawayManager.class);
|
||||
private final GiveawayController giveawayController = GiveawayCore.getGiveawayController();
|
||||
|
||||
@Override
|
||||
public long time() {
|
||||
return 5;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute() {
|
||||
giveawayManager.getExpirableGiveaways().forEach((giveawayId, dateTime) -> {
|
||||
if (dateTime.compareTo(LocalDateTime.now()) <= 0)
|
||||
giveawayController.endGiveaway(giveawayId, giveawayManager.getGiveawayById(giveawayId).getGuild());
|
||||
});
|
||||
}
|
||||
}
|
@ -0,0 +1,184 @@
|
||||
package xyz.sheepstar.giveaway.api.controller;
|
||||
|
||||
import net.dv8tion.jda.api.entities.Guild;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import net.dv8tion.jda.api.entities.TextChannel;
|
||||
import net.dv8tion.jda.api.entities.User;
|
||||
import net.dv8tion.jda.api.interactions.components.ButtonStyle;
|
||||
import org.apache.commons.lang3.RandomStringUtils;
|
||||
import org.apache.commons.lang3.RandomUtils;
|
||||
import xyz.sheepstar.giveaway.api.entities.Giveaway;
|
||||
import xyz.sheepstar.giveaway.api.models.GiveawayManager;
|
||||
import xyz.sheepstar.giveaway.commands.CloseGiveawayCommand;
|
||||
import xyz.sheepstar.util.bot.builder.message.DefaultResponseBuilder;
|
||||
import xyz.sheepstar.util.bot.listener.ListenerBasics;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class GiveawayController extends ListenerBasics {
|
||||
|
||||
private final GiveawayManager giveawayManager = (GiveawayManager) table(GiveawayManager.class);
|
||||
|
||||
/**
|
||||
* Gets the "start"-message of the giveaway
|
||||
*
|
||||
* @param giveawayID The id of the giveaway
|
||||
* @param title The title of the giveaway
|
||||
* @param description The description of the giveaway
|
||||
* @param guild The guild that created the giveaway
|
||||
* @param expiry The expiry date of the giveaway
|
||||
* @param closeButton Should a close button be displayed?
|
||||
* @param maxWinners The max amount of winners
|
||||
* @return the created message
|
||||
*/
|
||||
public Message getStartMessage(String giveawayID, String title, String description, Guild guild, Date expiry, boolean closeButton, int maxWinners) {
|
||||
DefaultResponseBuilder embedBuilder = DefaultResponseBuilder.createSimple(guild, CloseGiveawayCommand.class)
|
||||
.withTitle(translate("giveaway.giveaway_started", guild));
|
||||
|
||||
embedBuilder.addField(":gift: " + translate("giveaway.object.title", guild), title);
|
||||
|
||||
if (description != null)
|
||||
embedBuilder.addField(":clipboard: " + translate("giveaway.object.description", guild), description);
|
||||
|
||||
if (expiry != null)
|
||||
embedBuilder.addField(String.format(":alarm_clock: %s <t:%s:R>", translate("poll.ends", guild), expiry.getTime() / 1000));
|
||||
|
||||
embedBuilder.addField(translate("giveaway.object.react", guild, "\uD83C\uDF89"));
|
||||
|
||||
if (closeButton)
|
||||
embedBuilder.addButton(ButtonStyle.DANGER, "end#" + giveawayID, expiry == null
|
||||
? translate("giveaway.end_giveaway", guild) : translate("giveaway.end_now", guild));
|
||||
|
||||
return embedBuilder.build();
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the "end"-message of the giveaway
|
||||
*
|
||||
* @param giveaway The giveaway object
|
||||
* @param winner The list of winners that should be displayed
|
||||
* @return the created "end"-message
|
||||
*/
|
||||
public Message getEndMessage(Giveaway giveaway, List<User> winner) {
|
||||
DefaultResponseBuilder embedBuilder = DefaultResponseBuilder.createSimple(giveaway.getGuild(), CloseGiveawayCommand.class)
|
||||
.withTitle(translate("giveaway.giveaway_ended", giveaway.getGuild()));
|
||||
|
||||
embedBuilder.addField(":gift: " + translate("giveaway.object.title", giveaway.getGuild()), giveaway.getTitle());
|
||||
|
||||
if (giveaway.getDescription() != null)
|
||||
embedBuilder.addField(":clipboard: " + translate("giveaway.object.description", giveaway.getGuild()), giveaway.getDescription());
|
||||
|
||||
ArrayList<String> userMentions = new ArrayList<>();
|
||||
|
||||
winner.forEach(user -> userMentions.add(user.getAsMention()));
|
||||
|
||||
if (userMentions.isEmpty())
|
||||
userMentions.add(":no_entry_sign: " + translate("giveaway.object.found_no_one", giveaway.getGuild()));
|
||||
|
||||
embedBuilder.addField(":trophy: " + translate("giveaway.object.winner", giveaway.getGuild(), winner.size()), userMentions);
|
||||
|
||||
return embedBuilder.build();
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new giveaway
|
||||
*
|
||||
* @param title The title the giveaway should have
|
||||
* @param description The description of the giveaway
|
||||
* Set it to <b>NULL</b>, if you don't have one
|
||||
* @param channel The channel in which the message should be sent
|
||||
* @param expiry The expiry date of the giveaway
|
||||
* @param closeButton Should a close button be displayed?
|
||||
* @param maxEntries The max amount of entries in the giveaway
|
||||
* @return the id of the created giveaway
|
||||
*/
|
||||
public String createGiveaway(String title, String description, TextChannel channel, Date expiry, boolean closeButton, int maxEntries) {
|
||||
String pollID = RandomStringUtils.randomAlphanumeric(10).toUpperCase();
|
||||
|
||||
channel.sendMessage(getStartMessage(pollID, title, description, channel.getGuild(), expiry, closeButton, maxEntries)).queue(message -> {
|
||||
giveawayManager.createGiveaway(pollID, title, description, message, expiry, maxEntries);
|
||||
message.addReaction("\uD83C\uDF89").queue();
|
||||
});
|
||||
|
||||
return pollID;
|
||||
}
|
||||
|
||||
/**
|
||||
* Ends a giveaway
|
||||
*
|
||||
* @param id The id of the giveaway
|
||||
* @param guild The guild that created the giveaway
|
||||
* @return the list of users that won. <code>NULL</code> if the giveaway could not be found
|
||||
*/
|
||||
public List<User> endGiveaway(String id, Guild guild) {
|
||||
if (!giveawayManager.isCreated(id, guild)) return null;
|
||||
|
||||
try {
|
||||
Giveaway giveaway = giveawayManager.getGiveawayById(id);
|
||||
|
||||
int maxWinners = giveaway.getMaxEntries();
|
||||
|
||||
List<User> emote_reactions = new ArrayList<>();
|
||||
giveaway.getMessage().getReactions().forEach(reaction -> emote_reactions.addAll(reaction.retrieveUsers().complete()));
|
||||
|
||||
List<User> winners = pickWinners(emote_reactions.stream().filter(user -> !user.isBot()).collect(Collectors.toList()),
|
||||
maxWinners);
|
||||
|
||||
giveawayManager.deleteGiveaway(id, guild);
|
||||
|
||||
giveaway.getMessage().editMessage(getEndMessage(giveaway, winners)).queue();
|
||||
giveaway.getMessage().clearReactions().queue();
|
||||
|
||||
if (api.getBotManager().getSettingsManager().getSettingString(guild, "giveaway", "mention_winners").equals("yes"))
|
||||
winners.forEach(user -> giveaway.getMessage().getChannel().sendMessage(user.getAsMention())
|
||||
.queue(message -> message.delete().queue()));
|
||||
|
||||
return winners;
|
||||
} catch (Exception e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Picks winners from a list
|
||||
*
|
||||
* @param possibleWinners All possible winners
|
||||
* @param maxWinners The max amount of winners
|
||||
* @return the list of users that actually won
|
||||
*/
|
||||
public List<User> pickWinners(List<User> possibleWinners, int maxWinners) {
|
||||
List<User> winners = new ArrayList<>();
|
||||
|
||||
if (possibleWinners.size() == 0) return winners;
|
||||
|
||||
for (int i = 0; i < maxWinners; i++) {
|
||||
if (i > possibleWinners.size()) break;
|
||||
|
||||
User currentWinner = pickWinner(possibleWinners);
|
||||
|
||||
while (winners.contains(currentWinner)) {
|
||||
currentWinner = pickWinner(possibleWinners);
|
||||
}
|
||||
|
||||
winners.add(currentWinner);
|
||||
|
||||
possibleWinners.remove(currentWinner);
|
||||
}
|
||||
|
||||
return winners;
|
||||
}
|
||||
|
||||
/**
|
||||
* Picks a winner from the list
|
||||
*
|
||||
* @param winners The list of possible winners
|
||||
* @return the lucky person that won
|
||||
*/
|
||||
public User pickWinner(List<User> winners) {
|
||||
return winners.get(RandomUtils.nextInt(0, winners.size()));
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,113 @@
|
||||
package xyz.sheepstar.giveaway.api.entities;
|
||||
|
||||
import net.dv8tion.jda.api.entities.Guild;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import net.dv8tion.jda.api.entities.TextChannel;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
public class Giveaway {
|
||||
|
||||
private final String id;
|
||||
private final String title;
|
||||
private final String description;
|
||||
private final LocalDateTime expiryDate;
|
||||
private final int maxEntries;
|
||||
|
||||
private final Guild guild;
|
||||
private final TextChannel channel;
|
||||
private final Message message;
|
||||
|
||||
/**
|
||||
* Constructor of the {@link Giveaway}
|
||||
*
|
||||
* @param id The id of the giveaway
|
||||
* @param title The title of the giveaway
|
||||
* @param description The description of the giveaway
|
||||
* @param expiryDate The expiry date of the giveaway
|
||||
* @param message The message of the giveaway
|
||||
* @param maxEntries The max number of winners
|
||||
*/
|
||||
public Giveaway(String id, String title, String description, LocalDateTime expiryDate, Message message, int maxEntries) {
|
||||
this.id = id;
|
||||
this.title = title;
|
||||
this.description = description;
|
||||
this.expiryDate = expiryDate;
|
||||
this.guild = message.getGuild();
|
||||
this.channel = message.getTextChannel();
|
||||
this.message = message;
|
||||
this.maxEntries = maxEntries;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the id of the giveaway
|
||||
*
|
||||
* @return the id of the giveaway
|
||||
*/
|
||||
public String getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the title of the giveaway
|
||||
*
|
||||
* @return the title of the giveaway
|
||||
*/
|
||||
public String getTitle() {
|
||||
return title;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the description of the giveaway
|
||||
*
|
||||
* @return the description of the giveaway
|
||||
*/
|
||||
public String getDescription() {
|
||||
return description;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the expiry date of the giveaway
|
||||
*
|
||||
* @return the expiry date od the giveaway
|
||||
*/
|
||||
public LocalDateTime getExpiryDate() {
|
||||
return expiryDate;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the guild that created the giveaway
|
||||
*
|
||||
* @return the guild that created the giveaway
|
||||
*/
|
||||
public Guild getGuild() {
|
||||
return guild;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the channel of the giveaway
|
||||
*
|
||||
* @return the channel of the giveaway
|
||||
*/
|
||||
public TextChannel getChannel() {
|
||||
return channel;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the giveaway message
|
||||
*
|
||||
* @return the giveaway message
|
||||
*/
|
||||
public Message getMessage() {
|
||||
return message;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the number of max winners
|
||||
*
|
||||
* @return the number of max winners
|
||||
*/
|
||||
public int getMaxEntries() {
|
||||
return maxEntries;
|
||||
}
|
||||
}
|
@ -0,0 +1,108 @@
|
||||
package xyz.sheepstar.giveaway.api.models;
|
||||
|
||||
import de.gnmyt.sqltoolkit.manager.SelectionManager;
|
||||
import de.gnmyt.sqltoolkit.types.SQLType;
|
||||
import net.dv8tion.jda.api.entities.Guild;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import xyz.sheepstar.giveaway.api.entities.Giveaway;
|
||||
import xyz.sheepstar.util.sql.SheepManager;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
|
||||
public class GiveawayManager extends SheepManager {
|
||||
|
||||
@Override
|
||||
protected String tableName() {
|
||||
return "giveaway_giveaways";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void tableFields() {
|
||||
custom("giveaway_id").add();
|
||||
custom("title").add();
|
||||
custom("description").allowNull(true).add();
|
||||
custom("guild_id").add();
|
||||
custom("channel_id").add();
|
||||
custom("message_id").add();
|
||||
custom("max_entries").type(SQLType.INTEGER).add();
|
||||
custom("expiry").type(SQLType.DATETIME).allowNull(true).add();
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the provided giveaway has been created
|
||||
*
|
||||
* @param id The id of the giveaway you want to check
|
||||
* @param guild The guild that created the giveaway
|
||||
* @return <code>true</code> if the giveaway has been created, otherwise <code>false</code>
|
||||
*/
|
||||
public boolean isCreated(String id, Guild guild) {
|
||||
return select().where("giveaway_id", id).where("guild_id", guild.getId()).getResult().exists();
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new giveaway
|
||||
*
|
||||
* @param id The id of the giveaway
|
||||
* @param title The title of the giveaway
|
||||
* @param description The description of the giveaway
|
||||
* @param message The message of the giveaway
|
||||
* @param expiry The expiry date of the giveaway
|
||||
* @param maxEntries The max number of winners
|
||||
*/
|
||||
public void createGiveaway(String id, String title, String description, Message message, Date expiry, int maxEntries) {
|
||||
if (isCreated(id, message.getGuild())) return;
|
||||
insert()
|
||||
.value("giveaway_id", id)
|
||||
.value("title", title)
|
||||
.value("description", description)
|
||||
.value("guild_id", message.getGuild().getId())
|
||||
.value("channel_id", message.getChannel().getId())
|
||||
.value("message_id", message.getId())
|
||||
.value("expiry", expiry)
|
||||
.value("max_entries", maxEntries)
|
||||
.execute();
|
||||
}
|
||||
|
||||
/**
|
||||
* Deletes a giveaway from the table
|
||||
*
|
||||
* @param id The id of the giveaway
|
||||
* @param guild The guild that created the giveaway
|
||||
*/
|
||||
public void deleteGiveaway(String id, Guild guild) {
|
||||
if (!isCreated(id, guild)) return;
|
||||
delete().where("giveaway_id", id).where("guild_id", guild.getId()).execute();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Gets all giveaways that <b>can</b> expire
|
||||
*
|
||||
* @return all giveaways that can expire
|
||||
*/
|
||||
public HashMap<String, LocalDateTime> getExpirableGiveaways() {
|
||||
HashMap<String, LocalDateTime> expirable_giveaways = new HashMap<>();
|
||||
select().getResult().getList().forEach(entry -> {
|
||||
if (entry.get("expiry") != null)
|
||||
expirable_giveaways.put((String) entry.get("giveaway_id"), (LocalDateTime) entry.get("expiry"));
|
||||
});
|
||||
return expirable_giveaways;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a giveaway object by id
|
||||
*
|
||||
* @param id The id of the giveaway
|
||||
* @return the created {@link Giveaway} instance
|
||||
*/
|
||||
public Giveaway getGiveawayById(String id) {
|
||||
SelectionManager giveaway = select().where("giveaway_id", id);
|
||||
return new Giveaway(id, giveaway.getResult().getString("title"),
|
||||
giveaway.getResult().getString("description"), (LocalDateTime) giveaway.getResult().getObject("expiry"),
|
||||
api.getJDA().getTextChannelById(giveaway.getResult().getString("channel_id"))
|
||||
.retrieveMessageById(giveaway.getResult().getString("message_id")).complete(), giveaway.getResult().getInteger("max_entries"));
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,37 @@
|
||||
package xyz.sheepstar.giveaway.commands;
|
||||
|
||||
import xyz.sheepstar.giveaway.api.controller.GiveawayController;
|
||||
import xyz.sheepstar.giveaway.core.GiveawayCore;
|
||||
import xyz.sheepstar.util.bot.command.Arguments;
|
||||
import xyz.sheepstar.util.bot.command.GuildCommand;
|
||||
import xyz.sheepstar.util.bot.command.GuildEventController;
|
||||
import xyz.sheepstar.util.bot.command.PublicCommandException;
|
||||
import xyz.sheepstar.util.bot.command.annotations.CommandMeta;
|
||||
import xyz.sheepstar.util.bot.permission.PermissionNode;
|
||||
|
||||
@CommandMeta(aliases = "giveaway", subAliases = "close", description = "Closes an existing giveaway", permission = PermissionNode.ADMINISTRATOR)
|
||||
public class CloseGiveawayCommand extends GuildCommand {
|
||||
|
||||
@Override
|
||||
public void usage() {
|
||||
usage("id", "The id of the giveaway").required(true).add();
|
||||
}
|
||||
|
||||
private final GiveawayController giveawayController = GiveawayCore.getGiveawayController();
|
||||
|
||||
@Override
|
||||
public void execute(GuildEventController event, Arguments args) throws Exception {
|
||||
String id = args.getString("id");
|
||||
if (giveawayController.endGiveaway(id, event.getGuild()) != null) {
|
||||
event.success("giveaway.giveaway_ended_successfully", id);
|
||||
} else throw new PublicCommandException("giveaway.unknown_id", id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void buttonClick(GuildEventController event, String id) throws Exception {
|
||||
if (!(id.startsWith("end") && id.contains("#"))) return;
|
||||
String giveawayId = id.split("#")[1];
|
||||
|
||||
giveawayController.endGiveaway(giveawayId, event.getGuild());
|
||||
}
|
||||
}
|
@ -0,0 +1,61 @@
|
||||
package xyz.sheepstar.giveaway.commands;
|
||||
|
||||
import net.dv8tion.jda.api.entities.ChannelType;
|
||||
import net.dv8tion.jda.api.entities.GuildChannel;
|
||||
import net.dv8tion.jda.api.entities.TextChannel;
|
||||
import net.dv8tion.jda.api.interactions.commands.OptionType;
|
||||
import xyz.sheepstar.giveaway.api.controller.GiveawayController;
|
||||
import xyz.sheepstar.giveaway.core.GiveawayCore;
|
||||
import xyz.sheepstar.util.bot.command.Arguments;
|
||||
import xyz.sheepstar.util.bot.command.GuildCommand;
|
||||
import xyz.sheepstar.util.bot.command.GuildEventController;
|
||||
import xyz.sheepstar.util.bot.command.PublicCommandException;
|
||||
import xyz.sheepstar.util.bot.command.annotations.CommandMeta;
|
||||
import xyz.sheepstar.util.bot.permission.PermissionNode;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
@CommandMeta(aliases = "giveaway", subAliases = "create", description = "Creates a new giveaway", permission = PermissionNode.ADMINISTRATOR)
|
||||
public class CreateGiveawayCommand extends GuildCommand {
|
||||
|
||||
private final GiveawayController giveawayController = GiveawayCore.getGiveawayController();
|
||||
|
||||
@Override
|
||||
public void usage() {
|
||||
usage("price", "What can the user win?").required(true).add();
|
||||
|
||||
usage("description", "Want to add more information about the price / giveaway?").add();
|
||||
|
||||
usage("time", "When should the poll automatically be dissolved").add();
|
||||
|
||||
usage(OptionType.INTEGER, "winners", "How many winners can win this item? (Default: 1, allowed: 1-25)").add();
|
||||
|
||||
usage(OptionType.BOOLEAN, "close_button", "Should the poll show a close button? Otherwise you get the id to close the poll").add();
|
||||
|
||||
usage(OptionType.CHANNEL, "channel", "The channel in which the message should be sent (for example if you have an poll channel)").add();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(GuildEventController event, Arguments args) throws Exception {
|
||||
GuildChannel channel = args.exists("channel") ? args.getChannel("channel") : event.getChannel();
|
||||
|
||||
if (channel.getType() != ChannelType.TEXT)
|
||||
throw new PublicCommandException("giveaway.error.channel.must_be_text");
|
||||
|
||||
String title = args.getString("price");
|
||||
String description = args.getString("description");
|
||||
Date date = args.exists("time") ? getTimeFromString(args.getString("time")) : null;
|
||||
|
||||
int winners = args.exists("winners") ? args.getInteger("winners") : 1;
|
||||
|
||||
boolean close_button = !args.exists("close_button") || args.getBoolean("close_button");
|
||||
|
||||
if (winners < 1 || winners > 25)
|
||||
throw new PublicCommandException("giveaway.error.incorrect_winner_value");
|
||||
|
||||
String id = giveawayController.createGiveaway(title, description, (TextChannel) channel, date, close_button, winners);
|
||||
|
||||
event.primary("giveaway.giveaway_created", channel.getAsMention(), id);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,33 @@
|
||||
package xyz.sheepstar.giveaway.core;
|
||||
|
||||
import xyz.sheepstar.giveaway.action.AutomaticCloseAction;
|
||||
import xyz.sheepstar.giveaway.api.controller.GiveawayController;
|
||||
import xyz.sheepstar.giveaway.api.models.GiveawayManager;
|
||||
import xyz.sheepstar.giveaway.commands.CloseGiveawayCommand;
|
||||
import xyz.sheepstar.giveaway.commands.CreateGiveawayCommand;
|
||||
import xyz.sheepstar.util.bot.manager.ImportManager;
|
||||
import xyz.sheepstar.util.module.SheepstarModule;
|
||||
|
||||
public class GiveawayCore extends SheepstarModule {
|
||||
|
||||
private static GiveawayController giveawayController;
|
||||
private ImportManager importManager;
|
||||
|
||||
@Override
|
||||
public void onEnable() {
|
||||
importManager = new ImportManager(getAPI(), "giveaway");
|
||||
|
||||
registerTable(new GiveawayManager());
|
||||
|
||||
giveawayController = new GiveawayController();
|
||||
|
||||
importManager.registerCommand(new CreateGiveawayCommand());
|
||||
importManager.registerCommand(new CloseGiveawayCommand());
|
||||
|
||||
new AutomaticCloseAction().start();
|
||||
}
|
||||
|
||||
public static GiveawayController getGiveawayController() {
|
||||
return giveawayController;
|
||||
}
|
||||
}
|
@ -0,0 +1,3 @@
|
||||
main: xyz.sheepstar.giveaway.core.GiveawayCore
|
||||
name: giveaway
|
||||
author: Mathias Wagner
|
Reference in New Issue
Block a user