命令(command)

wxrobot是一个命令行友好的框架,允许开发者编写自己的命令,并可以在wxrobot运行时读取命令并执行。与消息机制相同,命令也提供了两种方式:

  1. robot.addCommand(command,func,helpMsg)其中command是一个字符串,是命令名,func是命令实体,是键入命令后执行的方法,helpMsg是一个字符串,用于输出帮助帮助信息给用户,你可以在此输入命令的使用方法;
  2. 装饰器方式,@robot.command(command,helpMsg)参数与上一种方式相同。

自带命令

当启动wxrobot后,wxrobot已经自带了3个命令:

=================================================
quit        -->    退出微信
help        -->    显示可用命令
delfriend        -->    清理好友
=================================================

自定义命令

以第二种方式为例,自定义一个发送消息的命令:

@robot.command('send','send [name] [message]')
def sendCommand(name,text):
    api.sendTextMsg(name,text)

运行wxrobot后,可以看到

=================================================
help        -->    显示可用命令
delfriend        -->    清理好友
quit        -->    退出微信
send        -->    send [name] [message]
=================================================

参数问题

关于参数,必须多说几句:

  1. 自定义命令的handler方法参数是没有限制的,甚至没有参数也是可以的;
  2. wxrobot允许同名命令存在,但是参数数目不能相同;
  3. wxrobot在遇到同名参数选择handler方法的策略是:选择那些参数少于输入参数并且最接近的handler。

举个例子,我们定义了两个command:

@robot.command('test','test [arg]')
def test1(arg):
    print('test1 %s'%arg)

@robot.command('test','test [arg] [arg]')
def test2(arga,argb):
    print('test2 %s %s'%(arga,argb))

运行wxrobot后,输入不同命令得到输出如下:

test #没有参数,找不到对应的handle
[*] 系统识别不了命令

test a #一个参数,找到最接近的test1 handler
test1 a

test a b #两个参数,找到最接近的test2 handler
test2 a b

test a b c #三个参数,找到最接近的test2 handler
test2 a b