Go to file
2024-04-15 16:02:14 +02:00
.github First commit 2024-04-15 15:52:07 +02:00
docs First commit 2024-04-15 15:52:07 +02:00
examples Improve example 2024-04-15 16:02:14 +02:00
src First commit 2024-04-15 15:52:07 +02:00
tests First commit 2024-04-15 15:52:07 +02:00
.gitignore First commit 2024-04-15 15:52:07 +02:00
.php-cs-fixer.dist.php First commit 2024-04-15 15:52:07 +02:00
composer.json First commit 2024-04-15 15:52:07 +02:00
LICENSE First commit 2024-04-15 15:52:07 +02:00
NOTICE First commit 2024-04-15 15:52:07 +02:00
phpunit.xml First commit 2024-04-15 15:52:07 +02:00
psalm.xml First commit 2024-04-15 15:52:07 +02:00
README.md Improve example 2024-04-15 16:02:14 +02:00

Async ORM

codecov Psalm coverage Psalm level 1 License

A library to work with Telegram UTF-16 styled text entities, created by Daniil Gentili (https://daniil.it).

This library can be used to modify entities returned by the Telegram Bot API, or even locally generate them using a custom MarkdownV2 and HTML parser inside of the library.

This ORM library was initially created for MadelineProto, an async PHP client API for the telegram MTProto protocol.

Installation

composer require danog/async-orm

Usage

<?php declare(strict_types=1);

use Amp\Http\Client\HttpClientBuilder;
use Amp\Http\Client\Request;
use danog\TelegramEntities\Entities;
use danog\TelegramEntities\EntityTools;

require __DIR__.'/../vendor/autoload.php';

$token = getenv('TOKEN');
if (!$token) {
    throw new AssertionError("A TOKEN environment variable must be specified!");
}

$dest = getenv('DEST');
if (!$dest) {
    throw new AssertionError("A DEST environment variable must be specified!");
}

$client = HttpClientBuilder::buildDefault();

$sm = function (string $message, string $parse_mode = '', array $entities = []) use ($token, $dest, $client): array {
    $res = $client->request(new Request("https://api.telegram.org/bot$token/sendMessage?".http_build_query([
        'text' => $message,
        'parse_mode' => $parse_mode,
        'entities' => json_encode($entities),
        'chat_id' => $dest
    ])));

    return json_decode($res->getBody()->buffer(), true)['result'];
};

$result = $sm("*This is a ❤️ test*", parse_mode: "MarkdownV2");

// Convert a message+entities back to HTML
$entities = new Entities($result['text'], $result['entities']);
var_dump($entities->toHTML()); // <b>This is a ❤️ test</b>

// Modify $entities as needed
$entities->message = "A message with ❤️ emojis";

// EntityTools::mb* methods compute the length in UTF-16 code units, as required by the bot API.
$entities->entities[0]['length'] = EntityTools::mbStrlen($entities->message);

// then resend:
$sm($entities->message, entities: $entities->entities);

// Convert HTML to an array of entities locally
$entities = Entities::fromHtml("<b>This is <i>a ❤️ nested</i> test</b>");
$sm($entities->message, entities: $entities->entities);

// Convert markdown to an array of entities locally
$entities = Entities::fromMarkdown("*This is _a ❤️ nested_ test*");
$sm($entities->message, entities: $entities->entities);

Many more methods are available, see the API documentation for the full list!

API Documentation

Click here » to view the API documentation.