Search in sources :

Example 6 with Message

use of net.dv8tion.jda.api.entities.Message in project c0debaseBot by Biospheere.

the class Pagination method createFirst.

public void createFirst(boolean descending, TextChannel textChannel) {
    final EmbedBuilder embedBuilder = getEmbed(textChannel.getGuild(), descending);
    buildList(embedBuilder, 1, descending, textChannel.getGuild());
    textChannel.sendMessage(embedBuilder.build()).queue((Message success) -> {
        success.addReaction(EmojiManager.getForAlias("arrow_left").getUnicode()).queue();
        success.addReaction(EmojiManager.getForAlias("arrow_right").getUnicode()).queue();
    });
}
Also used : EmbedBuilder(net.dv8tion.jda.api.EmbedBuilder) Message(net.dv8tion.jda.api.entities.Message)

Example 7 with Message

use of net.dv8tion.jda.api.entities.Message in project lavaplayer by sedmelluq.

the class BotApplicationManager method onMessageReceived.

@Override
public void onMessageReceived(final MessageReceivedEvent event) {
    Member member = event.getMember();
    if (!event.isFromType(ChannelType.TEXT) || member == null || member.getUser().isBot()) {
        return;
    }
    BotGuildContext guildContext = getContext(event.getGuild());
    controllerManager.dispatchMessage(guildContext.controllers, "!/", event.getMessage(), new BotCommandMappingHandler() {

        @Override
        public void commandNotFound(Message message, String name) {
        }

        @Override
        public void commandWrongParameterCount(Message message, String name, String usage, int given, int required) {
            event.getTextChannel().sendMessage("Wrong argument count for command").queue();
        }

        @Override
        public void commandWrongParameterType(Message message, String name, String usage, int index, String value, Class<?> expectedType) {
            event.getTextChannel().sendMessage("Wrong argument type for command").queue();
            ;
        }

        @Override
        public void commandRestricted(Message message, String name) {
            event.getTextChannel().sendMessage("Command not permitted").queue();
            ;
        }

        @Override
        public void commandException(Message message, String name, Throwable throwable) {
            event.getTextChannel().sendMessage("Command threw an exception").queue();
            ;
            log.error("Command with content {} threw an exception.", message.getContentDisplay(), throwable);
        }
    });
}
Also used : BotCommandMappingHandler(com.sedmelluq.discord.lavaplayer.demo.controller.BotCommandMappingHandler) Message(net.dv8tion.jda.api.entities.Message) Member(net.dv8tion.jda.api.entities.Member)

Example 8 with Message

use of net.dv8tion.jda.api.entities.Message in project Saber-Bot by notem.

the class ListCommand method action.

