Modmail¶
- class praw.models.reddit.subreddit.Modmail(subreddit: praw.models.Subreddit)¶
Provides modmail functions for a subreddit.
For example, to send a new modmail from the subreddit
r/test
to useru/spez
with the subjecttest
along with a message body ofhello
:reddit.subreddit("test").modmail.create("test", "hello", "spez")
- __call__(id: Optional[str] = None, mark_read: bool = False)¶
Return an individual conversation.
- Parameters
id – A reddit base36 conversation ID, e.g.,
2gmz
.mark_read – If True, conversation is marked as read (default: False).
For example:
reddit.subreddit("redditdev").modmail("2gmz", mark_read=True)
To print all messages from a conversation as Markdown source:
conversation = reddit.subreddit("redditdev").modmail("2gmz", mark_read=True) for message in conversation.messages: print(message.body_markdown)
ModmailConversation.user
is a special instance ofRedditor
with extra attributes describing the non-moderator user’s recent posts, comments, and modmail messages within the subreddit, as well as information on active bans and mutes. This attribute does not exist on internal moderator discussions.For example, to print the user’s ban status:
conversation = reddit.subreddit("redditdev").modmail("2gmz", mark_read=True) print(conversation.user.ban_status)
To print a list of recent submissions by the user:
conversation = reddit.subreddit("redditdev").modmail("2gmz", mark_read=True) print(conversation.user.recent_posts)
- __init__(subreddit: praw.models.Subreddit)¶
Construct an instance of the Modmail object.
- bulk_read(other_subreddits: Optional[List[Union[praw.models.Subreddit, str]]] = None, state: Optional[str] = None) List[praw.models.reddit.modmail.ModmailConversation] ¶
Mark conversations for subreddit(s) as read.
Due to server-side restrictions, “all” is not a valid subreddit for this method. Instead, use
subreddits()
to get a list of subreddits using the new modmail.- Parameters
other_subreddits – A list of
Subreddit
instances for which to mark conversations (default: None).state – Can be one of: all, archived, highlighted, inprogress, join_requests, mod, new, notifications, or appeals, (default: all). “all” does not include internal, archived, or appeals conversations.
- Returns
A list of
ModmailConversation
instances that were marked read.
For example, to mark all notifications for a subreddit as read:
subreddit = reddit.subreddit("redditdev") subreddit.modmail.bulk_read(state="notifications")
- conversations(after: Optional[str] = None, limit: Optional[int] = None, other_subreddits: Optional[List[praw.models.Subreddit]] = None, sort: Optional[str] = None, state: Optional[str] = None) Generator[praw.models.reddit.modmail.ModmailConversation, None, None] ¶
Generate
ModmailConversation
objects for subreddit(s).- Parameters
after – A base36 modmail conversation id. When provided, the listing begins after this conversation (default: None).
limit – The maximum number of conversations to fetch. If None, the server-side default is 25 at the time of writing (default: None).
other_subreddits – A list of
Subreddit
instances for which to fetch conversations (default: None).sort – Can be one of: mod, recent, unread, user (default: recent).
state – Can be one of: all, archived, highlighted, inprogress, join_requests, mod, new, notifications, or appeals, (default: all). “all” does not include internal, archived, or appeals conversations.
For example:
conversations = reddit.subreddit("all").modmail.conversations(state="mod")
- create(subject: str, body: str, recipient: Union[str, praw.models.Redditor], author_hidden: bool = False) praw.models.reddit.modmail.ModmailConversation ¶
Create a new modmail conversation.
- Parameters
subject – The message subject. Cannot be empty.
body – The message body. Cannot be empty.
recipient – The recipient; a username or an instance of
Redditor
.author_hidden – When True, author is hidden from non-moderators (default: False).
- Returns
A
ModmailConversation
object for the newly created conversation.
subreddit = reddit.subreddit("redditdev") redditor = reddit.redditor("bboe") subreddit.modmail.create("Subject", "Body", redditor)
- subreddits() Generator[praw.models.Subreddit, None, None] ¶
Yield subreddits using the new modmail that the user moderates.
For example:
subreddits = reddit.subreddit("all").modmail.subreddits()
- unread_count() Dict[str, int] ¶
Return unread conversation count by conversation state.
At time of writing, possible states are: archived, highlighted, inprogress, join_requests, mod, new, notifications, or appeals.
- Returns
A dict mapping conversation states to unread counts.
For example, to print the count of unread moderator discussions:
subreddit = reddit.subreddit("redditdev") unread_counts = subreddit.modmail.unread_count() print(unread_counts["mod"])