Author Topic: Something Similar To Kalle's Human Touch  (Read 2406 times)

0 Members and 1 Guest are viewing this topic.

Gixan

  • Jr. Member
  • **
  • Posts: 3
  • Karma: 0
    • View Profile
Something Similar To Kalle's Human Touch
« on: November 13, 2014, 08:36:38 PM »
I've been scouring the forums for at least an hour now, maybe I missed it, but I haven't found what I am looking for. I want Vox to ask my a question after I told it a command and wait for a yes or no reply, if yes then complete another command. My aim is for Vox to check the 5 latest updates in League of Legends, which I'm able to do, but the dilemma I'm facing is that after Vox tells me the first update, I want it to ask me if I want to hear the 2nd update, 3rd update and so on. I've tried to make 2 commands, 1 consisting of scraping, regex, TTS, you know.. then tells me the first update and finally activates VC.TriggerEvent, I made the 2nd command called "Event leaguecheck1" which has a logic block with if you say Yes, it will scrape, regex, and give you the 2nd match/2nd newest update, but it either doesn't active the command at all or just doesn't listen to my "Yes". Is the name of the command wrong? I don't know, maybe I made a mistake along the way. If I could make a folder that actives at the end of my first command, but doing things for 5 updates and other games I want to check updates for seems a bit, messy.
Here are screenshots of my commands, hopefully it makes my situation a bit clearer.

According to the wiki I have to inform you of these details:
I'm using VoxCommando 2.103 not VoxCommandoSP.
Thank you for you time and if you want me to post the XML, I'll look up how and do it.


nime5ter

  • Administrator
  • Hero Member
  • *****
  • Posts: 1999
  • Karma: 61
    • View Profile
    • Getting Started with VoxCommando