@Override
public void action(String prefix, String[] args, MessageReceivedEvent event) {
    int index = 0;
    Integer entryId = ParsingUtilities.encodeIDToInt(args[index++]);
    ScheduleEntry se = Main.getEntryManager().getEntryFromGuild(entryId, event.getGuild().getId());
    String titleUrl = se.getTitleUrl() == null ? "https://nnmathe.ws/saber" : se.getTitleUrl();
    String title = se.getTitle() + " [" + ParsingUtilities.intToEncodedID(entryId) + "]";
    String content = "";
    List<String> userFilters = new ArrayList<>();
    List<String> roleFilters = new ArrayList<>();
    boolean filterByType = false;
    Set<String> typeFilters = new HashSet<>();
    boolean mobileFlag = false;
    boolean IdFlag = false;
    for (; index < args.length; index++) {
        if (args[index].equalsIgnoreCase("mobile") || args[index].equalsIgnoreCase("m")) {
            mobileFlag = true;
            continue;
        }
        if (args[index].equalsIgnoreCase("id") || args[index].equalsIgnoreCase("i")) {
            IdFlag = true;
            continue;
        }
        String filterType = args[index].split(":")[0].toLowerCase().trim();
        String filterValue = args[index].split(":")[1].trim();
        switch(filterType.toLowerCase()) {
            case "r":
            case "role":
                roleFilters.add(filterValue.replace("<@&", "").replace(">", ""));
                break;
            case "u":
            case "user":
                userFilters.add(filterValue.replace("<@", "").replace(">", ""));
                break;
            case "t":
            case "type":
                filterByType = true;
                typeFilters.add(filterValue);
                break;
        }
    }
    // maximum number of characters before creating a new message
    int lengthCap = 1900;
    // maximum number of lines until new message, in mobile mode
    int mobileLineCap = 25;
    Set<String> uniqueMembers = new HashSet<>();
    Map<String, String> options = Main.getScheduleManager().getRSVPOptions(se.getChannelId());
    for (String type : options.values()) {
        if (!filterByType || typeFilters.contains(type)) {
            content += "**\"" + type + "\"\n======================**\n";
            Set<String> members = se.getRsvpMembersOfType(type);
            for (String id : members) {
                // if the message is nearing maximum length, or if in mobile mode and the max lines have been reached
                if (content.length() > lengthCap || (mobileFlag && StringUtils.countMatches(content, "\n") > mobileLineCap)) {
                    // build and send the embedded message object
                    Message message = (new MessageBuilder()).setEmbed((new EmbedBuilder()).setDescription(content).setTitle(title, titleUrl).build()).build();
                    MessageUtilities.sendMsg(message, event.getChannel(), null);
                    // clear the content sting
                    content = "*continued. . .* \n";
                }
                if (id.matches("\\d+")) {
                    // cases in which the id is most likely a valid discord user's ID
                    Member member = event.getGuild().getMemberById(id);
                    if (checkMember(member, userFilters, roleFilters)) {
                        // if the user is still a member of the guild, add to the list
                        uniqueMembers.add(member.getUser().getId());
                        content += this.getNameDisplay(mobileFlag, IdFlag, member);
                    } else // otherwise, remove the member from the event and update
                    {
                        Set<String> tmp = se.getRsvpMembersOfType(type);
                        tmp.remove(id);
                        se.getRsvpMembersOfType(type).remove(id);
                        Main.getEntryManager().updateEntry(se, false);
                    }
                } else {
                    // handles cases in which a non-discord user was added by an admin
                    uniqueMembers.add(id);
                    content += "*" + id + "*\n";
                }
            }
        }
        content += "\n";
    }
    if (!filterByType || typeFilters.contains("no-input")) {
        // generate a list of all members of the guild who pass the filter and map to their ID
        List<String> noInput = event.getGuild().getMembers().stream().filter(member -> checkMember(member, userFilters, roleFilters)).map(member -> member.getUser().getId()).collect(Collectors.toList());
        for (String type : options.values()) {
            noInput.removeAll(se.getRsvpMembersOfType(type));
        }
        content += "**No input\n======================\n**";
        if (!filterByType & noInput.size() > 10) {
            content += " Too many users to show: " + noInput.size() + " users with no rsvp\n";
        } else
            for (String id : noInput) {
                if (content.length() > lengthCap || (mobileFlag && StringUtils.countMatches(content, "\n") > mobileLineCap)) {
                    // build and send the embedded message object
                    Message message = (new MessageBuilder()).setEmbed((new EmbedBuilder()).setDescription(content).setTitle(title, titleUrl).build()).build();
                    MessageUtilities.sendMsg(message, event.getChannel(), null);
                    // clear the content sting
                    content = "*continued. . .* \n";
                }
                Member member = event.getGuild().getMemberById(id);
                content += this.getNameDisplay(mobileFlag, IdFlag, member);
            }
    }
    String footer = uniqueMembers.size() + " unique member(s) appear in this search";
    // build and send the embedded message object
    Message message = (new MessageBuilder()).setEmbed((new EmbedBuilder()).setDescription(content).setTitle(title, titleUrl).setFooter(footer, null).build()).build();
    MessageUtilities.sendMsg(message, event.getChannel(), null);
}
Also used : Message(net.dv8tion.jda.api.entities.Message) Command(ws.nmathe.saber.commands.Command) java.util(java.util) CommandInfo(ws.nmathe.saber.commands.CommandInfo) ISnowflake(net.dv8tion.jda.api.entities.ISnowflake) Logging(ws.nmathe.saber.utils.Logging) EmbedBuilder(net.dv8tion.jda.api.EmbedBuilder) Member(net.dv8tion.jda.api.entities.Member) StringUtils(org.apache.commons.lang3.StringUtils) ScheduleEntry(ws.nmathe.saber.core.schedule.ScheduleEntry) Collectors(java.util.stream.Collectors) MessageBuilder(net.dv8tion.jda.api.MessageBuilder) Role(net.dv8tion.jda.api.entities.Role) MessageUtilities(ws.nmathe.saber.utils.MessageUtilities) Main(ws.nmathe.saber.Main) VerifyUtilities(ws.nmathe.saber.utils.VerifyUtilities) MessageReceivedEvent(net.dv8tion.jda.api.events.message.MessageReceivedEvent) ParsingUtilities(ws.nmathe.saber.utils.ParsingUtilities) Message(net.dv8tion.jda.api.entities.Message) EmbedBuilder(net.dv8tion.jda.api.EmbedBuilder) ScheduleEntry(ws.nmathe.saber.core.schedule.ScheduleEntry) MessageBuilder(net.dv8tion.jda.api.MessageBuilder) Member(net.dv8tion.jda.api.entities.Member)

Example 9 with Message

use of net.dv8tion.jda.api.entities.Message in project Saber-Bot by notem.

the class CalendarConverter method importCalendar.

/**
 * Purges a schedule from entries and adds events (after conversion)
 * from the next 7 day span of a Google Calendar
 * @param address (String) valid address of calendar
 * @param channel (MessageChannel) channel to sync with
 * @param service connected calendar service with user credentials
 */
public void importCalendar(String address, TextChannel channel, Calendar service) {
    // sanity checks
    if (channel == null || address == null)
        return;
    if (!Main.getScheduleManager().isSchedule(channel.getId()))
        return;
    // query the google calendar address for the list of events
    Events events;
    try {
        ZonedDateTime min = ZonedDateTime.now();
        ZonedDateTime max = min.plusDays(Main.getScheduleManager().getSyncLength(channel.getId()));
        events = service.events().list(address).setTimeMin(new DateTime(min.format(EventRecurrence.RFC3339_FORMATTER))).setTimeMax(new DateTime(max.format(EventRecurrence.RFC3339_FORMATTER))).setOrderBy("startTime").setSingleEvents(true).setMaxResults(Main.getBotSettingsManager().getMaxEntries()).execute();
    } catch (Exception e) {
        Logging.exception(this.getClass(), e);
        return;
    }
    try // convert the list of Google Events into discord event entries
    {
        // send 'is typing' while the sync is in progress
        channel.sendTyping().queue();
        /* lock the schedule for syncing; schedule is unlocked in finally block */
        Main.getScheduleManager().lock(channel.getId());
        // change the zone to match the calendar
        // only if the zone has not been manually set for that schedule
        ZoneId zone = ZoneId.of(events.getTimeZone());
        Boolean syncZone = Main.getDBDriver().getScheduleCollection().find(eq("_id", channel.getId())).first().getBoolean("timezone_sync", false);
        if (syncZone) {
            Main.getScheduleManager().setTimeZone(channel.getId(), zone);
        }
        // a set of all unique (not child of a recurring event) events
        HashSet<String> uniqueEvents = new HashSet<>();
        // process events
        for (Event event : events.getItems()) {
            try // convert the list of Google Events into discord event entries
            {
                // continue to send 'is typing'
                channel.sendTyping().queue();
                // if the unique google event ID does not appear in the already processed events
                // convert the event and add it to the schedule
                String recurrenceId = event.getRecurringEventId();
                String googleId = recurrenceId == null ? event.getId() : recurrenceId;
                if (!uniqueEvents.contains(googleId)) {
                    // declare and initialize event parameters
                    ZonedDateTime start, end;
                    String title;
                    ArrayList<String> comments = new ArrayList<>();
                    int repeat = 0;
                    ZonedDateTime expire = null;
                    String imageUrl = null;
                    String thumbnailUrl = null;
                    ZonedDateTime rsvpDeadline = null;
                    String titleUrl = null;
                    Map<String, Integer> rsvpLimits = new HashMap<>();
                    if (event.getStart().getDateTime() == null) {
                        /* parse start and end dates for all day events */
                        start = ZonedDateTime.of(LocalDate.parse(event.getStart().getDate().toStringRfc3339()), LocalTime.MIN, zone);
                        end = ZonedDateTime.of(LocalDate.parse(event.getEnd().getDate().toStringRfc3339()), LocalTime.MIN, zone);
                    } else {
                        /* parse start and end times for normal events */
                        start = ZonedDateTime.parse(event.getStart().getDateTime().toStringRfc3339(), EventRecurrence.RFC3339_FORMATTER).withZoneSameInstant(zone);
                        end = ZonedDateTime.parse(event.getEnd().getDateTime().toStringRfc3339(), EventRecurrence.RFC3339_FORMATTER).withZoneSameInstant(zone);
                    }
                    // get event title
                    if (event.getSummary() == null)
                        title = "(No title)";
                    else
                        title = event.getSummary();
                    // process event description into event comments or other settings
                    if (event.getDescription() != null) {
                        // process the description line by line
                        String description = HTMLStripper.cleanDescription(event.getDescription().replace("\n", "<br>"));
                        for (String comment : description.split("\n")) {
                            comment = comment.trim();
                            Logging.info(this.getClass(), comment);
                            String lowerCase = comment.toLowerCase();
                            // image
                            if (lowerCase.startsWith("image:")) {
                                // split to limit:
                                String[] tmp = comment.split(":", 2);
                                if (tmp.length > 1) {
                                    imageUrl = tmp[1].trim().replaceAll(" ", "");
                                    if (!VerifyUtilities.verifyUrl(imageUrl))
                                        imageUrl = null;
                                }
                            } else // thumbnail
                            if (lowerCase.startsWith("thumbnail:")) {
                                String[] tmp = comment.split(":", 2);
                                if (tmp.length > 1) {
                                    thumbnailUrl = tmp[1].trim().trim().replaceAll(" ", "");
                                    if (!VerifyUtilities.verifyUrl(thumbnailUrl))
                                        thumbnailUrl = null;
                                }
                            } else // limit
                            if (lowerCase.startsWith("limit:")) {
                                // split to limit:
                                String[] tmp = comment.split(":", 2);
                                if (tmp.length > 1) {
                                    // split into white space separated segments
                                    String[] str = tmp[1].trim().split("[^\\S\n\r]+");
                                    if (str.length >= 2) {
                                        // rebuild the rsvp group name
                                        StringBuilder name = new StringBuilder();
                                        for (int i = 0; i < str.length - 1; i++) {
                                            name.append(str[i]);
                                            if (i != str.length - 2)
                                                name.append(" ");
                                        }
                                        // parse the limit
                                        Integer limit = -1;
                                        if (VerifyUtilities.verifyInteger(str[str.length - 1]))
                                            limit = Integer.parseInt(str[str.length - 1]);
                                        rsvpLimits.put(name.toString(), limit);
                                    }
                                }
                            } else // title url
                            if (lowerCase.startsWith("url:")) {
                                String[] tmp = comment.split(":", 2);
                                if (tmp.length > 1 && VerifyUtilities.verifyUrl(tmp[1].trim().replaceAll(" ", "")))
                                    titleUrl = tmp[1].trim().replaceAll(" ", "");
                            } else // deadline
                            if (lowerCase.startsWith("deadline:")) {
                                String tmp = lowerCase.replace("deadline:", "").trim().replaceAll(" ", "");
                                if (VerifyUtilities.verifyDate(tmp))
                                    rsvpDeadline = ZonedDateTime.of(ParsingUtilities.parseDate(tmp, zone), LocalTime.MAX, zone);
                            } else // plaintext comment
                            if (!comment.trim().isEmpty()) {
                                comments.add(comment);
                            }
                        }
                    }
                    // get the event recurrence information
                    List<String> recurrence = event.getRecurrence();
                    if (recurrenceId != null)
                        recurrence = service.events().get(address, recurrenceId).execute().getRecurrence();
                    // parse the event recurrence information
                    if (recurrence != null) {
                        // determine the start date
                        ZonedDateTime dtStart = // if orig is null, use start
                        event.getOriginalStartTime() == null ? // if orig is null, use start
                        start : (event.getOriginalStartTime().getDateTime() == null ? start : ZonedDateTime.parse(event.getOriginalStartTime().getDateTime().toStringRfc3339(), EventRecurrence.RFC3339_FORMATTER).withZoneSameInstant(zone));
                        EventRecurrence eventRecurrence = new EventRecurrence(recurrence, dtStart);
                        expire = eventRecurrence.getExpire();
                        repeat = eventRecurrence.getRepeat();
                    }
                    // if the google event already exists as a saber event on the schedule, update it
                    // otherwise add as a new saber event
                    Document doc = Main.getDBDriver().getEventCollection().find(and(eq("channelId", channel.getId()), eq("googleId", googleId))).first();
                    // should the event be flagged as already started?
                    boolean hasStarted = start.isBefore(ZonedDateTime.now());
                    if (doc != null && (new ScheduleEntry(doc)).getMessageObject() != null) {
                        /* update an existing event */
                        ScheduleEntry se = (new ScheduleEntry(doc)).setTitle(title).setStart(start).setEnd(end).setRepeat(repeat).setGoogleId(googleId).setExpire(expire).setStarted(hasStarted).setComments(comments).setLocation(event.getLocation());
                        // set special attributes if not null
                        if (titleUrl != null)
                            se.setTitleUrl(titleUrl);
                        if (imageUrl != null)
                            se.setImageUrl(imageUrl);
                        if (thumbnailUrl != null)
                            se.setThumbnailUrl(thumbnailUrl);
                        if (rsvpDeadline != null)
                            se.setRsvpDeadline(rsvpDeadline);
                        if (rsvpLimits.keySet().size() > 0)
                            se.setRsvpLimits(rsvpLimits);
                        // update event reminders using schedule default settings
                        se.reloadReminders(Main.getScheduleManager().getReminders(se.getChannelId())).reloadEndReminders(Main.getScheduleManager().getEndReminders(se.getChannelId())).regenerateAnnouncementOverrides();
                        Main.getEntryManager().updateEntry(se, false);
                    } else {
                        /* create a new event */
                        ScheduleEntry se = (new ScheduleEntry(channel, title, start, end)).setTitleUrl(titleUrl != null ? titleUrl : event.getHtmlLink()).setRepeat(repeat).setGoogleId(googleId).setExpire(expire).setStarted(hasStarted).setComments(comments).setLocation(event.getLocation());
                        // set special attributes if not null
                        if (imageUrl != null)
                            se.setImageUrl(imageUrl);
                        if (thumbnailUrl != null)
                            se.setThumbnailUrl(thumbnailUrl);
                        if (rsvpDeadline != null)
                            se.setRsvpDeadline(rsvpDeadline);
                        if (rsvpLimits.keySet().size() > 0)
                            se.setRsvpLimits(rsvpLimits);
                        Main.getEntryManager().newEntry(se, false);
                    }
                    // add to google ID to unique event mapping
                    uniqueEvents.add(recurrenceId == null ? event.getId() : recurrenceId);
                }
            } catch (Exception e) {
                Logging.exception(this.getClass(), e);
            }
        }
        // purge channel of all entries on schedule that aren't in uniqueEvents
        Bson query = and(eq("channelId", channel.getId()), nin("googleId", uniqueEvents));
        Main.getDBDriver().getEventCollection().find(query).forEach((Consumer<? super Document>) document -> {
            ScheduleEntry entry = Main.getEntryManager().getEntry((Integer) document.get("_id"));
            Message msg = entry.getMessageObject();
            if (msg == null)
                return;
            Main.getEntryManager().removeEntry((Integer) document.get("_id"));
            MessageUtilities.deleteMsg(msg, null);
        });
        // set channel topic
        JDA jda = Main.getShardManager().getJDA(channel.getGuild().getId());
        String calLink = "https://calendar.google.com/calendar/embed?src=" + address;
        boolean hasPerms = channel.getGuild().getMember(jda.getSelfUser()).hasPermission(channel, Permission.MANAGE_CHANNEL);
        if (hasPerms)
            channel.getManager().setTopic(calLink).queue();
    } catch (Exception e) {
        Logging.exception(this.getClass(), e);
    } finally {
        // syncing done, unlock the channel
        Main.getScheduleManager().unlock(channel.getId());
    }
    // auto-sort
    EntryManager.autoSort(true, channel.getId());
}
Also used : Message(net.dv8tion.jda.api.entities.Message) Document(org.bson.Document) java.util(java.util) JDA(net.dv8tion.jda.api.JDA) Permission(net.dv8tion.jda.api.Permission) EventRecurrence(ws.nmathe.saber.core.schedule.EventRecurrence) Logging(ws.nmathe.saber.utils.Logging) IOException(java.io.IOException) TextChannel(net.dv8tion.jda.api.entities.TextChannel) ScheduleEntry(ws.nmathe.saber.core.schedule.ScheduleEntry) Bson(org.bson.conversions.Bson) Consumer(java.util.function.Consumer) Filters(com.mongodb.client.model.Filters) com.google.api.services.calendar.model(com.google.api.services.calendar.model) DateTime(com.google.api.client.util.DateTime) java.time(java.time) DateTimeFormatter(java.time.format.DateTimeFormatter) EntryManager(ws.nmathe.saber.core.schedule.EntryManager) MessageUtilities(ws.nmathe.saber.utils.MessageUtilities) Calendar(com.google.api.services.calendar.Calendar) Main(ws.nmathe.saber.Main) VerifyUtilities(ws.nmathe.saber.utils.VerifyUtilities) ParsingUtilities(ws.nmathe.saber.utils.ParsingUtilities) Message(net.dv8tion.jda.api.entities.Message) JDA(net.dv8tion.jda.api.JDA) Document(org.bson.Document) DateTime(com.google.api.client.util.DateTime) Bson(org.bson.conversions.Bson) EventRecurrence(ws.nmathe.saber.core.schedule.EventRecurrence) ScheduleEntry(ws.nmathe.saber.core.schedule.ScheduleEntry) IOException(java.io.IOException)

