redd 0.4.3 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +7 -12
- data/lib/redd.rb +0 -12
- data/lib/redd/base.rb +10 -6
- data/lib/redd/client/authenticated.rb +2 -1
- data/lib/redd/client/authenticated/account.rb +2 -0
- data/lib/redd/client/authenticated/apps.rb +1 -0
- data/lib/redd/client/authenticated/flair.rb +33 -7
- data/lib/redd/client/authenticated/gold.rb +1 -0
- data/lib/redd/client/authenticated/links_comments.rb +86 -10
- data/lib/redd/client/authenticated/live.rb +1 -0
- data/lib/redd/client/authenticated/moderation.rb +65 -16
- data/lib/redd/client/authenticated/multis.rb +1 -1
- data/lib/redd/client/authenticated/private_messages.rb +50 -4
- data/lib/redd/client/authenticated/subreddits.rb +28 -0
- data/lib/redd/client/authenticated/users.rb +1 -1
- data/lib/redd/client/authenticated/wiki.rb +1 -1
- data/lib/redd/client/oauth2.rb +2 -2
- data/lib/redd/client/oauth2/authorization.rb +44 -11
- data/lib/redd/client/oauth2/identity.rb +4 -0
- data/lib/redd/client/unauthenticated/account.rb +13 -1
- data/lib/redd/client/unauthenticated/captcha.rb +7 -0
- data/lib/redd/client/unauthenticated/links_comments.rb +23 -4
- data/lib/redd/client/unauthenticated/listing.rb +43 -25
- data/lib/redd/client/unauthenticated/live.rb +1 -0
- data/lib/redd/client/unauthenticated/moderation.rb +9 -1
- data/lib/redd/client/unauthenticated/subreddits.rb +30 -0
- data/lib/redd/client/unauthenticated/utilities.rb +7 -4
- data/lib/redd/client/unauthenticated/wiki.rb +18 -4
- data/lib/redd/error.rb +5 -3
- data/lib/redd/oauth2_access.rb +21 -3
- data/lib/redd/object/more_comments.rb +1 -0
- data/lib/redd/object/private_message.rb +2 -1
- data/lib/redd/object/submission.rb +4 -0
- data/lib/redd/object/user.rb +1 -0
- data/lib/redd/response/raise_error.rb +2 -1
- data/lib/redd/thing/editable.rb +1 -0
- data/lib/redd/thing/hideable.rb +1 -0
- data/lib/redd/thing/inboxable.rb +1 -0
- data/lib/redd/thing/messageable.rb +2 -8
- data/lib/redd/thing/moderatable.rb +1 -0
- data/lib/redd/thing/reportable.rb +1 -0
- data/lib/redd/thing/saveable.rb +1 -0
- data/lib/redd/thing/voteable.rb +1 -1
- data/lib/redd/version.rb +1 -1
- data/spec/redd/client/unauthenticated_spec.rb +1 -1
- data/spec/redd/rate_limit_spec.rb +5 -5
- data/spec/redd_spec.rb +1 -1
- data/spec/spec_helper.rb +1 -1
- metadata +2 -3
- data/github/redd.png +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0d5b672f674cc48bf220c0a76b7074de9c509e13
|
4
|
+
data.tar.gz: 3fb2b44e36f0ed4f38c3633a4134c4cf85b0e48b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 884382cf0fa1c690f9743e30992fc58b09bc7310660057034505b8c66ccea813c8442dde09e610ca610a6a21122c62cde61fdb5f33abfcc81a15efc2fa63d366
|
7
|
+
data.tar.gz: a7db6250cbdf1a3e3b5613af36245d5fcb44eb824d340cfa025b920caea59d3d99d2cfdc30052762ac2c594a955eb710e9baecd5116a2a5a8e5cff91ebc63820
|
data/README.md
CHANGED
@@ -1,10 +1,11 @@
|
|
1
1
|
<p align="center">
|
2
|
-
<img src="
|
2
|
+
<img src="https://i.imgur.com/2JfE4M1.png" alt="redd"><br>
|
3
3
|
<a href="http://badge.fury.io/rb/redd"><img src="https://badge.fury.io/rb/redd.svg" alt="Gem Version" height="18"></a>
|
4
4
|
<a href="https://travis-ci.org/avidw/redd"><img src="https://travis-ci.org/avidw/redd.svg?branch=master" alt="Build Status"></a>
|
5
5
|
</p>
|
6
6
|
|
7
|
-
**redd** is an API wrapper for [reddit](http://reddit.com/dev/api) written in ruby that focuses on being *simple and extensible*.
|
7
|
+
**redd** is an API wrapper for [reddit](http://reddit.com/dev/api) written in ruby that focuses on being *simple and extensible*.
|
8
|
+
Check out the latest documentation on [RubyDoc](http://rubydoc.info/github/avidw/redd/master/frames).
|
8
9
|
|
9
10
|
---
|
10
11
|
|
@@ -36,20 +37,16 @@ Ruby and redd make creating reddit bots accessible and fun. To demonstrate, let'
|
|
36
37
|
require "redd"
|
37
38
|
#=> true
|
38
39
|
|
39
|
-
r = Redd.client "HelloWorldBot", "hunter2"
|
40
|
+
r = Redd.client "HelloWorldBot", "hunter2",
|
41
|
+
user_agent: "HelloWorldBot v1.0 by /u/you"
|
40
42
|
# => #<Redd::Client::Authenticated:0xY4D4y4D4y4dA ...
|
41
|
-
|
42
|
-
# This is generally a good thing to do:
|
43
|
-
r.user_agent = "HelloWorldBot v1.0 (Redd), written by /u/Mustermind"
|
44
43
|
```
|
45
44
|
|
46
45
|
3. **Scouting**
|
47
46
|
Redd has a really cool method similar to praw's `helpers.comment_stream` that "streams" comments to you while avoiding duplicates. You won't have to take care of rate-limiting either; Redd `sleep`s after requests to avoid ratelimit errors. If you want to write a rate limiting class yourself, take a look at `lib/redd/rate_limit.rb`
|
48
47
|
```ruby
|
49
48
|
r.comment_stream "test" do |comment|
|
50
|
-
if comment.body =~ /^Hello\?$/i
|
51
|
-
comment.reply "World!"
|
52
|
-
end
|
49
|
+
comment.reply "World!" if comment.body =~ /^Hello\?$/i
|
53
50
|
end
|
54
51
|
```
|
55
52
|
|
@@ -58,9 +55,7 @@ Ruby and redd make creating reddit bots accessible and fun. To demonstrate, let'
|
|
58
55
|
```ruby
|
59
56
|
begin
|
60
57
|
r.comment_stream "test" do |comment|
|
61
|
-
if comment.body =~ /^Hello\?$/i
|
62
|
-
comment.reply "World!"
|
63
|
-
end
|
58
|
+
comment.reply "World!" if comment.body =~ /^Hello\?$/i
|
64
59
|
end
|
65
60
|
rescue Redd::Error::RateLimited => e
|
66
61
|
time_left = e.time
|
data/lib/redd.rb
CHANGED
@@ -1,15 +1,3 @@
|
|
1
1
|
require "redd/client/unauthenticated"
|
2
2
|
require "redd/client/authenticated"
|
3
3
|
require "redd/client/oauth2"
|
4
|
-
|
5
|
-
module Redd
|
6
|
-
def self.client(username = nil, password = nil, redirect_uri = nil, options = {})
|
7
|
-
if redirect_uri
|
8
|
-
Redd::Client::OAuth2.new(username, password, redirect_uri, options)
|
9
|
-
elsif username && password
|
10
|
-
Redd::Client::Authenticated.new_from_credentials(username, password, options)
|
11
|
-
else
|
12
|
-
Redd::Client::Unauthenticated.new
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
data/lib/redd/base.rb
CHANGED
@@ -6,22 +6,25 @@ module Redd
|
|
6
6
|
include Memoizable
|
7
7
|
|
8
8
|
# @!attribute [r] attributes
|
9
|
-
#
|
9
|
+
# @return [Hash] A list of attributes returned by reddit for this object.
|
10
10
|
attr_reader :attributes
|
11
11
|
alias_method :to_h, :attributes
|
12
12
|
|
13
13
|
# @!attribute [r] client
|
14
|
-
#
|
14
|
+
# @return The client instance used to make requests with this object.
|
15
15
|
attr_reader :client
|
16
16
|
|
17
|
-
# Define and memoize the method that returns a key from the
|
18
|
-
#
|
17
|
+
# Define and memoize the method that returns a key from the attributes
|
18
|
+
# hash.
|
19
|
+
#
|
19
20
|
# @param [Symbol, String] attr The attribute to construct a method out of.
|
20
21
|
def self.attr_reader(attr)
|
21
22
|
define_attribute_method(attr)
|
22
23
|
define_predicate_method(attr)
|
23
24
|
end
|
24
25
|
|
26
|
+
# @param method [#to_sym] An attribute of the class
|
27
|
+
# @return The attribute requested
|
25
28
|
def [](method)
|
26
29
|
send(method.to_sym)
|
27
30
|
rescue NoMethodError
|
@@ -37,13 +40,14 @@ module Redd
|
|
37
40
|
@attributes[:kind] = attributes[:kind]
|
38
41
|
end
|
39
42
|
|
40
|
-
|
41
|
-
|
43
|
+
# Create a new method with the given name that accesses the @attributes.
|
42
44
|
def self.define_attribute_method(method)
|
43
45
|
define_method(method) { @attributes[method] }
|
44
46
|
memoize method
|
45
47
|
end
|
46
48
|
|
49
|
+
# Create a new method with the given name that accesses the @attributes.
|
50
|
+
# @return [Boolean]
|
47
51
|
def self.define_predicate_method(method)
|
48
52
|
define_method(:"#{method}?") { !!@attributes[method] }
|
49
53
|
memoize :"#{method}?"
|
@@ -41,7 +41,8 @@ module Redd
|
|
41
41
|
# @return [String] The returned modhash used when making requests.
|
42
42
|
attr_reader :modhash
|
43
43
|
|
44
|
-
def new_from_credentials(username, password, options = {})
|
44
|
+
def self.new_from_credentials(username, password, options = {})
|
45
|
+
@username = username
|
45
46
|
Redd::Client::Unauthenticated.new.login(username, password, options)
|
46
47
|
end
|
47
48
|
|
@@ -1,7 +1,22 @@
|
|
1
1
|
module Redd
|
2
2
|
module Client
|
3
3
|
class Authenticated
|
4
|
+
# Methods to interact with link and user flairs.
|
4
5
|
module Flair
|
6
|
+
# Get a list of everbody on the subreddit with a user flair.
|
7
|
+
#
|
8
|
+
# @param subreddit [Redd::Object::Subreddit, String] The subreddit to
|
9
|
+
# find the users in.
|
10
|
+
# @param params [Hash] A list of params to send with the request.
|
11
|
+
# @option params [String] :after Return results after the given
|
12
|
+
# fullname.
|
13
|
+
# @option params [String] :before Return results before the given
|
14
|
+
# fullname.
|
15
|
+
# @option params [Integer] :count (0) The number of items already seen
|
16
|
+
# in the listing.
|
17
|
+
# @option params [1..1000] :limit (25) The maximum number of things to
|
18
|
+
# return.
|
19
|
+
# @return [Array<Hash>] An array of users.
|
5
20
|
def get_flair_list(subreddit, params = {})
|
6
21
|
name = extract_attribute(subreddit, :display_name)
|
7
22
|
|
@@ -11,21 +26,32 @@ module Redd
|
|
11
26
|
get(path, params)[:users]
|
12
27
|
end
|
13
28
|
|
14
|
-
#
|
29
|
+
# Get the flair of a user.
|
30
|
+
#
|
31
|
+
# @param subreddit [Redd::Object::Subreddit, String] The subreddit to
|
32
|
+
# find the user in.
|
33
|
+
# @param user [Redd::Object::User, String] The user to find.
|
34
|
+
# @return [Hash, nil] Flair info about the user or nil if nobody was
|
35
|
+
# found.
|
15
36
|
def get_flair(subreddit, user)
|
37
|
+
display_name = extract_attribute(subreddit, :display_name)
|
16
38
|
username = extract_attribute(user, :name)
|
17
39
|
options = {name: username}
|
18
40
|
|
19
|
-
flair = get_flair_list(
|
41
|
+
flair = get_flair_list(display_name, options).first
|
20
42
|
flair if flair[:user].casecmp(username.downcase) == 0
|
21
43
|
end
|
22
44
|
|
45
|
+
# Set the flair of a user or link.
|
46
|
+
# @param subreddit [Redd::Object::Subreddit, String] The subreddit to
|
47
|
+
# find the user in.
|
48
|
+
# @param user_or_link [Redd::Object::Subreddit, Redd::Object::User]
|
49
|
+
# The user or link to set the flair to.
|
50
|
+
# @param text [String] The text to set the flair to.
|
51
|
+
# @param css_class [String] The css_class of the flair.
|
23
52
|
def set_flair(subreddit, user_or_link, text = "", css_class = "")
|
24
53
|
name = extract_attribute(subreddit, :display_name)
|
25
|
-
|
26
|
-
path = "/api/flair"
|
27
|
-
path = path.prepend("/r/#{name}")
|
28
|
-
params = {api_type: "json", text: text, css_class: css_class}
|
54
|
+
path = "/r/#{name}/api/flair"
|
29
55
|
|
30
56
|
case user_or_link
|
31
57
|
when Redd::Object::User
|
@@ -36,7 +62,7 @@ module Redd
|
|
36
62
|
fail "You should provide a User or Submission object."
|
37
63
|
end
|
38
64
|
|
39
|
-
post path,
|
65
|
+
post path, api_type: "json", text: text, css_class: css_class
|
40
66
|
end
|
41
67
|
end
|
42
68
|
end
|
@@ -1,17 +1,36 @@
|
|
1
1
|
module Redd
|
2
2
|
module Client
|
3
3
|
class Authenticated
|
4
|
+
# Methods to deal with comments and links
|
4
5
|
module LinksComments
|
6
|
+
# Submit a link or a text post to a subreddit.
|
7
|
+
#
|
8
|
+
# @param title [String] The title of the submission.
|
9
|
+
# @param kind [:self, :link] The type of submission to make.
|
10
|
+
# @param text_or_url [String] The url of the post if :link or the
|
11
|
+
# content of the post if :text
|
12
|
+
# @param subreddit [Redd::Object::Submission, String] The subreddit
|
13
|
+
# to submit to.
|
14
|
+
# @param captcha [String] A possible captcha result to send if one
|
15
|
+
# is required.
|
16
|
+
# @param identifier [String] The identifier for the captcha if one
|
17
|
+
# is required.
|
18
|
+
# @param options [Hash] A hash of additional options to send.
|
19
|
+
# @option options [Boolean] :resubmit (false) Whether to post a link
|
20
|
+
# to a subreddit despite it having been posted there before.
|
21
|
+
# @option options [Boolean] :resubmit (false) Whether to automatically
|
22
|
+
# save the post to the user's account after posting.
|
5
23
|
def submit(
|
6
|
-
title, kind, text_or_url, captcha = nil, identifier = nil,
|
24
|
+
title, kind, text_or_url, subreddit, captcha = nil, identifier = nil,
|
7
25
|
options = {}
|
8
26
|
)
|
9
|
-
|
27
|
+
|
10
28
|
params = {
|
11
29
|
api_type: "json", extension: "json", title: title, kind: kind
|
12
30
|
}
|
31
|
+
sr_name = extract_attribute(subreddit, :display_name)
|
32
|
+
params << {sr: sr_name}
|
13
33
|
|
14
|
-
# Set url or selftext depending on kind
|
15
34
|
case kind.to_sym
|
16
35
|
when :self
|
17
36
|
params[:text] = text_or_url
|
@@ -19,16 +38,18 @@ module Redd
|
|
19
38
|
params[:url] = text_or_url
|
20
39
|
end
|
21
40
|
|
22
|
-
# Optional captcha
|
23
41
|
params << {captcha: captcha, iden: identifier} if captcha
|
24
|
-
|
25
|
-
# Fill in the rest of the options
|
26
42
|
params << options
|
27
43
|
|
28
44
|
post "/api/submit", params
|
29
45
|
end
|
30
46
|
|
31
|
-
#
|
47
|
+
# Add a comment to a link, reply to a comment or reply to a message.
|
48
|
+
# Bit of an all-purpose method, this one.
|
49
|
+
#
|
50
|
+
# @param thing [Redd::Object::Submission, Redd::Object::Comment,
|
51
|
+
# Redd::Object::PrivateMessage, String] A thing to add a comment to.
|
52
|
+
# @param text [String] The text to comment.
|
32
53
|
def add_comment(thing, text)
|
33
54
|
fullname = extract_fullname(thing)
|
34
55
|
post "/api/comment", api_type: "json", text: text, thing_id: fullname
|
@@ -36,33 +57,54 @@ module Redd
|
|
36
57
|
|
37
58
|
alias_method :reply, :add_comment
|
38
59
|
|
60
|
+
# Delete a thing.
|
61
|
+
#
|
62
|
+
# @param thing [Redd::Object::Submission, Redd::Object::Comment,
|
63
|
+
# String] A thing to delete.
|
39
64
|
def delete(thing)
|
40
65
|
fullname = extract_fullname(thing)
|
41
66
|
post "/api/del", id: fullname
|
42
67
|
end
|
43
68
|
|
44
|
-
#
|
69
|
+
# Edit a thing.
|
70
|
+
#
|
71
|
+
# @param thing [Redd::Object::Submission, Redd::Object::Comment,
|
72
|
+
# String] A thing to delete.
|
73
|
+
# @param text [String] The new text.
|
45
74
|
def edit(thing, text)
|
46
75
|
fullname = extract_fullname(thing)
|
47
|
-
post "/api/editusertext",
|
48
|
-
|
76
|
+
post "/api/editusertext", api_type: "json",
|
77
|
+
thing_id: fullname,
|
78
|
+
text: text
|
49
79
|
end
|
50
80
|
|
81
|
+
# Hide a link from the logged-in user.
|
82
|
+
#
|
83
|
+
# @param thing [Redd::Object::Submission, String] A link to hide.
|
51
84
|
def hide(thing)
|
52
85
|
fullname = extract_fullname(thing)
|
53
86
|
post "/api/hide", id: fullname
|
54
87
|
end
|
55
88
|
|
89
|
+
# Unhide a previously hidden link.
|
90
|
+
#
|
91
|
+
# @param thing [Redd::Object::Submission, String] A link to show.
|
56
92
|
def unhide(thing)
|
57
93
|
fullname = extract_fullname(thing)
|
58
94
|
post "/api/unhide", id: fullname
|
59
95
|
end
|
60
96
|
|
97
|
+
# Mark a link as "NSFW" (Not Suitable For Work)
|
98
|
+
#
|
99
|
+
# @param thing [Redd::Object::Submission, String] A link to mark.
|
61
100
|
def mark_as_nsfw(thing)
|
62
101
|
fullname = extract_fullname(thing)
|
63
102
|
post "/api/marknsfw", id: fullname
|
64
103
|
end
|
65
104
|
|
105
|
+
# Remove the NSFW label from the link.
|
106
|
+
#
|
107
|
+
# @param thing [Redd::Object::Submission, String] A link to mark.
|
66
108
|
def unmark_as_nsfw(thing)
|
67
109
|
fullname = extract_fullname(thing)
|
68
110
|
post "/api/unmarknsfw", id: fullname
|
@@ -70,11 +112,20 @@ module Redd
|
|
70
112
|
|
71
113
|
alias_method :mark_as_safe, :unmark_as_nsfw
|
72
114
|
|
115
|
+
# Report the link or comment to the subreddit moderators.
|
116
|
+
#
|
117
|
+
# @param thing [Redd::Object::Submission, Redd::Object::Comment,
|
118
|
+
# String] A link to report.
|
73
119
|
def report(thing)
|
74
120
|
fullname = extract_fullname(thing)
|
75
121
|
post "/api/report", id: fullname
|
76
122
|
end
|
77
123
|
|
124
|
+
# Save a link or comment (if gilded) to the user's account.
|
125
|
+
#
|
126
|
+
# @param thing [Redd::Object::Submission, Redd::Object::Comment,
|
127
|
+
# String] A link to save.
|
128
|
+
# @param category [String] A category to save to (if gilded).
|
78
129
|
def save(thing, category = nil)
|
79
130
|
fullname = extract_fullname(thing)
|
80
131
|
params = {id: fullname}
|
@@ -82,19 +133,38 @@ module Redd
|
|
82
133
|
post "/api/save", params
|
83
134
|
end
|
84
135
|
|
136
|
+
# Remove the link or comment from the user's saved links.
|
137
|
+
#
|
138
|
+
# @param thing [Redd::Object::Submission, Redd::Object::Comment,
|
139
|
+
# String] A link to unsave.
|
85
140
|
def unsave(thing)
|
86
141
|
fullname = extract_fullname(thing)
|
87
142
|
post "/api/unsave", id: fullname
|
88
143
|
end
|
89
144
|
|
145
|
+
# Upvote the thing.
|
146
|
+
#
|
147
|
+
# @param thing [Redd::Object::Submission, Redd::Object::Comment,
|
148
|
+
# String] A link or comment to upvote.
|
149
|
+
# @see #vote
|
90
150
|
def upvote(thing)
|
91
151
|
vote(thing, 1)
|
92
152
|
end
|
93
153
|
|
154
|
+
# Downvote the thing.
|
155
|
+
#
|
156
|
+
# @param thing [Redd::Object::Submission, Redd::Object::Comment,
|
157
|
+
# String] A link or comment to downvote.
|
158
|
+
# @see #vote
|
94
159
|
def downvote(thing)
|
95
160
|
vote(thing, -1)
|
96
161
|
end
|
97
162
|
|
163
|
+
# Clear the user's vote on the thing.
|
164
|
+
#
|
165
|
+
# @param thing [Redd::Object::Submission, Redd::Object::Comment,
|
166
|
+
# String] A link or comment to remove the vote on.
|
167
|
+
# @see #vote
|
98
168
|
def unvote(thing)
|
99
169
|
vote(thing, 0)
|
100
170
|
end
|
@@ -103,6 +173,12 @@ module Redd
|
|
103
173
|
|
104
174
|
private
|
105
175
|
|
176
|
+
# Set a vote on the thing.
|
177
|
+
#
|
178
|
+
# @param thing [Redd::Object::Submission, Redd::Object::Comment,
|
179
|
+
# String] A link or comment to set a vote on.
|
180
|
+
# @note Votes must be cast by humans only! Your script can proxy a
|
181
|
+
# user's actions, but it cannot decide what to vote.
|
106
182
|
def vote(thing, direction)
|
107
183
|
fullname = extract_fullname(thing)
|
108
184
|
post "/api/vote", id: fullname, dir: direction
|
@@ -1,69 +1,118 @@
|
|
1
1
|
module Redd
|
2
2
|
module Client
|
3
3
|
class Authenticated
|
4
|
+
# Methods for moderating subreddits
|
4
5
|
module Moderation
|
6
|
+
# Approve a submission.
|
7
|
+
# @param thing [Redd::Object::Submission] The link to approve.
|
5
8
|
def approve(thing)
|
6
9
|
fullname = extract_fullname(thing)
|
7
10
|
post "/api/approve", id: fullname
|
8
11
|
end
|
9
12
|
|
13
|
+
# Remove a submission.
|
14
|
+
# @param thing [Redd::Object::Submission] The link to remove.
|
10
15
|
def remove(thing)
|
11
16
|
fullname = extract_fullname(thing)
|
12
17
|
post "/api/remove", id: fullname
|
13
18
|
end
|
14
19
|
|
20
|
+
# Distinguish a link or comment with a sigil to show that it has
|
21
|
+
# been created by a moderator.
|
22
|
+
#
|
23
|
+
# @param thing [Redd::Object::Submission, Redd::Object::Comment]
|
24
|
+
# The link or comment to distinguish.
|
25
|
+
# @param how [:yes, :no, :admin, :special] How to distinguish the
|
26
|
+
# thing.
|
15
27
|
def distinguish(thing, how = :yes)
|
16
28
|
fullname = extract_fullname(thing)
|
17
29
|
post "/api/distinguish", api_type: "json", id: fullname, how: how
|
18
30
|
end
|
19
31
|
|
32
|
+
# Remove the sigil that shows a thing was created by a moderator.
|
33
|
+
# @param thing [Redd::Object::Submission, Redd::Object::Comment]
|
34
|
+
# The link or comment to undistinguish.
|
20
35
|
def undistinguish(thing)
|
21
36
|
distinguish(thing, :no)
|
22
37
|
end
|
23
38
|
|
39
|
+
# Accept a moderator invite from a subreddit.
|
40
|
+
# @param subreddit [Redd::Object::Subreddit] The subreddit to accept
|
41
|
+
# the invitation from.
|
24
42
|
def accept_moderator_invite(subreddit)
|
25
43
|
name = extract_attribute(subreddit, :display_name)
|
26
44
|
post "/r/#{name}/api/accept_moderator_invite", api_type: "json"
|
27
45
|
end
|
28
46
|
|
47
|
+
# Stop being a contributor of the subreddit.
|
48
|
+
# @param subreddit [Redd::Object::Subreddit] The subreddit to stop
|
49
|
+
# being a contributor of.
|
29
50
|
def leave_contributor_status(subreddit)
|
30
51
|
fullname = extract_fullname(subreddit)
|
31
52
|
post "/api/leavecontributor", id: fullname
|
32
53
|
end
|
33
54
|
|
55
|
+
# Stop being a moderator of the subreddit.
|
56
|
+
# @param subreddit [Redd::Object::Subreddit] The subreddit to stop
|
57
|
+
# being a moderator of.
|
34
58
|
def leave_moderator_status(subreddit)
|
35
59
|
fullname = extract_fullname(subreddit)
|
36
60
|
post "/api/leavemoderator", id: fullname
|
37
61
|
end
|
38
62
|
|
63
|
+
# Stop getting any moderator-related reports on the thing.
|
64
|
+
# @param thing [Redd::Object::Submission, Redd::Object::Comment]
|
65
|
+
# The thing to stop getting reports on.
|
39
66
|
def ignore_reports(thing)
|
40
|
-
fullname = extract_fullname(
|
67
|
+
fullname = extract_fullname(thing)
|
41
68
|
post "/api/ignore_reports", id: fullname
|
42
69
|
end
|
43
70
|
|
71
|
+
# Start getting moderator-related reports on the thing again.
|
72
|
+
# @param thing [Redd::Object::Submission, Redd::Object::Comment]
|
73
|
+
# The thing to start getting reports on.
|
44
74
|
def unignore_reports(thing)
|
45
|
-
fullname = extract_fullname(
|
75
|
+
fullname = extract_fullname(thing)
|
46
76
|
post "/api/unignore_reports", id: fullname
|
47
77
|
end
|
48
78
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
79
|
+
# @!method get_reports
|
80
|
+
# @!method get_spam
|
81
|
+
# @!method get_modqueue
|
82
|
+
# @!method get_unmoderated
|
83
|
+
#
|
84
|
+
# Get the appropriate listing.
|
85
|
+
# @param subreddit [Redd::Object::Subreddit] The subreddit to query.
|
86
|
+
# @param params [Hash] A list of params to send with the request.
|
87
|
+
#
|
88
|
+
# @see #get_submissions
|
89
|
+
%w(reports spam modqueue unmoderated).each do |sort|
|
90
|
+
define_method :"get_#{sort}" do |subreddit = nil, params = {}|
|
91
|
+
get_submissions(sort, subreddit, params)
|
92
|
+
end
|
63
93
|
end
|
64
94
|
|
65
95
|
private
|
66
96
|
|
97
|
+
# Get a listing to moderator-related subreddits.
|
98
|
+
#
|
99
|
+
# @param type [:reports, :spam, :modqueue, :unmoderated] How the
|
100
|
+
# results are sorted.
|
101
|
+
# @param subreddit [Redd::Object::Subreddit, String] The subreddit to
|
102
|
+
# query.
|
103
|
+
# @param params [Hash] A list of params to send with the request.
|
104
|
+
# @option params [String] :after Return results after the given
|
105
|
+
# fullname.
|
106
|
+
# @option params [String] :before Return results before the given
|
107
|
+
# fullname.
|
108
|
+
# @option params [Integer] :count (0) The number of items already seen
|
109
|
+
# in the listing.
|
110
|
+
# @option params [1..100] :limit (25) The maximum number of things to
|
111
|
+
# return.
|
112
|
+
# @option params :location No idea what this does.
|
113
|
+
# @option params [:links, :comments] :only The type of things to show.
|
114
|
+
# @return [Redd::Object::Listing] A listing of submissions or comments.
|
115
|
+
#
|
67
116
|
def get_submissions(type, subreddit = nil, params = {})
|
68
117
|
subreddit_name = extract_attribute(subreddit, :display_name)
|
69
118
|
path = "/about/#{type}.json"
|