kastner-twitter-bot 0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +1 -0
- data/LICENSE +20 -0
- data/Manifest +8 -0
- data/README +30 -0
- data/README.markdown +37 -0
- data/examples/my_bot.rb +73 -0
- data/lib/twitter_bot.rb +36 -0
- data/site/index.html +0 -0
- data/twitter-bot.gemspec +31 -0
- metadata +70 -0
data/CHANGELOG
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
v0.1 Initial release
|
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2008 Erik Kastner
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/Manifest
ADDED
data/README
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
Realtime Twitter Bot
|
2
|
+
====================
|
3
|
+
|
4
|
+
A realtime bot for [twitter](http://twitter.com/)
|
5
|
+
|
6
|
+
Gem dependencies:
|
7
|
+
* [xmpp4r/simple](http://code.google.com/p/xmpp4r-simple/)
|
8
|
+
* [twitter](http://twitter.rubyforge.org/)
|
9
|
+
* [simple-daemon](http://simple-daemon.rubyforge.org/)
|
10
|
+
|
11
|
+
|
12
|
+
Using the bot
|
13
|
+
-------------
|
14
|
+
|
15
|
+
Place a file in your $HOME: **bot.yml** with the format:
|
16
|
+
`
|
17
|
+
twitter_user: "account"
|
18
|
+
twitter_pass: "password"
|
19
|
+
jabber_acct: "jabber user (user@gmail.com works fine)"
|
20
|
+
jabber_pass: "jabber/gmail password"
|
21
|
+
`
|
22
|
+
|
23
|
+
Registering the jabber account with twitter
|
24
|
+
-------------------------------------------
|
25
|
+
|
26
|
+
**DO NOT SKIP THIS**
|
27
|
+
|
28
|
+
* visit http://twitter.com/devices
|
29
|
+
* add your jabber account
|
30
|
+
* use a jabber client (iChat, adium, etc), sign in to the account and verify the code twitter gives you
|
data/README.markdown
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
Realtime Twitter Bot
|
2
|
+
====================
|
3
|
+
|
4
|
+
A realtime bot for [twitter](http://twitter.com/)
|
5
|
+
|
6
|
+
Gem dependencies:
|
7
|
+
* [xmpp4r/simple](http://code.google.com/p/xmpp4r-simple/)
|
8
|
+
* [twitter](http://twitter.rubyforge.org/)
|
9
|
+
* [simple-daemon](http://simple-daemon.rubyforge.org/)
|
10
|
+
|
11
|
+
|
12
|
+
Using the bot
|
13
|
+
-------------
|
14
|
+
|
15
|
+
Place a file in your $HOME: **bot.yml** with the format:
|
16
|
+
|
17
|
+
twitter_user: "account"
|
18
|
+
twitter_pass: "password"
|
19
|
+
jabber_acct: "jabber user (user@gmail.com works fine)"
|
20
|
+
jabber_pass: "jabber/gmail password"
|
21
|
+
|
22
|
+
|
23
|
+
Registering the jabber account with twitter
|
24
|
+
-------------------------------------------
|
25
|
+
|
26
|
+
**DO NOT SKIP THIS**
|
27
|
+
|
28
|
+
* visit http://twitter.com/devices
|
29
|
+
* add your jabber account
|
30
|
+
* use a jabber client (iChat, adium, etc), sign in to the account and verify the code twitter gives you
|
31
|
+
* if you'd like to handle direct messages, ask [al3x](http://twitter.com/al3x) to turn on *autofollow*
|
32
|
+
|
33
|
+
|
34
|
+
Contributors
|
35
|
+
------------
|
36
|
+
|
37
|
+
* Erik [Kastner](http://metaatem.net) <kastner@gmail.com>
|
data/examples/my_bot.rb
ADDED
@@ -0,0 +1,73 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
$:.unshift("../")
|
4
|
+
require 'rubygems'
|
5
|
+
require 'simple-daemon'
|
6
|
+
require 'twitter_bot'
|
7
|
+
require 'YAML'
|
8
|
+
|
9
|
+
# require 'ruby-debug'
|
10
|
+
|
11
|
+
WORKING_DIR = "/tmp/bingo-bot/"
|
12
|
+
DEBUG = true
|
13
|
+
|
14
|
+
class MyBot < TwitterBot
|
15
|
+
def initialize(twitter_username, twitter_password, jabber_account, jabber_password)
|
16
|
+
super
|
17
|
+
@bot_name = twitter_username
|
18
|
+
end
|
19
|
+
|
20
|
+
def go
|
21
|
+
received_messages { |message| deal_with(message.body) }
|
22
|
+
end
|
23
|
+
|
24
|
+
def deal_with(message)
|
25
|
+
log(message) if DEBUG
|
26
|
+
case message
|
27
|
+
when /^(.*):\s*@#{@bot_name}:?\s*(.*)\s*$/i # @ reply
|
28
|
+
user, command = $1, $2
|
29
|
+
log("@reply from #{user} / #{command}") if DEBUG
|
30
|
+
handle_reply(user, command)
|
31
|
+
when /Direct from (.*):\n([^\n]+)\n/
|
32
|
+
user, command = $1, $2
|
33
|
+
log("#{user} / #{command}") if DEBUG
|
34
|
+
handle_dm(user, command)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def end
|
39
|
+
disconnect
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
class BotRunner < SimpleDaemon::Base
|
44
|
+
`mkdir -p #{WORKING_DIR}` # just make sure the working dir exists
|
45
|
+
SimpleDaemon::WORKING_DIRECTORY = WORKING_DIR
|
46
|
+
|
47
|
+
def self.start
|
48
|
+
TwitterBot.log("start up") if DEBUG
|
49
|
+
initialize_envrionment
|
50
|
+
|
51
|
+
@bot = MyBot.new(@bot_settings["twitter_user"], @bot_settings["twitter_pass"], @bot_settings["jabber_acct"], @bot_settings["jabber_pass"])
|
52
|
+
loop do
|
53
|
+
begin
|
54
|
+
@bot.go
|
55
|
+
rescue => e
|
56
|
+
TwitterBot.log(e.inspect) if DEBUG
|
57
|
+
end
|
58
|
+
sleep(2)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def self.stop
|
63
|
+
@bingo.end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def initialize_envrionment
|
68
|
+
raise "Missing file #{ENV["HOME"]}/bot.yml" unless File.exists?("#{ENV["HOME"]}/bot.yml")
|
69
|
+
|
70
|
+
@bot_settings = YAML::load_file("#{ENV["HOME"]}/bot.yml")
|
71
|
+
end
|
72
|
+
|
73
|
+
BotRunner.daemonize
|
data/lib/twitter_bot.rb
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'xmpp4r-simple'
|
5
|
+
require 'twitter'
|
6
|
+
require 'syslog'
|
7
|
+
|
8
|
+
class TwitterBot < Jabber::Simple
|
9
|
+
|
10
|
+
TWITTER_JABBER = "twitter@twitter.com"
|
11
|
+
|
12
|
+
def self.log(message)
|
13
|
+
Syslog.open($0, Syslog::LOG_PID | Syslog::LOG_CONS) { |s| s.warning message }
|
14
|
+
end
|
15
|
+
|
16
|
+
def initialize(twitter_username, twitter_password, jabber_account, jabber_password)
|
17
|
+
@twitter = Twitter::Base.new(twitter_username, twitter_password)
|
18
|
+
super(jabber_account, jabber_password)
|
19
|
+
end
|
20
|
+
|
21
|
+
def log(message)
|
22
|
+
TwitterBot.log(message)
|
23
|
+
end
|
24
|
+
|
25
|
+
def say(message)
|
26
|
+
deliver(TWITTER_JABBER, message)
|
27
|
+
end
|
28
|
+
|
29
|
+
def direct_message(to, message)
|
30
|
+
deliver(TWITTER_JABBER, "d #{to} #{message}")
|
31
|
+
end
|
32
|
+
|
33
|
+
def user(id_or_screen_name)
|
34
|
+
@twitter.user(id_or_screen_name)
|
35
|
+
end
|
36
|
+
end
|
data/site/index.html
ADDED
File without changes
|
data/twitter-bot.gemspec
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
|
2
|
+
# Gem::Specification for Twitter-bot-0.1
|
3
|
+
# Originally generated by Echoe
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = %q{twitter-bot}
|
7
|
+
s.version = "0.1"
|
8
|
+
|
9
|
+
s.specification_version = 2 if s.respond_to? :specification_version=
|
10
|
+
|
11
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
12
|
+
s.authors = ["Erik Kastner"]
|
13
|
+
s.date = %q{2008-04-29}
|
14
|
+
s.description = %q{A real-time twitter bot that uses Jabber (XMPP)}
|
15
|
+
s.email = %q{}
|
16
|
+
s.extra_rdoc_files = ["CHANGELOG", "lib/twitter_bot.rb", "LICENSE", "README", "README.markdown"]
|
17
|
+
s.files = ["CHANGELOG", "examples/my_bot.rb", "lib/twitter_bot.rb", "LICENSE", "Manifest", "README", "README.markdown", "site/index.html", "twitter-bot.gemspec"]
|
18
|
+
s.has_rdoc = true
|
19
|
+
s.homepage = %q{http://github.com/kastner/twitter-bot/}
|
20
|
+
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Twitter-bot", "--main", "README"]
|
21
|
+
s.require_paths = ["lib"]
|
22
|
+
s.rubyforge_project = %q{twitter-bot}
|
23
|
+
s.rubygems_version = %q{1.0.1}
|
24
|
+
s.summary = %q{A real-time twitter bot that uses Jabber (XMPP)}
|
25
|
+
end
|
26
|
+
|
27
|
+
|
28
|
+
# # Original Rakefile source (requires the Echoe gem):
|
29
|
+
#
|
30
|
+
# require 'echoe'
|
31
|
+
# Echoe.new('twitter-bot')
|
metadata
ADDED
@@ -0,0 +1,70 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: kastner-twitter-bot
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: "0.1"
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Erik Kastner
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2008-04-29 00:00:00 -07:00
|
13
|
+
default_executable:
|
14
|
+
dependencies: []
|
15
|
+
|
16
|
+
description: A real-time twitter bot that uses Jabber (XMPP)
|
17
|
+
email: ""
|
18
|
+
executables: []
|
19
|
+
|
20
|
+
extensions: []
|
21
|
+
|
22
|
+
extra_rdoc_files:
|
23
|
+
- CHANGELOG
|
24
|
+
- lib/twitter_bot.rb
|
25
|
+
- LICENSE
|
26
|
+
- README
|
27
|
+
- README.markdown
|
28
|
+
files:
|
29
|
+
- CHANGELOG
|
30
|
+
- examples/my_bot.rb
|
31
|
+
- lib/twitter_bot.rb
|
32
|
+
- LICENSE
|
33
|
+
- Manifest
|
34
|
+
- README
|
35
|
+
- README.markdown
|
36
|
+
- site/index.html
|
37
|
+
- twitter-bot.gemspec
|
38
|
+
has_rdoc: true
|
39
|
+
homepage: http://github.com/kastner/twitter-bot/
|
40
|
+
post_install_message:
|
41
|
+
rdoc_options:
|
42
|
+
- --line-numbers
|
43
|
+
- --inline-source
|
44
|
+
- --title
|
45
|
+
- Twitter-bot
|
46
|
+
- --main
|
47
|
+
- README
|
48
|
+
require_paths:
|
49
|
+
- lib
|
50
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: "0"
|
55
|
+
version:
|
56
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - ">="
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: "0"
|
61
|
+
version:
|
62
|
+
requirements: []
|
63
|
+
|
64
|
+
rubyforge_project: twitter-bot
|
65
|
+
rubygems_version: 1.2.0
|
66
|
+
signing_key:
|
67
|
+
specification_version: 2
|
68
|
+
summary: A real-time twitter bot that uses Jabber (XMPP)
|
69
|
+
test_files: []
|
70
|
+
|