| 
<?php
 use Mateodioev\OllamaBot\Cache\UserCache;
 use Mateodioev\OllamaBot\Db\MysqlDatabase;
 use Mateodioev\OllamaBot\Events\{CancellCompletation, Chat, PrivateTextListener, SetModel, Start, ViewCompletionDetails};
 use Mateodioev\OllamaBot\Repository\MysqlUserRepository;
 use Mateodioev\TgHandler\{Bot, Log};
 
 use function Mateodioev\OllamaBot\env;
 
 require __DIR__ . '/vendor/autoload.php';
 
 \Dotenv\Dotenv::createImmutable(__DIR__)->load();
 
 // Create logger
 $logStreams = new Log\BulkStream(
 new Log\TerminalStream(),
 // (new Log\PhpNativeStream())->activate(env('LOG_DIR', __DIR__))
 );
 $logger = new Log\Logger($logStreams);
 
 // Create bot
 $bot = new Bot(env('BOT_TOKEN'), $logger);
 $logStreams->add(new Log\BotApiStream($bot->getApi(), (int) env('BOT_LOG_CHANNEL_ID')));
 
 $bot->onEvent(Start::get())
 ->onEvent(Chat::get())
 ->onEvent(SetModel::get())
 ->onEvent(CancellCompletation::get())
 ->onEvent(new PrivateTextListener())
 ->onEvent(new ViewCompletionDetails());
 
 $db = new MysqlDatabase('mysql:host=' . env('DB_HOST') . ';dbname=' . env('DB_NAME') . ';charset=utf8mb4', env('DB_USER'), env('DB_PASS'));
 UserCache::setRepo(new MysqlUserRepository($db));
 
 $bot->longPolling(
 (int) env('BOT_POLLING_TIMEOUT', 60),
 (bool) env('BOT_POLLING_IGNORE_OLD_UPDATES', false),
 (bool) env('BOT_ASYNC', true)
 );
 
 |