Search in sources :

Example 1 with QueueObject

use of com.github.vaerys.objects.QueueObject in project DiscordSailv2 by Vaerys-Dawn.

the class QueueHandler method reactionAdded.

public static void reactionAdded(CommandObject object, IReaction reaction) {
    ReactionEmoji thumbsUp = Utility.getReaction(Constants.EMOJI_APPROVE);
    ReactionEmoji thumbsDown = Utility.getReaction(Constants.EMOJI_DISAPPROVE);
    ReactionEmoji ok = Utility.getReaction("white_check_mark");
    ReactionEmoji no = Utility.getReaction(Constants.EMOJI_REMOVE_PIN);
    ArrayList<QueueObject> queuedMessages = Globals.getDailyMessages().getQueue();
    IMessage message = object.message.get();
    IUser owner = object.client.creator.get();
    // exit if not the queue channel
    if (object.channel.longID != Globals.queueChannelID) {
        return;
    }
    // exit if not the owner.
    if (reaction.getCount() == 0) {
        return;
    }
    if (!reaction.getUserReacted(owner)) {
        return;
    }
    // exit if no embeds
    if (message.getEmbeds().size() == 0) {
        return;
    }
    // exit if not enough reactions
    if (message.getReactions().size() <= 1) {
        return;
    }
    checkQueue();
    for (QueueObject q : queuedMessages) {
        if (q.getMessageId() == message.getLongID()) {
            // getToggles the embed
            IEmbed embed = message.getEmbeds().get(0);
            RequestBuffer.request(() -> message.removeAllReactions()).get();
            switch(q.getType()) {
                // do if daily request
                case Constants.QUEUE_DAILY:
                    try {
                        // getToggles the data
                        long userID = Long.parseLong(embed.getFooter().getText());
                        long uID = -1;
                        DayOfWeek day = null;
                        for (IEmbed.IEmbedField f : embed.getEmbedFields()) {
                            if (f.getName().equalsIgnoreCase(dowString)) {
                                day = DayOfWeek.valueOf(f.getValue());
                            } else if (f.getName().equalsIgnoreCase(uIDString)) {
                                uID = Long.parseLong(f.getValue());
                            }
                        }
                        UserObject user = new UserObject(object.client.getUserByID(userID), null);
                        // do if accepted
                        if (reaction.getEmoji().equals(thumbsUp)) {
                            user.sendDm("> A daily message you sent was approved. **[" + uID + "]**");
                            Globals.getDailyMessages().getMessages().add(new DailyMessage(embed.getDescription(), day, userID, uID));
                            RequestBuffer.request(() -> message.addReaction(ok)).get();
                            q.toggleMarkedForRemoval();
                            return;
                        // do if denied
                        } else if (reaction.getEmoji().equals(thumbsDown)) {
                            user.sendDm("> A daily message you sent was denied. **[" + uID + "]**");
                            q.toggleMarkedForRemoval();
                            RequestBuffer.request(() -> message.addReaction(no)).get();
                            return;
                        } else {
                            return;
                        }
                    } catch (NumberFormatException e) {
                        q.toggleMarkedForRemoval();
                    } catch (IllegalArgumentException e) {
                        q.toggleMarkedForRemoval();
                    }
                default:
                    return;
            }
        }
    }
}
Also used : QueueObject(com.github.vaerys.objects.QueueObject) DayOfWeek(java.time.DayOfWeek) UserObject(com.github.vaerys.masterobjects.UserObject) DailyMessage(com.github.vaerys.objects.DailyMessage) ReactionEmoji(sx.blah.discord.handle.impl.obj.ReactionEmoji)

Example 2 with QueueObject

use of com.github.vaerys.objects.QueueObject in project DiscordSailv2 by Vaerys-Dawn.

the class QueueHandler method checkQueue.

public static void checkQueue() {
    IChannel queueChannel = Globals.client.getChannelByID(Globals.queueChannelID);
    if (queueChannel == null)
        return;
    ArrayList<QueueObject> queuedMessages = Globals.getDailyMessages().getQueue();
    ListIterator iterator = queuedMessages.listIterator();
    while (iterator.hasNext()) {
        QueueObject object = (QueueObject) iterator.next();
        IMessage item = queueChannel.getMessageByID(object.getMessageId());
        if (item == null) {
            item = RequestBuffer.request(() -> {
                return queueChannel.fetchMessage(object.getMessageId());
            }).get();
        }
        if (item == null) {
            iterator.remove();
        } else if (object.isMarkedForRemoval()) {
            iterator.remove();
        }
    }
}
Also used : QueueObject(com.github.vaerys.objects.QueueObject) ListIterator(java.util.ListIterator)

Example 3 with QueueObject

use of com.github.vaerys.objects.QueueObject in project DiscordSailv2 by Vaerys-Dawn.

the class DailyMessages method newDailyMsgUID.

public long newDailyMsgUID() {
    long result;
    Random random = new Random();
    List<Long> uIDs = dailyMessages.stream().filter(dailyMessage -> dailyMessage.getUID() != -1).map(dailyMessage -> dailyMessage.getUID()).collect(Collectors.toList());
    uIDs.addAll(queuedRequests.stream().map(queueObject -> queueObject.getuID()).collect(Collectors.toList()));
    if (uIDs.size() >= 8999) {
        return -1;
    }
    // for (DailyMessage d : dailyMessages) {
    // if (d.getUID() != -1) {
    // uIDs.add(d.getUID());
    // }
    // }
    // for (QueueObject o : queuedRequests) {
    // uIDs.add(o.getuID());
    // }
    result = random.nextInt(9000) + 1000;
    while (uIDs.contains(result)) {
        result = random.nextInt(9000) + 1000;
    }
    return result;
}
Also used : DailyMessage(com.github.vaerys.objects.DailyMessage) QueueObject(com.github.vaerys.objects.QueueObject) List(java.util.List) CommandObject(com.github.vaerys.commands.CommandObject) Globals(com.github.vaerys.main.Globals) GlobalFile(com.github.vaerys.templates.GlobalFile) DayOfWeek(java.time.DayOfWeek) ZonedDateTime(java.time.ZonedDateTime) Random(java.util.Random) ZoneOffset(java.time.ZoneOffset) Collectors(java.util.stream.Collectors) ArrayList(java.util.ArrayList) Random(java.util.Random)

Example 4 with QueueObject

use of com.github.vaerys.objects.QueueObject in project DiscordSailv2 by Vaerys-Dawn.

the class QueueHandler method addToQueue.

public static void addToQueue(CommandObject object, String content, DayOfWeek dayOfWeek, String type) {
    ReactionEmoji thumbsUp = Utility.getReaction(Constants.EMOJI_APPROVE);
    ReactionEmoji thumbsDown = Utility.getReaction(Constants.EMOJI_DISAPPROVE);
    IChannel channel = object.client.get().getChannelByID(Globals.queueChannelID);
    if (channel != null) {
        switch(type) {
            case Constants.QUEUE_DAILY:
                long uID = Globals.getDailyMessages().newDailyMsgUID();
                if (uID == -1) {
                    object.client.creator.sendDm("> Max limit of Daily messages hit.");
                    break;
                }
                XEmbedBuilder embedBuilder = new XEmbedBuilder(object);
                embedBuilder.withAuthorName("New Daily Message - " + object.guild.get().getName());
                embedBuilder.withFooterText(object.user.longID + "");
                embedBuilder.withTitle(object.user.username);
                embedBuilder.withDesc(content);
                embedBuilder.appendField(dowString, dayOfWeek + "", true);
                embedBuilder.appendField(uIDString, uID + "", true);
                IMessage message = RequestHandler.sendEmbedMessage("", embedBuilder, channel).get();
                RequestBuffer.request(() -> message.addReaction(thumbsUp)).get();
                RequestBuffer.request(() -> message.addReaction(thumbsDown)).get();
                Globals.getDailyMessages().getQueue().add(new QueueObject(message.getLongID(), uID, type));
                checkQueue();
                return;
            default:
                return;
        }
    }
}
Also used : XEmbedBuilder(com.github.vaerys.objects.XEmbedBuilder) QueueObject(com.github.vaerys.objects.QueueObject) ReactionEmoji(sx.blah.discord.handle.impl.obj.ReactionEmoji)

Aggregations

QueueObject (com.github.vaerys.objects.QueueObject)4 DailyMessage (com.github.vaerys.objects.DailyMessage)2 DayOfWeek (java.time.DayOfWeek)2 ReactionEmoji (sx.blah.discord.handle.impl.obj.ReactionEmoji)2 CommandObject (com.github.vaerys.commands.CommandObject)1 Globals (com.github.vaerys.main.Globals)1 UserObject (com.github.vaerys.masterobjects.UserObject)1 XEmbedBuilder (com.github.vaerys.objects.XEmbedBuilder)1 GlobalFile (com.github.vaerys.templates.GlobalFile)1 ZoneOffset (java.time.ZoneOffset)1 ZonedDateTime (java.time.ZonedDateTime)1 ArrayList (java.util.ArrayList)1 List (java.util.List)1 ListIterator (java.util.ListIterator)1 Random (java.util.Random)1 Collectors (java.util.stream.Collectors)1