Skip to content

Instantly share code, notes, and snippets.

@netpro2k
Forked from chendo/pluginexamples.rb
Created November 24, 2011 06:28
Show Gist options
  • Save netpro2k/1390753 to your computer and use it in GitHub Desktop.
Save netpro2k/1390753 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::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/, within_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."
clear_state() # or set_state nil
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