Search in sources :

Example 16 with Message

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

the class DiscordUtils method list.

public static Future<Void> list(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 ReactionOperations.create(m, timeoutSeconds, (e) -> {
        if (!canEveryoneUse && e.getUser().getIdLong() != event.getAuthor().getIdLong())
            return Operation.IGNORED;
        if (e.getChannel().getMessageById(m.getIdLong()) == null)
            return Operation.IGNORED;
        switch(e.getReactionEmote().getName()) {
            case // left arrow
            "\u2b05":
                if (index.get() == 0)
                    break;
                m.editMessage(embeds.get(index.decrementAndGet())).queue();
                break;
            case // right arrow
            "\u27a1":
                if (index.get() + 1 >= embeds.size())
                    break;
                m.editMessage(embeds.get(index.incrementAndGet())).queue();
                break;
        }
        if (event.getGuild().getSelfMember().hasPermission(e.getTextChannel(), Permission.MESSAGE_MANAGE)) {
            e.getReaction().removeReaction(e.getUser()).queue();
        }
        return Operation.IGNORED;
    }, "\u2b05", "\u27a1");
}
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 17 with Message

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

the class DiscordUtils method list.

public static Future<Void> list(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);
    }
    if (parts.size() == 1) {
        event.getChannel().sendMessage(base.build()).queue();
        return null;
    }
    // TODO move elsewhere
    base.setDescription("**Total pages: " + parts.size() + ".**\nUse the message reactions to move between pages.\n**Reference " + EmoteReference.BUY + " Buy " + EmoteReference.SELL + " Sell.**");
    AtomicInteger index = new AtomicInteger();
    Message m = event.getChannel().sendMessage(base.build()).complete();
    return ReactionOperations.create(m, timeoutSeconds, (e) -> {
        if (!canEveryoneUse && e.getUser().getIdLong() != event.getAuthor().getIdLong())
            return Operation.IGNORED;
        if (e.getChannel().getMessageById(m.getIdLong()) == null)
            return Operation.IGNORED;
        switch(e.getReactionEmote().getName()) {
            case // left arrow
            "\u2b05":
                if (index.get() == 0)
                    break;
                EmbedBuilder toSend = addAllFields(base, parts.get(index.decrementAndGet()));
                toSend.setFooter("Current page: " + (index.get() + 1), event.getAuthor().getEffectiveAvatarUrl());
                m.editMessage(toSend.build()).queue();
                break;
            case // right arrow
            "\u27a1":
                if (index.get() + 1 >= parts.size())
                    break;
                EmbedBuilder toSend1 = addAllFields(base, parts.get(index.incrementAndGet()));
                toSend1.setFooter("Current page: " + (index.get() + 1), event.getAuthor().getEffectiveAvatarUrl());
                m.editMessage(toSend1.build()).queue();
                break;
        }
        if (event.getGuild().getSelfMember().hasPermission(e.getTextChannel(), Permission.MESSAGE_MANAGE)) {
            e.getReaction().removeReaction(e.getUser()).queue();
        }
        return Operation.IGNORED;
    }, "\u2b05", "\u27a1");
}
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 18 with Message

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

the class VoteUtil method sendVoteMessage.

public static void sendVoteMessage(UUID id, VoteGroup.VoteRunnable voteRunnable, VoteGroup group, long timeout, TextChannel channel, User user, String buttonGroupString, ButtonGroup.Button... optionalButtons) {
    EmbedBuilder votesEmbed = new EmbedBuilder().setDescription("Vote to " + group.getMessageDesc()).addField("Yes", "0", true).addField("No", "0", true);
    String messageDesc = group.getMessageDesc();
    votesEmbed.setColor(ColorUtils.FLAREBOT_BLUE);
    group.setVotesEmbed(votesEmbed);
    ButtonGroup buttonGroup = new ButtonGroup(user.getIdLong(), buttonGroupString);
    groupMap.put(id + channel.getGuild().getId(), group);
    runnableMap.put(id + channel.getGuild().getId(), voteRunnable);
    buttonGroup.addButton(new ButtonGroup.Button(355776056092917761L, (owner, user1, message) -> {
        if (group.addVote(VoteGroup.Vote.YES, user1)) {
            MessageUtils.sendAutoDeletedMessage(new EmbedBuilder().setDescription("You voted yes on " + messageDesc).build(), 2000, channel);
        } else {
            MessageUtils.sendAutoDeletedMessage(new EmbedBuilder().setDescription("You cannot vote on " + messageDesc).build(), 2000, channel);
        }
    }));
    buttonGroup.addButton(new ButtonGroup.Button(355776081384570881L, (owner, user1, message) -> {
        if (group.addVote(VoteGroup.Vote.NO, user1)) {
            MessageUtils.sendAutoDeletedMessage(new EmbedBuilder().setDescription("You voted no on " + messageDesc).build(), 2000, channel);
        } else {
            MessageUtils.sendAutoDeletedMessage(new EmbedBuilder().setDescription("You cannot vote on " + messageDesc).build(), 2000, channel);
        }
    }));
    for (ButtonGroup.Button button : optionalButtons) {
        buttonGroup.addButton(button);
    }
    Message voteMessage = ButtonUtil.sendReturnedButtonedMessage(channel, votesEmbed.build(), buttonGroup);
    group.setVoteMessage(voteMessage);
    new FlareBotTask("Votes-" + voteMessage.getId()) {

        @Override
        public void run() {
            voteRunnable.run(group.won());
            groupMap.remove(group.getMessageDesc() + channel.getGuild().getId());
            runnableMap.remove(group.getMessageDesc() + channel.getGuild().getId());
            channel.deleteMessageById(voteMessage.getId()).queue();
        }
    }.delay(timeout);
}
Also used : ButtonGroup(stream.flarebot.flarebot.util.objects.ButtonGroup) FlareBotTask(stream.flarebot.flarebot.scheduler.FlareBotTask) TextChannel(net.dv8tion.jda.core.entities.TextChannel) ButtonUtil(stream.flarebot.flarebot.util.buttons.ButtonUtil) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) UUID(java.util.UUID) ColorUtils(stream.flarebot.flarebot.util.ColorUtils) Message(net.dv8tion.jda.core.entities.Message) EmbedBuilder(net.dv8tion.jda.core.EmbedBuilder) Guild(net.dv8tion.jda.core.entities.Guild) User(net.dv8tion.jda.core.entities.User) Scheduler(stream.flarebot.flarebot.scheduler.Scheduler) Map(java.util.Map) MessageUtils(stream.flarebot.flarebot.util.MessageUtils) EmbedBuilder(net.dv8tion.jda.core.EmbedBuilder) Message(net.dv8tion.jda.core.entities.Message) ButtonGroup(stream.flarebot.flarebot.util.objects.ButtonGroup) FlareBotTask(stream.flarebot.flarebot.scheduler.FlareBotTask)

Example 19 with Message

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

the class ButtonUtil method sendReturnedButtonedMessage.

/**
 * Sends an embed button message with a set of buttons, and returns the message.
 *
 * @return The message we sent to discord.
 *
 * @param channel The {@link TextChannel} to send it to.
 * @param embed   The {@link MessageEmbed} to send.
 * @param buttons The buttons to display.
 */
public static Message sendReturnedButtonedMessage(TextChannel channel, MessageEmbed embed, ButtonGroup buttons) {
    Message message = channel.sendMessage(embed).complete();
    handleSuccessConsumer(channel, message, buttons);
    return message;
}
Also used : Message(net.dv8tion.jda.core.entities.Message)

Example 20 with Message

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

the class ShardInfoCommand method onCommand.

@Override
public void onCommand(User sender, GuildWrapper guild, TextChannel channel, Message message, String[] args, Member member) {
    PagedTableBuilder tb = new PagedTableBuilder();
    tb.addColumn("Shard ID");
    tb.addColumn("Status");
    tb.addColumn("Ping");
    tb.addColumn("Guild Count");
    tb.addColumn("Connected VCs");
    List<JDA> shards = new ArrayList<>(Getters.getShards());
    Collections.reverse(shards);
    for (JDA jda : shards) {
        List<String> row = new ArrayList<>();
        row.add(ShardUtils.getDisplayShardId(jda) + (ShardUtils.getShardId(channel.getJDA()) == ShardUtils.getShardId(jda) ? " (You)" : ""));
        row.add(WordUtils.capitalizeFully(jda.getStatus().toString().replace("_", " ")));
        row.add(String.valueOf(jda.getPing()));
        row.add(String.valueOf(jda.getGuilds().size()));
        row.add(String.valueOf(jda.getVoiceChannels().stream().filter(vc -> vc.getMembers().contains(vc.getGuild().getSelfMember())).count()));
        tb.addRow(row);
    }
    PaginationUtil.sendPagedMessage(channel, tb.build(), 0, sender, ButtonGroupConstants.SHARDINFO);
}
Also used : PagedTableBuilder(stream.flarebot.flarebot.util.pagination.PagedTableBuilder) WordUtils(org.apache.commons.lang3.text.WordUtils) PaginationUtil(stream.flarebot.flarebot.util.pagination.PaginationUtil) Member(net.dv8tion.jda.core.entities.Member) TextChannel(net.dv8tion.jda.core.entities.TextChannel) ShardUtils(stream.flarebot.flarebot.util.ShardUtils) PagedTableBuilder(stream.flarebot.flarebot.util.pagination.PagedTableBuilder) GuildWrapper(stream.flarebot.flarebot.objects.GuildWrapper) Message(net.dv8tion.jda.core.entities.Message) Getters(stream.flarebot.flarebot.Getters) ButtonGroupConstants(stream.flarebot.flarebot.util.buttons.ButtonGroupConstants) ArrayList(java.util.ArrayList) List(java.util.List) Permission(stream.flarebot.flarebot.permissions.Permission) User(net.dv8tion.jda.core.entities.User) Command(stream.flarebot.flarebot.commands.Command) JDA(net.dv8tion.jda.core.JDA) CommandType(stream.flarebot.flarebot.commands.CommandType) Collections(java.util.Collections) JDA(net.dv8tion.jda.core.JDA) ArrayList(java.util.ArrayList)

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