Giter Club home page Giter Club logo

private-bot's Introduction

プラベでガチバトルbot

名前は適当です。 プライベートマッチの戦績を元に、ガチマッチやリーグマッチのようにガチパワーを計算して、Discordに投稿するbotです。 (original repository: https://github.com/kinmemodoki/private-bot)

使い方

最近のNode.jsが動くPCでならきっと動く

依存パッケージのインストール

$ npm install

config.jsonを適切に編集する

  1. https://discordapp.com/developers/applications/ でDiscord上のbotアカウントを作成し、サーバーにbotアカウントを招待する このとき、 CLIENT IDTOKENをコピーして, 以下の箇所にペーストしてください
{
    "discord_token": TOKEN,
    "discord_bot_id": CLIENT ID,
  1. iksm_sessionを何かしらの手段で手に入れて、config.jsonに追記してください。 iksm_sessionに関する質問はいかなる内容であっても答えられません。

とりあえず動かす

$ node judge.js

コンソール側で Discordへ接続しました。 と表示されれば、Discordへのログインには成功している。 その後、Discord側で @botアカウントのID startとメッセージを送ってbotから返答が返ってきたら正常に動いているはず。

ちゃんと動かす

あらかじめ、

$ node judge.js

しておく。

プライベートマッチを開始し、1戦目が終了したら、Discordで

@botアカウントのID start

とメッセージを送り、botによる戦績の監視を開始する。このタイミングで、1戦目の情報を収集して初戦のレート算出が行われるはず。

その後は自動で戦績の収集とレートの算出、Discordへのメッセージの投稿が行われる。

終了するときは、

@botアカウントのID end

とメッセージを送ってから、スクリプトの実行そのものを中断すればよい。

その他いくつかコマンドが存在するが,

@botアカウントのID

とメンションだけ送るとヘルプをDiscordに投稿してくれる.

仕様など

レートの計算について

Glickoレーティング の亜種であるGlicko2レーティングを計算に用いてレートを計算します。 噂によれば、本家でも使用されているレーティングアルゴリズムらしいので、使用しています。

パラメータとか全然調整していないので、本家とは数値の変動が全然違うかもしれません。(多分ちがう)

データの保存と復元について

1バトル集計するごとに,記録している個人のパワーなどをsaveディレクトリ中にautosave.jsonという名前で保存する。 また,

@botアカウントのID end

で集計を終了したときに,同じくsaveディレクトリ中にlog-(その時の日時).jsonという名前で保存する。

データを復元する際は、

$ node judge.js save/xxx.json

と引数に復元したいデータのパスを指定すればよい。

config

  • calculating_count (default: 7) 本家にも存在する【計測中】扱いにする回数。
  • calculating_visible (default: false) 計測中の不安定なガチパワーをbotのメッセージに表示するかどうか
  • glicko_setting: Glickoレーティングの設定値。各パラメータの詳しくて正しい意味は調べてください。
    • tau: 0.3~1.2の値で良さげなものを選ぶ (default: 0.5)
    • rating: 初期値 (default: 2100)
    • rd: 初期レーティング偏差 (default: 200)
    • vol: 初期レーティング変動率 (default: 0.06)

不具合的なもの

  • iksm_sessionの持ち主が観戦した場合、戦績がそもそも残らないので、その試合のレート算出ができません。(仕様)

private-bot's People

Contributors

mak4026 avatar kinmemodoki avatar

Stargazers

Rakurai avatar H.kawanabe avatar  avatar Akiyama.k avatar L-tan avatar Shota avatar  avatar

Watchers

James Cloos avatar  avatar

private-bot's Issues

総パワー差が小さくなるようにチーム分けする

@private-bot matchingとかで、適切なチーム分けを返す

> @private-bot matching
bot > 
アルファ: プレイヤー1, プレイヤー3, プレイヤー4, プレイヤー8
ブラボー: プレイヤー2, プレイヤー5, プレイヤー6, プレイヤー7

全通り試して一番パワー差が小さい組を返せば良い?

レーティング計算時に同じチーム同士のメンバー間で疑似drawが発生している

該当コード

var race = this.ranking.makeRace([
winner_glk,
loser_glk,
]);
this.ranking.updateRatings(race);

問題点

makeRace() はraceの同着ありのpositionのリストを受け付けるAPIなので makeRace([<winners_list>, <losers_list>]) とすると winners, losers メンバー間で引き分け処理が行われているらしい。

ドキュメント: https://github.com/mmai/glicko2js#support-for-multiple-competitors-matches-experimental
適当に開いたissueに書いてあった開発者コメント: mmai/glicko2js#16 (comment)

レーティング計算にどう影響してるかはよくわからない。

解決策

上記の適当に開いたissueに書いてあった開発者コメントにあるようにdrawが発生しないように各winner <=> looser 間のマッチを作るか、average winner/looser みたいな仮想敵をチームで作ってそいつとそれぞれ戦ったことにすると良さそう。

本家スプラトーンのレーティングは後者に近いような気がするがよくわからない

なおす?

上記の適当に開いたissueに書いてあった開発者コメントをそのままパク...参考にすればすぐ直せそうではあるけど、どちらかといえば単に問題点を見つけたので共有したかっただけです。超気が向いたらプルリクするかもしれないししないかもしれない

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.