CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/maven-net-dv8tion--jda

Java Discord API - A comprehensive Java library for building Discord bots and applications

Pending
Overview
Eval results
Files

messaging.mddocs/

Messaging System

Complete message handling including creation, editing, reactions, embeds, attachments, and rich message components for Discord communication.

Capabilities

Message Interface

Core message representation with content, metadata, and interaction capabilities.

/**
 * Represents a Message received from Discord.
 * This contains all content and metadata of a Discord message.
 */
interface Message extends ISnowflake {
    /** Get raw message content */
    String getContentRaw();
    
    /** Get formatted content for display */
    String getContentDisplay();
    
    /** Get content with all formatting stripped */
    String getContentStripped();
    
    /** Get message type */
    MessageType getType();
    
    /** Get message author */
    User getAuthor();
    
    /** Get author as guild member (null if not in guild) */
    Member getMember();
    
    /** Get channel where message was sent */
    MessageChannel getChannel();
    
    /** Get guild where message was sent (null if DM) */
    Guild getGuild();
    
    /** Get when message was sent */
    OffsetDateTime getTimeCreated();
    
    /** Get when message was last edited (null if never edited) */
    OffsetDateTime getTimeEdited();
    
    /** Check if message was edited */
    boolean isEdited();
    
    /** Check if message is pinned */
    boolean isPinned();
    
    /** Check if message is ephemeral (interaction response only) */
    boolean isEphemeral();
    
    /** Check if message is from webhook */
    boolean isWebhookMessage();
    
    /** Check if message is TTS */
    boolean isTTS();
    
    /** Check if message suppresses embeds */
    boolean isSuppressedEmbeds();
    
    /** Get message embeds */
    List<MessageEmbed> getEmbeds();
    
    /** Get message attachments */
    List<Message.Attachment> getAttachments();
    
    /** Get message components (buttons, select menus) */
    List<ActionRow> getActionRows();
    
    /** Get message reactions */
    List<MessageReaction> getReactions();
    
    /** Get message stickers */
    List<StickerItem> getStickers();
    
    /** Get message flags */
    EnumSet<MessageFlag> getFlags();
    
    /** Get referenced message (reply reference) */
    Message getReferencedMessage();
    MessageReference getMessageReference();
    
    /** Get message activity (game invites, etc.) */
    MessageActivity getActivity();
    
    /** Get mentioned users */
    List<User> getMentions();
    List<User> getMentionedUsers();
    
    /** Get mentioned channels */
    List<TextChannel> getMentionedChannels();
    
    /** Get mentioned roles */
    List<Role> getMentionedRoles();
    
    /** Get mentioned members */
    List<Member> getMentionedMembers();
    
    /** Check if mentions everyone */
    boolean mentionsEveryone();
    
    /** Check if user/role/channel is mentioned */
    boolean isMentioned(IMentionable mentionable);
    boolean isMentioned(IMentionable mentionable, Message.MentionType... types);
    
    /** Delete message */
    RestAction<Void> delete();
    
    /** Edit message content */
    MessageEditAction editMessage(CharSequence newContent);
    MessageEditAction editMessage(MessageEmbed newEmbed);
    MessageEditAction editMessage(MessageEditData data);
    
    /** Edit message embeds */
    MessageEditAction editMessageEmbeds(MessageEmbed... embeds);
    MessageEditAction editMessageEmbeds(Collection<? extends MessageEmbed> embeds);
    
    /** Edit message components */
    MessageEditAction editMessageComponents(ActionRow... components);
    MessageEditAction editMessageComponents(Collection<? extends ActionRow> components);
    
    /** Edit message attachments */
    MessageEditAction editMessageAttachments(AttachedFile... attachments);
    MessageEditAction editMessageAttachments(Collection<? extends AttachedFile> attachments);
    
    /** Pin message */
    RestAction<Void> pin();
    
    /** Unpin message */
    RestAction<Void> unpin();
    
    /** Add reaction */
    RestAction<Void> addReaction(Emoji emoji);
    
    /** Remove reaction */
    RestAction<Void> removeReaction(Emoji emoji);
    RestAction<Void> removeReaction(Emoji emoji, User user);
    
    /** Clear all reactions */
    RestAction<Void> clearReactions();
    
    /** Clear reactions for specific emoji */
    RestAction<Void> clearReactions(Emoji emoji);
    
    /** Retrieve users who reacted with emoji */
    ReactionPaginationAction retrieveReactionUsers(Emoji emoji);
    
    /** Crosspost message (announcement channels) */
    RestAction<Message> crosspost();
    
