-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathREADME
233 lines (176 loc) · 9.74 KB
/
README
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
= Purpose
This set of libraries and one main program -- micro_blog_bot.rb -- aims at
simplifying automated response systems ("bots") for popular micro-blogging
services such as Twitter.com and Identi.ca.
== Setup
After I ran the n-th times into trouble with RubyGems and some updated
individual gem, I gave the Debian Ruby package another try and -- what
miracle! -- this time everything looked just fine.
However, the point in mentioning this is to state that I honestly have no
clue of what Debian's Ruby package may have additionally to it what a
standard installation of a plain Ruby may have not.
Anyways, here's what I know for sure what you need to get the bot run:
* The bot relies on the Twitter gem by J. Nunemaker (@jnunemaker), which in
turn depends on the gem echoe. So, you need to install the +twitter+ gem
and the +echoe+ gem. (I state this explicitely, as +twitter+ 0.4.1 did not
make RubyGems to also install +echoe+, in my case.)
* On Debian, aside of just the main Ruby package, you will need to install
the +ruby-dev+ package also, so you'll get +mkmf+.
=== Patching gem twitter 0.4.1
During development I stumbled upon some minor flaws in the underlying Twitter
gem the micro-blogging bot uses. While the flaws are there, the bot may not
work properly in all its aspects.
As there's apparently not yet any new version of the Twitter out yet, I
include patches for that gem. So prior to launching the bot you need to make
sure the patch is in place. You do so by actually patching the Twitter gem.
In patches/gems/twitter-0.4.1/lib/twitter/ there is a file named
base.wrs.diff. That is the patch. You apply it by copying it to where the
Twitter gem's base.rb file resides (helpful: locate
twitter-0.4.1/lib/twitter/). Then you execute this command:
$ patch base.rb base.wrs.diff
And that's it.
== Bot account data
Sharing your bot's account data is abuse-prone. Therefore, all account data
this here package shares, is dummy data.
In order to get a bot of your own set up and use-able, you have to do two
things:
# Register a user account for your bot with any micro-blogging service with
an API compatible to Twitter's one.
# Make one or more valid login data files.
The first, you perform just the same way as you'd register any other new
account with the micro-blogging service.
The second, you achieve by just copying these files to some of your own:
$ cd config/credentials/
$ cp twitterbot.yaml my-twitterbot.yaml
$ cp twitterbot.yaml my-bot.yaml
$ cp twitterbot.yaml my-identibot.yaml
Note, that the 'my-'s are not just an indicator for placeholder file names
but the names are really meant to feature a prepended 'my-'. If you long for
alternative names, you of course can create just files with those names, but
you need to update the micro_blog_consts.rb consts
+VALID_*_CREDENTIALS__DO_NOT_CHECK_IN+ with your alternative names then.
Once you have these three files in place you need to enter valid credentials
there. Obviously, +my-twitterbot.yaml+ is for Twitter credentials and
+my-identibot.yaml+ for Identica. (Note, that it's +identibot+, not
+identicabot+.) Below, we go into my-bot.yaml, too. The files are structured
and easily understood. As an example, here's the original twitterbot.yaml:
account:
service: twitter
twitter:
peer: dagobart # testing needs a second user to bond with
supervisor: dagobart # the user who is allowed to shut down the bot
user: twitterbot
password: secret
identica:
peer: dagobart
supervisor: dagobart
user: identicabot
password: secret
use_alternative_api: 'identi.ca/api'
As you can see, there is an +account+, a +twitter+ and an +identica+ block in
here, and you might wonder about the latter, since this file seems to be for
Twitter credentials. The answer is: As you've seen above, we actually use
this file as a master for all the other credentials files. Also, it's simply
handy to be able to switch between different services just by changing the
+service+ line of the +account+ block. Remember the Fail Whales phase of
Twitter? There you have it. Just switch to the alternative then.
=== How do I get the actual credentials files?
Simple: In your +my-identibot.yaml+, set +service+ to +identica+, in
+my-twitterbot.yaml+ keep it on +twitter+, and in +my-bot.yaml+ just make
your choice.
+my-identibot.yaml+ and +my-twitterbot.yaml+ are for tests, but if Twitter
fail whales +my-bot.yaml+ is your place to go to switch to an alternative
service.
=== Sections of the credentials file(s)
The +twitter+ and +identica+ blocks are designed similarly:
* Each features a user and a password field. Enter here the nick name of your
bot and the password for that account.
* The +peer+ entry is needed for running the test suite, especially the
message threading and reply-to tests. Please do me a favor and replace the
current +dagobart+ -- which is my regular user account at both, Twitter and
Identica, -- by any account you control: If you'd run your tests against
@dagobart, it would flood my replies, and I might have no chance to ever
get rid of those test message the tests of your bot create.
* The +supervisor+ field enables you to control your bot online via an
alternative account, say your common one. "Control" currently means that
you can initiate shutting down your bot online. If you keep this field
clear, just everyone can shutdown your bot.
* On +identica+, there is an additional field, +use_alternative_api+. This is
for telling the bot, which URL to talk to to interact with any
micro-blogging service other than Twitter itself. So, Identica has its API
at +identi.ca/api+, and an other service would have its somewhere else.
Actually, this +use_alternative_api+ field enables you to make use of
whatever alternative micro-blogging service you might want to use: Just copy
the +identica+ block, rename it appropriately, update login, peer and
supervisor fields, and the +use_alternative_api+ field. Finally, set
+service+ in the +account+ block to your new service.
=== Feel free to delete
In any of the credentials files mentioned above, you are free to delete the
blocks you don't need. Essential are only the +account+ block and that
service block the +account+ block+ refers to.
== Get a first impression Launch & Shutdown
Once you're done with configuring your +my-bot.yaml+ file, you'ready to launch
the bot. To do so, call micro_blog_bot.rb this way:
$ ruby micro_blog_bot.rb
Once launched, you can interact with the bot through the micro-blogging
service chosen. For example, try
@yourbotname help
assuming your bot's micro-blogging service's account nick name is
+yourbotname+.
To shut down, give
@yourbotname shutdown
through the service.
== Dealing with down times of a service
Especially when running the test suite against Twitter it is rather likely
your current IP address will be blacklisted for a while: I very often
experienced that the first test suite run went through quite well, and then
testing a minor change just a few minutes later made #400 errors going off
all over the place.
On testing against Identica, I never had that. So, you might conclude, then
why not just test against Identica only? -- The answer is: Identica has other
flaws. Such as that Identica considers every message you receive from a
followee to be a message _addressed to_ you. Even, if it does not begin with
your nick name. So, 'Nice guy that @dagobart' would be considered a message
_to_ @dagobart on Identica.
So, you don't get around to test against all the services your bot shall run
at.
To deal with the Twitter rejects, you could either get a new IP every second
test suite run or wait until you're allowed again. (Which might look lame at
first, though I did just that sometimes, by continuing to develop, time
passed..)
However, to shortcut this, I introduced a +SERVICE_IS_AVAILABLE+ hash. Just
set +twitter+ to +false+ once it nags again, and develop against Identica
only, for a while. Just make sure you re-enable it later and run your tests
against Twitter too.
= Benefits
* All base classes are diligently tested and girdled with tests, therefore if
modifications are going to break anything, you will know quickly.
* Simple command and answer bots can be done in a matter of minutes, just by
modifying the +@commands+ hash of +MicroBlogBot+.
= Known shortcomings
* Currently, the bot does not run permanently but runs a single cycle only,
every time you launch it manually.
* There is no way to delete messages. Consecutively, messages generated
during tests don't get cleaned up afterwards. This could annoy followers of
your bot. (My bot lost four of the due to test messages, so far.) However,
you could take your chances and run tests only when your bot's followers
are offline.
* Communicating by direct messages is not yet implemented.
* In case, Twitter temporarily blacklists our IP address we will run into it
without any preventive measures.
* In case our bot gets followed by a spammer, Twitter finds out before we do
and disables the respective account, our bot will try to follow back
nevertheless -- and run into an rejection by Twitter.
* It's untested what might happen once a followee decides to change their
nick name.
= Author
This micro-blogging chat bot mini-framework was developed in January/February
2009 by Wolfram R. Sieber <[email protected]> aka @dagobart aka A.F.
= Contribute to the MicroBlogBot framework
I'd be glad, if you'd contribute some code of your own to this here project
or if you could fix some of the things I left open to be fixed later or if
you would add some documentation to the framework. Or if you'd help to roll
the files to a gem.
However, I'd be glad to see just any contribution of yours to this here
project.
Looking forward to hear from you. Just send a mail.