Class: DiscordRDA::Plugin

Inherits:
Object
  • Object
show all
Defined in:
lib/discord_rda/plugin/base.rb

Overview

Base class for plugins. Plugins provide modular functionality for bots.

Direct Known Subclasses

AnalyticsPlugin

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name: nil, version: '1.0.0', description: '', dependencies: []) ⇒ Plugin

Initialize plugin

Parameters:

  • name (String) (defaults to: nil)

    Plugin name

  • version (String) (defaults to: '1.0.0')

    Plugin version

  • description (String) (defaults to: '')

    Plugin description

  • dependencies (Array<Symbol>) (defaults to: [])

    Plugin dependencies



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

#dependenciesArray<Symbol> (readonly)

Returns Plugin dependencies.

Returns:

  • (Array<Symbol>)

    Plugin dependencies



18
19
20
# File 'lib/discord_rda/plugin/base.rb', line 18

def dependencies
  @dependencies
end

#descriptionString (readonly)

Returns Plugin description.

Returns:

  • (String)

    Plugin description



15
16
17
# File 'lib/discord_rda/plugin/base.rb', line 15

def description
  @description
end

#nameString (readonly)

Returns Plugin name.

Returns:

  • (String)

    Plugin name



9
10
11
# File 'lib/discord_rda/plugin/base.rb', line 9

def name
  @name
end

#versionString (readonly)

Returns Plugin version.

Returns:

  • (String)

    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

Yields:

  • Block to run after setup



137
138
139
# File 'lib/discord_rda/plugin/base.rb', line 137

def after_setup(&block)
  @after_setup = block
end

.after_setup_hookProc?

Get after_setup hook

Returns:

  • (Proc, nil)

    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

Yields:

  • Block to run before setup



131
132
133
# File 'lib/discord_rda/plugin/base.rb', line 131

def before_setup(&block)
  @before_setup = block
end

.before_setup_hookProc?

Get before_setup hook

Returns:

  • (Proc, nil)

    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

Parameters:

  • name (String)

    Command name

  • description (String) (defaults to: '')

    Command description

  • options (Array<Hash>) (defaults to: [])

    Command options

Yields:

  • Command handler block



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: options, handler: block }
end

.commandsArray<Hash>

Get defined commands

Returns:

  • (Array<Hash>)

    Commands



143
144
145
# File 'lib/discord_rda/plugin/base.rb', line 143

def commands
  @commands || []
end

.handlersArray<Hash>

Get defined handlers

Returns:

  • (Array<Hash>)

    Handlers



149
150
151
# File 'lib/discord_rda/plugin/base.rb', line 149

def handlers
  @handlers || []
end

.middleware { ... } ⇒ Object

Define middleware

Yields:

  • Middleware block



124
125
126
127
# File 'lib/discord_rda/plugin/base.rb', line 124

def middleware(&block)
  @middlewares ||= []
  @middlewares << block
end

.middlewaresArray<Proc>

Get defined middlewares

Returns:

  • (Array<Proc>)

    Middlewares



155
156
157
# File 'lib/discord_rda/plugin/base.rb', line 155

def middlewares
  @middlewares || []
end

.on(event) { ... } ⇒ Object

Define an event handler

Parameters:

  • event (String, Symbol)

    Event type

Yields:

  • Event handler block



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

Parameters:

  • loaded_plugins (Array<Symbol>)

    Loaded plugin names

Returns:

  • (Boolean)

    True if all dependencies met



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

#disablevoid

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

#enablevoid

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

Returns:

  • (Boolean)

    True if enabled



67
68
69
# File 'lib/discord_rda/plugin/base.rb', line 67

def enabled?
  @enabled
end

#metadataHash

Plugin metadata

Returns:

  • (Hash)

    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

Parameters:

  • bot (Bot)

    Bot instance



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

Parameters:

  • bot (Bot)

    Bot instance



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

Parameters:

  • bot (Bot)

    Bot instance



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

Parameters:

  • bot (Bot)

    Bot instance



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

Parameters:

  • bot (Bot)

    Bot instance



36
37
38
# File 'lib/discord_rda/plugin/base.rb', line 36

def setup(bot)
  # Override in subclass
end

#teardownvoid

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