Skip to content

πŸŽ™οΈ Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π°Π²Ρ‹ΠΊΠΎΠ² голосового ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΠΊΠ° Алиса.

License

Notifications You must be signed in to change notification settings

alisa-php/alisa

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

10 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Alisa

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π°Π²Ρ‹ΠΊΠΎΠ² голосового ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΠΊΠ° ЯндСкс Алиса (Π”ΠΈΠ°Π»ΠΎΠ³ΠΈ).

Установка

composer require alisa/alisa

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π½Π°Π²Ρ‹ΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ повторяСт всС Ρ‡Ρ‚ΠΎ скаТСт ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ.

use Alisa\Alisa;
use Alisa\Context;

$alisa = new Alisa;

$alisa->onStart(function (Context $context) {
    $context->reply('ΠŸΡ€ΠΈΠ²Π΅Ρ‚, я ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡˆΠΊΠ°!');
});

$alisa->onAny(function (Context $context) {
    $context->reply($context('request.command'));
});

$alisa->run();

ДокумСнтация

Бобытия

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ событий ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΎΡ‚Π»Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ входящиС запросы ΠΎΡ‚ Π”ΠΈΠ°Π»ΠΎΠ³ΠΎΠ².

on()

on(Closure|array $pattern, Closure|array|string $handler, int $priority = 0): Event

Π­Ρ‚ΠΎ самый Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ ΠΈ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ способ ΠΎΡ‚Π»ΠΎΠ²Π° событий, Π½Π° Π½Π΅ΠΌ строятся всС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ событий, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ onStart, onCommand ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅.

Π‘ΠΎΠ±Ρ‹Ρ‚ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚Π»ΠΎΠ²ΠΈΡ‚ΡŒ Ρ€Π°Π·Π½Ρ‹ΠΌ способом:

  • on('request.command') - Π»ΠΎΠ²ΠΈΠΌ всС события Π³Π΄Π΅ Π΅ΡΡ‚ΡŒ ΠΊΠ»ΡŽΡ‡ request.command;
  • on(['request.command' => 'ΠΏΡ€ΠΈΠ²Π΅Ρ‚']) - Π»ΠΎΠ²ΠΈΠΌ события Π³Π΄Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π° === ΠΏΡ€ΠΈΠ²Π΅Ρ‚;
  • on(['request.command' => '/ΠΏΡ€ΠΈΠ²/iu']) - regex, Π»ΠΎΠ²ΠΈΠΌ события Π³Π΄Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΈΠ²Π΅Ρ‚, ΠΏΡ€ΠΈΠ²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽ, ΠΏΡ€ΠΈΠ²Π΅Π΅Π΅Ρ‚ ΠΈ Ρ‚.ΠΏ.;
  • on('request.command' => 'ΠΏΡ€ΠΈΠ²Π΅Ρ‚ {name}']) - Π»ΠΎΠ²ΠΈΠΌ событиС Π³Π΄Π΅ Π² ΠΊΠΎΠΌΠΌΠ°Π½Π΄Π΅ Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΈΠ²Π΅Ρ‚ вася ΠΈΠ»ΠΈ любоС Π΄Ρ€ΡƒΠ³ΠΎΠ΅ слово вмСсто вася.
  • on('request.command' => 'ΠΏΡ€ΠΈΠ²Π΅Ρ‚ {name?}']) - Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π²Ρ‹ΡˆΠ΅, Π½ΠΎ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΌΡ‹ ΠΏΠΎΠΉΠΌΠ°Π΅ΠΌ ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠ²Π΅Ρ‚ вася, Ρ‚Π°ΠΊ ΠΈ просто ΠΏΡ€ΠΈΠ²Π΅Ρ‚, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ {name?} - это ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ слово.
  • on(fn (Context $context) => ...) - Ссли Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ true - Π΅ΡΡ‚ΡŒ мэтч, Ссли false - мэтча Π½Π΅Ρ‚ соотвСтсвСнно, это самый Π³ΠΈΠ±ΠΊΠΈΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΎΡ‚Π»ΠΎΠ²Π° Ссли Π½ΡƒΠΆΠ½ΠΎ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ нСстандартноС;

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ использования Π½ΠΈΠΆΠ΅:

$alisa->on('request.command', function (Context $context) { ... });

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π½ΠΈΠΆΠ΅ ΠΌΡ‹ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ событиС Ссли это request.command Π˜Π›Π˜ session.new.

$alisa->on(['request.command', 'session.new'], function (Context $context) { ... });
$alisa->on(['request.command' => 'ΠΏΡ€ΠΈΠ²Π΅Ρ‚'], function (Context $context) { ... });
$alisa->on(['request.command' => '/ΠΏΡ€ΠΈΠ²/iu'], function (Context $context) { ... });

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π½ΠΈΠΆΠ΅, Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ {name} ΠΌΡ‹ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌ Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ.

$alisa->on(['request.command' => 'ΠΏΡ€ΠΈΠ²Π΅Ρ‚ {name}'], function (Context $context, string $name) { ... });
$alisa->on(['request.command' => 'ΠΏΡ€ΠΈΠ²Π΅Ρ‚ {name?}'], function (Context $context, ?string $name = null) { ... });

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ {user} {time?} ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ, сколько Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ, Π½ΠΎ Π³Π»Π°Π²Π½ΠΎΠ΅, ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ слово всСгда Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ послС ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ.

  • /ban {user} {time?} - OK;
  • /ban {user?} {time?} - OK;
  • /ban {user?} {time} - НЕ ОК;

Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π½ΠΈΠΆΠ΅:

  • Если сообщСниС /ban vasya 30 - ΠΏΠΎΠΉΠΌΠ°Π΅Ρ‚ $name = vasya, $time = 30.
  • Если сообщСниС /ban vasya 13 37 - ΠΏΠΎΠΉΠΌΠ°Π΅Ρ‚ $name = vasya, $time = 13 37.
$alisa->on(
    ['request.command' => '/ban {user} {time?}'],
    function (Context $context, string $user, ?string $name = null) {
        //
    }
);

Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π»ΠΎΠ²ΠΈΡ‚ΡŒ слова с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ regex:

$alisa->on(
    ['request.command' => '/ΠΏΡ€ΠΈΠ²Π΅Ρ‚ (.+?)/iu'],
    function (Context $context, string $name) {
        //
    }
);

А Π΅Ρ‰Π΅, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ Π² ΠΎΠ΄Π½ΠΎΠΌ событии.

КаТдоС пСрСчислСниС рацСниваСтся ΠΊΠ°ΠΊ Π˜Π›Π˜.

$alisa->on([
    'request.command' => ['/ΠΏΡ€ΠΈΠ²/iu', 'ΠΏΡ€ΠΈΠ²Π΅Ρ‚ {name?}' 'hello', 'hola'],
    function (Context $context, string $name) {
        //
    }
])

Π’Π°ΠΊ Ρ‚ΠΎΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ:

$alisa->on([
    'request.command' => ['/ΠΏΡ€ΠΈΠ²/iu', 'ΠΏΡ€ΠΈΠ²Π΅Ρ‚ {name?}' 'hello', 'hola'],
    'state.session.foo' => ['bar'],
    'state.session.lorem',
    fn (Context $context) => 2 + 2 === 4,
    function (Context $context, ?string $name = null) {
        //
    }
])

About

πŸŽ™οΈ Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π°Π²Ρ‹ΠΊΠΎΠ² голосового ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΠΊΠ° Алиса.

Topics

Resources

License

Stars

Watchers

Forks

Languages