· 6 years ago · Nov 28, 2018, 12:08 PM
1#coding: utf-8
2
3#$KCODE = 'u'
4
5Dir.chdir(File.dirname(__FILE__))
6
7require 'kconv'
8require 'rubygems'
9require 'twitter'
10require 'cairo'
11require_relative 'config_store'
12
13# constants
14Original_img = 'Charlotte_204.png'
15#Original_beem_img = 'Charlotte_beem_204.png'
16New_img = 'Charlotte_204_comment.png'
17$Config = ConfigStore.new("config.yaml")
18
19def main
20
21 #oauth = Twitter::OAuth.new($Config['ctoken'], $Config['csecret'])
22 #oauth.authorize_from_access($Config['atoken'],$Config['asecret'])
23 #twitter = Twitter::Base.new(oauth)
24
25 twitter = Twitter.new(
26 :consumer_key => $Config['ctoken'],
27 :consumer_secret => $Config['csecret'],
28 :oauth_token => $Config['atoken'],
29 :oauth_token_secret => $Config['asecret']
30 )
31
32 # check command
33 last_id = $Config['Last_id'] || 0
34 nlast_id = last_id
35 owner = twitter.verify_credentials.screen_name
36 setter = nil
37 comment = nil
38 twitter.mentions.each do |m|
39 if(m.id <= last_id)
40 break
41 else
42 nlast_id = m.id if(nlast_id < m.id)
43 end
44 puts m.text
45 if(m.text =~ /^@#{owner}[  ]+(icon|(アイコン|ã‚ã„ã“ã‚“)(変ãˆã¦|ã‹ãˆã¦)?)[^  ]*[  ]+(.+)/)
46 setter = m.user.screen_name
47 allowlist = getwhitelist(twitter,owner,"white")
48 if(allowlist.index(setter))# || true)
49 comment = $4.toutf8
50 #break;
51 else
52 twitter.update("@#{m.user.screen_name} ( ╹◡╹)< ãŠã“ã¨ã‚りã—ã¾ã™ã£",:in_reply_to_status_id=>m.id)
53 end
54 end
55 end
56 $Config['Last_id'] = nlast_id
57 exit if !comment
58 comment = $1 if(comment =~ /"(.*)"/)
59 comment = $1 if(comment =~ /'(.*)'/)
60
61 # generate image
62 #if comment.include?("ビーム")
63 # img_filename = Original_beem_img
64 #else
65 img_filename = Original_img
66 #end
67 surface = Cairo::ImageSurface.from_png(img_filename)
68 context = Cairo::Context.new(surface)
69
70 #context.set_source_color(Cairo::Color.parse("#22337e"))
71 context.set_source_color(Cairo::Color.parse("#bc353c")) #charlotte
72 #context.set_source_color(Cairo::Color.parse("#000000"))
73 #context.move_to(115,80) #charlotte
74 context.move_to(125,80)
75 context.rotate(-0.30)
76 ## set font size
77 max = 30
78 width = 65
79 context.set_font_size(max)
80 if((w = context.text_extents(comment).width) > width)
81 size = max * width / w
82 context.set_font_size(size)
83 end
84 context.select_font_face("YukarryAA",0,0)
85 context.show_text(comment)
86
87 surface.write_to_png(New_img)
88
89 # update image
90 File.open(New_img) do |img|
91 twitter.update_profile_image(img)
92 end
93
94 # post message
95 r = rand(5)
96 s_msg = ""
97 if(r == 0)
98 s_msg = "(✿╹◡╹)< #{comment}"
99 else
100 s_msg = "( ╹◡╹)< #{comment}"
101 end
102 #s_msg = "ï¼¼#{comment}ï¼ï¼"
103 twitter.update(s_msg)
104
105 File.open('cron.log','a') do |file|
106 file.puts "comment=#{comment},setter=#{setter}"
107 end
108
109end
110
111def getwhitelist(twitter,owner,slug)
112 arr = []
113 cursor = -1
114 begin
115 res = twitter.list_members(owner,slug,{:cursor=>cursor})
116 res.users.each do |item|
117 arr << item.screen_name
118 end
119 cursor = res.next_cursor
120 end while cursor != 0
121 return arr
122end
123
124# finalize
125END{
126 $Config.save
127}
128
129
130# call main
131begin
132 main
133rescue => e
134 File.open('cron.log','a') do |file|
135 puts e.message
136 file.puts e.message
137 file.puts e.backtrace
138 end
139rescue Timeout::Error => e
140 File.open('cron.log','a') do |file|
141 file.puts e.inspect
142 file.puts e.message
143 end
144end