2017-08-08 01:35:20 -07:00
|
|
|
require './mod_base.rb'
|
|
|
|
|
2017-08-06 05:36:15 -07:00
|
|
|
module Vrobot4::Server
|
|
|
|
class User
|
2017-08-08 01:35:20 -07:00
|
|
|
attr_reader :name, :roles
|
|
|
|
end
|
|
|
|
|
|
|
|
class Channel
|
|
|
|
attr_reader :name
|
2017-08-06 05:36:15 -07:00
|
|
|
end
|
|
|
|
|
|
|
|
class Message
|
2017-08-08 01:35:20 -07:00
|
|
|
attr_reader :msg, :user, :chan, :serv
|
2017-08-06 05:36:15 -07:00
|
|
|
|
2017-08-08 21:00:28 -07:00
|
|
|
def initialize(**info)
|
|
|
|
@msg = info[:msg] if info.key? :msg
|
|
|
|
@user = info[:user] if info.key? :user
|
|
|
|
@chan = info[:chan] if info.key? :chan
|
|
|
|
@serv = info[:serv] if info.key? :serv
|
|
|
|
@reply = info[:reply] if info.key? :reply
|
|
|
|
@reply_b = info[:reply_b] if info.key? :reply_b
|
2017-08-06 05:36:15 -07:00
|
|
|
end
|
|
|
|
|
2017-08-08 01:35:20 -07:00
|
|
|
def reply *args
|
|
|
|
@reply.call args.join(" ")
|
|
|
|
end
|
|
|
|
|
2017-08-08 04:33:30 -07:00
|
|
|
def reply_b *args
|
|
|
|
@reply_b.call args.join(" ")
|
2017-08-08 01:35:20 -07:00
|
|
|
end
|
2017-08-06 05:36:15 -07:00
|
|
|
end
|
|
|
|
|
|
|
|
class Server
|
2017-08-08 01:35:20 -07:00
|
|
|
attr_reader :mprm
|
|
|
|
|
|
|
|
def initialize info
|
2017-08-08 21:03:18 -07:00
|
|
|
@info = info
|
2017-08-09 00:52:34 -07:00
|
|
|
@modules = [Mod_Base.new(nil)]
|
2017-08-08 01:35:20 -07:00
|
|
|
load_permissions info["permissions"] if info.key? "permissions"
|
|
|
|
end
|
|
|
|
|
|
|
|
def load_mod mod
|
|
|
|
mt = Vrobot4::Module.get_module_type(mod)
|
2017-08-08 04:32:45 -07:00
|
|
|
if mt[:server] and mt[:server] != type or
|
|
|
|
mt[:servflags] and mt[:servflags] !~ flags
|
2017-08-08 01:35:20 -07:00
|
|
|
raise ArgumentError, "Module " + mod + " not valid for this server"
|
|
|
|
end
|
2017-08-09 00:52:34 -07:00
|
|
|
@modules << mt[:type].new(@info.key?(mod) ? @info[mod] : nil)
|
2017-08-08 01:35:20 -07:00
|
|
|
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
|
2017-08-06 05:36:15 -07:00
|
|
|
end
|
|
|
|
|
2017-08-08 01:35:20 -07:00
|
|
|
def each_mod
|
|
|
|
@modules.each {|mod| yield mod}
|
2017-08-06 05:36:15 -07:00
|
|
|
end
|
|
|
|
|
2017-08-06 16:30:24 -07:00
|
|
|
def onMessage m
|
2017-08-08 01:35:20 -07:00
|
|
|
@modules.each {|mod| break if mod.onMessage m}
|
2017-08-06 05:36:15 -07:00
|
|
|
end
|
|
|
|
|
2017-08-06 16:30:24 -07:00
|
|
|
def onCommand m, cnam, argv
|
2017-08-08 01:35:20 -07:00
|
|
|
@modules.each {|mod| break if mod.onCommand m, cnam, argv}
|
|
|
|
end
|
|
|
|
|
|
|
|
def type
|
|
|
|
"Unknown"
|
|
|
|
end
|
|
|
|
|
2017-08-08 04:32:45 -07:00
|
|
|
def flags
|
|
|
|
""
|
|
|
|
end
|
|
|
|
|
2017-08-09 23:31:12 -07:00
|
|
|
protected
|
2017-08-08 01:35:20 -07:00
|
|
|
def load_permissions pinf
|
2017-08-09 23:31:12 -07:00
|
|
|
raise NotImplementedError, "Server::#load_permissions not implemented"
|
2017-08-06 05:36:15 -07:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2017-08-08 21:03:18 -07:00
|
|
|
class AudioServer < Server
|
|
|
|
def voice_join m
|
|
|
|
raise NotImplementedError, "AudioServer::#voice_join not implemented"
|
|
|
|
end
|
|
|
|
|
|
|
|
def voice_quit m
|
|
|
|
raise NotImplementedError, "AudioServer::#voice_quit not implemented"
|
|
|
|
end
|
|
|
|
|
|
|
|
def play m, io
|
|
|
|
raise NotImplementedError, "AudioServer::#play not implemented"
|
|
|
|
end
|
|
|
|
|
|
|
|
def is_playing? m
|
|
|
|
raise NotImplementedError, "AudioServer::#is_playing? not implemented"
|
|
|
|
end
|
|
|
|
|
|
|
|
def flags
|
|
|
|
"A"
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2017-08-06 05:36:15 -07:00
|
|
|
@@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
|