    /** Suppress embeds */
    RestAction<Message> suppressEmbeds(boolean suppressed);
    
    /** Create thread from message */
    ThreadChannelAction createThreadChannel(String name);
    
    /** Reply to message */
    MessageCreateAction reply(CharSequence text);
    MessageCreateAction reply(MessageEmbed embed);
    MessageCreateAction reply(MessageCreateData message);
    
    /** Reply with embeds */
    MessageCreateAction replyEmbeds(MessageEmbed... embeds);
    MessageCreateAction replyEmbeds(Collection<? extends MessageEmbed> embeds);
    
    /** Reply with files */
    MessageCreateAction replyFiles(FileUpload... files);
    MessageCreateAction replyFiles(Collection<? extends FileUpload> files);
}

Message Creation

Fluent interface for creating and sending new messages with all supported content types.

/**
 * Extension of RestAction for creating messages with additional message-specific methods.
 */
interface MessageCreateAction extends RestAction<Message> {
    /** Set message content */
    MessageCreateAction setContent(String content);
    
    /** Set message embeds */
    MessageCreateAction setEmbeds(MessageEmbed... embeds);
    MessageCreateAction setEmbeds(Collection<? extends MessageEmbed> embeds);
    
    /** Add message embed */
    MessageCreateAction addEmbeds(MessageEmbed... embeds);
    MessageCreateAction addEmbeds(Collection<? extends MessageEmbed> embeds);
    
    /** Set message components */
    MessageCreateAction setComponents(ActionRow... components);
    MessageCreateAction setComponents(Collection<? extends ActionRow> components);
    
    /** Add message components */
    MessageCreateAction addComponents(ActionRow... components);
    MessageCreateAction addComponents(Collection<? extends ActionRow> components);
    
    /** Set file attachments */
    MessageCreateAction setFiles(FileUpload... files);
    MessageCreateAction setFiles(Collection<? extends FileUpload> files);
    
    /** Add file attachments */
    MessageCreateAction addFiles(FileUpload... files);
    MessageCreateAction addFiles(Collection<? extends FileUpload> files);
    
    /** Set TTS (Text-to-Speech) */
    MessageCreateAction setTTS(boolean tts);
    
    /** Set whether to suppress embeds */
    MessageCreateAction setSuppressEmbeds(boolean suppress);
    
    /** Set allowed mentions */
    MessageCreateAction setAllowedMentions(Collection<Message.MentionType> allowedMentions);
    
    /** Mention users */
    MessageCreateAction mentionUsers(long... userIds);
    MessageCreateAction mentionUsers(String... userIds);
    MessageCreateAction mentionUsers(User... users);
    
    /** Mention roles */
    MessageCreateAction mentionRoles(long... roleIds);
    MessageCreateAction mentionRoles(String... roleIds);
    MessageCreateAction mentionRoles(Role... roles);
    
    /** Set message reference (reply) */
    MessageCreateAction setMessageReference(Message message);
    MessageCreateAction setMessageReference(long messageId);
    MessageCreateAction setMessageReference(String messageId);
}

Usage Examples:

import net.dv8tion.jda.api.entities.channel.concrete.TextChannel;
import net.dv8tion.jda.api.utils.FileUpload;

// Basic text message
channel.sendMessage("Hello, World!").queue();

// Message with embed
EmbedBuilder embed = new EmbedBuilder()
    .setTitle("Welcome!")
    .setDescription("Thanks for joining our server")
    .setColor(Color.BLUE);
channel.sendMessage("").setEmbeds(embed.build()).queue();

// Message with file
FileUpload file = FileUpload.fromData(imageBytes, "image.png");
channel.sendMessage("Check out this image!").setFiles(file).queue();

// Message with components
Button button = Button.primary("help", "Get Help");
channel.sendMessage("Need assistance?")
    .setComponents(ActionRow.of(button))
    .queue();

// Reply to message
originalMessage.reply("I'm replying to you!").queue();

// Complex message with everything
channel.sendMessage("Complex message")
    .setEmbeds(embed.build())
    .setFiles(file)
    .setComponents(ActionRow.of(button))
    .setTTS(false)
    .mentionUsers(user.getId())
    .queue(
        success -> System.out.println("Message sent!"),
        error -> System.err.println("Failed to send: " + error.getMessage())
    );

Message Editing

Interface for modifying existing messages including content, embeds, and components.

/**
 * Extension of RestAction for editing messages.
 */
interface MessageEditAction extends RestAction<Message> {
    /** Set new message content */
    MessageEditAction setContent(String content);
    
