0

我一直在开发一个 PHP ajax 聊天。我现在想添加 /ban 等命令。

但我不确定我该怎么做。

首先,我希望命令以“/”符号开头。

我必须先检查发送的消息是否以“/”符号开头,对吗?然后看看命令'ban'是否存在,但是它怎么知道,用户名会显示在句子的什么地方呢?

我真的很困惑,因为我不知道从哪里以及如何开始。 是否有类似于我需要的开源命令系统?

4

2 回答 2

2

您需要自己为命令定义语法。以禁令为例。/ban <username>

  1. 首先检查消息是否以斜杠开头。如果是这样,它是一个命令。
  2. 现在搜索第一个空格,斜杠之后和空格前面的所有内容都是命令名称。
  3. 将第一个空格之后的所有内容传递给命令。在这种情况下,用户名。该命令自行处理参数。

它可能看起来像这样:

$message = '/ban TimWolla';
if (substr($message, 0, 1) === '/') {
    // $message is a command
    $firstSpace = strpos($message, ' ');
    $command = substr($message, 1, $firstSpace);
    $parameters = substr($message, $firstSpace + 1);

    if (!hasPermission($command)) error('Permission denied');

    switch ($command) {
        case 'ban':
            ban($parameters);
        break;
    }
} 

如果您想使用正确的 OOP,请使每个命令成为一个类并为所有命令使用接口以要求正确的方法。例如:

interface Command {
    public function setParameters($parameters);
    public function hasPermission();
    public function execute();
}
于 2013-06-20T14:48:24.800 回答
0

所有消息都应该发送到服务器。

即如果消息是“你好,欢迎来到频道”——这应该被解释为MSG服务器上的命令。

您应该有一个Command解析器服务器端来处理消息的类型。例如,如果一条MSG消息被传递,请将其发送到MessageParser. 如果/命令被传递,则将其发送到CommandParser.

ban命令应采用以下形式:

/ban username

在服务器端级别,您应该检查尝试执行命令的用户是否是操作员,如果他/她正在查找用户名的 IP 地址并将其添加到服务器上的黑名单中。

于 2013-06-20T14:49:50.900 回答