Gitter migration: Point people to app.gitter.im (rollout pt. 1)
[gitter.git] / modules / twitter / lib / twitter-badger.js
blob49598c133e336cf5e89fed16e2b88c1eeb53d451
1 'use strict';
3 var Promise = require('bluebird');
4 var env = require('gitter-web-env');
5 var config = env.config;
6 var TwitterService = require('./twitter-service');
7 var badgerMessageComposer = require('./badger-message-composer');
8 var debug = require('debug')('gitter:app:twitter:badger');
10 var CONSUMER_KEY = config.get('twitterbadger:consumer_key');
11 var CONSUMER_SECRET = config.get('twitterbadger:consumer_secret');
12 var BADGER_ACCESS_TOKEN = config.get('twitterbadger:access_token');
13 var BADGER_ACCESS_TOKEN_SECRET = config.get('twitterbadger:access_token_secret');
15 var twitterService = new TwitterService(
16   CONSUMER_KEY,
17   CONSUMER_SECRET,
18   BADGER_ACCESS_TOKEN,
19   BADGER_ACCESS_TOKEN_SECRET
22 var DEVELOPMENT_TWITTER_ALLOWED = [
23   'gitchat',
24   'WeAreTroupe',
25   'GitterBadger',
26   'mydigitalself',
27   'suprememoocow',
28   'trevorah_',
29   'MadLittleMods',
30   '__leroux',
31   'CutAndPastey',
32   'escociao',
33   'koholaa',
34   'NeverGitter',
35   'TestyTestymike'
36 ].reduce(function(memo, twitterUsername) {
37   memo[twitterUsername.toLowerCase()] = true;
38   return memo;
39 }, {});
41 var userFilter;
42 if (process.env.NODE_ENV === 'prod') {
43   userFilter = function() {
44     return true;
45   };
46 } else {
47   userFilter = function(user) {
48     if (!user) return false;
49     if (!user.twitterUsername) return false;
51     // Some mocked users
52     if (/GitterTestUser/.test(user.twitterUsername)) {
53       return true;
54     }
56     return DEVELOPMENT_TWITTER_ALLOWED[user.twitterUsername.toLowerCase()];
57   };
60 function sendUserInviteTweets(invitingUser, users, name, url) {
61   if (!invitingUser) {
62     throw new Error('No user provided to show as the person inviting other users');
63   }
65   if (!url) {
66     throw new Error('No url provided to point users to');
67   }
69   var mentionList = users
70     .filter(userFilter)
71     .filter(function(user) {
72       return user && user.twitterUsername;
73     })
74     .map(function(user) {
75       return '@' + user.twitterUsername;
76     });
78   if (!mentionList) return [];
80   var invitingUserName = invitingUser.twitterUsername
81     ? '@' + invitingUser.twitterUsername
82     : invitingUser.username;
83   var tweets = badgerMessageComposer(invitingUserName, mentionList, name, url);
85   debug('Sending tweets: %j', tweets);
86   return Promise.map(
87     tweets,
88     function(tweet) {
89       return twitterService.sendTweet(tweet).return(tweet);
90     },
91     { concurrency: 1 }
92   );
95 module.exports = {
96   sendUserInviteTweets: Promise.method(sendUserInviteTweets)