This repository has been archived by the owner on Mar 22, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
/
tweet.rb
98 lines (85 loc) · 2.75 KB
/
tweet.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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#!/usr/local/bin/ruby
# -*- coding: utf-8 -*-
# ツイート関連をまとめるクラス
dir = File.dirname File.expand_path(__FILE__)
require 'twitter'
require 'pp'
require "#{dir}/io.rb"
class Tweet
def initialize tokens,files_path,debug = true
# initialize で認証。
# デバッグフラグもここで付ける。念のためデフォルトはtrue
Twitter.configure do |config|
config.consumer_key = tokens["consumer_key"]
config.consumer_secret = tokens["consumer_secret"]
config.oauth_token = tokens["oauth_token"]
config.oauth_token_secret = tokens["oauth_token_secret"]
end
@debug = debug
@io = File_io.new files_path
end
def tweet_reply tweet,num
# num に応じてリプライをツイートする
options = get_reply_options tweet
case num
when -1
# 追加する
@io.add_tweet tweet,@debug # 追加する
post(get_reply_header(tweet,@io.get_reply_random(:add_replys)),options)
when -2
# 複数行の場合
post(get_reply_header(tweet,@io.get_reply_random(:multiline_replys)),options)
when -3
# フォーマットが違う場合
post(get_reply_header(tweet,@io.get_reply_random(:illigal_replys)),options)
else
# 通常リプライ。
# bot_nameが含まれていない場合はnumが0になるので結果的にリプライしない
# bot_nameが含まれている数だけつぶやく
# 10 以上だとちょっと文句を言う
if num >= 10
# 10より多い場合
post(get_reply_header(tweet,@io.get_reply_random(:many_username_replys)),options)
return
end
num.times do
post(get_reply_header(tweet,@io.get_reply_random(:normal_replys)),options)
end
end
end
def random_post
# 定期つぶやき
post @io.tweet.sample
end
private
def post message,options={}
# ポストする
if @debug
# デバッグモード時。内容の確認のみ。
puts
puts "----- (debug mode : check tweet ) ------"
puts "ポスト予定の内容"
puts message
pp options
puts "---- (debug mode : check tweet end ) ----"
puts
else
# ポストする
# errorが起きると落ちちゃうので、begin-rescue-endでゴリ押し。
# contents duplicate 対策。
begin
Twitter.update message,options
rescue
end
end
end
def get_reply_options tweet
# tweet から、それに対するreplyに必要なoptionを取得する
# 具体的には in_reply_to_status_id に必要なidを取ってくる
{"in_reply_to_status_id"=>tweet.id}
end
def get_reply_header tweet,msg
# 返信用のヘッダを作る
"@#{tweet.user.screen_name} #{msg}"
end
end