cinch 1.1.3 → 2.0.0.pre.1

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.
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