Discord verification for CMU
https://verify.scottylabs.org
- Rust 98.6%
- Nix 1.4%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
|
|
||
| .forgejo/workflows | ||
| src | ||
| .editorconfig | ||
| .env.example | ||
| .gitignore | ||
| Cargo.lock | ||
| Cargo.toml | ||
| devenv.lock | ||
| devenv.nix | ||
| devenv.yaml | ||
| flake.lock | ||
| flake.nix | ||
| LICENSE-APACHE-2.0 | ||
| LICENSE-MIT | ||
| osv-scanner.toml | ||
| README.md | ||
| secretspec.toml | ||
discord-verify
An Andrew ID Verification bot!
Development
# Set up environment variables
cp .env.example .env
# Edit .env with your personal Discord bot credentials
Create a new Discord bot or use one of your current ones, and put its token in .env. Everything else resolves from Vault when you enter the dev shell.
Data Model
# Guild Configuration
guild:{guild_id}:log_channel -> string (channel_id)
guild:{guild_id}:role:verified -> string (role_id)
guild:{guild_id}:role:unverified -> string (role_id)
guild:{guild_id}:role:level:Undergrad -> string (role_id)
guild:{guild_id}:role:level:Graduate -> string (role_id)
guild:{guild_id}:role:class:First-Year -> string (role_id)
guild:{guild_id}:role:class:Sophomore -> string (role_id)
guild:{guild_id}:role:class:Junior -> string (role_id)
guild:{guild_id}:role:class:Senior -> string (role_id)
guild:{guild_id}:role:class:Fifth-Year Senior -> string (role_id)
guild:{guild_id}:role:class:Masters -> string (role_id)
guild:{guild_id}:role:class:Doctoral -> string (role_id)
# Role assignment mode
guild:{guild_id}:role_mode -> string ("none" | "levels" | "classes" | "custom")
guild:{guild_id}:custom_levels -> set (enabled level names)
guild:{guild_id}:custom_classes -> set (enabled class names)
# User Verification Mappings
discord:{discord_id}:keycloak -> string (keycloak_id)
discord:{discord_id}:verified_at -> string (unix_timestamp)
keycloak:{keycloak_id}:discord -> string (discord_id)
# Temporary Verification State (TTL: 10 minutes)
verify:{state_token} -> json (PendingVerification)