JDA-Applications / JDA-Utilities

A series of tools and utilities for JDA to assist in bot creation
Apache License 2.0
218 stars 111 forks source link

Button Menu cannot react using emotes #98

Open Artuto opened 4 years ago

Artuto commented 4 years ago

Issue

Issue Checklist

Please follow the following steps before opening this issue.
Issues that do not complete the checklist may be closed without any help.

The issue tracker is reserved for issues, errors, and feature requests related to JDA-Utilities, and not questions and other requests for help.

Issue Information

Check all that apply:

This issue tracker does not assist or handle issues with the JDA library.
For JDA related issues, visit the JDA issue tracker and open an issue there.

Description

Using the Button Menu, when adding a choice you cannot use an emote if you have the EMOTE CacheFlag disabled.

The following code results in the following stack trace:

menuBuilder.addChoice("emote id here");
net.dv8tion.jda.api.exceptions.ErrorResponseException: 10014: Unknown Emoji
    at net.dv8tion.jda.api.exceptions.ErrorResponseException.create(ErrorResponseException.java:150)
    at net.dv8tion.jda.api.requests.Request.onFailure(Request.java:102)
    at net.dv8tion.jda.internal.requests.RestActionImpl.handleResponse(RestActionImpl.java:239)
    at net.dv8tion.jda.api.requests.Request.handleResponse(Request.java:197)
[...]

You can workaround this by doing this (adding the emote name to the id):

menuBuilder.addChoice("a:"+"emote id here");

However, when the add reaction event is received and handled by the menu, it compares the emote ID with the internal menu list of choices, which has a:emote id and not just the id, therefore the menu will never proceed

Andre601 commented 4 years ago

Please refer to the Javadocs. They might be outdated, but I'm sure the ButtonMenu is still mostly up to date.

ButtonMenu.Builder#addChoice(String emoji) image

Artuto commented 4 years ago

Using the Button Menu, when adding a choice you cannot use an emote if you have the EMOTE CacheFlag disabled.

You cannot get a Emote object

Andre601 commented 4 years ago

That is kinda obvious when you disable the CacheFlag for EMOTES, meaning JDA doesn't have it in its internal cache and therefore might first need to get it.

Just generate an Emote object to add to the list, or use Unicode emojis.

Sanduhr32 commented 4 years ago

You know that you can literally use the format a?:name:id for emotes (if I recall the pattern correctly)