1
0
mirror of https://github.com/danog/MadelineProto.git synced 2024-11-30 04:08:59 +01:00

Allow specifying command types in FilterCommand

This commit is contained in:
Daniil Gentili 2023-07-18 20:35:01 +02:00
parent 34a226c660
commit 8f6bea02a5
Signed by: danog
GPG Key ID: 8C1BE3B34B230CA7
7 changed files with 47 additions and 16 deletions

2
docs

@ -1 +1 @@
Subproject commit 2cfccd0d5d83a44cf30750a27ad6f9f511ecbb0b
Subproject commit ecb8774a1acc96a62a57a60baf3569283216432b

View File

@ -143,5 +143,8 @@
"plugins_do_not_use_require": "per motivi di performance, i plugin possono solo includere altri file presenti nella cartella plugins usando il meccanismo di autocaricamento PSR-4 (non usando require o include).",
"cli_need_dl.php_link": "È necessario specificare l'URL dello script di scaricamente per usare getDownloadLink via CLI!",
"need_dl.php": "Impossibile generare lo script di scaricamento di default (%s), è necessario creare un file dl.php con il seguente contenuto: %s e passare il suo URL al secondo parametro di getDownloadLink",
"dl.php_powered_by_madelineproto": "Server di scaricamento file Telegram (fino a 4GB), creato usando <a href=\"https://docs.madelineproto.xyz\" target=\"_blank\">MadelineProto</a>!<br>Clicca <a href=\"https://docs.madelineproto.xyz/docs/FILES.html#getting-a-download-link\" target=\"_blank\">qui</a> per configurare il tuo personale server di scaricamento file Telegram!"
"dl.php_powered_by_madelineproto": "Server di scaricamento file Telegram (fino a 4GB), creato usando <a href=\"https://docs.madelineproto.xyz\" target=\"_blank\">MadelineProto</a>!<br>Clicca <a href=\"https://docs.madelineproto.xyz/docs/FILES.html#getting-a-download-link\" target=\"_blank\">qui</a> per configurare il tuo personale server di scaricamento file Telegram!",
"invalid_dl.php_session": "%s non è uno script di scaricamento valido perché l'ID della sessione non è corretto (mi aspettavo %s, ho ricevuto %s)",
"account_banned": "!!!!!!! ATTENZIONE !!!!!!!\nIl sistema antispam di telegram ha sospeso questo account.\nPer continuare, è richiesta una verifica manuale.\nMandare un'email in inglese a recover@telegram.org, chiedendo di sbannare il numero di telefono %s, spiegando brevemente cosa si ha intenzione di fare con l'account.\nPoi rieseguite nuovamente il login.\nIgnorare questo messaggio se la sessione è stata resettata intenzionalmente.",
"plugin_path_does_not_exist": "La cartella dei plugin %s non esiste!"
}

View File

