class SiriProxy::Plugin::Twitter < SiriProxy::Plugin # this watches when in the default context listen_for /tweet (.*)/ do |data, tweetText| show_rich_snippets do image 'http://cl.ly/1l040J1A392n0M1n1g35/content' # this just makes things looks nice, but is obviously specific to my username text tweetText end # this locks out other plugins until a confirmation or deny confirm do confirmed do send_tweet tweet say "Tweet posted" end canceled do say "Ok I wont send it." end end end end class SiriProxy::Plugin::ButtonTest < SiriProxy::Plugin listen_for /test buttons/ do |data| say "testing buttons" show_button "Click me" do say "You clicked me" end end end class SiriProxy::Plugin::BlockTest < SiriProxy::Plugin listen_for /matched in default state/ do |data| say "default state" end listen_for /also matched in default state/ do |data| say "Changing state to foo" set_state :foo end listen_for /also matched in default state/, next_state: :foo do |data| say "Also changing state to foo" end # define multiple listen_for's in a given state in_state :foo do listen_for /matched in foo state/ do |data| say "foo state" end listen_for /also matched in foo state/ do |data| say "also foo state" end end end class SiriProxy::Plugin::MelbourneMetroTrains < SiriProxy::Plugin # this watches when in the default state listen_for /when is my next train/, do |data| respond_with_next_train data end # after showing a schedule, user can ask to see a map # if another plugin accepts a command, state gets cleared listen_for /map/, in_state: :showing_schedule, do |data| show_map Map.new(@train_details.station.coordinates) # Automatic bounding box end def respond_with_next_train(data) train_details = fetch_train_details(data.current_location, default_station) if train_details say "Your next #{train_details.line} train to #{default_station} departs from #{train_details.source} at #{train_details.time}" # this adds the state to any existing ontexts set_state :showing_schedule else say "Sorry, I'm unable to retrieve your train details." set_state :default end end def ask_and_store_default_station say "I don't know where you usually go in the #{morning_or_afternoon}" #next response when issuing an ask is not sent to other plugins station = ask "What is the station?", all_stations end end