Features
- Supports most of the reddit API, including live threads and the beta mod-mail.
- Includes support for streaming new posts and comments.
- Built-in rate limiting and error handling.
- Automatic retrying of failed requests.
Demo
Reddit Bot
require 'redd'
session = Redd.it(
user_agent: 'Redd:RandomBot:v1.0.0 (by /u/Mustermind)',
client_id: 'PQgS0UaX9l70oQ',
secret: 'PsF_kVZrW8nSVCG5kNsIgl-AaXE',
username: 'RandomBot',
password: 'hunter2'
)
session.subreddit('all').comments.stream do |comment|
if comment.body.include?('roll a dice')
comment.reply("It's a #{rand(1..6)}!")
elsif comment.body.include?('flip a coin')
comment.reply("It's a #{%w(heads tails).sample}!")
end
end
Web Application
require 'sinatra'
require 'redd/middleware'
use Rack::Session::Cookie
use Redd::Middleware,
user_agent: 'Redd:Username App:v1.0.0 (by /u/Mustermind)',
client_id: 'PQgS0UaX9l70oQ',
secret: 'PsF_kVZrW8nSVCG5kNsIgl-AaXE',
redirect_uri: 'http://localhost:4567/auth/reddit/callback',
scope: %w(identity),
via: '/auth/reddit'
get '/' do
reddit = request.env['redd.session']
if reddit
"Hello /u/#{reddit.me.name}! <a href='/logout'>Logout</a>"
else
"<a href='/auth/reddit'>Sign in with reddit</a>"
end
end
get '/auth/reddit/callback' do
redirect to('/') unless request.env['redd.error']
"Error: #{request.env['redd.error'].message} (<a href='/'>Back</a>)"
end
get '/logout' do
request.env['redd.session'] = nil
redirect to('/')
end
FAQ
Are those examples fully functional?
Yes, that's all there is to it! You don't need to handle rate-limiting, refresh access tokens or protect against issues on reddit's end (like 5xx errors).
Where can I find the documentation?
Gem / GitHub
Where can I ask for help if I'm having issues?
Check out the official subreddit or raise a GitHub issue.
How do I request a feature / contribute?
Take a look at CONTRIBUTING.md.
How can I contact you?
Reddit /
Email
This project is available under the MIT License. See LICENSE.txt for more details.
The Redd logo uses the FARRAY font by Coquet Adrien.