danog/tg-file-decoder

Decode Telegram bot API file IDs

Maintainers

๐Ÿ‘ danog

Package info

github.com/danog/tg-file-decoder

Type:project

pkg:composer/danog/tg-file-decoder

Fund package maintenance!

danog

Statistics

Installs: 740โ€‰789

Dependents: 8

Suggesters: 0

Stars: 77

Open Issues: 0

1.0.2 2025-05-31 15:14 UTC

Requires

  • php-64bit: >=8.2

Requires (Dev)

Suggests

None

Provides

None

Conflicts

None

Replaces

None

AGPL-3.0-only f4da78c28d47b658c4596249f1d6595956f3b796

  • Daniil Gentili <daniil.woop@daniil.it>

audiovideofilestelegrambot apimtprotostickersfile ID

This package is auto-updated.

Last update: 2026-06-29 01:50:11 UTC


README

๐Ÿ‘ build
๐Ÿ‘ Psalm coverage
๐Ÿ‘ Psalm level 1

Decode and encode Telegram bot API file IDs!

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

Install

composer require danog/tg-file-decoder

Examples:

Decoding bot API file IDs

use danog\Decoder\FileId;
use danog\Decoder\UniqueFileId;

$fileId = FileId::fromBotAPI('CAACAgQAAxkDAAJEsl44nl3yxPZ8biI8uhaA7rbQceOSAAKtAQACsTisUXvMEbVnTuQkGAQ');

$version = $fileId->version; // bot API file ID version, usually 4
$subVersion = $fileId->subVersion; // bot API file ID subversion, equivalent to a specific tdlib version

$dcId = $fileId->dcId; // On which datacenter is this file stored

$type = $fileId->type; // File type

$id = $fileId->id;
$accessHash = $fileId->accessHash;

$fileReference = $fileId->fileReference; // File reference, https://core.telegram.org/api/file_reference
$url = $fileId->url; // URL, file IDs with encoded webLocation

// You can also use hasFileReference and hasUrl
$fileIdReencoded = $fileId->getBotAPI(); // CAACAgQAAxkDAAJEsl44nl3yxPZ8biI8uhaA7rbQceOSAAKtAQACsTisUXvMEbVnTuQkGAQ
$fileIdReencoded = (string) $fileId; // CAACAgQAAxkDAAJEsl44nl3yxPZ8biI8uhaA7rbQceOSAAKtAQACsTisUXvMEbVnTuQkGAQ

// For photos, thumbnails if ($fileId->getType() <= FileIdType::PHOTO->value)
$volumeId = $fileId->volumeId;
$localId = $fileId->localId;

$photoSizeSource = $fileId->photoSizeSource; // PhotoSizeSource object
$photoSizeSource->dialogId;
$photoSizeSource->stickerSetId;

// And more, depending on photosize source

The bot API subversion, present since file IDs v4, is equivalent to the version of tdlib used server-side in the bot API.

For file types, see file types. For photosize source, see here.

Decoding bot API unique file IDs

$uniqueFileId = UniqueFileId::fromUniqueBotAPI('AgADrQEAArE4rFE');

$type = $fileId->type; // Unique file type

$id = $uniqueFileId->id;
$url = $uniqueFileId->url; // URL, for unique file IDs with encoded webLocation

// For photos
$volumeId = $uniqueFileId->volumeId;
$localId = $uniqueFileId->localId;

For unique file types, see unique types.

Extracting unique file IDs from full file IDs

$full = 'CAACAgQAAxkDAAJEsl44nl3yxPZ8biI8uhaA7rbQceOSAAKtAQACsTisUXvMEbVnTuQkGAQ';
$unique = 'AgADrQEAArE4rFE';

$fileId = FileId::fromBotAPI($full);
$uniqueFileId = UniqueFileId::fromUniqueBotAPI($unique);
$uniqueFileIdExtracted1 = UniqueFileId::fromBotAPI($full);

$uniqueFileIdExtracted2 = $fileId->getUniqueBotAPI();

var_dump(((string) $uniqueFileId) === ((string) $uniqueFileIdExtracted1)); // true, always AgADrQEAArE4rFE!
var_dump(((string) $uniqueFileId) === ((string) $uniqueFileIdExtracted2)); // true, always AgADrQEAArE4rFE!

Photosize source

$fileId = FileId::fromString('CAACAgQAAxkDAAJEsl44nl3yxPZ8biI8uhaA7rbQceOSAAKtAQACsTisUXvMEbVnTuQkGAQ');

$photoSizeSource = $fileId->photoSizeSource; // PhotoSizeSource object

$sourceType = $photoSizeSource->type;

// If $sourceType === PHOTOSIZE_SOURCE_DIALOGPHOTO_SMALL|PHOTOSIZE_SOURCE_DIALOGPHOTO_SMALL or 
// If $photoSizeSource instanceof PhotoSizeSourceDialogPhoto
$dialogId = $photoSizeSource->dialogId;
$dialogId = $photoSizeSource->sticketSetId;

The PhotoSizeSource abstract base class indicates the source of a specific photosize from a chat photo, photo, stickerset thumbnail, file thumbnail.

Click here ยป to view the full list of PhotoSizeSource types.

Building custom file IDs

$fileId = new FileId(
 type: FileIdType::STICKER,
 id: $id,
 accessHash: $accessHash,
 // and so on...
);

$encoded = (string) $fileId; // CAACAgQAAxkDAAJEsl44nl3yxPZ8biI8uhaA7rbQceOSAAKtAQACsTisUXvMEbVnTuQkGAQ, or something

Bot API file ID types

The file type is a PHP enum indicating the type of file, danog\Decoder\FileIdType.

Click here ยป to view the full list of file ID types.

The enum also offers a FileIdType::from method that can be used to obtain the correct case, from a string version of the file type, typically the one used in bot API file objects.

Bot API unique file ID types

The unique file type is a PHP enum uniquely indicating the unique file, danog\Decoder\UniqueFileIdType.

Click here ยป to view the full list of file ID types.

Full API documentation

Click here ยป to view the full API documentation.