]> jfr.im git - irc/unrealircd/unrealircd-rpc-php.git/blobdiff - lib/Channel.php
Return from $rpc->eventloop() after 2 seconds instead of 10.
[irc/unrealircd/unrealircd-rpc-php.git] / lib / Channel.php
index 7e7b21a2d115770e57cea620d62e405099de7041..7a6a68e81b0d83d77b5ddeb8dc59d0c8d6c1397d 100644 (file)
@@ -5,60 +5,94 @@ namespace UnrealIRCd;
 use Exception;
 use stdClass;
 
-class Channel implements Contracts\User
+class Channel
 {
 
     public Connection $connection;
 
-    public function __construct(string $uri, string $api_login, array $options)
+    public function __construct(Connection $conn)
     {
-        $this->connection = new Connection($uri, $api_login, $options);
+        $this->connection = $conn;
     }
 
     /**
      * Return a list of channels users.
      *
-     * @return stdClass
+     * @return stdClass|array|bool
      * @throws Exception
      */
-    public function get(): stdClass
+    public function getAll(int $object_detail_level=1): stdClass|array|bool
     {
-        $id = random_int(100, 1000);
-
-        $response = $this->connection->query('channel.list');
-
-        if($id !== $response->id) {
-            throw new Exception('Invalid ID. This is not the expected reply.');
-        }
+        $response = $this->connection->query('channel.list', [
+            'object_detail_level' => $object_detail_level,
+        ]);
 
         if(!is_bool($response)) {
-            return $response;
+            return $response->list;
         }
 
         throw new Exception('Invalid JSON Response from UnrealIRCd RPC.');
     }
 
     /**
-     * Return a channel object
+     * Get a channel object
      *
-     * @param  array  $params
-     * @return stdClass
-     * @throws Exception
+     * @return stdClass|array|bool
      */
-    public function show(array $params): stdClass
+    public function get(string $channel, int $object_detail_level=3): stdClass|array|bool
     {
-        $id = random_int(100, 1000);
-
-        $response = $this->connection->query('channel.get', ['channel' => $params['channel']]);
-
-        if($id !== $response->id) {
-            throw new Exception('Invalid ID. This is not the expected reply.');
-        }
+        $response = $this->connection->query('channel.get', [
+            'channel' => $channel,
+            'object_detail_level' => $object_detail_level,
+        ]);
 
         if (!is_bool($response)) {
-            return $response;
+            return $response->channel;
         }
+        return false; /* eg user not found */
+    }
 
-        throw new Exception('Invalid JSON Response from UnrealIRCd RPC.');
+    /**
+     * Set and unset modes on a channel.
+     *
+     * @return stdClass|array|bool
+     */
+    public function set_mode(string $channel, string $modes, string $parameters): stdClass|array|bool
+    {
+        return $this->connection->query('channel.set_mode', [
+            'channel' => $channel,
+            'modes' => $modes,
+            'parameters' => $parameters,
+        ]);
+    }
+
+    /**
+     * Set the channel topic.
+     *
+     * @return stdClass|array|bool
+     */
+    public function set_topic(string $channel, string $topic,
+                              string $set_by=null, string $set_at=null): stdClass|array|bool
+    {
+        return $this->connection->query('channel.set_topic', [
+            'channel' => $channel,
+            'topic' => $topic,
+            'set_by' => $set_by,
+            'set_at' => $set_at,
+        ]);
+    }
+
+    /**
+     * Kick a user from the channel.
+     *
+     * @return stdClass|array|bool
+     */
+    public function kick(string $channel, string $nick, string $reason): stdClass|array|bool
+    {
+        return $this->connection->query('channel.kick', [
+            'nick' => $nick,
+            'channel' => $channel,
+            'reason' => $reason,
+        ]);
     }
 }