サンプルアクション「Voice_Chat」は、簡単な雑談をするサンプルアクションです。

アクションの導入方法は、

※この記事で紹介しているソケットサーバー『HAL』は、諸般の事情により現在、公開と販売を中止しています。この製品へのお問い合わせは画面上部の『お問い合わせ』メニューよりご連絡ください。

※この記事は執筆・公開から3年以上経過しています。記事の情報が古くなっている場合がありますのでご注意ください。

公開日時:2016/12/14 21:15
最終更新:2019/11/30 01:07

サンプルアクション「Voice_Chat」の説明

サンプルアクション「Voice_Chat」は、簡単な雑談をするサンプルアクションです。

特に難しいことはしていません。音声入力に対して、乱数または時間で、応答メッセージにバリエーションを持たせています。

ソースコード

Chat.yml

## Chat YAML.
---
-
    type:   "ありがとう?"
    do:     "chat_thanx"
-
    type:   "(今日)?は?疲れた(よ|ね)?"
    do:     "chat_tired"
-
    type:   "おはよう?"
    do:     "chat_good_morning"
-
    type:   "おやすみ?"
    do:     "chat_good_night"
-
    type:   "\\A(あなた|お前|君)は?誰\\z"
    do:     "who_are_you"

Chat.php

<?php
/* *
 * 
 * socket server HAL v2.0
 * 
 * (c) 2016 Katsuhiko Miki
 * 
 * */
namespace Feijoa\HAL\Action\Voice;
use Feijoa\HAL as HALSYS;

class Chat extends HALSYS\Action\BaseAction
{

     /**
     * 呼び出し元クラス名を返すImplementsメソッド
     * 
     * @return string       // クラス名
     */
    public static function getClass(){ return __CLASS__; }

    /**
     * インターバル毎のイベント
     * 
     * @param \Feijoa\HAL\HALDto $dto
     */
    public static function sensor(HALSYS\HALDto $dto)
    {
    }

     /**
     * ありがとう
     * 
     * @param \Feijoa\HAL\HALDto $dto
     */
    public static function chat_thanx(HALSYS\HALDto $dto, $read_sock)
    {
        $rand = mt_rand(1, 3);
        switch(true){
             case $rand === 1:
                self::say($dto, "thanx1", "あなたのパートナーとして、当たり前のことです");
                break;
             case $rand === 2:
                self::say($dto, "thanx2", "そう言っていただけるとうれしいです");
                break;
            default:
                self::say($dto, "thanx3", "どういたしまして");
                break;
        }
    }

    /**
     * 疲れた
     * 
     * @param \Feijoa\HAL\HALDto $dto
     */
    public static function chat_tired(HALSYS\HALDto $dto, $read_sock)
    {
        $rand = mt_rand(1, 2);
        switch(true){
            case $rand === 1:
                self::say($dto, "i_am_tired_1", "大丈夫ですか?ゆっくり休んでください");
                break;
            default:
                self::say($dto, "i_am_tired_2", "お疲れ様でした。ビールでも飲んでゆっくりしましょう");
                break;
        }
    }

    public static function chat_good_morning(HALSYS\HALDto $dto, $read_sock)
    {
        $time = (int)date("Hi");
        if($time < 400){
            self::say($dto, "morning_0", "まだ深夜のようですが、よく眠れませんでしたか?");
        } else if($time < 600){
            self::say($dto, "morning_1", "おはようございます。随分お早いですね");
        } else if($time < 900){
            self::say($dto, "morning_2", "おはようございます。");
        } else if($time < 1000){
            self::say($dto, "morning_3", "おはようございます。今日はゆっくりですね");
        } else if($time < 1200){
            self::say($dto, "morning_4", "おはようというには遅すぎるきがします");
        } else if($time < 2359){
            self::say($dto, "morning_5", "どうお返事したら良いのか迷います");
        }
    }

    public static function chat_good_night(HALSYS\HALDto $dto, $read_sock)
    {
        $time = (int)date("Hi");
        if($time < 400){
            self::say($dto, "good_night_0", "遅くまでお疲れ様でした。ゆっくりお休みください");
        } else if($time < 1900){
            self::say($dto, "good_night_1", "変わった時間におやすみになるのですね");
        } else if($time < 2100){
            self::say($dto, "good_night_2", "お早いおやすみですね。ゆっくりお休みください");
        } else {
            self::say($dto, "good_night_3", "おやすみなさい");
        }
    }

    public static function who_are_you(HALSYS\HALDto $dto, $read_sock, $args)
    {
        self::say($dto, "who_are_you", "わたしは:@NAMEです");
    }
}

Chat.julius.yml

## Chat Julius YAML.
---
rules:
    - "SINGLE"
    - "ZATSUDAN_"
    - "WHAT_ ZATSUDAN_"
    - "YOU_ WHO"
alias:
    ZATSUDAN_:
        - "ZATSUDAN"
        - "ZATSUDAN NE"
        - "ZATSUDAN YO"
    WHAT_:
        - "WHAT"
        - "WHAT HA"
        - "WHAT MO"
    YOU_:
        - "YOU"
        - "YOU HA"
words:
    SINGLE:
        -
            word:   "ありがとう"
            kana:   "アリガトウ"
        -
            word:   "おはよう"
            kana:   "オハヨウ"
        -
            word:   "おやすみ"
            kana:   "オヤスミ"
    WHAT:
        -
            word:   "今日"
            kana:   "キョウ"
    ZATSUDAN:
        -
            word:   "疲れた"
            kana:   "ツカレタ"
    YOU:
        -
            word:   "あなた"
            kana:   "アナタ"
        -
            word:   "お前"
            kana:   "オマエ"
        -
            word:   "君"
            kana:   "キミ"
    WHO:
        -
            word:   "誰"
            kana:   "ダレ"
    HA:
        -
            word:   "は"
            kana:   "ワ"
    MO:
        -
            word:   "も"
            kana:   "モ"
    NE:
        -
            word:   "ね"
            kana:   "ネ"
    YO:
        -
            word:   "よ"
            kana:   "ヨ"

記事リンク