#!/bin/bash
# MAKEE Interactive全员群成员每日检查脚本
# 配置参数
DOC_URL="https://makee-interactive.feishu.cn/docx/KRRXducmGoFtonxBs0Pcmu4anch"
CHAT_ID="oc_d7a8edc423d05f2fa6a5f4c0d8eb4e86"
USER_OPEN_ID="ou_7c623036b45fe81f372b032da664a4fe"
# 1. 获取文档最新成员列表
echo "=== $(date) 开始执行成员检查 ==="
doc_content=$(openclaw tool call feishu_fetch_doc --doc_id "$DOC_URL" --output json)
doc_members=$(echo "$doc_content" | jq -r '.markdown' | grep -A2 '[0-9]*' | grep '[a-z0-9]*' | sed 's/.*\(.*\)<\/lark-td>.*/\1/' | grep -v '^[0-9]*$' | sort)
# 2. 获取群最新成员列表
chat_members=""
page_token=""
while true; do
resp=$(openclaw tool call feishu_chat_members --chat_id "$CHAT_ID" --member_id_type user_id --page_token "$page_token" --output json)
members=$(echo "$resp" | jq -r '.items[].member_id' | sort)
chat_members="$chat_members"$'\n'"$members"
page_token=$(echo "$resp" | jq -r '.page_token')
if [ "$page_token" == "null" ] || [ "$page_token" == "" ]; then
break
fi
done
chat_members=$(echo "$chat_members" | grep -v '^$' | sort)
total=$(echo "$chat_members" | wc -l)
# 3. 对比差异
added=$(comm -13 <(echo "$doc_members") <(echo "$chat_members"))
removed=$(comm -23 <(echo "$doc_members") <(echo "$chat_members"))
# 4. 生成通知消息
message="📊 MAKEE Interactive全员群每日成员检查报告
检查时间:$(date "+%Y-%m-%d %H:%M:%S")
当前群总人数:$total 人"
if [ -n "$added" ] || [ -n "$removed" ]; then
message="$message"$'\n\n'"⚠️ 发现人员变动:"
if [ -n "$added" ]; then
add_count=$(echo "$added" | wc -l)
message="$message"$'\n'"✅ 新增成员 ($add_count 人):"
for uid in $added; do
name=$(openclaw tool call feishu_search_user --query "$uid" --output json | jq -r '.items[0].name' 2>/dev/null || echo "$uid")
message="$message"$'\n'"- $name ($uid)"
done
fi
if [ -n "$removed" ]; then
remove_count=$(echo "$removed" | wc -l)
message="$message"$'\n'"❌ 退出成员 ($remove_count 人):"
for uid in $removed; do
name=$(echo "$doc_content" | grep -B2 "$uid" | head -n1 | sed 's/.*\(.*\)<\/lark-td>.*/\1/' 2>/dev/null || echo "$uid")
message="$message"$'\n'"- $name ($uid)"
done
fi
# 5. 更新文档内容(重新生成整个表格)
# 生成新的表格内容
table_header="
序号
姓名
租户通用 user_id
"
index=1
for uid in $chat_members; do
name=$(openclaw tool call feishu_search_user --query "$uid" --output json | jq -r '.items[0].name' 2>/dev/null || echo "$uid")
table_row="
$index
$name
$uid
"
table_header="$table_header$table_row"
index=$((index+1))
done
table_header="$table_header"$'\n'""
# 更新总人数
openclaw tool call feishu_update_doc --doc_id "$DOC_URL" --mode replace_range --selection_with_ellipsis "总人数:[0-9]*人" --markdown "总人数:$total 人" >/dev/null 2>&1
# 替换整个成员表格
openclaw tool call feishu_update_doc --doc_id "$DOC_URL" --mode replace_range --selection_with_ellipsis ".*" --markdown "$table_header" >/dev/null 2>&1
message="$message"$'\n\n'"✅ 飞书文档已同步更新为最新成员列表。"
else
message="$message"$'\n\n'"✅ 无人员变动,成员列表与文档一致。"
fi
# 6. 发送通知给用户
openclaw tool call message --action send --message "$message" --channel feishu --target "user:$USER_OPEN_ID" >/dev/null 2>&1
echo "=== 执行完成 ==="