Class: DiscordRDA::Plugin
- Inherits:
-
Object
- Object
- DiscordRDA::Plugin
- Defined in:
- lib/discord_rda/plugin/base.rb
Overview
Base class for plugins. Plugins provide modular functionality for bots.
Direct Known Subclasses
Instance Attribute Summary collapse
-
#dependencies ⇒ Array<Symbol>
readonly
Plugin dependencies.
-
#description ⇒ String
readonly
Plugin description.
-
#name ⇒ String
readonly
Plugin name.
-
#version ⇒ String
readonly
Plugin version.
Class Method Summary collapse
-
.after_setup { ... } ⇒ Object
Define an after_setup hook.
-
.after_setup_hook ⇒ Proc?
Get after_setup hook.
-
.before_setup { ... } ⇒ Object
Define a before_setup hook.
-
.before_setup_hook ⇒ Proc?
Get before_setup hook.
-
.command(name, description: '', options: []) { ... } ⇒ Object
Define a command.
-
.commands ⇒ Array<Hash>
Get defined commands.
-
.handlers ⇒ Array<Hash>
Get defined handlers.
-
.middleware { ... } ⇒ Object
Define middleware.
-
.middlewares ⇒ Array<Proc>
Get defined middlewares.
-
.on(event) { ... } ⇒ Object
Define an event handler.
Instance Method Summary collapse
-
#dependencies_met?(loaded_plugins) ⇒ Boolean
Check if plugin has required dependencies.
-
#disable ⇒ void
Disable the plugin.
-
#enable ⇒ void
Enable the plugin.
-
#enabled? ⇒ Boolean
Check if plugin is enabled.
-
#initialize(name: nil, version: '1.0.0', description: '', dependencies: []) ⇒ Plugin
constructor
Initialize plugin.
-
#metadata ⇒ Hash
Plugin metadata.
-
#ready(bot) ⇒ void
Called when bot is ready.
-
#register_commands(bot) ⇒ void
Register commands with the bot.
-
#register_handlers(bot) ⇒ void
Register event handlers with the bot.
-
#register_middleware(bot) ⇒ void
Register middleware with the bot.
-
#setup(bot) ⇒ void
Called when plugin is loaded.
-
#teardown ⇒ void
Called when plugin is unloaded.
Constructor Details
#initialize(name: nil, version: '1.0.0', description: '', dependencies: []) ⇒ Plugin
Initialize plugin
25 26 27 28 29 30 31 |
# File 'lib/discord_rda/plugin/base.rb', line 25 def initialize(name: nil, version: '1.0.0', description: '', dependencies: []) @name = name || self.class.name @version = version @description = description @dependencies = dependencies @enabled = false end |
Instance Attribute Details
#dependencies ⇒ Array<Symbol> (readonly)
Returns Plugin dependencies.
18 19 20 |
# File 'lib/discord_rda/plugin/base.rb', line 18 def dependencies @dependencies end |
#description ⇒ String (readonly)
Returns Plugin description.
15 16 17 |
# File 'lib/discord_rda/plugin/base.rb', line 15 def description @description end |
#name ⇒ String (readonly)
Returns Plugin name.
9 10 11 |
# File 'lib/discord_rda/plugin/base.rb', line 9 def name @name end |
#version ⇒ String (readonly)
Returns Plugin version.
12 13 14 |
# File 'lib/discord_rda/plugin/base.rb', line 12 def version @version end |
Class Method Details
.after_setup { ... } ⇒ Object
Define an after_setup hook
137 138 139 |
# File 'lib/discord_rda/plugin/base.rb', line 137 def after_setup(&block) @after_setup = block end |
.after_setup_hook ⇒ Proc?
Get after_setup hook
167 168 169 |
# File 'lib/discord_rda/plugin/base.rb', line 167 def after_setup_hook @after_setup end |
.before_setup { ... } ⇒ Object
Define a before_setup hook
131 132 133 |
# File 'lib/discord_rda/plugin/base.rb', line 131 def before_setup(&block) @before_setup = block end |
.before_setup_hook ⇒ Proc?
Get before_setup hook
161 162 163 |
# File 'lib/discord_rda/plugin/base.rb', line 161 def before_setup_hook @before_setup end |
.command(name, description: '', options: []) { ... } ⇒ Object
Define a command
109 110 111 112 |
# File 'lib/discord_rda/plugin/base.rb', line 109 def command(name, description: '', options: [], &block) @commands ||= [] @commands << { name: name, description: description, options: , handler: block } end |
.commands ⇒ Array<Hash>
Get defined commands
143 144 145 |
# File 'lib/discord_rda/plugin/base.rb', line 143 def commands @commands || [] end |
.handlers ⇒ Array<Hash>
Get defined handlers
149 150 151 |
# File 'lib/discord_rda/plugin/base.rb', line 149 def handlers @handlers || [] end |
.middleware { ... } ⇒ Object
Define middleware
124 125 126 127 |
# File 'lib/discord_rda/plugin/base.rb', line 124 def middleware(&block) @middlewares ||= [] @middlewares << block end |
.middlewares ⇒ Array<Proc>
Get defined middlewares
155 156 157 |
# File 'lib/discord_rda/plugin/base.rb', line 155 def middlewares @middlewares || [] end |
.on(event) { ... } ⇒ Object
Define an event handler
117 118 119 120 |
# File 'lib/discord_rda/plugin/base.rb', line 117 def on(event, &block) @handlers ||= [] @handlers << { event: event, handler: block } end |
Instance Method Details
#dependencies_met?(loaded_plugins) ⇒ Boolean
Check if plugin has required dependencies
74 75 76 |
# File 'lib/discord_rda/plugin/base.rb', line 74 def dependencies_met?(loaded_plugins) @dependencies.all? { |dep| loaded_plugins.include?(dep) } end |
#disable ⇒ void
This method returns an undefined value.
Disable the plugin
61 62 63 |
# File 'lib/discord_rda/plugin/base.rb', line 61 def disable @enabled = false end |
#enable ⇒ void
This method returns an undefined value.
Enable the plugin
55 56 57 |
# File 'lib/discord_rda/plugin/base.rb', line 55 def enable @enabled = true end |
#enabled? ⇒ Boolean
Check if plugin is enabled
67 68 69 |
# File 'lib/discord_rda/plugin/base.rb', line 67 def enabled? @enabled end |
#metadata ⇒ Hash
Plugin metadata
89 90 91 92 93 94 95 96 97 98 99 100 |
# File 'lib/discord_rda/plugin/base.rb', line 89 def { name: @name, version: @version, description: @description, dependencies: @dependencies, enabled: @enabled, commands: self.class.commands.length, handlers: self.class.handlers.length, middlewares: self.class.middlewares.length } end |
#ready(bot) ⇒ void
This method returns an undefined value.
Called when bot is ready
43 44 45 |
# File 'lib/discord_rda/plugin/base.rb', line 43 def ready(bot) # Override in subclass end |
#register_commands(bot) ⇒ void
This method returns an undefined value.
Register commands with the bot
175 176 177 178 179 |
# File 'lib/discord_rda/plugin/base.rb', line 175 def register_commands(bot) self.class.commands.each do |cmd| bot.register_command(cmd[:name], cmd[:description], cmd[:options], &cmd[:handler]) end end |
#register_handlers(bot) ⇒ void
This method returns an undefined value.
Register event handlers with the bot
184 185 186 187 188 |
# File 'lib/discord_rda/plugin/base.rb', line 184 def register_handlers(bot) self.class.handlers.each do |handler| bot.on(handler[:event], &handler[:handler]) end end |
#register_middleware(bot) ⇒ void
This method returns an undefined value.
Register middleware with the bot
81 82 83 84 85 |
# File 'lib/discord_rda/plugin/base.rb', line 81 def register_middleware(bot) self.class.middlewares.each do |mw| bot.use(mw) end end |
#setup(bot) ⇒ void
This method returns an undefined value.
Called when plugin is loaded
36 37 38 |
# File 'lib/discord_rda/plugin/base.rb', line 36 def setup(bot) # Override in subclass end |
#teardown ⇒ void
This method returns an undefined value.
Called when plugin is unloaded
49 50 51 |
# File 'lib/discord_rda/plugin/base.rb', line 49 def teardown # Override in subclass end |