Re: Something Similar To Kalle's Human Touch
« Reply #1 on: November 14, 2014, 08:20:13 AM »
Yes, please post your xml. There's a link in my signature for that wiki page, but it's pretty simple: just select (click on) your "league update" group, copy it (ctrl-c or right-click 'copy'), then paste it into your next post within a code box (the # symbol creates code tags).
TIPS: POST VC VERSION #. Explain what you want VC to do. Say what you've tried & what happened, or post a video demo. Attach VC log. Link to instructions followed.  Post your command (xml)

nime5ter

  • Administrator
  • Hero Member
  • *****
  • Posts: 1999
  • Karma: 61
    • View Profile
    • Getting Started with VoxCommando
Re: Something Similar To Kalle's Human Touch
« Reply #2 on: November 14, 2014, 08:44:07 AM »
TIPS: POST VC VERSION #. Explain what you want VC to do. Say what you've tried & what happened, or post a video demo. Attach VC log. Link to instructions followed.  Post your command (xml)

nime5ter

  • Administrator
  • Hero Member
  • *****
  • Posts: 1999
  • Karma: 61
    • View Profile
    • Getting Started with VoxCommando
Re: Something Similar To Kalle's Human Touch
« Reply #3 on: November 14, 2014, 10:06:29 AM »
... Alright. I couldn't help but entertain myself over coffee this morning.

There are multiple methods to do the kind of thing you want to do. Starting with the Reuters example I posted above, I've created two variations that could be used to have VC read one headline at a time and then wait for confirmation before supplying the next.

Both of these require enabling the Python plugin in order to keep a count of what headline we're on.

Version 1 scrapes the site each time, so it's not as efficient in that sense, but it has just two commands.

Version 2 scrapes the site once and stores results in a payload xml file. It has three commands. (Not that 2 vs. 3 matters really, I'm just pointing it out.)

There are other ways this could be done.

...If you try these out, it's probably best to only copy one into your tree at each time since they use similar voice commands.

Version 1:
Code: [Select]
<?xml version="1.0" encoding="utf-16"?>
<!--VoxCommando 2.1.0.7-->
<commandGroup open="True" name="reuters what's next version 1" enabled="True" prefix="" priority="0" requiredProcess="" description="">
  <command id="1162" name="Announce headline" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="{Match.{i}.1} is the headline (where {i} is 1st, 2nd, 3rd ... headlines)&#xD;&#xA;{Match.{i}.2} is the URL linking to each full story.&#xD;&#xA;">
    <action>
      <cmdType>PY.ExecString</cmdType>
      <params>
        <param>result={var.count}+1</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <action>
      <cmdType>Results.SetVar</cmdType>
      <params>
        <param>count</param>
        <param>{LastResult}</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <action>
      <cmdType>Scrape</cmdType>
      <params>
        <param>http://feeds.reuters.com/reuters/worldNews</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <action>
      <cmdType>Results.RegEx</cmdType>
      <params>
        <param>item&gt;&lt;title&gt;(.*?)&lt;.*?&lt;link&gt;(.*?)&lt;.*?description&gt;.*?Reuters\).-.(.*?)\&amp;lt;</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <if ifBlockDisabled="False" ifNot="True">
      <ifType>(A)Contains(B)</ifType>
      <ifParams>{Match.{var.count}.1}&amp;&amp;Match.{var.count}.1</ifParams>
      <then>
        <action>
          <cmdType>OSD.ShowText</cmdType>
          <params>
            <param>{Match.{var.count}.1}.</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
        <action>
          <cmdType>TTS.SpeakSync</cmdType>
          <params>
            <param>{Match.{var.count}.1}. </param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
        <action>
          <cmdType>TTS.Speak</cmdType>
          <params>
            <param>Would you like to hear the next headline?|Would you like to hear more?|How about the next one</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
      </then>
      <else>
        <action>
          <cmdType>OSD.ShowText</cmdType>
          <params>
            <param>Looks like that's it for now.</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
        <action>
          <cmdType>TTS.Speak</cmdType>
          <params>
            <param>I'm not seeing any more.|That's all the headlines.|Looks like that's it for now.</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
      </else>
    </if>
    <event>nextUpdate</event>
    <phrase>What's new from Reuter's</phrase>
  </command>
  <command id="1176" name="confirm update" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
    <if ifBlockDisabled="False" ifNot="False">
      <ifType>(A)Contains(B)</ifType>
      <ifParams>{LastSpoken}&amp;&amp;Yes</ifParams>
      <then>
        <action>
          <cmdType>TTS.SpeakSync</cmdType>
          <params>
            <param>OK.|Sure thing|Let's see what's next</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
        <action>
          <cmdType>VC.TriggerEvent</cmdType>
          <params>
            <param>nextUpdate</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
      </then>
      <else>
        <action>
          <cmdType>TTS.SpeakSync</cmdType>
          <params>
            <param>No problem.|Talk to you later then.</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
        <action>
          <cmdType>Results.SetVar</cmdType>
          <params>
            <param>count</param>
            <param>0</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
      </else>
    </if>
    <phrase>Yes, No, Nevermind</phrase>
    <phrase optional="true">please, thanks</phrase>
  </command>
</commandGroup>

Version 2:
Code: [Select]
<?xml version="1.0" encoding="utf-16"?>
<!--VoxCommando 2.1.0.7-->
<commandGroup open="True" name="reuters what's next version 2" enabled="True" prefix="" priority="0" requiredProcess="" description="">
  <command id="1203" name="Announce headline" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="{Match.{i}.1} is the headline (where {i} is 1st, 2nd, 3rd ... headlines)&#xD;&#xA;{Match.{i}.2} is the URL linking to each full story.&#xD;&#xA;">
    <action>
      <cmdType>PayloadXML.Clear</cmdType>
      <params>
        <param>payloads\headlines.xml</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <action>
      <cmdType>Scrape</cmdType>
      <params>
        <param>http://feeds.reuters.com/reuters/worldNews</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <action>
      <cmdType>Results.RegEx</cmdType>
      <params>
        <param>item&gt;&lt;title&gt;(.*?)&lt;.*?&lt;link&gt;(.*?)&lt;.*?description&gt;.*?Reuters\).-.(.*?)\&amp;lt;</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <action>
      <cmdType>PayloadXML.AddPair</cmdType>
      <params>
        <param>payloads\headlines.xml</param>
        <param>{Match.{i}.1}</param>
        <param>Headline {i}</param>
      </params>
      <cmdRepeat>{#M}</cmdRepeat>
    </action>
    <action>
      <cmdType>VC.TriggerEvent</cmdType>
      <params>
        <param>ReadHeadline</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <phrase>What's new from Reuter's</phrase>
  </command>
  <command id="1192" name="confirm update" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
    <if ifBlockDisabled="False" ifNot="False">
      <ifType>(A)Contains(B)</ifType>
      <ifParams>{LastSpoken}&amp;&amp;Yes</ifParams>
      <then>
        <action>
          <cmdType>TTS.SpeakSync</cmdType>
          <params>
            <param>OK.|Sure thing|Let's see what's next</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
        <action>
          <cmdType>VC.TriggerEvent</cmdType>
          <params>
            <param>ReadHeadline</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
      </then>
      <else>
        <action>
          <cmdType>TTS.SpeakSync</cmdType>
          <params>
            <param>No problem.|Talk to you later then.</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
        <action>
          <cmdType>Results.SetVar</cmdType>
          <params>
            <param>count</param>
            <param>0</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
      </else>
    </if>
    <phrase>Yes that would be great, Yes please, No thanks, Nevermind</phrase>
  </command>
  <command id="1201" name="read headline" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
    <action>
      <cmdType>PY.ExecString</cmdType>
      <params>
        <param>result={var.count}+1</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <action>
      <cmdType>Results.SetVar</cmdType>
      <params>
        <param>count</param>
        <param>{LastResult}</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <action>
      <cmdType>PayloadXML.GetValue</cmdType>
      <params>
        <param>payloads\headlines.xml</param>
        <param>Headline {var.count}</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <if ifBlockDisabled="False" ifNot="False">
      <ifType>LastActionSuccess</ifType>
      <ifParams>&amp;&amp;</ifParams>
      <then>
        <action>
          <cmdType>OSD.ShowText</cmdType>
          <params>
            <param>{LastResult}</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
        <action>
          <cmdType>OSD.AddText</cmdType>
          <params>
            <param>Next headline?</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
        <action>
          <cmdType>TTS.SpeakSync</cmdType>
          <params>
            <param>{LastResult}</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
        <action>
          <cmdType>TTS.Speak</cmdType>
          <params>
            <param>Next headline?|Do you want more?</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
      </then>
      <else>
        <action>
          <cmdType>OSD.ShowText</cmdType>
          <params>
            <param>Looks like that's it.</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
        <action>
          <cmdType>TTS.Speak</cmdType>
          <params>
            <param>Looks like that's it.|That's all she wrote.|No more headlines.</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
      </else>
    </if>
    <event>ReadHeadline</event>
  </command>
</commandGroup>

[edited version 2 to add a missing "PayloadXML.Clear" action]
« Last Edit: November 15, 2014, 09:32:37 AM by nime5ter »
TIPS: POST VC VERSION #. Explain what you want VC to do. Say what you've tried & what happened, or post a video demo. Attach VC log. Link to instructions followed.  Post your command (xml)

jitterjames

  • Administrator
  • Hero Member
  • *****
  • Posts: 7714
  • Karma: 116
    • View Profile
    • VoxCommando
Re: Something Similar To Kalle's Human Touch
« Reply #4 on: November 14, 2014, 11:03:53 AM »
OK, I apologize for geeking out to the extreme but "Kalle's Human Touch" sounds an awful lot like a 3rd level Magic User's spell from Dungeons & Dragons.  I can see it slotted in there just before "Leomund's Tiny Hut".  Actually, it is getting to that time of year when that one would really be useful!

There, I said it. ;D

Gixan

  • Jr. Member
  • **
  • Posts: 3
  • Karma: 0
    • View Profile
Re: Something Similar To Kalle's Human Touch
« Reply #5 on: November 15, 2014, 07:00:51 AM »
Yes, please post your xml. There's a link in my signature for that wiki page, but it's pretty simple: just select (click on) your "league update" group, copy it (ctrl-c or right-click 'copy'), then paste it into your next post within a code box (the # symbol creates code tags).
Thank you for your time and sorry I took so long to respond.
Code: [Select]
<?xml version="1.0" encoding="utf-16"?>
<!--VoxCommando 2.1.0.3-->
<commandGroup open="True" name="League update check" enabled="True" prefix="" priority="0" requiredProcess="" description="">
  <command id="338" name="League update check" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
    <action>
      <cmdType>Scrape</cmdType>
      <params>
        <param>http://euw.leagueoflegends.com/</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <action>
      <cmdType>RegExTool.Open</cmdType>
      <params>
        <param>True</param>
      </params>
      <cmdRepeat>0</cmdRepeat>
    </action>
    <action>
      <cmdType>Results.RegEx</cmdType>
      <params>
        <param>&lt;div\sclass="default-2-3"&gt;(.*?)"&gt;(.*?)&lt;/a&gt;&lt;/h4&gt;&lt;div\sclass="teaser-content"&gt;&lt;div\sclass="field\sfield-name-field-body-medium\sfield-type-text-long\sfield-label-hidden"&gt;</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <action>
      <cmdType>TTS.speak</cmdType>
      <params>
        <param>{Match.1.2}</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <action>
      <cmdType>OSD.ShowText</cmdType>
      <params>
        <param>{Match.1.2}</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <action>
      <cmdType>VC.TriggerEvent</cmdType>
      <params>
        <param>Event leagueconfirm1</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <phrase>Any new updates in, whats the latest update in, what's new in</phrase>
    <phrase>league, lol, league of legends</phrase>
  </command>
  <command id="339" name="Event leagueconfirm1" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
    <action>
      <cmdType>TTS.speak</cmdType>
      <params>
        <param>Shall I tell you the previous update?</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <if ifBlockDisabled="False" ifNot="False">
      <ifType>(A)Contains(B)</ifType>
      <ifParams>{1}&amp;&amp;Yes</ifParams>
      <then>
        <action>
          <cmdType>scrape</cmdType>
          <params>
            <param>http://euw.leagueoflegends.com/</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
        <action>
          <cmdType>Results.RegEx</cmdType>
          <params>
            <param>&lt;div\sclass="default-2-3"&gt;(.*?)"&gt;(.*?)&lt;/a&gt;&lt;/h4&gt;&lt;div\sclass="teaser-content"&gt;&lt;div\sclass="field\sfield-name-field-body-medium\sfield-type-text-long\sfield-label-hidden"&gt;</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
        <action>
          <cmdType>TTS.Speak</cmdType>
          <params>
            <param>{Match.2.2}</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
        <action>
          <cmdType>OSD.ShowText</cmdType>
          <params>
            <param>{Match.2.2}</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
      </then>
      <else>
        <action>
          <cmdType>TTS.Speak</cmdType>
          <params>
            <param>As you wish</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
      </else>
    </if>
    <payloadList>Yes, No</payloadList>
  </command>
</commandGroup>
Quote
... Alright. I couldn't help but entertain myself over coffee this morning.

There are multiple methods to do the kind of thing you want to do. Starting with the Reuters example I posted above, I've created two variations that could be used to have VC read one headline at a time and then wait for confirmation before supplying the next.

Both of these require enabling the Python plugin in order to keep a count of what headline we're on.

Version 1 scrapes the site each time, so it's not as efficient in that sense, but it has just two commands.

Version 2 scrapes the site once and stores results in a payload xml file. It has three commands. (Not that 2 vs. 3 matters really, I'm just pointing it out.)

There are other ways this could be done.

...If you try these out, it's probably best to only copy one into your tree at each time since they use similar voice commands.
I have tried both of them out, thank you, but anytime I say "yes" whether is was after "What's new from Reuter's" or after a different command it gives me the next headline. Is there a way for  VC to only give me the next headline after the command "What's new from Reuter's", if not I could change it to more specific phrase like "Yes, tell me the next headline from Reuter's". The "Tell me more about headline number {x}" command you linked me to is brilliant, I'll have to have it, thank you.

nime5ter

  • Administrator
  • Hero Member
  • *****
  • Posts: 1999
  • Karma: 61
    • View Profile
    • Getting Started with VoxCommando
Re: Something Similar To Kalle's Human Touch
« Reply #6 on: November 15, 2014, 08:59:24 AM »
Yes, there are a couple things you can do. The easiest is to do as you said: make a unique confirmation phrase.

You can also use the command confirmation feature rather than a regular command, but there are some nuances to implementing this given what you're trying to accomplish. (You can try searching the wiki and forum for more info on this.) Also look up James's "coming home from work" commands.

Or you can have your confirmation command in a group that's generally disabled, enabling only once you've issued your first command, and disabling it again after you've confirmed.

I don't have time today to elaborate more than that, but someone else can take over, or I'll get back to you when I can.
« Last Edit: November 15, 2014, 09:11:38 AM by nime5ter »
TIPS: POST VC VERSION #. Explain what you want VC to do. Say what you've tried & what happened, or post a video demo. Attach VC log. Link to instructions followed.  Post your command (xml)

Gixan

  • Jr. Member
  • **
  • Posts: 3
  • Karma: 0
    • View Profile
Re: Something Similar To Kalle's Human Touch
« Reply #7 on: November 15, 2014, 09:08:10 AM »
Thank you, I'll attempt the latter, making a confirmation group that activates at the start of command and stops and the end.

nime5ter

  • Administrator
  • Hero Member
  • *****
  • Posts: 1999
  • Karma: 61
    • View Profile
    • Getting Started with VoxCommando
Re: Something Similar To Kalle's Human Touch
« Reply #8 on: November 16, 2014, 05:22:27 PM »
If you want to try using VC's confirmation feature instead, you can do something like the following command group:

Code: [Select]
<?xml version="1.0" encoding="utf-16"?>
<!--VoxCommando 2.1.0.7-->
<commandGroup open="True" name="League update check" enabled="True" prefix="" priority="0" requiredProcess="" description="">
  <command id="338" name="League update check" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
    <action>
      <cmdType>Results.SetVar</cmdType>
      <params>
        <param>count</param>
        <param>1</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <action>
      <cmdType>PayloadXML.Clear</cmdType>
      <params>
        <param>payloads\LOLupdates.xml</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <action>
      <cmdType>PayloadXML.Clear</cmdType>
      <params>
        <param>payloads\LOL_urls.xml</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <action>
      <cmdType>Scrape</cmdType>
      <params>
        <param>http://euw.leagueoflegends.com/</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <action>
      <cmdType>Results.RegEx</cmdType>
      <params>
        <param>&lt;div\sclass="default-2-3"&gt;.*?href="(.*?)"&gt;(.*?)&lt;/a&gt;&lt;/h4&gt;</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <action>
      <cmdType>PayloadXML.AddPair</cmdType>
      <params>
        <param>payloads\LOLupdates.xml</param>
        <param>{Match.{i}.2}</param>
        <param>Update {i}</param>
      </params>
      <cmdRepeat>{#M}</cmdRepeat>
    </action>
    <action>
      <cmdType>PayloadXML.AddPair</cmdType>
      <params>
        <param>payloads\LOL_urls.xml</param>
        <param>http://euw.leagueoflegends.com/{Match.{i}.1}</param>
        <param>Update {i}, {Match.{i}.2}</param>
      </params>
      <cmdRepeat>{#M}</cmdRepeat>
    </action>
    <action>
      <cmdType>TTS.speak</cmdType>
      <params>
        <param>Top update: {Match.1.2}</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <action>
      <cmdType>OSD.ShowText</cmdType>
      <params>
        <param>Top update: {Match.1.2}.{CR}Do you want more?</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <action>
      <cmdType>TTS.SpeakSync</cmdType>
      <params>
        <param>Want to hear another?|Should I find the next one?|Next update?</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <action>
      <cmdType>VC.TellVox</cmdType>
      <params>
        <param>Next update</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <phrase>Any new updates in, whats the latest update in, what's new in</phrase>
    <phrase>league, lol, league of legends</phrase>
  </command>
  <command id="340" name="++Next update" enabled="true" alwaysOn="False" confirm="True" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
    <action>
      <cmdType>PY.ExecString</cmdType>
      <params>
        <param>result={var.count}+1</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <action>
      <cmdType>Results.SetVar</cmdType>
      <params>
        <param>count</param>
        <param>{LastResult}</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <action>
      <cmdType>PayloadXML.GetValue</cmdType>
      <params>
        <param>payloads\LOLupdates.xml</param>
        <param>Update {var.count}</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <if ifBlockDisabled="False" ifNot="False">
      <ifType>LastActionSuccess</ifType>
      <ifParams>&amp;&amp;</ifParams>
      <then>
        <action>
          <cmdType>OSD.ShowText</cmdType>
          <params>
            <param>{var.count}. {LastResult}</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
        <action>
          <cmdType>TTS.SpeakSync</cmdType>
          <params>
            <param>{LastResult}</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
        <action>
          <cmdType>TTS.Speak</cmdType>
          <params>
            <param>Would you like to know more?|Next update?|Want another?</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
        <action>
          <cmdType>VC.TellVox</cmdType>
          <params>
            <param>Next update</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
      </then>
      <else>
        <action>
          <cmdType>TTS.Speak</cmdType>
          <params>
            <param>Looks like that's it.|No more updates.|That's all she wrote.</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
        <action>
          <cmdType>Results.SetVar</cmdType>
          <params>
            <param>count</param>
            <param>0</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
      </else>
    </if>
    <phrase>Next update</phrase>
  </command>
  <command id="209" name="Confirmation cancelled" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
    <action>
      <cmdType>TTS.Speak</cmdType>
      <params>
        <param>As you wish.|No problem.|Okey-dokey.</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <event>Confirm.Cancel.++Next update</event>
  </command>
  <command id="210" name="Open web page for {1}" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
    <action>
      <cmdType>Results.SetLastResult</cmdType>
      <params>
        <param>{PF.1}</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <action>
      <cmdType>Results.RegExReplace</cmdType>
      <params>
        <param>Update\s\d,\s</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <action>
      <cmdType>TTS.Speak</cmdType>
      <params>
        <param>Sure. Now opening the page for {LastResult}.</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <action>
      <cmdType>Launch.OpenURL</cmdType>
      <params>
        <param>{1}</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <phrase>Open web page for</phrase>
    <payloadFromXML phraseOnly="False" use2partPhrase="False" phraseConnector="by" Phrase2wildcard="anyone" optional="False">payloads\LOL_urls.xml</payloadFromXML>
  </command>
  <command id="297" name="Show me a list of updates" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
    <action>
      <cmdType>OSD.ShowText</cmdType>
      <params>
        <param>Current updates:</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <loop>
      <loopParams>
        <from>1</from>
        <to>5</to>
      </loopParams>
      <loopActions>
        <action>
          <cmdType>PayloadXML.GetValue</cmdType>
          <params>
            <param>payloads\LOLupdates.xml</param>
            <param>Update {j}</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
        <action>
          <cmdType>OSD.AddText</cmdType>
          <params>
            <param>{j}. {LastResult}</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
      </loopActions>
    </loop>
    <phrase>Show me a list of updates</phrase>
  </command>
</commandGroup>

If you haven't used this feature yet, take a look in Options, at the confirmation phrases (screenshot below). You can customize these. It's best to avoid monosyllabic confirmation phrases like "yes"/"no". And you can have a few variations, which creates more flexibility.

If anyone trying this has any questions about what's happening -- fire away.

CAVEAT: I found a small bug to do with the confirmation's auto-timeout feature while putting this group together for you (affecting versions 2.1.0.7 or earlier). It has been fixed in James's upcoming release, which should be coming out in the not too distant future.

But there is a workaround in the meantime: in Options, increase the auto-timeout from the default of 12 seconds, to something more like 60 seconds.

P.S. For no good reason, I've added a couple extra little commands --> you can open the webpage for any of the LOL updates, for example. Or just ask for a list of the top 5 updates. Keep or delete, as you like. :)
« Last Edit: November 26, 2014, 08:52:23 PM by nime5ter »
TIPS: POST VC VERSION #. Explain what you want VC to do. Say what you've tried & what happened, or post a video demo. Attach VC log. Link to instructions followed.  Post your command (xml)