]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
hooks for commands
authorEvan Prodromou <evan@status.net>
Thu, 3 Feb 2011 22:04:16 +0000 (17:04 -0500)
committerEvan Prodromou <evan@status.net>
Thu, 3 Feb 2011 22:04:16 +0000 (17:04 -0500)
EVENTS.txt
lib/commandinterpreter.php

index d26c576e19a3e42db2d3a354f0d4eb9c6a69814e..98927127b74fdf74b73510f73d8db94ee7c843b2 100644 (file)
@@ -1069,3 +1069,16 @@ StartGroupSave: After initializing but before saving a group
 
 EndGroupSave: After saving a group, aliases, and first member
 - $group: group that was saved
+
+StartInterpretCommand: Before running a command
+- $cmd: First word in the string, 'foo' in 'foo argument' 
+- $arg: Argument, if any, like 'argument' in 'foo argument'
+- $user: User who issued the command
+- &$result: Resulting command; you can set this!
+
+EndInterpretCommand: Before running a command
+- $cmd: First word in the string, 'foo' in 'foo argument' 
+- $arg: Argument, if any, like 'argument' in 'foo argument'
+- $user: User who issued the command
+- $result: Resulting command
+
index c288c2e5f0ec66d5d781b067417bbed6931eae3f..2e79fb27ee0a44061061f3399b7aef4de770300f 100644 (file)
@@ -25,252 +25,285 @@ class CommandInterpreter
 {
     function handle_command($user, $text)
     {
-        # XXX: localise
+        // XXX: localise
 
         $text = preg_replace('/\s+/', ' ', trim($text));
         list($cmd, $arg) = $this->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) {
+        if (Event::handle('StartIntepretCommand', array($cmd, $arg, $user, &$result))) {
+            switch(strtolower($cmd)) {
+            case 'help':
+                if ($arg) {
+                    $result = null;
+                }
+                $result = new HelpCommand($user);
+                break;
+            case 'login':
+                if ($arg) {
+                    $result = null;
+                } else {
+                    $result = new LoginCommand($user);
+                }
+                break;
+            case 'lose':
+                if ($arg) {
+                    list($other, $extra) = $this->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) = $this->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) = $this->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;
+                }
                 list($other, $extra) = $this->split_arg($arg);
                 if ($extra) {
-                    return null;
+                    $result = null;
                 } else {
-                    return new LoseCommand($user, $other);
+                    $result = new JoinCommand($user, $other);
+                }
+                break;
+            case 'drop':
+                if (!$arg) {
+                    $result = null;
                 }
-            } 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;
+                    $result = null;
                 } else {
-                    return new OnCommand($user, $other);
+                    $result = new DropCommand($user, $other);
                 }
-            } else {
-                return new OnCommand($user);
-            }
-         case 'off':
-            if ($arg) {
+                break;
+            case 'follow':
+            case 'sub':
+                if (!$arg) {
+                    $result = null;
+                }
+
                 list($other, $extra) = $this->split_arg($arg);
                 if ($extra) {
-                    return null;
+                    $result = null;
                 } else {
-                    return new OffCommand($user, $other);
+                    $result = new SubCommand($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 'leave':
+            case 'unsub':
+                if (!$arg) {
+                    $result = null;
+                }
+
+                list($other, $extra) = $this->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) = $this->split_arg($arg);
+                if ($extra) {
+                    $result = null;
+                } else {
+                    $result = new GetCommand($user, $other);
+                }
+                break;
+            case 'd':
+            case 'dm':
+                if (!$arg) {
+                    $result = null;
+                }
+                list($other, $extra) = $this->split_arg($arg);
+                if (!$extra) {
+                    $result = null;
+                } else {
+                    $result = new MessageCommand($user, $other, $extra);
+                }
+                break;
+            case 'r':
+            case 'reply':
+                if (!$arg) {
+                    $result = null;
+                }
+                list($other, $extra) = $this->split_arg($arg);
+                if (!$extra) {
+                    $result = null;
+                } else {
+                    $result = new ReplyCommand($user, $other, $extra);
+                }
+                break;
+            case 'repeat':
+            case 'rp':
+            case 'rt':
+            case 'rd':
+                if (!$arg) {
+                    $result = null;
+                }
+                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);
+                }
+                break;
+            case 'fav':
+                if (!$arg) {
+                    $result = null;
+                }
+                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);
+                }
+                break;
+            case 'stats':
+                if ($arg) {
+                    $result = null;
+                }
+                $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);
+                }
+                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);
+                }
+                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);
+                }
+                break;
+            case 'tracks':
+            case 'tracking':
+                if ($arg) {
+                    $result = null;
+                }
+                $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;
     }
 
     /**