Overview
Kyber’s reporting system allows players to report inappropriate behavior, cheating, or rule violations. Reports can include text descriptions, evidence links, and uploaded media. Moderators review reports and can approve punishments or reject false reports.Players are limited to 6 open reports at a time, with a maximum of 2 reports per target player.
Player Methods
CreateReport
Submit a new report against a player. Endpoint:ReportServiceServer.CreateReport
Authentication: Required
Request:
Report details object
ID of the player being reported
Reason for the report (CHEATING, HARASSMENT, TOXICITY, EXPLOITING, etc.)
Detailed description of the incident
URLs to external evidence (videos, screenshots)
S3 evidence file IDs from GenerateEvidenceLinks
Empty response on success
INVALID_ARGUMENT- Report data is invalid or evidence links are malformedNOT_FOUND- Reported player ID does not existRESOURCE_EXHAUSTED- Maximum open reports reached (6 total or 2 for this player)INTERNAL- Database or queue error
- User can have maximum 6 open reports
- User can have maximum 2 open reports for the same target player
- Evidence links must be valid URLs
- Reported player must exist in the system
source/API/internal/rpc/report.go:416-491
GetUserReports
Retrieve all reports filed by or against the authenticated user. Endpoint:ReportServiceServer.GetUserReports
Authentication: Required
Request:
Empty request object
Array of reports involving the user (as reporter or target)
GenerateEvidenceLinks
Generate pre-signed upload URLs for evidence files (images/videos). Endpoint:ReportServiceServer.GenerateEvidenceLinks
Authentication: Required
Request:
Array of evidence files with extension and content type
File extension (jpg, jpeg, png, webp, mp4)
MIME type (image/jpeg, video/mp4, etc.)
Pre-signed upload URLs and file IDs
Unique file ID to include in CreateReport
Pre-signed S3 URL for direct upload
- Images: jpg, jpeg, png, webp
- Videos: mp4
- Call
GenerateEvidenceLinkswith file metadata - Upload files directly to the returned pre-signed URLs
- Include the file IDs in
CreateReport.evidence_ids
Moderator Methods
ListReports
Retrieve all reports for moderator review. Endpoint:ReportServiceServer.ListReports
Authorization: Staff only
Response:
All reports with full details, evidence, and status
SearchUser
Search for a user by username or email for reporting/moderation. Endpoint:ReportServiceServer.SearchUser
Authorization: Staff only
Request:
Search query (username or email)
Matching users with ID, username, and basic info
GetUserInfo
Retrieve detailed information about a user including moderation history. Endpoint:ReportServiceServer.GetUserInfo
Authorization: Staff only
Request:
User ID to retrieve information for
User details including reports, punishments, and account status
ApproveReports
Approve multiple reports and apply punishments to the reported player. Endpoint:ReportServiceServer.ApproveReports
Authorization: Staff only
Request:
Array of report IDs to approve
Moderator note explaining the decision
Punishment to apply (ban, warning, etc.)
- Marks reports as approved
- Creates punishment record
- Adds moderator note to all reports
- Notifies reporters of outcome
- Applies punishment to target player
RejectReport
Reject a report as invalid or unsubstantiated. Endpoint:ReportServiceServer.RejectReport
Authorization: Staff only
Request:
Report ID to reject
Moderator note explaining the rejection
- Marks report as rejected
- Adds moderator note
- Notifies reporter
UpdateStatus
Update the status of a report (in review, pending, etc.). Endpoint:ReportServiceServer.UpdateStatus
Authorization: Staff only
Request:
Report ID to update
New status (NEW, IN_REVIEW, PENDING, APPROVED, REJECTED)
Optional moderator note
Report Statuses
Reports progress through the following statuses:NEW- Just submitted, awaiting moderator reviewIN_REVIEW- Moderator is actively reviewingPENDING- Awaiting additional information or actionAPPROVED- Report validated and punishment appliedREJECTED- Report dismissed as invalid
Report Reasons
Players can select from predefined report reasons:CHEATING- Use of hacks, aimbots, or unfair advantagesHARASSMENT- Targeted harassment or bullyingTOXICITY- Toxic behavior, hate speech, or slursEXPLOITING- Exploiting game bugs or glitchesGRIEFING- Intentional disruption of gameplayOTHER- Other rule violations
Evidence Storage
Evidence files are stored in S3/R2 with the following workflow:- Generate Upload URLs:
GenerateEvidenceLinkscreates pre-signed S3 URLs - Direct Upload: Client uploads files directly to S3 (bypasses API server)
- Reference in Report: File IDs are included in the report
- Moderator Access: Moderators can view evidence when reviewing reports
- Bucket: Configured via
R2_BUCKET_NAMEenvironment variable - Access: Pre-signed URLs valid for limited time
- Allowed formats: jpg, jpeg, png, webp, mp4
- Files are associated with reports via ID references
Integration
Player Report Flow
- Open Report Dialog: Player selects “Report” on another player
- Fill Details: Select reason and provide description
- Upload Evidence (Optional):
- Call
GenerateEvidenceLinksfor each file - Upload files to returned URLs
- Call
- Submit Report: Call
CreateReportwith evidence IDs - Track Status: Use
GetUserReportsto monitor report status
Moderator Review Flow
- List Pending Reports: Call
ListReportsto get all reports - Review Evidence: Access evidence links and uploaded files
- Investigate: Use
SearchUserandGetUserInfofor context - Take Action:
- Approve: Call
ApproveReportswith punishment - Reject: Call
RejectReportwith explanation
- Approve: Call
- Add Notes: Use
UpdateStatusto add progress notes
Related APIs
Server Management
Apply bans and kicks from approved reports
Authentication
User account management
Implementation Notes
- Report IDs are generated using
util.GenerateShortToken()for easy reference - Reports are queued in RabbitMQ for asynchronous processing
- Evidence upload uses pre-signed URLs to avoid API server bottlenecks
- Moderator actions are logged with timestamps and user IDs
- Reports create WebSocket notifications for real-time updates
- S3 storage configured via environment variables (
R2_HOST,R2_ACCESS_KEY,R2_SECRET_KEY,R2_BUCKET_NAME)