code: @CheckReturnValue
      public MessageAction sendTo(MessageChannel channel)
      {
          Checks.notNull(channel, "Target Channel");
          switch (channel.getType())
          {
              case TEXT:
                  final TextChannel text = (TextChannel) channel;
                  final Member self = text.getGuild().getSelfMember();
                  if (!self.hasPermission(text, Permission.MESSAGE_READ))
                      throw new InsufficientPermissionException(Permission.MESSAGE_READ);
                  if (!self.hasPermission(text, Permission.MESSAGE_WRITE))
                      throw new InsufficientPermissionException(Permission.MESSAGE_WRITE);
                  break;
              case PRIVATE:
                  final PrivateChannel priv = (PrivateChannel) channel;
                  if (priv.getUser().isBot() && channel.getJDA().getAccountType() == AccountType.BOT)
                      throw new UnsupportedOperationException("Cannot send a private message between bots.");
          }
          final Route.CompiledRoute route = Route.Messages.SEND_MESSAGE.compile(channel.getId());
          final MessageAction action = new MessageAction(channel.getJDA(), route, channel, builder);
          return action.tts(isTTS).embed(embed).nonce(nonce);
      }
docs: Creates a {@link net.dv8tion.jda.core.requests.restaction.MessageAction MessageAction}
  with the current settings without building a {@link net.dv8tion.jda.core.entities.Message Message} instance first.
  
  @param  channel
  The not-null target {@link net.dv8tion.jda.core.entities.MessageChannel MessageChannel}
  
  @throws java.lang.IllegalArgumentException
  If the provided channel is {@code null}
  @throws net.dv8tion.jda.core.exceptions.PermissionException
  If the currently logged in account does not have permission to send or read messages in this channel,
  or if this is a PrivateChannel and both users (sender and receiver) are bots.
  
  @return {@link net.dv8tion.jda.core.requests.restaction.MessageAction MessageAction}