change yaml configs to ruby configs

master
an 2019-02-24 06:00:41 -05:00
parent 8f79a79b4e
commit 79e6dbd495
8 changed files with 109 additions and 63 deletions

2
.gitignore vendored
View File

@ -1,5 +1,5 @@
*doc *doc
working working
*.yml _config.rb
*.swp *.swp
*.vim *.vim

View File

@ -19,7 +19,7 @@ module Backend_Discord
# A Discord user. # A Discord user.
class User < Vrobot4::Server::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 user [Discordrb::User] the discord user
# @param ops [Array] list of operator role IDs # @param ops [Array] list of operator role IDs
@ -43,7 +43,7 @@ module Backend_Discord
# A Discord channel. # A Discord channel.
class Channel < Vrobot4::Server::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 # @param chan [Discordrb::Channel] the discord channel
def initialize chan def initialize chan
@ -58,15 +58,20 @@ module Backend_Discord
# The server type name. # The server type name.
def self.type() "Discord" end def self.type() "Discord" end
attr_reader :real # @return [Discordrb::Server] the instance
# (see Vrobot4::Server::Server#initialize) # (see Vrobot4::Server::Server#initialize)
def initialize info, bot, id # @param real [Discordrb::Server] the instance
def initialize info, bot, real
super info, bot super info, bot
@id = id @real = real
@ops = info["admins"] || [] @id = real.id
@hop = info["halfop"] || []
if mods = info["modules"] @ops = info[:admins] || []
@hop = info[:halfop] || []
if mods = info[:modules]
for mod in mods for mod in mods
load_mod mod load_mod mod
end end
@ -115,14 +120,14 @@ module Backend_Discord
@mprm = {chan: {}, role: {}, glob: {}} @mprm = {chan: {}, role: {}, glob: {}}
return unless pinf return unless pinf
pinf.each do |pr| pinf.each do |pr|
mod = Vrobot4::Module.get_module_type(pr["module"])[:type] mod = Vrobot4::Module.get_module_type(pr[:module])[:type]
if pr.key? "channel" if pr.key? :channel
@mprm[:chan][mod] = ChannelPerms.new unless @mprm[:chan][mod] @mprm[:chan][mod] = ChannelPerms.new unless @mprm[:chan][mod]
@mprm[:chan][mod][pr["channel"]] = true @mprm[:chan][mod][pr[:channel]] = true
elsif pr.key? "roles" elsif pr.key? :roles
@mprm[:role][mod] = pr["roles"] @mprm[:role][mod] = pr[:roles]
elsif pr.key? "enable" elsif pr.key? :enable
@mprm[:glob][mod] = pr["enable"] @mprm[:glob][mod] = pr[:enable]
end end
end end
end end
@ -141,19 +146,27 @@ module Backend_Discord
@servers = {} @servers = {}
@real = Discordrb::Bot.new \ @real = Discordrb::Bot.new \
token: info["apikey"], token: info[:apikey],
client_id: info["client"] client_id: info[:client]
@real.ready do |evt|
for _, serv in evt.bot.servers
add_server serv
end
end
@real.message do |evt| @real.message do |evt|
if evt.server if evt.server
serv = server_by_id evt.server.id serv = get_server evt.server
m = Vrobot4::Server::Message.new \ m = Vrobot4::Server::Message.new \
msg: evt.message.content, msg: evt.message.content,
user: User.new(evt.user, @ops, @hop), user: User.new(evt.user, @ops, @hop),
chan: Channel.new(evt.channel), chan: Channel.new(evt.channel),
serv: serv, serv: serv,
reply: -> (text) {evt.respond text}, bot: self,
reply_b: -> (text) {evt.respond "```\n#{text}```"} reply: -> (text) {evt.channel.send text},
reply_b: -> (text) {evt.channel.send "```\n#{text}```"}
serv.handle_text_cmd m serv.handle_text_cmd m
end end
@ -168,18 +181,18 @@ module Backend_Discord
protected protected
# Adds a server to the hash. # Adds a server to the hash.
# @param id [Integer] id of the server # @param serv [Discordrb::Server] server instance
# @return [Discordrb::Server] # @return [Server]
def add_server id def add_server serv
Vrobot4.log :DEBUG, "initializing server #{id}" Vrobot4.log :DEBUG, "initializing server #{serv.id}"
@servers[id] = Server.new @info[id] || {}, self, id @servers[serv.id] = Server.new @info[serv.id] || {}, self, serv
end end
# Finds a server in the hash, potentially adding it. # Finds a server in the hash, potentially adding it.
# @param id [Integer] id of the server # @param serv [Discordrb::Server] server instance
# @return [Discordrb::Server] # @return [Server]
def server_by_id id def get_server serv
@servers[id] || add_server(id) @servers[serv.id] || add_server(serv)
end end
end end
end end

