Просмотр исходного кода

darkirc: Add "no-autojoin" CAP

parazyd 2 лет назад
Родитель
Сommit
d2e705b8cc

+ 5 - 0
bin/darkirc/script/bots/meetbot/meetbot.py

@@ -61,6 +61,11 @@ async def main(debug=False):
         writer.write(msg.encode("utf-8"))
         await writer.drain()
 
+        logging.debug("--> %s/%d: CAP REQ :no-autojoin", host, port)
+        msg = "CAP REQ :no-autojoin\r\n"
+        writer.write(msg.encode("utf-8"))
+        await writer.drain()
+
         msg = await reader.readline()
         msg = msg.decode("utf-8")
         logging.debug("<-- %s/%d: %s", host, port, msg)

+ 2 - 1
bin/darkirc/src/irc/client.rs

@@ -102,7 +102,8 @@ impl Client {
         incoming: Subscription<Event>,
         addr: SocketAddr,
     ) -> Result<Self> {
-        let caps = HashMap::from([("no-history".to_string(), false)]);
+        let caps =
+            HashMap::from([("no-history".to_string(), false), ("no-autojoin".to_string(), false)]);
 
         let username = Arc::new(RwLock::new(String::from("*")));
         let nickname = Arc::new(RwLock::new(String::from("*")));

+ 13 - 11
bin/darkirc/src/irc/command.rs

@@ -894,22 +894,24 @@ impl Client {
 
         // If we have any configured autojoin channels, let's join the user
         // and set their topics, if any. And request NAMES list.
-        for channel in self.server.autojoin.read().await.iter() {
-            replies.extend(self.handle_cmd_join(channel).await.unwrap());
+        if !*self.caps.read().await.get("no-autojoin").unwrap() {
+            for channel in self.server.autojoin.read().await.iter() {
+                replies.extend(self.handle_cmd_join(channel).await.unwrap());
 
-            if let Some(chan) = self.server.channels.read().await.get(channel) {
-                let nicks: Vec<String> = chan.nicks.iter().cloned().collect();
+                if let Some(chan) = self.server.channels.read().await.get(channel) {
+                    let nicks: Vec<String> = chan.nicks.iter().cloned().collect();
+
+                    replies.push(ReplyType::Server((
+                        RPL_NAMREPLY,
+                        format!("{} = {} :{}", nick, channel, nicks.join(" ")),
+                    )));
+                }
 
                 replies.push(ReplyType::Server((
-                    RPL_NAMREPLY,
-                    format!("{} = {} :{}", nick, channel, nicks.join(" ")),
+                    RPL_ENDOFNAMES,
+                    format!("{} {} :End of NAMES list", nick, channel),
                 )));
             }
-
-            replies.push(ReplyType::Server((
-                RPL_ENDOFNAMES,
-                format!("{} {} :End of NAMES list", nick, channel),
-            )));
         }
 
         replies