class SSCBot::User::JRobotMessageSender

@author Jonathan Bradley Whited @since 0.1.0

Attributes

clipboard[RW]
msg_key[RW]
os[RW]
robot[RW]
shortcut_paste[RW]
shortcut_paste_default[RW]
shortcut_paste_macos[RW]
warn_user_key[RW]
warn_user_sleep[RW]

Public Class Methods

new(auto_delay: 110,msg_key: nil,os: Util::OS,warn_user: false, warn_user_key: KeyEvent::VK_BACK_SPACE,warn_user_sleep: 0.747,**kargs) click to toggle source
Calls superclass method
# File lib/ssc.bot/user/jrobot_message_sender.rb, line 51
def initialize(auto_delay: 110,msg_key: nil,os: Util::OS,warn_user: false,
               warn_user_key: KeyEvent::VK_BACK_SPACE,warn_user_sleep: 0.747,**kargs)
  super(**kargs)

  @clipboard = Toolkit.getDefaultToolkit.getSystemClipboard
  @msg_key = msg_key
  @os = os
  @robot = Robot.new
  @warn_user = warn_user
  @warn_user_key = warn_user_key
  @warn_user_sleep = warn_user_sleep

  @robot.setAutoDelay(auto_delay)

  @shortcut_paste = lambda do |ms|
    if ms.os == :macos
      @shortcut_paste_macos.call(ms)
    else
      @shortcut_paste_default.call(ms)
    end
  end
  @shortcut_paste_default = ->(ms) { ms.roll_keys(KeyEvent::VK_CONTROL,KeyEvent::VK_V) }
  @shortcut_paste_macos = ->(ms) { ms.roll_keys(KeyEvent::VK_META,KeyEvent::VK_V) }
end

Public Instance Methods

backspace() click to toggle source
# File lib/ssc.bot/user/jrobot_message_sender.rb, line 76
def backspace
  return type_key(KeyEvent::VK_BACK_SPACE)
end
copy(str) click to toggle source
# File lib/ssc.bot/user/jrobot_message_sender.rb, line 80
def copy(str)
  @clipboard.setContents(StringSelection.new(str),nil)

  return self
end
enter() click to toggle source
# File lib/ssc.bot/user/jrobot_message_sender.rb, line 86
def enter
  return type_key(KeyEvent::VK_ENTER)
end
paste(str=nil) click to toggle source
# File lib/ssc.bot/user/jrobot_message_sender.rb, line 90
def paste(str=nil)
  copy(str) unless str.nil?

  @shortcut_paste.call(self)

  return self
end
press_key(*key_codes) click to toggle source
# File lib/ssc.bot/user/jrobot_message_sender.rb, line 98
def press_key(*key_codes)
  key_codes.each do |key_code|
    @robot.keyPress(key_code)
  end

  return self
end
put(message) click to toggle source
# File lib/ssc.bot/user/jrobot_message_sender.rb, line 106
def put(message)
  # If do type_msg_key() and then warn_user(), then a backspace from
  #   warn_user() will cancel out the msg key.
  # Could do type_msg_key().warn_user().type_msg_key(), but then if the
  #   client is in windowed mode and msg key is a tab, then a backspace
  #   from warn_user() will do nothing.
  return warn_user.
         type_msg_key.
         paste(message)
end
release_key(*key_codes) click to toggle source
# File lib/ssc.bot/user/jrobot_message_sender.rb, line 117
def release_key(*key_codes)
  key_codes.each do |key_code|
    @robot.keyRelease(key_code)
  end

  return self
end
roll_keys(*key_codes) click to toggle source
# File lib/ssc.bot/user/jrobot_message_sender.rb, line 125
def roll_keys(*key_codes)
  key_codes.each do |key_code|
    @robot.keyPress(key_code)
  end

  (key_codes.length - 1).downto(0) do |i|
    @robot.keyRelease(key_codes[i])
  end

  return self
end
send_message() click to toggle source
# File lib/ssc.bot/user/jrobot_message_sender.rb, line 137
def send_message
  enter
end
type(message) click to toggle source

TODO: implement type(message)

Calls superclass method
# File lib/ssc.bot/user/jrobot_message_sender.rb, line 142
def type(message)
  # TODO: implement type(message)
  super(message)
end
type_key(*key_codes) click to toggle source
# File lib/ssc.bot/user/jrobot_message_sender.rb, line 147
def type_key(*key_codes)
  key_codes.each do |key_code|
    @robot.keyPress(key_code)
    @robot.keyRelease(key_code)
  end

  return self
end
type_msg_key() click to toggle source
# File lib/ssc.bot/user/jrobot_message_sender.rb, line 156
def type_msg_key
  if @msg_key
    if @msg_key.respond_to?(:call)
      @msg_key.call(self)
    else
      type_key(@msg_key)
    end
  end

  return self
end
warn_user() click to toggle source
# File lib/ssc.bot/user/jrobot_message_sender.rb, line 168
def warn_user
  if @warn_user
    if @warn_user_key.respond_to?(:call)
      @warn_user_key.call(self)
    else
      press_key(@warn_user_key)
      sleep(@warn_user_sleep)
      release_key(@warn_user_key)
    end
  end

  return self
end