68 lines
2.4 KiB
Bash
68 lines
2.4 KiB
Bash
|
#!/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"
|