{"id":27631960,"url":"https://github.com/nikochiko/df-wizard-chess","last_synced_at":"2025-04-23T17:54:20.390Z","repository":{"id":39875245,"uuid":"259290685","full_name":"nikochiko/df-wizard-chess","owner":"nikochiko","description":" 🧙 Dialogflow fulfillment for Wizard Chess","archived":false,"fork":false,"pushed_at":"2025-04-18T04:59:07.000Z","size":77720,"stargazers_count":14,"open_issues_count":36,"forks_count":3,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-20T23:41:28.512Z","etag":null,"topics":["blindfold-chess","chess","dialogflow","dialogflow-fulfillment","flask","flask-sqlalchemy","google-assistant","python","python3"],"latest_commit_sha":null,"homepage":"https://df-wizardchess.herokuapp.com","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nikochiko.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-04-27T11:14:48.000Z","updated_at":"2025-04-18T04:59:11.000Z","dependencies_parsed_at":"2022-08-27T12:52:22.119Z","dependency_job_id":null,"html_url":"https://github.com/nikochiko/df-wizard-chess","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nikochiko%2Fdf-wizard-chess","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nikochiko%2Fdf-wizard-chess/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nikochiko%2Fdf-wizard-chess/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nikochiko%2Fdf-wizard-chess/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nikochiko","download_url":"https://codeload.github.com/nikochiko/df-wizard-chess/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250487386,"owners_count":21438612,"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","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":["blindfold-chess","chess","dialogflow","dialogflow-fulfillment","flask","flask-sqlalchemy","google-assistant","python","python3"],"created_at":"2025-04-23T17:54:14.858Z","updated_at":"2025-04-23T17:54:20.377Z","avatar_url":"https://github.com/nikochiko.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Wizard Chess w/ Dialogflow\n\n[![Gitter](https://badges.gitter.im/wizard-chess/community.svg)](https://gitter.im/wizard-chess/community?utm_source=badge\u0026utm_medium=badge\u0026utm_campaign=pr-badge)\n[![Build Status](https://travis-ci.com/nikochiko/df-wizard-chess.svg?branch=master)](https://travis-ci.com/nikochiko/df-wizard-chess)\n[![codecov](https://codecov.io/gh/nikochiko/df-wizard-chess/branch/master/graph/badge.svg)](https://codecov.io/gh/nikochiko/df-wizard-chess)\n[![Dependabot Status](https://api.dependabot.com/badges/status?host=github\u0026repo=nikochiko/df-wizard-chess\u0026identifier=259290685)](https://dependabot.com)\n[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)\n\n\u003ch2 id=\"what-is-wizard-chess\"\u003e🤔 What is Wizard Chess?\u003c/h2\u003e\n\nTo truly understand, I will have you read this\n\n\u003e **What do you do when you really want to play blindfold chess but\n\u003e you're stuck at home? 🏠**\n\u003e\n\u003e *Ask your chess friends - easy 👨‍👨‍👧‍👦*\n\u003e\n\u003e **They don't like blindfold 🤷**\n\u003e\n\u003e *Google for an online solution 💻, there are so many chess apps. There\n\u003e has to be one about blindfold chess.*\n\u003e\n\u003e **Pbbt 👅 There ain't one.**\n\u003e\n\u003e *What about.. the popular ones?*\n\u003e\n\u003e **They say \"hide your pieces, it's just like blindfold chess 😇\"**\n\u003e\n\u003e *Ugh - that's a scam*\n\u003e\n\u003e **I have to do something about this.. 👨‍🔧🍳**\n\nWizard Chess is **that** something. The goal is to provide the best\nblindfold chess experience. That is, to have anything you might need\nwhile playing blindfold chess - be it a platform to play, a platform to\nlearn, or a platform to further develop your prowess. See\n[🧐 How do you do it?](#how-do-you-do-it) for the technical details.\n\nWizard Chess is already available as a Google Action! See\n[🏄🏽‍♂️ Where can I play?](#where-can-i-play) to know more.\n\n\u003ch2 id=\"how-do-you-do-it\"\u003e🧐 How do you do it?\u003c/h2\u003e\n\nWe use the wizardry 🔮 of AI assistants and chatbots to interact with the\nuser. When a user talks to our AI asssistant, the message is forwarded\nto [Dialogflow](http://dialogflow.com/). It processes the request from\nthe assistant - intelligently, with machine learning - and sends it to\nour [webhook](https://sendgrid.com/blog/whats-webhook/). Now our server\nuses this cooked data to generate a response and sends it back to\nDialogflow which in turn sends it to the assistant. The whole process\nbasically looks like this:\n```\n    User ======= |AI assistant/chatbot| \u003c-------\u003e |Dialogflow| \u003c-------\u003e |THIS SERVER| 💪\n```\n\nExamples of operations done on our end are creating and storing chess\ngames in a database, receiving a move and updating the board\naccordingly, and generating responses for the user.\n\n\u003ch2 id=\"where-can-i-play\"\u003e🏄🏽‍♂️ Where can I play?\u003c/h2\u003e\n\nThe app is already available for the Google Assistant\n[here](https://assistant.google.com/services/a/uid/0000003ba609b4ff?hl=en).\nYou can even launch the app without touching the link at all, just say\n*Talk to Wizard Chess* to your Google Assistant to boot up the Action.\n\nMore platforms coming soon! Let me know via\n[email](mailto:ktvm42@gmail.com) or\n[Gitter](https://gitter.im/wizard-chess/community) if you want to see\nWizard Chess on a particular platform so that we can prioritize it.\n\n\u003ch2 id=\"how-do-i-play\"\u003e📕 How do I play?\u003c/h2\u003e\n\nUpon starting the Wizard Chess Action (by saying *Talk to Wizard\nChess*), you will be asked to choose the side you'd like to play as and\nthe assistant will present you with a list of three options: White,\nBlack and Random. Now you can either select an option by touch or say\nyour choice out loud. The latter even works with devices which don't\nhave a screen (e.g. Google Home).\n\n\u003ch3\u003ePlaying moves\u003c/h3\u003e\nThe system to interpret moves is very lenient and allows you to choose\nhow you want to say the move.\n\nHere's a short list of how you can describe your moves:\n\n- Long descriptive format - e.g. ***Knight from g1 to f3*** or ***Pawn e4 captures d5*** or even without mentioning the piece ***d5 takes c4***\n  - For pawn promotion, you can add the name of the promotion\n    piece to the end - that is, ***Pawn from d7 to d8 queen*** or\n    ***b2 takes c1 queen***\n- Shorter format with just the piece and square - e.g. ***Knight to d4*** or ***Queen takes f6***\n  - Pawn promotion is supported in the same way as above\n  - Note that you will be notified by the assistant if your move\n    is ambiguous. This usually means that there were more than one\n    moves which matched your description - for example when two knights can\n    come to the mentioned square and you didn't specify which one.\n- Pawn moves by the squares they want to move to - e.g. ***e4***, ***g3***\n- Short Algebraic Notation (SAN) - e.g. ***Bd6***, ***Nbd7***\n- Long Algebraic Notation (LAN) - e.g. ***e2-e4***, ***Nf6xe4***, ***O-O***\n\n**Note**: The app doesn't yet support descriptive moves like ***Knight b to\nd7*** or ***e takes d5***. In that case you should use the long descriptive\nformat of move by mentioning the actual square the piece was at - e.g.\n***knight b8 to d7*** and ***e4 takes d5***\n\n\u003ch3\u003eCastling\u003c/h3\u003e\nYou can castle by telling the assistant to castle and mentioning the side you\nwant to castle on.\n\nSome examples: ***Castle short***, ***Castle kingside***, ***Long castling***, ***Castle to the queen's side***\n\nIf you don't mention which side you want to castle on (just ***castles***), castling\nwill be performed on whichever side is legal, defaulting to the kingside in\ncase both are legal.\n\n\u003ch3\u003eUndoing the moves\u003c/h3\u003e\n\nYou can easily undo your last move by saying ***Undo move***, ***take back\nmy last move***, etc.\n\n\u003ch3\u003eSeeing the board\u003c/h3\u003e\n\nYou are also given the option to take a peek at the board. To do that just say\nsomething like ***show me the board*** or ***let me see the board*** to the assistant.\n\n\u003ch3\u003eResignation\u003c/h3\u003e\n\nYou can resign at any time by just saying ***resign***.\n\n\u003ch2 id=\"contributing\"\u003e🔧 Contributing\u003c/h2\u003e\n\nUse the [issue tracker](https://github.com/nikochiko/df-wizard-chess/issues) to suggest\nnew features or report bugs. Feel free to directly [create pull\nrequests](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/creating-a-pull-request)\nfor small changes and typos. Create an issue before opening larger pull\nrequests so that the changes can be discussed beforehand. The latest\nDialogflow agent can be downloaded from \\\u003clink to be updated\\\u003e.\n\n\u003ch2 id=\"changelog\"\u003e⏰ Changelog\u003c/h2\u003e\n\n### 0.2.0 - 16/05/2020\n\n- Moved from SQLite to Postgres with SQLAlchemy\n- Bug fixes in show\\_board\n- Bug fixes with session\\_id handling\n- Added feature to accept SAN (or overspecified SAN) moves\n- Fixed bug which caused stale result comment after engine's move\n- Added feature to accept move when only a piece and square are\n  mentioned\n- Fixed bug which made app to crash when square had capital letters\n  (A4, D5 etc.)\n- Edited show board feature to flip board when user is playing as\n  black\n\n### 0.1.1 - 07/05/2020\n\n- Set up Travis CI\n- Set up coverage reporting with Codecov\n- Moved from using Dict in memory to sqlite3 DB on disk 🎉\n- Added testing to cover more than 90% of codebase 💪\n- Added feature to see board at any time 👁️\n- Board image will be shown after completion of games 📜\n\n### 0.1.0 - 27/04/2020\n\n- Format according to Black formatting tool\n- Basic functionality to play a game as a Google Action\n- Voice-activated ability to castle, promote pawn, and play move when\n  at least the two squares involved in the move are given.\n- Works with games stored in memory as Dict data type. Considering\n  move to sqlite in future versions\n- Unit tests added for most basic functions. More tests required for\n  functions which handle intents.\n\n\u003ch2 id=\"license\"\u003eLicense\u003c/h2\u003e\n\nLicensed under GNU General Public License 3.0 (GPL-3.0). See\n[LICENSE](https://github.com/nikochiko/df-wizard-chess/blob/master/LICENSE)\nfor full text.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnikochiko%2Fdf-wizard-chess","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnikochiko%2Fdf-wizard-chess","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnikochiko%2Fdf-wizard-chess/lists"}