Search in sources :

Example 41 with Message

use of net.dv8tion.jda.core.entities.Message in project MantaroBot by Mantaro.

the class ReactionOperations method create.

public static Future<Void> create(Message message, long timeoutSeconds, ReactionOperation operation, String... defaultReactions) {
    if (!message.getAuthor().equals(message.getJDA().getSelfUser()))
        throw new IllegalArgumentException("Must provide a message sent by the bot");
    Future<Void> f = create(message.getIdLong(), timeoutSeconds, operation);
    if (defaultReactions.length > 0) {
        AtomicInteger index = new AtomicInteger();
        AtomicReference<Consumer<Void>> c = new AtomicReference<>();
        Consumer<Throwable> ignore = (t) -> {
        };
        c.set(ignored -> {
            // Ignore this if we already cancelled this operation.
            if (f.isCancelled())
                return;
            int i = index.incrementAndGet();
            if (i < defaultReactions.length) {
                if (message.getGuild() != null && message.getGuild().getSelfMember() != null) {
                    message.addReaction(reaction(defaultReactions[i])).queue(c.get(), ignore);
                }
            }
        });
        message.addReaction(reaction(defaultReactions[0])).queue(c.get(), ignore);
    }
    return f;
}
Also used : MessageReactionAddEvent(net.dv8tion.jda.core.events.message.react.MessageReactionAddEvent) ExpiringMap(net.jodah.expiringmap.ExpiringMap) CompletableFuture(java.util.concurrent.CompletableFuture) AtomicReference(java.util.concurrent.atomic.AtomicReference) Message(net.dv8tion.jda.core.entities.Message) MessageReactionRemoveEvent(net.dv8tion.jda.core.events.message.react.MessageReactionRemoveEvent) TimeUnit(java.util.concurrent.TimeUnit) Consumer(java.util.function.Consumer) Future(java.util.concurrent.Future) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) Event(net.dv8tion.jda.core.events.Event) ReactionOperation(net.kodehawa.mantarobot.core.listeners.operations.core.ReactionOperation) EventListener(net.dv8tion.jda.core.hooks.EventListener) MessageReactionRemoveAllEvent(net.dv8tion.jda.core.events.message.react.MessageReactionRemoveAllEvent) Operation(net.kodehawa.mantarobot.core.listeners.operations.core.Operation) Consumer(java.util.function.Consumer) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) AtomicReference(java.util.concurrent.atomic.AtomicReference)

Example 42 with Message

use of net.dv8tion.jda.core.entities.Message in project MantaroBot by Mantaro.

the class DiscordUtils method listText.

public static Future<Void> listText(GuildMessageReceivedEvent event, int timeoutSeconds, boolean canEveryoneUse, IntIntObjectFunction<EmbedBuilder> supplier, String... parts) {
    if (parts.length == 0)
        return null;
    List<MessageEmbed> embeds = new ArrayList<>();
    StringBuilder sb = new StringBuilder();
    int total;
    {
        int t = 0;
        int c = 0;
        for (String s : parts) {
            if (s.length() + c + 1 > MessageEmbed.TEXT_MAX_LENGTH) {
                t++;
                c = 0;
            }
            c += s.length() + 1;
        }
        if (c > 0)
            t++;
        total = t;
    }
    for (String s : parts) {
        int l = s.length() + 1;
        if (l > MessageEmbed.TEXT_MAX_LENGTH)
            throw new IllegalArgumentException("Length for one of the pages is greater than the maximum");
        if (sb.length() + l > MessageEmbed.TEXT_MAX_LENGTH) {
            EmbedBuilder eb = supplier.apply(embeds.size() + 1, total);
            eb.setDescription(sb.toString());
            embeds.add(eb.build());
            sb = new StringBuilder();
        }
        sb.append(s).append('\n');
    }
    if (sb.length() > 0) {
        EmbedBuilder eb = supplier.apply(embeds.size() + 1, total);
        eb.setDescription(sb.toString());
        embeds.add(eb.build());
    }
    if (embeds.size() == 1) {
        event.getChannel().sendMessage(embeds.get(0)).queue();
        return null;
    }
    AtomicInteger index = new AtomicInteger();
    Message m = event.getChannel().sendMessage(embeds.get(0)).complete();
    return InteractiveOperations.createOverriding(event.getChannel(), timeoutSeconds, e -> {
        if (!canEveryoneUse && e.getAuthor().getIdLong() != event.getAuthor().getIdLong())
            return Operation.IGNORED;
        if (e.getChannel().getMessageById(m.getIdLong()) == null)
            return Operation.IGNORED;
        if (e.getMessage().getContentRaw().equals("&p <<") || e.getMessage().getContentRaw().equals("&page <<")) {
            if (index.get() == 0)
                return Operation.IGNORED;
            m.editMessage(embeds.get(index.decrementAndGet())).queue();
        } else if (e.getMessage().getContentRaw().equals("&p >>") || e.getMessage().getContentRaw().equals("&page >>")) {
            if (index.get() + 1 >= embeds.size())
                return Operation.IGNORED;
            m.editMessage(embeds.get(index.incrementAndGet())).queue();
        }
        if (e.getMessage().getContentRaw().equals("&cancel")) {
            m.delete().queue();
            return Operation.COMPLETED;
        }
        return Operation.IGNORED;
    });
}
Also used : EmbedBuilder(net.dv8tion.jda.core.EmbedBuilder) MessageEmbed(net.dv8tion.jda.core.entities.MessageEmbed) Message(net.dv8tion.jda.core.entities.Message) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) ArrayList(java.util.ArrayList)

