1
0
mirror of https://github.com/danog/MadelineProto.git synced 2025-01-23 01:11:25 +01:00

Improve text filters

This commit is contained in:
AhJ 2023-12-25 22:13:33 +03:30
parent 26064d0d60
commit 671e447e68
7 changed files with 127 additions and 4 deletions

View File

@ -28,7 +28,7 @@ use Webmozart\Assert\Assert;
* Allow only messages or button queries matching the specified regex.
*/
#[Attribute(Attribute::TARGET_METHOD)]
final class FilterRegexAll extends Filter
final class FilterRegexMatchAll extends Filter
{
/** @param non-empty-string $regex */
public function __construct(

View File

@ -26,7 +26,7 @@ use Webmozart\Assert\Assert;
* Allow only messages that contain a specific content.
*/
#[Attribute(Attribute::TARGET_METHOD)]
final class FilterTextContain extends Filter
final class FilterTextContains extends Filter
{
public function __construct(
private readonly string $content

View File

@ -0,0 +1,41 @@
<?php declare(strict_types=1);
/**
* This file is part of MadelineProto.
* MadelineProto is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
* MadelineProto is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU Affero General Public License for more details.
* You should have received a copy of the GNU General Public License along with MadelineProto.
* If not, see <http://www.gnu.org/licenses/>.
*
* @author Amir Hossein Jafari <amirhosseinjafari8228@gmail.com>
* @copyright 2016-2023 Amir Hossein Jafari <amirhosseinjafari8228@gmail.com>
* @license https://opensource.org/licenses/AGPL-3.0 AGPLv3
* @link https://docs.madelineproto.xyz MadelineProto documentation
*/
namespace danog\MadelineProto\EventHandler\Filter;
use Attribute;
use danog\MadelineProto\EventHandler\Message;
use danog\MadelineProto\EventHandler\Story\Story;
use danog\MadelineProto\EventHandler\Update;
use Webmozart\Assert\Assert;
/**
* Allow only messages that contain a specific case-insensitive content.
*/
#[Attribute(Attribute::TARGET_METHOD)]
final class FilterTextContainsCaseInsensitive extends Filter
{
public function __construct(
private readonly string $content
) {
Assert::notEmpty($content);
}
public function apply(Update $update): bool
{
return ($update instanceof Message && str_contains(strtolower($update->message), $this->content)) ||
($update instanceof Story && str_contains(strtolower($update->caption), $this->content));
}
}

View File

@ -23,10 +23,10 @@ use danog\MadelineProto\EventHandler\Update;
use Webmozart\Assert\Assert;
/**
* Allow only messages that end with a specific content.
* Allow only messages that ends with a specific content.
*/
#[Attribute(Attribute::TARGET_METHOD)]
final class FilterTextEnd extends Filter
final class FilterTextEnds extends Filter
{
public function __construct(
private readonly string $content

View File

@ -0,0 +1,41 @@
<?php declare(strict_types=1);
/**
* This file is part of MadelineProto.
* MadelineProto is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
* MadelineProto is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU Affero General Public License for more details.
* You should have received a copy of the GNU General Public License along with MadelineProto.
* If not, see <http://www.gnu.org/licenses/>.
*
* @author Amir Hossein Jafari <amirhosseinjafari8228@gmail.com>
* @copyright 2016-2023 Amir Hossein Jafari <amirhosseinjafari8228@gmail.com>
* @license https://opensource.org/licenses/AGPL-3.0 AGPLv3
* @link https://docs.madelineproto.xyz MadelineProto documentation
*/
namespace danog\MadelineProto\EventHandler\Filter;
use Attribute;
use danog\MadelineProto\EventHandler\Message;
use danog\MadelineProto\EventHandler\Story\Story;
use danog\MadelineProto\EventHandler\Update;
use Webmozart\Assert\Assert;
/**
* Allow only messages that ends with a specific case-insensitive content.
*/
#[Attribute(Attribute::TARGET_METHOD)]
final class FilterTextEndsCaseInsensitive extends Filter
{
public function __construct(
private readonly string $content
) {
Assert::notEmpty($content);
}
public function apply(Update $update): bool
{
return ($update instanceof Message && str_ends_with(strtolower($update->message), $this->content)) ||
($update instanceof Story && str_ends_with(strtolower($update->caption), $this->content));
}
}

View File

@ -0,0 +1,41 @@
<?php declare(strict_types=1);
/**
* This file is part of MadelineProto.
* MadelineProto is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
* MadelineProto is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU Affero General Public License for more details.
* You should have received a copy of the GNU General Public License along with MadelineProto.
* If not, see <http://www.gnu.org/licenses/>.
*
* @author Amir Hossein Jafari <amirhosseinjafari8228@gmail.com>
* @copyright 2016-2023 Amir Hossein Jafari <amirhosseinjafari8228@gmail.com>
* @license https://opensource.org/licenses/AGPL-3.0 AGPLv3
* @link https://docs.madelineproto.xyz MadelineProto documentation
*/
namespace danog\MadelineProto\EventHandler\Filter;
use Attribute;
use danog\MadelineProto\EventHandler\Message;
use danog\MadelineProto\EventHandler\Story\Story;
use danog\MadelineProto\EventHandler\Update;
use Webmozart\Assert\Assert;
/**
* Allow only messages that start with a specific case-insensitive content.
*/
#[Attribute(Attribute::TARGET_METHOD)]
final class FilterTextStartsCaseInsensitive extends Filter
{
public function __construct(
private readonly string $content
) {
Assert::notEmpty($content);
}
public function apply(Update $update): bool
{
return ($update instanceof Message && str_starts_with(strtolower($update->message), $this->content)) ||
($update instanceof Story && str_starts_with(strtolower($update->caption), $this->content));
}
}