<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های Mohsen</title>
        <link>https://virgool.io/feed/@mohsen322</link>
        <description>یه برنامه نویس وب که شدید علاقه داره به یادگیری بیشتر توی زمینه کاریش و مسائل مرتبط با آی.تی و تکنولوژی :))</description>
        <language>fa</language>
        <pubDate>2026-04-15 06:06:37</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/796/avatar/lu9gth.png?height=120&amp;width=120</url>
            <title>Mohsen</title>
            <link>https://virgool.io/@mohsen322</link>
        </image>

                    <item>
                <title>اتصال اکانت بیزنسی تلگرام به ربات تلگرامی</title>
                <link>https://virgool.io/@mohsen322/how-to-conect-telegram-business-account-to-a-telegam-bot-uvbf34a18hzf</link>
                <description>درود. این احتمالا اولین آموزش فارسی برای قابلیت جدید تلگرام برای اکانتهای بیزنسی باشه و مثل همیشه سریع میریم سراغ اصل مطلب.احتمالا در جریان باشید که تلگرام یک بخش جدید به اپلیکیشنش اضافه کرده و افرادی که اشتراک پریمیوم دارند میتونن بخش Telegram Business رو هم فعال کنن و از امکاناتی که در اختیارشون قرار میگیره در جهت بهبود پشتیبانی کسب و کارشون استفاده کنند.امکانات تلگرام بیزنس چیا هستن؟با تلگرام بیزنس شما میتونین یه جورهایی یه دستیار و منشی ساده برای پاسخگوئی سریعتر به مشتریها روی اکانتتون داشته باشید.باهاش میشه زمان باز بودن فروشگاه یا کسب و کارتون رو مشخص کنید.یک پیام پیش فرض تنظیم کنید که اگه توی تایم کاری نبودید برای افراد ارسال بشه و مثلا بگه در حال حاضر فروشگاه تعطیله.یک پیام پیش فرض برای مواقعی تنظیم کنید که فروشگاه فعاله ولی شما پای سیستم نیستید یا سرتون شلوغه (away message).لوکیشن فروشگاهتون روی گوگل رو به مخاطبا نمایش بدید.پاسخهای سریع تعریف کنید برای مواقعی که کاربرها سوالات تکراری زیادی دارن و نمیخواین هر دفعه یک جواب تکراری مثل شماره کارت، آدرس و... رو تایپ کنین.علاوه بر موارد بالا، جدیدا یک قسمت دیگه هم به این بخش اضافه شده که بحث امروز ما هستش و میتونین باهاش یک ربات تلگرامی هم به اکانتتون وصل کنید تا کارها بصورت اتوماتیک انجام بشن. یعنی جدای از موارد بالا که توسط خود تلگرام مدیریت میشه، میتونین یه ربات بسازین و مثلا براش تعریف کنید که اگه کاربر کلمه محصولات رو فرستاد، به API فروشگاهتون وصل بشه و لیست محصولات موجود رو بهش نشون بده و هر کار دیگه ای که قبلا با رباتهای عادی انجام میشد رو الان با یک اکانت واقعی جوری انجام داد که حتی کاربر متوجه نشه با ربات در ارتباطه یا یک پشتیبان انسانی واقعی! اونم بدون اینکه یوزر نیاز داشته باشه جای خاصی رو اجبار استارت بزنه.چطور ربات رو به اکانت تلگرامیمون وصل کنیم؟اول از همه و در حال حاضر و موقع نوشتن این مقاله، برای فعالسازی این بخش باید حتما اشتراک پریمیوم داشته باشید.مورد دوم، یک ربات تلگرامی از قبل باید با @BotFather بسازید.بعد از انجام دو مورد بالا، به بخش تنظیمات تلگرام برید و گزینه Telegram Business رو پیدا کنید و واردش بشید.توی بخش تلگرام بیزنس، اسکرول کنید و گزینه chatbots رو پیدا کنید و بعد از باز شدن این قسمت، یوزرنیم رباتتون رو بنویسید تا اونجا اسمش نمایش داده بشه و بعد روی add کلیک کنید.و در نهایت از همین قسمت، گزینه bot permission رو پیدا کنید و تیک گزینه reply to messages رو فعال کنید تا ربات بتونه به چتها جواب بده.فعلا و برای اینکه رباتها اسپم نکنن از طریق اکانتها، فقط میشه به افرادی پیام داد که توی 24 ساعت اخیر فعال بودن و با شما ارتباط برقرار کردند.این یک آموزش و آشنایی کوتاه بود از این مورد که دوست داشتم بهش اشاره ای بشه تا وب فارسی هم از این موضوع خالی نباشه. من احتمالا توی روزها و هفته های آینده یکی از اولین رباتهای دستیار کسب و کاری تلگرام رو بنویسم و معرفی کنم.کانال تلگرامی:https://t.me/howCreateBotکانال یوتیوب من:https://www.youtube.com/@PhpBaMohsenصفحه رسمی معرفی تلگرام بیزنس و امکاناتش:https://telegram.org/blog/telegram-business/</description>
                <category>Mohsen</category>
                <author>Mohsen</author>
                <pubDate>Sat, 13 Jul 2024 11:55:24 +0330</pubDate>
            </item>
                    <item>
                <title>آموزش قدم به قدم برنامه نویسی رباتهای تلگرامی</title>
                <link>https://virgool.io/@mohsen322/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%82%D8%AF%D9%85-%D8%A8%D9%87-%D9%82%D8%AF%D9%85-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D8%B1%D8%A8%D8%A7%D8%AA%D9%87%D8%A7-%D8%AA%D9%84%DA%AF%D8%B1%D8%A7%D9%85%DB%8C-bz3mu9y6zqzr</link>
                <description>سلام به همه. بعد از یه وقفه حدودا شاید 2 ساله دوباره برگشتم تا این مطلب رو توی ویرگول اعلام کنم که، در حال ضبط و آموزش یک دوره مقدماتی PHP روی بستر یوتیوب و تلگرامم که اگه دوست داشته باشید میتونین ازش استفاده کنید.توی این دوره هدفم اینه مقدمات پی‌اچ‌پی و مواردی که مورد نیاز هست برای نوشتن رباتهای تلگرامی با PHP رو اول بهتون یاد بدم و بعد برم سراغ پوشش کامل داکیومنت رسمی تلگرام و شروع کدنویسی و نوشتن رباتها.پس اگه هیچ تجربه ای توی کدنویسی ندارید، این دوره آموزشی برای شما هست و به هیچ‌وجه از دستش ندینش.آدرس کانال: https://www.youtube.com/@PhpBaMohsen</description>
                <category>Mohsen</category>
                <author>Mohsen</author>
                <pubDate>Tue, 16 Jan 2024 10:37:40 +0330</pubDate>
            </item>
                    <item>
                <title>ساخت استیکر متحرک ویدئویی تلگرام با استفاده از FFMpeg</title>
                <link>https://virgool.io/@mohsen322/how-create-telegram-video-sticker-with-ffmpeg-and-windows-powershell-lhg3j8hb2akk</link>
                <description>درود. اگه پیگیر تلگرام و اخبار بروزرسانیهاش باشید، حتما میدونید که از نسخه 8.5 این نرم افزار به بعد، یک قابلیت جدید به نام استیکر ویدئویی (https://core.telegram.org/stickers#video-stickers) اضافه شده که میشه باهاش ویدئوهای جالب رو بجای تبدیل کردن به گیف (جِف) تبدیل به یک پک استیکر کرد.برای ساخت پک استیکر ویدئویی نیاز هست که این شروط برقرار باشه:One side of the sticker must be exactly 512 pixels in size – the other side can be 512 pixels or less. | طول و یا عرض ویدئو یکیش باید حتما 512 پیکسل باشه و یکیش میتونه از این مقدار کمتر باشه.Video duration must not exceed 3 seconds. | طول ویدئو برای استیکر نباید بیشتر از 3 ثانیه باشهFrame rate can be up to 30 FPS. | فریم ریت میتونه حداکثر 30 فریم باشهVideo must have a transparent layer (this is no longer required).Video should be looped for optimal user experience. | این مورد لوپ بودن و اجرای مدام خودش انجام میشهVideo size should not exceed 256 KB. | حجم ویدئو نباید بیشتر از 256 کیلوبایت بشهVideo must be in .WEBM format encoded with the VP9 codec. | از کدک گفته شده باید استفاده بشه برای فرمت خواسته شدهVideo must have no audio stream. | و در نهایت ویدئو باید فاقد صدا باشه و میوتش کردما همه این موارد رو به صورت خیلی ساده و با نوشتن چندتا دستور براحتی انجام میدیم. بدون نیاز به هیچ نرم افزار اضافه ای... خب بدون هیچ حرف اضافه دیگه ای میریم سراغ ساخت یه پک استیکر ویدئویی برای تست!شروع: نصب FFMpegاول از همه نیاز دارید که FFMpeg رو روی سیستم عاملتون نصب کنید. FFMpeg یک کتابخونه رایگان، محبوب و معروف کار و دستکاری فرمتهای چندرسانه‌ای - مالتی مدیا هستش (ویدئو، تصویر، صوت و ...). من توی این آموزش کار با نسخه کامند لاین و روی ویندوز رو آموزش میدم و فکر نمیکنم فرق خاصی با لینوکس داشته باشه.خب برید به این آدرس: https://www.ffmpeg.org/download.html و نسخه متناسب با سیستم عاملتون رو نصب کنید یا از طریق کامند گیتهاب، اون رو دانلود کنید.برای نصب FFMpeg آموزش تصویری لینک پائین رو دنبال کنید:https://windowsloop.com/install-ffmpeg-windows-10/#add-ffmpeg-to-Windows-pathبعد از اینکه نصب تموم شد، برای تست اینکه ببینید درست کار میکنه و صحیح نصب شده یا نه برید، توی CMD ویندوز و بنویسید ffmpeg -version و اگه نتیجه ای برگردوند مثل تصویر پائین، یعنی کارها رو درست پیش بردید.حالا یه پوشه جدید هرجائی که دوست دارید ایجاد کنین، یه تیکه ویدئو با فرمت MP4 داخلش کپی کنین و اسمش رو بذارید input. یعنی در نهایت اسم فایل اصلی باید input.mp4 بشه، و بعد با استفاده از دستور پائین، 3 ثانیه از ویدئوی خودتون رو از هرجائیش که دوست داشتید جدا کنید.برای نوشتن دستور تو همون پوشه شیفت رو نگه دارید، کلیک راست کنید و بعد بزنید روی گزینه Open PowerShell windows here و بعدشم دستور پائین رو کپی پیست کنید (من از ویندوز 10 استفاده میکنم و نمیدونم پاورشل برای ویندوزهای نسخه پائینتر نصب هست یا نه، اگه نبود از خود CMD استفاده کنین). برای پیست شدن کد کپی شده توی پاورشل، کافیه دکمه کلیک راست رو یه بار بزنید تا پیست بشه:// trim to 3 second videoffmpeg -i input.mp4 -ss 00:26 -to 00:29 -c:v libx264 -crf 30 trim.mp4فکر میکنم کد دستوری بالا واضح باشه ولی بازم توضیح میدم:نام input.mp4، اسم فایلی هست که قراره یه تیکه 3 ثانیه ای ازش جدا بشه. و اون 00:26 و 00:29 هم زمان شروع و پایان سه ثانیه مد نظرمونه پس باید اینا رو با توجه به کلیپ خودتون عوضش بکنید و در نهایت اون trim.mp4 آخر هم میشه اسم فایل جدید و جدا شده 3 ثانیه ای که بعد از اجرای دستور، بهتون تحویل داده میشه. اینجا به اف‌اف‌امپگ میگید که از ثانیه 26 تا 29 فایل Input.mp4، رو جدا کن و با اسم trim.mp4 برام تو همین پوشه جاری ذخیره کن.حالا برای مرحله دوم با استفاده از دستور پائین، صدای ویدئوی مرحله قبلی که اسمش شده trim.mp4 رو حذف میکنیم://remove audio from videoffmpeg -i trim.mp4 -c copy -an no_voice.mp4برای مرحله بعد یعنی مرحله سوم، با استفاده از دستور پائین، سایز ویدئو رو به سایز استاندارد ویدئو استیکر تغییر میدیم://resize video with good quailtyffmpeg -i no_voice.mp4 -vf scale=512:346 -preset slow -crf 18 resize.mp4و در نهایت با استفاده از دستور آخر، اون رو به فرمت مناسب استیکر ویدئویی یعنی .WEBM و کدک VP9، تبدیل میکنیم:// VP9 codecffmpeg -i resize.mp4 -c:v libvpx-vp9 -c:a libopus final_output.webmبعد از انجام این مراحل، توی پوشه شما باید یک فایل نهائی 3 ثانیه ای به اسم final_output.webm (تصویر بالا) ایجاد شده باشد. اگر ایجاد نشده یک جای کار رو درست انجام ندادین.مرحله دوم، آپلود فایل برای ساخت استیکر در ربات:حالا که فایلمون ایجاد شد برید به ربات رسمی ساخت استیکر در تلگرام یعنی @Stickers. ربات رو باز کنید و از بین گزینه های اون، گزینه جدید /newvideo رو انتخاب کنید. اینجا ازتون میخواد که یه اسم برای پک خودتون وارد کنید. مثلا بزنید VideoStickerPack. بعد ازتون میخواد که فایل ویدئوییتون که با فرمت .webm ساختید رو براش بفرستین که قاعدتا باید این کار رو انجام بدید! بعد اگه همه چی اوکی باشه از لحاظ سایز، فرمت و ...، میگه یه شکلک بفرستید تا ست بشه روی استیکری که ساختین اونم بفرستید و در نهایت بزنید روی گزینه /publish تا کار ساخت اولین استیکر ویدئوییتون تموم بشه و بتونید توی چتها ازش استفاده کنید.البته بعد از زدن پابلیش یه سری سوالات دیگه مبنی بر اینکه لینک پکتون باید چی باشه و ... هم میپرسه که اولی رو میتونین skip کنید (این مربوط میشه به ارسال یه پیش نمایش برای پک استیکر که سایز 100*100 باید باشه) و گزینه بعدی باید یه یوزرنیم برای پک وارد کنید که اختصاصی باشه و میشه لینک دسترسی به پک برای ارسال تو گروهها و به اشتراک گذاری با بقیه ... تصویر پایین.خب امیدوارم که لذت برده باشید و شروع کنید به ساخت پک استکیرهای ویدئویی خفن! اگه سوالی داشتید همینجا کامنت بذارید، اگرم پکی ساختید با استفاده از این آموزش، لینکشو بذارید باز همینجا ببینیم! مخلص.راستی آدرس کانال آموزشیم اینه: @howCreateBotو ببخشید که این آموزش مثل آموزشای قدیم با حوصله نوشته نشده، چون واقعا فرصت و حوصله سابق نیست ولی دوست داشتم اینو آموزش بدم. خوش بگذره.</description>
                <category>Mohsen</category>
                <author>Mohsen</author>
                <pubDate>Thu, 02 Jun 2022 13:34:57 +0430</pubDate>
            </item>
                    <item>
                <title>چطور یک ربات وب‌اپ در تلگرام راه‌اندازی کنیم؟</title>
                <link>https://virgool.io/@mohsen322/how-create-webapps-telegram-bot-wlieau20en42</link>
                <description>همونطور که احتمالا میدونید، به نقل از خود تلگرام، یک انقلاب توی بحث رباتهای تلگرامی ایجاد شده و این شرکت توی مسنجرش از یک نمونه جدید ربات رونمائی کرده که بر خلاف نمونه های قبلی که ظاهر خیلی خشکی دارن، میشه مثل برنامه های اندرویدی، با استفاده از HTML, CSS و جاوااسکریپت، یک وب ویو در داخل خود تلگرام باز کرد و همزمان به اطلاعات کاربری که ربات رو استارت کرده هم دسترسی داشت!نمونه اولیه ای که خود تلگرام معرفی کرده تا کاربرها با این نوع رباتها آشنا بشن، یک ربات با نام @DurgerKingBotه که دموی یک فروشگاه آنلاین سفارش دهی غذا هستش. (توجه داشته باشید که باید تلگرامتون بروزترین نسخه موجود باشه تا از رباتهای جدید پشتیبانی کنه و اینکه در حال حاضر نیاز هست که وی پی ان استفاده کنید تا فضای وب ویوی مربوط به رباتها باز بشه براتون).فضای ربات سفارش غذا که خیلی شکیل و عین یک اپ مستقله!لُب مطلب...از اونجا که این مدل ربات فقط چند روزی هست معرفی شده، هیچ منبع فارسی برای آموزش ساختش و یا حتی نمونه کدی وجود نداره. به همین خاطر من توی کانالم چند نمونه کد قرار دادم و از این طریق اطلاع رسانی میکنم تا اگر کسی علاقمند هست و نمیدونه از کجا شروع کنه، جائی برای استارت کار داشته باشه. لینک نمونه کدها:https://t.me/HowCreateBot/653https://t.me/HowCreateBot/654لینک سایت رسمی معرفی رباتهای جدید و نحوه راه اندازی:https://core.telegram.org/bots/webappsموفق باشید</description>
                <category>Mohsen</category>
                <author>Mohsen</author>
                <pubDate>Wed, 20 Apr 2022 20:44:22 +0430</pubDate>
            </item>
                    <item>
                <title>آموزش ماینینگ تُن‌کوین،ارز دیجیتالی تلگرام با ویندوز و لینوکس!</title>
                <link>https://virgool.io/@mohsen322/how-to-mine-ton-coin-with-windows-and-linux-wmjjtwywpwen</link>
                <description>ton coin mining tutorialدرود . از اونجائی که وقت اجازه نمیده و حوصله هم مثل سابق یاری نمیکنه(!)، من بنا رو میذارم روی این که شما یه اطلاعات کلی در مورد واژه های بلاکچین، رمز ارز، کوین، ماینینگ، ماینر و ... دارید و به همین خاطر سریع میرم سر اصل مطلب.تُن‌ یا TON، مخفف کلمات The Open Network هستش و سال 2018 توسط برادران دروف که مالک تلگرام هستن طراحی و ساخته شده و طبق گفته خودشون نسل سوم بلاکچینهای مبتنی بر proof-of-stake یا اثبات سهام هستش. این شبکه در ابتدا برای بکار گیری سرویس بلاکچین روی بستر تلگرام و کوین دیجیتالی تلگرام به نام GRAM طراحی شد ولی به دلیل مشکلات حقوقی و رای دادگاه یکی از ایالتهای آمریکا، فعالیتش متوقف شد و چند سال بعد مالکیت معنویش به گروهی از توسعه دهنده ها رسید که در حال حاضر با نام ton coin و با سایت رسمی ton.org دارن فعالیت میکنن و علیرغم اینکه گفته میشه مستقلن، بنظر من زیر نظر غیر مستقیم تلگرام هستند. چون چند وقت پیش خود دروف توی کانالش ازشون حمایت کرد و براشون آرزوی موفقیت کرد و توی تبلیغات تلگرامی هم کم براشون نمیذازه! بگذریم...شروع کاربرای شروع کار ماینینگ، ما به دو روش میتونیم این کار رو انجام بدیم. روش اول مستقیم و روش دوم پیوستن به یک حوض ماینینگ یا Mining Poolه که من روش دوم رو میخوام توضیح بدم. روش اول طبعا هزینه بیشتری برای شروع در بر میگیره و باید سخت افزار پیشرفته ای تهیه کنید و بعد شروع کنید به ماین کردن و قاعدتا سود بیشتری هم در دراز مدت نصیبتون میشه. ولی این روش دانش و مهارت بیشتری میطلبه.اما روش دوم: از اونجائی که قدرت سیستم شما اضافه میشه به بقیه سیستمها و تشکیل یک حوض ماینینگ میدن با هر سخت افزاری میشه گفت امکان پذیره و راه اندازیش هم خیلی خیلی راحتتره. در حال حاضر تن کوین هم با قدرت CPU و هم قدرت گرافیک یا GPU قابلیت ماینینگ رو داره.اگر روش اول مد نظر شماست، میتونید از طریق لینک پایین، جزئیات مربوط به سخت افزار مورد نیاز و توضیحات بیشتر برای نحوه راه اندازی ماینر رو مطالعه کنید.https://ton.org/docs/#/howto/miningروش دوم، ماینیگ تن کوین از طریق پیوستن به استخر ماین تن کوینبرای این کار اول باید یک والت یا همون کیف پول دیجیتالی داشته باشید. برای ساخت کیف پول ton coin برید به این آدرس: https://ton.org/walletsبر اساس نیاز و به دلخواه یکی از اپهای تحت ویندوز یا موبایل (android, ios) رو انتخاب، دانلود و نصب کنید و خیلی ساده یه دونه کیف پول با یه آدرس یکتا مثل EQAq3mvVfdsfSDgdfgASRFERdfdfsfd_C9Z- c_pPWbzBoIV تحویل بگیرید.موقع ساخت کیف بهتون 24 تا کلمه کلیدی داده میشه که حتما باید اونو یه جای امن ذخیره کنید تا اگه بعدا احیانا رمزتو ورودتون فراموش شد از این طریق بتونید بازیابیش کنید. توجه داشته باشید که این کلیدها نباید دست هیچکسی بیفته!نمونه کلیدهای محرمانه والت تن کوینبعد از ساخت کیف پول و دریافت آدرس، برید به این لینکhttps://github.com/TON-Pool/miner/releases و با توجه به نوع سیستم عاملتون، یکی از نسخه های نرم‌افزار ماینینگ رو دانلود و جایی از هاردتون از حالت فشرده خارج کنید.بعد از اینکار، این دو فایل رو باید توی پوشه برنامه به شکل زیر مشاهده بکنید:حالا برای شروع ماینینگ روی ویندوز و لینوکس، کافیه کنسولتون رو باز کنید که یا همون cmd قدیمیه و یا powershell جدید ویندوز. برای این کار توی پوشه برنامه ماینر، دکمه شیفت رو نگه دارید و کلیک راست کنید و بعد بزنید روی گزینه powersell تا برنامش باز بشه. بعد از باز شدن برنامه، خط کد پایین رو داخلش کپی کنید و اینتر بزنید. اگر همه چی درست باشه ماینینگ تن کوین شروع میشه و شما هم میپیوندین به جمع بقیه ماینرهای حوض ماینینگ! (تصویر پایین)./miner-windows.exe https://next.ton-pool.com your_walletبه جای کلمه your_wallet باید آدرس کیف پولی که اول آموزش ساختید رو جایگزین کنید.شروع عملیات ماینینگ تن کوین!اگر دیدین مشکلی پیش اومد، آدرس بالا رو با https://next.ton-pool.club عوض کنید و دوباره امتحان کنین.حالا اگر سیستمتون رو به حال خودش بذارید برای ساعتها و روزهای متوالی، قاعدتا باید مقداری تن کوین نصیبتون بشه بخاطر شرکت در عملیات ماین! برای مشاهده میزان ماینتون هم میتونید برید توی این ربات https://t.me/next_ton_pool_bot و آدرس کیف پولتون رو وارد کنید تا بدونید آیا تونستین چیزی کاسبی کنین یا خیر :))این آموزش بر اساس محتوای این سایت https://ton-pool.com/#miners نوشته شده.موفق و پیروز باشید.نکته نهائی: از اونجایی که من خودم تستس دراز مدت نکردم، نمیدونم مقدار پولی که از این روش میتونین بدست بیارید بصورت ماهانه یا روزانه چقدر خواهد بود. هر تن کوین در حال حاضر حدود 3.5 دلار هستش و اگر کسی درازمدت تر تست کرد یا قبلا انجام داده، کامنت بذاره بی زحمت.یه حوض دیگه هم اینجاست که میتونید در صورت تمایل بهش سر بزنید و مسیر راه اندازیش رو بخونید:https://github.com/toncoinpool/stratum-miner#usage</description>
                <category>Mohsen</category>
                <author>Mohsen</author>
                <pubDate>Wed, 05 Jan 2022 13:36:21 +0330</pubDate>
            </item>
                    <item>
                <title>نوشتن کوئریهای تو در تو با MySQL</title>
                <link>https://virgool.io/@mohsen322/mysql-nested-subquery-multiple-count-szwzo4eylfbh</link>
                <description>بعضی وقتها پیش میاد که شما نیازمند دونستن تعداد ردیفهای چند جدول از دیتابیس برا نمایش اطلاعات به کاربرهای فرانت عند و یا مثلا تولید چارت بخش گزارشها برای مدیران یک شرکت هستید.شاید برای اینچنین موقعیتی اولین فکری که به ذهن خطور کنه این باشه که به تعداد نیازی که دارید یک درخواست به سرور بفرستید و از دیتابیستون موارد مورد نیاز رو دریافت کنید.خوشبختانه زبان ساخت یافته SQL برای این کار راه حل سریعتری به نام SubQuery داره و میشه باهاش با نوشتن یک کوئری واحد، چند نتیجه رو با هم از یک یا چند جدول متفاوت دریافت کرد.مثلا برای دریافت اطلاعات تصویر بالا که شامل نمایش تعداد پرسنل، تعداد دستگاه، تعداد ابزارآلات و تعداد جرائم هست، به جای نوشتن 4 کوئری جدا جدا، به شکل زیر و با یک کوئری میشه نتیجه دلخواه رو بدست آورد:SELECT  ( SELECT COUNT(*) FROM users) AS users_count,            ( SELECT COUNT(*) FROM tools) AS tools_count,
            ( SELECT COUNT(*) FROM crimes) AS crimes_count,
            ( SELECT COUNT(*) FROM vehicles) AS vehicles_countبه کوئریها میشه شرط هم اضافه کرد تا نتایجش دقیقتر بشه. مثلا کوئری زیر تعداد رنگهای قرمز، آبی و زرد توی جدول table رو بهمون برمیگردونه:SELECT(
    SELECT COUNT(*) FROM table WHERE color = &#039;YELLOW&#039;,
    SELECT COUNT(*) FROM table WHERE color = &#039;BLUE&#039;,
    SELECT COUNT(*) FROM table WHERE color = &#039;RED&#039;
);با ساب‌کوئری کدهای جالب و پیچیده تری رو میشه نوشت که برای درک بهتر و دیدن مثالهای بیشتر میتونید یه سرچ کوچیک در موردشون داشته باشید!امیدوارم مفید بوده باشه.</description>
                <category>Mohsen</category>
                <author>Mohsen</author>
                <pubDate>Fri, 01 Oct 2021 10:51:07 +0330</pubDate>
            </item>
                    <item>
                <title>آشنایی با مفهوم حلقه‌ها در PHP - کار با حلقه FOR</title>
                <link>https://virgool.io/@mohsen322/php-for-loop-how-to-use-drqsnrmfx5tt</link>
                <description>درود؛ توی این آموزش میخوام بهتون مفهوم حلقه رو آموزش بدم. تا اینجای کار، با آرایه ها، دستورات شرطی، متغیرها و ثابتها آشنا شدید و با فرض اینکه مفاهیم قبلی رو یاد گرفتید آماده اید برا اینکه کار با حلقه ها هم یاد بگیرید.حلقه همونجور که از اسمش مشخصه برای کاری استفاده میشه که چرخشی و تکراری باشه. در واقع مثلا اگر یک مسیر دایره ای رو در نظر بگیرید و شروع به راه رفتن روی اون بکنید میبینید که یک مسیر مشخص رو همینجور دارید هی طی میکنید تا زمانی که تصمیم بگیرید این کار رو به هر شکل دیگه انجام ندید!بهترین راه آموزش، همیشه مثال زدنه؛ پس با یه مثال شروع میکنم. فرض کنید با برنامه نویسی میخواین عدد 1 تا 100 رو نمایش بدید. یه آدم تازه کار شروع میکنه برای هر عدد دونه دونه یه دونه دستور اکو مینویسه و عدد مورد نظرش هم جلوش میذاره به شکل زیر:echo 1;echo 2;echo 3; ....ولی خب بنظرتون این کار منطقیه؟  اگه گفتن تا 100هزار چی؟! برای یه تازه کار شاید آره، ولی برای ما نه!.اینجاست که مفهوم حلقه به دادمون میرسه و همیشه اینو در نظر داشته باشید که: هر وقت یک کار تکراری رو مجبورید انجام بدید فکرتون باید بره به سمت حلقه ها.آشنایی با حلقه FORمثال بالا رو در نظر بگیرید. اگه ما بخوایم عدد 1 تا 100 رو نمایش بدیم باید به این شکل از حلقه فور استفاده کنیم:for($index=1; $index &lt;= 100; $index++)echo $index;پس اول کلمه کلیدی FOR رو مینویسیم و بعد () و توی پرانتز باز و بسته، یه متغیر به اسم ایندکس (یا هر اسم دلخواهی) تعریف میکنیم که مقدار اولیش رو گذاشتیم 1 و بعد سمی کالن. بعد از سِمی کالُن شرطمون رو تعریف کردیم و گفتیم این کار تا زمانی تکرار بشه که شرط برقراره؛ یعنی تا زمانی که عدد برسه به 100 و در نهایت دستور $index++ رو داریم که این معادل دستور $Index+1 هستش و به این معنیه که به ازای هر بار اجرای دستور چاپ عدد، بعدش یه دونه به مقدار قبلی اضافه کن. چون اگه این کار رو نکنیم حلقه به درستی اجرا نمیشه.ترتیب اجرای حلقه FOR به این صورته:حلقه سه تیکه داره. تیکه اول یعنی مقداردهی اولیه (index=1) بار اول و فقط به بار اجرا میشه؛ پس بار اول متغیر index مقدارش میشه 1. بعد شرط جلوش بررسی میشه یعنی تیکه دوم؛ و چون 1 از 100 کوچیکتره میره 1 رو با دستور اکو چاپ میکنه و بعد برمیگرده تیکه سوم حلقه رو اجرا میکنه و 1 دونه اضافه میکنه به مقدار ایندکس فعلی، که مقدار ایندکس از 1 تبدیل میشه به 2.از این لحظه به بعد، کامپایلر PHP که کدها رو تفسیر میکنه با بخش اول که کارش مقداردهی هست کاری نداره و هی مدام بخش 2 و 3 رو اجرا و میکنه و اینجا دیگه عملا داره حلقه اجرا میشه که در واقع کد میفته توی یه LOOP و یک تکرار. خب گفتیم که مقدار ایندکسمون شد عدد 2، و چون از هنوز کار تموم نشده دوباره بخش دوم حلقه چک میشه که ببینه آیا عدمون از 100 کمتره یا نه و چون کمتره شرط برقرار میشه مجدد و عدد 2 هم چاپ میشه. بعد چاپ و اجرا، باز یه دونه اضافه میشه به ایندکس (اجرای قسمت سوم) که مقدار ایندکس میشه 3 و همینجور الی آخر تا برسه به 100. وقتی مقدار ایندکس شد 100 دوباره چاپ میشه و عدد بعدیش میشه 101 و اینجا توی چک کردن شرط حلقه، چون عدد کمتر و یا مساوی با 100 نیست، حلقه به پایان میرسه.نتیجه اجرای کدهای بالا برای نمایش اعداد 1 تا 10مثال دوم: ترکیب حلقه و شرطخب حالا فرض کنید به ما گفتن اعداد زوج بین 1 تا 100 رو نمایش بدید. باید چیکار کنیم؟ بخش قبلی که چاپ و نمایش اعداد 1 تا 100 بود رو نوشتیم و آماده داریم؛ پس حالا کافیه بیایم یه شرط اضافه کنیم بهش که اعداد زوج رو تشخیص بده. عدد زوج به عددی میگن که به 2 بخش پذیر باشه؛ پس کدهای جدید به شکل زیر میشن:for($index=1; $index &lt;= 100; $index++){
      if($index % 2 ==0)           echo $index;
}قبلا بهتون گفته بودم که از علامت % برای تشخیص باقیمانده یک تقسیم استفاده میشه و توی کد بالا چک میکنه که اگر عدد ایندکس تقسیم بر 2 باقیماندش 0 شد یعنی زوجه و نشونش میده و خروجیش میشه عددهای2 -4-6-8-10 و الی آخر تا 100.کد بالا رو میتونین از طریق این آدرس تست کنید و نتیجه رو ببینید: https://sandbox.onlinephpfunctions.com/خب اینم از این و امیدوارم خوشتون اومده باشه و یاد گرفته باشیدش.</description>
                <category>Mohsen</category>
                <author>Mohsen</author>
                <pubDate>Wed, 26 May 2021 22:47:28 +0430</pubDate>
            </item>
                    <item>
                <title>آشنائی با مفهوم آرایه ها در PHP</title>
                <link>https://virgool.io/@mohsen322/what-is-arrays-in-php-and-how-to-use-hn5pcmi1xn0f</link>
                <description>توی این مطلب میخوایم بدونیم که آرایه ها چی هستن و توی برنامه نویسی چه کاربردی دارند. تو آموزشای قبلی یاد گرفتید که چطور متغیر تعریف کنین. برای تعریف متغیر ما میومدیم یه اسم انتخاب میکردیم که با علامت $ شروع میشد و از یه سری قوانین هم پیروی میکرد؛ مثلا اسم متغیر نمیتونه با عدد شروع بشه و ....یه نمونه از تعریف متغیرها میتونه این دو مورد باشن: $name = &amp;quotALI&quot;$age = 30;که اولی متغیری از نوع رشته ایه و یه اسم داخلشه با مقدار ALI و دومی متغیری از نوع عددیه که سن فرد رو اونجا ذخیره کردیم.اما بعضی وقتا حالتهایی پیش میاد که بجای یه دونه مقدار، به چندین مقدار مشابه (از یک نوع) نیاز داریم و به صرفه نیست برای هر کدوم از اون مقادیر یه متغیر جداگونه تعریف کنیم. مثلا برای نمایش اسم فصلها، یا اسامی روزهای هفته ما نباید بیایم به ازای هر فصل بهار، تابستان، پاییز و زمستان یا 7 روز هفته یه متغیر تعریف کنیم و اینجاست که آرایه ها به دادمون میرسند.از آرایه ها برای ذخیره سازی یک یا چند مقدار معمولا هم نوع تحت یک نام استفاده میشه.خب حالا همون مثال فصلها رو اگر بخوایم به شکل آرایه تعریف کنیم به این صورت عمل میکنیم:$season = array(&#039;spring&#039;, &#039;summer&#039;, &#039;autumn&#039;, &#039;winter&#039;);یعنی مثل همون تعریف متغیرها اول یه اسم بهش میدیم، بعد علامت = و بعد کلمه array با تلفظ اِرِی و در نهایت پرانتز باز و بسته و حالا با توجه به نوع مقادیرمون (رشته ای، عددی و ...)، اونها رو توی آرایه به شکل بالا مینویسیم و با علامت کاما از هم جدا میکنیم. اینجوری اسم این 4تا فصل تحت یه نام مشترک در اختیارمون قرارمیگیره.آرایه بالا رو بهش میگن آرایه با اندیس عددی و 4 تا مقدار یا خونه داره و اسمش هم برای دسترسی بهش میشه همون $season. حالا اگه بخوایم به مقدار spring که معنیش بهاره و فصل اول هر سالی هستش دسترسی داشته باشیم و چاپش کنیم باید چیکار کرد؟توی پی اچ پی بصورت پیش فرض، شماره خونه آرایه های عددی از صفر شروع میشن و میرن جلو؛ به این شماره اصطلاحا میگن اندیس یا ایندکس (Index)؛ یعنی شماره جا و موقعیت مکانی هر مقدار توی آرایه و به ترتیب پشت هم قرار دارن.مثل یک صف در نظر بگیریدش. آرایه ها در واقعا خونه های پشت سرهمی هستن که توی حافظه قرار دارند. پس اگه بگیم خونه اول یا خونه 0 از آرایه $season انگار گفتیم spring. یا اگه بگیم خونه دوم یا خونه شماره 1 آرایه بالا، انگار گفتیم summer و برای دسترسی بهش از طریق کدنویسی به شکل زیر عمل میکنیم.echo $season[0]; // springecho $season[1]; // summerامیدوارم تا اینجای کار متوجه شده باشید. چندتا مثال دیگه میزنم تا خوب یاد بگیرید.اگه بهمون بگن آرایه عددهای زیر 10 رو درست کن باید چیکار کنیم؟ جواب خط کد زیر:$numbers_less_than_ten = array(1,2,3,4,5,6,7,8,9);یه شکل دیگه هم میشه نوشت:$numbers_less_than_ten = [1,2,3,4,5,6,7,8,9];یعنی بجای استفاده از array() کافیه مقادیرمون رو بذارمون وسط دوتا بَریکِید (barricade). [ و ]انواع آرایه هابه جز مدل اندیس عددی، که ساده ترین حالت آرایه ها هستش، ما دو مدل دیگه آرایه داریم که یکیش بهش میگن آرایه تجمعی یا انجمنی - Associative Arrays و دومی هم آرایه چندبعدی یا Multidimensional Arrays. یادگیری این دوم مدل فعلا لزومی نداره و در حد آشنایی بهش اشاره میکنم و اگر آینده لازم شد توضیحات بیشتری داده میشه.در آرایه تجمعی، میشه به هر موقعیت مکانی مقادیر درون آرایه، که به صورت پیشفرض برای دسترسی بهشون از اونها استفاده میکردیم، یه اسم داد و دیگه از اعداد استفاده نکرد. چطوری؟ مثال:$season = [&#039;spring&#039;, &#039;summer&#039;, &#039;autumn&#039;, &#039;winter&#039;];که مدل ساده بالا اگه بخواد به نوع تجمعی تغییر داده بشه اینطوری میشه:$season = [&#039;fasl_1&#039; =&gt; &#039;spring&#039;, &#039;fasl_2&#039; =&gt;  &#039;summer&#039;, &#039;fasl_3&#039; =&gt; &#039;autumn&#039;, &#039;fasl_4&#039; =&gt; &#039;winter&#039;];و برای نمایش و چاپ هر فصل دیگه بجای شماره خونه از اون اسمی که براش گذاشتیم استفاده میکنیم. مثلا برای نمایش بهار باید اینو بنویسیم.echo $season[&#039;fasl_1&#039;]; // springیا فرضا اگه یه آرایه از حقوق پرسنل یه شرکت رو داشته باشیم، میایم جلوی هر نفر حقوقش رو میذاریم تا بعد راحت بشه حقوقش رو بر اساس اسم نمایش داد. مثال:$hoghoogh = [&#x27;ali&#x27; =&gt; 10000, &#x27;ahmad&#x27; =&gt; 40000, &#x27;arash&#x27; =&gt; 33000, &#x27;mina&#x27; =&gt; 29000];و برای نمایش حقوق علی، کافیه بنویسیم:echo  $hoghoogh[&#039;ali&#039;];نوع سوم هم که آرایه های چندبعدیه، که میشه یک آرایه که مقادیرش هم خودشون از نوع آرایه هستن. در واثع آرایه ای از آرایه ها. یه نمونه از مثالهاش میتونه تعداد روزهای هر ماه از سال باشه. این مدل فعلا یادگیریش مهم نیست چون ممکنه گیج و سردرگمتون کنه و ما اکثرا از نوع اول استفاده میکنیم آینده.$months = [1 =&gt; [1,2,3,4,5,6,7,8,9...30],
2 =&gt; [1,2,3,4,5,6,7,8,9...29],
3 =&gt; [1,2,3,4,5,6,7,8,9...31],...];و برای مثلا دسترسی به روز پنجم از ماه سوم باید همچین چیزی بنویسیم:echo $months[1][4]; //
عدد 4 به این خاطره که آرایه ها از 0 شروع میشن پس یکی از 5 کم شد.خب اینم از این، امیدوارم براتون جا افتاده باشه. تو مبحث بعدی که حلقه ها هستن از این آرایه ها زیاد استفاده میکنیم. شاد باشید</description>
                <category>Mohsen</category>
                <author>Mohsen</author>
                <pubDate>Fri, 14 May 2021 23:43:23 +0430</pubDate>
            </item>
                    <item>
                <title>آشنائی با دستور سوئیچ در PHP</title>
                <link>https://virgool.io/@mohsen322/php-how-to-use-switch-condition-js1hosfbzg48</link>
                <description>آموزش قبلی در مورد دستور if-else بود و یاد گرفتید چطور با پی اچ پی شرط بنویسید و شرایط رو کنترل کنین.توی این آموزش جدید و کوتاه به معرفی عبارت سوئچ یا همون SWITCH میپردازیم. این عبارت شبیه به ایف الس هستش ولی نحوه نوشتنش متفاوت و تقریبا کوتاه تره. معمولا از سوئیچ مواقعی استفاده میشه که برنامه نویس میخواد خوانائی برنامه رو بیشتر کنه و شرطها زیاد پیچیده نیستند. سوئچ رو به این شکل استفاده میکنن:$color = &amp;quotred&amp;quot

  switch ($color)  {
  case &amp;quotred&amp;quot:
  echo &amp;quotYour favorite color is red!&amp;quot
  break;
    case &amp;quotblue&amp;quot:
  echo &amp;quotYour favorite color is blue!&amp;quot
  break;
    case &amp;quotgreen&amp;quot:
  echo &amp;quotYour favorite color is green!&amp;quot
    break;
    default:
  echo &amp;quotYour favorite color is neither red, blue, nor green!&amp;quot
  }که خروجی کدهای بالا بعد از اجرا، بخش اول، یعنی متن  Your favorite color is red! هستش.توی کد بالا گفته شده که اگر هر کدوم از رنگهای قرمز، آبی و یا سبز توی متغیر $color قرار گرفت، متن مورد نظر با توجه به مقدار این متغیر چاپ بشه و در قسمت default هم مشخص میشه که اگر هیچ کدوم از این انتخابها وجود نداشت بنویسه که شما هیچ کدوم از این سه رنگ رو انتخاب نکردین.مثال: از دانش آموزی پرسیده میشه که کلاس چندمه؟ما برای 3 انتخاب کلاس اول، دوم و سوم شرطهامون رو مینویسم و در شرایطی که هیچکدوم از اینها نبود میگیم که پاسخ شما جز موارد ما نیست.اینجا فرض میشه دانش آموز پاسخش این بوده که کلاس سومه.$reply= &amp;quotسوم&amp;quot 

  switch ($reply)  {
  case &amp;quotاول&amp;quot:
  echo &amp;quotشما کلاس اولی!&amp;quot
  break;
    case &amp;quotدوم&amp;quot:
  echo &amp;quotشما کلاس دومی!&amp;quot
  break;
    case &amp;quotسوم&amp;quot:
  echo &amp;quotشما کلاس سومی!&amp;quot
    break;
    default:
  echo &amp;quotانتخاب شما جز گزینه های ما نیست!&amp;quot
  }عبارت default اینجا برابر با قسمت else در شرط نویسی با ایف الس هستش.در واقع، اول کلمه سوئیچ نوشته میشه و بعد آکولاد باز و بسته و بقیه کدها وسط این بلوک نوشته مشین؛ چیزی که میخوایم شرط هم روش بررسی کنیم داخل پرانتز و جلوی سوئچ نوشته میشه.بعد از نوشتن و پایان هر کِیس (به معنای حالت)، کلمه کلیدی بریک BREAK رو حتما باید بنویسیم تا از SWITCH خارج بشیم و بقیه شروط بررسی نشه.کد بالا برابر با کد زیر هستش:
if($reply == &#039;اول&#039;)
echo &amp;quotشما کلاس اولی!&amp;quot
elseif($reply == &#039;دوم&#039;)
echo &amp;quotشما کلاس دومی!&amp;quot
if($reply == &#039;سوم&#039;)
echo &amp;quotشما کلاس سومی!&amp;quot
else
  echo &amp;quotانتخاب شما جز گزینه های ما نیست!&amp;quot
امیدوارم یاد گرفته باشید.</description>
                <category>Mohsen</category>
                <author>Mohsen</author>
                <pubDate>Sun, 09 May 2021 18:46:46 +0430</pubDate>
            </item>
                    <item>
                <title>آشنایی با شرطها در PHP - بخش اول if else</title>
                <link>https://virgool.io/@mohsen322/php-use-if-else-condition-yqykzjizotha</link>
                <description>توی این قسمت از سری آموزشهای صفر تا صد پی اچ پی که میشه قسمت سوم، با مفهوم شرطها آشنا میشید و چندتایی مثال هم در مورد نحوه استفاده ازش میزنم.بخش اول: مقدمهبخش دوم: ثابتهاتوی برنامه نویسی مثل زندگی واقعی اگر بخوایم شرط و شروطی تعریف کنیم، از کلمه اگر استفاده میکنیم. مثلا:اگر حمید بیاد امشب میریم رستوران!اگر ایران این بازی رو ببره میره جام جهانی.اگر نسرین و فاطمه نیومدن به جاش زهرا و عاطفه رو جایگزین میکنیم.اگر شرایط جور باشه 100 میلیون میذارم تو بورس و ...!پس هر وقت شرایطی پیش بیاد که از بین دو یا چندتا چیز بخوایم یکی رو انتخاب کنیم و یا یک کار رو انجام بدیم باید از شرطها استفاده کنیم. ساده ترین و متداول ترین نوع شرط، شرطهائی هستند که با if و با تلفظ ایف نوشته میشن به شکل زیر:&lt;?phpif(شرط) {// کار مورد نظر}?&gt;یعنی اول کلمه کلیدی ایف رو مینویسیم، بعد تو پرانتز شرطمون رو مشخص میکنیم و در صورتی که شرط برقرار باشه اون دستورات توی آکولاد {} جلوی ایف اجرا میشه.مثال: میخوایم شرطی بنویسیم که اگر مقدار متغیرمون برابر با 20 شد کلمه برابر است چاپ بشه. پس کدها به این شکل باید نوشته بشن:&lt;?php$number = 20;if($number == 20) {echo &#x27;Barabar ast!&#x27;;}?&gt;برای تست و اجرای کد بالا مثل همیشه برید به سایت sandbox.onlinephpfunctions.com.توی کد بالا به علامت == میگن اپراتور مقایسه‌ای، و اینجا برای تشخیص مساوی بودن مقدار متغیر number  با عدد 20 به کار برده شده. توی پی اچ پی ما چندین مدل اپراتور داریم که لیستشون رو توی ادامه مطلب آوردم و کمی هم توضیح دادم. دقت کنید من اینا رو اینجا میارم که فقط با شکل و شمایل و کاربردشون بصورت کلی آشنا بشید و نیاز نیست حفظ بشن، ولی ببینیدشون خوبه؛ آینده هرجایی چیز جدیدی گفتم در موردش حتما توضیح میدم.دسته بندی کلی اپراتورها به این شکله: اپراتورهای ریاضی، اپراتورهای انتسابی، اپراتورهای منطقی و اپراتورهای مقایسه ای.اپراتورهای ریاضی، که واضحه و برای عملیاتهای ریاضی مثل جمع و ضرب و تقسیم و ... ازشون استفاده میشه و لیست کاملشون توی عکس پایینه.+ برای جمع- برای تفریق* برای ضرب کردن/ برای تقسیم% برای محاسبه باقیمانده عدداز اپراتورهای انتسابی مثل مثال و کد بالا، برای مقداردهی و یا تغییر مقادیر استفاده میشه. مثلا علامت = که برای تخصیص مقدار عدد 20 به متغیر $number ازش استفاده شد.اپراتورهای مقایسه ای برای مقایسات استفاده میشه، توی مثال اول عدد 20 رو با مقدار ذخیره شده توی متغیر مقایسه کردیم. لیست کامل اپراتورهای مقایسه ای به شکل زیره:و در نهایت اپراتورهای منطقی که کاربرد خاص خودش رو داره و فعلا ما استفاده ای ازشون نداریم.خوب، برگردیم سر بحث اصلیمون که میشد استفاده از شرط if elseتو مثال اول گفتیم اگر عدد ذخیره شده توی متغیر number برابر با 20 بود چاپ کن که برابره، حالا اگه برابر نبود چی؟ طبق کد اول هیچ اتفاق دیگه ای نمیفته و چیزی چاپ نمیشه، ولی اگر بخوایم این حالت رو هم در نظر بگیرم و اصطلاحا هَندل کنیم باید از کلمه کلیدی else و با تلفظ اِلس و به معنای در &quot;غیر اینصورت&quot; استفاده بکنیم. مثال: اگر عدد ذخیره شده کوچکتر از 17 بود جمله کوچکتر است چاپ بشه و در غیر این صورت جمله بزرگتر است.&lt;?php$number = 19;if ($number &lt; 17) echo &#x27;کوچکتر است&#x27;;else echo &#x27;بزرگتر است&#x27;;?&gt;واضح بود؟ اینجا ما از یه اپراتور ریاضی یعنی علامت &gt; استفاده کردیم برای تشخیص کوچک بودن عدد.نکته: وقتی که بعد از شرط جلوی ایف فقط یه خط کد بنویسیم، نیاز به نوشتن آکولاد باز و بسته نداریم {}. ولی اگر تعداد خطوط کدها بیشتر شد باید اونا رو وسط {} بذاریم. برای بعد از کلمه else هم همین شکلیه.مثال دوم: میخوایم برنامه ای بنویسیم که اگه عدد ذخیره شده توی متغیر بر 2 بخش پذیر بود اینو بهمون اعلام کنه و اگر نبود هم بگه که نیست!برای تشخیص اینکه بفهمیم عددی بر 2 بخش پذیره یا نه، باید چک کنیم ببینیم باقیمانده تقسیم اون عدد روی 2 عدد صفر میشه یا نه. مثلا 4 تقسیم به 2 جوابش میشه 2 و باقیمانده هم میشه صفر پس بخش‌پذیره. حالا کداش چطوریه؟&lt;?php$number = 6;if($number % 2 == 0) echo &#x27;بر 2 بخش پذیر است&#x27;;else echo &#x27;بخش پذیر نیست&#x27;;?&gt;تو کد  بالا از اپراتور % استفاده شد که برای گرفتن باقیمانده تقسیم دوتا عدد ازش استفاده میشه؛ اسمش هم اصطلاحا میگن ماد (Modulus).فرقش با اپراتور تقسیم / یا اِسلش اینه که اسلش، عدد خروجی تقسیم رو بهمون میده، ولی % باقیمانده رو برمیگردونه؛ یعنی اگر بنویسیم 8/4 خروجی ما میشه 2 ولی اگر بنویسیم 8%2 خروجی ما میشه 0.نکته مهم: زبانهای برنامه نویسی مثل php از سمت چپ به راست مسائل ریاضی رو حل میکنن. پس تو کد بالا، اول باقیمانده عدد 6 تقسیم بر 2 با استفاده از اپراتور % به دست میاد و بعد باقیمانده با 0 توسط == مقایسه میشه و اگر همه چی درست بود خروجی رو نشون میده که میگه بخشپذیره.تکمیل شرط نویسی و استفاده از elseifاگر خسته نشدین این قسمت رو هم بخونید ولی اگه میبینید دارید گیج میشید، فعلا تا قبل از اینجا رو تمرین کنید و بعد برگردید از اینجا به بعد رو ادامه بدین.بعضی وقتهای توی کدنویسی شراطی پیش میاد که بجای یه شرط باید چندتا شرط رو چک بکنیم. مثلا میخوایم بگیم اگه عدد توی متغیر از 17 کوچکتره، بگو کوچکتر است، اگر برابر با 19 شد بگو برابره و در غیر اینصورت بگو بزرگتره. تو این حالت باید از کلمه کلیدی elseif و با تلفظ اِلس‌ایف استفاده بکنیم. در تکمیل مثال بالا:&lt;?php$number = 19;if ($number &lt; 17) echo &#x27;کوچکتر است&#x27;;if ($number == 19) echo &#x27;برابر است&#x27;;else echo &#x27;بزرگتر است&#x27;;?&gt;خروجی کد بالا شرط دوم یعنی برابریه. حالا یه مثال دیگه؛ میخوایم کد بالا رو تکمیلتر کنیم و 0 بودن هم چک بشه.&lt;?php$number = 19;if ($number == 0) echo &#x27;صفر است&#x27;;elseif ($number &lt; 17) echo &#x27;کوچکتر است&#x27;;elseif ($number == 19) echo &#x27;برابر است&#x27;;else echo &#x27;بزرگتر است&#x27;;?&gt;نکته خیلی مهم: موقعی که از if و elseif استفاده میکنیم، شرطها به ترتیب و از بالا به پایین بررسی و اجرا میشن؛ پس به محض اینکه هر کدوم از شرطها برقرار شد، بقیه شروط اجرا نمیشن و نادیده گرفته میشن. پس در کد بالا شرط == 19 که اجرا شد دیگه سراغ قسمت else نمیره؛کلیدواژه else برای مواقعی استفاده میشه که هیچکدوم از شروطی که نوشتیم برقرار نشه. و میتونیم کلا هم ننویسمش یعنی اختیاریه.خوب امیدوارم که یاد گرفته باشید؛ البته احتمالا یه مقداری هم گُنگ بوده باشه براتون؛ پس اگه مشکل و سوالی داشتین همینجا کامنت بذارید تا راهنمائی کنم.بازم مثل همیشه، تمرین، تمرین و تمرین یادتون نره تا خوب یاد بگیرید و ملکه ذهنتون بشه!</description>
                <category>Mohsen</category>
                <author>Mohsen</author>
                <pubDate>Fri, 02 Apr 2021 21:12:40 +0430</pubDate>
            </item>
                    <item>
                <title>برنامه نویسی PHP از صفر تا صد! - بخش دوم: ثابتها</title>
                <link>https://virgool.io/@mohsen322/what-is-php-constant-and-how-to-use-iiivqpkrxh0r</link>
                <description>توی مطلب آموزشی قبلی با کلیات PHP و مفهوم متغیر و نوع استفاد و تعریفش آشنا شدید. توی این مطلب با یه مفهوم جدید به نام ثابت یا Constant و با تلفظ کانستِنت آشنا میشید.ثابت توی PHP به چی میگن؟قبلا گفتیم که میشه مقادیر متغیرها رو هرچندبار که خواستیم تغییر بدیم؛ مثلا:&lt;?php$variable = 18;$variable = 19;$variable = 20;echo $variable; // 20?&gt;خروجی کد بالا عدد 20ه؛ چرا؟ چون متغیرها اسمشون روشونه و میشه هرچندبار دلمون خواست هی تغییرشون بدیم! یه اصل خیلی مهم که باید از همین حالا بدونین درک طرز کار مفسر کدهای phpه که اصطلاحا بهش میگن کامپایلر یا Compiler. پی اچ پی یک زبان مفسریه؛ یعنی میاد کل خط کدها رو یکجا و از بالا به پایین تفسیر و اجرا میکنه و خروجی نهایی رو تحویل میده و اگه خطائی هم داشت آخر سر نشون میده؛ پس توی کد بالا، بار اول مفسر میاد مقدار متغیر $variable رو 18 قرار میده، بعد میره خط بعد میبینه همون اسم مقدارش شده 19، پس عدد جدید رو جایگزین قبلی میکنه، باز میره خط بعدترش و میبینه همون متغیر با همون اسم بازم مقدار جدیدی گرفته و ایندفعه 20 رو قرار میده توی $variable و در نهایت 20 رو هم توی خروجی نشون میده با دستور اکو.همین حالا برید توی سایت sandbox.onlinephpfunctions.com که تو درس اول معرفیش کردم و کدهای بالا رو اجرا کنید تا قشنگ متوجه بشید.اما فرق ثابتها و متغیرها چیه؟ چطور تعریف و استفاده میشن؟از لحاظ عملکرد فرق خیلی خاصی با متغیرها ندارن؛ قواعد نامگذاریشون هم یکیه، ولی نحوه تعریفشون متفاوته. ثابت توی پی اچ پی اینجوری تعریف میشه:define(&quot;SABET&quot;, &quot;something&quot;);یعنی اولش کلمه کلیدی دیفاین (define) میاد و بعد پرانتز باز و اسم ثابت و آخر سر هم مقدار ثابت به شکل بالا تعریف میشه.از ثابتها برای ذخیره کردن مقادیری استفاده میکنن که توی کدنویسی محتواش تغییر نمیکنه؛ مثلا یوزرنیم و پسورد یک دیتابس برای اتصال که میخوایم جاهای مختلف ازش استفاده کنیم؛ یا آدرس یه عکس ثابت برای لوگوی سایت و ...طبق یک قرارداد در PHP، اسامی ثابتها رو باید با حروف بزرگ نوشت؛ مثل مثال بالا.یکی از فواید استفاده از ثابتها اینه که بعدا در امر توسعه کد، برنامه نویسها میدونن که مقدار ذخیره شده رو نباید تغییر داد. و اگه هم احیانا از اسمش بصورت اشتباهی استفاده شد و دوباره تعریف شد، همون مقدار اول در نظر گرفته میشه، بر خلاف متغیر که مقدار آخر رو در نظر میگرفت.و نکته آخر اینکه، توی تعریف ثوابت، نیازی به استفاده از علامت $ نیست.البته توی نسخه های جدید php میشه به این شکل هم تعریفش کرد، ولی من همون شکل سابق رو ترجیح میدم. شکل جدید از لحاظ سرعت و مصرف حافظه سریعتر از مدل قبلیه و برای سایتهای خیلی بزرگ مفیده.const SABET = &quot;something&quot;;نحوه استفاده&lt;?phpdefine(&quot;DB_NAME&quot;, &quot;my_db&quot;);echo DB_NAME; // my_db?&gt;مثال دوم برای اینکه ببینید مقدار ثابت تغییری نمیکنه اگه دوباره تعریف بشه:&lt;?phpdefine(&quot;DB_NAME&quot;, &quot;my_db&quot;);define(&quot;DB_NAME&quot;, &quot;your_db&quot;);echo DB_NAME; // my_db?&gt;البته بسته به تنظیمات سرور، کد بالا ممکنه باعث ایجاد خطا بشه یا اینکه نادیده گرفته بشه. یعنی سرور و مفسر اجازه نده این کار رو بکنین.پس اینم شد مفهوم ثابت و کلیاتش که امیدوارم یاد گرفته باشید.خوش بگذره و منتظر آموزشهای بعدی باشید.رمز یادگیری اینه که تا میتونین تمرین کنین، پس برای این جلسه و از همین حالا شروع کنید برای خودتون با اسامی مختلف ثابت تعریف کنین و هی چاپ کنید و خروجیش رو ببینید!</description>
                <category>Mohsen</category>
                <author>Mohsen</author>
                <pubDate>Mon, 29 Mar 2021 21:03:48 +0430</pubDate>
            </item>
                    <item>
                <title>شروع برنامه نویسی PHP از صفر تا صد! - بخش اول: مقدمه</title>
                <link>https://virgool.io/coderlife/free-php-tutorial-for-begginers-gkdpnfaihq2m</link>
                <description>دوره رایگان آموزش مقدماتی زبان برنامه نویسی پی اچ پی به زبان سادهدرود؛ بعد از یه وقفه یک ساله که توی کانال آموزشیم قول داده بودم یه آموزش هم در مورد PHP بسازم امروز تصمیم گرفتم این کار رو علیرغم همه مشغله‌ها و گرفتاریها استارت کنم تا اونائی که دوست دارن برنامه نویس بشن بتونن یه جورائی به خواستشون برسن و من هم بدقول نشده باشم.میدونم که آموزش مقدماتی برای PHP چه متنی و چه ویدئویی زیاد هستش، ولی من سعی میکنم آموزشها رو همیشه جوری بنویسم و ارائه بدم که حتی اونهائی که هیچ ذهنیتی در مورد این چیزها ندارن هم بتونن یاد بگیرن موضوع رو؛ پس اصلی ترین دلیلم برای آموزش مقدماتی این بوده که شاید آموزشای دیگه یه مقدار کلی بوده باشند و خیلی زود مخاطب رو وارد فضای جدیدی کرده باشن و در نهایت مخاطب نتوسته باشه آنچنان که لازم بوده و میخواسته یاد گرفته باشه و در نهایت از ادامه یادگیری نا امید و دست کشیده باشه.خوب دیگه بدون اتلاف وقت بیشتر میریم سراغ آموزش و امیدوارم حداقل به درد یه نفر بخوره این آموزشها و همین برای من کافیه. من بیشتر توی این سری آموزشها سعی میکنم کلیات برنامه نویسی رو آموزش بدم که بعد بتونین ازش برای دوره برنامه نویسی ربات تلگرامی هم که قبلا آموزشش رو دادم استفاده کنید.آدرس کانال تلگرامی من که قبلا دوره ربات‌نویسی تلگرام آموزش داده شده: @howCreateBotاول از همه اینکه PHP چیه؟به طور ساده و کلی، پی.اچ.پی یک زبان برنامه نویسی سمت سرور یا سرور ساید (Server Side) چند منظوره هستش که بیشتر با هدف ایجاد و ساخت صفحات داینامیک (Dynamic) وبسایتها توسعه پیده کرده. این یعنی اینکه شما بعدها میتونین با پی اچ پی وبسایت هم بسازید.اسم php مخفف Personal Home Pageه که بعدها به Hypertext Preprocessor تغییر پیدا کرده.با php کارهای زیادی رو به جز ساخت صفحات سایت میشه انجام داد که یکیش توسعه رباتهای تلگرامیه و به جز این میشه برای نوشتن وب سرویسها و ... هم ازش استفاده کرد و کاربردهای متنوعی داره.سمت سرور بودن این زبان یعنی اینکه کدهای شما برای اجرا شدن نیاز به یک وب‌سرور داره که روش مفسر کدهای PHP باشه؛ وب‌سرور با استفاده از نرم افزار مروبطه، کدهای نوشته شده به زبانهای مختلف و اینجا زبان پی اچ پی رو تفسیر میکنه و در نهایت خروجی قابل فهم توسط انسان رو به ما تحویل میده. (این تعاریف خیلی خیلی کلی هستن و من نمیخوام درگیر جزئیات فنی بشید و دونستن در همین حد فعلا کافیه)صفحات داینامیک وب، صفحاتی با قالب و ساختار مشخص ولی محتوای متنوعند؛ مثل سایتهای خبری که چهارچوب و جای اکثر عناصر مثل منوها، جای تبلیغات و ... تقریبا ثابت و یکسانه و فقط محتوای جایی که متن خبرها نمایش داده میشه بر اساس لینک خبر عوض تغییر میکنه.پی‌اچ‌پی هم مثل اکثر زبانهای برنامه‌نویسی از یک‌سری قواعد، قوانین و مفاهیم مشترک استفاده میکنه که جلوتر تک تک و معرفی و آموزش داده میشه؛ مفاهیمی مثل ثابت‌ها، متغیرها، حلقه ها، شرط‌ها و ....مفهوم اول: متغیرها در PHPاصولا متغیرها یک مکان برای ذخیره سازی داده ها با انواع مختلف هستند که بعدا میشه ازشون به تعداد نامحدود توی کدنویسی استفاده کرد و در صورت نیاز مقادیرشون رو هم تغییر داد. این به چه معنیه؟ مثلا شما اسمتون علی هستش؛ حالا میخوان توی یه وبسایت 10جا اسمتون رو نشون بدید، پس به جای اینکه 10جای مختلف و 10 بار بنویسید ALI، میاید و علی رو به شکل پایین توی یک متغیر ذخیره میکنید و بعد متغیر رو به هر تعداد که خواستین استفاده میکنید. مثال از متغیر:$my_name = &amp;quotALI&quot;همینطوری که حتما هم متوجه شدید، متغیرها توی php با علامت $ (علامت دالر) شروع میشن. بعد از علامت دالر میتونین تعداد نامحدودی کاراکتر بنویسید که میشه اسم متغیرتون ولی نامگذاری متغیرها برای خودش یه سری قوانین و قواعد داره که به این شکله:نام متغیر حتما باید با علامت $ شروع بشه.نام متغیر حتما باید با یکی از حروف الفبای انگلیسی شروع بشه؛ یعنی اینکه نمیتونین حرف اول اسم متغیر رو عدد یا حروف خاصی مثلا آندرلاین_ یا دَش - همون علامت منها و ... بذارید.متغیرها میتونین شامل آندرلاین و عدد هم باشن، ولی حرف اول نمیتونن قرار بگیرن، پس اینو دقت کنین.و نکته آخر اینکه متغیرها حساس به حروفن، یعنی دوتا متغیر با اسم یکسان ولی با حروف کوچیک و بزرگ از دید PHP یکسان نیست و 2تا چیز مختلف قلمداد میشن. مثال میزنم براتون با توجه به قوانین بالا:$45new_var ===&gt; غلط$hello322 ===&gt; درست$_test ===&gt; غلط$test_ ===&gt; درست$salam = 1;$SALAM = 2;دوتا مثال آخر اسم متغیرها یکیه ولی چون با حروف بزرگ و کوچیک نوشته شدن پس عملا دوتا متغیر جدا در نظر گرفته میشن. حتی اینها هم با هم فرق دارن؛ $test و $teST.پس تا اینجا با متغیرها بصورت کلی آشنا شدین؛ برای اینکه قشنگتر و بهتر یاد بگیرید همین حالا برای خودتون چندتا متغیر تعریف کنین.اولین کد PHPکدهای php با علامت &lt;?php شروع میشن و با علامت ؟&gt; هم بسته میشه و اینجوری به سرور اعلام میشه که بلاک یا تکه کد ما به پایان رسیده. پس قبل از تعریف متغیر باید این کار رو بکنیم:&lt;?php$variable = &#x27;Hello&#x27;;?&gt;البته اینجوری هم میشه:&lt;?php $variable = &quot;hello&quot; ?&gt;یعنی کل کدها توی یه خط باشه و مقداری که داخلش ذخیره میکنیم هم میشه گذاشت بین دوتا تک کوتیشن یا سینگلکوت (single quotation) و یا بین دو تا دبل کوتیشن (double quotation).به این &#x27; میگن سینگل کوتیشن و به این &quot; میگن دَبل کوتیشن؛ اگه صفحه کلیدتون روی حروف انگلیسی باشه با زدن حرف فارسی گ رو صفحه کلید علامت اول و با گرفتن شیفت و زدن حرف گ علامت دوم رو میشه نوشت.انواع متغیرها در پی اچ پیما توی php نوعهای مختلفی از متغیرها رو میتونیم تعریف کنیم؛ مثلا متغیرهای بالا همه از نوع رشته ای بودن؛ متغیر رشته ای همینهایی هستن که داخلشون یه سری کلمه و یا حروف قرار میگیره که باید وسط سینگل کوت یا دبل کوت باشه. اما بقیه انواع متغیر موارد زیره که هر وقت هر مدلش نیازمون شد باید تعریف کنیم.متغیرهای رشته ای که مثالهای بالا همشون از این نوع هستند و بهشون میگن استرینگ. String Variableمتغیر عددی یا اینتیجر (Integer) که بوضوح معلومه برای ذخیره اعداد صحیح استفاده میشه؛ عدد صحیح محدوده بین این دوتا عدد رو توی php شامل میشه: -2,147,483,648 و 2,147,483,647یعنی هم میتونن مثبت باشن و هم منفی ولی توی محدوده بالا باید قرار بگیره، نه بیشتر و نه کمتر؛پس اگه عددی که میخوایم بذاریم توی متغیر عددی تو این محدوده ها بود از نوع اینتیجر استفاده میکنیم به شکل زیر$int_number = 121214545;توی تعریف متغیر عددی نیازی به علامت دبل کوت یا سینگل کوت نیس.نوع بعدی متغیرها نوع اعشاریه (Float Number)؛ اعشاری همون عددهایی هستند که داخلشون علامت مُمَیزه. مثل نمرات درسی. مثلا 19.5 یا 14.75. نحوه تعریف شدنش عین نوع اینتیجر و به شکل زیر هستش:$float_numer = 14.75;چرا نحوه تعریفشون فرقی نداره با قبلی یا اینتیجر؟ چون زبان PHP خودش نوع متغیرها رو تشخیص میده و این کار ما رو خیلی ساده میکنه و نیاز نیست برا  هر متغیر به کامپیوتر نوع مقدار هم بفهمونیم!بقیه نوعهای داده ای شامل این مواردن که فعلا نیازی نداریم بدونیم و آینده اگه لازم داشتیم معرفیشون میکنم:نوع بولین (Boolean) - نوع آرایه (Array) - نوع آبجکت (Object) و در نهایت نوع خالی یا نول NULL.ادامه کدنویسیقبل از ادامه، برای تمرین فعلا میتنوین از یک ویرایشگر ساده مثل notepad یا notepad++ استفاده کنین و اونجا با من شروع به تمرین و یادگیری کنید.خوب حالا که بلد شدیم متغیرها رو تعریف کنیم و با انواعش آشنا شدیم چطوری استفاده کنیم ازشون؟بیاین با یه مثلا بریم جلو ولی قبلش بذارید با دستور چاپ تو php آشنا بشیم.برای نمایش و چاپ محتوا مثلا نمایش یه عدد یا یه متن روی خروجی (مانیتور) ما میتونیم از کلمه کلیدی echo با تلفظ اِکو استفاده کنیم به این شکل:&lt;?php echo &#039;SALAM&#039;; ?&gt;کد بالا باعث میشه بعد از اجرا، کلمه سلام بهتون نشون داده بشه. پس از این به بعد برای نمایش و چاپ محتوا تو خروجی از اکو استفاده میکنیم؛ البته از کلمه پرینت Print هم میشه استفاده کرد ولی به شخصه اکو رو ترجیح میدم.برای اجرای کدها و دیدن خروجی فعلا برید به سایت https://sandbox.onlinephpfunctions.com و اینجا تست کنید و خروجی رو ببینید به شکل زیر؛ آینده نحوه اجرا روی سیستم شخصی رو بهتون میگم.بعد اینکه کدتون رو نوشتین بزنید رو گزینه Execute code و نتیجه رو پایینش نشون میده بهتون.حالا میخوایم برای مثال میخوایم اسم من و نمره درس ریاضیمو چاپ کنیم تو خروجی؛ چکار باید بکنیم؟ اول تعریف متغیری که داخلش اسم منه، بعد تعریف متغیری که داخلش نمرم ذخیره شده و دست آخر هم چاپ به شکل زیر:&lt;?php$name = &#x27;Mohsen&#x27;;$nomre_riazi = 18.5;echo $name; // Mohsenecho $nomre_riazi; // 18.5?&gt;نکته: آخر همه‌ی خط کدها باید از علامت سمی کالُن ; استفاده کنیم که به php بفهمونیم اینجا این خط کدمون تموم شده. پس اینم حواستون باشه. خروجی چیزیه که بعد از علامت // نوشتم. با استفاده از علامت // توی php میتونین توضیحات اضافه کنید به کدهاتون که بعدها به کدهاتون مراجعه کردین بفهمین چی به چیه و چرا فلان کار انجام شده!پی اچ پی چیزهایی که بعد از علامت // مینویسید رو در نظر نمیگره و اجرا نمیکنهمدل دیگه نوشتن توضیحات به این شکله/* some test here */یا/* some text hereanother line */یعنی توضیحات رو بین علامت /* و علامت */ قرار میدیم. علامت /**/ بیشتر برای توضیحات چندخطی استفاده میشه و علامت // برای توضیحات تک خطیحالا اگه بخوایم هر دوتا متغیر رو کنار هم بنویسیم و بیاریم باید چیکار کنیم؟&lt;?phpecho $name.&#039; &#039;.$nomre_riazi; // mohsen 18.5?&gt;همینجوری که میبینین برای چسبوندن دوتا متغیر به هم باید از علامت نقطه توی php استفاده کرد که به این کار میگن کانکَتینِیت کردن (ConCateNate).مثالهای بالا رو توی سایتی که گفتم برا خودتون تمرین کنین. مثلا نمره زبان خودتون رو کنار اسم و فامیل بنویسید و ...خوب...این شد بخش اول آموزش مقدماتی PHP. سعی کردم خیلی خیلی ساده و روون باشه برای تازه کارها. حتما نظرتتون رو در مورد نحوه آموزش کامنت کنید و اگه سوالی دارید راجع به مطالب بالا همینجا بپرسید. آموزشای بیشتر تا تکمیل دوره به زودی زود اضافه میشه. پس تا اون موقع برا خودتون شروع کنید تمرین و کدنویسی. ارادت و خوش بگذره</description>
                <category>Mohsen</category>
                <author>Mohsen</author>
                <pubDate>Sat, 27 Mar 2021 21:55:42 +0430</pubDate>
            </item>
                    <item>
                <title>دوره رایگان ویدئویی ساخت ربات تلگرامی برای مدیریت گروه</title>
                <link>https://virgool.io/@mohsen322/%D8%AF%D9%88%D8%B1%D9%87-%D8%B1%D8%A7%DB%8C%DA%AF%D8%A7%D9%86-%D9%88%DB%8C%D8%AF%D8%A6%D9%88%DB%8C%DB%8C-%D8%B3%D8%A7%D8%AE%D8%AA-%D8%B1%D8%A8%D8%A7%D8%AA-%D8%AA%D9%84%DA%AF%D8%B1%D8%A7%D9%85%DB%8C-%D8%A8%D8%B1%D8%A7%DB%8C-%D9%85%D8%AF%DB%8C%D8%B1%DB%8C%D8%AA-%DA%AF%D8%B1%D9%88%D9%87-tyynubjaa4y9</link>
                <description>سلامیک دوره ی رایگان آموزشی براس ساخت رباتهای ضدلینک (لینک پاک کن)، و محتواهایی مثل ویدئو، عکس، فایل موسیقی، وویس و ... تهیه کردم برای ساخت رباتهایی با این کاربردها و برای مصارف شخصی که می تونید از این لینک شروع کنید به تماشا و یادگیری.https://t.me/HowCreateBot/561موفق باشید</description>
                <category>Mohsen</category>
                <author>Mohsen</author>
                <pubDate>Sat, 09 May 2020 11:53:37 +0430</pubDate>
            </item>
                    <item>
                <title>ارسال نظرسنجی و کوئیز با رباتهای تلگرامی</title>
                <link>https://virgool.io/@mohsen322/how-to-send-poll-and-quiz-via-telegram-bot-api-trpstntjqd5w</link>
                <description>اگر پیگیر بروزرسانی های تلگرام باشید، حتما متوجه شدید که توی آپدیت جدید این نرم افزار محبوب (حداقل میون ما ایرانی ها) یک مدل جدید ارسال نظرسنجی اضافه شده به اسم کوئیز (QUIZ - پرسشهای چندجوابی).عکس تزئینی است! ( مرگ بر آمریکا :)) )توی آموزش امروز یاد میگیرید که چطوری از طریق رباتها و با استفاده از API رسمی تلگرام، نظرسنجی یا کوئیز بسازید و برای کاربرهای رباتتون ارسال کنید. (توی آموزشهای آینده هم نحوه دریافت جوابها رو آموزش میدم)مثل همیشه اگر تازه با من و آموزشهام آشنا شدید و طرفدار آموزشهای ویدئویی هستین، بهترین کار اینه که بیاین توی کانالم و از اول همه آموزشها رو ببینید تا راه بیفتید و با سیک و سیاق کار و نحوه فراخوانی متودها و استفاده از API آشنا بشید، اگر هم طرفدار مدل آموزشی متنی هستید، همه آموزشها، اول اینجا نوشته میشن و بعد ویدئوییش ساخته میشه. شروع آموزشها اینجاست.اگر هم همراه و کاربر بلاگید و آشنا، که عالی هستش و این آموزش هم مثل بقیه آموزشهاست!شروع آموزش: ارسال نظرسنجی سادهبرای ارسال انواع نظرسنجی ما از متود sendPoll استفاده میکنیم. این متود شامل پارمترهای مختلفی هستش که تک تک بررسیشون میکنیم.اول از همه به نمونه کد پایین توجه کنید که یه سوال با عنوان This is a test Question و سه تا گزینه با عناوین Option 1. Option 2 , Option 3 ارسال میکنه.$options = json_encode([&#039;Option 1&#039;, &#039;Option 2&#039;, &#039;Option 3&#039;]);$content = [&#039;chat_id&#039; =&gt; $chat_id, &#039;question&#039; =&gt; &#039;This is a Test Question&#039;, &#039;options&#039; =&gt; $options, &#039;allows_multiple_answers&#039; =&gt; &#039;true&#039; ];$telegram-&gt;sendPoll($content);کدها مثل همیشه واضحن؛ توی آرایه $content موارد مورد نیاز متود sendPoll ریخته میشه. پارامتر اول chat_id یا همون آیدی محیطی هستش که ربات باید نظرسنجی رو اونجا بفرسته، میتونه آیدی یک گروه یا سوپرگروه باشه، یک کانال و یا خود محیط ربات.پارامتر question یک رشته میگیره که همون سوال مورد نظرمونه.پارامتر options هم یک آرایه به شکل کد شده ی جیسون (json_encode) و از نوع رشته ای بهش میگیره که همون گزینه هامون هستش و در آخر هم متودمون رو صدا زدیم.این شکل ساده ارسال نظرسنجی بود.حالا همونجور که میبینید یه پارامتر دیگه من دارم به اسم allows_multiple_answers که مشخصه کارش اینه که اجازه بده کاربرها با جای یک گزینه چندتا گزینه رو انتخاب کنن توی نظر سنجی. نتیجه کدهای بالا تصویر زیر هستش.ارسال کوئیزخیلی وقتها نیاز هست که نظرسنجی به شکل پرسش و پاسخ مطرح بشه؛ مثل سوالات چهار جوابی، برای این حالت کافیه آرایه $content در کدهای بالا به شکل زیر مقدار دهی بشه:$content = [&#039;chat_id&#039; =&gt; $chat_id, &#039;question&#039; =&gt; &#039;This is a Test Question&#039;, &#039;type&#039; =&gt; &#039;quiz&#039;, &#039;options&#039; =&gt; $options, &#039;correct_option_id&#039; =&gt; 2 ];توی مورد دوم و ارسال نظر سنجی به شکل Quiz، دوتا پارامتر اضافه میشن:پارامتر type که باید مقدارش quiz باشه و پارامتر correct_option_id که آیدی پاسخ صحیح از این طریق به تلگرام معرفی میشه.دقت کنید که آیدی پاسخ صحیح مکان اندیس پاسخ توی آرایه $options هستش و از شماره 0 شروع میشه.در واقع اگر شما به فرض سه جواب داشته باشید و مقدار correct_option_id رو 1 قرار بدید، انگار به تلگرام میگید که پاسخ صحیح، گزینه دوم در آرایه $options هستش. نتیجه پارامترهای بالا شکل پایین میشه.نکته های پایانی:متود sendPoll دوتا پارامتر دیگه داره به اسمهای is_anonymous و is_closed.پارامتر is_anonymous اگر false مقداردهی بشه و توی آرایه $content قرارش بدیم، آیدی افراد رای دهنده رو نشون میده توی نظرسنجی و پارامتر is_closed باعث بسته شدن نظرسنجی میشه.موفق باشید.</description>
                <category>Mohsen</category>
                <author>Mohsen</author>
                <pubDate>Fri, 07 Feb 2020 19:15:09 +0330</pubDate>
            </item>
                    <item>
                <title>ربات مدیریت گروههای تلگرامی - پادو‌بات</title>
                <link>https://virgool.io/apieco/%D8%B1%D8%A8%D8%A7%D8%AA-%D8%B1%D8%A7%DB%8C%DA%AF%D8%A7%D9%86-%D9%85%D8%AF%DB%8C%D8%B1%DB%8C%D8%AA-%DA%AF%D8%B1%D9%88%D9%87%D9%87%D8%A7%DB%8C-%D8%AA%D9%84%DA%AF%D8%B1%D8%A7%D9%85%DB%8C-%D9%BE%D8%A7%D8%AF%D9%88%D8%A8%D8%A7%D8%AA-l00yofmvnzkn</link>
                <description>با توجه به احساس نیازی که دیدم، تصمیم به نوشتن یک ربات تلگرامی با امکانات خاص و منحصر به فرد برای مدیریت گروههای تلگرامی گرفتم که میتونید ازش استفاده بکنید. (بدون تبلیغات)فعلا امکاناتی که داره به این شرح هستش و در طول زمان تا اونجایی که فرصت بشه هوشمندتر و بهترش میکنم و به امکاناتش اضافه میکنم:قفل سریع گروه: با استفاده این دستور همه پیامهای ارسالی در گروه تا زمانی که دوباره این آپشن خاموش نشود، حذف می شوند.فعال‌سازی قفل ساعتی گروه: با این مورد، ربات در ساعت مشخص شده توسط Creator که قبلا با دستور SetLockTime مشخص شده، همه پیامهای ارسالی در گروه را حذف می کند.قفل تصویرقفل فایلهای صوتیقفل وویس (Voice)قفل ویدئوقفل استیکرقفل گیف (Gif)قفل ارسال فایلهای APK: این دستور باعث می‌شود اپلیکیشنهای تبلیغاتی ارسالی توسط رباتها حذف شود و هنگامی که یک کاربر نیز اپلیکیشنی ارسال کند به کاربرها هشدار داده شود تا از نصب آن خودداری شود.قفل تگ: محتوای دارای @ را حذف میکند.قفل لینک: بعد از ارسال این دستور همه همه محتواهای دارای لینک در گروه حذف خواهند شد. (ضد لینک!)قفل داکیومنت (Document): بعد از ارسال این دستور همه اسناد (فایلهای پی دی اف، زیپ، اپها و ...) ارسال شده در گروه حذف خواهند شد.قفل فوروارد مطلب: بعد از فعال شدن، ربات اجازه فوروارد هیچ نوع محتوایی را نمی‌دهد.قفل لینک مخفی و فایلهای ضمیمه: متنهای حاوی لینکها و فایلهای مخفی (ضمیمه) را حذف میکند.آپشن خوش‌آمدگویی: فعال کردن این گزینه باعث می‌شود ربات به محض وارد شدن افراد جدید به گروه به آنها خوش‌‌آمد بگوید.امکان تعریف پیغام خوش‌آمدگویی: مخصوص برای هر گروه و تغییر پیغام پیشفرض.قفل ربات: فعال کردن این گزینه باعث می شود به محض اضافه شدن ربات به گروه، رباتها حذف گردند.امکان حذف اشخاص اضافه کننده ربات: فعالسازی این گزینه، باعث می‌شود افرادی که رباتهای تبلیغاتی یا هرنوع ربات دیگر را اضافه میکنند از گروه حذف شوند.حذف پیغامهای ورود و خروج اعضا: فعالسازی این گزینه باعث می‌شود ربات مدیریتی، پیغامهای جوین شدن، حذف شدن و دیگر پیامهای نمایش داده شد در گروه توسط تلگرام را حذف کند.امکان محدود کردن (Restrick):افراد به شکل محدود و نامحدود با استفاده از ریپلای؛ اگر دستور ban در پاسخ به پیغام فردی ریپلای شود، شخص ریپلای شده محدود می شود؛ در صورتی که عددی ذکر نگردد بصورت پیشفرض 3 دقیقه محدود خواهد شد و اگر عددی ذکر شود آن عدد در نظر گرفته می شود. عدد می تواند بین 1 تا 525600 دقیقه که به معنای 1 سال است باشد.امکان اخراج و کیک (Kick) کردن اعضا: با ریپلای کردن دستور مربوطه زیر پیام افراد، آنها را کامل از گروه اخراج کنید!امکان پین (Pin) کردن سریع: اگر این دستور زیر محتوایی ریپلای شود؛ آن محتوا در گروه سنجاق می شود و نوتیفیکشنی برای همه ارسال خواهد شد.امکان آنپین کردن سریع: اگر دستور بصورت عادی (بدون نیاز به ریپلای) در گروه ارسال شود و به شرطی که دسترسی داشته باشید، آخرین محتوای پین شده در گروه، آنپین (از حالت سنجاق خارج) می شود.قابلیت تبدیل شدن به دیکتاتور! این دستور مدیر اصلی گروه را به یک دیکتاتور تبدیل می‌کند! بعد از ارسال این دستور همه پیامهای ارسال شده در گروه، حتی پیامهای ادمینها هم حذف می‌شوند و فقط مدیر اصلی قادر به ارسال پیام است!و بیشتر...لینک دسترسی به مستندات (شرح کامل دستورات) ربات و نحوه راه اندازی:https://t.me/padoRobot/4امکانات جدید:ادداجباری (ForceAdd): با فعال شدن این گزینه اعضای گروه تا زمانی که حداقل 5 نفر رو توی گروه اضافه نکنند قادر به ارسال محتوا توی گروه نخواهند بود. (در واقع محتوای ارسالی حذف میشن). (1398/07/28)پنل مدیریتی با دکمه های شیشه ای: با اضافه شدن این آپشن دیگه نیازی نیست برای انجام کارهای مدیریتی دستوری تایپ کنید؛ فقط کافیه روی دکمه های شیشه ای که در اختیارتون قرار گرفته کلیک کنید! (1398/08/05)خوش آمدگویی برا اساس اوقات شبانه روز: بعد از فعالسازی این آپشن، ربات با توجه به ساعت ورود افراد جدید به گروه، از الفاظ صبح بخیر، شب بخیر، روز بخیر و وقت بخیر قبل از پیغام خوش‌آمدگویی استفاده می‌کند. (1398/09/01)قرعه کش بین اعضای گروه: با استفاده از این قابلیت میتونید برای افزایش انگیزه افراد عضو در گروه، به اونها جایزه بدید و یا مثلا یک یا چند نفر از شرکت کنندگان رو برای اهداف خاص انتخاب کنید. (1398/10/14)نحوه ساخت قرعه کشی و انتخاب برنده روی کانال توضیح داده شده.https://t.me/padoRobot/20</description>
                <category>Mohsen</category>
                <author>Mohsen</author>
                <pubDate>Tue, 15 Oct 2019 20:49:26 +0330</pubDate>
            </item>
                    <item>
                <title>آموزش تصویری راه اندازی ربات تلگرامی روی هاست رایگان 000webHost</title>
                <link>https://virgool.io/apieco/how-deploy-telegram-bot-on-000webhost-clyk8pri1thw</link>
                <description>سلام، بدون هیچ مقدمه ی اضافی میریم برای شروع کار...مرحله اول ثبت نام در سایتاول از همه برید به سایت https://www.000webhost.comبعد از باز شدن سایت، به بخش ثبت نام سایت برید که در حال حاضر آدرس مستقیم رفتن به این صفحه اینه (شاید آینده عوض بشه). https://www.000webhost.com/free-website-sign-upبعد از باز شدن صفحه ثبت نام، ایمیل و پسوردی که میخواد رو وارد کنید و روی sign up کلیک کنید:خوب مثل اکثر سایتها بعد از کلیک روی دکمه مربوطه، یه ایمیل تایید براتون ارسال میشه، ایمیلتون رو باز کنید و رو لینکی که ارسال شده کلیک کنید تا حسابتون تایید بشه و به بخش کاربری سایت 000webhost هدایت بشید.در حال حاضر طراحی سایت اینجوریه که بعد از کلیک روی لینک تاییدیه، صفحه زیر میاد و بعد باید روی Get Started کلیک کنید:بعد از رد شدن از صفحه بالا مطابق با تصویر پایین چندتا سوال ازتون پرسیده میشه که همشو فعلا رد کنید؛ یعنی روی گزینه سمت راست و پایین صفحه Skip کلیک کنید تا به صفحه اصلی مدیریت یا همون داشبورد وارد بشید:بعد از رد کردن (Skip) سوالات، صفحه زیر یا همون داشبوردمون ظاهر میشه، توی این قسمت روی دکمه بالا سمت راست + Create New Site کلیک کنید تا فرم مرحله بعدی ظاهر بشه.حالا فرمی به این شکل رو میبینید:اطلاعاتی که لازم هست رو واردش کنید؛ گزینه اول نام وبسایت هستش که همون یوزرنیم میشه که باید منحصر به فرد و غیر تکراری و بدون فاصله و حتما هم حروف انگلیسی باشه.مثلا اینجا من برای اسم وبسایتم نوشتم TelegramBotTestForChannel و آدرس سایتم هم میشه:TelegramBotTestForChannel.000webhostapp.comالبته در صورتی که نام انتخابی آزاد باشه (برای شما هم به همین شکل خواهد بود)، پس برای ادامه آموزش، این آدرس وبسایتی که بهتون تعلق میگیره رو به یاد داشته باشید:رمز عبور هم که معلومه؛ یا خودتون میتونید تعیین کنید که باید از 8 کاراکتر بیشتر باشه، و یا همون رمزی که براتون نشون میده رو بزنید تا ذخیره بشه و یه جا هم کپی کنید چون لازم میشه. بعد از وارد کردن اطلاعات روی دکمه Create سمت راست پایین کلیک کنید تا صفحه بعدی ظاهر بشه که میشه صفحه مدیریت. (عکس پایین)خوب فعلا تا اینجا رو داشته باشید و مرورگرتون رو نبندید؛مرحله دوم: آپلود فایلها روی سرور من توی این آموزش میخوام برای نمونه ربات تلگرامی دانلود عکس پروفایل کاربران اینستاگرام رو که قبلا فایلهاشو گذاشتم روی کانال، روی هاست مجانی 000webhost راه اندازی و اجرا کنم؛ پس برای ادامه مرحله برید به آدرس https://t.me/HowCreateBot/499 و فایل فشرده ای که گذاشتم رو دانلود کنید.  بعد از دانلود برگردید به همین صفحه مدیریت (تصویر بالا) و روی اولین آیکن سمت راست که با جهت نمای قرمز مشخص شده کلیک کنید تا فرم لاگین به بخش آپلود سایت براتون ظاهر بشه.آپدیت مطلب(04-08-1398): کدهایی که من قبلا استفاده میکردم برای دریافت تصویر پروفایلهای اینستاگرام مثل اینکه از کار افتاده؛ در واقع ربات درست کار میکنه ولی اینستاگرام جلوی دریافت تصاویر رو میگیره و مرحله آخر ربات ممکنه کار نکنه که برای این آموزش اهمیتی نداره؛ چون هدف این مطلب یادگرفتن راه اندازی ربات بوده و نه الزاما کار کردنش!telegrambottestforchannelی عکس بالا نام کاربری اشتباه شده که باید این باشه حالا اسم سایت و رمزی که انتخاب کردید براش رو اینجا مجدد وارد کنید تا برسید به صفحه آپلود.توی این قسمت روی آیکنی که مشخص کردم براتون کلیک کنید تا فرم آپلود ظاهر بشه و بعد فایلی که از آدرس https://t.me/HowCreateBot/499  دانلود کردید رو انتخاب کنید و بزنید تا آپلود بشه روی سایت. بعد از آپلود همچین چیزی (تصویر بعد) رو باید داشته باشید و دقت کنید فایل باید توی پوشه public_html باشه که پیشفرض هم همونجا هستید (سمت چپ با جهت نمای آبی مشخص کردم توی تصویر بالا).بعد از آپلود فایل فشرده، روش کلیک راست کنید و گزینه Extract رو بزنید؛ بدون اینکه کار دیگه ای انجام بدید؛ اگر همه چیز درست انجام شده باشه باید همچین چیزی رو جلوتون ببینید:یعنی یه پوشه به اسم instaProfileBot که وقتی واردش میشید شامل فایلهای ربات هستش که به زبان PHP نوشته شده؛خوب مجدد همینجا دست نگه دارید.مرحله سوم ساخت ربات و دریافت توکن از بات فادر تلگرامبرید به تلگرام و ربات بات فادر رو به این اسم پیدا و باز کنید @botFather و بعد از طریق گزینه /newbot یه ربات جدید درست کنید تا در نهایت یه توکن بهتون بده (تصویر زیر)توی تصویر اسم و توکن دریافتی رو براتون مشخص کردم؛ بعد از اتمام کار ساخت ربات با بات فادر، توکن رو کپی کنید و برگردید به صفحه ای که فایلها آپلود شدند و بعد وارد پوشه instaProfileBot بشید. بعد از وارد شدن به پوشه، فایل myBot.php رو پیدا کنید و روش کلیک راست کنید و گزینه Edit رو بزنید تا صفحه ویرایش فایل ظاهر بشه؛ توی این قسمت مثل تصویر پایین، توکن خودتون رو جایی که هایلایت کردم یعنی جلوی مقدار $bot_id جایگزین کنید و بعد دکمه ذخیره و بستن (Save &amp; Close) رو کلیک کنید و دیگه به چیزی دست نزنید تا برسیم به مرحله آخر.مرحله آخر ست کردن توکن روی آدرس سایتمون یعنی همون وبهوک (WebHook) هستش. تا اینجا شما فایلهای مورد نیاز رو آپلود کردید، سایت ساختید (در واقع دامنه مورد نیاز ایجاد شد) و توکن هم با بات فادر گرفتید؛ حالا طبق فرمول زیر توکن رو ست می کنید:https://api.telegram.org/botYOUR-TOKEN/setwebhook?url=YOUR-SITE-ADDRESSکه بجای your-token و your-address توکن ربات و آدرس سایتی که ایجاد کردید رو جایگزین می کنید و بعد توی مرورگر بازش میکنید؛ الان با توجه به آموزش بالا و سایت و توکنی که من درست کردم آدرس وبهوکم میشه این:https://api.telegram.org/bot939118220:AAH9q0ClMXHy_T5Vg3O8Uw5vwFx8id25b8I/setwebhook?url=https://TelegramBotTestForChannel.000webhostapp.com/instaProfileBot/mybot.phpبعد از بازکردن آدرس وبهوک اگه همه چی مرتب باشه یه یغام این شکلی بهتون نشون داده میشه که به معنی اینه که کار به درستی انجام و تموم شده. (دقت کنید که توی تمامی مراحل آموزش باید ف*لترشکنتون باز باشه)به همین راحتی! دیگه واقعا از این ساده تر نمیتونستم توضیح بدم و امیدوارم یاد گرفته باشید و سوالی پیش نیاد! موفق باشید</description>
                <category>Mohsen</category>
                <author>Mohsen</author>
                <pubDate>Fri, 30 Aug 2019 23:18:15 +0430</pubDate>
            </item>
                    <item>
                <title>آموزش ارسال پیام متنی و تصویری، ویدئو، فایل (مدیا) با میدلاین</title>
                <link>https://virgool.io/apieco/madeline-proto-sendmedia-and-sendmessage-methods-npypuugiyaqn</link>
                <description>توی آموزش قبلی یاد گرفتید که چجوری میدلاین رو راه اندزی و نصب کنید. از این آموزش به بعد کمی در مورد توابع میدلاین توضیح میدم. برای این آموزش نحوه ارسال انواع پیام متنی و چندرسانه ای رو در نظر گرفتم.دقت کنید که این آموزشها به درد افراد مبتدی و اونایی که تجربه ای توی کدنویسی زبان PHP ندارند نمیخوره!ارسال پیام متنی با متود sendMessageبرای ارسال پیام همونجور که توی خود کد سمپل هم یه نمونش رو دیدین باید این متود رو با پارامترهایی که توضیحاتش بصورت واضح در داکیومنت و این آدرس وجود داره به شکل زیر صدا بزنید:$Updates = $MadelineProto-&gt;messages-&gt;sendMessage([&#039;no_webpage&#039; =&gt; Bool, &#039;silent&#039; =&gt; Bool, &#039;background&#039; =&gt; Bool, &#039;clear_draft&#039; =&gt; Bool, &#039;peer&#039; =&gt; InputPeer, &#039;reply_to_msg_id&#039; =&gt; int, &#039;message&#039; =&gt; &#039;string&#039;, &#039;reply_markup&#039; =&gt; ReplyMarkup, &#039;entities&#039; =&gt; [MessageEntity, MessageEntity], &#039;parse_mode&#039; =&gt; &#039;string&#039;, ]);توی کد بالا مهمترین مقادیر مربوط میشه به پارامترهای message و peer که به ترتیب متن دلخواه و یوزرنیم یا یوزرآیدی کاربری هستش که میخواین متن ارسال بشه براش؛ پس اگه مثلا بخواین به آیدی Mohsen322 توی تلگرام پیام SALAM MOHSEN! ارسال کنید باید کدهای زیر اجرا بشه. (بقیه پارامترها اختیاری هستن و با خوندن مستندات متوجه کاربردشون میشید و به همین خاطر تو مثال پایین ذکر نشده)if (!file_exists(&#039;madeline.php&#039;)) {    copy(&#039;https://phar.madelineproto.xyz/madeline.php&#039;, &#039;madeline.php&#039;);}include &#039;madeline.php&#039;;$MadelineProto = new \danog\MadelineProto\API(&#039;session.madeline&#039;);$MadelineProto-&gt;start();$MadelineProto-&gt;messages-&gt;sendMessage([&#039;peer&#039; =&gt; &#039;@Mohsen322&#039;, &#039;message&#039; =&gt; &#039;SALAM MOHSEN!&#039;]);اما ارسال تصویر به چه شکله؟ارسال تصویر با استفاده از متود sendMedia توی میدلاین انجام میشه و یه مقداری با ارسال تصویر توی آموزشهای ربات نویسی متفاوته و توضیحش شاید سخت باشه؛ لینک توضیحاتش اینجاست و نحوه صدا زدن متودش هم به شکل زیر. $Updates = $MadelineProto-&gt;messages-&gt;sendMedia([&#039;silent&#039; =&gt; Bool, &#039;background&#039; =&gt; Bool, &#039;clear_draft&#039; =&gt; Bool, &#039;peer&#039; =&gt; InputPeer, &#039;reply_to_msg_id&#039; =&gt; int, &#039;media&#039; =&gt; InputMedia, &#039;message&#039; =&gt; &#039;string&#039;, &#039;reply_markup&#039; =&gt; ReplyMarkup, &#039;entities&#039; =&gt; [MessageEntity, MessageEntity], &#039;parse_mode&#039; =&gt; &#039;string&#039;, ]);اما اگه بخواین به یه آیدی یه تصویر ارسال کنید نمونه کدش به این شکله:اگر تصویر بیرون از سرور خودتون باشه باید آدرس کاملش رو بنویسید (نمونه 1)$inputMediaPhotoExternal = [&#039;_&#039; =&gt; &#039;inputMediaPhotoExternal&#039;, &#039;url&#039; =&gt; &#039;http://barkpost.com/wp-content/uploads/2015/10/2-dark-tongue-dog.jpg&#039;];$MadelineProto-&gt;messages-&gt;sendMedia([&#039;peer&#039; =&gt; &#039;@Mohsen322&#039;, &#039;media&#039; =&gt; $inputMediaPhotoExternal, &#039;message&#039; =&gt; &#039;TEST&#039; ]);و اگر هم روی سرور خودتون آپلود شده باید آدرس دهی نسبی انجام بدید به صورت زیر (اینجا فایل کدها و تصویر کنار هم قرار دارن) - نمونه 2:$inputMediaUploadedPhoto = [&#039;_&#039; =&gt; &#039;inputMediaUploadedPhoto&#039;, &#039;file&#039; =&gt; &#039;basic_learning.jpg&#039;];$MadelineProto-&gt;messages-&gt;sendMedia([&#039;peer&#039; =&gt; &#039;@mohsen322&#039;, &#039;media&#039; =&gt; $inputMediaUploadedPhoto , &#039;message&#039; =&gt; &#039;TEST&#039; ]);برای بقیه موارد مثل ارسال استیکر یا فایل (Document. zip, rar, xml...) باید برید به این آدرس و نوعهایی که پشتیبانی میکنه رو به شکل بالا آرایه مربوطه‌اش رو درست و توی پارامتر media جایگذاری کنید.مثلا برای ارسال یک فایل زیپ خارج از سرور، آرایه به این شکل میشه:$inputMediaDocumentExternal = [&#039;_&#039; =&gt; &#039;inputMediaDocumentExternal&#039;, &#039;url&#039; =&gt; &#039;http://123.scr.ir/download.php?a=1&amp;d=owghat_zaman_1.zip&#039;];البته ارسال فایلش یک‌جورهایی بگیر نگیر داره و خیلی وقتا کار نمیکنه! ولی مثالهای بالا تست شدن و کار میکنن. پس اگه جوابی نگرفتید نا امید نشید و هی تست کنید</description>
                <category>Mohsen</category>
                <author>Mohsen</author>
                <pubDate>Sun, 07 Jul 2019 10:03:41 +0430</pubDate>
            </item>
                    <item>
                <title>شروع کار با میدلاین پروتو (نصب و راه اندازی) | MadelineProto</title>
                <link>https://virgool.io/wptips/madeline-proto-getting-start-persian-language-srvbriqrxihp</link>
                <description>اگر نمیدونید میدلاین‌پروتو چی هست یه سر اول به اینجا بزنید.من بدون مقدمه مثل اکثر آموزشها شروع میکنم به آموزش و ساده ترین راه ممکن برای کار با میدلاین هم میخوام آموزش بدم (البته میخواستم آموزش ویدئویی باشه ولی خوب واقعا فرصت نیست فعلا ولی آینده خواهم ساخت)؛ اما نکات مهم قبل از شروع:نکته اول: برای کار با میدلاین باید برنامه نویسی با زبان PHP رو در حد متوسط بلد باشید و اینکه کار با سی پنل یا دایرکت ادمین هم توی تجربتون باشه (که بعید میدونم برنامه نویس سایتو... باشید و اینها رو ندونید)نکته دوم: بهتره از یک سرور خارج از کشور که SSL داره (یعنی سایتتون با https در دسترس باشه) استفاده کنید برای تست و اجرا.نکته سوم: اگه پولشو دارید سرور مجازی بگیرید چون عملکرد بهتری داره و آینده یه سری تنظیماتی که ممکنه نیاز بشه اونجوری بهتر میتونید روش مانور بدید چون رو همه هاستهای اشتراکی محدودیتهای در اجرای زمان کدها و یا منابع سخت افزاری هستش.شروع:اول از همه روی سایتتون با استفاده از سی پنل یا دایرکت ادمین توی پوشه public_html حالا توی خود روت سایت یا یک پوشه مجزا یک فایل با هر اسمی که مایلید درست کنید و پسوندش هم بذارید php. من همون اسم index.php رو در نظر میگیرم.بعد وارد آدرس گیتهاب این کتابخونه بشید؛ یعنی اینجا https://github.com/danog/MadelineProtoبعد از باز شدن (چون ممکنه آینده تغییراتی داشته باشه) اسکرول کنید تا برسید به قسمت Getting Started یک تیکه کد وجود داره به شکل زیر کامل کپی کنید و بریزید داخل فایل index.php&lt;?php

if (!file_exists(&#039;madeline.php&#039;)) {
    copy(&#039;https://phar.madelineproto.xyz/madeline.php&#039;, &#039;madeline.php&#039;);
}
include &#039;madeline.php&#039;;

$MadelineProto = new \danog\MadelineProto\API(&#039;session.madeline&#039;);
$MadelineProto-&gt;async(true);
$MadelineProto-&gt;loop(function () use ($MadelineProto) {
    yield $MadelineProto-&gt;start();

    $me = yield $MadelineProto-&gt;get_self();

    $MadelineProto-&gt;logger($me);

    if (!$me[&#039;bot&#039;]) {
        yield $MadelineProto-&gt;messages-&gt;sendMessage([&#039;peer&#039; =&gt; &#039;@danogentili&#039;, &#039;message&#039; =&gt; &quot;Hi!\nThanks for creating MadelineProto! &lt;3&quot;]);
        yield $MadelineProto-&gt;channels-&gt;joinChannel([&#039;channel&#039; =&gt; &#039;@MadelineProto&#039;]);

        try {
            yield $MadelineProto-&gt;messages-&gt;importChatInvite([&#039;hash&#039; =&gt; &#039;https://t.me/joinchat/Bgrajz6K-aJKu0IpGsLpBg&#039;]);
        } catch (\danog\MadelineProto\RPCErrorException $e) {
            $MadelineProto-&gt;logger($e);
        }

        yield $MadelineProto-&gt;messages-&gt;sendMessage([&#039;peer&#039; =&gt; &#039;https://t.me/joinchat/Bgrajz6K-aJKu0IpGsLpBg&#039;, &#039;message&#039; =&gt; &#039;Testing MadelineProto!&#039;]);
    }
    yield $MadelineProto-&gt;echo(&#039;OK, done!&#039;);
});کد فعلی اینه و ممکنه آینده عوض بشه پس همیشه از گیتهاب کدها رو بردارید؛ ولی فعلا من این رو توضیح خواهم داد چون مطابق آخرین تغییرات تا الانه.حالا صفحتون رو ذخیره بکنید؛ بعد از ذخیره باید این صفحه از طریق مرورگر و آدرس سایتی که دارید و اونجا فایل ذخیره شده در دسترس باشهاگه فرض بگیرید سایتتون اینه https://mySite.ir و برای میدلاین یک پوشه به اسم madeline دارید آدرس رو به این شکل توی مرورگرتون باز کنیدmySite.ir/madeline/اجرای اولیه چون میخواد فایل madeline.php رو کپی کنه رو سروتون ممکنه چند ثانیه یا چند دقیقه طول بکشه، پس صبر کنید تا صفحه زیر رو ببینید:اینجا ازتون میخواد که نوع لاگین شدن اکانتتون توسط میدلاین رو مشخص کنید؛ اتوماتیک داره و دستی؛ دستی جدیدا خطا میده (حداقل برای من)، اگر کار کرد برای شما همون اتوماتیک رو انتخاب کنید که ساده تر، ولی اگر نرفت مرحله بعد manual رو انتخاب و روی Go بزنید (دقت کنید از اینجا به بعد فیلترشکن روشن کنید بهتره)روی حالت دستی یا manually صفحه زیر میاد و ما نیاز داریم به دوتا چیز به نامهای API ID و API HASH که باید بریم توی پنلمون روی سایت تلگرام و از اونجا کپی کنیم؛ همونجوری که تو خط 1 توضیح داده و بعد وارد اون دوتا باکس بکنیم.پس همینکار رو میکنیم و میریم به آدرس  my.telegram.org .بعد از باز کردن آدرس بالا تلگرام ازتون میخواد که شماره موبایلتون رو برای لاگین به پنلتون به صورت اینترنشنال یا بین المللی وارد کنید؛ یعنی برای ایران به این حالت +989123456789 شمارتون رو بزنید و برید مرحله بعد؛ تو این مرحله یک کد تایید کاراکتری براتون روی تلگرام شماره ای که زدید ارسال میشه (دقت کنید شماره ای که وارد میشه باید حتما قبلش باهاش توی تلگرام ثبت نام کرده باشید)کد تایید دریافتی رو وارد کنید تا بعد صفحه زیر رو ببینید:وارد سایت که شدید (تصویر بالا) روی گزینه API development tools کلیک کنید. بعد از کلیک صفحه بعدی ظاهر میشه:اینجا یه جورایی به تلگرام میگید که هش آیدی رو برای چی میخواین؛ App title و Short name رو دلخواه وارد کنید؛ من اینجا نوشتم madeline proto و بعد گزینه مربوط به پلتفرم رو آخری یعنی other انتخاب کنید و توی قسمت آخر یعنی توضیحات هم بهتره بهشون بگید که برای تست میدلاین دارید این کار رو میکنید تا بعدا مشکلی پیش نیاد. این کارها رو انجام بدید و روی دکمه Create application کلیک کنید تا صفحه پایین براتون ظاهر بشه.همونطور که میبینید اطلاعات مورد نیازتون بهتون داده میشه اینجا؛ (هیچوقت این اطلاعات رو در اختیار کسی قرار ندید چون به راحتی میتونن از اکانتتون سوء استفاده کنن). حالا اینها رو کپی کنید و اونجایی که نیاز هست جایگذاری کنید (3 مرحله بالاتر) و بعد بزنید روی دکمه Go. بعد از زدن دکمه Go ازتون میخواد که نوع لاگین شدنتون رو انتخاب کنید؛ اینجا همین گزینه User مناسبه و دوباره بزنید روی Goمرحله بعد دوباره ازتون میخواد شماره موبایلتون رو وارد کنید؛ بازم فرمت بین المللیشمارتون رو وارد کنید و Go بزنید تا یه کد عددی مجدد ارسال بشه روی اکانتتون توی تلگرام، اون کد رو توی صفحه زیر که عکسش رو گذاشتم وارد کنید و دوباره بزنید روی دکمه Go بعد از وارد کردن کد و زدن دکمه یه مقداری ممکنه طول بکشه و در نهایت اگر همه چی به درستی انجام شده باشه شما پیغام  OK, done!رو توی مرورگرتون میبیند و مثل عکس پایین خواهید دید که اکانتتون بدون اینکه شما متوجه شده باشید، از طرف شما به سازنده این کتابخانه پیغام تشکر فرستاده، شما بدون اینکه بخواین، عضو کانال رسمی کتابخونه میدلاین شدید و باز بدون اینکه کاری انجام داده باشید از طرف شما یه پیغام هم توی گروه مربوط به این کتابخونه بعد از عضویت ارسال کرده!! چرا؟ چون کدهای اول آموزش (Sample مربوط به قسمت Getting Started) دقیقا برای انجام همین کارها نوشته شده؛ پس نترسید چون هک نشدید :))خوب اینم از آموزش که امیدوارم خوشتون اومده باشه و ازش استفاده کنید. سوالی بود همینجا کامنت بذاریدتوی آموزشهای بعدی تا اونجایی که بتونم چندتا از متودهای این کلاس رو معرفی میکنم تا کار کردن باهاش رو یاد بگیرید؛ مثل همین متود ارسال پیام، جوین کردن اکانتتون به کانالها و ...اگر برنامه نویس خوبی باشید قطعا بقیه کارها رو براحتی و فقط با خوندن مستندات میتونین یاد بگیرید.لینک صفحه مستندات (Documentation):https://docs.madelineproto.xyz/</description>
                <category>Mohsen</category>
                <author>Mohsen</author>
                <pubDate>Tue, 25 Jun 2019 23:20:09 +0430</pubDate>
            </item>
                    <item>
                <title>آموزش فارسی و ویدئویی میدلاین‌پروتو - MadelineProto</title>
                <link>https://virgool.io/@mohsen322/how-to-work-with-madelineproto-library-persian-tutorial-arht2ryrvekj</link>
                <description>سلاماز اونجایی که منابع فارسی برای آموزش این کتابخونه خیلی خیلی عالی کم هستش تصمیم گرفتم یک سری آموزش مقدماتی جهت آشنایی دوستان، طی روزهای آینده روی کانال به آدرس @howCreateBot منتشر کنم.اما سوال اصلی برای اونایی که آشنا نیستن با میدلاین اینه که اصلا چی هستش؟!میدلاین یک کتابخانه PHP هستش که به شما اجازه میده مثل یک اپلیکیشن موبایل و بدون نیاز با کار کردن مستقیم با API، با سرور تلگرام ارتباط برقرار کنید و تقریبا همه امکاناتی که یک اپلیکیشن موبایل داره رو تحت وب پیاده سازی کنید. در واقع میتونید از طریق کدنویسی با زبون PHP بدون نیاز به توکن (مثل ربات) اکانتهای تلگرامی شخصیتون رو کنترل و مدیریت کنید.سوال: مثلا چه کارایی میشه باهاش انجام داد؟با میدلاین میتونید فرضا اکانتتون رو جوری تنظیم کنید که هر هفته به یه نفر از طرف شما پیام بده (یا فرضا توی تاریخ خاصی تولد افراد رو تبریک بگه).میتونید اکانت تلگرامیتون (دقت کنید ربات نه و اکانت شخصیتون) رو از طریق متودهایی که در اختیارتون میذاره به یه منشی پیشرفته تبدیل کنید که اگر به عنوان مثال 1 هفته مسافرت بودید یا به هر دلیلی به تلگرام توی مدت مشخصی دسترسی نداشته باشید از طرف شما جواب افراد رو بده.نمونه دیگه از کارایی که میشه با میدلاین کرد اینه که میتونید بدون سین کردن پیام افراد رو بخونید و یا فوروارد کنین به یه اکانت دیگه.پیامهای کانالهای مختلف رو به محض بروز شدن چک کنید که مثلا اگر فلان کلمه یا هشتگ توی توضیحاتش بود بهتون اطلاع بده و خیلی از کارای دیگه این مدلی که بستگی به نیاز وخلاقیت خودتون داره.سعی میکنم توی همین ماه جاری یعنی تیرماه مقدمات رو آموزش بدم؛ پس برای اطلاع میتونید عضو کانال بشید.@howCreateBot</description>
                <category>Mohsen</category>
                <author>Mohsen</author>
                <pubDate>Sat, 22 Jun 2019 12:31:55 +0430</pubDate>
            </item>
                    <item>
                <title>آموزش ارسال آلبوم تصاویر و ویدئو در ربات تلگرام</title>
                <link>https://virgool.io/@mohsen322/implement-sending-albums-method-in-telegram-bot-with-php-srgzpywvx78j</link>
                <description>اگرم پیگیر تلگرامید و یا از اپلیکیشن فوق محبوبش (حداقل برای ایرانیها) علیرغم همه فیلترینگی که روش اعمال شده هنوز هم استفاده میکنید، احتمالا میدونید که قابلیت جدیدی رو از نسخه 4.5  بهش اضافه کردن که از طریق اون میشه دسته ای از از تصاویر و یا ویدئوها رو با هم به عنوان یک آلبوم ارسال کرد. اینطوری برای ارسال فرضا 5 عکس نیاز نیست 5تا عکس رو جدا جدا ارسال کنیم و میشه در قالب یک پیام و به شکل یک آلبوم این کار رو انجام داد. توی آموزش امروز به معرفی متودی برای انجام همین کار با رباتها میپردازم.متود sendmediagroup دقیقا برای همین کار معرفی شده و طرز استفاده ازش هم به شکل زیر هستش:$media_array = [[&#039;type&#039; =&gt; &#039;photo&#039;,media =&gt; &#039;http://barkpost.com/wp-content/uploads/2015/10/2-dark-tongue-dog.jpg&#039;],[&#039;type&#039; =&gt; &#039;photo&#039;,media =&gt; &#039;http://i1.sndcdn.com/artworks-000398785230-w8rnfa-t500x500.jpg&#039;]];
	$content = array(
	&#039;chat_id&#039; =&gt; $chat_id, 
	&#039;media&#039; =&gt; json_encode($media_array)
	);	$telegram-&gt;sendMediaGroup($content);اگر با کدهای بالا آشنا نیستید میتونید از اینجا شروع کنید به یادگیری؛ چون در این سری آموزشهای ربات‌نویسی از یک کلاس PHP که قبلا معرفی کردم استفاده میکنم و ممکنه این کدها نامفهوم باشه براتون.خطوط بالا ساده و آسونن؛ خط اول یک آرایه از آرایه ها ساختیم برای معرفی تصویرهامون که حداقل باید شامل 2 مورد و حداکثر 10تا باشه. (فرقی نمیکنه عکس باشه یا ویدئو و اینکه آدرسش رو از سرور تلگرام بدید یا بیرون از طریق URL مثل مثال بالا).و بعد از معرفی تصاویر آلبوممون، توی آرایه بعدی به اسم کانتنت، chat_id و پارامتر media رو قرار دادیم. چت آیدی جایی که محتوا باید ارسال بشه هستش (محیط یک ربات، کانال و یا آیدی یک کاربر).و گزینه دوم media هم آرایه آلبومی که بالاتر ساختیم رو به عنوان مقدار براش تعریف میکنیم و بعد از طریق متود json_encode با یک آبجکت جیسون برای ارسال نهایی آمادش میکنیم و در آخر هم آرایه content پاس داده شده به متود sendMediaGroup تا محتوای تعریف شده رو به شکل آلبوم ارسال کنه به جایی که میخوایم.نمونه اجرای استفاده از این متود رو میتونید با ارسال یک پست اینستاگرامی شامل چند عکس یا ویدئو به ربات @instavideoimage_bot در تلگرام مشاهده کنید.لینک زیر شامل چند پست برای تست:https://www.instagram.com/p/BrjqgNkArih/امیدوارم مفید واقع بشه.کانال تلگرامی برای مشاهده کدهای آموزشهای قبلی و آینده! (@howCreateBot)</description>
                <category>Mohsen</category>
                <author>Mohsen</author>
                <pubDate>Wed, 19 Dec 2018 18:25:53 +0330</pubDate>
            </item>
            </channel>
</rss>