module IrcServerFallback
IRC connect-host fallback when registration stays unavailable. Public: fallback_server_for, connect_host, unavailable?, tick!, on_registered! Tests: test/lib/irc_server_fallback_test.rb
Constants
- DEFAULT_FALLBACK_AFTER_SEC
- DEFAULT_FALLBACK_SERVER
- UNDERNET_HOST_PATTERN
Public Instance Methods
Source
# File lib/irc_server_fallback.rb, line 43 def connect_host(bot) override = bot.config.shared[:irc_connect_server] override = override.to_s.strip return override unless override.empty? bot.config.server end
Source
# File lib/irc_server_fallback.rb, line 26 def fallback_after_sec(configured: nil, env: ENV) env_value = env.fetch("RABBOT_IRC_FALLBACK_AFTER_SEC", "").to_s.strip unless env_value.empty? value = Integer(env_value) return value if value.positive? end if configured.nil? return DEFAULT_FALLBACK_AFTER_SEC end value = Integer(configured) value.positive? ? value : DEFAULT_FALLBACK_AFTER_SEC rescue ArgumentError, TypeError DEFAULT_FALLBACK_AFTER_SEC end
Source
# File lib/irc_server_fallback.rb, line 14 def fallback_server_for(primary:, configured: nil, env: ENV) env_server = env.fetch("RABBOT_IRC_FALLBACK_SERVER", "").to_s.strip return env_server unless env_server.empty? configured_server = configured.to_s.strip return configured_server unless configured_server.empty? return DEFAULT_FALLBACK_SERVER if primary.to_s.match?(UNDERNET_HOST_PATTERN) nil end
Source
# File lib/irc_server_fallback.rb, line 78 def on_registered!(bot) bot.config.shared.delete(:irc_unavailable_since) end
Source
# File lib/irc_server_fallback.rb, line 55 def tick!(bot, now: Time.now) shared = bot.config.shared fallback = shared[:irc_fallback_server] return if fallback.to_s.strip.empty? if unavailable?(bot) shared[:irc_unavailable_since] ||= now elapsed = now - shared[:irc_unavailable_since] threshold = shared[:irc_fallback_after_sec].to_i return if elapsed < threshold current_override = shared[:irc_connect_server].to_s.strip return if current_override.casecmp?(fallback) shared[:irc_connect_server] = fallback bot.loggers.warn( "[reconnect] switching connect host to #{fallback} after #{elapsed.to_i}s unavailable" ) else shared.delete(:irc_unavailable_since) end end