ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Π½Π°Π²ΡΠΊΠΎΠ² Π³ΠΎΠ»ΠΎΡΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ° Π―Π½Π΄Π΅ΠΊΡ ΠΠ»ΠΈΡΠ° (ΠΠΈΠ°Π»ΠΎΠ³ΠΈ).
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(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) {
//
}
])