Example 10 with Message

use of net.dv8tion.jda.api.entities.Message in project Saber-Bot by notem.

the class EntryManager method newEntry.

/**
 * Create a new entry on a schedule
 * @param se (ScheduleEntry) the base ScheduleEntry object to use
 */
public Integer newEntry(ScheduleEntry se, boolean sort) {
    // identify which shard is responsible for the schedule
    String guildId = se.getGuildId();
    String channelId = se.getChannelId();
    JDA jda = Main.getShardManager().getJDA(guildId);
    // generate the reminders
    se.reloadReminders(Main.getScheduleManager().getReminders(se.getChannelId())).reloadEndReminders(Main.getScheduleManager().getEndReminders(se.getChannelId()));
    // process expiration date
    Date expire = null;
    if (se.getExpire() != null) {
        expire = Date.from(se.getExpire().toInstant());
    }
    // process deadline
    Date deadline = null;
    if (se.getDeadline() != null) {
        deadline = Date.from(se.getDeadline().toInstant());
    }
    // is rsvp enabled on the channel set empty rsvp lists
    if (Main.getScheduleManager().isRSVPEnabled(se.getChannelId())) {
        for (String type : Main.getScheduleManager().getRSVPOptions(se.getChannelId()).values()) {
            se.setRsvpMembers(type, new ArrayList<>());
        }
    }
    // generate event display message
    se.setId(this.newId());
    Message message = MessageGenerator.generate(se);
    // send message to schedule
    TextChannel channel = jda.getTextChannelById(channelId);
    Date finalExpire = expire;
    Date finalDeadline = deadline;
    MessageUtilities.sendMsg(message, channel, msg -> {
        try {
            // add reaction options if rsvp is enabled
            if (Main.getScheduleManager().isRSVPEnabled(channelId)) {
                Map<String, String> map = Main.getScheduleManager().getRSVPOptions(channelId);
                addRSVPReactions(map, Main.getScheduleManager().getRSVPClear(channelId), msg, se);
            }
            // add new document
            Document entryDocument = new Document("_id", se.getId()).append("title", se.getTitle()).append("start", Date.from(se.getStart().toInstant())).append("end", Date.from(se.getEnd().toInstant())).append("comments", se.getComments()).append("recurrence", se.getRepeat()).append("reminders", se.getReminders()).append("end_reminders", se.getEndReminders()).append("url", se.getTitleUrl()).append("hasStarted", se.hasStarted()).append("messageId", msg.getId()).append("channelId", se.getChannelId()).append("googleId", se.getGoogleId()).append("rsvp_members", se.getRsvpMembers()).append("rsvp_limits", se.getRsvpLimits()).append("image", se.getImageUrl()).append("thumbnail", se.getThumbnailUrl()).append("orig_start", Date.from(se.getRecurrence().getOriginalStart().toInstant())).append("count", se.getRecurrence().getCount()).append("start_disabled", false).append("end_disabled", false).append("reminders_disabled", false).append("expire", finalExpire).append("deadline", finalDeadline).append("guildId", se.getGuildId()).append("location", se.getLocation()).append("description", se.getDescription()).append("color", se.getColor());
            Main.getDBDriver().getEventCollection().insertOne(entryDocument);
            // auto-sort the schedule if configured
            autoSort(sort, channelId);
        } catch (Exception e) {
            Logging.exception(EntryManager.class, e);
        }
    });
    return se.getId();
}
Also used : TextChannel(net.dv8tion.jda.api.entities.TextChannel) Message(net.dv8tion.jda.api.entities.Message) JDA(net.dv8tion.jda.api.JDA) Document(org.bson.Document) MongoException(com.mongodb.MongoException)

Aggregations

Message (net.dv8tion.jda.api.entities.Message)18 Collectors (java.util.stream.Collectors)7 EmbedBuilder (net.dv8tion.jda.api.EmbedBuilder)7 java.util (java.util)5 ScheduleEntry (ws.nmathe.saber.core.schedule.ScheduleEntry)5 JDA (net.dv8tion.jda.api.JDA)4 Permission (net.dv8tion.jda.api.Permission)4 Role (net.dv8tion.jda.api.entities.Role)4 TextChannel (net.dv8tion.jda.api.entities.TextChannel)4 java.time (java.time)3 TimeUnit (java.util.concurrent.TimeUnit)3 Consumer (java.util.function.Consumer)3 MessageBuilder (net.dv8tion.jda.api.MessageBuilder)3 Guild (net.dv8tion.jda.api.entities.Guild)3 Member (net.dv8tion.jda.api.entities.Member)3 MantaroData (net.kodehawa.mantarobot.data.MantaroData)3 EmoteReference (net.kodehawa.mantarobot.utils.commands.EmoteReference)3 Document (org.bson.Document)3 Main (ws.nmathe.saber.Main)3 Logging (ws.nmathe.saber.utils.Logging)3