Example 43 with Message

use of net.dv8tion.jda.core.entities.Message in project MantaroBot by Mantaro.

the class DiscordUtils method listText.

public static Future<Void> listText(GuildMessageReceivedEvent event, int timeoutSeconds, boolean canEveryoneUse, List<String> parts) {
    if (parts.size() == 0)
        return null;
    if (parts.size() == 1) {
        event.getChannel().sendMessage(parts.get(0)).queue();
        return null;
    }
    AtomicInteger index = new AtomicInteger();
    Message m = event.getChannel().sendMessage(parts.get(0)).complete();
    return InteractiveOperations.createOverriding(event.getChannel(), timeoutSeconds, e -> {
        if (!canEveryoneUse && e.getAuthor().getIdLong() != event.getAuthor().getIdLong())
            return Operation.IGNORED;
        if (e.getChannel().getMessageById(m.getIdLong()) == null)
            return Operation.IGNORED;
        if (e.getMessage().getContentRaw().equals("&p <<") || e.getMessage().getContentRaw().equals("&page <<")) {
            if (index.get() == 0)
                return Operation.IGNORED;
            m.editMessage(String.format("%s\n**Page: %d**", parts.get(index.decrementAndGet()), index.get() + 1)).queue();
        } else if (e.getMessage().getContentRaw().equals("&p >>") || e.getMessage().getContentRaw().equals("&page >>")) {
            if (index.get() + 1 >= parts.size())
                return Operation.IGNORED;
            m.editMessage(String.format("%s\n**Page: %d**", parts.get(index.incrementAndGet()), index.get() + 1)).queue();
        }
        if (e.getMessage().getContentRaw().equals("&cancel")) {
            m.delete().queue();
            return Operation.COMPLETED;
        }
        return Operation.IGNORED;
    });
}
Also used : Message(net.dv8tion.jda.core.entities.Message) AtomicInteger(java.util.concurrent.atomic.AtomicInteger)

Example 44 with Message

use of net.dv8tion.jda.core.entities.Message in project MantaroBot by Mantaro.

the class DiscordUtils method listText.

