<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های Max Shirinzad</title>
        <link>https://virgool.io/feed/@mehdi163000</link>
        <description></description>
        <language>fa</language>
        <pubDate>2026-06-17 05:00:06</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/174375/avatar/URjvN2.png?height=120&amp;width=120</url>
            <title>Max Shirinzad</title>
            <link>https://virgool.io/@mehdi163000</link>
        </image>

                    <item>
                <title>لاراول و ربات تلگرام 2 - دستورات کاربردی</title>
                <link>https://virgool.io/@mehdi163000/%D9%84%D8%A7%D8%B1%D8%A7%D9%88%D9%84-%D9%88-%D8%B1%D8%A8%D8%A7%D8%AA-%D8%AA%D9%84%DA%AF%D8%B1%D8%A7%D9%85-2-%D8%B1%D9%88%D8%B4-%D8%A2%D9%BE%D8%AF%DB%8C%D8%AA-2-iokwlclkday2</link>
                <description>در مقاله قبلی نحوه اتصال برنامه با ربات تلگرام رو با پکیج telegram-bot-sdk گفتم.در این مقاله دستورات کاربردی که برای کنترل ربات و ارسال پیام و ویدئو و ... به تلگرام نیاز هست رو بررسی میکنیم.ارسال پیام متنی به تلگرام:Telegram::sendMessage([&#039;chat_id&#039; =&gt; $this-&gt;chat_id, &#039;text&#039; =&gt; &#039;پیام تستی&#039;]);ارسال پیام متنی با فرمت صفحات وب:$text = &#039;WhatsApp:&#039; . &#039;&lt;a href=&amp;quothttps://yoursite.com/98&#039; . ltrim($customer-&gt;phone, &#039;0&#039;) . &#039;&amp;quot&gt; ارسال پیام به واتس اپ &lt;/a&gt;&#039; . &amp;quot\n&amp;quot
Telegram::sendMessage([&#039;chat_id&#039; =&gt; $key, &#039;text&#039; =&gt; $text, &#039;parse_mode&#039; =&gt; &#039;HTML&#039;]);کاراکتر سطر جدید بین پیام های متنی:$NewLine = &quot;\n&quot;;ارسال یک پیام همراه با ایجاد یک منو برای انتخاب کاربر:$keyboard = [[&#039;عضویت&#039;, &#039;ورود&#039;],
    [&#039;&#039;سایت شرکت ما&#039;],
    [&#039;کانال تلگرامی ما&#039;],];
$reply_markup = Keyboard::make([
    &#039;keyboard&#039; =&gt; $keyboard,
    &#039;resize_keyboard&#039; =&gt; true,
    &#039;one_time_keyboard&#039; =&gt; true
]);

$res = Telegram::sendMessage([
    &#039;chat_id&#039; =&gt; $this-&gt;chat_id,
    &#039;text&#039; =&gt; $text,
    &#039;reply_markup&#039; =&gt; $reply_markup
]);ارسال یک تصویر:$img = Image::make(&#039;./images/pic1.png&#039;);
$img-&gt;save(&#039;./images/bot/wallet_with_text.jpg&#039;);

Telegram::sendPhoto([
    &#039;chat_id&#039; =&gt; $this-&gt;chat_id,
    &#039;photo&#039; =&gt; InputFile::create($img, &#039;wallet&#039;),
]);
دریافت فایل از کاربر و ارسال آن به تلگرام:$file = $Message-&gt;FileID;
                    $FileType = $Message-&gt;FileType;

                    $UserCount = 0;

 foreach ($users as $user) {
 try {
 
                            $chat_id = $user-&gt;chat_id;
 
 if ($file == null) {
                                Telegram::sendMessage([&#039;chat_id&#039; =&gt; $chat_id, &#039;text&#039; =&gt; $Message-&gt;Sharh]);
                            } else {
 switch ($FileType) {
 case &#039;audio&#039;:
                                        Telegram::sendAudio([
                                            &#039;chat_id&#039; =&gt; $chat_id,
                                            &#039;audio&#039; =&gt; $file,
                                            &#039;caption&#039; =&gt; $Message-&gt;Sharh,
                                        ]);
 break;
 case &#039;photo&#039;:
                                        Telegram::sendPhoto([
                                            &#039;chat_id&#039; =&gt; $chat_id,
                                            &#039;photo&#039; =&gt; $file,
                                            &#039;caption&#039; =&gt; $Message-&gt;Sharh,
                                        ]);
 break;
 case &#039;document&#039;:
                                        Telegram::sendDocument([
                                            &#039;chat_id&#039; =&gt; $chat_id,
                                            &#039;document&#039; =&gt; $file,
                                            &#039;caption&#039; =&gt; $Message-&gt;Sharh,
                                        ]);
 break;
 case &#039;video&#039;:
                                        Telegram::sendVideo([
                                            &#039;chat_id&#039; =&gt; $chat_id,
                                            &#039;video&#039; =&gt; $file,
                                            &#039;caption&#039; =&gt; $Message-&gt;Sharh,
                                        ]);
 break;
 case &#039;voice&#039;:
                                        Telegram::sendVoice([
                                            &#039;chat_id&#039; =&gt; $chat_id,
                                            &#039;voice&#039; =&gt; $file,
                                            &#039;caption&#039; =&gt; $Message-&gt;Sharh,
                                        ]);
 break;
 case &#039;video_note&#039;:
                                        Telegram::sendVideoNote([
                                            &#039;chat_id&#039; =&gt; $chat_id,
                                            &#039;video_note&#039; =&gt; $file,
                                            &#039;caption&#039; =&gt; $Message-&gt;Sharh,
                                        ]);
 break;
                                }

                                $UserCount += 1;
                                //-----------------

                            }اگر آی دی یک پیام ویدئویی رو داشته باشیم و بخواهیم از طریق خود تلگرام این ویدئو رو به کاربران بفرستیم باید به طریق زیر عمل نماییم:Telegram::sendVideo([
    &#039;chat_id&#039; =&gt; $this-&gt;chat_id,
    &#039;video&#039; =&gt; &#039;BAACAgQAdd64f545d4ff5d4f5df4wuaAAIrBgACAaaJUtM0-OH8bX5EHgQ&#039;,
]);توجه داشته باشید برای اینکه کیفیت ویدئوی ارسالی خوب باشد مجبور هستیم که یک فایل رو به تلگرام بفرستیم و آی دی اون رو بگیریم و از این طریق به کاربران بفرستیم.امیدوارم که این مطلب کاربردی باشه. منتظر ادامه نوشته ها در این زمینه باشید.</description>
                <category>Max Shirinzad</category>
                <author>Max Shirinzad</author>
                <pubDate>Sat, 12 Jun 2021 01:54:43 +0430</pubDate>
            </item>
                    <item>
                <title>لاراول و ربات تلگرام 1 - روش آپدیت</title>
                <link>https://virgool.io/@mehdi163000/%D8%B1%D8%A8%D8%A7%D8%AA-%D8%AA%D9%84%DA%AF%D8%B1%D8%A7%D9%85-%D8%A8%D8%A7-%D9%84%D8%A7%D8%B1%D8%A7%D9%88%D9%84-1-%D8%B1%D9%88%D8%B4-%D8%A2%D9%BE%D8%AF%DB%8C%D8%AA-maaxurszpbeb</link>
                <description>با درودارتباط لاراول با تلگرام یکی از مواردی هست که در اون تخصص خوبی کسب کرده ام و این متن راهنمایی هست برای برنامه نویسانی که میخواهند با تلگرام تبادل نمایند.من با تلگرام و لاراول چه کارهایی قبلا انجام داده ام:- من قبلا ربات اتاق معاملات آبشده با لاراول و تلگرام نوشتم.- آگهی های یک سایت را هر یک دقیقه یک بار به تلگرام و برای یک کانال فرستادم.- ربات قیمت دلار و طلا در تلگرام نوشتم.- ربات حسابداری و گزارشگری مالی برای تلگرام درست کردم.- ربات ثبت نام درست کردم.- کیف پول ارزهای دیجیتال و سرمایه گذاری در تلگرام ساختم.- نمودار رمز ارزها و .... ساختم و به تلگرام فرستادم.- منوهای داینامیک در تلگرام ساختم و منوی شیشه ای استفاده کردم و ...-------------------------------------------------------------برای ارتباط با تلگرام دو روش کلی وجود دارد. روش آپدیت و روش وب هوکدر این مقاله قصد دارم روش آپدیت و دریافت پیام های تلگرامی با این روش رو توضیح بدم.-------------------------------------------------------------در این مقاله من از پکیچ زیر برای ارتباط با تلگرام و لاراول 7 استفاده کرده ام: &quot;irazasyed/telegram-bot-sdk&quot;: &quot;3.1&quot;,این پکیج را در گیت هاب پیدا کنید و اون رو نصب کنید.telegram-bot-sdk-------------------------------------------------------------تنظیمات اولیه:اگر فقط از یک ربات تلگرام میخواهید استفاده کنید که توکن ربات را در فایل env قرار دهید و تنظیمات اولیه را در پوشه config انجام دهید.TELEGRAM_BOT_TOKEN=2111111111111111111:111111111111اگر میخواهید از چند ربات استفاده کنید که برای هر ربات یک کنترلر بسازید و کدهای هر ربات را جدا کنید و در اول هر کد صراحتا توکن ربات را به پکیج معرفی نمایید:$telegramA = new Api(2111111111111111111:111111111111);
$this-&gt;Telegram = $telegramA;در اینجا متغییر Telegram  یک متغیر سراسری در کنترلر هست که یک بار مقدار میگیره و بارها در فایل استفاده میشه و در ابتدا اینگونه تعریف شده:class TelegramBot1Controller extends Controller
{
 public $update = &#039;&#039;;
 public $chat_id = &#039;&#039;;
 public $userInfo = &#039;&#039;;
 public $Telegram = &#039;&#039;;-------------------------------------------------------------برای اینکه بتونیم پیام هایی که در ربات ما کاربران وارد کردند رو بخونیم نیاز به یک سرور در خارج از کشور داریم که معمولا یک هاست ارزان آلمان کار ما رو راه میندازه.-------------------------------------------------------------حالا میخواهیم که یک تابع درست کنیم که بتونیم پیام های کاربران رو بگیریم. این تابع رو در کنترلر ربات خودمون قرار میدیم: public function getUpdates()
{
    $offset = Cache::get(&#039;getUpdates_offset&#039;);
    $time = time();
    while (time() - $time &lt; 58) {
        $updates = Telegram::getUpdates([&#039;offset&#039; =&gt; $offset, &#039;limit&#039; =&gt; 40]);
        if (count($updates) &gt; 0) {
            $offset = end($updates)-&gt;update_id + 1;
            foreach ($updates as $update) {
                $this-&gt;update = $update;
                try {

                    $this-&gt;index();
                } catch (\Exception $exception) {
                    echo &#039;err&#039;;
                }
            }
        }
        sleep(1);
    }
    Cache::put(&#039;getUpdates_offset&#039;, $offset);
}در فایل routes ما این تابع یه این گونه مسیریابی شده:Route::any(&#039;/getUpdates&#039;, &#039;Api\TelegramBot1Controller@getUpdates&#039;);یک کرون جاب در سیپنل ایجاد کنید که هر یک دقیقه یک بار اجرا میشه و این تابع رو در اون فراخوانی کنید:wget -q -O - http://yoursite.ir/getUpdates&gt;/dev/null 2&gt;&amp;1خوب حالا میتونیم در تابع index به پیام های کاربران جواب بدیم:public function index()
{$this-&gt;update = json_decode(json_encode($this-&gt;update));if ($this-&gt;chat_id &lt; 0) return true;// Keyboard bottom response
        $message = $this-&gt;update-&gt;message-&gt;text ?? null;
 if (!is_null($message)) {
 
                &#039;chat_id&#039; =&gt; $this-&gt;chat_id,
                &#039;text&#039; =&gt; $message,
            ]);

 switch ($this-&gt;update-&gt;message-&gt;text) {
 case &#039;/start&#039;:
 case &#039;start&#039;:
 case &#039;شروع&#039;:
 if ($this-&gt;UserCheck() != 0) $this-&gt;mainMenu(&amp;quotمنو اصلی?&amp;quot);

                    //$this-&gt;mainMenu(&amp;quotمنو اصلی?&amp;quot);
 return true;
 break;
 case &#039;❌&#039; . &#039;بازگشت به منو اصلی&#039;:
                    Cache::put($this-&gt;chat_id, [&#039;step&#039; =&gt; &#039;start&#039;, &#039;login&#039; =&gt; &#039;true&#039;]);
                    $this-&gt;mainMenu(&amp;quotمنو اصلی?&amp;quot);
 return true;
 break;
 
 case &#039;⚱️&#039; . &#039;ثبت نام&#039; :
                    $this-&gt;wallet();
 return true;
 break;
 case &#039;⚱️&#039; . &#039;ورود کاربر&#039; :.........................
{کد ایجاد منوی اصلی در تلگرام برای مثال:$keyboard = [[ &#039;عضویت&#039;, &#039;ورود&#039;],
    [ &#039;سایت شرکت ما&#039;],
    [&#039;کانال ما در تلگرام&#039;],];
$reply_markup = Keyboard::make([
    &#039;keyboard&#039; =&gt; $keyboard,
    &#039;resize_keyboard&#039; =&gt; true,
    &#039;one_time_keyboard&#039; =&gt; true
]);

$res = Telegram::sendMessage([
    &#039;chat_id&#039; =&gt; $this-&gt;chat_id,
    &#039;text&#039; =&gt; &#039; یکی از گزینه های منو را انتخاب نمایید&#039;,
    &#039;reply_markup&#039; =&gt; $reply_markup
]);
return true;------------------------------------------------------------------------در تابع index ما برای کاربر یک منوی تلگرامی را ایجاد میکنیم و به گزینه های آن جواب میدهیم و ....-------------------------------------------------------------احتمال میدهم که کاربرانی که تازه کار هستند از این توضیحات من شاید چیز زیادی سردرنیاورند ولی کسانی که مجبور هستند منوهایی را در تلگرام ایجاد نمایند و به کاربران ربات پاسخ دهند، کدها و سرنخ های سریعی را در این نوشته ها پیدا خواهند کرد. برای همین فعلا به این مقدار توضیحات بسنده میکنم و توضیحات تکمیلی تر و روش های دیگر مورد استفاده در تلگرام را در مقالات دیگر ذکر خواهم کرد.-------------------------------------------------------------موفق و پیروز باشید</description>
                <category>Max Shirinzad</category>
                <author>Max Shirinzad</author>
                <pubDate>Mon, 24 May 2021 01:46:49 +0430</pubDate>
            </item>
                    <item>
                <title>لاراول و اجرای دستورات تکراری در ویندوز</title>
                <link>https://virgool.io/@mehdi163000/%D9%84%D8%A7%D8%B1%D8%A7%D9%88%D9%84-%D9%88-%D8%A7%D8%AC%D8%B1%D8%A7%DB%8C-%D8%AF%D8%B3%D8%AA%D9%88%D8%B1%D8%A7%D8%AA-%D8%AA%DA%A9%D8%B1%D8%A7%D8%B1%DB%8C-%D8%AF%D8%B1-%D9%88%DB%8C%D9%86%D8%AF%D9%88%D8%B2-cfs13ibjxu3h</link>
                <description>کسانی که با لاراول کار میکنند میدانند که بعضی از دستورات لاراول را خیلی باید اجرا کرد و به نوعی تکراری می شود مثل دستور زیر :php artisan serveحال چطور میشود به ساده ترین شکل ممکن این دستورات را ساده کرد؟---------------------------------------------روش اول:من میخواهم با اجرای دستور art دستور php artisan serve اجرا شود. روش کار:1- یک فایل در پوشه پروژه لاراول ایجاد میکنم به نام art.bat2- فایل را با یک ویراشگر متنی باز میکنم و کد زیر را در آن وارد میکنم و فایل را ذخیره میکنم:@echo offphp artisan serveو کار تمام است.حالا هر موقع که دستور art را تایپ نماییم به صورت اتوماتیک دستور php artisan serve اجرا میشود.از این روش می توان برای سایر دستورات تکراری هم استفاده کرد و هر کجا که دیدید دستوری را زیاد وارد میکنید می توانید به سرعت از این روش استفاده نمایید.---------------------------------------------روش دوم:اما یک روش تکمیلی که اکثر برنامه نویسان از این روش استفاده می کنند و کامل تر است روش زیر می باشد:1- یک فایل در پوشه پروژه لاراول ایجاد میکنم به نام alias.bat2- دستورات زیر را در آن کپی می کنیم:@echo off

:: Laravel
DOSKEY serve=php artisan serve --host=127.0.0.1
::DOSKEY art serve=php artisan serve --host=127.0.0.1
DOSKEY art=php artisan $*
DOSKEY tinker=php artisan tinker
DOSKEY refresh=php artisan migrate:refresh --seed
DOSKEY fresh=php artisan migrate:fresh --seed

:: PHPUnit
DOSKEY phpunit=&amp;quotvendor/bin/phpunit&amp;quot
DOSKEY pf=&amp;quotvendor/bin/phpunit&amp;quot --filter $*

:: Composer Dump Autoload
DOSKEY cda=composer dump-autoload

:: Git
DOSKEY gitcommit = git commit -m $*
DOSKEY gitconfig=&amp;quotC:\Program Files\Sublime Text 3\sublime_text.exe&amp;quot &amp;quotC:\Users\DELL\.gitconfig&amp;quot
DOSKEY git-save = git add .$Tgit stash save --keep-index
DOSKEY wip = git add .$Tgit commit -m &amp;quotWIP&amp;quot
DOSKEY gitlog = git log --pretty=oneline3- حالا فقط کافی است هر بار که کامند لاین را باز میکنیم تایپ کنیم alias و اینتر را بزنیم و هم اکنون می توانیم به راحتی از دستورات داخل این فایل استفاد نماییم.مثلا به جای تایپ php artisan serve می توانیم تایپ کنیم serve و یا art serve یا بجای تایپ php artisan migrate می نویسیم art migrate و به همین راحتی دستورات را خلاصه می کنیم.</description>
                <category>Max Shirinzad</category>
                <author>Max Shirinzad</author>
                <pubDate>Sun, 06 Sep 2020 23:53:23 +0430</pubDate>
            </item>
            </channel>
</rss>