code: public Message getOrCreateMessage(TextChannel channel, JsonNode data) {
          long id = Long.parseLong(data.get("id").asText());
          synchronized (messages) {
              return getCachedMessageById(id).orElseGet(() -> new MessageImpl(this, channel, data));
          }
      }
docs: Gets or creates a new message object.
  
  @param channel The channel of the message.
  @param data The data of the message.
  @return The message for the given json object.