X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=lib%2Fcommandinterpreter.php;h=d2b744e93d79c41554dc2788277efcc7f3f6883c;hb=b53e1439969bfa2c0b551d8cc2fc8fe15652c62a;hp=fbc6174bbfab1b95a2d9573df2043e3688cf9a0f;hpb=1de7badd78bb3cddc99a6960ec6a395a191ce6be;p=quix0rs-gnu-social.git diff --git a/lib/commandinterpreter.php b/lib/commandinterpreter.php index fbc6174bbf..d2b744e93d 100644 --- a/lib/commandinterpreter.php +++ b/lib/commandinterpreter.php @@ -25,258 +25,292 @@ class CommandInterpreter { function handle_command($user, $text) { - # XXX: localise + // XXX: localise $text = preg_replace('/\s+/', ' ', trim($text)); - list($cmd, $arg) = $this->split_arg($text); + list($cmd, $arg) = self::split_arg($text); - # We try to support all the same commands as Twitter, see - # http://getsatisfaction.com/twitter/topics/what_are_the_twitter_commands - # There are a few compatibility commands from earlier versions of - # StatusNet + // We try to support all the same commands as Twitter, see + // http://getsatisfaction.com/twitter/topics/what_are_the_twitter_commands + // There are a few compatibility commands from earlier versions of + // StatusNet - switch(strtolower($cmd)) { - case 'help': - if ($arg) { - return null; - } - return new HelpCommand($user); - case 'login': - if ($arg) { - return null; - } else { - return new LoginCommand($user); - } - case 'lose': - if ($arg) { - list($other, $extra) = $this->split_arg($arg); - if ($extra) { - return null; + $cmd = strtolower($cmd); + + if (Event::handle('StartInterpretCommand', array($cmd, $arg, $user, &$result))) { + switch($cmd) { + case 'help': + if ($arg) { + $result = null; } else { - return new LoseCommand($user, $other); + $result = new HelpCommand($user); } - } else { - return null; - } - case 'subscribers': - if ($arg) { - return null; - } else { - return new SubscribersCommand($user); - } - case 'subscriptions': - if ($arg) { - return null; - } else { - return new SubscriptionsCommand($user); - } - case 'groups': - if ($arg) { - return null; - } else { - return new GroupsCommand($user); - } - case 'on': - if ($arg) { - list($other, $extra) = $this->split_arg($arg); - if ($extra) { - return null; + break; + case 'login': + if ($arg) { + $result = null; } else { - return new OnCommand($user, $other); + $result = new LoginCommand($user); } - } else { - return new OnCommand($user); - } - case 'off': - if ($arg) { - list($other, $extra) = $this->split_arg($arg); + break; + case 'lose': + if ($arg) { + list($other, $extra) = self::split_arg($arg); + if ($extra) { + $result = null; + } else { + $result = new LoseCommand($user, $other); + } + } else { + $result = null; + } + break; + case 'subscribers': + if ($arg) { + $result = null; + } else { + $result = new SubscribersCommand($user); + } + break; + case 'subscriptions': + if ($arg) { + $result = null; + } else { + $result = new SubscriptionsCommand($user); + } + break; + case 'groups': + if ($arg) { + $result = null; + } else { + $result = new GroupsCommand($user); + } + break; + case 'on': + if ($arg) { + list($other, $extra) = self::split_arg($arg); + if ($extra) { + $result = null; + } else { + $result = new OnCommand($user, $other); + } + } else { + $result = new OnCommand($user); + } + break; + case 'off': + if ($arg) { + list($other, $extra) = self::split_arg($arg); + if ($extra) { + $result = null; + } else { + $result = new OffCommand($user, $other); + } + } else { + $result = new OffCommand($user); + } + break; + case 'stop': + case 'quit': + if ($arg) { + $result = null; + } else { + $result = new OffCommand($user); + } + break; + case 'join': + if (!$arg) { + $result = null; + } else { + list($other, $extra) = self::split_arg($arg); + if ($extra) { + $result = null; + } else { + $result = new JoinCommand($user, $other); + } + } + break; + case 'drop': + if (!$arg) { + $result = null; + } else { + list($other, $extra) = self::split_arg($arg); + if ($extra) { + $result = null; + } else { + $result = new DropCommand($user, $other); + } + } + break; + case 'follow': + case 'sub': + if (!$arg) { + $result = null; + } else { + list($other, $extra) = self::split_arg($arg); + if ($extra) { + $result = null; + } else { + $result = new SubCommand($user, $other); + } + } + break; + case 'leave': + case 'unsub': + if (!$arg) { + $result = null; + } else { + list($other, $extra) = self::split_arg($arg); + if ($extra) { + $result = null; + } else { + $result = new UnsubCommand($user, $other); + } + } + break; + case 'get': + case 'last': + if (!$arg) { + $result = null; + } + list($other, $extra) = self::split_arg($arg); if ($extra) { - return null; + $result = null; } else { - return new OffCommand($user, $other); + $result = new GetCommand($user, $other); } - } else { - return new OffCommand($user); - } - case 'stop': - case 'quit': - if ($arg) { - return null; - } else { - return new OffCommand($user); - } - case 'join': - if (!$arg) { - return null; - } - list($other, $extra) = $this->split_arg($arg); - if ($extra) { - return null; - } else { - return new JoinCommand($user, $other); - } - case 'drop': - if (!$arg) { - return null; - } - list($other, $extra) = $this->split_arg($arg); - if ($extra) { - return null; - } else { - return new DropCommand($user, $other); - } - case 'follow': - case 'sub': - if (!$arg) { - return null; - } - list($other, $extra) = $this->split_arg($arg); - if ($extra) { - return null; - } else { - return new SubCommand($user, $other); - } - case 'leave': - case 'unsub': - if (!$arg) { - return null; - } - list($other, $extra) = $this->split_arg($arg); - if ($extra) { - return null; - } else { - return new UnsubCommand($user, $other); - } - case 'get': - case 'last': - if (!$arg) { - return null; - } - list($other, $extra) = $this->split_arg($arg); - if ($extra) { - return null; - } else { - return new GetCommand($user, $other); - } - case 'd': - case 'dm': - if (!$arg) { - return null; - } - list($other, $extra) = $this->split_arg($arg); - if (!$extra) { - return null; - } else { - return new MessageCommand($user, $other, $extra); - } - case 'r': - case 'reply': - if (!$arg) { - return null; - } - list($other, $extra) = $this->split_arg($arg); - if (!$extra) { - return null; - } else { - return new ReplyCommand($user, $other, $extra); - } - case 'repeat': - case 'rp': - case 'rt': - case 'rd': - if (!$arg) { - return null; - } - list($other, $extra) = $this->split_arg($arg); - if ($extra) { - return null; - } else { - return new RepeatCommand($user, $other); - } - case 'whois': - if (!$arg) { - return null; - } - list($other, $extra) = $this->split_arg($arg); - if ($extra) { - return null; - } else { - return new WhoisCommand($user, $other); - } - case 'fav': - if (!$arg) { - return null; - } - list($other, $extra) = $this->split_arg($arg); - if ($extra) { - return null; - } else { - return new FavCommand($user, $other); - } - case 'nudge': - if (!$arg) { - return null; - } - list($other, $extra) = $this->split_arg($arg); - if ($extra) { - return null; - } else { - return new NudgeCommand($user, $other); - } - case 'stats': - if ($arg) { - return null; - } - return new StatsCommand($user); - case 'invite': - if (!$arg) { - return null; - } - list($other, $extra) = $this->split_arg($arg); - if ($extra) { - return null; - } else { - return new InviteCommand($user, $other); - } - case 'track': - if (!$arg) { - return null; - } - list($word, $extra) = $this->split_arg($arg); - if ($extra) { - return null; - } else if ($word == 'off') { - return new TrackOffCommand($user); - } else { - return new TrackCommand($user, $word); - } - case 'untrack': - if (!$arg) { - return null; - } - list($word, $extra) = $this->split_arg($arg); - if ($extra) { - return null; - } else if ($word == 'all') { - return new TrackOffCommand($user); - } else { - return new UntrackCommand($user, $word); - } - case 'tracks': - case 'tracking': - if ($arg) { - return null; + break; + case 'r': + case 'reply': + if (!$arg) { + $result = null; + } + list($other, $extra) = self::split_arg($arg); + if (!$extra) { + $result = null; + } else { + $result = new ReplyCommand($user, $other, $extra); + } + break; + case 'whois': + if (!$arg) { + $result = null; + } else { + list($other, $extra) = self::split_arg($arg); + if ($extra) { + $result = null; + } else { + $result = new WhoisCommand($user, $other); + } + } + break; + case 'nudge': + if (!$arg) { + $result = null; + } else { + list($other, $extra) = self::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); + } + break; + case 'invite': + if (!$arg) { + $result = null; + } else { + list($other, $extra) = self::split_arg($arg); + if ($extra) { + $result = null; + } else { + $result = new InviteCommand($user, $other); + } + } + break; + case 'list': + case 'tag': + if (!$arg) { + $result = null; + break; + } + list($other, $tags) = self::split_arg($arg); + if (!$tags) { + $result = null; + } else { + $result = new TagCommand($user, $other, $tags); + } + break; + case 'unlist': + case 'untag': + if (!$arg) { + $result = null; + break; + } + list($other, $tags) = self::split_arg($arg); + if (!$tags) { + $result = null; + } else { + $result = new UntagCommand($user, $other, $tags); + } + break; + case 'track': + if (!$arg) { + $result = null; + } else { + list($word, $extra) = self::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; + } else { + list($word, $extra) = self::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); + } + break; + default: + $result = false; } - return new TrackingCommand($user); - default: - return false; + + Event::handle('EndInterpretCommand', array($cmd, $arg, $user, &$result)); } + + return $result; } - + /** * Split arguments without triggering a PHP notice warning */ - function split_arg($text) + static function split_arg($text) { $pieces = explode(' ', $text, 2); if (count($pieces) == 1) { @@ -285,4 +319,3 @@ class CommandInterpreter return $pieces; } } -