class Cogs::BaseBotClass

Attributes

cached_cogs[R]
cogs[RW]
loaded_cogs[R]

Public Class Methods

new(token, prefix) click to toggle source
Calls superclass method
# File lib/bot.rb, line 5
def initialize(token, prefix)
  super token: token, prefix: prefix
  @cached_cogs = {}
  @loaded_cogs = {}

end

Public Instance Methods

_remove_all_cog_commands(cogname) click to toggle source
# File lib/bot.rb, line 47
def _remove_all_cog_commands(cogname)
  @commands ||= {}
  @commands.each do |cmd|
    if cmd[1]::cog == cogname
      self.remove_command cmd[1]::name
      p cmd[1]::name
    end
  end
end
add_cog(cog) click to toggle source
# File lib/bot.rb, line 72
def add_cog(cog)
  begin
    cog = cog.new bot: self
    cog.commands
    return cog
  rescue NoMethodError => error
    self.log_exception(error)
  end
end
add_commands() click to toggle source
# File lib/bot.rb, line 26
def add_commands; end
after() click to toggle source
# File lib/bot.rb, line 28
def after; end
before() click to toggle source
# File lib/bot.rb, line 27
def before; end
command(name, attributes = {}, &block) click to toggle source
# File lib/bot.rb, line 30
def command(name, attributes = {}, &block)
  @commands ||= {}

  if name.is_a?(Array)
    name, *aliases = name
    attributes[:aliases] = aliases if attributes[:aliases].nil?
    Discordrb::LOGGER.warn("While registering command #{name.inspect}")
    Discordrb::LOGGER.warn('Arrays for command aliases is removed. Please use `aliases` argument instead.')
  end

  new_command = Cogs::Command.new(self, name, attributes, &block)
  new_command.attributes[:aliases].each do |aliased_name|
    @commands[aliased_name] = CommandAlias.new(aliased_name, new_command)
  end
  @commands[name] = new_command
end
load_cog(cog) click to toggle source
# File lib/bot.rb, line 109
def load_cog(cog)
  self.reload_cog(cog)
end
load_extension(fp) click to toggle source
# File lib/bot.rb, line 57
def load_extension(fp)
  fp = fp + ".rb" unless fp.end_with?".rb"
  raise Cogs::CogError.new "Nonexistant filepath #{fp}" unless File.file?fp + ".rb" unless fp.end_with?".rb"
  begin
    load fp
    cog = setup(self)
    cog::fp = fp
    cog::name = cog.to_s[2..].split(':')[0]
    @loaded_cogs[cog::name] = cog
    @cached_cogs[cog::name] = cog.class
  rescue LoadError, NoMethodError => error
    self.log_exception(error)
  end
end
reload_cog(cog) click to toggle source
# File lib/bot.rb, line 100
def reload_cog(cog)
  raise Cogs::CogError.new "Cog not found" unless @cached_cogs.include?cog or @loaded_cogs.include?cog
  if @loaded_cogs.include?cog
    self.unload_cog(cogname: cog)
  end
  self.load_extension(@loaded_cogs[cog]::fp)
  Discordrb::LOGGER.info "Loaded cog #{cog}"
end
run_bot() click to toggle source
# File lib/bot.rb, line 16
def run_bot
  self.before
  self.add_commands
  begin
    self.run
  ensure
    self.after
  end
end
unload_cog(cog: nil, cogname: "") click to toggle source
# File lib/bot.rb, line 82
def unload_cog(cog: nil, cogname: "")
  if cog.is_a?Cogs::Cog
    if @cached_cogs.keys.include? cog::name
      @loaded_cogs = @loaded_cogs.tap { |key| delete(key) if key == cog::name }
      self._remove_all_cog_commands(cog::name)
      Discordrb::LOGGER.info "Unloaded cog #{cog::name}"
      return
    end
  end
  if @loaded_cogs.keys.include?cogname
    @loaded_cogs = @loaded_cogs.tap { |key| delete(key) if key == cogname }
    self._remove_all_cog_commands(cogname)
    Discordrb::LOGGER.info "Unloaded cog #{cogname}"
    return
  end
  raise Cogs::CogError.new "Cog already unloaded"
end