Skip to content

Instantly share code, notes, and snippets.

@sftblw
Last active September 26, 2017 14:22
Show Gist options
  • Save sftblw/d58091c29ff5b29c0cddfb661dd7f060 to your computer and use it in GitHub Desktop.
Save sftblw/d58091c29ff5b29c0cddfb661dd7f060 to your computer and use it in GitHub Desktop.
sbtwm

sbtwm.js for node.js & twitter

Tweet with tbmb [second] for automatically delete the tweet after that duration.

tbmb [초]를 함께 트윗하면 해당 트윗이 해당시간 뒤에 자동으로 삭제됩니다.

Because It's implemented by just simple setTimeout(), you can't set time over setTimeout()'s limitation.

단순히 setTimeout()으로 구현했으므로 이 함수의 한계를 넘어선 시간은 설정할 수 없습니다.

tbmb means twitter bomb.

tbmb는 트위터 폭탄을 의미합니다.

{
"consumer_key": "[YOUR CONSUMER KEY]",
"consumer_secret": "[YOUR CONSUMER SECRET]",
"access_token": "[YOUR ACCESS TOKEN]",
"access_token_secret": "[YOUR ACCESS TOKEN SECRET]"
}
'use strict';
const Twit = require('twit')
const tw = new Twit(require('./config.json'));
const stream = tw.stream('user');
let fnlist = [];
fnlist.push((status) => {
if (isByUserScreenName(status, 'sftblw')) {
// console.log("tweet by user : " + status);
const targetRegex = /tbmb ([0-9]+)/gi;
let matchedArray = targetRegex.exec(status.text);
if (status.text.search(targetRegex) !== -1) {
// console.log("matched regex : " + ( (matchedArray[1]|0) * 1000 ) );
setTimeout(() => {
tw.post('statuses/destroy/:id', {id: status.id_str}, (err, data, resp) => {
if (err) {
console.error(err);
console.error(status.text);
tw.post('statuses/update', {status: 'sbtwm: 트윗을 삭제하지 못했습니다. https://twitter.com/sftblw/status/' + status.id_str}, (err) => {
console.error(err);
});
}
else {
console.log('removed after ' + matchedArray[1] + ' : ' + status.text)
}
});
}, (matchedArray[1]|0) * 1000);
}
}
});
stream.on('tweet', (status) => {
fnlist.forEach((elem) => {elem(status);});
});
function isByUserScreenName(status, screen_name) {
return (status.user.screen_name === screen_name)
&& (status.retweeted_status === undefined)
&& (status.source.search('sbtwm') === -1);
}
console.log('sbtwm::running.');
{
"name": "sbtwm",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"twit": "^2.2.5"
}
}
[Unit]
Description=sbtwm the @sftblw twitter application
Requires=network-online.target
After=network-online.target
[Service]
ExecStart=/home/pi/nodejs/bin/node /home/pi/node_apps/sbtwm/index.js
Restart=always
User=pi
Group=pi
Environment=PATH=/usr/bin:/usr/local/bin:/home/pi/nodejs/bin
Environment=NODE_ENV=production
WorkingDirectory=/home/pi/node_apps/sbtwm
[Install]
WantedBy=multi-user.target
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment