| name | slack-community-check |
| description | Check if a Warp user is an active member of the Warp Community Slack workspace. Use when investigating a ban appeal to determine if the user has recent posting activity (last 90 days) in the community — a strong signal of legitimate developer engagement. All Slack API logic runs in a deterministic script; the agent reads only the JSON result and never calls Slack APIs directly, reads message text, or joins channels. Part of the fraud-bot skill suite.
|
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 days
not_member: ❌ Not a member of the Warp Community Slack
deactivated_member: ❌ Was a member but account is deactivated
restricted_member: ⚠️ Restricted/guest account
inconclusive / 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.