Repository navigation
feat(party): let players ask to join and open parties to everyone - #29
Merged
Merged
Conversation
A player outside a party can ask the party of an online player to let them in. A private party keeps the request for its leader, who accepts or rejects it; a request expires after its TTL, and a denial or an expiry starts a cooldown. A leader can open the party to everyone. While it is open a player joins directly, up to the public size limit. A kicked player cannot join or request the party until the leader invites them again. Bans, open requests and cooldowns end with the party. A change of leader closes an open party, and a closed party keeps its members. party.leader-changed carries wasPublic when the change closed the party.
The proxy gains /party public on|off, request, join, approve and reject. Opening a party is refused before any service call unless the player holds quelea.party.public; closing needs no permission. A request to a public party reads as a join, a request to a private one as sent, with its expiry. The leader gets a clickable prompt for a join request. The requester is told the answer once. A leadership change that closed a public party tells the new leader, with the reopen hint only when they hold the permission. Messages for the six new problem codes are in English and German. A cooldown names its wait only when the service sent Retry-After. None of the six codes is reported to Sentry.
Contributor
Test results 204 files 204 suites 1m 43s ⏱️ Results for commit 6586387. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Proposed changes
Until now a player could only get into a party through an invite from its leader. A player who wanted to join a friend had to ask in chat and wait for the friend to find the right command. A streamer who wanted viewers in had to invite each one by hand, which stopped working past a handful of people.
Now a player can ask to join, and a leader can open the party so that anyone who knows the leader's name can walk in. The leader stays in control in both cases.
/party request <player>sends the leader a prompt with a clickable[Accept]and[Deny]. The request lasts 60 seconds. A player who is denied, or whose request runs out, waits 60 seconds before asking the same party again. The player is never left guessing: the answer says how long the request stays open.quelea.party.publicopens the party with/party public on. Any leader can close it with/party public off, so a leader who lost the permission can still close. While the party is open,/party join <player>puts the player straight in, up to 20 members. A request to an open party also joins at once, and the player sees "joined", not "request sent".Nobody can list or search for open parties. Access is by name only.
Rollout. A request reaches the leader only through the proxy the leader is on. Every proxy needs the new plugin before players use
/party request. A proxy still on the old plugin drops the prompt silently, and the request then expires.Types of changes
Checklist
Further comments
Two commits, both
feat(party): the backend (the service rules, the Dragonfly state, the routes and the problem codes) and the proxy plugin (the commands, the prompts and the messages). The OpenSpec changeadd-open-party-joiningholds the design. Decisions worth a look: