Skip to main content Link Search Menu Expand Document (external link)

Samples

Below are a few samples of interactions that the client exposes.

Retrieving subreddit submissions

SubredditInteractor askReddit = client.Subreddit("askreddit");

IAsyncEnumerable<SubmissionDetails> fiftyNewSubmissions = askReddit.GetSubmissionsAsync(builder => 
    builder
        .WithSort(SubredditSubmissionSort.New)
        .WithMaximumItems(50));
        
await foreach (SubmissionDetails submission in fiftyNewSubmissions)
{
    // Do something with submission
    ...
}

Search for submissions

SubredditInteractor askReddit = client.Subreddit("askreddit");

IAsyncEnumerable<SubmissionDetails> searchResults = await subreddit.SearchSubmissionsAsync(
        query: "Reddit.NET client",
        builder => builder
            .WithSort(SubredditSearchSort.Relevance)
            .WithSyntax(SearchQuerySyntax.Lucene)
            .WithMaximumItems(50));

await foreach (SubmissionDetails submission in searchResults)
{
    // Do something with submission
    ...
}

Subscribe to a subreddit

SubredditInteractor askReddit = client.Subreddit("askreddit");

await askReddit.SubscribeAsync();

Retrieving subscribed subreddits

MeInteractor me = client.Me();

IAsyncEnumerable<SubredditDetails> mySubreddits = me.GetSubredditsAsync();
        
await foreach (SubredditDetails subreddit in mySubreddits)
{            
    // Do something with subreddit
    ...
}

Retrieving saved submissions/comments

MeInteractor me = client.Me(); 

IAsyncEnumerable<UserContentDetails> savedHistory = me.GetHistoryAsync(builder =>
    builder
        .WithType(UserHistoryType.Saved)                    
        .WithMaximumItems(100));

await foreach (UserContentDetails content in savedHistory)
{
    // Saved history can contain both submissions and comments.
    switch (content)
    {
        case CommentDetails comment:
            // Do something with comment
            ...
            break;

        case SubmissionDetails submission:
            // Do something with submission
            ...        
            break;
    }    
}

Create a multireddit

MeInteractor me = client.Me(); 

MultiredditDetails multiredditDetails = await me.CreateMultiredditAsync(new MultiredditCreationDetails(
    name: "Ask X",
    subreddits: new string[] { "askreddit", "askscience" }
));

// Add another subreddit to the newly created multireddit
await multiredditDetails
    .Interact(client)
    .AddSubredditAsync("askcomputerscience");

await multiredditDetails.ReloadAsync(client);

Voting on a submission/comment

Warning: Votes must be cast by a human (see the reddit API documentation for details).

// Obtain submission details e.g. by getting the submissions in a subreddit
SubmissionDetails submissionDetails = ...;

// Get an interactor for the submission
SubmissionInteractor submission = submissionDetails.Interact(client);

// There are equivalent methods for downvote/unvote.
await submission.UpvoteAsync();

Award a submission/comment

Note that currently only gold awards can be given.

// Obtain a submission interactor e.g. by getting the submissions in a subreddit
SubmissionInteractor submission = ...;

await submission.AwardAsync();

Create a submission

// Link submission
SubredditInteractor subreddit = client.Subreddit("...");

SubmissionDetails submission = await subreddit.CreateSubmissionAsync(new LinkSubmissionCreationDetails(
    title: "Reddit.NET client",
    uri: new Uri("https://github.com/JedS6391/Reddit.NET"),
    resubmit: true));

// Text submission
SubmissionDetails submission = await subreddit.CreateSubmissionAsync(new TextSubmissionCreationDetails(
    title: $"Reddit.NET client",
    text: "Submission made using [Reddit.NET client](https://github.com/JedS6391/Reddit.NET)."););
// Obtain a submission interactor e.g. by getting the submissions in a subreddit
SubmissionInteractor submission = ...;

CommentThreadNavigator comments = await submission.GetCommentsAsync(sort: SubmissionsCommentSort.Top);

// Navigate the replies of each top level thread on the submission
foreach (CommentThread topLevelThread in comments)
{
    foreach (CommentThread replyThread in topLevelThread.Replies)
    {
        // Do something with reply thread     
    }
}

Streaming new subreddit submissions

SubredditInteractor askReddit = client.Subreddit("askreddit");

// No queries will be made until enumeration starts
IAsyncEnumerable<SubmissionDetails> newSubmissions = askReddit.Stream.SubmissionsAsync();

await foreach (SubmissionDetails submission in newSubmissions)
{
    // Do something with the new submission
    ...
}

Streaming unread inbox messages

InboxInteractor inbox = client.Me().Inbox();

// No queries will be made until enumeration starts
IAsyncEnumerable<MessageDetails> newMessages = inbox.Stream.UnreadMessagesAsync();

await foreach (MessageDetails message in newMessages)
{
    // Do something with the new message
    ...
}

Message another user

UserInteractor user = client.User("...");

var message = new PrivateMessageCreationDetails(
    subject: "Hi!",
    body: "I sent this message using Reddit.NET client.");

await user.SendMessageAsync(message);

Reply to an inbox message

InboxInteractor inbox = client.Me().Inbox();

// Obtain a message e.g. by streaming new messages as they arrive
MessageDetails message = ...;

await inbox.ReplyAsync(message, "Replied using Reddit.NET client");

Retrieving friends

MeInteractor me = client.Me();

IAsyncEnumerable<FriendDetails> friends = me.GetFriendsAsync();

await foreach (FriendDetails friend in in friends)
{
    // Do something with friend
    ...
}

Add or remove friends

UserInteractor user = client.User("...");

await user.FriendAsync();

await user.UnfriendAsync();

Reloading data

Subreddit, submission, and comment models provide the ability to be reloaded.

// Reload the details of a particular subreddit
SubredditDetails subredditDetails = ...;

SubredditInteractor subreddit = subredditDetails.Interact(client);

await subreddit.ReloadAsync();

// Reload the details of a particular submission
SubmissionDetails submissionDetails = ...;

SubmissionInteractor submission = submissionDetails.Interact(client);

await submission.ReloadAsync();

// Reload the details of a particular comment
CommentDetails commentDetails = ...;

CommentInteractor comment = commentDetails.Interact(client);

await comment.ReloadAsync();