@EndpointImplementation(Endpoints.APPROVE) public void approve(Submission s) throws NetworkException, ApiException { genericPost( reddit .request() .endpoint(Endpoints.APPROVE) .post(JrawUtils.mapOf("api_type", "json", "id", s.getFullName())) .build()); }
/** * Set or unset a self post as a sticky. You must be a moderator of the subreddit the submission * was posted in for this request to complete successfully. * * @param s The submission to set as a sticky. Must be a self post * @param sticky Whether or not to set the submission as a stickied post * @throws NetworkException If the request was not successful * @throws ApiException If the Reddit API returned an error */ @EndpointImplementation(Endpoints.SET_SUBREDDIT_STICKY) public void setSticky(Submission s, boolean sticky) throws NetworkException, ApiException { genericPost( reddit .request() .endpoint(Endpoints.SET_SUBREDDIT_STICKY) .post(JrawUtils.mapOf("api_type", "json", "id", s.getFullName(), "state", sticky)) .build()); }
@EndpointImplementation(Endpoints.REMOVE) public void remove(Submission s, boolean spam) throws NetworkException, ApiException { genericPost( reddit .request() .endpoint(Endpoints.REMOVE) .post(JrawUtils.mapOf("api_type", "json", "id", s.getFullName(), "spam", spam)) .build()); }
/** * Sets whether or not this submission should be marked as not safe for work * * @param s The submission to modify * @param nsfw Whether or not this submission is not safe for work * @throws net.dean.jraw.http.NetworkException If the request was not successful * @throws net.dean.jraw.ApiException If the API returned an error */ @EndpointImplementation({Endpoints.MARKNSFW, Endpoints.UNMARKNSFW}) public void setNsfw(Submission s, boolean nsfw) throws NetworkException, ApiException { // "/api/marknsfw" if nsfw == true, "/api/unmarknsfw" if nsfw == false genericPost( reddit .request() .endpoint(nsfw ? Endpoints.MARKNSFW : Endpoints.UNMARKNSFW) .post(JrawUtils.mapOf("id", s.getFullName())) .build()); }
/** * Sets either a user's flair or a submission's flair. If the submission and username are both * non-null, then the submission will be used in the request. If they are both null and there is * no authenticated user, then an IllegalArgumentException will be thrown. * * @param subreddit The subreddit where the flair will take effect * @param template The template to use * @param text Optional text that will be used if the FlairTemplate's text is editable. If this is * null and the template is editable, the template's default text will be used. * @param submission The submission to set the flair for * @param username The name of the user to set the flair for. If this is null the authenticated * user's name will be used. * @throws IllegalArgumentException If both the submission and the username are null * @throws NetworkException If the request was not successful */ @EndpointImplementation(Endpoints.SELECTFLAIR) private void setFlair( String subreddit, FlairTemplate template, String text, Submission submission, String username) throws IllegalArgumentException, NetworkException, ApiException { if (subreddit == null) { throw new IllegalArgumentException("subreddit cannot be null"); } Map<String, String> args = JrawUtils.mapOf("api_type", "json", "flair_template_id", template.getId()); if (submission != null) { args.put("link", submission.getFullName()); } else { if (username == null) { if (reddit.getAuthenticationMethod() == AuthenticationMethod.NOT_YET) { throw new IllegalArgumentException( "Not logged in and both submission and username were null"); } if (!reddit.hasActiveUserContext()) throw new IllegalStateException( "Cannot set the flair for self because there is no active user context"); username = reddit.getAuthenticatedUser(); } args.put("name", username); } if (template.isTextEditable()) { if (text == null) { // Set default text flair if none is provided text = template.getText(); } args.put("text", text); } RestResponse response = reddit.execute( reddit .request() .post(args) .path("/r/" + subreddit + Endpoints.SELECTFLAIR.getEndpoint().getUri()) .build()); if (response.hasErrors()) { throw response.getError(); } }
public static boolean doesMatch(Submission s, String baseSubreddit, boolean ignore18) { String title = s.getTitle(); String body = s.getSelftext(); String domain = s.getUrl(); String subreddit = s.getSubredditName(); String flair = s.getSubmissionFlair().getText() != null ? s.getSubmissionFlair().getText() : ""; boolean titlec; boolean bodyc; boolean domainc; boolean subredditc; boolean userc; if (titles == null) { titles = SettingValues.titleFilters.replaceAll("^[,\\s]+", "").split("[,\\s]+"); } if (texts == null) { texts = SettingValues.textFilters.replaceAll("^[,\\s]+", "").split("[,\\s]+"); } if (domains == null) { domains = SettingValues.domainFilters.replaceAll("^[,\\s]+", "").split("[,\\s]+"); } if (subreddits == null) { subreddits = SettingValues.subredditFilters.replaceAll("^[,\\s]+", "").split("[,\\s]+"); } if (flairs == null) { flairs = SettingValues.flairFilters.replaceAll("^[,]+", "").split("[,]+"); } if (users == null) { users = SettingValues.userFilters.replaceAll("^[,\\s]+", "").split("[,\\s]+"); } titlec = !SettingValues.titleFilters.isEmpty() && contains(title.toLowerCase(), titles, false); bodyc = !SettingValues.textFilters.isEmpty() && contains(body.toLowerCase(), texts, false); userc = !SettingValues.userFilters.isEmpty() && contains(s.getAuthor().toLowerCase(), users, false); try { domainc = !SettingValues.domainFilters.isEmpty() && isDomain(domain.toLowerCase(), domains); } catch (MalformedURLException e) { domainc = false; } subredditc = !subreddit.equalsIgnoreCase(baseSubreddit) && !SettingValues.subredditFilters.isEmpty() && contains(subreddit.toLowerCase(), subreddits, true); boolean contentMatch = false; if (baseSubreddit == null || baseSubreddit.isEmpty()) { baseSubreddit = "frontpage"; } baseSubreddit = baseSubreddit.toLowerCase(); boolean gifs = isGif(baseSubreddit); boolean images = isImage(baseSubreddit); boolean nsfw = isNsfw(baseSubreddit); boolean albums = isAlbums(baseSubreddit); boolean urls = isUrls(baseSubreddit); boolean selftext = isSelftext(baseSubreddit); boolean videos = isVideo(baseSubreddit); if (s.isNsfw()) { if (nsfw) { contentMatch = true; } if (!Reddit.over18 && !ignore18) { contentMatch = true; } } switch (ContentType.getContentType(s)) { case REDDIT: case EMBEDDED: case LINK: if (urls) { contentMatch = true; } break; case SELF: case NONE: if (selftext) { contentMatch = true; } break; case ALBUM: if (albums) { contentMatch = true; } break; case IMAGE: case DEVIANTART: case IMGUR: case XKCD: if (images) { contentMatch = true; } break; case GIF: if (gifs) { contentMatch = true; } break; case VID_ME: case STREAMABLE: case VIDEO: if (videos) { contentMatch = true; } break; } if (!flair.isEmpty()) for (String flairText : flairs) { if (flairText.toLowerCase().startsWith(baseSubreddit)) { String[] split = flairText.split(":"); if (split[0].equalsIgnoreCase(baseSubreddit)) { if (flair.equalsIgnoreCase(split[1].trim())) { contentMatch = true; break; } } } } return (titlec || bodyc || userc || domainc || subredditc || contentMatch || Hidden.id.contains(s.getFullName())); }