Browse Source

IRCClient: Add support for /HOP and /TOPIC commands

Brendan Coles 5 years ago
parent
commit
2de2f49abc
2 changed files with 21 additions and 0 deletions
  1. 20 0
      Applications/IRCClient/IRCClient.cpp
  2. 1 0
      Applications/IRCClient/IRCClient.h

+ 20 - 0
Applications/IRCClient/IRCClient.cpp

@@ -312,6 +312,11 @@ void IRCClient::add_server_message(const String& text, Color color)
     m_server_subwindow->did_add_message();
     m_server_subwindow->did_add_message();
 }
 }
 
 
+void IRCClient::send_topic(const String& channel_name, const String& text)
+{
+    send(String::format("TOPIC %s :%s\r\n", channel_name.characters(), text.characters()));
+}
+
 void IRCClient::send_privmsg(const String& target, const String& text)
 void IRCClient::send_privmsg(const String& target, const String& text)
 {
 {
     send(String::format("PRIVMSG %s :%s\r\n", target.characters(), text.characters()));
     send(String::format("PRIVMSG %s :%s\r\n", target.characters(), text.characters()));
@@ -676,6 +681,21 @@ void IRCClient::handle_user_command(const String& input)
             part_channel(parts[1]);
             part_channel(parts[1]);
         return;
         return;
     }
     }
+    if (command == "/HOP") {
+        if (parts.size() >= 2) {
+            part_channel(parts[1]);
+            join_channel(parts[1]);
+        }
+        return;
+    }
+    if (command == "/TOPIC") {
+        if (parts.size() < 3)
+            return;
+        auto channel = parts[1];
+        auto topic = input.view().substring_view_starting_after_substring(channel);
+        send_topic(channel, topic);
+        return;
+    }
     if (command == "/QUERY") {
     if (command == "/QUERY") {
         if (parts.size() >= 2) {
         if (parts.size() >= 2) {
             auto& query = ensure_query(parts[1]);
             auto& query = ensure_query(parts[1]);

+ 1 - 0
Applications/IRCClient/IRCClient.h

@@ -133,6 +133,7 @@ private:
     void send_pong(const String& server);
     void send_pong(const String& server);
     void send_privmsg(const String& target, const String&);
     void send_privmsg(const String& target, const String&);
     void send_notice(const String& target, const String&);
     void send_notice(const String& target, const String&);
+    void send_topic(const String& channel_name, const String&);
     void send_whois(const String&);
     void send_whois(const String&);
     void process_line(ByteBuffer&&);
     void process_line(ByteBuffer&&);
     void handle_join(const Message&);
     void handle_join(const Message&);