Last active
September 4, 2016 01:30
-
-
Save chtzvt/33fdf146bc9d321e0e9eea5af9f7af31 to your computer and use it in GitHub Desktop.
Automatically reply to Twitter direct messages with terrible memes
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var CONFIG = { | |
BOT_NAME: ' ', | |
TWITTER_API_KEYS: { | |
consumer_key: ' ', | |
consumer_secret: ' ', | |
access_token: ' ', | |
access_token_secret: ' ', | |
}, | |
IMGUR_CLIENT_ID: ' ', | |
GIPHY_API_KEY: 'dc6zaTOxFJmzC', // Giphy's default public API key, from their wiki | |
ONLY_USERS: ["*"], // List of users to send shit meme responses to. Default is ANY. | |
getResponseTime: function(){ | |
return Math.floor((Math.random() * 7) + 1) * 60000; | |
} | |
}; | |
var Twit = require('twit'); | |
var req = require('request'); | |
var T = new Twit(CONFIG.TWITTER_API_KEYS); | |
var stream = T.stream('user', { | |
stringify_friend_ids: true | |
}); | |
stream.on('direct_message', function(directMsg) { | |
//Never reply to self. | |
if (directMsg.direct_message.sender.screen_name == CONFIG.BOT_NAME) | |
return; | |
if(CONFIG.ONLY_USERS.indexOf('*') || CONFIG.ONLY_USERS.indexOf(directMsg.direct_message.sender.screen_name)) | |
selectSource(directMsg.direct_message.sender.screen_name); | |
}); | |
function selectSource(user) { | |
if (Math.floor((Math.random() * 10) + 1) > 5) { | |
setTimeout(function(){ getImgurMeme(user, sendResponse)}, CONFIG.getResponseTime()); | |
} else { | |
setTimeout(function(){ getGiphyMeme(user, sendResponse)}, CONFIG.getResponseTime()); | |
} | |
} | |
function getImgurMeme(user, callback) { | |
var opt = { | |
url: 'https://api.imgur.com/3/g/memes/viral/' + (Math.floor(Math.random() * (50 - 15) + 15)), | |
method: 'GET', | |
headers: { | |
Authorization: 'Client-ID ' + CONFIG.IMGUR_CLIENT_ID | |
} | |
}; | |
req(opt, function(err, response, body) { | |
response = JSON.parse(body); | |
callback(this.user, response.data[Math.floor(Math.random() * (response.data.length - 1) + 1)].link.replace('\\', '')); | |
}.bind({ | |
user: user, | |
callback: callback | |
})); | |
} | |
function getGiphyMeme(user, callback) { | |
var opt = { | |
url: 'https://api.giphy.com/v1/gifs/random?api_key=' + CONFIG.GIPHY_API_KEY + '&tag=shitty+cancer+meme+stupid+funny', | |
method: 'GET', | |
}; | |
req(opt, function(err, response, body) { | |
response = JSON.parse(body); | |
var url; | |
if (response.data.url.indexOf('cancer') >= 0 || response.data.url.indexOf('shitty') >= 0) | |
url = response.data.image_original_url.replace('\\', ''); // send only inoffensive URLs | |
else | |
url = response.data.url.replace('\\', ''); | |
callback(this.user, url); | |
}.bind({ | |
user: user, | |
callback: callback | |
})); | |
} | |
function sendResponse(user, link) { | |
var params = { | |
screen_name: user, | |
text: link | |
}; | |
T.post('direct_messages/new', params, function(err, data, response) { | |
if (err) | |
console.info('SHITMEMEBOT_DEBUG: ' + JSON.stringify(err)); | |
}); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment