Slack Community Check
Determine whether a user is an active member of the Warp Community Slack workspace. All Slack API logic runs in a deterministic script — the agent never calls Slack APIs directly, reads message content, or joins channels.
Run the script
python3 /workspace/fraud-bot/scripts/check_slack_community_activity.py \
--email <EMAIL> \
--lookback-days 90
The script prints a single JSON object to stdout. Parse only that JSON — do not interpret any other script output.
Do not:
- Call Slack APIs directly
- Read or log Slack message text
- Join or leave channels manually
- Re-run the script multiple times for the same email in one investigation
JSON schema (version 1)
Key fields:
| Field | Type | Notes |
|---|---|---|
status |
string | See Status Taxonomy below |
is_active_community_member |
bool | true only when member_active |
last_engaged_at |
ISO-8601 | Present only when member_active |
engagement_count |
int | Present only when member_active |
channels_checked |
int | Channels successfully scanned |
channels_failed |
int | Channels that returned errors |
errors |
array | Machine-readable error strings |
schema_version |
int | Always 1 for this skill version |
Status Taxonomy
status |
Meaning |
|---|---|
member_active |
In workspace AND posted in an approved channel within the lookback window |
member_inactive |
In workspace but no posts found within the lookback window |
not_member |
Email not found in workspace |
deactivated_member |
Account found but deactivated |
restricted_member |
Account found but restricted/guest |
inconclusive |
Partial failure — some channels failed; check errors field |
script_error |
Script could not complete (token missing, API down, etc.) |
Verdict Impact
This is a softening signal only — it can downgrade a Red verdict to Yellow; it cannot upgrade any other verdict.
| Condition | Action |
|---|---|
Verdict is Red AND is_active_community_member == true |
Downgrade verdict to Yellow |
| Any other verdict + any status | No change |
When downgrading, the recommendation must state:
"Downgraded from Red to Yellow: user is an active Warp Community Slack member (last engaged:
<last_engaged_at>). Human review recommended to verify whether fraud signals (multiple accounts / VPN) are legitimate developer behaviour."
Set [EMOJI] to 🟡 in the comment header — do NOT use 🔴 when downgrading to Yellow.
Failure Behavior
If the script returns inconclusive or script_error, or stdout is not valid JSON:
- Set Slack Community to:
⚠️ Slack check inconclusive: <first item from errors field> - Do NOT apply any verdict downgrade
- Continue the investigation based on all other signals
Output for Front Comment
Populate the Slack Community field as follows:
member_active:✅ Active member — last_engaged=<last_engaged_at>, posts=<engagement_count>member_inactive:⚪ Inactive member — no posts in last 90 daysnot_member:❌ Not a member of the Warp Community Slackdeactivated_member:❌ Was a member but account is deactivatedrestricted_member:⚠️ Restricted/guest accountinconclusive/script_error:⚠️ Slack check inconclusive: <first error>
Dry-run example
SLACK_COMMUNITY_BOT_TOKEN=xoxb-... \
python3 /workspace/fraud-bot/scripts/check_slack_community_activity.py \
--email user@example.com
Auth (for setup reference only — handled by the script)
Token: SLACK_COMMUNITY_BOT_TOKEN (xoxb-… bot token, "Warp Insights" app)
Required scopes: users:read, users:read.email, channels:read, channels:history, groups:read, groups:history
No channel list config needed. The script checks all public and private channels the bot has been invited to. Add/remove channels by inviting or removing the bot via the channel's Integrations settings in Slack.