    /** Set new message embeds */
    MessageEditAction setEmbeds(MessageEmbed... embeds);
    MessageEditAction setEmbeds(Collection<? extends MessageEmbed> embeds);
    
    /** Set new message components */
    MessageEditAction setComponents(ActionRow... components);
    MessageEditAction setComponents(Collection<? extends ActionRow> components);
    
    /** Set new file attachments */
    MessageEditAction setAttachments(AttachedFile... attachments);
    MessageEditAction setAttachments(Collection<? extends AttachedFile> attachments);
    
    /** Replace existing files */
    MessageEditAction setFiles(FileUpload... files);
    MessageEditAction setFiles(Collection<? extends FileUpload> files);
    
    /** Set allowed mentions */
    MessageEditAction setAllowedMentions(Collection<Message.MentionType> allowedMentions);
    
    /** Mention users */
    MessageEditAction mentionUsers(long... userIds);
    MessageEditAction mentionUsers(String... userIds);
    MessageEditAction mentionUsers(User... users);
    
    /** Mention roles */
    MessageEditAction mentionRoles(long... roleIds);
    MessageEditAction mentionRoles(String... roleIds);
    MessageEditAction mentionRoles(Role... roles);
    
    /** Set whether to suppress embeds */
    MessageEditAction setSuppressEmbeds(boolean suppress);
}

Message Embeds

Rich embedded content with titles, descriptions, fields, images, and more.

/**
 * Builder for creating MessageEmbed objects.
 */
class EmbedBuilder {
    /** Set embed title */
    EmbedBuilder setTitle(String title);
    EmbedBuilder setTitle(String title, String url);
    
    /** Set embed description */
    EmbedBuilder setDescription(CharSequence description);
    
    /** Append to description */
    EmbedBuilder appendDescription(CharSequence description);
    
    /** Set embed timestamp */
    EmbedBuilder setTimestamp(TemporalAccessor temporal);
    
    /** Set embed color */
    EmbedBuilder setColor(Color color);
    EmbedBuilder setColor(int color);
    
    /** Set thumbnail image */
    EmbedBuilder setThumbnail(String url);
    
    /** Set main image */
    EmbedBuilder setImage(String url);
    
    /** Set author information */
    EmbedBuilder setAuthor(String name);
    EmbedBuilder setAuthor(String name, String url);
    EmbedBuilder setAuthor(String name, String url, String iconUrl);
    
    /** Set footer information */
    EmbedBuilder setFooter(String text);
    EmbedBuilder setFooter(String text, String iconUrl);
    
    /** Add field */
    EmbedBuilder addField(String name, String value, boolean inline);
    EmbedBuilder addField(MessageEmbed.Field field);
    
    /** Add blank field */
    EmbedBuilder addBlankField(boolean inline);
    
    /** Clear all fields */
    EmbedBuilder clearFields();
    
    /** Get current field count */
    int getFields();
    
    /** Check if embed is empty */
    boolean isEmpty();
    
    /** Get total character count */
    int length();
    
    /** Build the embed */
    MessageEmbed build();
}

/**
 * Represents an embedded rich content object.
 */
interface MessageEmbed {
    /** Get embed URL */
    String getUrl();
    
    /** Get embed title */
    String getTitle();
    
    /** Get embed description */
    String getDescription();
    
    /** Get embed type */
    EmbedType getType();
    
    /** Get embed timestamp */
    OffsetDateTime getTimestamp();
    
    /** Get embed color */
    Color getColor();
    int getColorRaw();
    
    /** Get thumbnail */
    MessageEmbed.Thumbnail getThumbnail();
    
    /** Get site provider */
    MessageEmbed.Provider getSiteProvider();
    
    /** Get author info */
    MessageEmbed.AuthorInfo getAuthor();
    
    /** Get video info */
    MessageEmbed.VideoInfo getVideoInfo();
    
    /** Get footer */
    MessageEmbed.Footer getFooter();
    
    /** Get image info */
    MessageEmbed.ImageInfo getImage();
    
    /** Get fields */
    List<MessageEmbed.Field> getFields();
    
    /** Check if embed is empty */
    boolean isEmpty();
    
    /** Get total character count */
    int getLength();
}

Usage Examples:

import net.dv8tion.jda.api.EmbedBuilder;
import java.awt.Color;
import java.time.Instant;

// Simple embed
EmbedBuilder embed = new EmbedBuilder()
    .setTitle("Server Statistics")
    .setDescription("Current server information")
    .addField("Members", "1,250", true)
    .addField("Online", "420", true)
    .addField("Channels", "45", true)
    .setColor(Color.GREEN)
    .setTimestamp(Instant.now())
    .setFooter("Last updated");

