cinch 1.1.3 → 2.0.0.pre.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (83) hide show
  1. data/LICENSE +1 -0
  2. data/README.md +3 -3
  3. data/docs/bot_options.md +435 -0
  4. data/docs/changes.md +440 -0
  5. data/docs/common_mistakes.md +35 -0
  6. data/docs/common_tasks.md +47 -0
  7. data/docs/encodings.md +67 -0
  8. data/docs/events.md +272 -0
  9. data/docs/logging.md +5 -0
  10. data/docs/migrating.md +267 -0
  11. data/docs/readme.md +18 -0
  12. data/examples/plugins/custom_prefix.rb +1 -1
  13. data/examples/plugins/dice_roll.rb +38 -0
  14. data/examples/plugins/lambdas.rb +1 -1
  15. data/examples/plugins/memo.rb +16 -10
  16. data/examples/plugins/url_shorten.rb +1 -0
  17. data/lib/cinch.rb +5 -60
  18. data/lib/cinch/ban.rb +13 -7
  19. data/lib/cinch/bot.rb +228 -403
  20. data/lib/cinch/{cache_manager.rb → cached_list.rb} +5 -1
  21. data/lib/cinch/callback.rb +3 -0
  22. data/lib/cinch/channel.rb +119 -195
  23. data/lib/cinch/{channel_manager.rb → channel_list.rb} +6 -3
  24. data/lib/cinch/configuration.rb +73 -0
  25. data/lib/cinch/configuration/bot.rb +47 -0
  26. data/lib/cinch/configuration/dcc.rb +16 -0
  27. data/lib/cinch/configuration/plugins.rb +41 -0
  28. data/lib/cinch/configuration/sasl.rb +17 -0
  29. data/lib/cinch/configuration/ssl.rb +19 -0
  30. data/lib/cinch/configuration/storage.rb +37 -0
  31. data/lib/cinch/configuration/timeouts.rb +14 -0
  32. data/lib/cinch/constants.rb +531 -369
  33. data/lib/cinch/dcc.rb +12 -0
  34. data/lib/cinch/dcc/dccable_object.rb +37 -0
  35. data/lib/cinch/dcc/incoming.rb +1 -0
  36. data/lib/cinch/dcc/incoming/send.rb +131 -0
  37. data/lib/cinch/dcc/outgoing.rb +1 -0
  38. data/lib/cinch/dcc/outgoing/send.rb +115 -0
  39. data/lib/cinch/exceptions.rb +8 -1
  40. data/lib/cinch/formatting.rb +106 -0
  41. data/lib/cinch/handler.rb +104 -0
  42. data/lib/cinch/handler_list.rb +86 -0
  43. data/lib/cinch/helpers.rb +167 -10
  44. data/lib/cinch/irc.rb +525 -110
  45. data/lib/cinch/isupport.rb +11 -9
  46. data/lib/cinch/logger.rb +168 -0
  47. data/lib/cinch/logger/formatted_logger.rb +72 -55
  48. data/lib/cinch/logger/zcbot_logger.rb +9 -24
  49. data/lib/cinch/logger_list.rb +62 -0
  50. data/lib/cinch/mask.rb +19 -10
  51. data/lib/cinch/message.rb +94 -28
  52. data/lib/cinch/message_queue.rb +70 -28
  53. data/lib/cinch/mode_parser.rb +6 -1
  54. data/lib/cinch/network.rb +104 -0
  55. data/lib/cinch/{rubyext/queue.rb → open_ended_queue.rb} +8 -1
  56. data/lib/cinch/pattern.rb +24 -4
  57. data/lib/cinch/plugin.rb +352 -177
  58. data/lib/cinch/plugin_list.rb +35 -0
  59. data/lib/cinch/rubyext/float.rb +3 -0
  60. data/lib/cinch/rubyext/module.rb +7 -0
  61. data/lib/cinch/rubyext/string.rb +9 -0
  62. data/lib/cinch/sasl.rb +34 -0
  63. data/lib/cinch/sasl/dh_blowfish.rb +71 -0
  64. data/lib/cinch/sasl/diffie_hellman.rb +47 -0
  65. data/lib/cinch/sasl/mechanism.rb +6 -0
  66. data/lib/cinch/sasl/plain.rb +26 -0
  67. data/lib/cinch/storage.rb +62 -0
  68. data/lib/cinch/storage/null.rb +12 -0
  69. data/lib/cinch/storage/yaml.rb +96 -0
  70. data/lib/cinch/syncable.rb +13 -1
  71. data/lib/cinch/target.rb +144 -0
  72. data/lib/cinch/timer.rb +145 -0
  73. data/lib/cinch/user.rb +169 -225
  74. data/lib/cinch/{user_manager.rb → user_list.rb} +7 -2
  75. data/lib/cinch/utilities/deprecation.rb +12 -0
  76. data/lib/cinch/utilities/encoding.rb +54 -0
  77. data/lib/cinch/utilities/kernel.rb +13 -0
  78. data/lib/cinch/utilities/string.rb +13 -0
  79. data/lib/cinch/version.rb +4 -0
  80. metadata +88 -47
  81. data/lib/cinch/logger/logger.rb +0 -44
  82. data/lib/cinch/logger/null_logger.rb +0 -18
  83. data/lib/cinch/rubyext/infinity.rb +0 -1
