Snoostorm is an event-based wrapped around snoowrap
. It handles polling for you so you can design Reddit bots and applications to more easily react to new comments, messages, and other events on the site.
You can install snoostorm from NPM. As snoostorm is implemented in TypeScript, types come preinstalled with the package.
npm install snoostorm
yarn add snoostorm
Let's get started with a simple example.
import { InboxStream, CommentStream, SubmissionStream } from "snoostorm";
import Snoowrap from "snoowrap";
const creds = require("./credentials.json");
const client = new Snoowrap(creds);
// Options object is a Snoowrap Listing object, but with subreddit and pollTime options
const comments = new CommentStream(client, {
subreddit: "AskReddit",
limit: 10,
pollTime: 2000,
});
comments.on("item", console.log);
const submissions = new SubmissionStream(client, {
subreddit: "AskReddit",
limit: 10,
pollTime: 2000,
});
submissions.on("item", console.log);
const inbox = new InboxStream(client);
inbox.on("item", console.log);
inbox.end();
inbox.on("end", () => console.log("And now my watch has ended"));
Out of the box, snoostorm
supports the following objects:
- Comments
- Submissions
- Inbox
- Modmail
If you would like to poll another object in snoowrap
, you can implement your own Poll easily. For example, here is an implementation that will poll for new friends:
import { Poll } from "snoostorm"
export interface FriendStreamOptions {
pollTime?: number;
}
export class FriendStream extends Poll<Snoowrap.RedditUser> {
constructor(
client: Snoowrap,
options: FriendStreamOptions = { pollTime: 2000 }
) {
super({
frequency: options.pollTime,
get: () => client.getFriends(),
identifier: "name",
});
}
}
const friends = new FriendStream(client);
friends.on("item", (item) => {
console.log("New Friend!", item.name);
});