channel.sendMessageEmbeds(embed.build()).queue();

// Complex embed with all features
EmbedBuilder complexEmbed = new EmbedBuilder()
    .setTitle("User Profile", "https://example.com/profile")
    .setAuthor("UserBot", null, "https://example.com/avatar.png")
    .setDescription("Detailed user information and statistics")
    .addField("Level", "42", true)
    .addField("XP", "15,678", true)
    .addField("Rank", "#127", true)
    .addBlankField(false)
    .addField("Recent Activity", "Last seen 2 hours ago", false)
    .setThumbnail("https://example.com/user-avatar.png")
    .setImage("https://example.com/user-banner.png")
    .setColor(0x7289DA)
    .setTimestamp(Instant.now())
    .setFooter("Profile System", "https://example.com/bot-icon.png");

channel.sendMessageEmbeds(complexEmbed.build()).queue();

Message Components

Interactive message components including buttons, select menus, and action rows.

/**
 * Represents a row of interactive components in a message.
 */
class ActionRow {
    /** Create action row with components */
    static ActionRow of(ItemComponent... components);
    static ActionRow of(Collection<? extends ItemComponent> components);
    
    /** Get components in this row */
    List<ItemComponent> getComponents();
    
    /** Check if row is empty */
    boolean isEmpty();
}

/**
 * Utility class for creating buttons.
 */
class Button {
    /** Create primary button */
    static Button primary(String id, String label);
    static Button primary(String id, Emoji emoji);
    static Button primary(String id, String label, Emoji emoji);
    
    /** Create secondary button */
    static Button secondary(String id, String label);
    static Button secondary(String id, Emoji emoji);
    static Button secondary(String id, String label, Emoji emoji);
    
    /** Create success button */
    static Button success(String id, String label);
    static Button success(String id, Emoji emoji);
    static Button success(String id, String label, Emoji emoji);
    
    /** Create danger button */
    static Button danger(String id, String label);
    static Button danger(String id, Emoji emoji);
    static Button danger(String id, String label, Emoji emoji);
    
    /** Create link button */
    static Button link(String url, String label);
    static Button link(String url, Emoji emoji);
    static Button link(String url, String label, Emoji emoji);
    
    /** Get button ID */
    String getId();
    
    /** Get button label */
    String getLabel();
    
    /** Get button style */
    ButtonStyle getStyle();
    
    /** Get button emoji */
    Emoji getEmoji();
    
    /** Get button URL (link buttons only) */
    String getUrl();
    
    /** Check if button is disabled */
    boolean isDisabled();
    
    /** Create disabled version */
    Button asDisabled();
    
    /** Create enabled version */
    Button asEnabled();
    
    /** Modify button properties */
    Button withId(String id);
    Button withLabel(String label);
    Button withEmoji(Emoji emoji);
    Button withStyle(ButtonStyle style);
    Button withUrl(String url);
    Button withDisabled(boolean disabled);
}

/**
 * Utility class for creating select menus.
 */
class SelectMenu {
    /** Create string select menu */
    static StringSelectMenu.Builder create(String customId);
    
    /** Create entity select menu */
    static EntitySelectMenu.Builder create(String customId, EntitySelectMenu.SelectTarget target);
}

Usage Examples:

import net.dv8tion.jda.api.interactions.components.ActionRow;
import net.dv8tion.jda.api.interactions.components.buttons.Button;
import net.dv8tion.jda.api.interactions.components.selections.StringSelectMenu;

// Message with buttons
Button helpButton = Button.primary("help", "Get Help");
Button aboutButton = Button.secondary("about", "About");
Button websiteButton = Button.link("https://example.com", "Visit Website");

channel.sendMessage("Choose an option:")
    .setComponents(ActionRow.of(helpButton, aboutButton, websiteButton))
    .queue();

// Message with select menu
StringSelectMenu menu = StringSelectMenu.create("game-select")
    .setPlaceholder("Choose a game")
    .addOption("Minecraft", "minecraft", "Block building game")
    .addOption("Fortnite", "fortnite", "Battle royale game")
    .addOption("Among Us", "amongus", "Social deduction game")
    .setMinValues(1)
    .setMaxValues(1)
    .build();

channel.sendMessage("What's your favorite game?")
    .setComponents(ActionRow.of(menu))
    .queue();

// Disabled button example
Button disabledButton = Button.danger("delete", "Delete").asDisabled();
channel.sendMessage("This action is currently unavailable")
    .setComponents(ActionRow.of(disabledButton))
    .queue();

File Attachments

File upload and attachment handling for messages.