@@ -1,7 +1,10 @@
1
- require "cinch/cache_manager"
1
+ require "cinch/cached_list"
2
2
 
3
3
  module Cinch
4
- class UserManager < CacheManager
4
+ # @since 2.0.0
5
+ # @version 1.1.0
6
+ # @note In prior versions, this class was called UserManager
7
+ class UserList < CachedList
5
8
  # Finds or creates a user.
6
9
  # @overload find_ensured(nick)
7
10
  # Finds or creates a user based on his nick.
@@ -45,6 +48,7 @@ module Cinch
45
48
  end
46
49
 
47
50
  # @api private
51
+ # @return [void]
48
52
  def update_nick(user)
49
53
  @mutex.synchronize do
50
54
  @cache[user.nick.irc_downcase(@bot.irc.isupport["CASEMAPPING"])] = user
@@ -53,6 +57,7 @@ module Cinch
53
57
  end
54
58
 
55
59
  # @api private
60
+ # @return [void]
56
61
  def delete(user)
57
62
  @cache.delete_if {|n, u| u == user }
58
63
  end
@@ -0,0 +1,12 @@
1
+ module Cinch
2
+ # @since 2.0.0
3
+ # @api private
4
+ module Utilities
5
+ module Deprecation
6
+ def self.print_deprecation(version, method)
7
+ $stderr.puts "Deprecation warning: Beginning with version #{version}, #{method} should not be used anymore."
8
+ $stderr.puts caller
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,54 @@
1
+ module Cinch
2
+ # @since 2.0.0
3
+ # @api private
4
+ module Utilities
5
+ module Encoding
6
+ def self.encode_incoming(string, encoding)
7
+ string = string.dup
8
+ if encoding == :irc
9
+ # If incoming text is valid UTF-8, it will be interpreted as
10
+ # such. If it fails validation, a CP1252 -&gt; UTF-8 conversion
11
+ # is performed. This allows you to see non-ASCII from mIRC
12
+ # users (non-UTF-8) and other users sending you UTF-8.
13
+ #
14
+ # (from http://xchat.org/encoding/#hybrid)
15
+ string.force_encoding("UTF-8")
16
+ if !string.valid_encoding?
17
+ string.force_encoding("CP1252").encode!("UTF-8", {:invalid => :replace, :undef => :replace})
18
+ end
19
+ else
20
+ string.force_encoding(encoding).encode!({:invalid => :replace, :undef => :replace})
21
+ string = string.chars.select { |c| c.valid_encoding? }.join
22
+ end
23
+
24
+ return string
25
+ end
26
+
27
+ def self.encode_outgoing(string, encoding)
28
+ string = string.dup
29
+ if encoding == :irc
30
+ # If your text contains only characters that fit inside the CP1252
31
+ # code page (aka Windows Latin-1), the entire line will be sent
32
+ # that way. mIRC users should see it correctly. XChat users who
33
+ # are using UTF-8 will also see it correctly, because it will fail
34
+ # UTF-8 validation and will be assumed to be CP1252, even by older
35
+ # XChat versions.
36
+ #
37
+ # If the text doesn't fit inside the CP1252 code page, (for example if you
38
+ # type Eastern European characters, or Russian) it will be sent as UTF-8. Only
39
+ # UTF-8 capable clients will be able to see these characters correctly
40
+ #
41
+ # (from http://xchat.org/encoding/#hybrid)
42
+ begin
43
+ string.encode!("CP1252")
44
+ rescue ::Encoding::UndefinedConversionError
45
+ end
46
+ else
47
+ string.encode!(encoding, {:invalid => :replace, :undef => :replace}).force_encoding("ASCII-8BIT")
48
+ end
49
+
50
+ return string
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,13 @@
1
+ module Cinch
2
+ # @since 2.0.0
3
+ # @api private
4
+ module Utilities
5
+ module Kernel
6
+ # @return [Object]
7
+ def self.string_to_const(s)
8
+ return s unless s.is_a?(::String)
9
+ s.split("::").inject(Kernel) {|base, name| base.const_get(name) }
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ module Cinch
2
+ # @since 2.0.0
3
+ # @api private
4
+ module Utilities
5
+ module String
6
+ # @return [String]
7
+ # @todo Handle mIRC color codes more gracefully.
8
+ def self.filter_string(string)
9
+ string.gsub(/[\x00-\x1f]/, '')
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,4 @@
1
+ module Cinch
2
+ # Version of the library
3
+ VERSION = '2.0.0-pre.1'
4
+ end
metadata CHANGED
@@ -1,21 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cinch
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.3
5
- prerelease:
4
+ version: 2.0.0.pre.1
5
+ prerelease: 6
6
6
  platform: ruby
7
7
  authors:
8
- - Lee Jarvis
9
8
  - Dominik Honnef
10
9
  autorequire:
11
10
  bindir: bin
12
11
  cert_chain: []
13
- date: 2011-05-12 00:00:00.000000000 +02:00
14
- default_executable:
12
+ date: 2012-03-03 00:00:00.000000000 Z
15
13
  dependencies: []
16
14
  description: A simple, friendly DSL for creating IRC bots
17
15
  email:
18
- - lee@jarvis.co
19
16
  - dominikh@fork-bomb.org
20
17
  executables: []
21
18
  extensions: []
@@ -23,62 +20,105 @@ extra_rdoc_files: []
23
20
  files:
24
21
  - LICENSE
25
22
  - README.md
26
- - lib/cinch.rb
27
- - lib/cinch/constants.rb
28
- - lib/cinch/cache_manager.rb
23
+ - docs/changes.md
24
+ - docs/readme.md
25
+ - docs/bot_options.md
26
+ - docs/common_mistakes.md
27
+ - docs/events.md
28
+ - docs/encodings.md
29
+ - docs/logging.md
30
+ - docs/common_tasks.md
31
+ - docs/migrating.md
32
+ - lib/cinch/formatting.rb
29
33
  - lib/cinch/channel.rb
30
- - lib/cinch/user_manager.rb
31
- - lib/cinch/message_queue.rb
34
+ - lib/cinch/timer.rb
35
+ - lib/cinch/sasl/diffie_hellman.rb
36
+ - lib/cinch/sasl/plain.rb
37
+ - lib/cinch/sasl/dh_blowfish.rb
38
+ - lib/cinch/sasl/mechanism.rb
39
+ - lib/cinch/network.rb
40
+ - lib/cinch/sasl.rb
41
+ - lib/cinch/cached_list.rb
32
42
  - lib/cinch/bot.rb
