module DrawSession
Constants
- NOTHING_ACTIVE_MESSAGE
- STOPPED_MESSAGE
Public Instance Methods
Source
# File lib/draw_session.rb, line 123 def announce_message(style: nil, size: nil) preset = preset_for(size) size_hint = preset.id == :normal ? "" : " (#{preset.label})" style_text = style.to_s.strip if style_text.empty? "Draw mode on#{size_hint} — !draw [style] | <prompt>, DCC an image, or !draw <prompt>. !draw stop when done." else "Draw mode on#{size_hint} (#{style_text}) — !draw <prompt>, DCC an image, or !draw stop when done." end end
Source
# File lib/draw_session.rb, line 81 def begin_session(network:, nick:, channel:, style: nil, size: nil, sessions: sessions_store) key = session_key(network, nick) token = (sessions.dig(key, :token) || 0) + 1 preset = preset_for(size) sessions[key] = { stopped: false, token: token, channel: Normalize.channel(channel), style: style&.to_s&.strip, size: preset, network: RabbotDb.normalize_network(network), nick: Normalize.nick(nick) } sessions[key] end
Source
# File lib/draw_session.rb, line 113 def current_session(network:, nick:, sessions: sessions_store) session = sessions[session_key(network, nick)] session unless session.nil? || session[:stopped] end
Source
# File lib/draw_session.rb, line 27 def parse_command(text, session_active: false) cleaned = text.to_s.strip return { action: :start, size: AsciiDisplaySize::DEFAULT } if cleaned.empty? return { action: :stop } if cleaned.casecmp?("stop") if session_active { action: :prompt, prompt: cleaned } elsif cleaned.include?("|") parse_prompt_once(cleaned) else remainder, size = AsciiDisplaySize.peel_token(cleaned) if remainder.empty? { action: :start, size: size } elsif bare_prompt_without_style?(remainder) { action: :prompt_once, prompt: remainder, style: nil, size: size } else { action: :start_with_style, style: remainder, size: size } end end end
Source
# File lib/draw_session.rb, line 57 def parse_prompt_once(cleaned) remainder, size = AsciiDisplaySize.peel_token(cleaned) style_part, prompt = remainder.split("|", 2) prompt = prompt.to_s.strip return { action: :error, message: "Prompt required." } if prompt.empty? style = style_part.to_s.strip { action: :prompt_once, prompt: prompt, style: style.empty? ? nil : style, size: size } end
Source
# File lib/draw_session.rb, line 72 def preset_for(size) case size when AsciiDisplaySize::Preset size else AsciiDisplaySize.resolve(size) || AsciiDisplaySize::DEFAULT end end
Source
# File lib/draw_session.rb, line 108 def session_active?(network:, nick:, sessions: sessions_store) session = sessions[session_key(network, nick)] session && !session[:stopped] end
Source
# File lib/draw_session.rb, line 23 def session_key(network, nick) "#{RabbotDb.normalize_network(network)}/#{Normalize.user_key(nick)}" end
Source
# File lib/draw_session.rb, line 118 def session_stopped?(network:, nick:, token:, sessions: sessions_store) session = sessions[session_key(network, nick)] !session || session[:stopped] || session[:token] != token end
Source
# File lib/draw_session.rb, line 19 def sessions_store @sessions_store ||= {} end
Source
# File lib/draw_session.rb, line 97 def stop_session(network:, nick:, sessions: sessions_store) key = session_key(network, nick) session = sessions[key] unless session && !session[:stopped] return { stopped: false, message: NOTHING_ACTIVE_MESSAGE } end session[:stopped] = true { stopped: true, message: STOPPED_MESSAGE } end