VacancyChannel.php
2.26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
<?php
namespace App\Components\Integrations\Telegram;
use App\Models\Ad_employer;
use Str;
use Telegram\Bot\Api;
use Telegram\Bot\Exceptions\TelegramSDKException;
use Telegram\Bot\Laravel\Facades\Telegram;
use Telegram\Bot\Objects\Update;
class VacancyChannel
{
const REKAMORE_CHANNEL_ID = 'REKAMORE_CHANNEL_ID';
private Api $botApi;
public function __construct()
{
$this->botApi = Telegram::bot('channel_bot');
}
/**
* @throws TelegramSDKException
*/
private function getChatId()
{
$updates = $this->botApi->getUpdates();
/** @var Update $update*/
$chatId = null;
foreach ($updates as $update) {
if ($update->message?->chat->title === config('services.telegram.chat_title')) {
$chatId = $update->message->chat->id;
\Cache::set(self::REKAMORE_CHANNEL_ID, $chatId, null);
break;
}
}
if ($chatId === null) {
$chatId = \Cache::get(self::REKAMORE_CHANNEL_ID);
if ($chatId === null) {
throw new TelegramSDKException('Cant locate group chat id');
}
}
return $chatId;
}
/**
* @throws TelegramSDKException
*/
public function sendVacancy(Ad_employer $vacancy): void
{
$chatId = $this->getChatId();
$text = $this->formatTextFotTelegram($vacancy->text);
$this->botApi->sendMessage([
'chat_id' => $chatId,
'text' => $text,
'disable_web_page_preview' => true,
'parse_mode' => 'HTML'
]);
}
public function formatTextFotTelegram(string $text): string
{
$text = str_ireplace('<p>', '', $text);
$text = str_ireplace('</p>', '', $text);
$text = str_ireplace('<br>', '', $text);
$text = str_ireplace('<br />', '', $text);
$text = str_ireplace('<h3>', '<b>', $text);
$text = str_ireplace('</h3>', '</b>', $text);
$text = str_ireplace('<strong>', '<b>', $text);
$text = str_ireplace('</strong>', '</b>', $text);
$text = str_ireplace('<em>', '<i>', $text);
$text = str_ireplace('</em>', '</i>', $text);
return html_entity_decode($text, ENT_QUOTES | ENT_HTML5, 'UTF-8');
}
}