View File

@ -55,9 +55,9 @@ module Backend_IRC
# (see Vrobot4::Server::Server#initialize) # (see Vrobot4::Server::Server#initialize)
def initialize info, bot def initialize info, bot
super 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 load_mod mod
end end
end end
@ -74,14 +74,14 @@ module Backend_IRC
@mprm = {chan: {}, role: {}, glob: {}} @mprm = {chan: {}, role: {}, glob: {}}
return unless pinf return unless pinf
pinf.each do |pr| pinf.each do |pr|
mod = Vrobot4::Module.get_module_type(pr["module"])[:type] mod = Vrobot4::Module.get_module_type(pr[:module])[:type]
if pr.key? "channel" if pr.key? :channel
@mprm[:chan][mod] = ChannelPerms.new unless @mprm[:chan][mod] @mprm[:chan][mod] = ChannelPerms.new unless @mprm[:chan][mod]
@mprm[:chan][mod][pr["channel"].downcase] = true @mprm[:chan][mod][pr[:channel].downcase] = true
elsif pr.key? "roles" elsif pr.key? :roles
@mprm[:role][mod] = pr["roles"] @mprm[:role][mod] = pr[:roles]
elsif pr.key? "enable" elsif pr.key? :enable
@mprm[:glob][mod] = pr["enable"] @mprm[:glob][mod] = pr[:enable]
end end
end end
end end
@ -102,12 +102,12 @@ module Backend_IRC
@bot = Cinch::Bot.new do @bot = Cinch::Bot.new do
configure do |cfg| configure do |cfg|
cfg.server = info["server"] cfg.server = info[:server]
cfg.nick = info["nick"] || "vrobot4" cfg.nick = info[:nick] || "vrobot4"
cfg.port = info["port"] if info.key? "port" cfg.port = info[:port] if info.key? :port
cfg.password = info["pass"] if info.key? "pass" cfg.password = info[:pass] if info.key? :pass
cfg.modes = info["modes"] if info.key? "modes" cfg.modes = info[:modes] if info.key? :modes
cfg.channels = info["channels"] if info.key? "channels" cfg.channels = info[:channels] if info.key? :channels
cfg.realname = "vrobot4" cfg.realname = "vrobot4"
cfg.user = "vrobot4" cfg.user = "vrobot4"
cfg.message_split_start = "" cfg.message_split_start = ""
@ -122,6 +122,7 @@ module Backend_IRC
user: User.new(evt.user, evt.channel), user: User.new(evt.user, evt.channel),
chan: Channel.new(evt.channel), chan: Channel.new(evt.channel),
serv: this.serv, serv: this.serv,
bot: this,
reply: -> (text) {evt.reply text}, reply: -> (text) {evt.reply text},
reply_b: -> (text) {evt.reply text} reply_b: -> (text) {evt.reply text}

35
source/config_example.rb Normal file
View File

@ -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

View File

