YappersHQ.CallAdmin.Shared 1.0.1

dotnet add package YappersHQ.CallAdmin.Shared --version 1.0.1
                    
NuGet\Install-Package YappersHQ.CallAdmin.Shared -Version 1.0.1
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="YappersHQ.CallAdmin.Shared" Version="1.0.1" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="YappersHQ.CallAdmin.Shared" Version="1.0.1" />
                    
Directory.Packages.props
<PackageReference Include="YappersHQ.CallAdmin.Shared" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add YappersHQ.CallAdmin.Shared --version 1.0.1
                    
#r "nuget: YappersHQ.CallAdmin.Shared, 1.0.1"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package YappersHQ.CallAdmin.Shared@1.0.1
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=YappersHQ.CallAdmin.Shared&version=1.0.1
                    
Install as a Cake Addin
#tool nuget:?package=YappersHQ.CallAdmin.Shared&version=1.0.1
                    
Install as a Cake Tool

<div align="center"> <h1>📣 <strong>CallAdmin</strong></h1> <p>In-game player report system for CS2 ModSharp servers — players <code>!report</code> cheaters, admins claim and resolve them.</p> </div>

<p align="center"> <a href="https://github.com/Kxnrl/modsharp-public"><img src="https://img.shields.io/badge/framework-ModSharp-5865F2?logo=github" alt="ModSharp"></a> <img src="https://img.shields.io/badge/game-CS2-orange" alt="CS2"> <img src="https://img.shields.io/gitlab/license/cs2-server-plugins/cs2-calladmin?gitlab_url=https%3A%2F%2Fgitlab.com" alt="License"> <img src="https://img.shields.io/gitlab/stars/cs2-server-plugins/cs2-calladmin?gitlab_url=https%3A%2F%2Fgitlab.com" alt="Stars"> </p>


CallAdmin lets players report rule-breakers from chat and gives admins a claim/handle/dismiss workflow, with persistence (LiteDB / MySQL / PostgreSQL) and an optional Discord webhook notifier that posts an embed and edits it in place as the report progresses. It is a from-scratch ModSharp rewrite inspired by Impact123/CallAdmin (SourceMod) and 1Mack/CS2-CallAdmin (CounterStrikeSharp).

The plugin ships as several projects so you can run only what you need:

Project Role
CallAdmin.Core Main plugin — chat commands, report lifecycle, business logic
CallAdmin.Shared Public API (ICallAdminShared) + report models, consumed by other plugins
CallAdmin.Database Persistence backend — LiteDB / MySQL / PostgreSQL, switchable in config
CallAdmin.Database.Shared Database abstraction contract
CallAdmin.Discord Optional Discord webhook notifier (subscribes to CallAdmin events)

🚀 Install

Copy the build output into your ModSharp install (<sharp> = your sharp directory):