public static Future<Void> listText(GuildMessageReceivedEvent event, int timeoutSeconds, boolean canEveryoneUse, EmbedBuilder base, List<List<MessageEmbed.Field>> parts) {
    if (parts.size() == 0)
        return null;
    for (MessageEmbed.Field f : parts.get(0)) {
        base.addField(f);
    }
    base.setDescription("**Total pages: " + parts.size() + ".**\nUse **&p>>** and **&p <<** to move across pages.\n**Reference " + EmoteReference.BUY + " Buy " + EmoteReference.SELL + " Sell.**");
    if (parts.size() == 1) {
        event.getChannel().sendMessage(base.build()).queue();
        return null;
    }
    AtomicInteger index = new AtomicInteger();
    Message m = event.getChannel().sendMessage(base.build()).complete();
    return InteractiveOperations.createOverriding(event.getChannel(), timeoutSeconds, e -> {
        if (!canEveryoneUse && e.getAuthor().getIdLong() != event.getAuthor().getIdLong())
            return Operation.IGNORED;
        if (e.getChannel().getMessageById(m.getIdLong()) == null)
            return Operation.IGNORED;
        if (e.getMessage().getContentRaw().equals("&p <<") || e.getMessage().getContentRaw().equals("&page <<")) {
            if (index.get() == 0)
                return Operation.IGNORED;
            EmbedBuilder toSend = addAllFields(base, parts.get(index.decrementAndGet()));
            toSend.setFooter("Current page: " + (index.get() + 1), null);
            m.editMessage(toSend.build()).queue();
        } else if (e.getMessage().getContentRaw().equals("&p >>") || e.getMessage().getContentRaw().equals("&page >>")) {
            if (index.get() + 1 >= parts.size())
                return Operation.IGNORED;
            EmbedBuilder toSend = addAllFields(base, parts.get(index.incrementAndGet()));
            toSend.setFooter("Current page: " + (index.get() + 1), null);
            m.editMessage(toSend.build()).queue();
        }
        if (e.getMessage().getContentRaw().equals("&cancel")) {
            m.delete().queue();
            return Operation.COMPLETED;
        }
        return Operation.IGNORED;
    });
}
Also used : EmbedBuilder(net.dv8tion.jda.core.EmbedBuilder) MessageEmbed(net.dv8tion.jda.core.entities.MessageEmbed) Message(net.dv8tion.jda.core.entities.Message) AtomicInteger(java.util.concurrent.atomic.AtomicInteger)

Example 45 with Message

use of net.dv8tion.jda.core.entities.Message in project FlareBot by FlareBot.

the class YouTubeExtractor method process.

@Override
public void process(String input, Player player, Message message, User user) throws Exception {
    AudioItem item;
    try {
        item = GeneralUtils.resolveItem(player, input);
    } catch (IllegalArgumentException e) {
        MessageUtils.editMessage(null, MessageUtils.getEmbed(user).setDescription("Could not get that video/playlist! Make sure the URL is correct!").setColor(Color.RED), message);
        return;
    } catch (IllegalStateException e) {
        if (e.getMessage().contains("Vevo")) {
            MessageUtils.editMessage(null, MessageUtils.getEmbed(user).setDescription("We are blocked from playing this video as it is from Vevo! " + "Sorry for any inconvenience.").setColor(Color.RED), message);
            return;
        }
        MessageUtils.editMessage(null, MessageUtils.getEmbed(user).setDescription("There was a problem with that video!\n" + "If the error continues, join our support discord: " + Constants.INVITE_URL + "\n" + "Input: " + input + "\n" + "Error Message: " + e.getMessage() + "\n" + "Stacktrace: " + MessageUtils.paste(GeneralUtils.getStackTrace(e))).setColor(Color.RED), message);
        return;
    }
    List<AudioTrack> audioTracks = new ArrayList<>();
    String name;
    if (item instanceof AudioPlaylist) {
        AudioPlaylist audioPlaylist = (AudioPlaylist) item;
        audioTracks.addAll(audioPlaylist.getTracks());
        name = audioPlaylist.getName();
    } else {
        AudioTrack track = (AudioTrack) item;
        /*if (track.getInfo().length == 0 || track.getInfo().isStream) {
                EmbedBuilder builder = MessageUtils.getEmbed(user).setDescription("Cannot queue a livestream!");
                MessageUtils.editMessage(null, builder, message);
                return;
            }*/
        audioTracks.add(track);
        name = track.getInfo().title;
        if (track.getInfo().identifier.equals("dQw4w9WgXcQ") && (random.nextInt(1000) + 1) == 1000) {
            GeneralUtils.sendImage("https://flarebot.stream/img/rick_roll.jpg", "rick_roll.jpg", user);
            Constants.logEG("You can't rick roll me!", null, message.getGuild(), user);
        }
    }
    if (name != null) {
        List<Track> tracks = audioTracks.stream().map(Track::new).peek(track -> {
            track.getMeta().put("requester", user.getId());
            track.getMeta().put("guildId", player.getGuildId());
        }).collect(Collectors.toList());
        if (tracks.size() > 1) {
            // Double `if` https://giphy.com/gifs/ng1xAzwIkDgfm
            Playlist p = new Playlist(tracks);
            player.queue(p);
        } else {
            player.queue(tracks.get(0));
        }
        EmbedBuilder builder = MessageUtils.getEmbed(user);
        builder.setDescription(String.format("%s added the %s [`%s`](%s)", user.getAsMention(), audioTracks.size() == 1 ? "song" : "playlist", name.replace("`", "'"), input));
        if (audioTracks.size() > 1)
            builder.addField("Song count:", String.valueOf(audioTracks.size()), true);
        MessageUtils.editMessage(null, builder, message);
    }
}
Also used : Color(java.awt.Color) Track(com.arsenarsen.lavaplayerbridge.player.Track) Player(com.arsenarsen.lavaplayerbridge.player.Player) Random(java.util.Random) AudioPlaylist(com.sedmelluq.discord.lavaplayer.track.AudioPlaylist) GeneralUtils(stream.flarebot.flarebot.util.general.GeneralUtils) Collectors(java.util.stream.Collectors) Message(net.dv8tion.jda.core.entities.Message) AudioItem(com.sedmelluq.discord.lavaplayer.track.AudioItem) EmbedBuilder(net.dv8tion.jda.core.EmbedBuilder) ArrayList(java.util.ArrayList) Playlist(com.arsenarsen.lavaplayerbridge.player.Playlist) List(java.util.List) User(net.dv8tion.jda.core.entities.User) YoutubeAudioSourceManager(com.sedmelluq.discord.lavaplayer.source.youtube.YoutubeAudioSourceManager) AudioSourceManager(com.sedmelluq.discord.lavaplayer.source.AudioSourceManager) AudioTrack(com.sedmelluq.discord.lavaplayer.track.AudioTrack) Constants(stream.flarebot.flarebot.util.Constants) MessageUtils(stream.flarebot.flarebot.util.MessageUtils) ArrayList(java.util.ArrayList) AudioItem(com.sedmelluq.discord.lavaplayer.track.AudioItem) AudioPlaylist(com.sedmelluq.discord.lavaplayer.track.AudioPlaylist) Playlist(com.arsenarsen.lavaplayerbridge.player.Playlist) EmbedBuilder(net.dv8tion.jda.core.EmbedBuilder) AudioTrack(com.sedmelluq.discord.lavaplayer.track.AudioTrack) Track(com.arsenarsen.lavaplayerbridge.player.Track) AudioTrack(com.sedmelluq.discord.lavaplayer.track.AudioTrack) AudioPlaylist(com.sedmelluq.discord.lavaplayer.track.AudioPlaylist)

Aggregations

Message (net.dv8tion.jda.core.entities.Message)50 EmbedBuilder (net.dv8tion.jda.core.EmbedBuilder)27 User (net.dv8tion.jda.core.entities.User)23 Guild (net.dv8tion.jda.core.entities.Guild)15 ArrayList (java.util.ArrayList)13 TextChannel (net.dv8tion.jda.core.entities.TextChannel)13 List (java.util.List)12 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)11 MessageChannel (net.dv8tion.jda.core.entities.MessageChannel)11 MessageUtils (stream.flarebot.flarebot.util.MessageUtils)10 GuildWrapper (stream.flarebot.flarebot.objects.GuildWrapper)9 Member (net.dv8tion.jda.core.entities.Member)8 Subcommand (tk.ardentbot.core.executor.Subcommand)8 TimeUnit (java.util.concurrent.TimeUnit)7 Collectors (java.util.stream.Collectors)7 MessageEmbed (net.dv8tion.jda.core.entities.MessageEmbed)7 CommandType (stream.flarebot.flarebot.commands.CommandType)7 HashMap (java.util.HashMap)6 Map (java.util.Map)6 Permission (stream.flarebot.flarebot.permissions.Permission)6