@ -3,8 +3,6 @@ require './module.rb'
require './server.rb' require './server.rb'
require './robots.rb' require './robots.rb'
require 'yaml'
module Vrobot4 module Vrobot4
private private
@ -13,7 +11,7 @@ module Vrobot4
# ["type"] The type by name of the bot. # ["type"] The type by name of the bot.
# @return [Vrobot4::Robots::Bot] the loaded bot # @return [Vrobot4::Robots::Bot] the loaded bot
def self.load_bot info def self.load_bot info
type = info["type"] type = info[:type]
Robots::get_bot_type(type).new info Robots::get_bot_type(type).new info
end end
@ -37,30 +35,26 @@ module Vrobot4
public public
# Runs the program. # Runs the program.
# @param cfg [IO] configuration file to read # @param cfg [String] configuration file to read
# @return [void] # @return [void]
def self.main cfg def self.main cfg
Thread.abort_on_exception = true Thread.abort_on_exception = true
log :INFO, "vrobot version #{Version}" log :INFO, "vrobot version #{Version}"
begin load cfg
cfg = YAML.load cfg.read cfg = Config.get
rescue
log :ERROR, "error reading bot config: #{$!}"
return
end
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 load mod, true
end end
begin begin
bots = [] bots = []
cfg["bots"].each do |info| cfg[:bots].each do |info|
bots << load_bot(info) bots << load_bot(info)
end end

View File

@ -43,9 +43,9 @@ class Mod_Base < Vrobot4::Module::Module
end end
def c_modr m, argv def c_modr m, argv
argv = check_args argv.split, "S", "S" argv = argv.split
m.serv.drop_mod argv[0] 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] m.serv.load_mod argv[0]
end end

View File

@ -102,8 +102,8 @@ class Mod_DoomRLA < Vrobot4::Module::Module
def reload_info def reload_info
@winfo = [] @winfo = []
@minfo = [] @minfo = []
@info["wep_info"].each {|wi| @winfo += JSON.parse(open(wi).read)} @info[:wep_info].each {|wi| @winfo += JSON.parse(open(wi).read)}
@info["mon_info"].each {|mi| @minfo += JSON.parse(open(mi).read)} @info[:mon_info].each {|mi| @minfo += JSON.parse(open(mi).read)}
end end
end end

View File

@ -21,12 +21,14 @@ module Vrobot4::Server
attr_reader :user # @return [User] user that triggered this message attr_reader :user # @return [User] user that triggered this message
attr_reader :chan # @return [Channel] channel this message was sent to attr_reader :chan # @return [Channel] channel this message was sent to
attr_reader :serv # @return [Server] server 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. # @param info [Hash] A hash containing message info. Keys may be omitted.
# [:msg] Plaintext of message. # [:msg] Plaintext of message.
# [:user] User that triggered this message. # [:user] User that triggered this message.
# [:chan] Channel that this message was sent to. # [:chan] Channel that this message was sent to.
# [:serv] Server 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] Method that sends a message to the specified channel.
# [:reply_b] Method that sends a large message to the specified channel. # [:reply_b] Method that sends a large message to the specified channel.
def initialize(**info) def initialize(**info)
@ -34,6 +36,7 @@ module Vrobot4::Server
@user = info[:user] @user = info[:user]
@chan = info[:chan] @chan = info[:chan]
@serv = info[:serv] @serv = info[:serv]
@bot = info[:bot]
@reply = info[:reply] @reply = info[:reply]
@reply_b = info[:reply_b] @reply_b = info[:reply_b]
end end
@ -65,7 +68,7 @@ module Vrobot4::Server
@bot = bot @bot = bot
@info = info @info = info
@modules = [Mod_Base.new(nil)] @modules = [Mod_Base.new(nil)]
load_permissions info["permissions"] load_permissions info[:permissions]
end end
# Loads and initializes a module into the load list. # Loads and initializes a module into the load list.
@ -77,7 +80,7 @@ module Vrobot4::Server
mt[:servflags] and mt[:servflags] !~ flags then mt[:servflags] and mt[:servflags] !~ flags then
raise ArgumentError, "Module #{mod} is not valid for this server" raise ArgumentError, "Module #{mod} is not valid for this server"
end end
@modules << mt[:type].new(@info[mod]) @modules << mt[:type].new(@info[mod.to_sym])
end end
# Drops a module from the load list. # Drops a module from the load list.