Skip to content

Instantly share code, notes, and snippets.

@chtzvt
Last active September 4, 2016 01:30
Show Gist options
  • Save chtzvt/33fdf146bc9d321e0e9eea5af9f7af31 to your computer and use it in GitHub Desktop.
Save chtzvt/33fdf146bc9d321e0e9eea5af9f7af31 to your computer and use it in GitHub Desktop.
Automatically reply to Twitter direct messages with terrible memes
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