{"id":31562523,"url":"https://github.com/ishikota/pypokergui","last_synced_at":"2025-10-05T04:13:14.020Z","repository":{"id":53535948,"uuid":"81650350","full_name":"ishikota/PyPokerGUI","owner":"ishikota","description":"GUI application for PyPokerEngine","archived":false,"fork":false,"pushed_at":"2024-06-06T22:05:37.000Z","size":3151,"stargazers_count":125,"open_issues_count":13,"forks_count":90,"subscribers_count":9,"default_branch":"master","last_synced_at":"2025-08-31T08:19:21.815Z","etag":null,"topics":["gui","poker","python"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ishikota.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-02-11T12:04:17.000Z","updated_at":"2025-07-20T15:19:49.000Z","dependencies_parsed_at":"2022-09-17T22:10:55.711Z","dependency_job_id":null,"html_url":"https://github.com/ishikota/PyPokerGUI","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ishikota/PyPokerGUI","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ishikota%2FPyPokerGUI","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ishikota%2FPyPokerGUI/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ishikota%2FPyPokerGUI/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ishikota%2FPyPokerGUI/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ishikota","download_url":"https://codeload.github.com/ishikota/PyPokerGUI/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ishikota%2FPyPokerGUI/sbom","scorecard":{"id":495519,"data":{"date":"2025-08-11","repo":{"name":"github.com/ishikota/PyPokerGUI","commit":"fed119c7067763d6f664a96c21582da1ae858894"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":1.3,"checks":[{"name":"Code-Review","score":0,"reason":"Found 0/6 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Binary-Artifacts","score":7,"reason":"binaries present in source code","details":["Warn: binary detected: tests/__init__.pyc:1","Warn: binary detected: tests/base_unittest.pyc:1","Warn: binary detected: tests/pypokergui/__init__.pyc:1"],"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE.md:0","Info: FSF or OSI recognized license: MIT License: LICENSE.md:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Vulnerabilities","score":0,"reason":"10 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: PYSEC-2021-142 / GHSA-8q59-q68h-6hv4","Warn: Project is vulnerable to: PYSEC-2018-49 / GHSA-rprw-h62v-c2w7","Warn: Project is vulnerable to: GHSA-753j-mpmx-qq6g","Warn: Project is vulnerable to: GHSA-7cx3-6m66-7c5m","Warn: Project is vulnerable to: PYSEC-2020-213 / GHSA-8vpw-mgpf-mpvv","Warn: Project is vulnerable to: GHSA-8w49-h785-mj3c","Warn: Project is vulnerable to: PYSEC-2012-5 / GHSA-f7fv-v9rh-prvc","Warn: Project is vulnerable to: PYSEC-2023-75 / GHSA-hj3f-6gcp-jg8j","Warn: Project is vulnerable to: GHSA-qppv-j76h-2rpx","Warn: Project is vulnerable to: GHSA-w235-7p84-xx57"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 26 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-19T20:21:08.118Z","repository_id":53535948,"created_at":"2025-08-19T20:21:08.118Z","updated_at":"2025-08-19T20:21:08.118Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278406830,"owners_count":25981690,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-05T02:00:06.059Z","response_time":54,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["gui","poker","python"],"created_at":"2025-10-05T04:13:11.981Z","updated_at":"2025-10-05T04:13:14.016Z","avatar_url":"https://github.com/ishikota.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# PyPokerGUI\n\n[![Build Status](https://travis-ci.org/ishikota/PyPokerGUI.svg?branch=master)](https://travis-ci.org/ishikota/PyPokerGUI)\n[![PyPI](https://img.shields.io/pypi/v/PyPokerGUI.svg?maxAge=2592000)](https://badge.fury.io/py/PyPokerGUI)\n[![MIT License](http://img.shields.io/badge/license-MIT-blue.svg?style=flat)](https://github.com/ishikota/PyPokerGUI/blob/master/LICENSE.md)\n\nGUI application for [PyPokerEngine](https://github.com/ishikota/PyPokerEngine).  \nYou can play poker with your AI bia browser.\n\n![app_demo](https://github.com/ishikota/PyPokerGUI/blob/master/screenshot/poker_demo.gif)\n\nThis library assumes that your AI is implemented in [PyPokerEngine](https://github.com/ishikota/PyPokerEngine) format.  \nIf you have not checked our [PyPokerEngine](https://github.com/ishikota/PyPokerEngine), we recommend you to check it first.\n\n- [README tutorial](https://github.com/ishikota/PyPokerEngine)\n- [doc site for PyPokerEngine](https://ishikota.github.io/PyPokerEngine/)\n\n# Tutorial\nIn this tutorial, we will play poker with simple AI \"*FishPlayer*\".  \n(\"*FishPlayer*\" is an AI always declares CALL action. )\n\nThe outline of this tutorial is following.\n\n1. Create script to setup our AI\n2. Setup config file which defines rule of the game\n3. Start the server with config file and play the game\n\n## Installation\nPlease install this library with pip.\n\n```bash\npip install pypokergui\n```\n\n## Create script to setup our AI\nFirst, we will create a script which defines how to setup our AI.  \nWhat you need to do is implementing `setup_ai` method.    \nPyPokerGUI uses this method to setup your AI.\n\n```python\nfrom pypokerengine.players import BasePokerPlayer\n\nclass FishPlayer(BasePokerPlayer):  # Do not forget to make parent class as \"BasePokerPlayer\"\n\n    #  we define the logic to make an action through this method. (so this method would be the core of your AI)\n    def declare_action(self, valid_actions, hole_card, round_state):\n        # valid_actions format =\u003e [raise_action_info, call_action_info, fold_action_info]\n        call_action_info = valid_actions[1]\n        action, amount = call_action_info[\"action\"], call_action_info[\"amount\"]\n        return action, amount   # action returned here is sent to the poker engine\n\n    def receive_game_start_message(self, game_info):\n        pass\n\n    def receive_round_start_message(self, round_count, hole_card, seats):\n        pass\n\n    def receive_street_start_message(self, street, round_state):\n        pass\n\n    def receive_game_update_message(self, action, round_state):\n        pass\n\n    def receive_round_result_message(self, winners, hand_info, round_state):\n        pass\n\n\ndef setup_ai():\n    return FishPlayer()\n```\n\nWe assume that you put this script on `/Users/ishikota/poker/fish_player_setup.py` in following section.\n\n## Setup config file which defines rule of the game\nNext we will define the rule of the game.  \nWe need to define following settings in yaml format.\n\n- **max_round** : how many round we will play\n- **initial stack** : start stack size of each player\n- **small blind** : the amount of small blind\n- **ante** : the amount of ante\n- **ai_players** : path to your AI-setup script\n\nYou can generate template of config file like this.\n\n```bash\npypokergui build_config --maxround 10 --stack 100 --small_blind 10 --ante 0 \u003e\u003e poker_conf.yaml\n```\n\nThen your `poker_conf.yaml` would be ...\n\n```yaml\nante: 0\nblind_structure: null\ninitial_stack: 100\nmax_round: 10\nsmall_blind: 10\nai_players:\n- name: FIXME:your-ai-name\n  path: FIXME:your-setup-script-path\n```\n\nWe replace `ai_players` items like this.\n\n```yaml\nante: 0\nblind_structure: null\ninitial_stack: 100\nmax_round: 10\nsmall_blind: 10\nai_players:\n- name: fish_player_1\n  path: /Users/ishikota/poker/fish_player_setup.py\n- name: fish_player_2\n  path: /Users/ishikota/poker/fish_player_setup.py\n```\n\nWe assume that you put this file on `/Users/ishikota/poker/poker_conf.yaml` in following section.\n\n## Start the server with config file and play the game\nOk, everything is ready. We start the local server with our config file.\n\n```bash\npypokergui serve /Users/ishikota/poker/poker_conf.yaml --port 8000 --speed moderate\n```\n\nThen browser will be opened and you would see registration page.  \nPlease register yourself in the page and start the game. Enjoy poker!!\n\n### How to registrate yourself\n\u003cimg src=\"https://github.com/ishikota/PyPokerGUI/blob/master/screenshot/poker_registration.png\" width=600px/\u003e\n\n### How to declare action in the game\n\u003cimg src=\"https://github.com/ishikota/PyPokerGUI/blob/master/screenshot/poker_game.png\" width=600px/\u003e\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fishikota%2Fpypokergui","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fishikota%2Fpypokergui","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fishikota%2Fpypokergui/lists"}