Class: ProtonBot::Plugin
- Inherits:
-
Object
- Object
- ProtonBot::Plugin
- Defined in:
- lib/protonbot/plugin.rb
Overview
Plugin object. Use it to alter bot’s behavior
Instance Attribute Summary collapse
-
#bot ⇒ Bot
Bot.
-
#core ⇒ Plugin
Core plugin.
-
#description ⇒ String
readonly
Plugin’s description.
-
#hooks ⇒ Array<Hook>
readonly
Plugin’s hooks.
-
#log ⇒ Object
Returns the value of attribute log.
-
#Log ⇒ LogWrapper
Log.
-
#name ⇒ String
readonly
Plugin’s name.
-
#path ⇒ String
Path.
-
#plugins ⇒ Object
readonly
Returns the value of attribute plugins.
-
#version ⇒ String
readonly
Plugin’s version.
Instance Method Summary collapse
-
#cmd(pattern = {}, &block) ⇒ Hook
Shortcut for ‘hook(type: :command, …) {}`.
-
#emit(dat = {}) ⇒ Object
Emits passed event.
-
#emitt(dat = {}) ⇒ Object
Emits passed event in other thread.
-
#fun(name, &block) ⇒ Object
Shortcut for ‘define_singleton_method(…)`.
-
#hook(pattern = {}, &block) ⇒ Hook
Creates hook and returns it.
-
#initialize(&block) ⇒ Plugin
constructor
A new instance of Plugin.
-
#inspect ⇒ String
Output.
-
#launch ⇒ Plugin
Starts plugin.
-
#run(fname) ⇒ Object
Runs given file (.rb is appended automatically).
Constructor Details
Instance Attribute Details
#bot ⇒ Bot
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
# File 'lib/protonbot/plugin.rb', line 21 class ProtonBot::Plugin attr_reader :name, :version, :description, :plugins, :hooks attr_accessor :bot, :log, :path, :core # @param block [Proc] def initialize(&block) @hooks = [] @block = block @numeric = ProtonBot::Numeric end # Starts plugin # @return [Plugin] self def launch @plugins = @bot.plugins instance_exec(&@block) raise ProtonBot::PluginError, 'Plugin-name is not set!' unless @name raise ProtonBot::PluginError, 'Plugin-description is not set!' unless @description raise ProtonBot::PluginError, 'Plugin-description is not set!' unless @description end # Creates hook and returns it # @param pattern [Hash<Symbol>] # @param block [Proc] # @return [Hook] hook def hook(pattern = {}, &block) h = ProtonBot::Hook.new(pattern, &block) @hooks << h h end # Shortcut for `hook(type: :command, ...) {}` # @param pattern [Hash<Symbol>] # @param block [Proc] # @return [Hook] hook def cmd(pattern = {}, &block) hook(pattern.merge(type: :command), &block) end # Emits passed event # @param dat [Hash<Symbol>] def emit(dat = {}) dat[:plug].emit(dat) if dat[:plug] end # Emits passed event in other thread # @param dat [Hash<Symbol>] def emitt(dat = {}) dat[:plug].emitt(dat) if dat[:plug] end # Runs given file (.rb is appended automatically) # @param fname [String] def run(fname) if @name == 'Core' instance_eval File.read("#{Gem.loaded_specs['protonbot'].lib_dirs_glob}/" \ "protonbot/core_plugin/#{fname}.rb"), "#{name}/#{fname}.rb" else instance_exec do instance_eval File.read(File.("#{path}/#{fname}.rb")), "#{name}/#{fname}.rb" end end end # Shortcut for `define_singleton_method(...)` # @param name [String,Symbol] # @param block [Proc] def fun(name, &block) define_singleton_method(name, &block) end # @return [String] Output def inspect %(<#ProtonBot::Plugin:#{object_id.to_s(16)} @name=#{name} @version=#{version}>) end end |
#core ⇒ Plugin
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
# File 'lib/protonbot/plugin.rb', line 21 class ProtonBot::Plugin attr_reader :name, :version, :description, :plugins, :hooks attr_accessor :bot, :log, :path, :core # @param block [Proc] def initialize(&block) @hooks = [] @block = block @numeric = ProtonBot::Numeric end # Starts plugin # @return [Plugin] self def launch @plugins = @bot.plugins instance_exec(&@block) raise ProtonBot::PluginError, 'Plugin-name is not set!' unless @name raise ProtonBot::PluginError, 'Plugin-description is not set!' unless @description raise ProtonBot::PluginError, 'Plugin-description is not set!' unless @description end # Creates hook and returns it # @param pattern [Hash<Symbol>] # @param block [Proc] # @return [Hook] hook def hook(pattern = {}, &block) h = ProtonBot::Hook.new(pattern, &block) @hooks << h h end # Shortcut for `hook(type: :command, ...) {}` # @param pattern [Hash<Symbol>] # @param block [Proc] # @return [Hook] hook def cmd(pattern = {}, &block) hook(pattern.merge(type: :command), &block) end # Emits passed event # @param dat [Hash<Symbol>] def emit(dat = {}) dat[:plug].emit(dat) if dat[:plug] end # Emits passed event in other thread # @param dat [Hash<Symbol>] def emitt(dat = {}) dat[:plug].emitt(dat) if dat[:plug] end # Runs given file (.rb is appended automatically) # @param fname [String] def run(fname) if @name == 'Core' instance_eval File.read("#{Gem.loaded_specs['protonbot'].lib_dirs_glob}/" \ "protonbot/core_plugin/#{fname}.rb"), "#{name}/#{fname}.rb" else instance_exec do instance_eval File.read(File.("#{path}/#{fname}.rb")), "#{name}/#{fname}.rb" end end end # Shortcut for `define_singleton_method(...)` # @param name [String,Symbol] # @param block [Proc] def fun(name, &block) define_singleton_method(name, &block) end # @return [String] Output def inspect %(<#ProtonBot::Plugin:#{object_id.to_s(16)} @name=#{name} @version=#{version}>) end end |
#description ⇒ String (readonly)
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
# File 'lib/protonbot/plugin.rb', line 21 class ProtonBot::Plugin attr_reader :name, :version, :description, :plugins, :hooks attr_accessor :bot, :log, :path, :core # @param block [Proc] def initialize(&block) @hooks = [] @block = block @numeric = ProtonBot::Numeric end # Starts plugin # @return [Plugin] self def launch @plugins = @bot.plugins instance_exec(&@block) raise ProtonBot::PluginError, 'Plugin-name is not set!' unless @name raise ProtonBot::PluginError, 'Plugin-description is not set!' unless @description raise ProtonBot::PluginError, 'Plugin-description is not set!' unless @description end # Creates hook and returns it # @param pattern [Hash<Symbol>] # @param block [Proc] # @return [Hook] hook def hook(pattern = {}, &block) h = ProtonBot::Hook.new(pattern, &block) @hooks << h h end # Shortcut for `hook(type: :command, ...) {}` # @param pattern [Hash<Symbol>] # @param block [Proc] # @return [Hook] hook def cmd(pattern = {}, &block) hook(pattern.merge(type: :command), &block) end # Emits passed event # @param dat [Hash<Symbol>] def emit(dat = {}) dat[:plug].emit(dat) if dat[:plug] end # Emits passed event in other thread # @param dat [Hash<Symbol>] def emitt(dat = {}) dat[:plug].emitt(dat) if dat[:plug] end # Runs given file (.rb is appended automatically) # @param fname [String] def run(fname) if @name == 'Core' instance_eval File.read("#{Gem.loaded_specs['protonbot'].lib_dirs_glob}/" \ "protonbot/core_plugin/#{fname}.rb"), "#{name}/#{fname}.rb" else instance_exec do instance_eval File.read(File.("#{path}/#{fname}.rb")), "#{name}/#{fname}.rb" end end end # Shortcut for `define_singleton_method(...)` # @param name [String,Symbol] # @param block [Proc] def fun(name, &block) define_singleton_method(name, &block) end # @return [String] Output def inspect %(<#ProtonBot::Plugin:#{object_id.to_s(16)} @name=#{name} @version=#{version}>) end end |
#hooks ⇒ Array<Hook> (readonly)
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
# File 'lib/protonbot/plugin.rb', line 21 class ProtonBot::Plugin attr_reader :name, :version, :description, :plugins, :hooks attr_accessor :bot, :log, :path, :core # @param block [Proc] def initialize(&block) @hooks = [] @block = block @numeric = ProtonBot::Numeric end # Starts plugin # @return [Plugin] self def launch @plugins = @bot.plugins instance_exec(&@block) raise ProtonBot::PluginError, 'Plugin-name is not set!' unless @name raise ProtonBot::PluginError, 'Plugin-description is not set!' unless @description raise ProtonBot::PluginError, 'Plugin-description is not set!' unless @description end # Creates hook and returns it # @param pattern [Hash<Symbol>] # @param block [Proc] # @return [Hook] hook def hook(pattern = {}, &block) h = ProtonBot::Hook.new(pattern, &block) @hooks << h h end # Shortcut for `hook(type: :command, ...) {}` # @param pattern [Hash<Symbol>] # @param block [Proc] # @return [Hook] hook def cmd(pattern = {}, &block) hook(pattern.merge(type: :command), &block) end # Emits passed event # @param dat [Hash<Symbol>] def emit(dat = {}) dat[:plug].emit(dat) if dat[:plug] end # Emits passed event in other thread # @param dat [Hash<Symbol>] def emitt(dat = {}) dat[:plug].emitt(dat) if dat[:plug] end # Runs given file (.rb is appended automatically) # @param fname [String] def run(fname) if @name == 'Core' instance_eval File.read("#{Gem.loaded_specs['protonbot'].lib_dirs_glob}/" \ "protonbot/core_plugin/#{fname}.rb"), "#{name}/#{fname}.rb" else instance_exec do instance_eval File.read(File.("#{path}/#{fname}.rb")), "#{name}/#{fname}.rb" end end end # Shortcut for `define_singleton_method(...)` # @param name [String,Symbol] # @param block [Proc] def fun(name, &block) define_singleton_method(name, &block) end # @return [String] Output def inspect %(<#ProtonBot::Plugin:#{object_id.to_s(16)} @name=#{name} @version=#{version}>) end end |
#log ⇒ Object
Returns the value of attribute log.
23 24 25 |
# File 'lib/protonbot/plugin.rb', line 23 def log @log end |
#Log ⇒ LogWrapper
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
# File 'lib/protonbot/plugin.rb', line 21 class ProtonBot::Plugin attr_reader :name, :version, :description, :plugins, :hooks attr_accessor :bot, :log, :path, :core # @param block [Proc] def initialize(&block) @hooks = [] @block = block @numeric = ProtonBot::Numeric end # Starts plugin # @return [Plugin] self def launch @plugins = @bot.plugins instance_exec(&@block) raise ProtonBot::PluginError, 'Plugin-name is not set!' unless @name raise ProtonBot::PluginError, 'Plugin-description is not set!' unless @description raise ProtonBot::PluginError, 'Plugin-description is not set!' unless @description end # Creates hook and returns it # @param pattern [Hash<Symbol>] # @param block [Proc] # @return [Hook] hook def hook(pattern = {}, &block) h = ProtonBot::Hook.new(pattern, &block) @hooks << h h end # Shortcut for `hook(type: :command, ...) {}` # @param pattern [Hash<Symbol>] # @param block [Proc] # @return [Hook] hook def cmd(pattern = {}, &block) hook(pattern.merge(type: :command), &block) end # Emits passed event # @param dat [Hash<Symbol>] def emit(dat = {}) dat[:plug].emit(dat) if dat[:plug] end # Emits passed event in other thread # @param dat [Hash<Symbol>] def emitt(dat = {}) dat[:plug].emitt(dat) if dat[:plug] end # Runs given file (.rb is appended automatically) # @param fname [String] def run(fname) if @name == 'Core' instance_eval File.read("#{Gem.loaded_specs['protonbot'].lib_dirs_glob}/" \ "protonbot/core_plugin/#{fname}.rb"), "#{name}/#{fname}.rb" else instance_exec do instance_eval File.read(File.("#{path}/#{fname}.rb")), "#{name}/#{fname}.rb" end end end # Shortcut for `define_singleton_method(...)` # @param name [String,Symbol] # @param block [Proc] def fun(name, &block) define_singleton_method(name, &block) end # @return [String] Output def inspect %(<#ProtonBot::Plugin:#{object_id.to_s(16)} @name=#{name} @version=#{version}>) end end |
#name ⇒ String (readonly)
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
# File 'lib/protonbot/plugin.rb', line 21 class ProtonBot::Plugin attr_reader :name, :version, :description, :plugins, :hooks attr_accessor :bot, :log, :path, :core # @param block [Proc] def initialize(&block) @hooks = [] @block = block @numeric = ProtonBot::Numeric end # Starts plugin # @return [Plugin] self def launch @plugins = @bot.plugins instance_exec(&@block) raise ProtonBot::PluginError, 'Plugin-name is not set!' unless @name raise ProtonBot::PluginError, 'Plugin-description is not set!' unless @description raise ProtonBot::PluginError, 'Plugin-description is not set!' unless @description end # Creates hook and returns it # @param pattern [Hash<Symbol>] # @param block [Proc] # @return [Hook] hook def hook(pattern = {}, &block) h = ProtonBot::Hook.new(pattern, &block) @hooks << h h end # Shortcut for `hook(type: :command, ...) {}` # @param pattern [Hash<Symbol>] # @param block [Proc] # @return [Hook] hook def cmd(pattern = {}, &block) hook(pattern.merge(type: :command), &block) end # Emits passed event # @param dat [Hash<Symbol>] def emit(dat = {}) dat[:plug].emit(dat) if dat[:plug] end # Emits passed event in other thread # @param dat [Hash<Symbol>] def emitt(dat = {}) dat[:plug].emitt(dat) if dat[:plug] end # Runs given file (.rb is appended automatically) # @param fname [String] def run(fname) if @name == 'Core' instance_eval File.read("#{Gem.loaded_specs['protonbot'].lib_dirs_glob}/" \ "protonbot/core_plugin/#{fname}.rb"), "#{name}/#{fname}.rb" else instance_exec do instance_eval File.read(File.("#{path}/#{fname}.rb")), "#{name}/#{fname}.rb" end end end # Shortcut for `define_singleton_method(...)` # @param name [String,Symbol] # @param block [Proc] def fun(name, &block) define_singleton_method(name, &block) end # @return [String] Output def inspect %(<#ProtonBot::Plugin:#{object_id.to_s(16)} @name=#{name} @version=#{version}>) end end |
#path ⇒ String
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
# File 'lib/protonbot/plugin.rb', line 21 class ProtonBot::Plugin attr_reader :name, :version, :description, :plugins, :hooks attr_accessor :bot, :log, :path, :core # @param block [Proc] def initialize(&block) @hooks = [] @block = block @numeric = ProtonBot::Numeric end # Starts plugin # @return [Plugin] self def launch @plugins = @bot.plugins instance_exec(&@block) raise ProtonBot::PluginError, 'Plugin-name is not set!' unless @name raise ProtonBot::PluginError, 'Plugin-description is not set!' unless @description raise ProtonBot::PluginError, 'Plugin-description is not set!' unless @description end # Creates hook and returns it # @param pattern [Hash<Symbol>] # @param block [Proc] # @return [Hook] hook def hook(pattern = {}, &block) h = ProtonBot::Hook.new(pattern, &block) @hooks << h h end # Shortcut for `hook(type: :command, ...) {}` # @param pattern [Hash<Symbol>] # @param block [Proc] # @return [Hook] hook def cmd(pattern = {}, &block) hook(pattern.merge(type: :command), &block) end # Emits passed event # @param dat [Hash<Symbol>] def emit(dat = {}) dat[:plug].emit(dat) if dat[:plug] end # Emits passed event in other thread # @param dat [Hash<Symbol>] def emitt(dat = {}) dat[:plug].emitt(dat) if dat[:plug] end # Runs given file (.rb is appended automatically) # @param fname [String] def run(fname) if @name == 'Core' instance_eval File.read("#{Gem.loaded_specs['protonbot'].lib_dirs_glob}/" \ "protonbot/core_plugin/#{fname}.rb"), "#{name}/#{fname}.rb" else instance_exec do instance_eval File.read(File.("#{path}/#{fname}.rb")), "#{name}/#{fname}.rb" end end end # Shortcut for `define_singleton_method(...)` # @param name [String,Symbol] # @param block [Proc] def fun(name, &block) define_singleton_method(name, &block) end # @return [String] Output def inspect %(<#ProtonBot::Plugin:#{object_id.to_s(16)} @name=#{name} @version=#{version}>) end end |
#plugins ⇒ Object (readonly)
Returns the value of attribute plugins.
22 23 24 |
# File 'lib/protonbot/plugin.rb', line 22 def plugins @plugins end |
#version ⇒ String (readonly)
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
# File 'lib/protonbot/plugin.rb', line 21 class ProtonBot::Plugin attr_reader :name, :version, :description, :plugins, :hooks attr_accessor :bot, :log, :path, :core # @param block [Proc] def initialize(&block) @hooks = [] @block = block @numeric = ProtonBot::Numeric end # Starts plugin # @return [Plugin] self def launch @plugins = @bot.plugins instance_exec(&@block) raise ProtonBot::PluginError, 'Plugin-name is not set!' unless @name raise ProtonBot::PluginError, 'Plugin-description is not set!' unless @description raise ProtonBot::PluginError, 'Plugin-description is not set!' unless @description end # Creates hook and returns it # @param pattern [Hash<Symbol>] # @param block [Proc] # @return [Hook] hook def hook(pattern = {}, &block) h = ProtonBot::Hook.new(pattern, &block) @hooks << h h end # Shortcut for `hook(type: :command, ...) {}` # @param pattern [Hash<Symbol>] # @param block [Proc] # @return [Hook] hook def cmd(pattern = {}, &block) hook(pattern.merge(type: :command), &block) end # Emits passed event # @param dat [Hash<Symbol>] def emit(dat = {}) dat[:plug].emit(dat) if dat[:plug] end # Emits passed event in other thread # @param dat [Hash<Symbol>] def emitt(dat = {}) dat[:plug].emitt(dat) if dat[:plug] end # Runs given file (.rb is appended automatically) # @param fname [String] def run(fname) if @name == 'Core' instance_eval File.read("#{Gem.loaded_specs['protonbot'].lib_dirs_glob}/" \ "protonbot/core_plugin/#{fname}.rb"), "#{name}/#{fname}.rb" else instance_exec do instance_eval File.read(File.("#{path}/#{fname}.rb")), "#{name}/#{fname}.rb" end end end # Shortcut for `define_singleton_method(...)` # @param name [String,Symbol] # @param block [Proc] def fun(name, &block) define_singleton_method(name, &block) end # @return [String] Output def inspect %(<#ProtonBot::Plugin:#{object_id.to_s(16)} @name=#{name} @version=#{version}>) end end |
Instance Method Details
#cmd(pattern = {}, &block) ⇒ Hook
Shortcut for ‘hook(type: :command, …) {}`
59 60 61 |
# File 'lib/protonbot/plugin.rb', line 59 def cmd(pattern = {}, &block) hook(pattern.merge(type: :command), &block) end |
#emit(dat = {}) ⇒ Object
Emits passed event
65 66 67 |
# File 'lib/protonbot/plugin.rb', line 65 def emit(dat = {}) dat[:plug].emit(dat) if dat[:plug] end |
#emitt(dat = {}) ⇒ Object
Emits passed event in other thread
71 72 73 |
# File 'lib/protonbot/plugin.rb', line 71 def emitt(dat = {}) dat[:plug].emitt(dat) if dat[:plug] end |
#fun(name, &block) ⇒ Object
Shortcut for ‘define_singleton_method(…)`
91 92 93 |
# File 'lib/protonbot/plugin.rb', line 91 def fun(name, &block) define_singleton_method(name, &block) end |
#hook(pattern = {}, &block) ⇒ Hook
Creates hook and returns it
49 50 51 52 53 |
# File 'lib/protonbot/plugin.rb', line 49 def hook(pattern = {}, &block) h = ProtonBot::Hook.new(pattern, &block) @hooks << h h end |
#inspect ⇒ String
96 97 98 |
# File 'lib/protonbot/plugin.rb', line 96 def inspect %(<#ProtonBot::Plugin:#{object_id.to_s(16)} @name=#{name} @version=#{version}>) end |
#launch ⇒ Plugin
Starts plugin
34 35 36 37 38 39 40 41 42 43 |
# File 'lib/protonbot/plugin.rb', line 34 def launch @plugins = @bot.plugins instance_exec(&@block) raise ProtonBot::PluginError, 'Plugin-name is not set!' unless @name raise ProtonBot::PluginError, 'Plugin-description is not set!' unless @description raise ProtonBot::PluginError, 'Plugin-description is not set!' unless @description end |
#run(fname) ⇒ Object
Runs given file (.rb is appended automatically)
77 78 79 80 81 82 83 84 85 86 |
# File 'lib/protonbot/plugin.rb', line 77 def run(fname) if @name == 'Core' instance_eval File.read("#{Gem.loaded_specs['protonbot'].lib_dirs_glob}/" \ "protonbot/core_plugin/#{fname}.rb"), "#{name}/#{fname}.rb" else instance_exec do instance_eval File.read(File.("#{path}/#{fname}.rb")), "#{name}/#{fname}.rb" end end end |