From To
.build/modules/CallAdmin.Core/ <sharp>/modules/CallAdmin.Core/
.build/modules/CallAdmin.Database/ <sharp>/modules/CallAdmin.Database/
.build/modules/CallAdmin.Discord/ <sharp>/modules/CallAdmin.Discord/ (optional)
.build/shared/CallAdmin.Shared/ <sharp>/shared/CallAdmin.Shared/
.build/shared/CallAdmin.Database.Shared/ <sharp>/shared/CallAdmin.Database.Shared/
.build/locales/calladmin.json <sharp>/locales/calladmin.json
.assets/configs.example/* <sharp>/configs/ (rename per file, see below)

CallAdmin.Core writes a default configs/calladmin.json on first run if none exists. Restart the server (or change map) to load. CallAdmin uses ModSharp's CommandCenter, AdminManager and LocalizerManager, which ship with the framework. CallAdmin.Discord is optional — install it only if you want Discord notifications.

⌨️ Commands

All commands are chat-triggered (also usable from console).

Command Aliases Description Permission
!report <target> <reason> !calladmin Submit a report. Target via ModSharp targeting (name, #name, @me, @t, @ct, SteamID64). none by default
!report_cancel — Cancel your most recent pending report (within the cancel window). reporter only
!calls !reports List pending reports. @calladmin/handle
!claim <id> — Claim a pending report. @calladmin/handle
!handled <id> — Mark a report handled (terminal). @calladmin/handle
!dismiss <id> — Dismiss a report as a false alarm (terminal). @calladmin/handle

Admin permissions are registered via MountAdminManifest under the CallAdmin table:

Permission Grants
@calladmin/report Submit reports — only enforced when requireReportPermission is true
@calladmin/handle View pending, claim, handle, dismiss
@calladmin/report_admin Report players who otherwise have admin-target immunity

⚙️ Configuration

configs/calladmin.json

Auto-generated on first run. Report reasons, cooldowns and anti-abuse gates:

Setting Default Meaning
reasons hack, wallhack, aimbot, toxic, spam, griefing, other Report reason list (key + localeKey label pairs)
autoCloseMinutes 60 Minutes a pending report may sit before auto-closing as cancelled. 0 disables
cooldownSeconds 300 Per-reporter cooldown between reports
cancelWindowSeconds 300 How long after submitting a reporter may !report_cancel
duplicateWindowSeconds 600 Window in which a repeat report of the same target is treated as a duplicate
notifyAdminsInChat true Announce new reports to online admins in chat
allowReportAdmins false Allow reporting players who hold admin
allowReportSpectators false Allow reporting spectators
requireReportPermission false When true, only players with @calladmin/report may report

configs/calladmin.database.jsonc

Selects the persistence backend. Type is litedb (zero-config single file at sharp/data/calladmin.db), mysql, or postgresql. For MySQL/PostgreSQL, fill Host / Port / Database / User / Password.

configs/calladmin.discord.json (optional)

Used by CallAdmin.Discord. Set webhookUrl to enable; leave it empty to disable posting. Other keys cover the embed title/footer, an optional role mention, and the connect/lookup links shown in the embed.

🔧 How it works

A player runs !report <target> <reason>; Core resolves the target via ModSharp targeting, applies the cooldown / duplicate / immunity checks, then persists a Report through the database backend and fires the lifecycle events. Admins with @calladmin/handle see pending reports (!calls) and move each through claim → handled or dismiss. After persistence each transition raises a Report event on ICallAdminShared; CallAdmin.Discord subscribes to those events to POST a webhook embed on submit and PATCH it in place as the report is claimed, handled, dismissed or cancelled. If AdminPanel is installed, Core also surfaces the list/claim/handle/dismiss actions inside the in-game admin menu (resolved with a null-guard, so it stays standalone-safe).

🧩 Public API

Other plugins consume ICallAdminShared (resolve in OnAllSharpModulesLoaded) to subscribe to the report lifecycle or drive reports programmatically:

var callAdmin = sharpModuleManager
    .GetOptionalSharpModuleInterface<ICallAdminShared>(ICallAdminShared.Identity)?.Instance;

callAdmin.OnReportSubmitted += report => { /* react */ };
// also: OnReportClaimed, OnReportHandled, OnReportDismissed, OnReportCancelled

The interface also exposes SubmitReportAsync / ClaimReportAsync / MarkHandledAsync / DismissReportAsync / CancelReportAsync, lookups (GetReportAsync, GetPendingReportsAsync, GetReasons), RegisterTargetFilter (hide players from the target list), and SetExternalMessageIdAsync (store an external message id alongside a report). Handlers run synchronously on the publishing thread — offload network/DB work with _ = Task.Run(...).

📦 Build

dotnet build -c Release

Outputs:

  • Modules → .build/modules/CallAdmin.{Core,Database,Discord}/
  • Shared contracts → .build/shared/CallAdmin.{Shared,Database.Shared}/
  • Locales → .build/locales/calladmin.json
  • Example configs → .assets/configs.example/

🙏 Credits


<div align="center"> <p>Made with ❤️ by <a href="https://gitlab.com/cs2-server-plugins">yappershq</a></p> <p>⭐ Star this repo if you find it useful!</p> </div>

Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • net10.0

    • No dependencies.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.0.1 99 8/10/2026
1.0.0 117 8/1/2026