Files
Rocket-API-Scripts/AddAllMemeberstoSpecificChannels.sh

68 lines
2.4 KiB
Bash
Raw Normal View History

2025-07-18 06:34:00 +01:00
#!/bin/bash
# --- BEGIN VARIABLES: SET THESE ---
ROCKET_CHAT_URL="https://chat.koozali.org"
TOKEN="LwSxku5012GVjT5GKukvCiAE3jmxzNREsJ3ZO87oP1D"
USER_ID="9RmjfwmQZc9pYrC9G"
CHANNELS_FILE="ChannelsToAddTo"
# --- END VARIABLES ---
# Get all users (members) from Rocket.Chat
get_all_members() {
curl -s -X GET "$ROCKET_CHAT_URL/api/v1/users.list?count=1000" \
-H "X-Auth-Token: $TOKEN" \
-H "X-User-Id: $USER_ID" \
-H "Content-Type: application/json"
}
# Get all members of a channel
get_channel_members() {
local channel_id="$1"
curl -s -X GET "$ROCKET_CHAT_URL/api/v1/channels.members?roomId=$channel_id" \
-H "X-Auth-Token: $TOKEN" \
-H "X-User-Id: $USER_ID" \
-H "Content-Type: application/json"
}
# Add a single user to a channel
add_member_to_channel() {
local channel_id="$1"
local member_id="$2"
curl -s -X POST "$ROCKET_CHAT_URL/api/v1/channels.invite" \
-H "X-Auth-Token: $TOKEN" \
-H "X-User-Id: $USER_ID" \
-H "Content-Type: application/json" \
-d "{\"roomId\":\"$channel_id\", \"userId\":\"$member_id\"}"
}
# MAIN SCRIPT
echo "Fetching ALL Rocket.Chat users..."
members_response=$(get_all_members)
member_ids=$(echo "$members_response" | jq -r '.users[] | select(.active == true) | ._id')
total_members=$(echo "$member_ids" | wc -w)
echo "Total members to add: $total_members"
while read -r channel_name channel_id; do
echo ""
echo "Processing channel '$channel_name' ($channel_id)..."
# Get current members of this channel (as a bash array)
current_members=$(get_channel_members "$channel_id" | jq -r '.members[] | ._id')
# Add each member _only if not already in the channel_
added=0
already=0
for member_id in $member_ids; do
if echo "$current_members" | grep -qx "$member_id"; then
echo " User $member_id is ALREADY a member of $channel_name"
((already++))
else
resp=$(add_member_to_channel "$channel_id" "$member_id")
if echo "$resp" | grep -q '"success":true'; then
echo " Added user $member_id to $channel_name"
((added++))
else
echo " Could NOT add $member_id to $channel_name: $(echo "$resp" | jq -c .)"
fi
fi
done
echo "$added members added, $already already present in $channel_name"
done < "$CHANNELS_FILE"