redd 0.4.3 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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"
|