bot Twitterで指定メンションに対する自動リプライ

【本文】
---

指定したメンション付きツイートに自動リプライするTwitter用botのサンプル。node.jsで作成。
予め、[Twitter Developers](https://apps.twitter.com/)でAPI KeyやAccess Tokenを取得する必要がある。
課題としては、連続でbot攻撃されると、健気にひたすらリプライし続けるので、いずれサーバー落ちるかも。
なので、特定の相手や特定の文言のツイートが連続する場合は、リプライしないとかの処理も必要。

【設定ファイル】
---

**[config.json]**

+ TwitterのDevelopersサイトから取得したAPI-KeyやAccess Tokenを設定

>```json:./config/coinfig.json
{
  "key_token":[
    {"consumer_key":"xxx",
     "consumer_secret": "xxx",
     "access_token_key": "xxx",
     "access_token_secret": "xxx"}
  ],
  "tweet_info":[
    {"tracking_twid": "@xxx"}
  ],
  "request_options": [
    {"proxy": "http://proxy.xxx:[port]"}
  ]
}
>```

**[msg.json]**

+ リプライやツイート用のメッセージ文言を設定
+ 各自で拡張可能

>```json:./msg_setting/msg.json
{
  "Reply_meg":[
    {"reply_normal": "xxx"}
  ]
}
>```

【スクリプト】
---

**[main.js]**

+ botを呼び出す

>```java:main.js
var tw_replyBot = require('./bot/twitter_replyBot.js');
>```

**[twitter_replyBot.js]**

+ bot本体
+ 指定したメンション付きのツイートを常時監視
+ ツイートした相手に対しリプライ
+ 2018/9/10追加：proxy設定　⇒　[https://github.com/desmondmorris/node-twitter/tree/master/examples](https://github.com/desmondmorris/node-twitter/tree/master/examples)

>```java:./bot/twitter_replyBot.js
/* Twitter bot: Reply automatically */
/* General Settings */
require('date-utils');
var twitter = require('twitter');
var request = require("request");
var fs = require('fs');
var json_config = JSON.parse(fs.readFileSync('./config/config.json', 'utf8'));
var json_msg = JSON.parse(fs.readFileSync('./msg_setting/msg.json', 'utf8'));
/* setting of bot with config file */
var bot = new twitter({
  /* read by config.json */
  consumer_key        : json_config.key_token[0].consumer_key,
  consumer_secret     : json_config.key_token[0].consumer_secret,
  access_token_key    : json_config.key_token[0].access_token_key,
  access_token_secret : json_config.key_token[0].access_token_secret,
  request_options : {
    /* If you want to set proxy, use 'proxy: json_config.request_options[0].proxy' */
    //proxy: json_config.request_options[0].proxy
  }
});
/* Start tracking mention */
bot.stream( 'statuses/filter', { track : json_config.tweet_info[0].tracking_twid }, function( stream ) {
  stream.on( 'data', function( data ) {
    /* to read text in data */
    var tweet = data.text;
    console.log(tweet);
    /* setting of text to reply */
    var dateStr = new Date().toFormat("YYYY/MM/DD/ HH24:MI:SS");
    /* Reply messages are called from message file */
    //var textCreateTOReply = '@' + data.user.screen_name +  ' ' + json_msg.Reply_meg[0].reply_normal + '\n\n' + dateStr;
    var textCreateTOReply = '@' + data.user.screen_name +  ' ' + json_msg.Reply_meg[0].reply_normal;       
    console.log( textCreateTOReply );
    /* reply: using 'update' */
     bot.post(
      'statuses/update', {
        status: textCreateTOReply,
        in_reply_to_status_id: data.id_str
      },
      function(error, data, response) {
        if (!error) {
          console.log("OK, Reply!")
          /* if you want to read filtering data, use 'console.log(data)'. */
          //console.log(data);
        }
      }
    )          
  });
});
>```


以上。

P.S.
Githubにもアップしておきました。
[https://github.com/tomo-hata/twitter_bot](https://github.com/tomo-hata/twitter_bot)


【参考文献】
---

**API**

+  ["Twitter 開発者 ドキュメント日本語訳": POST statuses/update](http://westplain.sakuraweb.com/translate/twitter/Documentation/REST-APIs/Public-API/POST-statuses-update.cgi)

**構築方法やスクリプトとか**

+  ["node.jsを使ってtwitter botを作ってみる"](https://qiita.com/iyuichi/items/eb8254496facb0c35703)　 (from Qiita @iyuichi さん）
+  [オウム返し返信をしてくれるtwitterボットをnode.jsで作ってみた。](https://gist.github.com/fddcddhdd/f9f1418d23fbc9e19c57812fb232e1dc) (from GitHubGist fddcddhdd さん)

※その他、似たようなスクリプトはたくさんあるので参考になります。