*p5.brush
p5.js 환경에서 자연스러운 텍스처를 탐구하는 아티스트·디자이너·취미자를 위한 다목적 라이브러리
Discord에서 원클릭으로 Roblox 계정 인증, 프로필 코드 없이 그룹·게임패스·배지·연령·실시간 통계로 역할 자동 부여
Verify Roblox accounts in Discord with one-click sign-in, no profile codes. Auto-assign roles by group rank, gamepasses, badges, account age and live game stats.
플러그인Rust · LuaGitHub @FaizoKen온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기A RoleLogic plugin that grants Discord roles based on a member's Roblox account or in-game progression.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗A RoleLogic plugin that grants Discord roles based on a member's Roblox account or in-game progression.
Members link their Roblox account once. The plugin then assigns Discord roles automatically based on a single configurable condition per role link. Conditions span three categories:
/games page. Every reported stat is keyed by a free-form name (e.g. level, timePlayed, guild_score, isVIP) and exposed as Custom Numeric / Boolean / String role conditions.Per-game stats can reach the plugin in two ways:
POST /ingest/{universe_id}/stats with an X-Ingest-Secret header. The shipped Studio plugin under studio-plugin/ does this in 60s batches./games admin page; no in-game code change required.Bulk syncs use RoleLogic's chunked-upload API and scale to the documented 30M-per-role ceiling.
All endpoints are nested under /roblox-player-role.
| Method | Path | Auth | Purpose |
|---|---|---|---|
POST | /register | Token {api_token} | RoleLogic registers a guild/role pair |
GET | /config | Token {api_token} | Returns the form schema (with current values) |
POST | /config | Token {api_token} | Saves a new condition; triggers a debounced bulk re-sync |
DELETE | /config | Token {api_token} | Deletes the role link |
GET | /verify | none | Linking page (Discord → Roblox OAuth) |
GET | /verify/login | none | Redirects to the Auth Gateway for Discord sign-in |
GET | /verify/roblox | rl_session cookie | Begins the Roblox OAuth (PKCE) flow |
GET | /verify/callback | rl_session cookie | Roblox OAuth callback |
POST | /verify/unlink | rl_session cookie | Drops the Roblox link, clears all roles |
GET | /players/{guild_id} | rl_session cookie | Verified-player list for a guild |
GET | /games | rl_session cookie | Game-creator admin dashboard |
POST | /games | rl_session cookie | Register a Roblox universe (returns ingest_secret once) |
POST | /games/{universe_id}/regenerate-secret | rl_session cookie | Rotate the ingest secret |
{BASE_URL}/verify/callback. Request scopes openid profile. (premium, verification are optional but populate the matching condition fields.).env.example → .env, fill it in. Generate TOKEN_ENCRYPTION_KEY with openssl rand -hex 32.compose.yml).docker compose up -d --build (or cargo run --release).The Auth Gateway service must be reachable at AUTH_GATEWAY_URL and share the same SESSION_SECRET and INTERNAL_API_KEY as configured here.
Once a server admin has set up at least one role link with a game condition pointing at your universe, register the universe at {BASE_URL}/games. From there you can:
studio-plugin/dist/Roblox-Player-Role.rbxm after rojo build). It batches every 60s and POSTs stats from leaderstats to the webhook. Paste your webhook URL + secret into the Configuration instance the plugin creates.ServerScriptService script.Stat payload shape (push):
{
"players": [
{
"user_id": "12345",
"stats": {
"level": 7,
"wins": 3,
"losses": 1,
"currency": 5000,
"timePlayed": 120,
"guild_score": 42,
"isVIP": true
}
}
]
}
stats is a flat key→value map. Keys are arbitrary; the server stores the whole object as the player's custom blob and exposes each key in the role-condition stat dropdown. Partial updates shallow-merge: keys you don't send are left untouched.
add_user / remove_user path with for_each_concurrent(10).SELECT discord_id WHERE … against denormalized columns + JSONB GIN indices, then push the qualifying list via RoleLogicClient::replace_users_scalable. That client transparently switches to the chunked start_upload → append_chunk (100k per chunk) → commit_upload flow above the single-PUT limit, atomic on commit. Pre-flights against the documented 30M-per-role ceiling.PlayerSyncEvent 4096, ConfigSyncEvent 256). Producers use try_send to apply backpressure rather than block.cargo test runs unit tests for condition_eval (every supported field) and schema::parse_config.
src/
├── main.rs — Router, AppState, channel + worker wiring
├── config.rs — Env loading
├── db.rs — PgPool, migrations
├── error.rs — AppError + IntoResponse
├── schema.rs — /config form schema + parse_config
├── models/ — Condition, ConditionField, PlayerStats
├── routes/ — RoleLogic contract, verification, players, games, ingest, health
├── services/ — roblox_api, roblox_oauth, roblox_open_cloud, rolelogic, condition_eval, sync, auth_gateway, session, crypto
└── tasks/ — player_sync_worker, config_sync_worker, refresh_worker, opencloud_poll_worker
migrations/ — 001 base / 002 user_cache / 003 game_universes / 004 player_game_stats
studio-plugin/ — Rojo source for the shipped .rbxm
See .claude/BLUEPRINT.md for cross-plugin conventions.
POST/games/{universe_id}/open-cloud |
rl_session cookie |
| Save / disable Open Cloud DataStore polling |
POST | /games/{universe_id}/delete | rl_session cookie | Delete the universe + cached stats |
POST | /ingest/{universe_id}/stats | X-Ingest-Secret header | Push per-player stats (max 100 players, 60 req/min/universe) |
GET | /health | none | Liveness + dependency check |