Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @Override
- public void onSlashCommand(@NotNull final SlashCommandEvent event) {
- String latex = Objects.requireNonNull(event.getOption(LATEX_OPTION)).getAsString();
- String userID = (Objects.requireNonNull(event.getMember()).getId());
- try {
- if (latex.contains("$")) {
- latex = convertInlineLatexToFull(latex);
- }
- } catch (ParseException e) {
- event.reply("That is an invalid latex: " + e.getMessage()).setEphemeral(true).queue();
- return;
- }
- event.deferReply().queue();
- sendImage(event, userID, latex);
- }
- @Nullable
- private ByteArrayOutputStream getRenderedTextImageStream(@NotNull SlashCommandEvent event,
- String latex, Image image) {
- if (image == null)
- return null;
- BufferedImage renderedTextImage = new BufferedImage(image.getWidth(null),
- image.getHeight(null), BufferedImage.TYPE_4BYTE_ABGR);
- renderedTextImage.getGraphics().drawImage(image, 0, 0, null);
- ByteArrayOutputStream renderedTextImageStream = new ByteArrayOutputStream();
- try {
- ImageIO.write(renderedTextImage, "png", renderedTextImageStream);
- } catch (IOException e) {
- event.getHook().setEphemeral(true).editOriginal(RENDERING_ERROR).queue();
- logger.warn(
- "Unable to render latex, could not convert the image into an attachable form. Formula was {}",
- latex, e);
- return null;
- }
- return renderedTextImageStream;
- }
- @Nullable
- private Image getRenderedTextImageStream(@NotNull SlashCommandEvent event,
- @NotNull String latex, @NotNull TeXFormula formula) {
- Image image = formula.createBufferedImage(TeXConstants.STYLE_DISPLAY, DEFAULT_IMAGE_SIZE,
- FOREGROUND_COLOR, BACKGROUND_COLOR);
- if (image.getWidth(null) == -1 || image.getHeight(null) == -1) {
- event.getHook().setEphemeral(true).editOriginal(RENDERING_ERROR).queue();
- logger.warn(
- "Unable to render latex, image does not have an accessible width or height. Formula was {}",
- latex);
- return null;
- }
- return image;
- }
- private void sendImage(@NotNull SlashCommandEvent event, String userID, String latex) {
- TeXFormula formula = new TeXFormula();
- Image image = getRenderedTextImageStream(event, latex, formula);
- ByteArrayOutputStream renderedTextImageStream =
- getRenderedTextImageStream(event, latex, image);
- if (renderedTextImageStream == null)
- return;
- event.getHook()
- .editOriginal(renderedTextImageStream.toByteArray(), "tex.png")
- .setActionRow(Button.of(ButtonStyle.DANGER, generateComponentId(userID), "Delete"))
- .queue();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement