forked from fakestarbaby/twist
-
Notifications
You must be signed in to change notification settings - Fork 0
/
twist.rb
66 lines (56 loc) · 1.72 KB
/
twist.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
require 'bundler'
require 'em-twitter'
require 'json'
require 'httparty'
Bundler.require
track_keywords = ENV['TWITTER_TRACK_KEYWORDS']
ignore_users = (ENV['TWITTER_TRACK_IGNORE_USERS'] || '').split(/\s/)
options = {
path: '/1/statuses/filter.json',
params: { track: track_keywords },
oauth: {
consumer_key: ENV['TWITTER_CONSUMER_KEY'],
consumer_secret: ENV['TWITTER_CONSUMER_SECRET'],
token: ENV['TWITTER_OAUTH_TOKEN'],
token_secret: ENV['TWITTER_OAUTH_SECRET']
}
}
HUBOT_PARAMS = {
endpoint: ENV['HUBOT_ENDPOINT'],
room: ENV['HUBOT_ROOM'],
basic_auth_user: ENV['HUBOT_BASIC_AUTH_USER'],
basic_auth_pass: ENV['HUBOT_BASIC_AUTH_PASS']
}
def build_params(message)
params = {
body: {
room: HUBOT_PARAMS[:room],
message: message
}
}
if HUBOT_PARAMS[:basic_auth_user] && HUBOT_PARAMS[:basic_auth_pass]
params[:basic_auth] = {
username: HUBOT_PARAMS[:basic_auth_user],
password: HUBOT_PARAMS[:basic_auth_pass]
}
end
params
end
def build_message(payload)
user_image = payload['user']['profile_image_url_https']
user_screen_name = payload['user']['screen_name']
status = payload['text']
status_url = "https://twitter.com/#{payload['user']['screen_name']}/status/#{payload['id_str']}"
[user_screen_name, status, user_image, status_url].join("\n")
end
EM.run do
twitter_client = EM::Twitter::Client.connect(options)
twitter_client.each do |matched|
result = JSON.parse(matched)
next if ignore_users.include?(result['user']['screen_name'])
next if track_keywords.include?(result['user']['screen_name'])
message = build_message(result)
params = build_params(message)
HTTParty.post(HUBOT_PARAMS[:endpoint], params)
end
end