/**
 * Utility class for creating file uploads.
 */
class FileUpload {
    /** Create from byte array */
    static FileUpload fromData(byte[] data, String name);
    
    /** Create from InputStream */
    static FileUpload fromInputStream(InputStream data, String name);
    
    /** Create from File */
    static FileUpload fromFile(File file);
    static FileUpload fromFile(File file, String name);
    
    /** Create from Path */
    static FileUpload fromPath(Path path);
    static FileUpload fromPath(Path path, String name);
    
    /** Get file name */
    String getName();
    
    /** Get file description */
    String getDescription();
    
    /** Set file description */
    FileUpload setDescription(String description);
    
    /** Check if file is spoiler */
    boolean isSpoiler();
    
    /** Set spoiler status */
    FileUpload setSpoiler(boolean spoiler);
    
    /** Close and release resources */
    void close();
}

/**
 * Represents a file attachment in a message.
 */
interface Message.Attachment {
    /** Get attachment ID */
    long getIdLong();
    String getId();
    
    /** Get file name */
    String getFileName();
    
    /** Get file description */
    String getDescription();
    
    /** Get content type */
    String getContentType();
    
    /** Get file size in bytes */
    int getSize();
    
    /** Get attachment URL */
    String getUrl();
    
    /** Get proxy URL */
    String getProxyUrl();
    
    /** Check if attachment is image */
    boolean isImage();
    
    /** Check if attachment is video */
    boolean isVideo();
    
    /** Check if attachment is spoiler */
    boolean isSpoiler();
    
    /** Get image dimensions (if image) */
    int getWidth();
    int getHeight();
    
    /** Download attachment */
    RestAction<InputStream> getProxy();
    CompletableFuture<InputStream> downloadAsInputStream();
    CompletableFuture<byte[]> downloadAsByteArray();
    CompletableFuture<File> downloadToFile(File file);
    CompletableFuture<Path> downloadToPath(Path path);
}

Types

// Message types
enum MessageType {
    DEFAULT, RECIPIENT_ADD, RECIPIENT_REMOVE, CALL, CHANNEL_NAME_CHANGE,
    CHANNEL_ICON_CHANGE, CHANNEL_PINNED_MESSAGE, GUILD_MEMBER_JOIN,
    USER_PREMIUM_GUILD_SUBSCRIPTION, USER_PREMIUM_GUILD_SUBSCRIPTION_TIER_1,
    USER_PREMIUM_GUILD_SUBSCRIPTION_TIER_2, USER_PREMIUM_GUILD_SUBSCRIPTION_TIER_3,
    CHANNEL_FOLLOW_ADD, GUILD_DISCOVERY_DISQUALIFIED, GUILD_DISCOVERY_REQUALIFIED,
    GUILD_DISCOVERY_GRACE_PERIOD_INITIAL_WARNING, GUILD_DISCOVERY_GRACE_PERIOD_FINAL_WARNING,
    THREAD_CREATED, REPLY, CHAT_INPUT_COMMAND, THREAD_STARTER_MESSAGE,
    GUILD_INVITE_REMINDER, CONTEXT_MENU_COMMAND, AUTO_MODERATION_ACTION,
    ROLE_SUBSCRIPTION_PURCHASE, INTERACTION_PREMIUM_UPSELL, STAGE_START, STAGE_END,
    STAGE_SPEAKER, STAGE_RAISE_HAND, STAGE_TOPIC, GUILD_APPLICATION_PREMIUM_SUBSCRIPTION
}

// Message flags
enum MessageFlag {
    CROSSPOSTED, IS_CROSSPOST, SUPPRESS_EMBEDS, SOURCE_MESSAGE_DELETED,
    URGENT, HAS_THREAD, EPHEMERAL, LOADING, FAILED_TO_MENTION_SOME_ROLES_IN_THREAD,
    SUPPRESS_NOTIFICATIONS, IS_VOICE_MESSAGE
}

// Mention types
enum MentionType {
    USER, ROLE, CHANNEL, EVERYONE, HERE, SLASH_COMMAND
}

// Button styles
enum ButtonStyle {
    PRIMARY, SECONDARY, SUCCESS, DANGER, LINK
}

// Embed types
enum EmbedType {
    RICH, IMAGE, VIDEO, GIFV, ARTICLE, LINK, AUTO_MODERATION_MESSAGE
}

Install with Tessl CLI

npx tessl i tessl/maven-net-dv8tion--jda

docs

audio.md

core-management.md

entities.md

events.md

index.md

interactions.md

messaging.md

restactions.md

sharding.md

tile.json