レッディットボットはreddit応答ボットを作る


PythonでRedditボットを書くにはたくさんのドキュメンテーションがありますが、私はノードの基本的な文書さえ見つけるのに苦労しました.Redditsの公式wikiに記載されているライブラリのいくつかは死んでいるか5年古いです.そこで、シンプルで一般的なユースケースについて書きたいと思います.

Redditアプリケーションの作成


まず、頭をhttps://www.reddit.com/prefs/apps そして“ヒットアプリ”-あなたはあなたの個人的なユーザーアカウントを使用していないので、このように行う必要があります.また、あなたのボット(特に召喚することができます)のための新しいRedditアカウントのサインアップする必要があります.このアプリケーションの開発者としてメインアカウントとボットアカウントを追加してください.
アプリケーションを作成するときは、次のようにフィールドに書き込む必要があります.

あなたは心配する必要はありませんabout uri or redirect uri フィールドは、あなたがそれらを使用されないように、あなたが好きなものを置くことができます.
一度このような画面が表示されます.

あなたがほんの少しでこの情報を必要とするので、これに注意してください.

ノードプロジェクトの起動


このようなもののために、私は非常に使いやすい見つけました snoostorm ラッパアラウンド snoowrap ). このライブラリは、例外的にそれが入ってくるコメントを得るために簡単になります.
あなたが最初にする必要がありますsnoowrap オブジェクトを作成し、CommentStream オブジェクト.それを行うには、あなたのRedditボットのユーザー名、パスワード、アプリケーションの秘密、およびアプリケーションIDが必要になります.ユニークなユーザーエージェントを指定する必要がありますので、何かのように呼び出すmy-node-js-bot . したがって、このように設定します(上記の写真に基づいて構成されています).
const Snoowrap = require('snoowrap');
const { CommentStream } = require('snoostorm');

const client = new Snoowrap({
    userAgent: 'my-node-js-bot',
    clientId: 'qR6rJnQ7sEJZDw',
    clientSecret: 'OCoo9pYnlC2K6fxQQxbcIPQ5MA4',
    username: 'myusernamebutactuallybot',
    password: 'mypasswordbutactuallybot'
});
このクライアントオブジェクトを使用すると、最後に新しいコメントを聞いて開始することができます!ヘッドオーバー/r/testingground4bots そして、糸にホップまたはあなた自身を作ります.次に、コメントの監視を開始するコードを追加します.
// pollTime is 10000 because reddit is very strict on posting too frequently
// at first, you'll only be able to post once every 10 minutes, so make sure you get it right!
const comments = new CommentStream(client, { 
    subreddit: 'testingground4bots', 
    limit: 10, 
    pollTime: 10000 
});

comments.on('item', (item) => {
    console.log(item);
});
ボットを起動し、あなたの端末のコメントの洪水が表示されます.あなたはなぜそれがあるか疑問に思われるかもしれない-あなたも、新しいものがまだ来て見ていない!まあ、client あなたのボットを起動したときに、最初のXのエントリ(この場合は、10)を与え、その後、そこから追跡されます.
我々はかなり簡単に修正できます.
// reddits api doesn't use millis
const BOT_START = Date.now() / 1000;

const comments = new CommentStream(client, { 
    subreddit: 'testingground4bots', 
    limit: 10, 
    pollTime: 10000 
});

comments.on('item', (item) => {
    if(item.created_utc < BOT_START) return;

    console.log(item);
});
グレート、今だけでは、最新のコメントを参照してくださいに来る.うまくいけば、このsubreddit上のいくつかの記事を作るに十分なredditアカウントを確立している.そうするならば、あなたはあなたの端末が投稿の後、かなり速く彼らといっぱいになるのを見ます.

対話する


これまでのところ、ボットを持っているとコメントを読む-それは素晴らしいスタートです!しかし、それはあなたの聴衆、右と対話するようにしたいですか?では、どのように良いol 'こんにちは世界?チェックアウト:
const BOT_START = Date.now() / 1000;

const comments = new CommentStream(client, { 
    subreddit: 'testingground4bots', 
    limit: 10, 
    pollTime: 10000 
});

comments.on('item', (item) => {
    if(item.created_utc < BOT_START) return;

    item.reply('hello world!');
});
そこには、コメントが来ると、ボットは“こんにちは世界で”それに返信されます…を待つ.それはちょっと話すかもしれませんね.それはちょうど少し迷惑を得るかもしれない.Redditは特にボットが言及されたときに返信することを推奨しています.
const BOT_START = Date.now() / 1000;

const canSummon = (msg) => {
    return msg && msg.toLowerCase().includes('/u/myusernamebutactuallybot');
};

const comments = new CommentStream(client, { 
    subreddit: 'testingground4bots', 
    limit: 10, 
    pollTime: 10000 
});

comments.on('item', (item) => {
    if(item.created_utc < BOT_START) return;
    if(!canSummon(item.body)) return;

    item.reply('hello world!');
});
そら!それで、これがすることは、あなたのボットが実際にボットコメントを見つけるというコメントが確実であることを確認します.このcanSummon 関数は、ボットが誤って人々のコメントの束をスパムではないことを確認する基本的なチェックを行います.コメントするには/u/myusernamebutactuallybot (むしろ、あなた自身のボットの名前をチェックする必要があります)とすぐにして、“こんにちは世界!”返事で.
それはあなたがしなければならないすべてです!🎉