use of org.javacord.api.entity.emoji.Emoji in project Javacord by BtoBastian.
the class ButtonBuilderDelegateImpl method copy.
@Override
public void copy(Button button) {
Optional<String> customId = button.getCustomId();
Optional<String> url = button.getUrl();
Optional<String> label = button.getLabel();
Optional<Emoji> emoji = button.getEmoji();
Optional<Boolean> isDisabled = button.isDisabled();
ButtonStyle style = button.getStyle();
this.setStyle(style);
customId.ifPresent(this::setCustomId);
url.ifPresent(this::setUrl);
label.ifPresent(this::setLabel);
emoji.ifPresent(this::setEmoji);
isDisabled.ifPresent(this::setDisabled);
}
use of org.javacord.api.entity.emoji.Emoji in project Javacord by BtoBastian.
the class MessageReactionAddHandler method handle.
@Override
public void handle(JsonNode packet) {
long channelId = packet.get("channel_id").asLong();
long messageId = packet.get("message_id").asLong();
long userId = packet.get("user_id").asLong();
String serverId = packet.hasNonNull("guild_id") ? packet.get("guild_id").asText() : null;
TextChannel channel;
if (serverId == null) {
// if private channel:
channel = PrivateChannelImpl.getOrCreatePrivateChannel(api, channelId, userId, null);
} else {
channel = api.getTextChannelById(channelId).orElse(null);
}
if (channel == null) {
LoggerUtil.logMissingChannel(logger, channelId);
return;
}
Optional<Server> server = api.getServerById(serverId);
Member member = null;
if (packet.hasNonNull("member") && server.isPresent()) {
member = new MemberImpl(api, (ServerImpl) server.get(), packet.get("member"), null);
}
Optional<Message> message = api.getCachedMessageById(messageId);
Emoji emoji;
JsonNode emojiJson = packet.get("emoji");
if (!emojiJson.has("id") || emojiJson.get("id").isNull()) {
emoji = UnicodeEmojiImpl.fromString(emojiJson.get("name").asText());
} else {
emoji = api.getKnownCustomEmojiOrCreateCustomEmoji(emojiJson);
}
message.ifPresent(msg -> ((MessageImpl) msg).addReaction(emoji, userId == api.getYourself().getId()));
ReactionAddEvent event = new ReactionAddEventImpl(api, messageId, channel, emoji, userId, member);
api.getEventDispatcher().dispatchReactionAddEvent(server.map(DispatchQueueSelector.class::cast).orElse(api), messageId, server.orElse(null), channel, userId, event);
}
use of org.javacord.api.entity.emoji.Emoji in project Javacord by BtoBastian.
the class MessageReactionRemoveHandler method handle.
@Override
public void handle(JsonNode packet) {
long messageId = packet.get("message_id").asLong();
long userId = packet.get("user_id").asLong();
Optional<Message> message = api.getCachedMessageById(messageId);
long channelId = packet.get("channel_id").asLong();
TextChannel channel;
if (packet.hasNonNull("guild_id")) {
channel = api.getTextChannelById(channelId).orElse(null);
} else {
// if private channel:
channel = PrivateChannelImpl.getOrCreatePrivateChannel(api, channelId, userId, null);
}
if (channel == null) {
LoggerUtil.logMissingChannel(logger, channelId);
return;
}
Emoji emoji;
JsonNode emojiJson = packet.get("emoji");
if (!emojiJson.has("id") || emojiJson.get("id").isNull()) {
emoji = UnicodeEmojiImpl.fromString(emojiJson.get("name").asText());
} else {
emoji = api.getKnownCustomEmojiOrCreateCustomEmoji(emojiJson);
}
message.ifPresent(msg -> ((MessageImpl) msg).removeReaction(emoji, userId == api.getYourself().getId()));
ReactionRemoveEvent event = new ReactionRemoveEventImpl(api, messageId, channel, emoji, userId);
Optional<Server> optionalServer = channel.asServerChannel().map(ServerChannel::getServer);
api.getEventDispatcher().dispatchReactionRemoveEvent(optionalServer.map(DispatchQueueSelector.class::cast).orElse(api), messageId, optionalServer.orElse(null), channel, userId, event);
}
use of org.javacord.api.entity.emoji.Emoji in project Javacord by BtoBastian.
the class ButtonImpl method toJsonNode.
/**
* Gets the button as a {@link ObjectNode}. This is what is sent to Discord.
*
* @param object The object, the data should be added to.
* @return The button as a ObjectNode.
*/
public ObjectNode toJsonNode(ObjectNode object) {
object.put("type", ComponentType.BUTTON.value());
// 1. Style is not optional; Buttons without a style are not accepted
if (style == null) {
throw new IllegalStateException("Button style is null.");
}
object.put("style", style.getValue());
if (label != null && !label.equals("")) {
object.put("label", label);
}
// 2. Non-link buttons must have a custom_id, and cannot have a url
if (style != ButtonStyle.LINK) {
if (customId == null || customId.equals("")) {
throw new IllegalStateException("Button is missing a custom identifier.");
} else if (url != null) {
throw new IllegalStateException("A non-button link must not have a URL.");
}
object.put("custom_id", customId);
}
// 3. Link buttons must have an url, and cannot have a custom_id
if (style == ButtonStyle.LINK) {
if (url == null || url.equals("")) {
throw new IllegalStateException("Button link is missing a URL.");
}
if (customId != null) {
throw new IllegalStateException("Button link must not have a custom identifier");
}
object.put("url", url);
}
if (disabled != null) {
object.put("disabled", disabled);
}
if (emoji != null) {
ObjectNode emojiObj = JsonNodeFactory.instance.objectNode();
if (emoji.isUnicodeEmoji()) {
Optional<String> unicodeEmojiOptional = emoji.asUnicodeEmoji();
unicodeEmojiOptional.ifPresent(emojiName -> emojiObj.put("name", emojiName));
} else if (emoji.isCustomEmoji()) {
Optional<CustomEmoji> customEmojiOptional = emoji.asCustomEmoji();
customEmojiOptional.ifPresent(customEmoji -> emojiObj.put("id", customEmoji.getId()));
}
object.set("emoji", emojiObj);
}
return object;
}
Aggregations