travian_bot 0.1.2 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/VERSION +1 -1
- data/lib/travian_bot/application.rb +48 -38
- data/lib/travian_bot/application/buildings.rb +44 -0
- data/lib/travian_bot/application/connection.rb +31 -0
- data/lib/travian_bot/application/display.rb +28 -0
- data/lib/travian_bot/application/navigate.rb +32 -0
- data/lib/travian_bot/application/queue.rb +37 -0
- data/travian_bot.gemspec +6 -1
- metadata +15 -10
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.2.0
|
@@ -1,57 +1,67 @@
|
|
1
1
|
require 'selenium-webdriver'
|
2
2
|
require 'chronic'
|
3
|
-
|
3
|
+
|
4
|
+
Dir.glob(File.join(File.dirname(__FILE__), '/application/*.rb')).sort.each { |lib| load lib }
|
5
|
+
|
4
6
|
|
5
7
|
class TravianBot
|
6
8
|
class Application
|
7
9
|
class << self
|
8
|
-
|
10
|
+
include Connection
|
11
|
+
include Queue
|
12
|
+
include Display
|
13
|
+
include Buildings
|
14
|
+
|
15
|
+
# Is executed by the travinbot shell script.
|
9
16
|
def run!(*arguments)
|
10
|
-
|
11
|
-
|
12
|
-
|
17
|
+
h1('Welcome to your TravianBot')
|
18
|
+
@game = login
|
19
|
+
|
20
|
+
current_building_queue
|
21
|
+
current_troop_movements
|
22
|
+
current_avaible_buildings
|
23
|
+
|
24
|
+
@game.quit
|
13
25
|
|
14
26
|
return 1
|
15
27
|
end
|
16
28
|
|
17
29
|
private
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
30
|
+
def current_avaible_buildings
|
31
|
+
h2 'Avaible buildings'
|
32
|
+
buildings = avaible_buildings(@game)
|
33
|
+
|
34
|
+
buildings.each do |building|
|
35
|
+
puts building.to_s
|
36
|
+
end
|
37
|
+
new_line
|
24
38
|
end
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
end
|
39
|
-
|
40
|
-
# Close the selenium connection
|
41
|
-
def close
|
42
|
-
@driver.quit
|
39
|
+
|
40
|
+
def current_building_queue
|
41
|
+
h2('Current building queue')
|
42
|
+
buildings = building_queue(@game)
|
43
|
+
|
44
|
+
if buildings.empty?
|
45
|
+
text 'nothing building'
|
46
|
+
else
|
47
|
+
buildings.each do |building|
|
48
|
+
puts building.to_s
|
49
|
+
end
|
50
|
+
new_line
|
51
|
+
end
|
43
52
|
end
|
44
53
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
54
|
+
def current_troop_movements
|
55
|
+
h2('Current troop movement')
|
56
|
+
troops = troop_movement(@game)
|
57
|
+
|
58
|
+
if troops.empty?
|
59
|
+
text 'No troops movement'
|
60
|
+
else
|
61
|
+
troops.each do |troop|
|
62
|
+
puts troop.to_s
|
52
63
|
end
|
53
|
-
|
54
|
-
puts 'Nothing in building queue'
|
64
|
+
new_line
|
55
65
|
end
|
56
66
|
end
|
57
67
|
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'travian_bot/application/navigate'
|
2
|
+
|
3
|
+
class TravianBot
|
4
|
+
class Application
|
5
|
+
module Buildings
|
6
|
+
include TravianBot::Application::Navigate
|
7
|
+
|
8
|
+
def avaible_buildings(selenium)
|
9
|
+
begin
|
10
|
+
elements = selenium.find_elements(:xpath, '//map[@id="rx"]/area')
|
11
|
+
resources = elements.inject([]) do |out, element|
|
12
|
+
out << element.attribute('alt')
|
13
|
+
|
14
|
+
out
|
15
|
+
end
|
16
|
+
rescue Selenium::WebDriver::Error::NoSuchElementError
|
17
|
+
resources = []
|
18
|
+
end
|
19
|
+
|
20
|
+
to_village_page(selenium)
|
21
|
+
show_building_level(selenium)
|
22
|
+
|
23
|
+
begin
|
24
|
+
elements = selenium.find_elements(:xpath, '//div[@id="village_map"]/map/area')
|
25
|
+
buildings = elements.inject([]) do |out, element|
|
26
|
+
out << element.attribute('alt')
|
27
|
+
|
28
|
+
out
|
29
|
+
end
|
30
|
+
rescue Selenium::WebDriver::Error::NoSuchElementError
|
31
|
+
buildings = []
|
32
|
+
end
|
33
|
+
|
34
|
+
resources + buildings
|
35
|
+
end
|
36
|
+
|
37
|
+
private
|
38
|
+
def show_building_level(selenium)
|
39
|
+
link = selenium.find_element(:xpath, '//img[@id="lswitch"]')
|
40
|
+
link.click
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
|
3
|
+
class TravianBot
|
4
|
+
class Application
|
5
|
+
module Connection
|
6
|
+
# Login in to travian page
|
7
|
+
def login
|
8
|
+
url, user, password = get_credentials
|
9
|
+
driver = Selenium::WebDriver.for :firefox
|
10
|
+
driver.navigate.to(url)
|
11
|
+
# Get the form fields.
|
12
|
+
name_input = driver.find_element(:name, 'name')
|
13
|
+
password_input = driver.find_element(:name, 'password')
|
14
|
+
login_button = driver.find_element(:id, 's1')
|
15
|
+
# Login
|
16
|
+
name_input.send_keys(user)
|
17
|
+
password_input.send_keys(password)
|
18
|
+
login_button.submit
|
19
|
+
|
20
|
+
driver
|
21
|
+
end
|
22
|
+
|
23
|
+
# Load the credentials from ENV['HOME']/.travian_bot
|
24
|
+
def get_credentials
|
25
|
+
credentials = YAML::load(File.open("#{ENV['HOME']}/.travian_bot"))
|
26
|
+
|
27
|
+
[credentials['travian_bot']['url'], credentials['travian_bot']['usr'], credentials['travian_bot']['pwd']]
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
class TravianBot
|
2
|
+
class Application
|
3
|
+
module Display
|
4
|
+
def h1(text)
|
5
|
+
puts ' '
|
6
|
+
puts "#{text}"
|
7
|
+
puts "=" * text.length
|
8
|
+
puts ' '
|
9
|
+
puts ' '
|
10
|
+
end
|
11
|
+
|
12
|
+
def h2(text)
|
13
|
+
puts "#{text}"
|
14
|
+
puts "-" * text.length
|
15
|
+
puts ' '
|
16
|
+
end
|
17
|
+
|
18
|
+
def text(text)
|
19
|
+
puts text
|
20
|
+
puts ' '
|
21
|
+
end
|
22
|
+
|
23
|
+
def new_line
|
24
|
+
puts ' '
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
class TravianBot
|
2
|
+
class Application
|
3
|
+
module Navigate
|
4
|
+
def to_resources_page(selenium)
|
5
|
+
to_page(selenium, 'resources')
|
6
|
+
end
|
7
|
+
|
8
|
+
def to_village_page(selenium)
|
9
|
+
to_page(selenium, 'village')
|
10
|
+
end
|
11
|
+
|
12
|
+
def to_map_page(selenium)
|
13
|
+
to_page(selenium, 'map')
|
14
|
+
end
|
15
|
+
|
16
|
+
def to_stats_page(selenium)
|
17
|
+
to_page(selenium, 'stats')
|
18
|
+
end
|
19
|
+
|
20
|
+
def to_reports_page(selenium)
|
21
|
+
to_page(selenium, 'reports')
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
def to_page(selenium, target)
|
26
|
+
wait = Selenium::WebDriver::Wait.new
|
27
|
+
link = selenium.find_element(:xpath, "//ul[@id='navigation']/li[@class='#{target}']/a")
|
28
|
+
link.click
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'selenium-webdriver'
|
2
|
+
|
3
|
+
class TravianBot
|
4
|
+
class Application
|
5
|
+
module Queue
|
6
|
+
# Check if building something
|
7
|
+
def building_queue(selenium)
|
8
|
+
begin
|
9
|
+
building_pipe = selenium.find_elements(:xpath, "//table[@id='building_contract']/tbody/tr")
|
10
|
+
|
11
|
+
building_pipe.inject([]) do |out, entry|
|
12
|
+
out << entry.text
|
13
|
+
|
14
|
+
out
|
15
|
+
end
|
16
|
+
rescue Selenium::WebDriver::Error::NoSuchElementError
|
17
|
+
[]
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
# Show the troop movement.
|
22
|
+
def troop_movement(selenium)
|
23
|
+
begin
|
24
|
+
troop_movement = selenium.find_elements(:xpath, "//table[@id='movements']/tbody/tr")
|
25
|
+
|
26
|
+
troop_movement.inject([]) do |out, movement|
|
27
|
+
out << movement.text
|
28
|
+
|
29
|
+
out
|
30
|
+
end
|
31
|
+
rescue Selenium::WebDriver::Error::NoSuchElementError
|
32
|
+
[]
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
data/travian_bot.gemspec
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "travian_bot"
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.2.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Roman Simecek"]
|
@@ -28,6 +28,11 @@ Gem::Specification.new do |s|
|
|
28
28
|
"bin/travianbot",
|
29
29
|
"lib/travian_bot.rb",
|
30
30
|
"lib/travian_bot/application.rb",
|
31
|
+
"lib/travian_bot/application/buildings.rb",
|
32
|
+
"lib/travian_bot/application/connection.rb",
|
33
|
+
"lib/travian_bot/application/display.rb",
|
34
|
+
"lib/travian_bot/application/navigate.rb",
|
35
|
+
"lib/travian_bot/application/queue.rb",
|
31
36
|
"test/helper.rb",
|
32
37
|
"test/test_travian_bot.rb",
|
33
38
|
"travian_bot.gemspec"
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: travian_bot
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ date: 2011-10-24 00:00:00.000000000Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: selenium-webdriver
|
16
|
-
requirement: &
|
16
|
+
requirement: &2156060440 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *2156060440
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: chronic
|
27
|
-
requirement: &
|
27
|
+
requirement: &2156056740 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *2156056740
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: bundler
|
38
|
-
requirement: &
|
38
|
+
requirement: &2156050160 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: 1.0.0
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *2156050160
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: jeweler
|
49
|
-
requirement: &
|
49
|
+
requirement: &2156047020 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
@@ -54,7 +54,7 @@ dependencies:
|
|
54
54
|
version: 1.6.4
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *2156047020
|
58
58
|
description: A little bot for travian.
|
59
59
|
email: roman.simecek@cyt.ch
|
60
60
|
executables:
|
@@ -74,6 +74,11 @@ files:
|
|
74
74
|
- bin/travianbot
|
75
75
|
- lib/travian_bot.rb
|
76
76
|
- lib/travian_bot/application.rb
|
77
|
+
- lib/travian_bot/application/buildings.rb
|
78
|
+
- lib/travian_bot/application/connection.rb
|
79
|
+
- lib/travian_bot/application/display.rb
|
80
|
+
- lib/travian_bot/application/navigate.rb
|
81
|
+
- lib/travian_bot/application/queue.rb
|
77
82
|
- test/helper.rb
|
78
83
|
- test/test_travian_bot.rb
|
79
84
|
- travian_bot.gemspec
|
@@ -92,7 +97,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
92
97
|
version: '0'
|
93
98
|
segments:
|
94
99
|
- 0
|
95
|
-
hash:
|
100
|
+
hash: -1529457768905218778
|
96
101
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
97
102
|
none: false
|
98
103
|
requirements:
|