From 674b9da6fa84f8b25da78d688cee320b09523f4a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ond=C5=99ej=20Hru=C5=A1ka?= <ondra@ondrovo.com>
Date: Fri, 27 Aug 2021 00:30:49 +0200
Subject: [PATCH] improve /add user

---
 CHANGELOG.md                        |  3 ++
 Cargo.lock                          |  2 +-
 Cargo.toml                          |  2 +-
 src/group_handler/handle_mention.rs | 43 +++++++++++++----------------
 4 files changed, 24 insertions(+), 26 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 43b9893..bb67330 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,8 @@
 # Changelog
 
+## v0.2.3
+- `/add user` will now try to follow even if already a member
+
 ## v0.2.2
 - All hashtags, server names and handles are now lowercased = case-insensitive
 - Prevent the `-a` flag overwriting existing group in the config
diff --git a/Cargo.lock b/Cargo.lock
index 49848d9..a650262 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -328,7 +328,7 @@ checksum = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed"
 
 [[package]]
 name = "fedigroups"
-version = "0.2.2"
+version = "0.2.3"
 dependencies = [
  "anyhow",
  "clap",
diff --git a/Cargo.toml b/Cargo.toml
index 6430c81..b5fb06d 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -1,6 +1,6 @@
 [package]
 name = "fedigroups"
-version = "0.2.2"
+version = "0.2.3"
 authors = ["Ondřej Hruška <ondra@ondrovo.com>"]
 edition = "2018"
 publish = false
diff --git a/src/group_handler/handle_mention.rs b/src/group_handler/handle_mention.rs
index c2647be..b8beef4 100644
--- a/src/group_handler/handle_mention.rs
+++ b/src/group_handler/handle_mention.rs
@@ -379,19 +379,15 @@ impl<'a> ProcessMention<'a> {
     async fn cmd_add_member(&mut self, user: &str) -> Result<(), GroupError> {
         let u = normalize_acct(user, &self.group_acct)?;
         if self.is_admin {
-            if !self.config.is_member(&u) {
-                match self.config.set_member(&u, true) {
-                    Ok(_) => {
-                        self.add_reply(format!("User {} added to the group!", u));
-                        self.follow_by_acct(&u)
-                            .await.log_error("Failed to follow");
-                    }
-                    Err(e) => {
-                        self.add_reply(format!("Failed to add user {} to group: {}", u, e));
-                    }
+            match self.config.set_member(&u, true) {
+                Ok(_) => {
+                    self.add_reply(format!("User {} added to the group!", u));
+                    self.follow_by_acct(&u)
+                        .await.log_error("Failed to follow");
+                }
+                Err(e) => {
+                    self.add_reply(format!("Failed to add user {} to group: {}", u, e));
                 }
-            } else {
-                debug!("User was already a member");
             }
         } else {
             self.add_reply("Only admins can manage members");
@@ -402,16 +398,14 @@ impl<'a> ProcessMention<'a> {
     async fn cmd_remove_member(&mut self, user: &str) -> Result<(), GroupError> {
         let u = normalize_acct(user, &self.group_acct)?;
         if self.is_admin {
-            if self.config.is_member(&u) {
-                match self.config.set_member(&u, false) {
-                    Ok(_) => {
-                        self.add_reply(format!("User {} removed from the group.", u));
-                        self.unfollow_by_acct(&u).await
-                            .log_error("Failed to unfollow removed user");
-                    }
-                    Err(_) => {
-                        unreachable!()
-                    }
+            match self.config.set_member(&u, false) {
+                Ok(_) => {
+                    self.add_reply(format!("User {} removed from the group.", u));
+                    self.unfollow_by_acct(&u).await
+                        .log_error("Failed to unfollow removed user");
+                }
+                Err(_) => {
+                    unreachable!()
                 }
             }
         } else {
@@ -586,9 +580,10 @@ impl<'a> ProcessMention<'a> {
             // admin can leave but that's a bad idea
             let _ = self.config.set_member(&self.status_acct, false);
             self.add_reply("You're no longer a group member. Unfollow the group user to stop receiving group messages.");
-            self.unfollow_user_by_id(&self.status_user_id).await
-                .log_error("Failed to unfollow");
         }
+
+        self.unfollow_user_by_id(&self.status_user_id).await
+            .log_error("Failed to unfollow");
     }
 
     async fn cmd_join(&mut self) {