botemon 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ MWM2NTA2NzA1OWZiMzYwMzZlNDNhMjEwZmY5MjcwYjBkYmM2MjM4OQ==
5
+ data.tar.gz: !binary |-
6
+ MDhkMmE0ZjVlY2RlNGZhZDRhMDU4MWU2MzcxOTM2M2FlODQ4NTViYg==
7
+ !binary "U0hBNTEy":
8
+ metadata.gz: !binary |-
9
+ NmQyNzk0MjFiZDFjZTcwYWY3ZTY2MjhhZDU1NWYzNzMzZTNkOWU0ODQ2MDc5
10
+ ZjdkMmI4ZDE1YTA3MzI4MmU3YTliMWYyNmU0ZmU1NTgyODJlNzVlMThhYjNk
11
+ NzVmMGI0YjUwNTg0YzQ2YzgxNTJiNDY5MzRmMWZkMzlkZTM3NGI=
12
+ data.tar.gz: !binary |-
13
+ ZWFjODljNTlhNDRkOWIyNWI0MzUxMTU1M2NhNDRiOGY0MWFlYWZiNmRjNjRl
14
+ YTQ3OTdhNTJhYzZlODQ0ZGYzNDAwZmQ3MjUwMzQ4NDZjZDhlZTEyMmZiZjA3
15
+ NTJmZjg4NTI0OGQyOTVjZWNmM2RkMGI4MTBhZjI1ODI5ZDM3NzI=
data/bin/botemon ADDED
@@ -0,0 +1,124 @@
1
+ #!/usr/bin/env ruby
2
+ #encoding: utf-8
3
+ #--
4
+ # Copyright(C) 2013 Giovanni Capuano <webmaster@giovannicapuano.net>
5
+ #
6
+ # This file is part of Botémon.
7
+ #
8
+ # Botémon is free software: you can redistribute it and/or modify
9
+ # it under the terms of the GNU General Public License as published by
10
+ # the Free Software Foundation, either version 3 of the License, or
11
+ # (at your option) any later version.
12
+ #
13
+ # Botémon is distributed in the hope that it will be useful,
14
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ # GNU General Public License for more details.
17
+ #
18
+ # You should have received a copy of the GNU General Public License
19
+ # along with Botémon. If not, see <http://www.gnu.org/licenses/>.
20
+ #++
21
+
22
+ require 'botemon'
23
+
24
+ abort 'Usage: botemon <bot_name> <bot_password> <server> <channels>' if ARGV.length < 4
25
+
26
+ Cinch::Bot.new {
27
+ configure do |c|
28
+ c.nick = ARGV[0]
29
+ c.realname = ARGV[0]
30
+ c.user = ARGV[0]
31
+ c.password = ARGV[1]
32
+ c.server = ARGV[2]
33
+ c.channels = ARGV.drop(3).map { |c| "\##{c}" }
34
+
35
+ c.plugins.plugins = [Cinch::Plugins::Login]
36
+ c.plugins.options[Cinch::Plugins::Login] = { :password => ARGV[1] }
37
+
38
+ @storage = Storage.new './cache.db'
39
+ @pokemon_trivia = nil
40
+ @players = []
41
+ @trivia_owner = ''
42
+ end
43
+
44
+ on :message, /^pkmn (.+)/ do |m, name|
45
+ @storage = Storage.new('./cache.db') unless @storage
46
+
47
+ name = Pokedex.id2name(name) if name.numeric?
48
+
49
+ if name == nil
50
+ m.reply Format(:red, 'Pokémon not found.')
51
+ else
52
+ pokemon = Pokedex.get name, @storage
53
+ m.reply pokemon ? "#{pokemon.to_s}\nhttp://www.smogon.com/bw/pokemon/#{name}".split("\n").map { |l| Format(:red, l) }.join("\n") : 'Pokémon not found.'
54
+ end
55
+ end
56
+
57
+ on :message, /^moveset (.+) (.+)/ do |m, name, tier|
58
+ name = Pokedex.id2name(name) if name.numeric?
59
+
60
+ if name == nil
61
+ m.reply Format(:red, 'Pokémon not found.')
62
+ else
63
+ moveset = Movedex.get name, tier
64
+ m.reply Format(:red, moveset ? moveset.to_s : 'Moveset not found.')
65
+ end
66
+ end
67
+
68
+ on :message, /^pktrivia$/ do |m|
69
+ @storage = Storage.new('./cache.db') unless @storage
70
+
71
+ if @pokemon_trivia != nil
72
+ m.reply Format(:red, 'Other players are playing, wait until they finish.')
73
+ m.reply Format(:red, @pokemon_trivia.clues)
74
+ else
75
+ @pokemon_trivia = Pokedex.get Pokedex.id2name(Random.new.rand(1..649)), @storage
76
+ @trivia_owner = m.user.nick
77
+
78
+ m.reply @pokemon_trivia.clues.split("\n").map { |l| Format(:red, l) }.join("\n")
79
+ m.reply Format(:red, "You have 30 seconds. Try to say which Pokémon is this!")
80
+
81
+ Timer(60) {
82
+ if @pokemon_trivia != nil
83
+ m.reply Format(:red, "Time expired. The secret Pokémon is #{@pokemon_trivia.name}!")
84
+ @pokemon_trivia = nil
85
+ end
86
+ }
87
+ end
88
+ end
89
+
90
+ on :message, /^pkstop$/ do |m|
91
+ if @pokemon_trivia != nil && (m.user.nick == 'mirkosp' || m.user.nick == 'RoxasShadowRS' || m.user.nick == @trivia_owner)
92
+ @pokemon_trivia = nil
93
+ @trivia_owner = ''
94
+ m.reply Format(:red, "Game aborted by #{m.user.nick}.")
95
+ else
96
+ m.reply Format(:red, "Only ops can stop the game. #{m.user.nick} GTFO.")
97
+ end
98
+ end
99
+
100
+ on :message, /^pktrivia (.+)$/ do |m, pokemon|
101
+ if @pokemon_trivia == nil
102
+ m.reply Format(:red, 'You have to start the game before to play.')
103
+ elsif pokemon.downcase == @pokemon_trivia.name.downcase
104
+ m.reply Format(:red, "Right, #{m.user.nick} won!")
105
+ @pokemon_trivia = nil
106
+ else
107
+ m.reply Format(:red, "Nope, #{m.user.nick} was wrong.")
108
+ end
109
+ end
110
+
111
+ on :message, /^pkdebug$/ do |m|
112
+ if @pokemon_trivia == nil
113
+ m.reply Format(:red, 'Game not started.')
114
+ elsif m.user.nick == 'mirkosp' || m.user.nick == 'RoxasShadowRS'
115
+ m.reply Format(:red, @pokemon_trivia.name)
116
+ else
117
+ m.reply Format(:red, 'VAI A ZAPPARE LA TERRA')
118
+ end
119
+ end
120
+
121
+ on :message, /^pkversion$/ do |m|
122
+ m.reply Botemon::version
123
+ end
124
+ }.start
data/lib/botemon.rb ADDED
@@ -0,0 +1,37 @@
1
+ #--
2
+ # Copyright(C) 2013 Giovanni Capuano <webmaster@giovannicapuano.net>
3
+ #
4
+ # This file is part of Botémon.
5
+ #
6
+ # Botémon is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU General Public License as published by
8
+ # the Free Software Foundation, either version 3 of the License, or
9
+ # (at your option) any later version.
10
+ #
11
+ # Botémon is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ # GNU General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU General Public License
17
+ # along with Botémon. If not, see <http://www.gnu.org/licenses/>.
18
+ #++
19
+
20
+ require 'cinch'
21
+ require 'cinch/plugins/login'
22
+
23
+ require 'open-uri'
24
+ require 'nokogiri'
25
+ require 'sanitize'
26
+ require 'json'
27
+
28
+ require 'botemon/string'
29
+ require 'botemon/pokemon'
30
+ require 'botemon/storage'
31
+ require 'botemon/pokedex'
32
+
33
+ require 'botemon/moveset'
34
+ require 'botemon/movedex'
35
+
36
+
37
+ require 'botemon/version'
@@ -0,0 +1,60 @@
1
+ #--
2
+ # Copyright(C) 2013 Giovanni Capuano <webmaster@giovannicapuano.net>
3
+ #
4
+ # This file is part of Botémon.
5
+ #
6
+ # Botémon is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU General Public License as published by
8
+ # the Free Software Foundation, either version 3 of the License, or
9
+ # (at your option) any later version.
10
+ #
11
+ # Botémon is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ # GNU General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU General Public License
17
+ # along with Botémon. If not, see <http://www.gnu.org/licenses/>.
18
+ #++
19
+
20
+ class Movedex
21
+ def self.id2name(id)
22
+ begin
23
+ return Nokogiri::HTML(open("http://pokemondb.net/pokedex/#{id}")).xpath('//div[@class="navbar"]/h1')[0].text
24
+ rescue
25
+ return nil
26
+ end
27
+ end
28
+
29
+ def self.tiers
30
+ ['uber', 'ou', 'bl', 'uu', 'bl2', 'ru', 'nu', 'lc', 'limbo', 'nfe']
31
+ end
32
+
33
+ def self.get(name, tier)
34
+ return nil if name == nil || tier == nil || !Movedex.tiers.include?(tier.downcase)
35
+
36
+ begin
37
+ url = URI::encode "http://www.smogon.com/bw/pokemon/#{name}/#{tier}"
38
+
39
+ moveset = Moveset.new
40
+ smogon = Nokogiri::HTML(open(url))
41
+ rescue
42
+ return nil
43
+ end
44
+
45
+ moveset.pokemon = smogon.xpath('//td[@class="header"]/h1').last.text
46
+ moveset.name = smogon.xpath('//td[@class="name"]/h2').first.text
47
+ moveset.tier = smogon.xpath('//table[@class="info"]/tr/td/a').last.text
48
+
49
+ section = smogon.xpath('//table[@class="info strategyheader"]/tr')[1].children
50
+ moveset.item = section[2].text.gsub(/\n/m, '').gsub(/\t/m, '').strip
51
+ moveset.ability = section[4].text.gsub(/\n/m, '').gsub(/\t/m, '').strip
52
+ moveset.nature = section[6].text.gsub(/\n/m, '').gsub(/\t/m, '').strip
53
+
54
+ section = smogon.xpath('//table[@class="info moveset"]/tr')[1].children
55
+ moveset.moves = section[0].text.strip.gsub(/\n/, '').gsub(/~/, ',').gsub(/\s\s/, '')[2..-1]
56
+ moveset.evs = section[2].text.strip
57
+
58
+ return moveset
59
+ end
60
+ end
@@ -0,0 +1,27 @@
1
+ #--
2
+ # Copyright(C) 2013 Giovanni Capuano <webmaster@giovannicapuano.net>
3
+ #
4
+ # This file is part of Botémon.
5
+ #
6
+ # Botémon is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU General Public License as published by
8
+ # the Free Software Foundation, either version 3 of the License, or
9
+ # (at your option) any later version.
10
+ #
11
+ # Botémon is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ # GNU General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU General Public License
17
+ # along with Botémon. If not, see <http://www.gnu.org/licenses/>.
18
+ #++
19
+
20
+ class Moveset
21
+ attr_accessor :pokemon, :name, :tier, :item, :ability, :nature, :moves, :evs
22
+
23
+ def to_s
24
+ "Name: #{pokemon}\nSet: #{name}\nTier: #{tier}\nItem: #{item}\nAbility: #{ability}\nNature: #{nature}\nMoves: #{moves}\nEVs: #{evs}"
25
+ end
26
+
27
+ end
@@ -0,0 +1,69 @@
1
+ #--
2
+ # Copyright(C) 2013 Giovanni Capuano <webmaster@giovannicapuano.net>
3
+ #
4
+ # This file is part of Botémon.
5
+ #
6
+ # Botémon is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU General Public License as published by
8
+ # the Free Software Foundation, either version 3 of the License, or
9
+ # (at your option) any later version.
10
+ #
11
+ # Botémon is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ # GNU General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU General Public License
17
+ # along with Botémon. If not, see <http://www.gnu.org/licenses/>.
18
+ #++
19
+
20
+ class Pokedex
21
+ def self.id2name(id)
22
+ begin
23
+ return Nokogiri::HTML(open("http://pokemondb.net/pokedex/#{id}")).xpath('//div[@class="navbar"]/h1')[0].text
24
+ rescue
25
+ return nil
26
+ end
27
+ end
28
+
29
+ def self.get(name, storage)
30
+ return nil if name == nil
31
+ return storage.get(name) if storage.is_cached? name
32
+
33
+ begin
34
+ url = URI::encode "http://www.smogon.com/bw/pokemon/#{name}"
35
+
36
+ pokemon = Pokemon.new
37
+ smogon = Nokogiri::HTML(open(url))
38
+ rescue
39
+ return nil
40
+ end
41
+
42
+ pokemon.name = smogon.xpath('//td[@class="header"]/h1').last.text
43
+ pokemon._name = pokemon.name.downcase
44
+
45
+ smogon.xpath('//table[@class="info"]/tr/td/a')[0..-2].each { |type|
46
+ (pokemon.types ||= []) << type.text
47
+ }
48
+
49
+ pokemon.tier = smogon.xpath('//table[@class="info"]/tr/td/a').last.text
50
+
51
+ smogon.xpath('//td[@class="ability"]/dl/dt/a').each { |ability|
52
+ (pokemon.abilities ||= []) << ability.text
53
+ }
54
+
55
+ begin
56
+ (pokemon.abilities ||= []) << smogon.xpath('//td[@class="ability"]/dl/dt/em/a').first.text
57
+ rescue
58
+ # No dream world ability :(
59
+ end
60
+
61
+ smogon.xpath('//td[@class="bar"]').each { |base_stat|
62
+ (pokemon.base_stats ||= []) << base_stat.text.strip
63
+ }
64
+
65
+ storage.add pokemon
66
+ storage.save
67
+ return pokemon
68
+ end
69
+ end
@@ -0,0 +1,51 @@
1
+ #--
2
+ # Copyright(C) 2013 Giovanni Capuano <webmaster@giovannicapuano.net>
3
+ #
4
+ # This file is part of Botémon.
5
+ #
6
+ # Botémon is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU General Public License as published by
8
+ # the Free Software Foundation, either version 3 of the License, or
9
+ # (at your option) any later version.
10
+ #
11
+ # Botémon is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ # GNU General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU General Public License
17
+ # along with Botémon. If not, see <http://www.gnu.org/licenses/>.
18
+ #++
19
+
20
+ class Pokemon
21
+ attr_accessor :name, :_name, :types, :tier, :abilities, :base_stats
22
+
23
+ def to_s
24
+ "Name: #{name}\nAbility: #{abilities.join(', ')}\nType: #{types.join(?/)}\nTier: #{tier}\nBase stats: #{base_stats.join(?/)}"
25
+ end
26
+
27
+ def clues
28
+ "Ability: #{abilities.join(', ')}\nType: #{types.join(?/)}\nTier: #{tier}\nBase stats: #{base_stats.join(?/)}"
29
+ end
30
+
31
+ def self.to_pokemon(ary)
32
+ pokemon = Pokemon.new
33
+ pokemon.name = ary['name']
34
+ pokemon._name = ary['_name']
35
+ pokemon.types = ary['types']
36
+ pokemon.tier = ary['tier']
37
+ pokemon.abilities = ary['abilities']
38
+ pokemon.base_stats = ary['base_stats']
39
+ return pokemon
40
+ end
41
+
42
+ def to_ary
43
+ { 'name' => name,
44
+ '_name' => _name,
45
+ 'types' => types,
46
+ 'tier' => tier,
47
+ 'abilities' => abilities,
48
+ 'base_stats' => base_stats
49
+ }
50
+ end
51
+ end
@@ -0,0 +1,58 @@
1
+ #--
2
+ # Copyright(C) 2013 Giovanni Capuano <webmaster@giovannicapuano.net>
3
+ #
4
+ # This file is part of Botémon.
5
+ #
6
+ # Botémon is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU General Public License as published by
8
+ # the Free Software Foundation, either version 3 of the License, or
9
+ # (at your option) any later version.
10
+ #
11
+ # Botémon is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ # GNU General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU General Public License
17
+ # along with Botémon. If not, see <http://www.gnu.org/licenses/>.
18
+ #++
19
+
20
+ class Storage
21
+ attr_accessor :file, :db
22
+
23
+ def initialize(file)
24
+ @file = file
25
+ db = File.exists?(file) ? JSON.load(File.read(file)) : []
26
+ @db = [].tap { |d|
27
+ db.each { |p| d << Pokemon.to_pokemon(p) }
28
+ }
29
+ end
30
+
31
+ def is_cached?(name)
32
+ return @db.select { |p| p._name == name.downcase }.any?
33
+ end
34
+
35
+ def get(name)
36
+ return @db.select { |p| p._name == name.downcase }.first
37
+ end
38
+
39
+ def get_all
40
+ @db
41
+ end
42
+ alias :dump :get_all
43
+
44
+ def add(pokemon)
45
+ @db << pokemon
46
+ end
47
+ alias :put :add
48
+
49
+ def save
50
+ db_ary = [].tap { |ary|
51
+ @db.each { |p| ary << p.to_ary }
52
+ }
53
+
54
+ File.open(@file, 'wb') { |f|
55
+ f.write JSON.dump(db_ary)
56
+ }
57
+ end
58
+ end
@@ -0,0 +1,24 @@
1
+ #--
2
+ # Copyright(C) 2013 Giovanni Capuano <webmaster@giovannicapuano.net>
3
+ #
4
+ # This file is part of Botémon.
5
+ #
6
+ # Botémon is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU General Public License as published by
8
+ # the Free Software Foundation, either version 3 of the License, or
9
+ # (at your option) any later version.
10
+ #
11
+ # Botémon is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ # GNU General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU General Public License
17
+ # along with Botémon. If not, see <http://www.gnu.org/licenses/>.
18
+ #++
19
+
20
+ class String
21
+ def numeric?
22
+ self.to_i.to_s == self || self.to_f.to_s == self
23
+ end
24
+ end
@@ -0,0 +1,25 @@
1
+ #encoding: utf-8
2
+ #--
3
+ # Copyright(C) 2013 Giovanni Capuano <webmaster@giovannicapuano.net>
4
+ #
5
+ # This file is part of BOTémon.
6
+ #
7
+ # BOTémon is free software: you can redistribute it and/or modify
8
+ # it under the terms of the GNU General Public License as published by
9
+ # the Free Software Foundation, either version 3 of the License, or
10
+ # (at your option) any later version.
11
+ #
12
+ # BOTémon is distributed in the hope that it will be useful,
13
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ # GNU General Public License for more details.
16
+ #
17
+ # You should have received a copy of the GNU General Public License
18
+ # along with BOTémon. If not, see <http://www.gnu.org/licenses/>.
19
+ #++
20
+
21
+ module Botemon
22
+ def self.version
23
+ '0.2.3'
24
+ end
25
+ end
metadata ADDED
@@ -0,0 +1,108 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: botemon
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.3
5
+ platform: ruby
6
+ authors:
7
+ - Giovanni Capuano
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-07-10 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: cinch
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ! '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ! '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: cinch-login
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ! '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: nokogiri
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ! '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: sanitize
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ! '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ description: IRC bot which implements a Pokédex and a simple trivia game.
70
+ email: webmaster@giovannicapuano.net
71
+ executables:
72
+ - botemon
73
+ extensions: []
74
+ extra_rdoc_files: []
75
+ files:
76
+ - lib/botemon/movedex.rb
77
+ - lib/botemon/moveset.rb
78
+ - lib/botemon/pokedex.rb
79
+ - lib/botemon/pokemon.rb
80
+ - lib/botemon/storage.rb
81
+ - lib/botemon/string.rb
82
+ - lib/botemon/version.rb
83
+ - lib/botemon.rb
84
+ - bin/botemon
85
+ homepage: http://www.giovannicapuano.net
86
+ licenses: []
87
+ metadata: {}
88
+ post_install_message:
89
+ rdoc_options: []
90
+ require_paths:
91
+ - lib
92
+ required_ruby_version: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ! '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ required_rubygems_version: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ requirements: []
103
+ rubyforge_project:
104
+ rubygems_version: 2.0.4
105
+ signing_key:
106
+ specification_version: 4
107
+ summary: IRC bot for pokéfag.
108
+ test_files: []