summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Hecker <mail@apoc.cc>2020-04-17 23:11:35 +0200
committerMatthias Hecker <mail@apoc.cc>2020-04-17 23:11:35 +0200
commite5ff70eece675e05e6cdd1e2740f1f7a1316c697 (patch)
tree9a49d7bf20cb2fae51ad72a220e23f58c72b0340
parent14b2b331c639f4484b377966e5e1a04c15082404 (diff)
plugin(salut): use registry for storage see #42
-rw-r--r--data/rbot/plugins/salut.rb142
-rw-r--r--data/rbot/plugins/salut/salut-english (renamed from data/rbot/templates/salut/salut-english)0
-rw-r--r--data/rbot/plugins/salut/salut-french (renamed from data/rbot/templates/salut/salut-french)0
-rw-r--r--data/rbot/plugins/salut/salut-italian (renamed from data/rbot/templates/salut/salut-italian)0
-rw-r--r--data/rbot/plugins/salut/salut-japanese (renamed from data/rbot/templates/salut/salut-japanese)0
5 files changed, 62 insertions, 80 deletions
diff --git a/data/rbot/plugins/salut.rb b/data/rbot/plugins/salut.rb
index 1c552aab..6c6f3bc1 100644
--- a/data/rbot/plugins/salut.rb
+++ b/data/rbot/plugins/salut.rb
@@ -10,45 +10,89 @@
# Salutations plugin: respond to salutations
#
# TODO:: allow online editing of salutations
-#
-# TODO:: *REMEMBER* to set @changed to true after edit or changes won't be saved
class SalutPlugin < Plugin
Config.register Config::BooleanValue.new('salut.all_languages',
:default => true,
:desc => "Check for a salutation in all languages and not just in the one defined by core.language",
- :on_change => Proc.new {|bot, v| bot.plugins['salut'].reload}
- )
+ :on_change => Proc.new {|bot, v| bot.plugins['salut'].reload})
+
Config.register Config::BooleanValue.new('salut.address_only',
:default => true,
:desc => "When set to true, the bot will only reply to salutations directed at him",
- :on_change => Proc.new {|bot, v| bot.plugins['salut'].reload}
- )
-
+ :on_change => Proc.new {|bot, v| bot.plugins['salut'].reload})
def initialize
- @salutations = Hash.new
+ super
+
@match = Hash.new
@match_langs = Array.new
- @main_lang_str = nil
- @main_lang = nil
- @all_langs = true
- @changed = false
- super
+
reload
end
- def set_language(what)
- reload
+ def set_language(language)
+ @language = language
+ end
+
+ def load_static_files(path)
+ debug "loading salutation rules from #{path}"
+ Dir.glob("#{path}/*").map { |filename|
+ language = filename[filename.rindex('-')+1..-1]
+ begin
+ salutations = {}
+ content = YAML::load_file(filename)
+ content.each { |key, val|
+ salutations[key.to_sym] = val
+ }
+ rescue
+ error "failed to read salutations in #{filename}: #{$!}"
+ end
+ [language, salutations]
+ }.to_h
+ end
+
+ def reload
+ @salutations = @registry[:salutations]
+
+ # migrate existing data files
+ if not @salutations and Dir.exists? datafile
+ log "migrate existing salutations from #{datafile}"
+
+ @salutations = load_static_files(datafile)
+ end
+
+ # load initial salutations from plugin directory
+ unless @salutations
+ log "load initial salutations from #{plugin_path}"
+
+ initial_path = File.join(plugin_path, 'salut')
+ @salutations = load_static_files(initial_path)
+ end
+
+ debug @salutations.inspect
+
+ create_match
+ end
+
+ def save
+ return unless @salutations
+
+ @registry[:salutations] = @salutations
+
+ @registry.flush
end
def create_match
+ use_all_languages = @bot.config['salut.all_languages']
+
@match.clear
ar_dest = Array.new
ar_in = Array.new
ar_out = Array.new
ar_both = Array.new
@salutations.each { |lang, hash|
+ next if lang != @language and not use_all_languages
ar_dest.clear
ar_in.clear
ar_out.clear
@@ -83,8 +127,8 @@ class SalutPlugin < Plugin
# Languages to match for, in order
@match_langs.clear
- @match_langs << @main_lang if @match.key?(@main_lang)
- @match_langs << :english if @match.key?(:english)
+ @match_langs << @language if @match.key?(@language)
+ @match_langs << 'english' if @match.key?('english')
@match.each_key { |key|
@match_langs << key
}
@@ -129,7 +173,6 @@ class SalutPlugin < Plugin
lang = salut[1]
k = salut[2]
debug "Replying to #{salut.first} (#{lang} #{k}) in the #{time}"
- # salut_ar = @salutations[@main_lang].update @salutations[:english].update @salutations[lang]
salut_ar = @salutations[lang]
case k
when :both
@@ -160,67 +203,6 @@ class SalutPlugin < Plugin
debug "Replying #{choice}"
m.reply choice, :nick => false, :to => :public
end
-
- def reload
- save
- @main_lang_str = @bot.config['core.language']
- @main_lang = @main_lang_str.to_sym
- @all_langs = @bot.config['salut.all_languages']
- if @all_langs
- # Get all available languages
- langs = Dir.new(datafile).collect {|f|
- f =~ /salut-([^.]+)/ ? $1 : nil
- }.compact
- langs.each { |lang|
- @salutations[lang.to_sym] = load_lang(lang)
- }
- else
- @salutations.clear
- @salutations[@main_lang] = load_lang(@main_lang_str)
- end
- create_match
- @changed = false
- end
-
- def load_lang(lang)
- dir = datafile
- if not File.exist?(dir)
- Dir.mkdir(dir)
- end
- file = File.join dir, "salut-#{lang}"
- if File.exist?(file)
- begin
- salutations = Hash.new
- content = YAML::load_file(file)
- content.each { |key, val|
- salutations[key.to_sym] = val
- }
- return salutations
- rescue
- error "failed to read salutations in #{lang}: #{$!}"
- end
- end
- return nil
- end
-
- def save
- return if @salutations.empty?
- return unless @changed
- @salutations.each { |lang, val|
- l = lang.to_s
- save_lang(lang, val)
- }
- @changed = false
- end
-
- def save_lang(lang, val)
- fn = datafile "salut-#{lang}"
- Utils.safe_save(fn) { |file|
- file.puts val.to_yaml
- }
- end
-
end
-plugin = SalutPlugin.new
-
+SalutPlugin.new
diff --git a/data/rbot/templates/salut/salut-english b/data/rbot/plugins/salut/salut-english
index 073de394..073de394 100644
--- a/data/rbot/templates/salut/salut-english
+++ b/data/rbot/plugins/salut/salut-english
diff --git a/data/rbot/templates/salut/salut-french b/data/rbot/plugins/salut/salut-french
index 5d7fc84b..5d7fc84b 100644
--- a/data/rbot/templates/salut/salut-french
+++ b/data/rbot/plugins/salut/salut-french
diff --git a/data/rbot/templates/salut/salut-italian b/data/rbot/plugins/salut/salut-italian
index 9e68c602..9e68c602 100644
--- a/data/rbot/templates/salut/salut-italian
+++ b/data/rbot/plugins/salut/salut-italian
diff --git a/data/rbot/templates/salut/salut-japanese b/data/rbot/plugins/salut/salut-japanese
index eda97fbe..eda97fbe 100644
--- a/data/rbot/templates/salut/salut-japanese
+++ b/data/rbot/plugins/salut/salut-japanese