You can do some minor management of your account through Jabber. These are the
currently-implemented commands:
-* **on**: Turn on notifications. You'll receive copies of messages by people
- you subscribe to.
-* **off**: Turn off notifications. You'll no longer receive Jabber
- notifications.
-* **stop**: Same as 'off'
-* **quit**: Same as 'off'
-* **help**: Show this help. List available Jabber/XMPP commands
-* **follow <nickname>**: Subscribe to <nickname>
-* **sub <nickname>**: Same as follow
-* **leave <nickname>**: Unsubscribe from <nickname>
-* **unsub <nickname>**: Same as leave
-* **d <nickname> <text>**: Send direct message to <nickname> with message body <text>
-* **get <nickname>**: Get last notice from <nickname>
-* **last <nickname>**: Same as 'get'
-* **whois <nickname>**: Get Profile info on <nickname>
-* **fav <nickname>**: Add user's last notice as a favorite
+* **on** - turn on notifications
+* **off** - turn off notifications
+* **help** - show this help
+* **follow <nickname>** - subscribe to user
+* **groups** - lists the groups you have joined
+* **subscriptions** - list the people you follow
+* **subscribers** - list the people that follow you
+* **leave <nickname>** - unsubscribe from user
+* **d <nickname> <text>** - direct message to user
+* **get <nickname>** - get last notice from user
+* **whois <nickname>** - get profile info on user
+* **lose <nickname>** - force user to stop following you
+* **fav <nickname>** - add user's last notice as a 'fave'
+* **fav #<notice_id>** - add notice with the given id as a 'fave'
+* **repeat #<notice_id>** - repeat a notice with a given id
+* **repeat <nickname>** - repeat the last notice from user
+* **reply #<notice_id>** - reply to notice with a given id
+* **reply <nickname>** - reply to the last notice from user
+* **join <group>** - join group
+* **login** - Get a link to login to the web interface
+* **drop <group>** - leave group
+* **stats** - get your stats
+* **stop** - same as 'off'
+* **quit** - same as 'off'
+* **sub <nickname>** - same as 'follow'
+* **unsub <nickname>** - same as 'leave'
+* **last <nickname>** - same as 'get'
+* **on <nickname>** - not yet implemented.
+* **off <nickname>** - not yet implemented.
+* **nudge <nickname>** - remind a user to update.
+* **invite <phone number>** - not yet implemented.
+* **track <word>** - not yet implemented.
+* **untrack <word>** - not yet implemented.
+* **track off** - not yet implemented.
+* **untrack all** - not yet implemented.
+* **tracks** - not yet implemented.
+* **tracking** - not yet implemented.
case 'help':
if ($arg) {
$result = null;
+ } else {
+ $result = new HelpCommand($user);
}
- $result = new HelpCommand($user);
break;
case 'login':
if ($arg) {
case 'join':
if (!$arg) {
$result = null;
- }
- list($other, $extra) = $this->split_arg($arg);
- if ($extra) {
- $result = null;
} else {
- $result = new JoinCommand($user, $other);
+ list($other, $extra) = $this->split_arg($arg);
+ if ($extra) {
+ $result = null;
+ } else {
+ $result = new JoinCommand($user, $other);
+ }
}
break;
case 'drop':
if (!$arg) {
$result = null;
- }
- list($other, $extra) = $this->split_arg($arg);
- if ($extra) {
- $result = null;
} else {
- $result = new DropCommand($user, $other);
+ list($other, $extra) = $this->split_arg($arg);
+ if ($extra) {
+ $result = null;
+ } else {
+ $result = new DropCommand($user, $other);
+ }
}
break;
case 'follow':
case 'sub':
if (!$arg) {
$result = null;
- }
-
- list($other, $extra) = $this->split_arg($arg);
- if ($extra) {
- $result = null;
} else {
- $result = new SubCommand($user, $other);
+ list($other, $extra) = $this->split_arg($arg);
+ if ($extra) {
+ $result = null;
+ } else {
+ $result = new SubCommand($user, $other);
+ }
}
break;
case 'leave':
case 'unsub':
if (!$arg) {
$result = null;
- }
-
- list($other, $extra) = $this->split_arg($arg);
- if ($extra) {
- $result = null;
} else {
- $result = new UnsubCommand($user, $other);
+ list($other, $extra) = $this->split_arg($arg);
+ if ($extra) {
+ $result = null;
+ } else {
+ $result = new UnsubCommand($user, $other);
+ }
}
break;
case 'get':
case 'rd':
if (!$arg) {
$result = null;
- }
- list($other, $extra) = $this->split_arg($arg);
- if ($extra) {
- $result = null;
} else {
- $result = new RepeatCommand($user, $other);
+ list($other, $extra) = $this->split_arg($arg);
+ if ($extra) {
+ $result = null;
+ } else {
+ $result = new RepeatCommand($user, $other);
+ }
}
break;
case 'whois':
if (!$arg) {
$result = null;
- }
- list($other, $extra) = $this->split_arg($arg);
- if ($extra) {
- $result = null;
} else {
- $result = new WhoisCommand($user, $other);
+ list($other, $extra) = $this->split_arg($arg);
+ if ($extra) {
+ $result = null;
+ } else {
+ $result = new WhoisCommand($user, $other);
+ }
}
break;
case 'fav':
if (!$arg) {
$result = null;
- }
- list($other, $extra) = $this->split_arg($arg);
- if ($extra) {
- $result = null;
} else {
- $result = new FavCommand($user, $other);
+ list($other, $extra) = $this->split_arg($arg);
+ if ($extra) {
+ $result = null;
+ } else {
+ $result = new FavCommand($user, $other);
+ }
}
break;
case 'nudge':
if (!$arg) {
$result = null;
- }
- list($other, $extra) = $this->split_arg($arg);
- if ($extra) {
- $result = null;
} else {
- $result = new NudgeCommand($user, $other);
+ list($other, $extra) = $this->split_arg($arg);
+ if ($extra) {
+ $result = null;
+ } else {
+ $result = new NudgeCommand($user, $other);
+ }
}
break;
case 'stats':
if ($arg) {
$result = null;
+ } else {
+ $result = new StatsCommand($user);
}
- $result = new StatsCommand($user);
break;
case 'invite':
if (!$arg) {
$result = null;
- }
- list($other, $extra) = $this->split_arg($arg);
- if ($extra) {
- $result = null;
} else {
- $result = new InviteCommand($user, $other);
+ list($other, $extra) = $this->split_arg($arg);
+ if ($extra) {
+ $result = null;
+ } else {
+ $result = new InviteCommand($user, $other);
+ }
}
break;
case 'track':
if (!$arg) {
$result = null;
- }
- list($word, $extra) = $this->split_arg($arg);
- if ($extra) {
- $result = null;
- } else if ($word == 'off') {
- $result = new TrackOffCommand($user);
} else {
- $result = new TrackCommand($user, $word);
+ list($word, $extra) = $this->split_arg($arg);
+ if ($extra) {
+ $result = null;
+ } else if ($word == 'off') {
+ $result = new TrackOffCommand($user);
+ } else {
+ $result = new TrackCommand($user, $word);
+ }
}
break;
case 'untrack':
if (!$arg) {
$result = null;
- }
- list($word, $extra) = $this->split_arg($arg);
- if ($extra) {
- $result = null;
- } else if ($word == 'all') {
- $result = new TrackOffCommand($user);
} else {
- $result = new UntrackCommand($user, $word);
+ list($word, $extra) = $this->split_arg($arg);
+ if ($extra) {
+ $result = null;
+ } else if ($word == 'all') {
+ $result = new TrackOffCommand($user);
+ } else {
+ $result = new UntrackCommand($user, $word);
+ }
}
break;
case 'tracks':
case 'tracking':
if ($arg) {
$result = null;
+ } else {
+ $result = new TrackingCommand($user);
}
- $result = new TrackingCommand($user);
break;
default:
$result = false;
--- /dev/null
+<?php
+
+if (isset($_SERVER) && array_key_exists('REQUEST_METHOD', $_SERVER)) {
+ print "This script must be run from the command line\n";
+ exit();
+}
+
+define('INSTALLDIR', realpath(dirname(__FILE__) . '/..'));
+define('STATUSNET', true);
+define('LACONICA', true);
+
+require_once INSTALLDIR . '/lib/common.php';
+
+class CommandInterpreterTest extends PHPUnit_Framework_TestCase
+{
+
+ /**
+ * @dataProvider commandInterpreterCases
+ */
+ public function testCommandInterpreter($input, $expectedType, $comment='')
+ {
+ $inter = new CommandInterpreter();
+
+ $user = new User(); // fake user
+ $user->limit(1);
+ $user->find();
+ $cmd = $inter->handle_command($user, $input);
+
+ $type = $cmd ? get_class($cmd) : null;
+ $this->assertEquals(strtolower($expectedType), strtolower($type), $comment);
+ }
+
+ static public function commandInterpreterCases()
+ {
+ $sets = array(
+ array('help', 'HelpCommand'),
+ array('help me bro', null, 'help does not accept multiple params'),
+ array('HeLP', 'HelpCommand', 'case check'),
+ array('HeLP Me BRO!', null, 'case & non-params check'),
+
+ array('login', 'LoginCommand'),
+ array('login to savings!', null, 'login does not accept params'),
+
+ array('lose', null, 'lose must have at least 1 parameter'),
+ array('lose foobar', 'LoseCommand', 'lose requires 1 parameter'),
+ array('lose foobar', 'LoseCommand', 'check for space norm'),
+ array('lose more weight', null, 'lose does not accept multiple params'),
+
+ array('subscribers', 'SubscribersCommand'),
+ array('subscribers foo', null, 'subscribers does not take params'),
+
+ array('subscriptions', 'SubscriptionsCommand'),
+ array('subscriptions foo', null, 'subscriptions does not take params'),
+
+ array('groups', 'GroupsCommand'),
+ array('groups foo', null, 'groups does not take params'),
+
+ array('off', 'OffCommand', 'off accepts 0 or 1 params'),
+ array('off foo', 'OffCommand', 'off accepts 0 or 1 params'),
+ array('off foo bar', null, 'off accepts 0 or 1 params'),
+
+ array('stop', 'OffCommand', 'stop accepts 0 params'),
+ array('stop foo', null, 'stop accepts 0 params'),
+
+ array('quit', 'OffCommand', 'quit accepts 0 params'),
+ array('quit foo', null, 'quit accepts 0 params'),
+
+ array('on', 'OnCommand', 'on accepts 0 or 1 params'),
+ array('on foo', 'OnCommand', 'on accepts 0 or 1 params'),
+ array('on foo bar', null, 'on accepts 0 or 1 params'),
+
+ array('join', null),
+ array('join foo', 'JoinCommand'),
+ array('join foo bar', null),
+
+ array('drop', null),
+ array('drop foo', 'DropCommand'),
+ array('drop foo bar', null),
+
+ array('follow', null),
+ array('follow foo', 'SubCommand'),
+ array('follow foo bar', null),
+
+ array('sub', null),
+ array('sub foo', 'SubCommand'),
+ array('sub foo bar', null),
+
+ array('leave', null),
+ array('leave foo', 'UnsubCommand'),
+ array('leave foo bar', null),
+
+ array('unsub', null),
+ array('unsub foo', 'UnsubCommand'),
+ array('unsub foo bar', null),
+
+ array('leave', null),
+ array('leave foo', 'UnsubCommand'),
+ array('leave foo bar', null),
+
+ array('d', null),
+ array('d foo', null),
+ array('d foo bar', 'MessageCommand'),
+
+ array('dm', null),
+ array('dm foo', null),
+ array('dm foo bar', 'MessageCommand'),
+
+ array('r', null),
+ array('r foo', null),
+ array('r foo bar', 'ReplyCommand'),
+
+ array('reply', null),
+ array('reply foo', null),
+ array('reply foo bar', 'ReplyCommand'),
+
+ array('repeat', null),
+ array('repeat foo', 'RepeatCommand'),
+ array('repeat foo bar', null),
+
+ array('rp', null),
+ array('rp foo', 'RepeatCommand'),
+ array('rp foo bar', null),
+
+ array('rt', null),
+ array('rt foo', 'RepeatCommand'),
+ array('rt foo bar', null),
+
+ array('rd', null),
+ array('rd foo', 'RepeatCommand'),
+ array('rd foo bar', null),
+
+ array('whois', null),
+ array('whois foo', 'WhoisCommand'),
+ array('whois foo bar', null),
+
+ array('fav', null),
+ array('fav foo', 'FavCommand'),
+ array('fav foo bar', null),
+
+ array('nudge', null),
+ array('nudge foo', 'NudgeCommand'),
+ array('nudge foo bar', null),
+
+ array('stats', 'StatsCommand'),
+ array('stats foo', null),
+
+ array('invite', null),
+ array('invite foo', 'InviteCommand'),
+ array('invite foo bar', null),
+
+ array('track', null),
+ array('track foo', 'TrackCommand'),
+ array('track off', 'TrackOffCommand'),
+ array('track foo bar', null),
+ array('track off foo', null),
+
+ array('untrack', null),
+ array('untrack foo', 'UntrackCommand'),
+ array('untrack all', 'TrackOffCommand'),
+ array('untrack foo bar', null),
+ array('untrack all foo', null),
+
+ array('tracking', 'TrackingCommand'),
+ array('tracking foo', null),
+
+ array('tracks', 'TrackingCommand'),
+ array('tracks foo', null),
+
+ );
+ return $sets;
+ }
+
+}
+