Skip to content

Instantly share code, notes, and snippets.

@chendo
Forked from netpro2k/pluginexamples.rb
Created November 24, 2011 06:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save chendo/1390749 to your computer and use it in GitHub Desktop.
Save chendo/1390749 to your computer and use it in GitHub Desktop.
class SiriProxy::Plugin::Twitter < SiriProxy::Plugin
# this watches when in the default context
listen_for /tweet (.*)/ do |data, tweetText|
show_rich_snippet 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
cancelled 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
within_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 # or clear_state?
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?", options: all_stations)
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment