使用Google Wave机器人完成简单的任务

13

我想在这里的机器人教程中添加3个功能: http://code.google.com/apis/wave/extensions/robots/python-tutorial.html

在添加所有这些功能之前,我的机器人按预期工作。 现在,奇怪的特性仍然显示出来(在 blip 内容后面加上“v2”),但是新功能中的任何一个都没有显示出来!我已经尝试了不同的方法,仍然不起作用。下面是我认为看起来更合理的代码。 有人可以告诉我为什么似乎没有一个有效吗?

功能1 -- 想尝试使用 AppendText
功能2 -- 希望机器人检测到提交了一个 blip
功能3 -- 希望机器人添加一个删除旧 blip 内容的 blip。

from waveapi import events
from waveapi import model
from waveapi import robot

def OnParticipantsChanged(properties, context):
  """Invoked when any participants have been added/removed."""
  added = properties['participantsAdded']
  for p in added:
    Notify(context)

def OnRobotAdded(properties, context):
  """Invoked when the robot has been added."""
  root_wavelet = context.GetRootWavelet()
  """feature 1"""
  root_wavelet.CreateBlip().GetDocument().SetText("I'm alive! v2").GetDocument().AppendText("xxx")

def Notify(context):
  root_wavelet = context.GetRootWavelet()
  root_wavelet.CreateBlip().GetDocument().SetText("Hi everybody! v2")

  """feature 2"""
def OnBlipSubmitted(properties, context):
  blip = context.GetBlipById(properties['blipId'])
  blip.GetDocument().AppendText("xxx")

  """feature 3"""
def OnBlipDeleted(properties, context):
  blip = context.GetBlipById(properties['blipId'])
  contents = blip.GetDocument().GetText()  
  root_wavelet = context.GetRootWavelet()
  root_wavelet.CreateBlip().GetDocument().SetText(contents)

if __name__ == '__main__':
  myRobot = robot.Robot('appName', 
      image_url='http://appName.appspot.com/icon.png',
      version='1',
      profile_url='http://appName.appspot.com/') 
  myRobot.RegisterHandler(events.WAVELET_PARTICIPANTS_CHANGED, OnParticipantsChanged)
  myRobot.RegisterHandler(events.WAVELET_SELF_ADDED, OnRobotAdded)   
  """myRobot.RegisterHandler(events.BLIP_SUMBITTED, OnBlipSubmitted)
  myRobot.RegisterHandler(events.BLIP_DELETED, OnBlipDeleted)"""
  myRobot.Run()

编辑(重要)

我刚刚注意到它在正常模式和沙盒模式下的行为似乎不同。在正常模式下,我看到了“我还活着!V2”和“大家好!V2”的两个提示,但在沙盒模式下,我只能看到第一个提示。在这两种情况下,我都没有看到追加的文字。

我评论这部分的原因是:“myRobot.RegisterHandler(events.BLIP_SUMBITTED, OnBlipSubmitted) myRobot.RegisterHandler(events.BLIP_DELETED, OnBlipDeleted)”,如果不进行评论,机器人将根本不执行任何操作!


2
我觉得 events.BLIP_SUMBITTED 拼写错误了。 - Russell Borogove
我已经投票关闭了这个问题,因为解决方案是修复一个打字错误。 - halfer
1个回答

1

events.BLIP_SUMBITTED 应该是 events.BLIP_SUBMITTED


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接