mirror of
https://github.com/danog/MadelineProtoDocs.git
synced 2024-11-26 12:25:08 +01:00
Bump
This commit is contained in:
parent
3b96f262cb
commit
ebe6a3f62f
@ -30,6 +30,8 @@ Regex matches, if a filter multiple match regex is present
|
|||||||
* `$fromScheduled`: `bool` Whether this message is a *sent* scheduled message
|
* `$fromScheduled`: `bool` Whether this message is a *sent* scheduled message
|
||||||
* `$viaBotId`: `?int` If the message was generated by an inline query, ID of the bot that generated it
|
* `$viaBotId`: `?int` If the message was generated by an inline query, ID of the bot that generated it
|
||||||
* `$editDate`: `?int` Last edit date of the message
|
* `$editDate`: `?int` Last edit date of the message
|
||||||
|
* `$editHide`: `bool` Indicates if the post has a hidden edit, which is an edit that does not modify the actual message content.
|
||||||
|
Used to signify non-content related updates such as reactions.
|
||||||
* `$keyboard`: `(danog\MadelineProto\EventHandler\Keyboard\InlineKeyboard | danog\MadelineProto\EventHandler\Keyboard\ReplyKeyboard | null)` Inline or reply keyboard.
|
* `$keyboard`: `(danog\MadelineProto\EventHandler\Keyboard\InlineKeyboard | danog\MadelineProto\EventHandler\Keyboard\ReplyKeyboard | null)` Inline or reply keyboard.
|
||||||
* `$imported`: `bool` Whether this message was [imported from a foreign chat service](https://core.telegram.org/api/import)
|
* `$imported`: `bool` Whether this message was [imported from a foreign chat service](https://core.telegram.org/api/import)
|
||||||
* `$psaType`: `?string` For Public Service Announcement messages, the PSA type
|
* `$psaType`: `?string` For Public Service Announcement messages, the PSA type
|
||||||
|
@ -30,6 +30,8 @@ Regex matches, if a filter multiple match regex is present
|
|||||||
* `$fromScheduled`: `bool` Whether this message is a *sent* scheduled message
|
* `$fromScheduled`: `bool` Whether this message is a *sent* scheduled message
|
||||||
* `$viaBotId`: `?int` If the message was generated by an inline query, ID of the bot that generated it
|
* `$viaBotId`: `?int` If the message was generated by an inline query, ID of the bot that generated it
|
||||||
* `$editDate`: `?int` Last edit date of the message
|
* `$editDate`: `?int` Last edit date of the message
|
||||||
|
* `$editHide`: `bool` Indicates if the post has a hidden edit, which is an edit that does not modify the actual message content.
|
||||||
|
Used to signify non-content related updates such as reactions.
|
||||||
* `$keyboard`: `(danog\MadelineProto\EventHandler\Keyboard\InlineKeyboard | danog\MadelineProto\EventHandler\Keyboard\ReplyKeyboard | null)` Inline or reply keyboard.
|
* `$keyboard`: `(danog\MadelineProto\EventHandler\Keyboard\InlineKeyboard | danog\MadelineProto\EventHandler\Keyboard\ReplyKeyboard | null)` Inline or reply keyboard.
|
||||||
* `$imported`: `bool` Whether this message was [imported from a foreign chat service](https://core.telegram.org/api/import)
|
* `$imported`: `bool` Whether this message was [imported from a foreign chat service](https://core.telegram.org/api/import)
|
||||||
* `$psaType`: `?string` For Public Service Announcement messages, the PSA type
|
* `$psaType`: `?string` For Public Service Announcement messages, the PSA type
|
||||||
|
@ -30,6 +30,8 @@ Regex matches, if a filter multiple match regex is present
|
|||||||
* `$fromScheduled`: `bool` Whether this message is a *sent* scheduled message
|
* `$fromScheduled`: `bool` Whether this message is a *sent* scheduled message
|
||||||
* `$viaBotId`: `?int` If the message was generated by an inline query, ID of the bot that generated it
|
* `$viaBotId`: `?int` If the message was generated by an inline query, ID of the bot that generated it
|
||||||
* `$editDate`: `?int` Last edit date of the message
|
* `$editDate`: `?int` Last edit date of the message
|
||||||
|
* `$editHide`: `bool` Indicates if the post has a hidden edit, which is an edit that does not modify the actual message content.
|
||||||
|
Used to signify non-content related updates such as reactions.
|
||||||
* `$keyboard`: `(danog\MadelineProto\EventHandler\Keyboard\InlineKeyboard | danog\MadelineProto\EventHandler\Keyboard\ReplyKeyboard | null)` Inline or reply keyboard.
|
* `$keyboard`: `(danog\MadelineProto\EventHandler\Keyboard\InlineKeyboard | danog\MadelineProto\EventHandler\Keyboard\ReplyKeyboard | null)` Inline or reply keyboard.
|
||||||
* `$imported`: `bool` Whether this message was [imported from a foreign chat service](https://core.telegram.org/api/import)
|
* `$imported`: `bool` Whether this message was [imported from a foreign chat service](https://core.telegram.org/api/import)
|
||||||
* `$psaType`: `?string` For Public Service Announcement messages, the PSA type
|
* `$psaType`: `?string` For Public Service Announcement messages, the PSA type
|
||||||
|
@ -30,6 +30,8 @@ Regex matches, if a filter multiple match regex is present
|
|||||||
* `$fromScheduled`: `bool` Whether this message is a *sent* scheduled message
|
* `$fromScheduled`: `bool` Whether this message is a *sent* scheduled message
|
||||||
* `$viaBotId`: `?int` If the message was generated by an inline query, ID of the bot that generated it
|
* `$viaBotId`: `?int` If the message was generated by an inline query, ID of the bot that generated it
|
||||||
* `$editDate`: `?int` Last edit date of the message
|
* `$editDate`: `?int` Last edit date of the message
|
||||||
|
* `$editHide`: `bool` Indicates if the post has a hidden edit, which is an edit that does not modify the actual message content.
|
||||||
|
Used to signify non-content related updates such as reactions.
|
||||||
* `$keyboard`: `(danog\MadelineProto\EventHandler\Keyboard\InlineKeyboard | danog\MadelineProto\EventHandler\Keyboard\ReplyKeyboard | null)` Inline or reply keyboard.
|
* `$keyboard`: `(danog\MadelineProto\EventHandler\Keyboard\InlineKeyboard | danog\MadelineProto\EventHandler\Keyboard\ReplyKeyboard | null)` Inline or reply keyboard.
|
||||||
* `$imported`: `bool` Whether this message was [imported from a foreign chat service](https://core.telegram.org/api/import)
|
* `$imported`: `bool` Whether this message was [imported from a foreign chat service](https://core.telegram.org/api/import)
|
||||||
* `$psaType`: `?string` For Public Service Announcement messages, the PSA type
|
* `$psaType`: `?string` For Public Service Announcement messages, the PSA type
|
||||||
|
@ -30,6 +30,8 @@ Regex matches, if a filter multiple match regex is present
|
|||||||
* `$fromScheduled`: `bool` Whether this message is a *sent* scheduled message
|
* `$fromScheduled`: `bool` Whether this message is a *sent* scheduled message
|
||||||
* `$viaBotId`: `?int` If the message was generated by an inline query, ID of the bot that generated it
|
* `$viaBotId`: `?int` If the message was generated by an inline query, ID of the bot that generated it
|
||||||
* `$editDate`: `?int` Last edit date of the message
|
* `$editDate`: `?int` Last edit date of the message
|
||||||
|
* `$editHide`: `bool` Indicates if the post has a hidden edit, which is an edit that does not modify the actual message content.
|
||||||
|
Used to signify non-content related updates such as reactions.
|
||||||
* `$keyboard`: `(danog\MadelineProto\EventHandler\Keyboard\InlineKeyboard | danog\MadelineProto\EventHandler\Keyboard\ReplyKeyboard | null)` Inline or reply keyboard.
|
* `$keyboard`: `(danog\MadelineProto\EventHandler\Keyboard\InlineKeyboard | danog\MadelineProto\EventHandler\Keyboard\ReplyKeyboard | null)` Inline or reply keyboard.
|
||||||
* `$imported`: `bool` Whether this message was [imported from a foreign chat service](https://core.telegram.org/api/import)
|
* `$imported`: `bool` Whether this message was [imported from a foreign chat service](https://core.telegram.org/api/import)
|
||||||
* `$psaType`: `?string` For Public Service Announcement messages, the PSA type
|
* `$psaType`: `?string` For Public Service Announcement messages, the PSA type
|
||||||
|
@ -30,6 +30,8 @@ Regex matches, if a filter multiple match regex is present
|
|||||||
* `$fromScheduled`: `bool` Whether this message is a *sent* scheduled message
|
* `$fromScheduled`: `bool` Whether this message is a *sent* scheduled message
|
||||||
* `$viaBotId`: `?int` If the message was generated by an inline query, ID of the bot that generated it
|
* `$viaBotId`: `?int` If the message was generated by an inline query, ID of the bot that generated it
|
||||||
* `$editDate`: `?int` Last edit date of the message
|
* `$editDate`: `?int` Last edit date of the message
|
||||||
|
* `$editHide`: `bool` Indicates if the post has a hidden edit, which is an edit that does not modify the actual message content.
|
||||||
|
Used to signify non-content related updates such as reactions.
|
||||||
* `$keyboard`: `(danog\MadelineProto\EventHandler\Keyboard\InlineKeyboard | danog\MadelineProto\EventHandler\Keyboard\ReplyKeyboard | null)` Inline or reply keyboard.
|
* `$keyboard`: `(danog\MadelineProto\EventHandler\Keyboard\InlineKeyboard | danog\MadelineProto\EventHandler\Keyboard\ReplyKeyboard | null)` Inline or reply keyboard.
|
||||||
* `$imported`: `bool` Whether this message was [imported from a foreign chat service](https://core.telegram.org/api/import)
|
* `$imported`: `bool` Whether this message was [imported from a foreign chat service](https://core.telegram.org/api/import)
|
||||||
* `$psaType`: `?string` For Public Service Announcement messages, the PSA type
|
* `$psaType`: `?string` For Public Service Announcement messages, the PSA type
|
||||||
|
@ -30,6 +30,8 @@ Regex matches, if a filter multiple match regex is present
|
|||||||
* `$fromScheduled`: `bool` Whether this message is a *sent* scheduled message
|
* `$fromScheduled`: `bool` Whether this message is a *sent* scheduled message
|
||||||
* `$viaBotId`: `?int` If the message was generated by an inline query, ID of the bot that generated it
|
* `$viaBotId`: `?int` If the message was generated by an inline query, ID of the bot that generated it
|
||||||
* `$editDate`: `?int` Last edit date of the message
|
* `$editDate`: `?int` Last edit date of the message
|
||||||
|
* `$editHide`: `bool` Indicates if the post has a hidden edit, which is an edit that does not modify the actual message content.
|
||||||
|
Used to signify non-content related updates such as reactions.
|
||||||
* `$keyboard`: `(danog\MadelineProto\EventHandler\Keyboard\InlineKeyboard | danog\MadelineProto\EventHandler\Keyboard\ReplyKeyboard | null)` Inline or reply keyboard.
|
* `$keyboard`: `(danog\MadelineProto\EventHandler\Keyboard\InlineKeyboard | danog\MadelineProto\EventHandler\Keyboard\ReplyKeyboard | null)` Inline or reply keyboard.
|
||||||
* `$imported`: `bool` Whether this message was [imported from a foreign chat service](https://core.telegram.org/api/import)
|
* `$imported`: `bool` Whether this message was [imported from a foreign chat service](https://core.telegram.org/api/import)
|
||||||
* `$psaType`: `?string` For Public Service Announcement messages, the PSA type
|
* `$psaType`: `?string` For Public Service Announcement messages, the PSA type
|
||||||
|
@ -19,14 +19,14 @@ PSR-3 wrapper for MadelineProto's Logger.
|
|||||||
## Method list:
|
## Method list:
|
||||||
* [`__construct(\danog\MadelineProto\Logger $logger)`](#__construct)
|
* [`__construct(\danog\MadelineProto\Logger $logger)`](#__construct)
|
||||||
* [`log(mixed $level, mixed $message, array<mixed> $context = []): void`](#log)
|
* [`log(mixed $level, mixed $message, array<mixed> $context = []): void`](#log)
|
||||||
* [`emergency((string|\Stringable) $message, array $context = []): void`](#emergency)
|
* [`emergency(Stringable|string $message, array $context = []): void`](#emergency)
|
||||||
* [`alert((string|\Stringable) $message, array $context = []): void`](#alert)
|
* [`alert(Stringable|string $message, array $context = []): void`](#alert)
|
||||||
* [`critical((string|\Stringable) $message, array $context = []): void`](#critical)
|
* [`critical(Stringable|string $message, array $context = []): void`](#critical)
|
||||||
* [`error((string|\Stringable) $message, array $context = []): void`](#error)
|
* [`error(Stringable|string $message, array $context = []): void`](#error)
|
||||||
* [`warning((string|\Stringable) $message, array $context = []): void`](#warning)
|
* [`warning(Stringable|string $message, array $context = []): void`](#warning)
|
||||||
* [`notice((string|\Stringable) $message, array $context = []): void`](#notice)
|
* [`notice(Stringable|string $message, array $context = []): void`](#notice)
|
||||||
* [`info((string|\Stringable) $message, array $context = []): void`](#info)
|
* [`info(Stringable|string $message, array $context = []): void`](#info)
|
||||||
* [`debug((string|\Stringable) $message, array $context = []): void`](#debug)
|
* [`debug(Stringable|string $message, array $context = []): void`](#debug)
|
||||||
|
|
||||||
## Methods:
|
## Methods:
|
||||||
### <a name="__construct"></a> `__construct(\danog\MadelineProto\Logger $logger)`
|
### <a name="__construct"></a> `__construct(\danog\MadelineProto\Logger $logger)`
|
||||||
@ -58,24 +58,24 @@ Parameters:
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
### <a name="emergency"></a> `emergency((string|\Stringable) $message, array $context = []): void`
|
### <a name="emergency"></a> `emergency(Stringable|string $message, array $context = []): void`
|
||||||
|
|
||||||
System is unusable.
|
System is unusable.
|
||||||
|
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
|
|
||||||
* `$message`: `(string|\Stringable)`
|
* `$message`: `Stringable|string`
|
||||||
* `$context`: `array`
|
* `$context`: `array`
|
||||||
|
|
||||||
|
|
||||||
#### See also:
|
#### See also:
|
||||||
* `\Stringable`
|
* `Stringable`
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
### <a name="alert"></a> `alert((string|\Stringable) $message, array $context = []): void`
|
### <a name="alert"></a> `alert(Stringable|string $message, array $context = []): void`
|
||||||
|
|
||||||
Action must be taken immediately.
|
Action must be taken immediately.
|
||||||
|
|
||||||
@ -85,17 +85,17 @@ trigger the SMS alerts and wake you up.
|
|||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
|
|
||||||
* `$message`: `(string|\Stringable)`
|
* `$message`: `Stringable|string`
|
||||||
* `$context`: `array`
|
* `$context`: `array`
|
||||||
|
|
||||||
|
|
||||||
#### See also:
|
#### See also:
|
||||||
* `\Stringable`
|
* `Stringable`
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
### <a name="critical"></a> `critical((string|\Stringable) $message, array $context = []): void`
|
### <a name="critical"></a> `critical(Stringable|string $message, array $context = []): void`
|
||||||
|
|
||||||
Critical conditions.
|
Critical conditions.
|
||||||
|
|
||||||
@ -104,17 +104,17 @@ Example: Application component unavailable, unexpected exception.
|
|||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
|
|
||||||
* `$message`: `(string|\Stringable)`
|
* `$message`: `Stringable|string`
|
||||||
* `$context`: `array`
|
* `$context`: `array`
|
||||||
|
|
||||||
|
|
||||||
#### See also:
|
#### See also:
|
||||||
* `\Stringable`
|
* `Stringable`
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
### <a name="error"></a> `error((string|\Stringable) $message, array $context = []): void`
|
### <a name="error"></a> `error(Stringable|string $message, array $context = []): void`
|
||||||
|
|
||||||
Runtime errors that do not require immediate action but should typically
|
Runtime errors that do not require immediate action but should typically
|
||||||
be logged and monitored.
|
be logged and monitored.
|
||||||
@ -122,17 +122,17 @@ be logged and monitored.
|
|||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
|
|
||||||
* `$message`: `(string|\Stringable)`
|
* `$message`: `Stringable|string`
|
||||||
* `$context`: `array`
|
* `$context`: `array`
|
||||||
|
|
||||||
|
|
||||||
#### See also:
|
#### See also:
|
||||||
* `\Stringable`
|
* `Stringable`
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
### <a name="warning"></a> `warning((string|\Stringable) $message, array $context = []): void`
|
### <a name="warning"></a> `warning(Stringable|string $message, array $context = []): void`
|
||||||
|
|
||||||
Exceptional occurrences that are not errors.
|
Exceptional occurrences that are not errors.
|
||||||
|
|
||||||
@ -142,34 +142,34 @@ that are not necessarily wrong.
|
|||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
|
|
||||||
* `$message`: `(string|\Stringable)`
|
* `$message`: `Stringable|string`
|
||||||
* `$context`: `array`
|
* `$context`: `array`
|
||||||
|
|
||||||
|
|
||||||
#### See also:
|
#### See also:
|
||||||
* `\Stringable`
|
* `Stringable`
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
### <a name="notice"></a> `notice((string|\Stringable) $message, array $context = []): void`
|
### <a name="notice"></a> `notice(Stringable|string $message, array $context = []): void`
|
||||||
|
|
||||||
Normal but significant events.
|
Normal but significant events.
|
||||||
|
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
|
|
||||||
* `$message`: `(string|\Stringable)`
|
* `$message`: `Stringable|string`
|
||||||
* `$context`: `array`
|
* `$context`: `array`
|
||||||
|
|
||||||
|
|
||||||
#### See also:
|
#### See also:
|
||||||
* `\Stringable`
|
* `Stringable`
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
### <a name="info"></a> `info((string|\Stringable) $message, array $context = []): void`
|
### <a name="info"></a> `info(Stringable|string $message, array $context = []): void`
|
||||||
|
|
||||||
Interesting events.
|
Interesting events.
|
||||||
|
|
||||||
@ -178,29 +178,29 @@ Example: User logs in, SQL logs.
|
|||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
|
|
||||||
* `$message`: `(string|\Stringable)`
|
* `$message`: `Stringable|string`
|
||||||
* `$context`: `array`
|
* `$context`: `array`
|
||||||
|
|
||||||
|
|
||||||
#### See also:
|
#### See also:
|
||||||
* `\Stringable`
|
* `Stringable`
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
### <a name="debug"></a> `debug((string|\Stringable) $message, array $context = []): void`
|
### <a name="debug"></a> `debug(Stringable|string $message, array $context = []): void`
|
||||||
|
|
||||||
Detailed debug information.
|
Detailed debug information.
|
||||||
|
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
|
|
||||||
* `$message`: `(string|\Stringable)`
|
* `$message`: `Stringable|string`
|
||||||
* `$context`: `array`
|
* `$context`: `array`
|
||||||
|
|
||||||
|
|
||||||
#### See also:
|
#### See also:
|
||||||
* `\Stringable`
|
* `Stringable`
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -58,4 +58,4 @@ cd PrimeModule-ext && make -j$(nproc) && sudo make install
|
|||||||
|
|
||||||
The `max_map_count` sysctl configuration is required to avoid "Fiber stack allocate failed" and "Fiber stack protect failed" errors, since the PHP engine mmaps two memory regions per fiber, and the `soft/hard nofile` limits increase the maximum open FD limit, to allow opening many TCP sockets for improved upload and download performance, and to avoid errors.
|
The `max_map_count` sysctl configuration is required to avoid "Fiber stack allocate failed" and "Fiber stack protect failed" errors, since the PHP engine mmaps two memory regions per fiber, and the `soft/hard nofile` limits increase the maximum open FD limit, to allow opening many TCP sockets for improved upload and download performance, and to avoid errors.
|
||||||
|
|
||||||
<a href="https://docs.madelineproto.xyz/docs/DOCKER.html">Next section</a>
|
<a href="https://docs.madelineproto.xyz/docs/DOCKER.html">Next section</a>
|
@ -65,13 +65,13 @@ Tip: if you receive an error (or nothing), [send us](https://t.me/pwrtelegramgro
|
|||||||
The following open source projects were created using MadelineProto: you can directly install them, or explore the source code as direct examples on how to use MadelineProto's many features!
|
The following open source projects were created using MadelineProto: you can directly install them, or explore the source code as direct examples on how to use MadelineProto's many features!
|
||||||
|
|
||||||
* [magnaluna webradio](https://magna.madelineproto.xyz) - Multifeatured Telegram VoIP webradio
|
* [magnaluna webradio](https://magna.madelineproto.xyz) - Multifeatured Telegram VoIP webradio
|
||||||
* [TelegramApiServer](https://github.com/xtrime-ru/TelegramApiServer) - Fast, simple, async php telegram api server: an HTTP JSON API for MadelineProto!
|
|
||||||
* [`simpleBot.php`](https://github.com/danog/MadelineProto/blob/v8/examples/simpleBot.php) - Extremely basic example
|
* [`simpleBot.php`](https://github.com/danog/MadelineProto/blob/v8/examples/simpleBot.php) - Extremely basic example
|
||||||
* [`tgstories_dl_bot.php`](https://github.com/danog/MadelineProto/blob/v8/examples/tgstories_dl_bot.php) - Source code of [@tgstories_dl_bot](https://t.me/tgstories_dl_bot) - Bot to download any Telegram Story!
|
* [`tgstories_dl_bot.php`](https://github.com/danog/MadelineProto/blob/v8/examples/tgstories_dl_bot.php) - Source code of [@tgstories_dl_bot](https://t.me/tgstories_dl_bot) - Bot to download any Telegram Story!
|
||||||
* [`downloadRenameBot.php`](https://github.com/danog/downloadRenameBot/blob/main/bot.php) - Download files by URL and rename Telegram files using this async parallelized bot!
|
* [`downloadRenameBot.php`](https://github.com/danog/downloadRenameBot/blob/main/bot.php) - Download files by URL and rename Telegram files using this async parallelized bot!
|
||||||
* [`secret_bot.php`](https://github.com/danog/MadelineProto/blob/v8/examples/secret_bot.php) - Secret chat bot!
|
* [`secret_bot.php`](https://github.com/danog/MadelineProto/blob/v8/examples/secret_bot.php) - Secret chat bot!
|
||||||
* [`pipesbot.php`](https://github.com/danog/pipesbot) - Creating inline bots and using other inline bots via a userbot!
|
* [`pipesbot.php`](https://github.com/danog/pipesbot) - Creating inline bots and using other inline bots via a userbot!
|
||||||
* [`bot.php`](https://github.com/danog/MadelineProto/blob/v8/examples/bot.php) - Examples for how to use filters, updates, get download links for any file, Telegram Stories and much more!
|
* [`bot.php`](https://github.com/danog/MadelineProto/blob/v8/examples/bot.php) - Examples for how to use filters, updates, get download links for any file, Telegram Stories and much more!
|
||||||
|
* [TelegramApiServer](https://github.com/xtrime-ru/TelegramApiServer) - Fast, simple, async php telegram api server: an HTTP JSON API for MadelineProto (for use in languages other than PHP, if using PHP use directly MadelineProto)
|
||||||
|
|
||||||
Want to add your own open-source project to this list? [Click here!](https://docs.madelineproto.xyz/FOSS.html)
|
Want to add your own open-source project to this list? [Click here!](https://docs.madelineproto.xyz/FOSS.html)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user