require './mod_base.rb' module Vrobot4::Server class User attr_reader :name, :roles end class Channel attr_reader :name end class Message attr_reader :msg, :user, :chan, :serv def initialize( msg: nil, user: nil, chan: nil, serv: nil, reply: nil, reply_spaced: nil) @msg = msg @user = user @chan = chan @serv = serv @reply = reply @reply_spaced = reply_spaced end def reply *args @reply.call args.join(" ") end def reply_spaced *args @reply_spaced.call args.join(" ") end end class Server attr_reader :mprm def initialize info @modules = [Mod_Base.new] load_permissions info["permissions"] if info.key? "permissions" end def load_mod mod mt = Vrobot4::Module.get_module_type(mod) if mt[:server] and mt[:server] != type or mt[:servflags] and mt[:servflags] !~ flags raise ArgumentError, "Module " + mod + " not valid for this server" end @modules << mt[:type].new end def drop_mod mod mt = Vrobot4::Module.get_module_type(mod) @modules.each_index do |i| @modules.delete_at i if @modules[i].is_a? mt[:type] end end def each_mod @modules.each {|mod| yield mod} end def onMessage m @modules.each {|mod| break if mod.onMessage m} end def onCommand m, cnam, argv @modules.each {|mod| break if mod.onCommand m, cnam, argv} end def type "Unknown" end def flags "" end private def load_permissions pinf @mprm = {:chan => {}, :role => {}, :glob => {}} pinf.each do |perm| mod = Vrobot4::Module.get_module_type(perm["module"])[:type] if perm.key? "channel" chan = perm["channel"] @mprm[:chan][mod] = {} unless @mprm[:chan].key? chan @mprm[:chan][mod][chan] = true elsif perm.key? "roles" @mprm[:role][mod] = perm["roles"] else @mprm[:glob][mod] = perm["enable"] end end end end @@server_types = {} def self.add_server_type t, name @@server_types[name] = t Vrobot4.log :INFO, "added server type:", name end def self.get_server_type s @@server_types[s] end end ## EOF