]> 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 82323907a71a3a528d2c3190acb0d6b227ca2e04..7a6a68e81b0d83d77b5ddeb8dc59d0c8d6c1397d 100644 (file)
@@ -18,15 +18,17 @@ class Channel
     /**
      * Return a list of channels users.
      *
-     * @return stdClass
+     * @return stdClass|array|bool
      * @throws Exception
      */
-    public function getAll(): stdClass
+    public function getAll(int $object_detail_level=1): stdClass|array|bool
     {
-        $response = $this->connection->query('channel.list');
+        $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.');
@@ -35,17 +37,62 @@ class Channel
     /**
      * Get a channel object
      *
-     * @return stdClass
-     * @throws Exception
+     * @return stdClass|array|bool
      */
-    public function get(string $channel): stdClass
+    public function get(string $channel, int $object_detail_level=3): stdClass|array|bool
     {
-        $response = $this->connection->query('channel.get', ['channel' => $channel]);
+        $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,
+        ]);
     }
 }