PHPackages                             dgunay/good-bans - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. dgunay/good-bans

ActivePackage[Utility &amp; Helpers](/categories/utility)

dgunay/good-bans
================

A statistical League of Legends ban ranker.

v1.0.1(7y ago)024MITHTMLPHP ^7.0

Since May 20Pushed 7y ago1 watchersCompare

[ Source](https://github.com/dgunay/good-bans)[ Packagist](https://packagist.org/packages/dgunay/good-bans)[ RSS](/packages/dgunay-good-bans/feed)WikiDiscussions master Synced today

READMEChangelogDependencies (4)Versions (8)Used By (0)

GoodBans
========

[](#goodbans)

Basically a reimplementation of . That site has been out of maintenance for a super long time and I loved using it, so I got fed up and remade it.

GoodBans (exactly like BestBans) decides what champions are most likely to pose a threat to you if not on your team by calculating which champions are the most commonly-picked and highest winrate. The reasoning is that even though some champions with dedicated mains can pull very high winrates, you are far more likely to meet a popular champion with a good winrate. Since you can't know who is on the enemy team, the most statistically beneficial strategy is to ban out the most common and effective solo queue threats.

This logic completely ignores team composition and purely favors a law of large numbers approach, so use it if you are simply not sure what to ban. Oh, and don't ban away champions your teammates want to pick. That's a dick move and you'll probably hurt your chances of winning.

Requirements
------------

[](#requirements)

- PHP 7.1+

Installation
------------

[](#installation)

1. Create a database. Can be whatever vendor you want, but I used SQLite3.
2. To refresh the database, use `refresh_db.php` as an example:

```
require __DIR__ . '/vendor/autoload.php';
require __DIR__ . '/../config.php';

use GoodBans\OpGG;
use GoodBans\RiotChampions;
use GoodBans\ChampionsDatabase;

$db = new ChampionsDatabase(
	new \PDO('sqlite:/path/to/your_db.db'), // use whatever PDO you like
	new OpGG(),
	new RiotChampions()
);

$db->refresh(); // prepares the tables and fetches data from the interwebs!
```

3. Put something like this in your HTML

```
	use GoodBans\ChampionsDatabase;
	use GoodBans\TopBans;
	use GoodBans\View;
	$bans = $db->topBans();
	$view = new View($bans);
	echo $view->render();
```

You can also just use the TopBans model to make your own view.

Development
-----------

[](#development)

Master branch is to remain deployable at all times. Development is merged into release candidate branches (example: `rc-1.0`). Patches continue from release candidate branches and are merged back into master with an appropriate tag.

### Running Tests

[](#running-tests)

The `run_tests.php` script should handle it, but otherwise you can just do `php ./vendor/bin/phpunit ./test`. Tests require PDO SQLite3.

### Contributing

[](#contributing)

GoodBans is intended to provide the same ban efficacy analysis methodology with any set of data (though obviously the results depend on what the data looks like).

If you know any good LoL stat aggregators with a friendly API or (ethically) scrapable interface, one of the most awesome things you can do is write a subclass of `ChampionsDataSource` for that site. Just make sure that the stats are separated by elo, and they at least have per-champion win/ban/pickrates.

###  Health Score

27

—

LowBetter than 49% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity6

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity63

Established project with proven stability

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~81 days

Total

3

Last Release

2752d ago

Major Versions

v0.9.0 → v1.0.02018-10-28

### Community

Maintainers

![](https://www.gravatar.com/avatar/172650d0cf47345dfd2fd05f0271fe263b63cc744eb869f0a31390fe4e272292?d=identicon)[dgunay](/maintainers/dgunay)

---

Top Contributors

[![dgunay](https://avatars.githubusercontent.com/u/16074091?v=4)](https://github.com/dgunay "dgunay (56 commits)")

---

Tags

league-of-legendsphpphp7

###  Code Quality

TestsPHPUnit

Static AnalysisPsalm

Type Coverage Yes

### Embed Badge

![Health badge](/badges/dgunay-good-bans/health.svg)

```
[![Health](https://phpackages.com/badges/dgunay-good-bans/health.svg)](https://phpackages.com/packages/dgunay-good-bans)
```

###  Alternatives

[grumpydictator/firefly-iii

Firefly III: a personal finances manager.

22.8k69.3k](/packages/grumpydictator-firefly-iii)[civicrm/civicrm-core

Open source constituent relationship management for non-profits, NGOs and advocacy organizations.

728272.9k20](/packages/civicrm-civicrm-core)[aedart/athenaeum

Athenaeum is a mono repository; a collection of various PHP packages

255.2k](/packages/aedart-athenaeum)[ralphjsmit/laravel-helpers

A package containing handy helpers for your Laravel-application.

13704.6k2](/packages/ralphjsmit-laravel-helpers)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
