Compare commits

...

2 Commits

Author SHA1 Message Date
Artem Vasilev
3c245e8116 Дописал README.md 2024-03-01 02:06:08 +03:00
Artem Vasilev
b2ed2949f6 Описал команду 2024-03-01 02:05:58 +03:00
2 changed files with 101 additions and 4 deletions

View File

@ -1 +1,44 @@
# tbc-get-id
# Telegram Bot Command - Get user and chanel id
Implements the ability to get a user or channel ID in Telegram.
Реализует возможность получить ID пользователя или канала в Telegram.
## Подключение к проекту
Установите пакет в зависимости
```shell
composer require webmasterskaya/tbc-get-id
```
Зарегистрируйте класс команды, при инициализации приложения.
```php
$bot_api_key = 'your:bot_api_key';
$bot_username = 'username_bot';
$telegram = new Longman\TelegramBot\Telegram($bot_api_key, $bot_username);
$telegram->addCommandClass(\Webmasterskaya\TelegramBotCommands\Commands\UserCommands\IdCommand::class);
$telegram->handle();
// OR
$telegram->handleGetUpdates();
```
Команду можно запускать вручную, без изменений входящих данных!
```php
$telegram->executeCommand('id');
```
## Использование
### В чатах
1. Выполните команду `/id`, чтобы получить ID текущего чата.
2. Выполните команду `/id` в ответ на любое сообщение и вы получите ID текущего чата, ID автора сообщения и ID чата, из которого это сообщение переслали.
### В личных сообщениях
1. Выполните команду `/id`, чтобы получить ваш ID.
2. Перешлите любое сообщение (пользователя, чата, канала или другого бота) боту и, в ответ на это сообщение, выполните команду `/id`.

View File

@ -3,7 +3,9 @@
namespace Webmasterskaya\TelegramBotCommands\Commands\UserCommands;
use Longman\TelegramBot\Commands as BotCommands;
use Longman\TelegramBot\Entities\Entity;
use Longman\TelegramBot\Entities\ServerResponse;
use Longman\TelegramBot\Entities\User;
use Longman\TelegramBot\Request;
class IdCommand extends BotCommands\UserCommand
@ -16,12 +18,64 @@ class IdCommand extends BotCommands\UserCommand
protected $version = '1.0.0';
protected $private_only = true;
protected $private_only = false;
public function execute(): ServerResponse
{
// TODO: Implement execute() method.
$message = $this->getMessage() ?: $this->getChannelPost();
return Request::EmptyResponse();
if ($message->getFrom()->getIsBot() && is_null($message->getSenderChat())) {
return Request::emptyResponse();
}
$chat = $message->getChat();
$data = [
'chat_id' => $chat->getId(),
'reply_to_message_id' => $message->getMessageId(),
'parse_mode' => 'MarkdownV2'
];
/** @noinspection PhpUndefinedMethodInspection */
if (!empty(@$message->getExternalReply())) {
$data['text'] = sprintf('*Error*: %s', Entity::escapeMarkdownV2('Replies 2.0 not supported.'));
return Request::sendMessage($data);
}
$response_data = [];
if($chat->isPrivateChat()){
$response_data['Your ID'] = $message->getFrom()->getId() ?: $chat->getId();
} else {
$response_data['This chat ID'] = $chat->getId();
}
if (!is_null($reply = $message->getReplyToMessage())) {
$message = $reply;
if (!$chat->isPrivateChat()) {
$form = $message->getSenderChat() ?: $message->getFrom();
$form_type = ($form instanceof User)
? ($form->getIsBot() ? 'bot' : 'user')
: $form->getType();
$response_data["Message from $form_type ID"] = $form->getId();
}
}
if (!is_null($forward = $message->getForwardFrom() ?: $message->getForwardFromChat())) {
$forward_from_type = ($forward instanceof User)
? ($forward->getIsBot() ? 'bot' : 'user')
: $forward->getType();
$response_data["Forward from $forward_from_type ID"] = $forward->getId();
}
$data['text'] = '';
foreach ($response_data as $title => $value) {
$data['text'] .= sprintf('*%s*: `%s`',
Entity::escapeMarkdownV2($title),
Entity::escapeMarkdownV2($value)) . PHP_EOL;
}
return Request::sendMessage($data);
}
}