+ if (strchr(client_modes, 'a'))
+ return "G"; /* away */
+ return "H";
+}
+
+
+static char *
+who_flags_qualifier(CLIENT *Client, const char *chan_user_modes, char *str, size_t len)
+{
+ assert(Client != NULL);
+
+ if (Client_Cap(Client) & CLIENT_CAP_MULTI_PREFIX) {
+ if (strchr(chan_user_modes, 'q'))
+ strlcat(str, "~", len);
+ if (strchr(chan_user_modes, 'a'))
+ strlcat(str, "&", len);
+ if (strchr(chan_user_modes, 'o'))
+ strlcat(str, "@", len);
+ if (strchr(chan_user_modes, 'h'))
+ strlcat(str, "&", len);
+ if (strchr(chan_user_modes, 'v'))
+ strlcat(str, "+", len);
+
+ return str;
+ }
+
+ if (strchr(chan_user_modes, 'q'))
+ strlcat(str, "~", len);
+ else if (strchr(chan_user_modes, 'a'))
+ strlcat(str, "&", len);
+ else if (strchr(chan_user_modes, 'o'))
+ strlcat(str, "@", len);
+ else if (strchr(chan_user_modes, 'h'))
+ strlcat(str, "%", len);
+ else if (strchr(chan_user_modes, 'v'))
+ strlcat(str, "+", len);
+
+ return str;
+}
+
+
+/**
+ * Send WHO reply for a "channel target" ("WHO #channel").
+ *
+ * @param Client Client requesting the information.
+ * @param Chan Channel being requested.
+ * @param OnlyOps Only display IRC operators.
+ * @return CONNECTED or DISCONNECTED.
+ */
+static bool
+IRC_WHO_Channel(CLIENT *Client, CHANNEL *Chan, bool OnlyOps)
+{
+ bool is_visible, is_member, is_ircop;