33
- - lib/cinch/irc.rb
34
- - lib/cinch/ban.rb
35
- - lib/cinch/syncable.rb
36
- - lib/cinch/message.rb
37
- - lib/cinch/channel_manager.rb
38
- - lib/cinch/logger/zcbot_logger.rb
39
- - lib/cinch/logger/null_logger.rb
40
- - lib/cinch/logger/formatted_logger.rb
41
- - lib/cinch/logger/logger.rb
43
+ - lib/cinch/storage.rb
42
44
  - lib/cinch/isupport.rb
43
- - lib/cinch/pattern.rb
44
- - lib/cinch/user.rb
45
45
  - lib/cinch/helpers.rb
46
- - lib/cinch/callback.rb
46
+ - lib/cinch/handler.rb
47
+ - lib/cinch/handler_list.rb
47
48
  - lib/cinch/rubyext/module.rb
48
- - lib/cinch/rubyext/queue.rb
49
- - lib/cinch/rubyext/infinity.rb
49
+ - lib/cinch/rubyext/float.rb
50
50
  - lib/cinch/rubyext/string.rb
51
+ - lib/cinch/syncable.rb
52
+ - lib/cinch/plugin_list.rb
53
+ - lib/cinch/message.rb
54
+ - lib/cinch/target.rb
51
55
  - lib/cinch/mask.rb
52
- - lib/cinch/plugin.rb
53
- - lib/cinch/exceptions.rb
56
+ - lib/cinch/configuration/sasl.rb
57
+ - lib/cinch/configuration/bot.rb
58
+ - lib/cinch/configuration/storage.rb
59
+ - lib/cinch/configuration/plugins.rb
60
+ - lib/cinch/configuration/ssl.rb
61
+ - lib/cinch/configuration/dcc.rb
62
+ - lib/cinch/configuration/timeouts.rb
63
+ - lib/cinch/pattern.rb
64
+ - lib/cinch/open_ended_queue.rb
65
+ - lib/cinch/logger_list.rb
66
+ - lib/cinch/callback.rb
67
+ - lib/cinch/dcc.rb
68
+ - lib/cinch/version.rb
69
+ - lib/cinch/utilities/deprecation.rb
70
+ - lib/cinch/utilities/kernel.rb
71
+ - lib/cinch/utilities/string.rb
72
+ - lib/cinch/utilities/encoding.rb
73
+ - lib/cinch/constants.rb
54
74
  - lib/cinch/mode_parser.rb
75
+ - lib/cinch/user.rb
76
+ - lib/cinch/storage/yaml.rb
77
+ - lib/cinch/storage/null.rb
78
+ - lib/cinch/logger/formatted_logger.rb
79
+ - lib/cinch/logger/zcbot_logger.rb
80
+ - lib/cinch/exceptions.rb
81
+ - lib/cinch/logger.rb
82
+ - lib/cinch/plugin.rb
83
+ - lib/cinch/user_list.rb
84
+ - lib/cinch/dcc/incoming/send.rb
85
+ - lib/cinch/dcc/dccable_object.rb
86
+ - lib/cinch/dcc/outgoing.rb
87
+ - lib/cinch/dcc/incoming.rb
88
+ - lib/cinch/dcc/outgoing/send.rb
89
+ - lib/cinch/irc.rb
90
+ - lib/cinch/channel_list.rb
91
+ - lib/cinch/ban.rb
92
+ - lib/cinch/message_queue.rb
93
+ - lib/cinch/configuration.rb
94
+ - lib/cinch.rb
95
+ - examples/plugins/timer.rb
55
96
  - examples/plugins/msg.rb
56
- - examples/plugins/memo.rb
57
- - examples/plugins/urban_dict.rb
58
- - examples/plugins/last_nick.rb
59
- - examples/plugins/join_part.rb
97
+ - examples/plugins/dice_roll.rb
60
98
  - examples/plugins/lambdas.rb
61
- - examples/plugins/timer.rb
62
- - examples/plugins/url_shorten.rb
99
+ - examples/plugins/join_part.rb
100
+ - examples/plugins/google.rb
101
+ - examples/plugins/autovoice.rb
63
102
  - examples/plugins/multiple_matches.rb
