--- title: "The Jinx Slack app" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{The Jinx Slack app} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r} #| include: false knitr::opts_chunk$set( collapse = TRUE, comment = "#>", eval = FALSE ) ``` ```{=html} Jinx the cat wearing a telephone headset, ready to help ``` Jinx is the RLadies+ Slack assistant. It lets organisers run `/jinx` commands without leaving Slack, answers questions about the [RLadies+ Guide](https://guide.rladies.org/) when you `@`-mention it, and routes new community Slack invite requests to organisers for approval. ## Install the app ```{=html}

Add to Slack

``` Clicking the button opens the standard Slack OAuth flow. You pick a workspace, review the permissions, and approve. Approving stashes Jinx's bot token for that workspace in Cloudflare KV; uninstalling it later (in *Settings & administration → Manage apps*) drops the token automatically. Jinx only installs into the two RLadies+ workspaces — organisers and community. If you try to install it elsewhere, the OAuth callback refuses and nothing is written. The app configuration is open source in [rladies/jinx](https://github.com/rladies/jinx) if you want to fork your own copy. ## What Jinx does ### Slash commands Type `/jinx help` in any channel to see the full command list. Common ones: - `/jinx invite @user to ` — invite someone to the RLadies+ GitHub org and one of its teams. - `/jinx report weekly` — generate an activity report for the org. - `/jinx slack-invite ` — post a manual-invite checklist for an organiser to action (see *Approving Slack invites* below). - `/jinx blog-add ` — auto-create a blog entry PR on the website from a URL. The canonical reference, kept in sync with the package, is at [inst/commands/help.md](https://github.com/rladies/jinx/blob/main/inst/commands/help.md). ### Ask Jinx anything about RLadies+ Mention `@Jinx` in any channel it's a member of and ask a question. Jinx searches the [RLadies+ Guide](https://guide.rladies.org/) and the [RLadies+ website](https://rladies.org/) for relevant content, then replies in-thread with sourced links. ``` @Jinx how do I start a new chapter? ``` React with 👍 / 👎 / ❤️ on Jinx's answers so we can track which replies are useful. ### Approving Slack invites Anyone can request to join the RLadies+ community Slack via the public Airtable form. When a request comes in, Jinx posts a Block Kit card to the organisers' invite-approval channel with Approve / Deny buttons. - **Deny** marks the Airtable record `denied` and replaces the card with a denial note. Done. - **Approve** replaces the card with a checklist (workspace menu → *Invite people to RLadies+* → paste email) and a *Mark invite sent* button. The organiser still has to send the actual Slack invite — Slack does not give community apps an API for that. Once it's sent, clicking *Mark invite sent* flips the Airtable record's `invited` flag and replaces the card with a final receipt. The Airtable `invited` field means *the invite was actually sent*, not just approved. Don't flip it before the *Mark invite sent* click. ## Permissions and data Jinx requests the following Slack scopes when you install it: | Scope | Why | | ------------------- | ------------------------------------------------- | | `commands` | Receive `/jinx ...` slash commands | | `app_mentions:read` | Receive `@Jinx ...` mentions | | `chat:write` | Post replies and approval cards | | `chat:write.public` | Post to public channels Jinx hasn't been added to | Jinx does not read messages it isn't directly mentioned in. It keeps no database of users or messages. Per-workspace bot tokens live in Cloudflare KV; everything else is ephemeral. See [PRIVACY.md](https://github.com/rladies/jinx/blob/main/PRIVACY.md) for the full data-handling policy. ## Troubleshooting - **`/jinx ...` returns "Jinx only runs in the RLadies+ organisers and community workspaces".** The workspace you're typing from isn't on the allowlist. Check the team id with `/team-id` or ask your workspace admin, then contact the RLadies+ Global Team if you think it should be added. - **OAuth install completes but `/jinx help` still says the same thing.** The new team id needs to be added to the worker's `SLACK_ORGANIZER_TEAM_ID` or `SLACK_COMMUNITY_TEAM_ID` var and the worker redeployed. Open an issue at . - **Jinx doesn't respond to `@`-mentions in a private channel.** Invite Jinx to the channel first (`/invite @Jinx`). ## Source and feedback - Code: - Issues and feature requests: - Architecture notes (Worker + R package): see [How Jinx is built](architecture.html).