Giter Site home page Giter Site logo

mahjong-manager-bot's Introduction

About

麻雀対戦結果管理用 LINE Bot

Demo

(TBD)

Try it!

友だち追加

Features

(TBD)

For Developer

How to Build App

Create Your LINE Bot Messaging API Channel

  1. LINE Devlopers にてプロバイダ及び messaging API のチャンネルを作成
  2. チャンネルの Basic settings 画面にて Channel secret、Messaging API 画面にて Channel access token を取得し、 .env ファイルにて YOUR_CHANNEL_ACCESS_TOKEN, YOUR_CHANNEL_SECRET にそれぞれセットする

Build Mongo DB Container

A. On Local With docker-compose

  • Install Docker
  • run docker-compose on root directory of mahjong-manager
    • $ docker-compose up
  • .envファイルにて環境変数 EXTERNAL_DATABASE_URLmongodb://localhost:27017/ を設定、DATABASE_NAMEdb を設定

B. On Cloud

  • Use MongoDB Atlas
  • .envファイルにて環境変数 EXTERNAL_DATABASE_URL に Atlas の DB 接続画面から得られる URL を設定、DATABASE_NAMEdb を設定

Build Flask Server

  • Install Python
  • Create a virtual env(recommend)
    • $ python -m venv mmvenv
  • apply the virtual env
    • $ source mmvenv/bin/activate
  • Install dependencies
    • $ python -m pip install --upgrade pip
    • $ pip install -r requirements.txt
  • Set the env var "FLASK_APP" "src/server"
    • $ export FLASK_APP="src/server"
  • run flask server
    • $ flask run

Connect LINE Messaging API Channel

  • Install ngrok
  • Temporary deploy App
    • $ ngrok http 5000
    • Copy Forwarding URL(https)
  • LINE チャンネルの Messaging API画面の 'Webhook URL' に上記URLの末尾に /callback を追加したものを入力
  • Verify ボタンで検証成功すれば完了

Architecture

Servers

SALB_Devlop_Isoflow_Diagram_2021_12_10 (1)

Layers

ScreenShot 2023-08-05 8 58 15

View Layer

クライアントからの受け口となる層

  • LINE Handler
    • LINE APP のアクションをトリガーに呼ばれる処理
    • ReplyService に返答情報を格納し、LINE のテキストメッセージとして返答する。
  • Views
    • Web ブラウザの画面表示処理
    • 基本的にhtmlを返す
  • Apis:
    • 基本的にjsonを返す

Application Service Layer

クライアントの求める機能を提供する層

  • Use Cases
    • ユーザの1アクションが求める1シナリオ
    • そのシナリオの流れがわかるように詳細な処理はできる限りApp ServiceやDomain Serviceに任せる
  • Application Service
    • データに直接関係しない、共有可能な処理(Utility的な)

Domain Layer

ドメイン(このアプリで管理する業務データのこと)の情報や操作に関する層

  • Domain Service
    • ドメインを操作する処理
  • Entity
    • ドメインの情報を表すクラス

Infrastructure Layer

DBアクセス層

  • Repository
    • データのレコード操作処理

mahjong-manager-bot's People

Contributors

fezzlk avatar bbladr avatar

Stargazers

itizawa mikitaka avatar

Watchers

 avatar

mahjong-manager-bot's Issues

Feature: Fortune Yaku

ラッキー役を返信する機能

ラッキー牌みたいな完全なランダムではなく、出やすい役にバイアスをつけたい

  • 専用のコマンド(method)を用意し、適当な文字列を返答するユースケースを作成
  • 役の一覧から、ランダムに役を一つを返すように修正(MessageServiceにメソッドを追加)
  • 役を選ぶ時のバイアスをつける

Group,Match,Hanchanの紐付け見直し

現状

現状ではline_group_idによって紐づけられ、ステータスをもとにアクティブな結果や履歴などを管理している。

この場合、あるline_group_idのstatus=1のレコードは同時に一つしか存在しないように制御すべきで、そのように作り込んではいるが保証はできない。

対策案

groupにactive_match_id, matchにactive_hanchan_idをもたせ、アクティブなmatchやhanchanは1つになるようにする

improve: Temporarily record messages about point in input mode

概要

heroku の無料プランでデプロイしている場合など、メッセージの応答にラグがある時がある。そのため、input モードへの変更リクエストメッセージの直後、bot からの返信の前に点数メッセージを送ると点数に反映されない。

その改善策として input モードになるタイミングのメッセージを一時的に記録しておき、input モードに変わるタイミングでもし記録に残っていたら、反映するようにする

@Allによるメンション

LINE Botの使用上、フリープランの場合はLINE API でグループメンバ全員のIDを取得することができない。(そのグループに特定のユーザが存在するかという情報を得ることができない)

そのため、グループ内で投稿があったユーザに対し、ユーザとグループの紐付けを行うなど、そのグループに所属しているという情報をアプリ側で保持するようにする(ユーザ退会後も残るという課題あり)

同点入力方法の改善

現状

同点の半荘を入力した場合、上家の順位が高くなるようにユーザが素点に±1点することで調整する運用となっているが、端数計算方法によっては1点のズレが発生する。

改善案

ユーザの素点入力は同点のまま入力させる。半荘確定時に同点の有無をチェックし、同点が存在する場合は、同点ユーザの中から上家を選択させるボタンを返す。その応答により、素点をシステム側で調整する。この処理は同点ユーザがなくなるまで反復するようにし、3人同点などにも対応できるようにする。

組織ドメインの追加

ユーザと多対多の関係を持つ組織。
結果表示時に半荘(または対戦)参加者全てがその組織に属しているもののみに限定できるようにする。

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.