SubredditWidgetsModeration¶
-
class
praw.models.
SubredditWidgetsModeration
(subreddit, reddit)¶ Class for moderating a subreddit’s widgets.
Get an instance of this class from
SubredditWidgets.mod
.Example usage:
styles = {'backgroundColor': '#FFFF66', 'headerColor': '#3333EE'} reddit.subreddit('learnpython').widgets.mod.add_text_area( 'My title', '**bold text**', styles)
Note
To use this class’s methods, the authenticated user must be a moderator with appropriate permissions.
-
__init__
(subreddit, reddit)¶ Initialize the class.
Add and return a
ButtonWidget
.Parameters: - short_name – A name for the widget, no longer than 30 characters.
- description – Markdown text to describe the widget.
- buttons –
A
list
ofdict
s describing buttons, as specified in Reddit docs. As of this writing, the format is:Each button is either a text button or an image button. A text button looks like this:
{ "kind": "text", "text": a string no longer than 30 characters, "url": a valid URL, "color": a 6-digit rgb hex color, e.g. `#AABBCC`, "textColor": a 6-digit rgb hex color, e.g. `#AABBCC`, "fillColor": a 6-digit rgb hex color, e.g. `#AABBCC`, "hoverState": {...} }
An image button looks like this:
{ "kind": "image", "text": a string no longer than 30 characters, "linkUrl": a valid URL, "url": a valid URL of a reddit-hosted image, "height": an integer, "width": an integer, "hoverState": {...} }
Both types of buttons have the field
hoverState
. The field does not have to be included (it is optional). If it is included, it can be one of two types: text or image. A texthoverState
looks like this:{ "kind": "text", "text": a string no longer than 30 characters, "color": a 6-digit rgb hex color, e.g. `#AABBCC`, "textColor": a 6-digit rgb hex color, e.g. `#AABBCC`, "fillColor": a 6-digit rgb hex color, e.g. `#AABBCC` }
An image
hoverState
looks like this:{ "kind": "image", "url": a valid URL of a reddit-hosted image, "height": an integer, "width": an integer }
Note
The method
upload_image()
can be used to upload images to Reddit for aurl
field that holds a Reddit-hosted image.Note
An image
hoverState
may be paired with a text widget, and a texthoverState
may be paired with an image widget. - styles – A
dict
with keysbackgroundColor
andheaderColor
, and values of hex colors. For example,{'backgroundColor': '#FFFF66', 'headerColor': '#3333EE'}
.
Example usage:
widget_moderation = reddit.subreddit('mysub').widgets.mod my_image = widget_moderation.upload_image('/path/to/pic.jpg') buttons = [ { 'kind': 'text', 'text': 'View source', 'url': 'https://github.com/praw-dev/praw', 'color': '#FF0000', 'textColor': '#00FF00', 'fillColor': '#0000FF', 'hoverState': { 'kind': 'text', 'text': 'ecruos weiV', 'color': '#FFFFFF', 'textColor': '#000000', 'fillColor': '#0000FF' } }, { 'kind': 'image', 'text': 'View documentation', 'linkUrl': 'https://praw.readthedocs.io', 'url': my_image, 'height': 200, 'width': 200, 'hoverState': { 'kind': 'image', 'url': my_image, 'height': 200, 'width': 200 } } ] styles = {'backgroundColor': '#FFFF66', 'headerColor': '#3333EE'} new_widget = widget_moderation.add_button_widget( 'Things to click', 'Click some of these *cool* links!', buttons, styles)
-
add_calendar
(short_name, google_calendar_id, requires_sync, configuration, styles, **other_settings)¶ Add and return a
Calendar
widget.Parameters: - short_name – A name for the widget, no longer than 30 characters.
- google_calendar_id – An email-style calendar ID. To share a Google Calendar, make it public, then find the “Calendar ID.”
- requires_sync – A
bool
. - configuration –
A
dict
as specified in Reddit docs.For example:
{'numEvents': 10, 'showDate': True, 'showDescription': False, 'showLocation': False, 'showTime': True, 'showTitle': True}
- styles – A
dict
with keysbackgroundColor
andheaderColor
, and values of hex colors. For example,{'backgroundColor': '#FFFF66', 'headerColor': '#3333EE'}
.
Example usage:
widget_moderation = reddit.subreddit('mysub').widgets.mod styles = {'backgroundColor': '#FFFF66', 'headerColor': '#3333EE'} config = {'numEvents': 10, 'showDate': True, 'showDescription': False, 'showLocation': False, 'showTime': True, 'showTitle': True} cal_id = 'y6nm89jy427drk8l71w75w9wjn@group.calendar.google.com' new_widget = widget_moderation.add_calendar('Upcoming Events', cal_id, True, config, styles)
-
add_community_list
(short_name, data, styles, description='', **other_settings)¶ Add and return a
CommunityList
widget.Parameters: - short_name – A name for the widget, no longer than 30 characters.
- data – A
list
of subreddits. Subreddits can be represented asstr
(e.g. the string'redditdev'
) or asSubreddit
(e.g.reddit.subreddit('redditdev')
). These types may be mixed within the list. - styles – A
dict
with keysbackgroundColor
andheaderColor
, and values of hex colors. For example,{'backgroundColor': '#FFFF66', 'headerColor': '#3333EE'}
. - description – A
str
containing Markdown (default:''
).
Example usage:
widget_moderation = reddit.subreddit('mysub').widgets.mod styles = {'backgroundColor': '#FFFF66', 'headerColor': '#3333EE'} subreddits = ['learnpython', reddit.subreddit('redditdev')] new_widget = widget_moderation.add_community_list('My fav subs', subreddits, styles, 'description')
-
add_custom_widget
(short_name, text, css, height, image_data, styles, **other_settings)¶ Add and return a
CustomWidget
.Parameters: - short_name – A name for the widget, no longer than 30 characters.
- text – The Markdown text displayed in the widget.
- css –
The CSS for the widget, no longer than 100000 characters.
Note
As of this writing, Reddit will not accept empty CSS. If you wish to create a custom widget without CSS, consider using
'/**/'
(an empty comment) as your CSS. - height – The height of the widget, between 50 and 500.
- image_data –
A
list
ofdict
s as specified in Reddit docs. Eachdict
represents an image and has the key'url'
which maps to the URL of an image hosted on Reddit’s servers. Images should be uploaded usingupload_image()
.For example:
[{'url': 'https://some.link', # from upload_image() 'width': 600, 'height': 450, 'name': 'logo'}, {'url': 'https://other.link', # from upload_image() 'width': 450, 'height': 600, 'name': 'icon'}]
- styles – A
dict
with keysbackgroundColor
andheaderColor
, and values of hex colors. For example,{'backgroundColor': '#FFFF66', 'headerColor': '#3333EE'}
.
Example usage:
widget_moderation = reddit.subreddit('mysub').widgets.mod image_paths = ['/path/to/image1.jpg', '/path/to/image2.png'] image_urls = [widget_moderation.upload_image(img_path) for img_path in image_paths] image_dicts = [{'width': 600, 'height': 450, 'name': 'logo', 'url': image_urls[0]}, {'width': 450, 'height': 600, 'name': 'icon', 'url': image_urls[1]}] styles = {'backgroundColor': '#FFFF66', 'headerColor': '#3333EE'} new_widget = widget_moderation.add_custom_widget('My widget', '# Hello world!', '/**/', 200, image_dicts, styles)
-
add_image_widget
(short_name, data, styles, **other_settings)¶ Add and return an
ImageWidget
.Parameters: - short_name – A name for the widget, no longer than 30 characters.
- data –
A
list
ofdict
s as specified in Reddit docs. Eachdict
has the key'url'
which maps to the URL of an image hosted on Reddit’s servers. Images should be uploaded usingupload_image()
.For example:
[{'url': 'https://some.link', # from upload_image() 'width': 600, 'height': 450, 'linkUrl': 'https://github.com/praw-dev/praw'}, {'url': 'https://other.link', # from upload_image() 'width': 450, 'height': 600, 'linkUrl': 'https://praw.readthedocs.io'}]
- styles – A
dict
with keysbackgroundColor
andheaderColor
, and values of hex colors. For example,{'backgroundColor': '#FFFF66', 'headerColor': '#3333EE'}
.
Example usage:
widget_moderation = reddit.subreddit('mysub').widgets.mod image_paths = ['/path/to/image1.jpg', '/path/to/image2.png'] image_dicts = [{'width': 600, 'height': 450, 'linkUrl': '', 'url': widget_moderation.upload_image(img_path)} for img_path in image_paths] styles = {'backgroundColor': '#FFFF66', 'headerColor': '#3333EE'} new_widget = widget_moderation.add_image_widget('My cool pictures', image_dicts, styles)
Add and return a
Menu
widget.Parameters: data – A
list
ofdict
s describing menu contents, as specified in Reddit docs. As of this writing, the format is:[ { "text": a string no longer than 20 characters, "url": a valid URL }, OR { "children": [ { "text": a string no longer than 20 characters, "url": a valid URL, }, ... ], "text": a string no longer than 20 characters, }, ... ]
Example usage:
widget_moderation = reddit.subreddit('mysub').widgets.mod menu_contents = [ {'text': 'My homepage', 'url': 'https://example.com'}, {'text': 'Python packages', 'children': [ {'text': 'PRAW', 'url': 'https://praw.readthedocs.io/'}, {'text': 'requests', 'url': 'http://python-requests.org'} ]}, {'text': 'Reddit homepage', 'url': 'https://reddit.com'} ] new_widget = widget_moderation.add_menu(menu_contents)
-
add_post_flair_widget
(short_name, display, order, styles, **other_settings)¶ Add and return a
PostFlairWidget
.Parameters: - short_name – A name for the widget, no longer than 30 characters.
- display – Display style. Either
'cloud'
or'list'
. - order –
A
list
of flair template IDs. You can get all flair template IDs in a subreddit with:flairs = [f['id'] for f in subreddit.flair.link_templates]
- styles – A
dict
with keysbackgroundColor
andheaderColor
, and values of hex colors. For example,{'backgroundColor': '#FFFF66', 'headerColor': '#3333EE'}
.
Example usage:
subreddit = reddit.subreddit('mysub') widget_moderation = subreddit.widgets.mod flairs = [f['id'] for f in subreddit.flair.link_templates] styles = {'backgroundColor': '#FFFF66', 'headerColor': '#3333EE'} new_widget = widget_moderation.add_post_flair_widget('Some flairs', 'list', flairs, styles)
-
add_text_area
(short_name, text, styles, **other_settings)¶ Add and return a
TextArea
widget.Parameters: - short_name – A name for the widget, no longer than 30 characters.
- text – The Markdown text displayed in the widget.
- styles – A
dict
with keysbackgroundColor
andheaderColor
, and values of hex colors. For example,{'backgroundColor': '#FFFF66', 'headerColor': '#3333EE'}
.
Example usage:
widget_moderation = reddit.subreddit('mysub').widgets.mod styles = {'backgroundColor': '#FFFF66', 'headerColor': '#3333EE'} new_widget = widget_moderation.add_text_area('My cool title', '*Hello* **world**!', styles)
-
reorder
(new_order, section='sidebar')¶ Reorder the widgets.
Parameters: - new_order – A list of widgets. Represented as a
list
that containsWidget
objects, or widget IDs as strings. These types may be mixed. - section – The section to reorder. (default:
'sidebar'
)
Example usage:
widgets = reddit.subreddit('mysub').widgets order = list(widgets.sidebar) order.reverse() widgets.mod.reorder(order)
- new_order – A list of widgets. Represented as a
-
upload_image
(file_path)¶ Upload an image to Reddit and get the URL.
Parameters: file_path – The path to the local file. Returns: The URL of the uploaded image as a str
.This method is used to upload images for widgets. For example, it can be used in conjunction with
add_image_widget()
,add_custom_widget()
, andadd_button_widget()
.Example usage:
my_sub = reddit.subreddit('my_sub') image_url = my_sub.widgets.mod.upload_image('/path/to/image.jpg') images = [{'width': 300, 'height': 300, 'url': image_url, 'linkUrl': ''}] styles = {'backgroundColor': '#FFFF66', 'headerColor': '#3333EE'} my_sub.widgets.mod.add_image_widget('My cool pictures', images, styles)
-