@ -379,7 +379,7 @@ abstract class EventHandler extends AbstractAPI
$pathNew = \realpath(\dirname((new ReflectionClass($class))->getFileName()).DIRECTORY_SEPARATOR.$path);
if ($pathNew === false) {
unset($paths[$k]);
Logger::log(sprintf(Lang::$current_lang['plugin_path_does_not_exist'], $path), Logger::FATAL_ERROR);
Logger::log(\sprintf(Lang::$current_lang['plugin_path_does_not_exist'], $path), Logger::FATAL_ERROR);
continue;
}
}
@ -403,7 +403,7 @@ abstract class EventHandler extends AbstractAPI
require $file;
continue;
}
if (str_contains($fileName, '.')) {
if (\str_contains($fileName, '.')) {
continue;
}
$class = $namespace.'\\'.$fileName;

View File

@ -2,7 +2,9 @@
namespace danog\MadelineProto\EventHandler\Filter;
use AssertionError;
use Attribute;
use danog\MadelineProto\EventHandler\CommandType;
use danog\MadelineProto\EventHandler\Message;
use danog\MadelineProto\EventHandler\Update;
use Webmozart\Assert\Assert;
@ -13,12 +15,29 @@ use Webmozart\Assert\Assert;
#[Attribute(Attribute::TARGET_METHOD)]
final class FilterCommand extends Filter
{
public function __construct(private readonly string $command)
/**
* @var array<CommandType>
*/
public readonly array $commandTypes;
/**
* @param string $command Command
* @param list<CommandType> $types Command types, if empty all command types are allowed.
*/
public function __construct(private readonly string $command, array $types = [CommandType::BANG, CommandType::DOT, CommandType::SLASH])
{
Assert::true(\preg_match("/^\w+$/", $command) === 1, "An invalid command was specified!");
Assert::notEmpty($types, 'No command types were specified!');
$c = [];
foreach ($types as $type) {
if (isset($c[$type->value])) {
throw new AssertionError($type->value." was already specified!");
}
$c[$type->value] = true;
}
$this->commandTypes = $types;
}
public function apply(Update $update): bool
{
return $update instanceof Message && $update->command === $this->command;
return $update instanceof Message && $update->command === $this->command && \in_array($update->command, $this->commandTypes, true);
}
}

View File

@ -105,12 +105,12 @@ class Exception extends \Exception
*/
public static function exceptionHandler(\Throwable $exception): void
{
$print = function (string $s) {
$print = function (string $s): void {
Logger::log($s, Logger::FATAL_ERROR);
if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') {
echo($s.PHP_EOL);
} else {
echo(str_replace("\n", "<br>", htmlentities($s)).PHP_EOL);
echo(\str_replace("\n", "<br>", \htmlentities($s)).PHP_EOL);
}
};
if (\str_contains($exception->getMessage(), 'Fiber stack protect failed')

View File

@ -146,6 +146,7 @@ If you intentionally deleted this account, ignore this message.',
'not_numeric' => 'بەهای پێدراو ژمارەیی نییە',
'params_missing' => 'پارامێتری پێویست نەماوە',
'peer_not_in_db' => 'ئەم هاوتایە لە بنکەدراوەی ناوخۆیی هاوتادا ئامادە نییە',
'plugin_path_does_not_exist' => 'Plugin path %s does not exist!',
'plugins_do_not_use_require' => 'for performance reasons, plugins can only automatically include or require other files present in the plugins folder by triggering the PSR-4 autoloader (not by manually require()\'ing them).',
'plugins_must_have_exactly_one_class' => 'a plugin must define exactly one class! To define multiple classes, interfaces or traits, create separate files, they will be autoloaded by MadelineProto automatically.',
'predicate_not_set' => 'پێشبینی (بەهای ژێر _) دانەنرابوو!',
@ -301,6 +302,7 @@ If you intentionally deleted this account, ignore this message.',
'not_numeric' => 'Given value isn\'t numeric',
'params_missing' => 'Missing required parameter',
'peer_not_in_db' => 'This peer is not present in the internal peer database',
'plugin_path_does_not_exist' => 'Plugin path %s does not exist!',
'plugins_do_not_use_require' => 'for performance reasons, plugins can only automatically include or require other files present in the plugins folder by triggering the PSR-4 autoloader (not by manually require()\'ing them).',
'plugins_must_have_exactly_one_class' => 'a plugin must define exactly one class! To define multiple classes, interfaces or traits, create separate files, they will be autoloaded by MadelineProto automatically.',
'predicate_not_set' => 'Predicate (value under _) was not set!',
@ -456,6 +458,7 @@ If you intentionally deleted this account, ignore this message.',
'not_numeric' => 'مقدار ورودی عددی نیست',
'params_missing' => 'ورودی موردنیاز یافت نشد',
'peer_not_in_db' => 'این peer در پایگاه داده (دیتابیس) peer وجود ندارد',
'plugin_path_does_not_exist' => 'Plugin path %s does not exist!',
'plugins_do_not_use_require' => 'به دلایل عملکردی و اجرایی، پلاگین‌ها فقط میتوانند فایل های دیگر را که در پوشه پلاگین هاست با استفاده از راه‌اندازی بارگذار خودکار PSR-4، به صورت خودکار include یا require کنند (بدون require کردن دستی آنها).',
'plugins_must_have_exactly_one_class' => 'یک پلاگین باید دقیقا یک کلس را تعریف کند! برای تعریف چند کلس، اینترفیس یا تریت، فایل‌های جداگانه بسازید، آنها توسط مدلین‌پروتو به صورت خودکار بارگذاری خواهند شد.',
'predicate_not_set' => 'مستند (مقدار تحت _) تنظیم نشده!',
@ -611,6 +614,7 @@ If you intentionally deleted this account, ignore this message.',
'not_numeric' => 'La valeur donnée n\'est pas numérique',
'params_missing' => 'Paramètre requis manquant',
'peer_not_in_db' => 'This peer is not present in the internal peer database',
'plugin_path_does_not_exist' => 'Plugin path %s does not exist!',
'plugins_do_not_use_require' => 'for performance reasons, plugins can only automatically include or require other files present in the plugins folder by triggering the PSR-4 autoloader (not by manually require()\'ing them).',
'plugins_must_have_exactly_one_class' => 'a plugin must define exactly one class! To define multiple classes, interfaces or traits, create separate files, they will be autoloaded by MadelineProto automatically.',
'predicate_not_set' => 'Predicate (value under _) was not set!',
@ -766,6 +770,7 @@ If you intentionally deleted this account, ignore this message.',
'not_numeric' => 'הערך הנתון אינו מספרי',
'params_missing' => 'חסר פרמטר נדרש',
'peer_not_in_db' => 'עמית זה לא קיים במסד הנתונים הפנימי של עמיתים',
'plugin_path_does_not_exist' => 'Plugin path %s does not exist!',
'plugins_do_not_use_require' => 'for performance reasons, plugins can only automatically include or require other files present in the plugins folder by triggering the PSR-4 autoloader (not by manually require()\'ing them).',
'plugins_must_have_exactly_one_class' => 'a plugin must define exactly one class! To define multiple classes, interfaces or traits, create separate files, they will be autoloaded by MadelineProto automatically.',
'predicate_not_set' => 'פרדיקט (ערך תחת _) לא הוגדר!',
@ -800,12 +805,12 @@ If you intentionally deleted this account, ignore this message.',
[
'2fa_uncalled' => 'Non sto aspettando la password, chiama prima le funzioni phoneLogin e completePhoneLogin!',
'accepting_call' => 'Sto accettando una chiamata da %s...',
'account_banned' => '!!!!!!! WARNING !!!!!!!
Telegram\'s flood prevention system suspended this account.
To continue, manual verification is required.
Send an email to recover@telegram.org, asking to unban the phone number %s, and shortly describe what will you do with this phone number.
Then login again.
If you intentionally deleted this account, ignore this message.',
'account_banned' => '!!!!!!! ATTENZIONE !!!!!!!
Il sistema antispam di telegram ha sospeso questo account.
Per continuare, è richiesta una verifica manuale.
Mandare un\'email in inglese a recover@telegram.org, chiedendo di sbannare il numero di telefono %s, spiegando brevemente cosa si ha intenzione di fare con l\'account.
Poi rieseguite nuovamente il login.
Ignorare questo messaggio se la sessione è stata resettata intenzionalmente.',
'already_loggedIn' => 'Questa istanza di MadelineProto è già loggata!',
'apiAppInstructionsAuto0' => 'Inserisci il nome dell\'app, può essere qualsiasi cosa: ',
'apiAppInstructionsAuto1' => 'Inserisci il nome ridotto dell\'app, caratteri alfanumerici: ',
@ -867,7 +872,7 @@ If you intentionally deleted this account, ignore this message.',
'file_type_invalid' => 'È stato fornito un tipo file errato',
'fingerprint_invalid' => 'fingerprint della chiave non valido!',
'go' => 'Vai',
'invalid_dl.php_session' => '%s is not a valid download script because its session ID is different (expected %s, got %s)',
'invalid_dl.php_session' => '%s non è uno script di scaricamento valido perché l\'ID della sessione non è corretto (mi aspettavo %s, ho ricevuto %s)',
'length_too_big' => 'Il valore fornito è troppo lungo',
'loginBot' => 'Inserisci il tuo bot token: ',
'loginBotTokenWeb' => 'Token del bot',
@ -921,6 +926,7 @@ If you intentionally deleted this account, ignore this message.',
'not_numeric' => 'Il valore fornito non è numerico',
'params_missing' => 'Non hai fornito un parametro obbligatorio, rileggi la documentazione API',
'peer_not_in_db' => 'Questo utente/gruppo/canale non è presente nel database interno MadelineProto',
'plugin_path_does_not_exist' => 'La cartella dei plugin %s non esiste!',
'plugins_do_not_use_require' => 'per motivi di performance, i plugin possono solo includere altri file presenti nella cartella plugins usando il meccanismo di autocaricamento PSR-4 (non usando require o include).',
'plugins_must_have_exactly_one_class' => 'un plugin deve definire esattamente una classe! Per definire più classi, interfacce o trait, si prega di creare file separati, che verranno caricati da MadelineProto automaticamente.',
'predicate_not_set' => 'Il predicato (valore sotto chiave _, esempio [\'_\' => \'inputPeer\']) non è impostato!',
@ -1076,6 +1082,7 @@ If you intentionally deleted this account, ignore this message.',
'not_numeric' => 'Given value isn\'t numeric',
'params_missing' => 'Missing required parameter',
'peer_not_in_db' => 'This peer is not present in the internal peer database',
'plugin_path_does_not_exist' => 'Plugin path %s does not exist!',
'plugins_do_not_use_require' => 'for performance reasons, plugins can only automatically include or require other files present in the plugins folder by triggering the PSR-4 autoloader (not by manually require()\'ing them).',
'plugins_must_have_exactly_one_class' => 'a plugin must define exactly one class! To define multiple classes, interfaces or traits, create separate files, they will be autoloaded by MadelineProto automatically.',
'predicate_not_set' => 'Predicate (value under _) was not set!',
@ -1231,6 +1238,7 @@ If you intentionally deleted this account, ignore this message.',
'not_numeric' => 'Kiritilgan qiymat raqamlar emas',
'params_missing' => 'Talab etiladigan parametr kiritilmagan',
'peer_not_in_db' => 'Bu obyekt ichki ma\'lumotlar bazasida mavjud emas',
'plugin_path_does_not_exist' => 'Plugin path %s does not exist!',
'plugins_do_not_use_require' => 'for performance reasons, plugins can only automatically include or require other files present in the plugins folder by triggering the PSR-4 autoloader (not by manually require()\'ing them).',
'plugins_must_have_exactly_one_class' => 'a plugin must define exactly one class! To define multiple classes, interfaces or traits, create separate files, they will be autoloaded by MadelineProto automatically.',
'predicate_not_set' => 'Predikat (_ ostidagi qiymat) belgilanmagan!',
@ -1388,6 +1396,7 @@ If you intentionally deleted this account, ignore this message.',
'not_numeric' => 'Given value isn\'t numeric',
'params_missing' => 'Missing required parameter',
'peer_not_in_db' => 'This peer is not present in the internal peer database',
'plugin_path_does_not_exist' => 'Plugin path %s does not exist!',
'plugins_do_not_use_require' => 'for performance reasons, plugins can only automatically include or require other files present in the plugins folder by triggering the PSR-4 autoloader (not by manually require()\'ing them).',
'plugins_must_have_exactly_one_class' => 'a plugin must define exactly one class! To define multiple classes, interfaces or traits, create separate files, they will be autoloaded by MadelineProto automatically.',
'predicate_not_set' => 'Predicate (value under _) was not set!',

View File

@ -489,7 +489,7 @@ trait UpdateHandler
}
}
if ($result === null) {
$updates = json_encode($updates);
$updates = \json_encode($updates);
throw new Exception("Could not find any message in $updates!");
}
return $result;