Cast a vote on behalf of a specific user

// Cast a new vote
Upvote::$plugin->upvote_vote->castVote($elementId, $key, $vote [, $userId = null]);

// Remove an existing vote
Upvote::$plugin->upvote_vote->removeVote($elementId, $key [, $userId = null]);

If the $userId is omitted, the vote will be cast by the currently logged-in user.

# Switching a vote to its opposite

In order to "swap" votes, you'll need to first remove the existing vote before applying it's opposing vote.

// Attempt to remove vote
$response = Upvote::$plugin->upvote_vote->removeVote($elementId, $key, $userId);

// If message is returned, bail
if (!is_array($response)) {
    return $response;
}

// Cast new (opposing) vote
return Upvote::$plugin->upvote_vote->castVote($elementId, $key, $response['antivote'], $userId);

When the original vote is removed, the "antivote" will be deduced. You can then re-vote in the opposite direction, by specifying the antivote value.