64
- - examples/plugins/hello.rb
103
+ - examples/plugins/url_shorten.rb
104
+ - examples/plugins/memo.rb
65
105
  - examples/plugins/own_events.rb
66
106
  - examples/plugins/seen.rb
67
- - examples/plugins/custom_prefix.rb
68
- - examples/plugins/google.rb
69
- - examples/plugins/autovoice.rb
107
+ - examples/plugins/last_nick.rb
108
+ - examples/plugins/urban_dict.rb
70
109
  - examples/plugins/hooks.rb
110
+ - examples/plugins/hello.rb
111
+ - examples/plugins/custom_prefix.rb
71
112
  - examples/basic/msg.rb
72
- - examples/basic/memo.rb
73
- - examples/basic/urban_dict.rb
74
113
  - examples/basic/join_part.rb
75
- - examples/basic/url_shorten.rb
76
- - examples/basic/hello.rb
77
- - examples/basic/seen.rb
78
114
  - examples/basic/google.rb
79
115
  - examples/basic/autovoice.rb
80
- has_rdoc: true
81
- homepage: http://rubydoc.info/github/cinchrb/cinch
116
+ - examples/basic/url_shorten.rb
117
+ - examples/basic/memo.rb
118
+ - examples/basic/seen.rb
119
+ - examples/basic/urban_dict.rb
120
+ - examples/basic/hello.rb
121
+ homepage: http://cinchrb.org
82
122
  licenses: []
83
123
  post_install_message:
84
124
  rdoc_options: []
@@ -93,13 +133,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
93
133
  required_rubygems_version: !ruby/object:Gem::Requirement
94
134
  none: false
95
135
  requirements:
96
- - - ! '>='
136
+ - - ! '>'
97
137
  - !ruby/object:Gem::Version
98
- version: '0'
138
+ version: 1.3.1
99
139
  requirements: []
100
140
  rubyforge_project:
101
- rubygems_version: 1.6.2
141
+ rubygems_version: 1.8.15
102
142
  signing_key:
103
143
  specification_version: 3
104
144
  summary: An IRC Bot Building Framework
105
145
  test_files: []
146
+ has_rdoc: yard
@@ -1,44 +0,0 @@
1
- module Cinch
2
- module Logger
3
- # This is an abstract class describing the logger interface. All
4
- # loggers should inherit from this class and provide all necessary
5
- # methods.
6
- #
7
- # Note: You cannot initialize this class directly.
8
- #
9
- # @abstract
10
- class Logger
11
- def initialize(output)
12
- raise
13
- end
14
-
15
- # This method can be used by plugins to log custom messages.
16
- #
17
- # @param [String] message The message to log
18
- # @return [void]
19
- def debug(message)
20
- raise
21
- end
22
-
23
- # This method is used by {#debug} and {#log_exception} to log
24
- # messages, and also by the IRC parser to log incoming and
25
- # outgoing messages. You should not have to call this.
26
- #
27
- # @param [String] message The message to log
28
- # @param [Symbol<:debug, :generic, :incoming, :outgoing>] kind
29
- # The kind of message to log
30
- # @return [void]
31
- def log(message, kind = :generic)
32
- raise
33
- end
34
-
35
- # This method is used for logging messages.
36
- #
37
- # @param [Exception] e The exception to log
38
- # @return [void]
39
- def log_exception(e)
40
- raise
41
- end
42
- end
43
- end
44
- end
@@ -1,18 +0,0 @@
1
- require "cinch/logger/logger"
2
- module Cinch
3
- module Logger
4
- class NullLogger < Cinch::Logger::Logger
5
- def initialize(output = nil)
6
- end
7
-
8
- def debug(message)
9
- end
10
-
11
- def log(message, kind = :generic)
12
- end
13
-
14
- def log_exception(e)
15
- end
16
- end
17
- end
18
- end
@@ -1 +0,0 @@
1
- Infinity = 1.0/0.0