change yaml configs to ruby configs
rodič
8f79a79b4e
revize
79e6dbd495
|
@ -1,5 +1,5 @@
|
|||
*doc
|
||||
working
|
||||
*.yml
|
||||
_config.rb
|
||||
*.swp
|
||||
*.vim
|
||||
|
|
|
@ -19,7 +19,7 @@ module Backend_Discord
|
|||
|
||||
# A Discord user.
|
||||
class User < Vrobot4::Server::User
|
||||
attr_reader :real # The Discordrb::User instance.
|
||||
attr_reader :real # @return [Discordrb::User] the instance
|
||||
|
||||
# @param user [Discordrb::User] the discord user
|
||||
# @param ops [Array] list of operator role IDs
|
||||
|
@ -43,7 +43,7 @@ module Backend_Discord
|
|||
|
||||
# A Discord channel.
|
||||
class Channel < Vrobot4::Server::Channel
|
||||
attr_reader :real # The Discordrb::Channel instance.
|
||||
attr_reader :real # @return [Discordrb::Channel] the instance
|
||||
|
||||
# @param chan [Discordrb::Channel] the discord channel
|
||||
def initialize chan
|
||||
|
@ -58,15 +58,20 @@ module Backend_Discord
|
|||
# The server type name.
|
||||
def self.type() "Discord" end
|
||||
|
||||
attr_reader :real # @return [Discordrb::Server] the instance
|
||||
|
||||
# (see Vrobot4::Server::Server#initialize)
|
||||
def initialize info, bot, id
|
||||
# @param real [Discordrb::Server] the instance
|
||||
def initialize info, bot, real
|
||||
super info, bot
|
||||
|
||||
@id = id
|
||||
@ops = info["admins"] || []
|
||||
@hop = info["halfop"] || []
|
||||
@real = real
|
||||
@id = real.id
|
||||
|
||||
if mods = info["modules"]
|
||||
@ops = info[:admins] || []
|
||||
@hop = info[:halfop] || []
|
||||
|
||||
if mods = info[:modules]
|
||||
for mod in mods
|
||||
load_mod mod
|
||||
end
|
||||
|
@ -115,14 +120,14 @@ module Backend_Discord
|
|||
@mprm = {chan: {}, role: {}, glob: {}}
|
||||
return unless pinf
|
||||
pinf.each do |pr|
|
||||
mod = Vrobot4::Module.get_module_type(pr["module"])[:type]
|
||||
if pr.key? "channel"
|
||||
mod = Vrobot4::Module.get_module_type(pr[:module])[:type]
|
||||
if pr.key? :channel
|
||||
@mprm[:chan][mod] = ChannelPerms.new unless @mprm[:chan][mod]
|
||||
@mprm[:chan][mod][pr["channel"]] = true
|
||||
elsif pr.key? "roles"
|
||||
@mprm[:role][mod] = pr["roles"]
|
||||
elsif pr.key? "enable"
|
||||
@mprm[:glob][mod] = pr["enable"]
|
||||
@mprm[:chan][mod][pr[:channel]] = true
|
||||
elsif pr.key? :roles
|
||||
@mprm[:role][mod] = pr[:roles]
|
||||
elsif pr.key? :enable
|
||||
@mprm[:glob][mod] = pr[:enable]
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -141,19 +146,27 @@ module Backend_Discord
|
|||
@servers = {}
|
||||
|
||||
@real = Discordrb::Bot.new \
|
||||
token: info["apikey"],
|
||||
client_id: info["client"]
|
||||
token: info[:apikey],
|
||||
client_id: info[:client]
|
||||
|
||||
@real.ready do |evt|
|
||||
for _, serv in evt.bot.servers
|
||||
add_server serv
|
||||
end
|
||||
end
|
||||
|
||||
@real.message do |evt|
|
||||
if evt.server
|
||||
serv = server_by_id evt.server.id
|
||||
serv = get_server evt.server
|
||||
|
||||
m = Vrobot4::Server::Message.new \
|
||||
msg: evt.message.content,
|
||||
user: User.new(evt.user, @ops, @hop),
|
||||
chan: Channel.new(evt.channel),
|
||||
serv: serv,
|
||||
reply: -> (text) {evt.respond text},
|
||||
reply_b: -> (text) {evt.respond "```\n#{text}```"}
|
||||
bot: self,
|
||||
reply: -> (text) {evt.channel.send text},
|
||||
reply_b: -> (text) {evt.channel.send "```\n#{text}```"}
|
||||
|
||||
serv.handle_text_cmd m
|
||||
end
|
||||
|
@ -168,18 +181,18 @@ module Backend_Discord
|
|||
protected
|
||||
|
||||
# Adds a server to the hash.
|
||||
# @param id [Integer] id of the server
|
||||
# @return [Discordrb::Server]
|
||||
def add_server id
|
||||
Vrobot4.log :DEBUG, "initializing server #{id}"
|
||||
@servers[id] = Server.new @info[id] || {}, self, id
|
||||
# @param serv [Discordrb::Server] server instance
|
||||
# @return [Server]
|
||||
def add_server serv
|
||||
Vrobot4.log :DEBUG, "initializing server #{serv.id}"
|
||||
@servers[serv.id] = Server.new @info[serv.id] || {}, self, serv
|
||||
end
|
||||
|
||||
# Finds a server in the hash, potentially adding it.
|
||||
# @param id [Integer] id of the server
|
||||
# @return [Discordrb::Server]
|
||||
def server_by_id id
|
||||
@servers[id] || add_server(id)
|
||||
# @param serv [Discordrb::Server] server instance
|
||||
# @return [Server]
|
||||
def get_server serv
|
||||
@servers[serv.id] || add_server(serv)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -55,9 +55,9 @@ module Backend_IRC
|
|||
# (see Vrobot4::Server::Server#initialize)
|
||||
def initialize info, bot
|
||||
super
|
||||
@id = Vrobot4.hash_str info["server"].downcase
|
||||
@id = Vrobot4.hash_str info[:server].downcase
|
||||
|
||||
for mod in info["modules"] do
|
||||
for mod in info[:modules] do
|
||||
load_mod mod
|
||||
end
|
||||
end
|
||||
|
@ -74,14 +74,14 @@ module Backend_IRC
|
|||
@mprm = {chan: {}, role: {}, glob: {}}
|
||||
return unless pinf
|
||||
pinf.each do |pr|
|
||||
mod = Vrobot4::Module.get_module_type(pr["module"])[:type]
|
||||
if pr.key? "channel"
|
||||
mod = Vrobot4::Module.get_module_type(pr[:module])[:type]
|
||||
if pr.key? :channel
|
||||
@mprm[:chan][mod] = ChannelPerms.new unless @mprm[:chan][mod]
|
||||
@mprm[:chan][mod][pr["channel"].downcase] = true
|
||||
elsif pr.key? "roles"
|
||||
@mprm[:role][mod] = pr["roles"]
|
||||
elsif pr.key? "enable"
|
||||
@mprm[:glob][mod] = pr["enable"]
|
||||
@mprm[:chan][mod][pr[:channel].downcase] = true
|
||||
elsif pr.key? :roles
|
||||
@mprm[:role][mod] = pr[:roles]
|
||||
elsif pr.key? :enable
|
||||
@mprm[:glob][mod] = pr[:enable]
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -102,12 +102,12 @@ module Backend_IRC
|
|||
|
||||
@bot = Cinch::Bot.new do
|
||||
configure do |cfg|
|
||||
cfg.server = info["server"]
|
||||
cfg.nick = info["nick"] || "vrobot4"
|
||||
cfg.port = info["port"] if info.key? "port"
|
||||
cfg.password = info["pass"] if info.key? "pass"
|
||||
cfg.modes = info["modes"] if info.key? "modes"
|
||||
cfg.channels = info["channels"] if info.key? "channels"
|
||||
cfg.server = info[:server]
|
||||
cfg.nick = info[:nick] || "vrobot4"
|
||||
cfg.port = info[:port] if info.key? :port
|
||||
cfg.password = info[:pass] if info.key? :pass
|
||||
cfg.modes = info[:modes] if info.key? :modes
|
||||
cfg.channels = info[:channels] if info.key? :channels
|
||||
cfg.realname = "vrobot4"
|
||||
cfg.user = "vrobot4"
|
||||
cfg.message_split_start = "… "
|
||||
|
@ -122,6 +122,7 @@ module Backend_IRC
|
|||
user: User.new(evt.user, evt.channel),
|
||||
chan: Channel.new(evt.channel),
|
||||
serv: this.serv,
|
||||
bot: this,
|
||||
reply: -> (text) {evt.reply text},
|
||||
reply_b: -> (text) {evt.reply text}
|
||||
|
||||
|
|
|
@ -0,0 +1,35 @@
|
|||
module Config
|
||||
def self.get
|
||||
{
|
||||
debug: 0,
|
||||
|
||||
load: %w[
|
||||
./backends/discord.rb
|
||||
./backends/irc.rb
|
||||
|
||||
./modules/util.rb
|
||||
],
|
||||
|
||||
bots: [
|
||||
{
|
||||
type: "Discord",
|
||||
client: your_bot_client_id_here,
|
||||
apikey: your_api_key_here,
|
||||
admins: [your_personal_client_id_here],
|
||||
your_server_id_here => {
|
||||
modules: %w[Utilities],
|
||||
},
|
||||
},
|
||||
{
|
||||
type: "IRC",
|
||||
server: your_server_here,
|
||||
port: 6667,
|
||||
channels: %w[#my_cool_channel],
|
||||
modules: %w[Utilities],
|
||||
}
|
||||
]
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
## EOF
|
|
@ -3,8 +3,6 @@ require './module.rb'
|
|||
require './server.rb'
|
||||
require './robots.rb'
|
||||
|
||||
require 'yaml'
|
||||
|
||||
module Vrobot4
|
||||
private
|
||||
|
||||
|
@ -13,7 +11,7 @@ module Vrobot4
|
|||
# ["type"] The type by name of the bot.
|
||||
# @return [Vrobot4::Robots::Bot] the loaded bot
|
||||
def self.load_bot info
|
||||
type = info["type"]
|
||||
type = info[:type]
|
||||
Robots::get_bot_type(type).new info
|
||||
end
|
||||
|
||||
|
@ -37,30 +35,26 @@ module Vrobot4
|
|||
public
|
||||
|
||||
# Runs the program.
|
||||
# @param cfg [IO] configuration file to read
|
||||
# @param cfg [String] configuration file to read
|
||||
# @return [void]
|
||||
def self.main cfg
|
||||
Thread.abort_on_exception = true
|
||||
|
||||
log :INFO, "vrobot version #{Version}"
|
||||
|
||||
begin
|
||||
cfg = YAML.load cfg.read
|
||||
rescue
|
||||
log :ERROR, "error reading bot config: #{$!}"
|
||||
return
|
||||
end
|
||||
load cfg
|
||||
cfg = Config.get
|
||||
|
||||
Vrobot4.set_debug(cfg["debug"] || 0)
|
||||
Vrobot4.set_debug(cfg[:debug] || 0)
|
||||
|
||||
cfg["load"].each do |mod|
|
||||
cfg[:load].each do |mod|
|
||||
load mod, true
|
||||
end
|
||||
|
||||
begin
|
||||
bots = []
|
||||
|
||||
cfg["bots"].each do |info|
|
||||
cfg[:bots].each do |info|
|
||||
bots << load_bot(info)
|
||||
end
|
||||
|
||||
|
|
|
@ -43,9 +43,9 @@ class Mod_Base < Vrobot4::Module::Module
|
|||
end
|
||||
|
||||
def c_modr m, argv
|
||||
argv = check_args argv.split, "S", "S"
|
||||
argv = argv.split
|
||||
m.serv.drop_mod argv[0]
|
||||
load argv[1], true if argv.length > 1
|
||||
load argv[1], true if argv[1]
|
||||
m.serv.load_mod argv[0]
|
||||
end
|
||||
|
||||
|
|
|
@ -102,8 +102,8 @@ class Mod_DoomRLA < Vrobot4::Module::Module
|
|||
def reload_info
|
||||
@winfo = []
|
||||
@minfo = []
|
||||
@info["wep_info"].each {|wi| @winfo += JSON.parse(open(wi).read)}
|
||||
@info["mon_info"].each {|mi| @minfo += JSON.parse(open(mi).read)}
|
||||
@info[:wep_info].each {|wi| @winfo += JSON.parse(open(wi).read)}
|
||||
@info[:mon_info].each {|mi| @minfo += JSON.parse(open(mi).read)}
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -21,12 +21,14 @@ module Vrobot4::Server
|
|||
attr_reader :user # @return [User] user that triggered this message
|
||||
attr_reader :chan # @return [Channel] channel this message was sent to
|
||||
attr_reader :serv # @return [Server] server this message was sent to
|
||||
attr_reader :bot # @return [Vrobot4::Robots::Bot] bot this was sent to
|
||||
|
||||
# @param info [Hash] A hash containing message info. Keys may be omitted.
|
||||
# [:msg] Plaintext of message.
|
||||
# [:user] User that triggered this message.
|
||||
# [:chan] Channel that this message was sent to.
|
||||
# [:serv] Server this message was sent to.
|
||||
# [:bot] Bot this message was sent to.
|
||||
# [:reply] Method that sends a message to the specified channel.
|
||||
# [:reply_b] Method that sends a large message to the specified channel.
|
||||
def initialize(**info)
|
||||
|
@ -34,6 +36,7 @@ module Vrobot4::Server
|
|||
@user = info[:user]
|
||||
@chan = info[:chan]
|
||||
@serv = info[:serv]
|
||||
@bot = info[:bot]
|
||||
@reply = info[:reply]
|
||||
@reply_b = info[:reply_b]
|
||||
end
|
||||
|
@ -65,7 +68,7 @@ module Vrobot4::Server
|
|||
@bot = bot
|
||||
@info = info
|
||||
@modules = [Mod_Base.new(nil)]
|
||||
load_permissions info["permissions"]
|
||||
load_permissions info[:permissions]
|
||||
end
|
||||
|
||||
# Loads and initializes a module into the load list.
|
||||
|
@ -77,7 +80,7 @@ module Vrobot4::Server
|
|||
mt[:servflags] and mt[:servflags] !~ flags then
|
||||
raise ArgumentError, "Module #{mod} is not valid for this server"
|
||||
end
|
||||
@modules << mt[:type].new(@info[mod])
|
||||
@modules << mt[:type].new(@info[mod.to_sym])
|
||||
end
|
||||
|
||||
# Drops a module from the load list.
|
||||
|
|
Načítá se…
Odkázat v novém úkolu