سرور مجازی

۳ مطلب با کلمه‌ی کلیدی «Node.js» ثبت شده است

  • ۰
  • ۰

 نحوه استقرار یک برنامه React در پلتفرم اپلیکیشن vpsgol

ورود به سایت

 

معرفی

پلتفرم برنامه vpsgol یک محصول پلتفرم به عنوان سرویس (PaaS) است که به شما امکان می دهد برنامه ها را از یک مخزن منبع پیکربندی و استقرار دهید. پس از پیکربندی برنامه شما، vpsgol برنامه را با هر تغییری ایجاد و مستقر می کند و به شما از مزایای یک وب سرور کامل و خط لوله استقرار با حداقل پیکربندی می دهد. این می تواند یک راه سریع و کارآمد برای استقرار برنامه های React شما باشد، و اگر از React برای ساختن سایتی بدون باطن استفاده می کنید، می توانید از لایه رایگان App Platform استفاده کنید.

در این آموزش، یک برنامه React را با استفاده از لایه Starter رایگان در پلتفرم برنامه vpsgol اجرا می‌کنید. با Create React App یک برنامه می‌سازید، کد را به یک مخزن GitHub فشار می‌دهید، سپس برنامه را به عنوان یک برنامه vpsgol پیکربندی می‌کنید. شما برنامه را به کد منبع خود متصل می کنید و پروژه را به عنوان مجموعه ای از فایل های ثابت اجرا می کنید.

در پایان این آموزش، می‌توانید یک برنامه React را به گونه‌ای پیکربندی کنید که در هر فشار به شاخه اصلی یک مخزن GitHub به طور خودکار مستقر شود.

پیش نیازها

  • در ماشین محلی خود، به یک محیط توسعه نیاز دارید که Node.js را اجرا کند. این آموزش بر روی Node.js نسخه 10.22.0 و npm نسخه 6.14.6 تست شده است.
  • Git روی دستگاه محلی شما نصب شده است.
  • یک حساب vpsgol.
  • یک حساب کاربری در GitHub که می توانید با رفتن به صفحه Create your Account ایجاد کنید.

مرحله 1 – ایجاد یک پروژه React

در این مرحله، یک برنامه React با استفاده از Create React App ایجاد می‌کنید و یک نسخه قابل استقرار از آن می‌سازید.

برای شروع، یک برنامه جدید با استفاده از Create React App در دستگاه محلی خود ایجاد کنید. در ترمینال، دستور ساخت اپلیکیشنی به نام vpsgol-app را اجرا کنید:

npx create-react-app vpsgol-app

دستور npx یک بسته Node را بدون بارگیری در دستگاه شما اجرا می کند. اسکریپت create-react-app همه وابستگی ها را نصب می کند و یک پروژه پایه را در فهرست راهنمای دیجیتال-اقیانوس-برنامه می سازد. برای اطلاعات بیشتر در مورد Create React App، آموزش نحوه راه اندازی یک پروژه React با ایجاد برنامه React را بررسی کنید.

کد وابستگی ها را دانلود می کند و یک پروژه پایه ایجاد می کند. ممکن است چند دقیقه طول بکشد تا تمام شود. پس از تکمیل، یک پیام موفقیت آمیز دریافت خواهید کرد. اگر به جای npm از نخ استفاده کنید، نسخه شما ممکن است کمی متفاوت باشد:

 

Output

Success! Created vpsgol-app at your_file_path/vpsgol-app
Inside that directory, you can run several commands:

  npm start
    Starts the development server.

  npm build
    Bundles the app into static files for production.

  npm test
    Starts the test runner.

  npm eject
    Removes this tool and copies build dependencies, configuration files
    and scripts into the app directory. If you do this, you can’t go back!

We suggest that you begin by typing:

  cd vpsgol-app
  npm start

Happy hacking!

اکنون که یک پروژه پایه دارید، آن را به صورت محلی اجرا کنید تا بتوانید نحوه نمایش پروژه در سرور را آزمایش کنید. ابتدا به دایرکتوری تغییر دهید:

cd vpsgol-app

پروژه را با استفاده از اسکریپت شروع npm اجرا کنید:

npm start

هنگامی که دستور اجرا می شود، خروجی با URL سرور توسعه محلی دریافت خواهید کرد:

 

Output

Compiled successfully!

You can now view vpsgol-app in the browser.

  Local:            http://localhost:3000
  On Your Network:  http://192.168.1.110:3000

Note that the development build is not optimized.
To create a production build, use npm build.

یک مرورگر به http://localhost:3000 باز کنید و پروژه خود را پیدا خواهید کرد:

پروژه را با تایپ کردن CTRL+C یا ⌘+C در ترمینال متوقف کنید.

اکنون که یک برنامه React در حال کار دارید، می توانید کد را به یک مخزن GitHub فشار دهید.

مرحله 2 – فشار دادن کد به GitHub

برای استقرار برنامه شما، App Platform کد منبع شما را از یک مخزن کد میزبانی شده بازیابی می کند. در این مرحله، کد برنامه React خود را به یک مخزن GitHub فشار می‌دهید تا App Platform بتواند بعداً به آن دسترسی داشته باشد.

به حساب GitHub خود وارد شوید. پس از ورود به سیستم، یک مخزن جدید به نام vpsgol-app ایجاد کنید. می توانید مخزن را خصوصی یا عمومی کنید:

Create React App به طور خودکار پروژه شما را با git مقداردهی اولیه می کند، بنابراین می توانید تنظیم کنید تا کد را مستقیماً به GitHub فشار دهید. ابتدا مخزن مورد نظر خود را با دستور زیر اضافه کنید:

git remote add origin https://github.com/your_name/vpsgol-app.git

 

در مرحله بعد، اعلام کنید که می‌خواهید با موارد زیر به شاخه اصلی بروید:

git branch -M main

در نهایت، کد را به مخزن خود فشار دهید:

git push -u origin main

هنگامی که از شما خواسته شد کد خود را فشار دهید، اعتبار GitHub خود را وارد کنید.

هنگامی که کد را فشار می دهید یک پیام موفقیت آمیز دریافت خواهید کرد. پیام شما کمی متفاوت خواهد بود:

 

Output

Counting objects: 22, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (22/22), done.
Writing objects: 100% (22/22), 187.50 KiB | 6.94 MiB/s, done.
Total 22 (delta 0), reused 0 (delta 0)
To github.com:your_name/vpsgol-app.git
   4011c66..647d2e1  main -> main

اکنون کد خود را در مخزن GitHub کپی کرده اید.

در این مرحله، پروژه خود را به GitHub هل دادید تا بتوانید با استفاده از vpsgol Apps به آن دسترسی داشته باشید. در مرحله بعد، با استفاده از پروژه خود یک برنامه vpsgol جدید ایجاد می کنید و استقرار خودکار را تنظیم می کنید.

مرحله 3 – استقرار در پلتفرم برنامه vpsgol

در این مرحله، یک برنامه React را در پلتفرم اپلیکیشن vpsgol مستقر خواهید کرد. شما مخزن GitHub خود را به vpsgol متصل می کنید، پروژه را برای ساخت پیکربندی می کنید و پروژه اولیه خود را می سازید. پس از اجرای پروژه، هر تغییر باعث ایجاد یک ساخت و به روز رسانی جدید می شود.

در پایان این مرحله، می‌توانید برنامه‌ای را با تحویل مداوم درvpsgol اجرا کنید.

برای شروع، وارد حساب vpsgol خود شوید و دکمه Create را فشار دهید، سپس Apps را انتخاب کنید:

در مرحله بعد از شما خواسته می شود که مخزن GitHub خود را پیوند دهید. اگر هنوز آن را متصل نکرده اید، باید با نام کاربری و رمز عبور خود وارد شوید و به vpsgol مجوز دسترسی به مخازن خود را بدهید:

هنگامی که حساب خود را پیوند دادید، مخزن مورد نظر برای اتصال را در صفحه مجوز GitHub انتخاب کنید. در این مورد، شما از مخزن دیجیتال-اقیانوس-برنامه استفاده می کنید، اما در صورت تمایل می توانید مخازن بیشتری را متصل کنید:

پس از انتخاب مخزن، دوباره به رابط vpsgol متصل خواهید شد. vpsgol-app را از لیست مخازن انتخاب کنید، سپس Next را فشار دهید. این برنامه شما را مستقیماً به مخزن GitHub متصل می کند:

اکنون که مخزن خود را انتخاب کرده اید، باید اپلیکیشن vpsgol را پیکربندی کنید. در این مثال، سرور با انتخاب نیویورک در قسمت Region، در آمریکای شمالی مستقر خواهد شد و شاخه استقرار اصلی خواهد بود. برای برنامه خود، منطقه ای را انتخاب کنید که به موقعیت مکانی فیزیکی شما نزدیک است:.

برای این آموزش، تغییرات کد Autodeploy را بررسی می کنید. هر بار که کد را به‌روزرسانی می‌کنید، این به طور خودکار برنامه شما را بازسازی می‌کند.

Next را فشار دهید تا به صفحه پیکربندی برنامه خود بروید.

در مرحله بعد، نوع برنامه ای را که اجرا می کنید انتخاب کنید. از آنجایی که React دارایی های استاتیک را می سازد، Static Site را از منوی کشویی در قسمت Type انتخاب کنید.

توجه: Create React App یک تولیدکننده سایت ایستا مانند گتسبی نیست، اما شما از دارایی های ثابت استفاده می کنید، زیرا سرور نیازی به اجرای کدهای سمت سرور مانند Ruby یا PHP ندارد. برنامه از Node برای اجرای مراحل نصب و ساخت استفاده می کند، اما کد برنامه را در لایه آزاد اجرا نمی کند.

شما همچنین می توانید از یک اسکریپت ساخت سفارشی استفاده کنید. اما در این حالت، می‌توانید از دستور پیش‌فرض npm run build استفاده کنید. اگر اسکریپت ساخت متفاوتی برای تضمین کیفیت (QA) یا یک محیط تولید دارید، ممکن است بخواهید یک اسکریپت ساخت سفارشی ایجاد کنید:

Next را فشار دهید تا به صفحه نهایی و راه اندازی بروید.

در اینجا می توانید طرح قیمت را انتخاب کنید. ردیف شروع رایگان برای سایت های استاتیک ساخته شده است، بنابراین یکی را انتخاب کنید:

دکمه Launch Starter App را فشار دهید و vpsgol شروع به ساخت برنامه شما می کند.

این برنامه اسکریپت های ساخت npm ci و npm را در مخزن شما اجرا می کند. این همه وابستگی ها را دانلود می کند و فهرست ساخت را با یک نسخه کامپایل شده و کوچک شده از همه جاوا اسکریپت، فایل های HTML و سایر دارایی های شما ایجاد می کند. همچنین می توانید یک اسکریپت سفارشی در package.json خود ایجاد کنید و دستورات را در تب Components برنامه خود در App Platform به روز کنید.

چند دقیقه طول می کشد تا بیلد اجرا شود، اما پس از اتمام آن، یک پیام موفقیت آمیز و یک لینک به سایت جدید خود دریافت خواهید کرد. پیوند شما یک نام منحصر به فرد خواهد داشت و کمی متفاوت خواهد بود:

برای دسترسی به پروژه خود در مرورگر، Live App را فشار دهید. این پروژه مانند پروژه ای است که به صورت محلی آزمایش کرده اید، اما با یک URL ایمن در وب به صورت زنده نمایش داده می شود:

 

اکنون که پروژه شما پیکربندی شده است، هر زمان که تغییری در مخزن پیوند داده شده ایجاد کنید، یک بیلد جدید اجرا خواهید کرد. در این حالت، اگر تغییری را به شاخه اصلی فشار دهید، vpsgol به طور خودکار یک استقرار جدید را اجرا می کند. نیازی به ورود نیست؛ به محض اینکه تغییر را فشار دهید اجرا می شود:

در این مرحله، یک برنامه vpsgol جدید در پلتفرم App ایجاد کردید. شما حساب GitHub خود را متصل کردید و برنامه را برای ساخت شعبه اصلی پیکربندی کردید. پس از پیکربندی برنامه، متوجه شدید که برنامه پس از هر تغییر، یک بیلد جدید را مستقر می کند.

نتیجه

پلتفرم برنامه vpsgol ابزاری سریع برای استقرار برنامه ها در اختیار شما قرار می دهد. با یک تنظیم اولیه کوچک، برنامه شما به طور خودکار پس از هر تغییر مستقر می شود. این می‌تواند همراه با React برای راه‌اندازی سریع برنامه وب شما استفاده شود.

برچسب‌ها:App PlatformNode.jsاتصال به سرور مجازی لینوکسایجاد سرور مجازیبرنامه Reactخرید سرور مجازیسرور مجازیسرویس (PaaS)

 

 

https://vpsgol.net/product/vps-germany/

 

https://vpsgol.net/product/vps-usa/

 

https://vpsgol.net/product/vps-france/

 

https://vpsgol.net/product/vps-canada/

 

https://vpsgol.net/product/vps-poland/

 

https://vpsgol.net/product/vps-netherlands/

 

https://vpsgol.net/product/vps-england/

  • behnam gol mohamadi
  • ۰
  • ۰

چگونه یک ربات Discord با Node.js بسازیم

ورود به سایت

معرفی

Discord یک برنامه چت است که به میلیون ها کاربر در سراسر جهان امکان می دهد در جوامعی به نام اصناف یا سرورها به صورت آنلاین پیام و چت صوتی داشته باشند. Discord همچنین یک API گسترده ارائه می دهد که توسعه دهندگان می توانند از آن برای ساخت ربات های قدرتمند Discord استفاده کنند. ربات ها می توانند اقدامات مختلفی مانند ارسال پیام به سرورها، کاربران DM-ing، تعدیل سرورها و پخش صدا در چت های صوتی را انجام دهند. این به توسعه‌دهندگان اجازه می‌دهد تا ربات‌های قدرتمندی بسازند که شامل ویژگی‌های پیشرفته و پیچیده مانند ابزارهای تعدیل یا حتی بازی‌ها می‌شود. به عنوان مثال، ربات ابزار Dyno به میلیون‌ها انجمن خدمات ارائه می‌دهد و دارای ویژگی‌های مفیدی مانند محافظت از هرزنامه، پخش‌کننده موسیقی و سایر عملکردهای کاربردی است. یادگیری نحوه ایجاد ربات های Discord به شما امکان می دهد تا امکانات زیادی را پیاده سازی کنید که هزاران نفر می توانند هر روز با آنها تعامل داشته باشند.

در این آموزش، با استفاده از Node.js و کتابخانه Discord.js، یک ربات Discord را از ابتدا می سازید، که به کاربران اجازه می دهد مستقیماً با Discord API تعامل داشته باشند. شما یک نمایه برای یک ربات Discord تنظیم می‌کنید، نشانه‌های احراز هویت را برای ربات دریافت می‌کنید، و ربات را با قابلیت پردازش دستورات با آرگومان‌های کاربران برنامه‌ریزی می‌کنید.

پیش نیازها

قبل از شروع به موارد زیر نیاز دارید:

  • Node.js روی ماشین توسعه شما نصب شده است. برای نصب آن در macOS یا اوبونتو 20.04، مراحل نحوه نصب Node.js و ایجاد محیط توسعه محلی در macOS یا نصب Node.js با Apt با استفاده از بخش NodeSource PPA در نحوه نصب Node.js در اوبونتو 20.04 را دنبال کنید. .
  • هر ویرایشگر متنی دلخواه شما، مانند Visual Studio Code، Atom، Sublime یا Nano.
  • یک حساب رایگان Discord با یک حساب ایمیل تأیید شده و یک سرور Discord رایگان که برای آزمایش ربات Discord خود استفاده خواهید کرد.

مرحله 1 – راه اندازی ربات Discord

در این مرحله، از رابط کاربری گرافیکی توسعه دهندگان Discord (GUI) برای راه اندازی ربات Discord و دریافت توکن ربات استفاده می کنید که آن را به برنامه خود منتقل می کنید.

برای ثبت ربات در پلتفرم دیسکورد، از داشبورد اپلیکیشن دیسکورد استفاده کنید. در اینجا توسعه دهندگان می توانند برنامه های Discord از جمله ربات های Discord را ایجاد کنند.

برای شروع، روی New Application کلیک کنید. Discord از شما می خواهد که یک نام برای برنامه جدید خود وارد کنید. سپس روی Create کلیک کنید تا اپلیکیشن ایجاد شود.

اکنون داشبورد برنامه خود را باز کنید. برای افزودن ربات به برنامه، به تب Bot در نوار پیمایش سمت چپ بروید.

روی دکمه افزودن ربات کلیک کنید تا یک ربات به برنامه اضافه شود. روی Yes, do it کلیک کنید! زمانی که از شما درخواست تایید می کند را فشار دهید. سپس روی داشبوردی قرار می گیرید که حاوی جزئیات نام ربات، نشانه احراز هویت و تصویر نمایه شما است.

اکنون باید یک دعوت نامه ایجاد کنید تا ربات را به انجمن Discord اضافه کنید تا بتوانید آن را آزمایش کنید. ابتدا به صفحه URL Generator زیر تب OAuth2 داشبورد برنامه بروید. برای ایجاد یک دعوت، به پایین پیمایش کنید و ربات را در زیر scopes انتخاب کنید. همچنین باید مجوزهایی را برای کنترل اعمالی که ربات شما می تواند در انجمن ها انجام دهد تنظیم کنید. برای اهداف این آموزش، Administrator را انتخاب کنید، که به ربات شما اجازه می دهد تقریباً تمام اقدامات را در Guild انجام دهد. لینک را با دکمه کپی کپی کنید.

سپس ربات را به سرور اضافه کنید. پیوند دعوتی را که ایجاد کردید دنبال کنید. می‌توانید ربات را به هر سروری که دارید اضافه کنید یا مجوزهای سرپرست را در منوی کشویی دارید.

حالا روی Continue کلیک کنید. مطمئن شوید که تیک باکس کنار Administrator را علامت زده اید – این به مدیر ربات مجوز می دهد. سپس روی Authorize کلیک کنید. Discord از شما می خواهد که قبل از پیوستن ربات به سرور، یک CAPTCHA را حل کنید. اکنون ربات Discord را در لیست اعضا در سروری که ربات را در حالت آفلاین به آن اضافه کرده اید خواهید داشت.

شما با موفقیت یک ربات Discord ایجاد کردید و آن را به یک سرور اضافه کردید. در مرحله بعد برنامه ای برای ورود به ربات می نویسید.

مرحله 2 – ایجاد پروژه شما

در این مرحله، محیط کدنویسی اولیه را راه‌اندازی می‌کنید که در آن ربات خود را می‌سازید و به صورت برنامه‌نویسی وارد ربات می‌شوید.

ابتدا باید یک پوشه پروژه و فایل های پروژه لازم برای ربات راه اندازی کنید.

پوشه پروژه خود را ایجاد کنید:

 

mkdir discord-bot

 

به پوشه پروژه ای که ایجاد کرده اید بروید:

 

cd discord-bot

 

در مرحله بعد، از ویرایشگر متن خود برای ایجاد فایلی به نام config.json برای ذخیره رمز احراز هویت ربات خود استفاده کنید:

 

nano config.json

 

سپس کد زیر را به فایل کانفیگ اضافه کنید و متن برجسته شده را با کد احراز هویت ربات خود جایگزین کنید:

discord-bot/config.json

{
    "BOT_TOKEN": "YOUR BOT TOKEN"
}

فایل را ذخیره کرده و از آن خارج شوید.

سپس یک فایل package.json ایجاد می‌کنید که جزئیات پروژه شما و اطلاعات مربوط به وابستگی‌هایی را که برای پروژه استفاده می‌کنید ذخیره می‌کند. با اجرای دستور npm زیر یک فایل package.json ایجاد خواهید کرد:

npm init

npm از شما جزئیات مختلفی در مورد پروژه شما می خواهد. اگر مایل به راهنمایی برای تکمیل این دستورات هستید، می توانید در مورد آنها در نحوه استفاده از ماژول های Node.js با npm و package.json مطالعه کنید.

اکنون بسته discord.js را که برای تعامل با Discord API استفاده خواهید کرد، نصب خواهید کرد. با دستور زیر می توانید discord.js را از طریق npm نصب کنید:

npm install discord.js

اکنون که فایل پیکربندی را تنظیم کرده اید و وابستگی لازم را نصب کرده اید، آماده شروع ساخت ربات خود هستید. در یک برنامه واقعی، یک ربات بزرگ بین بسیاری از فایل ها تقسیم می شود، اما برای اهداف این آموزش، کد ربات شما در یک فایل خواهد بود.

ابتدا یک فایل به نام index.js در پوشه discord-bot برای کد ایجاد کنید:

nano index.js

کدگذاری ربات را با نیاز به وابستگی discord.js و فایل پیکربندی با توکن ربات آغاز کنید.

discord-bot/index.js

const Discord = require("discord.js");
const config = require("./config.json");

پس از این، دو خط کد بعدی را اضافه کنید:

discord-bot/index.js

...
const client = new Discord.Client({intents: ["GUILDS", "GUILD_MESSAGES"]);

client.login(config.BOT_TOKEN);

فایل خود را ذخیره کرده و از آن خارج شوید.

خط اول کد یک Discord.Client جدید ایجاد می کند و آن را به مشتری ثابت اختصاص می دهد. این کلاینت تا حدودی نحوه تعامل شما با Discord API و نحوه اطلاع رسانی Discord از رویدادهایی مانند پیام های جدید است. کلاینت در واقع نشان دهنده ربات Discord است. شیء ارسال شده به سازنده Client، مقاصد دروازه ربات شما را مشخص می کند. این مشخص می کند که ربات شما به کدام رویدادهای WebSocket گوش می دهد. در اینجا GUILDS و GUILD_MESSAGES را مشخص کرده‌اید تا ربات بتواند رویدادهای پیام را در انجمن‌ها دریافت کند.

خط دوم کد از روش لاگین روی کلاینت برای ورود به ربات Discord که ایجاد کرده‌اید استفاده می‌کند و از رمز موجود در فایل config.json به عنوان رمز عبور استفاده می‌کند. توکن به Discord API اجازه می دهد بداند که برنامه برای کدام ربات است و اینکه شما برای استفاده از ربات احراز هویت شده اید.

اکنون فایل index.js را با استفاده از Node اجرا کنید:

node index.js

وضعیت ربات شما در سرور Discord که آن را به آن اضافه کرده اید به حالت آنلاین تغییر می کند.

شما با موفقیت یک محیط کدنویسی راه اندازی کرده اید و کد اصلی را برای ورود به ربات Discord ایجاد کرده اید. در مرحله بعد دستورات کاربر را کنترل می‌کنید و ربات خود را وادار می‌کنید تا اقداماتی مانند ارسال پیام را انجام دهد.

مرحله 3 – مدیریت اولین فرمان کاربر

در این مرحله رباتی ایجاد می کنید که می تواند دستورات کاربر را مدیریت کند. شما اولین پینگ فرمان خود را اجرا می کنید، که با “pong” و زمان صرف شده برای پاسخ به دستور پاسخ می دهد.

ابتدا باید پیام‌هایی را که کاربران ارسال می‌کنند شناسایی و دریافت کنید تا بتوانید هر دستوری را پردازش کنید. با استفاده از روش روشن در مشتری Discord، Discord یک اعلان در مورد رویدادهای جدید برای شما ارسال می کند. متد on دو آرگومان می گیرد: نام رویدادی که باید منتظر ماند و تابعی که هر بار که آن رویداد اجرا می شود اجرا می شود. با این روش می توانید منتظر پیام رویداد بمانید — این اتفاق هر بار که پیامی به انجمنی ارسال می شود که ربات مجوز مشاهده پیام ها را دارد، رخ می دهد. بنابراین شما یک تابع ایجاد خواهید کرد که هر بار که پیامی برای پردازش دستورات ارسال می شود اجرا می شود.

ابتدا فایل خود را باز کنید:

nano index.js

کد زیر را به فایل خود اضافه کنید:

discord-bot/index.js

...
const client = new Discord.Client({intents: ["GUILDS", "GUILD_MESSAGES"]});


client.on("messageCreate", function(message) { 
                                         
});                                      

client.login(config.BOT_TOKEN);

این تابع که روی رویداد messageCreate اجرا می شود، پیام را به عنوان پارامتر می گیرد. پیام ارزش یک نمونه پیام Discord.js را خواهد داشت که حاوی اطلاعاتی در مورد پیام ارسال شده و روش هایی برای کمک به ربات برای پاسخ دادن است.

اکنون خط کد زیر را به تابع کنترل فرمان خود اضافه کنید:

discord-bot/index.js

...
client.on("messageCreate", function(message) {
  if (message.author.bot) return;
});
...

این خط بررسی می کند که آیا نویسنده پیام یک ربات است یا خیر، و در این صورت، پردازش دستور را متوقف می کند. این مهم است زیرا معمولاً نمی خواهید پیام های ربات ها را پردازش کنید یا به آنها پاسخ دهید. ربات‌ها معمولاً نیازی به استفاده از اطلاعات ربات‌های دیگر ندارند، بنابراین نادیده گرفتن پیام‌های آنها باعث صرفه‌جویی در قدرت پردازش و جلوگیری از پاسخ‌های تصادفی می‌شود.

اکنون یک کنترل کننده فرمان می نویسید. برای انجام این کار، خوب است که فرمت معمول یک فرمان Discord را درک کنید. به طور معمول، ساختار یک فرمان Discord شامل سه بخش به ترتیب زیر است: یک پیشوند، یک نام دستور، و (گاهی) آرگومان های فرمان.

  • پیشوند: پیشوند می تواند هر چیزی باشد، اما معمولاً یک قطعه نقطه گذاری یا عبارت انتزاعی است که معمولاً در ابتدای پیام نیست. این بدان معناست که وقتی پیشوند را در ابتدای پیام وارد می‌کنید، ربات می‌داند که قصد این دستور این است که یک ربات آن را پردازش کند.
  • نام فرمان: نام دستوری که کاربر می خواهد از آن استفاده کند. این بدان معناست که ربات می‌تواند از چندین فرمان با عملکردهای مختلف پشتیبانی کند و به کاربران اجازه دهد تا با ارائه یک نام فرمان متفاوت، بین آنها یکی را انتخاب کنند.
  • آرگومان‌ها: گاهی اوقات اگر دستور نیاز به اطلاعات اضافی از کاربر داشته باشد یا از آن استفاده کند، کاربر می‌تواند آرگومان‌هایی را پس از نام فرمان ارائه کند و هر آرگومان با یک فاصله از هم جدا شود.

برای شروع ایجاد یک تجزیه کننده فرمان که این قالب را مدیریت می کند، خطوط کد زیر را به تابع مدیریت پیام اضافه کنید:

discord-bot/index.js

...
const prefix = "!";

client.on("messageCreate", function(message) {
  if (message.author.bot) return;
  if (!message.content.startsWith(prefix)) return;
});
...

شما خط اول کد را اضافه می کنید تا مقدار “!” به پیشوند ثابت که از آن به عنوان پیشوند ربات استفاده خواهید کرد.

خط دوم کدی که اضافه می‌کنید بررسی می‌کند که آیا محتوای پیامی که ربات در حال پردازش است با پیشوندی که تنظیم کرده‌اید شروع می‌شود یا خیر، و اگر این کار را نکرد، ادامه پردازش پیام را متوقف می‌کند.

اکنون باید بقیه پیام را به نام فرمان و هر آرگومان موجود در پیام تبدیل کنید. خطوط برجسته زیر را اضافه کنید:

discord-bot/index.js

...
client.on("messageCreate", function(message) {
  if (message.author.bot) return;
  if (!message.content.startsWith(prefix)) return;

  const commandBody = message.content.slice(prefix.length);
  const args = commandBody.split(' ');
  const command = args.shift().toLowerCase();
});
...

شما از خط اول در اینجا برای حذف پیشوند از محتوای پیام استفاده می کنید و نتیجه را به commandBody ثابت اختصاص می دهید. این ضروری است زیرا نمی خواهید پیشوند را در نام فرمان تجزیه شده قرار دهید.

خط دوم پیام را با پیشوند حذف شده می گیرد و از روش تقسیم بر روی آن استفاده می کند و یک فاصله به عنوان جداکننده دارد. این آن را به آرایه‌ای از رشته‌های فرعی تقسیم می‌کند و هر جا که فاصله وجود داشته باشد، یک تقسیم می‌شود. این منجر به آرایه ای می شود که نام فرمان را در بر می گیرد، سپس، اگر در پیام گنجانده شود، هر گونه آرگومان. شما این آرایه را به آرگ های ثابت اختصاص می دهید.

خط سوم اولین عنصر را از آرایه args حذف می کند (که نام دستور ارائه شده است)، آن را به حروف کوچک تبدیل می کند و سپس آن را به دستور ثابت اختصاص می دهد. این به شما امکان می دهد نام فرمان را ایزوله کنید و فقط آرگومان ها را در آرایه باقی بگذارید. شما همچنین از روش toLowerCase استفاده می کنید زیرا دستورات معمولاً در ربات های Discord به حروف بزرگ و کوچک حساس نیستند.

شما ساختن یک تجزیه کننده فرمان، پیاده سازی یک پیشوند مورد نیاز، و دریافت نام فرمان و هر گونه آرگومان از پیام ها را تکمیل کرده اید. اکنون کد دستورات خاص را پیاده سازی و ایجاد خواهید کرد.

برای شروع اجرای دستور ping کد زیر را اضافه کنید:

discord-bot/index.js

...
  const args = commandBody.split(' ');
  const command = args.shift().toLowerCase();

  if (command === "ping") {
                           
  }                        
});
...

این دستور if بررسی می کند که آیا نام فرمانی که شما تجزیه کرده اید (به دستور ثابت اختصاص داده شده) با “ping” مطابقت دارد یا خیر. اگر این کار را کرد، نشان می دهد که کاربر می خواهد از دستور “ping” استفاده کند. کد دستور خاص را در بلوک دستور if قرار می دهید. شما این الگو را برای دستورات دیگری که می خواهید اجرا کنید تکرار خواهید کرد.

اکنون می توانید کد دستور “ping” را پیاده سازی کنید:

discord-bot/index.js

...
  if (command === "ping") {
    const timeTaken = Date.now() - message.createdTimestamp;
    message.reply(`Pong! This message had a latency of ${timeTaken}ms.`);
  }
...

فایل خود را ذخیره کرده و از آن خارج شوید.

شما بلوک فرمان “ping” را اضافه می کنید که تفاوت بین زمان فعلی – که با استفاده از روش now در شیء Date یافت می شود – و مهر زمانی که پیام ایجاد شده را در میلی ثانیه محاسبه می کند. این محاسبه مدت زمان پردازش پیام و “پینگ” ربات را محاسبه می کند.

خط دوم با استفاده از روش پاسخ در ثابت پیام به دستور کاربر پاسخ می دهد. روش پاسخ به کاربر که دستور را فراخوانی کرده است پینگ می دهد (که به کاربر اطلاع می دهد و پیام را برای کاربر مشخص شده برجسته می کند) و به دنبال آن محتوای ارائه شده به عنوان اولین آرگومان متد. شما یک الگوی تحت اللفظی حاوی یک پیام و پینگ محاسبه شده به عنوان پاسخی که روش پاسخ استفاده خواهد کرد ارائه می دهید.

این به اجرای دستور “ping” پایان می دهد.

ربات خود را با استفاده از دستور زیر (در همان پوشه index.js) اجرا کنید:

node index.js

اکنون می توانید از دستور “!ping” در هر کانالی که ربات می تواند مشاهده کند و در آن پیام ارسال کند، استفاده کنید و در نتیجه پاسخ دهید.

شما با موفقیت یک ربات ایجاد کرده اید که می تواند دستورات کاربر را مدیریت کند و اولین دستور خود را اجرا کرده اید. در مرحله بعد با اجرای دستور sum به توسعه ربات خود ادامه می دهید.

مرحله 4 – اجرای دستور Sum

اکنون با اجرای دستور “!sum” برنامه خود را گسترش خواهید داد. دستور هر تعداد آرگومان را می گیرد و آنها را با هم جمع می کند، قبل از اینکه مجموع همه آرگومان ها را به کاربر برگرداند.

اگر ربات Discord شما همچنان در حال اجرا است، می توانید با CTRL + C روند آن را متوقف کنید.

فایل index.js خود را دوباره باز کنید:

nano index.js

برای شروع اجرای دستور “!sum” از بلوک else-if استفاده می کنید. پس از بررسی نام دستور ping، بررسی می کند که آیا نام دستور برابر با “sum” است یا خیر. شما از یک بلوک else-if استفاده خواهید کرد زیرا فقط یک دستور در یک زمان پردازش می شود، بنابراین اگر برنامه با نام دستور “ping” مطابقت داشته باشد، لازم نیست دستور “sum” را بررسی کند. خطوط هایلایت شده زیر را به فایل خود اضافه کنید:

discord-bot/index.js

...
  if (command === "ping") {
    const timeTaken = Date.now() - message.createdTimestamp;
    message.reply(`Ping! This message had a latency of ${timeTaken}ms.`);
  }

  else if (command === "sum") {
                               
  }                            
});
...

می توانید اجرای کد دستور “sum” را شروع کنید. کد دستور “sum” داخل بلوک else-if که به تازگی ایجاد کرده اید می رود. حالا کد زیر را اضافه کنید:

discord-bot/index.js

...
  else if (command === "sum") {
    const numArgs = args.map(x => parseFloat(x));
    const sum = numArgs.reduce((counter, x) => counter += x);
    message.reply(`The sum of all the arguments you provided is ${sum}!`);
  }
...

شما از روش نقشه در لیست آرگومان ها برای ایجاد یک لیست جدید با استفاده از تابع parseFloat در هر آیتم در آرایه args استفاده می کنید. این یک آرایه جدید ایجاد می کند (به ثابت numArgs اختصاص داده می شود) که در آن همه موارد به جای رشته ها اعداد هستند. این بدان معناست که بعداً می توانید با جمع کردن آنها با موفقیت مجموع اعداد را پیدا کنید.

خط دوم از روش کاهش در numArgs ثابت استفاده می کند که تابعی را ارائه می دهد که تمام عناصر لیست را جمع می کند. شما مجموع تمام عناصر موجود در numArgs را به مجموع ثابت اختصاص می دهید.

سپس از روش reply روی شی پیام استفاده می‌کنید تا به دستور کاربر با یک الگوی واقعی پاسخ دهید، که شامل مجموع همه آرگومان‌هایی است که کاربر به ربات ارسال می‌کند.

این به اجرای دستور “sum” پایان می دهد. اکنون ربات را با استفاده از دستور زیر (در همان پوشه index.js) اجرا کنید:

node index.js

اکنون می توانید از دستور “!sum” در هر کانالی که ربات می تواند مشاهده کند و در آن پیام ارسال کند، استفاده کنید.

نسخه زیر یک نسخه کامل از اسکریپت ربات index.js است:

discord-bot/index.js

const Discord = require("discord.js");
const config = require("./config.json");

const client = new Discord.Client({intents: ["GUILDS", "GUILD_MESSAGES"]});

const prefix = "!";

client.on("messageCreate", function(message) {
  if (message.author.bot) return;
  if (!message.content.startsWith(prefix)) return;

  const commandBody = message.content.slice(prefix.length);
  const args = commandBody.split(' ');
  const command = args.shift().toLowerCase();

  if (command === "ping") {
    const timeTaken = Date.now() - message.createdTimestamp;
    message.reply(`Pong! This message had a latency of ${timeTaken}ms.`);
  }

  else if (command === "sum") {
    const numArgs = args.map(x => parseFloat(x));
    const sum = numArgs.reduce((counter, x) => counter += x);
    message.reply(`The sum of all the arguments you provided is ${sum}!`);
  }
});

client.login(config.BOT_TOKEN);

در این مرحله، ربات Discord خود را با اجرای دستور sum توسعه داده اید.

نتیجه

شما یک ربات Discord را با موفقیت پیاده‌سازی کرده‌اید که می‌تواند چندین دستور مختلف کاربر و آرگومان‌های فرمان را مدیریت کند. اگر می‌خواهید ربات خود را گسترش دهید، احتمالاً می‌توانید دستورات بیشتری را اجرا کنید یا بخش‌های بیشتری از Discord API را امتحان کنید تا یک ربات قدرتمند Discord بسازید. می توانید اسناد Discord.js یا اسناد Discord API را مرور کنید تا دانش خود را در مورد Discord API گسترش دهید. به طور خاص، می توانید دستورات ربات خود را به دستورات اسلش تبدیل کنید، که بهترین تمرین برای Discord.js نسخه 13 است.

هنگام ایجاد ربات‌های Discord، همیشه باید شرایط سرویس Discord API را در نظر داشته باشید که نشان می‌دهد توسعه‌دهندگان چگونه باید از Discord API استفاده کنند. اگر می‌خواهید درباره Node.js بیشتر بدانید، نحوه کدنویسی در سری Node.js را بررسی کنید.

https://vpsgol.net/product/vps-germany/

 

https://vpsgol.net/product/vps-usa/

 

https://vpsgol.net/product/vps-france/

 

https://vpsgol.net/product/vps-canada/

 

https://vpsgol.net/product/vps-poland/

 

https://vpsgol.net/product/vps-netherlands/

 

https://vpsgol.net/product/vps-england/

 

 

برچسب‌ها:

 

  • behnam gol mohamadi
  • ۰
  • ۰

 نحوه کار با فایل های فشرده در Node.js

ورود به سایت

 

معرفی

کار با فایل ها یکی از کارهای رایج در بین توسعه دهندگان است. با افزایش حجم فایل های شما، فضای قابل توجهی روی هارد دیسک شما اشغال می شود. دیر یا زود ممکن است لازم باشد فایل ها را به سرورهای دیگر منتقل کنید یا چندین فایل را از دستگاه محلی خود به سیستم عامل های مختلف آپلود کنید. برخی از این پلتفرم ها محدودیت اندازه فایل دارند و فایل های بزرگ را نمی پذیرند. برای حل این مشکل، می توانید فایل ها را در یک فایل ZIP گروه بندی کنید. فایل ZIP یک فرمت آرشیو است که فایل ها را با الگوریتم فشرده سازی بدون اتلاف فشرده و فشرده می کند. الگوریتم می تواند داده ها را بدون از دست دادن داده ها بازسازی کند. در Node.js، می توانید از ماژول adm-zip برای ایجاد و خواندن آرشیوهای ZIP استفاده کنید.

در این آموزش از ماژول adm-zip برای فشرده سازی، خواندن و از حالت فشرده خارج کردن فایل ها استفاده خواهید کرد. ابتدا چندین فایل را با استفاده از adm-zip در یک آرشیو ZIP ترکیب می‌کنید. سپس محتویات بایگانی ZIP را فهرست می کنید. پس از آن، یک فایل را به یک بایگانی ZIP موجود اضافه می‌کنید و در نهایت، یک بایگانی ZIP را در یک فهرست استخراج می‌کنید.

پیش نیازها

برای دنبال کردن این آموزش، شما نیاز دارید:

  • نصب Node.js روی محیط محلی یا سرور شما
  • آشنایی با نحوه نوشتن یک برنامه Node.js
  • درک اولیه از برنامه نویسی ناهمزمان در جاوا اسکریپت.
  • آشنایی با نحوه کار با فایل ها در Node.js.

مرحله 1 – راه اندازی پروژه

در این مرحله، دایرکتوری پروژه خود را ایجاد کرده و adm-zip را به عنوان یک وابستگی نصب می‌کنید. این دایرکتوری جایی است که شما فایل های برنامه خود را نگه می دارید. همچنین دایرکتوری دیگری حاوی فایل های متنی و تصویر ایجاد خواهید کرد. شما این فهرست را در بخش بعدی بایگانی خواهید کرد.

با دستور زیر یک دایرکتوری به نام zip_app ایجاد کنید:

  • mkdir zip_app

با دستور cd به پوشه جدید ایجاد شده بروید:

cd zip_app

در داخل دایرکتوری، یک فایل package.json برای مدیریت وابستگی های پروژه ایجاد کنید:

npm init -y

گزینه -y یک فایل پیش فرض package.json ایجاد می کند.

بعد، adm-zip را با دستور npm install نصب کنید:

npm install adm-zip

پس از اجرای دستور، npm adm-zip را نصب کرده و فایل package.json را به روز می کند.

سپس یک دایرکتوری به نام test ایجاد کنید و وارد آن شوید:

mkdir test && cd test

در این دایرکتوری شما سه فایل متنی ایجاد کرده و یک تصویر را دانلود خواهید کرد. این سه فایل با محتوای ساختگی پر می شوند تا اندازه فایل آنها بزرگتر شود. این به نشان دادن فشرده سازی ZIP هنگام بایگانی این فهرست کمک می کند.

file1.txt را ایجاد کنید و با استفاده از دستور زیر آن را با محتوای ساختگی پر کنید:

yes “dummy content” | head -n 100000 > file1.txt

دستور yes محتوای ساختگی رشته را به طور مکرر ثبت می کند. با استفاده از دستور pipe |، خروجی را از دستور yes ارسال می کنید تا به عنوان ورودی دستور head استفاده شود. دستور head بخشی از ورودی داده شده را در خروجی استاندارد چاپ می کند. گزینه -n تعداد خطوطی که باید در خروجی استاندارد نوشته شود را مشخص می کند. در نهایت، خروجی سر را با استفاده از > به فایل جدید file1.txt هدایت می‌کنید.

یک فایل دوم با رشته “محتوای ساختگی” تکرار شده 300000 خط ایجاد کنید:

yes “dummy content” | head -n 300000 > file2.txt

فایل دیگری با رشته محتوای ساختگی که 600000 خط تکرار شده است ایجاد کنید:

yes “dummy content” | head -n 600000 > file3.txt

در نهایت، یک تصویر را با استفاده از curl در دایرکتوری دانلود کنید:

curl -O https://assets.vpsgol.net/how-to-process-images-in-node-js-with-sharp/underwater.png

با دستور زیر به دایرکتوری اصلی پروژه برگردید:

cd ..

.. شما را به دایرکتوری والد که zip_app است منتقل می کند.

اکنون دایرکتوری پروژه را ایجاد کرده اید، adm-zip را نصب کرده اید و یک دایرکتوری با فایل ها برای بایگانی ایجاد کرده اید. در مرحله بعدی، یک دایرکتوری را با استفاده از ماژول adm-zip بایگانی خواهید کرد.

مرحله 2 – ایجاد یک آرشیو ZIP

در این مرحله از adm-zip برای فشرده سازی و بایگانی دایرکتوری که در قسمت قبل ایجاد کرده اید استفاده می کنید.

برای بایگانی دایرکتوری، ماژول adm-zip را وارد کرده و از روش addLocalFolder() ماژول برای اضافه کردن دایرکتوری به شی ZIP ماژول adm-zip استفاده می کنید. پس از آن، از متد writeZip() ماژول برای ذخیره آرشیو در سیستم محلی خود استفاده خواهید کرد.

یک فایل جدید createArchive.js در ویرایشگر متن دلخواه خود ایجاد و باز کنید. این آموزش از nano، یک ویرایشگر متن خط فرمان استفاده می کند:

nano createArchive.js

سپس، در ماژول adm-zip در فایل createArchive.js خود نیاز دارید:

zip_app/createArchive.js

const AdmZip = require("adm-zip");

ماژول adm-zip کلاسی را ارائه می دهد که حاوی متدهایی برای ایجاد آرشیو ZIP است.

از آنجایی که در طول فرآیند بایگانی با فایل‌های بزرگ مواجه می‌شوید، ممکن است تا زمانی که بایگانی ZIP ذخیره نشود، رشته اصلی را مسدود کنید. برای نوشتن کد غیر مسدود کننده، یک تابع ناهمزمان برای ایجاد و ذخیره یک آرشیو ZIP تعریف می کنید.

در فایل createArchive.js خود، کد هایلایت شده زیر را اضافه کنید:

zip_app/createArchive.js

const AdmZip = require("adm-zip");

async function createZipArchive() {
  const zip = new AdmZip();
  const outputFile = "test.zip";
  zip.addLocalFolder("./test");
  zip.writeZip(outputFile);
  console.log(`Created ${outputFile} successfully`);
}

createZipArchive();

 

createZipArchive یک تابع ناهمزمان است که یک آرشیو ZIP از یک دایرکتوری مشخص ایجاد می کند. چیزی که آن را ناهمزمان می کند، کلمه کلیدی async است که قبل از برچسب تابع تعریف کرده اید. در داخل تابع، نمونه‌ای از ماژول adm-zip ایجاد می‌کنید که روش‌هایی را ارائه می‌کند که می‌توانید برای خواندن و ایجاد آرشیو استفاده کنید. هنگامی که یک نمونه ایجاد می کنید، adm-zip یک ZIP درون حافظه ایجاد می کند که در آن می توانید فایل ها یا دایرکتوری ها را اضافه کنید.

در مرحله بعد، نام بایگانی را تعریف کرده و آن را در متغیر outputDir ذخیره می کنید. برای افزودن دایرکتوری آزمایشی به آرشیو درون حافظه، متد addLocalFolder() را از adm-zip با مسیر دایرکتوری به عنوان آرگومان فراخوانی می کنید.

پس از اضافه شدن دایرکتوری، شما متد writeZip() را از adm-zip با متغیری حاوی نام آرشیو ZIP فراخوانی می کنید. متد writeZip() آرشیو را در دیسک محلی شما ذخیره می کند.

پس از انجام این کار، console.log() را فراخوانی کنید تا ثبت کنید که فایل ZIP با موفقیت ایجاد شده است.

در نهایت، تابع createZipArchive() را فراخوانی می کنید.

قبل از اجرای فایل، کد را در یک بلوک try…catch بپیچید تا خطاهای زمان اجرا را مدیریت کنید:

zip_app/createArchive.js

const AdmZip = require("adm-zip");

async function createZipArchive() {
  try {
    const zip = new AdmZip();
    const outputFile = "test.zip";
    zip.addLocalFolder("./test");
    zip.writeZip(outputFile);
    console.log(`Created ${outputFile} successfully`);
  } catch (e) {
    console.log(`Something went wrong. ${e}`);
  }
}

createZipArchive();

در داخل بلوک try، کد سعی می کند یک بایگانی ZIP ایجاد کند. در صورت موفقیت آمیز بودن، تابع ()createZipArchive با پرش از بلوک catch خارج می شود. اگر ایجاد یک بایگانی ZIP باعث خطا شود، اجرا به بلوک catch پرش می‌کند و خطا را در کنسول ثبت می‌کند.

با CTRL+X فایل را در نانو ذخیره کرده و از آن خارج شوید. برای ذخیره تغییرات، y را وارد کنید و با فشار دادن ENTER در ویندوز یا کلید RETURN در مک، فایل را تأیید کنید.

فایل createArchive.js را با استفاده از دستور node اجرا کنید:

node createArchive.js

خروجی زیر را دریافت خواهید کرد:

 

Output

Created test.zip successfully

محتویات دایرکتوری را فهرست کنید تا ببینید آیا آرشیو ZIP ایجاد شده است یا خیر:

ls

خروجی زیر را دریافت خواهید کرد که آرشیو را در میان مطالب نشان می دهد:

 

Output

createArchive.js  node_modules  package-lock.json
package.json  test  test.zip

با تأیید اینکه بایگانی ZIP ایجاد شده است، بایگانی ZIP و اندازه فایل دایرکتوری آزمایشی را با هم مقایسه می کنید تا ببینید فشرده سازی کار می کند یا خیر.

اندازه دایرکتوری تست را با استفاده از دستور du بررسی کنید:

du -h test

پرچم -h به du دستور می دهد که اندازه فهرست را در قالبی قابل خواندن توسط انسان نشان دهد.

پس از اجرای دستور، خروجی زیر را دریافت خواهید کرد:

 

Output

15M test

سپس، اندازه فایل بایگانی test.zip را بررسی کنید:

du -h test.zip

دستور du خروجی زیر را ثبت می کند:

 

Output

760K    test.zip

همانطور که می بینید، ایجاد فایل ZIP اندازه دایرکتوری را از 15 مگابایت (مگابایت) به 760 کیلوبایت (KB) کاهش داده است، که یک تفاوت بزرگ است. فایل ZIP قابل حمل تر و اندازه کوچکتر است.

اکنون که یک بایگانی ZIP ایجاد کردید، آماده فهرست کردن محتویات در یک فایل ZIP هستید.

مرحله 3 – فهرست کردن فایل ها در آرشیو ZIP

در این مرحله، با استفاده از adm-zip، تمام فایل‌های موجود در آرشیو ZIP را می‌خوانید و فهرست می‌کنید. برای انجام این کار، ماژول adm-zip را با مسیر آرشیو ZIP خود نمونه سازی می کنید. سپس متد ()getEntries ماژول را فراخوانی می کنید که آرایه ای از اشیاء را برمی گرداند. هر شی اطلاعات مهمی در مورد یک آیتم در آرشیو ZIP دارد. برای فهرست کردن فایل‌ها، روی آرایه تکرار می‌کنید و از شی به نام فایل دسترسی پیدا می‌کنید و آن را در کنسول وارد می‌کنید.

readArchive.js را در ویرایشگر متن دلخواه خود ایجاد و باز کنید:

nano readArchive.js

در readArchive.js خود، کد زیر را برای خواندن و فهرست کردن محتویات یک بایگانی ZIP اضافه کنید:

zip_app/readArchive.js

const AdmZip = require("adm-zip");

async function readZipArchive(filepath) {
  try {
    const zip = new AdmZip(filepath);

    for (const zipEntry of zip.getEntries()) {
      console.log(zipEntry.toString());
    }
  } catch (e) {
    console.log(`Something went wrong. ${e}`);
  }
}

readZipArchive("./test.zip");

ابتدا به ماژول adm-zip نیاز دارید.

در مرحله بعد، تابع readZipArchive() را تعریف می کنید که یک تابع ناهمزمان است. در داخل تابع، یک نمونه از adm-zip با مسیر فایل ZIP که می‌خواهید بخوانید ایجاد می‌کنید. مسیر فایل توسط پارامتر filepath ارائه می شود. adm-zip فایل را می خواند و آن را تجزیه می کند.

پس از خواندن بایگانی، یک عبارت for…of تعریف می کنید که روی اشیاء در آرایه ای تکرار می شود که متد getEntries() از adm-zip هنگام فراخوانی آن را برمی گرداند. در هر تکرار، شی به متغیر zipEntry اختصاص داده می شود. در داخل حلقه، شما شی را به رشته ای تبدیل می کنید که شی را با استفاده از متد Node.js toString() نشان می دهد، سپس با استفاده از متد console.log() آن را در کنسول وارد می کنید.

در نهایت، تابع readZipArchive() را با مسیر فایل آرشیو ZIP به عنوان آرگومان فراخوانی می کنید.

فایل خود را ذخیره کرده و از آن خارج شوید، سپس فایل را با دستور زیر اجرا کنید:

node readArchive.js

خروجی مشابه موارد زیر را دریافت خواهید کرد (ویرایش شده برای اختصار):

 

Output

{
    "entryName": "file1.txt",
    "name": "file1.txt",
    "comment": "",
    "isDirectory": false,
    "header": {
        ...
    },
    "compressedData": "<27547 bytes buffer>",
    "data": "<null>"
}
...

کنسول چهار شی را ثبت می کند. سایر اشیاء ویرایش شده اند تا آموزش مختصر بماند.

هر فایل در بایگانی با یک شی شبیه به آنچه در خروجی قبلی است نشان داده می شود. برای دریافت نام فایل برای هر فایل، باید به ویژگی name دسترسی داشته باشید.

در فایل readArchive.js خود، کد هایلایت شده زیر را برای دسترسی به هر نام فایل اضافه کنید:

zip_app/readArchive.js

const AdmZip = require("adm-zip");

async function readZipArchive(filepath) {
  try {
    const zip = new AdmZip(filepath);

    for (const zipEntry of zip.getEntries()) {
      console.log(zipEntry.name);
    }
  } catch (e) {
    console.log(`Something went wrong. ${e}`);
  }
}

readZipArchive("./test.zip");

ویرایشگر متن خود را ذخیره کرده و از آن خارج شوید. حالا با دستور node دوباره فایل را اجرا کنید:

node readArchive.js

با اجرای فایل خروجی زیر حاصل می شود:

 

Output

file1.txt
file2.txt
file3.txt
underwater.png

اکنون خروجی نام فایل هر فایل را در آرشیو ZIP ثبت می کند.

اکنون می توانید هر فایل را در یک آرشیو ZIP بخوانید و فهرست کنید. در بخش بعدی، فایلی را به آرشیو ZIP موجود اضافه می‌کنید.

مرحله 4 – افزودن یک فایل به یک بایگانی موجود

در این مرحله، یک فایل ایجاد می‌کنید و بدون استخراج آن، آن را به بایگانی ZIP که قبلا ایجاد کرده‌اید، اضافه می‌کنید. ابتدا، با ایجاد یک نمونه adm-zip، آرشیو ZIP را می خوانید. دوم، شما از متد ()addFile ماژول برای اضافه کردن فایل در ZIP استفاده می کنید. در نهایت، بایگانی ZIP را در سیستم محلی ذخیره خواهید کرد.

یک فایل file4.txt با محتوای ساختگی که 600000 خط تکرار شده است ایجاد کنید:

yes “dummy content” | head -n 600000 > file4.txt

updateArchive.js را در ویرایشگر متن خود ایجاد و باز کنید:

nano updateArchive.js

در ماژول adm-zip و ماژول fs که به شما امکان می دهد با فایل های موجود در فایل updateArchive.js خود کار کنید، نیاز دارید:

const AdmZip = require("adm-zip");
const fs = require("fs").promises;

شما نیاز به نسخه مبتنی بر وعده از نسخه ماژول fs دارید که به شما امکان می دهد کدهای ناهمزمان بنویسید. هنگامی که شما یک متد fs را فراخوانی می کنید، یک وعده برمی گرداند.

سپس در فایل updateArchive.js خود، کد برجسته شده زیر را برای افزودن یک فایل جدید به بایگانی ZIP اضافه کنید:

zip_app/updateArchive.js

const AdmZip = require("adm-zip");
const fs = require("fs").promises;

async function updateZipArchive(filepath) {
  try {
    const zip = new AdmZip(filepath);

    content = await fs.readFile("./file4.txt");
    zip.addFile("file4.txt", content);
    zip.writeZip(filepath);
    console.log(`Updated ${filepath} successfully`);
  } catch (e) {
    console.log(`Something went wrong. ${e}`);
  }
}

updateZipArchive("./test.zip");

updateZipArchive یک تابع ناهمزمان است که یک فایل را در سیستم فایل می خواند و آن را به یک ZIP موجود اضافه می کند. در تابع، شما یک نمونه از adm-zip را با مسیر فایل آرشیو ZIP در مسیر فایل به عنوان پارامتر ایجاد می کنید. در مرحله بعد، متد readFile() ماژول fs را برای خواندن فایل در سیستم فایل فراخوانی می کنید. متد readFile() یک وعده را برمی‌گرداند که با کلمه کلیدی await حل می‌کنید (wait فقط در توابع ناهمزمان معتبر است). پس از حل شدن، متد یک شی بافر را برمی گرداند که حاوی محتویات فایل است.

در مرحله بعد، متد addFile() را از adm-zip فراخوانی می کنید. این روش دو آرگومان می گیرد. آرگومان اول نام فایلی است که می خواهید به آرشیو اضافه کنید و آرگومان دوم شی بافر حاوی محتویات فایلی است که متد readFile() می خواند.

پس از آن، متد writeZip ماژول adm-zip را برای ذخیره و نوشتن تغییرات جدید در آرشیو ZIP فراخوانی می‌کنید. پس از انجام این کار، متد console.log() را برای ثبت یک پیام موفقیت آمیز فراخوانی می کنید.

در نهایت، تابع updateZipArchive() را با مسیر فایل آرشیو Zip به عنوان آرگومان فراخوانی می کنید.

فایل خود را ذخیره کرده و از آن خارج شوید. فایل updateArchive.js را با دستور زیر اجرا کنید:

node updateArchive.js

خروجی را به این صورت خواهید دید:

 

Output

Updated ./test.zip successfully

اکنون، تأیید کنید که آرشیو ZIP حاوی فایل جدید است. فایل readArchive.js را اجرا کنید تا محتویات آرشیو ZIP را با دستور زیر فهرست کنید:

node readArchive.js

خروجی را به این صورت خواهید دید:

 

Output

Updated ./test.zip successfully

اکنون، تأیید کنید که آرشیو ZIP حاوی فایل جدید است. فایل readArchive.js را اجرا کنید تا محتویات آرشیو ZIP را با دستور زیر فهرست کنید:

node readArchive.js

خروجی زیر را دریافت خواهید کرد:

file1.txt
file2.txt
file3.txt
file4.txt
underwater.png

این تایید می کند که فایل به ZIP اضافه شده است.

اکنون که می توانید یک فایل را به یک بایگانی موجود اضافه کنید، بایگانی را در بخش بعدی استخراج خواهید کرد.

مرحله 5 – استخراج یک بایگانی فشرده

در این مرحله، تمام محتویات یک بایگانی ZIP را می خوانید و در یک دایرکتوری استخراج می کنید. برای استخراج بایگانی ZIP، adm-zip را با مسیر فایل بایگانی نمونه‌سازی می‌کنید. پس از آن، متد ()extractAllTo ماژول را با نام دایرکتوری که می‌خواهید محتوای ZIP استخراج‌شده شما در آن قرار گیرد، فراخوانی می‌کنید.

ExtractArchive.js را در ویرایشگر متن خود ایجاد و باز کنید:

nano extractArchive.js

در ماژول adm-zip و ماژول مسیر در فایل extractArchive.js خود نیاز دارید:

zip_app/extractArchive.js

const AdmZip = require("adm-zip");
const path = require("path");

ماژول مسیر روش های مفیدی را برای برخورد با مسیرهای فایل ارائه می دهد.

هنوز در فایل extractArchive.js خود، کد هایلایت شده زیر را برای استخراج آرشیو اضافه کنید:

zip_app/extractArchive.js

const AdmZip = require("adm-zip");
const path = require("path");

async function extractArchive(filepath) {
  try {
    const zip = new AdmZip(filepath);
    const outputDir = `${path.parse(filepath).name}_extracted`;
    zip.extractAllTo(outputDir);

    console.log(`Extracted to "${outputDir}" successfully`);
  } catch (e) {
    console.log(`Something went wrong. ${e}`);
  }
}

extractArchive("./test.zip");

ExtractArchive() یک تابع ناهمزمان است که پارامتری حاوی مسیر فایل بایگانی ZIP را می گیرد. در داخل تابع، adm-zip را با مسیر فایل بایگانی ZIP ارائه شده توسط پارامتر filepath، نمونه سازی می کنید.

بعد، شما یک الگو را به معنای واقعی کلمه تعریف می کنید. در داخل مکان‌نمای تحت اللفظی الگو (${})، متد parse() را از ماژول path با مسیر فایل فراخوانی می‌کنید. متد parse() یک شی را برمی گرداند. برای دریافت نام فایل ZIP بدون پسوند فایل، ویژگی name را به شیئی که متد parse() برمی گرداند اضافه می کنید. هنگامی که نام بایگانی برگردانده شد، الگو به معنای واقعی کلمه مقدار را با رشته _extracted درون یابی می کند. سپس مقدار در متغیر outputDir ذخیره می شود. این نام دایرکتوری استخراج شده خواهد بود.

در مرحله بعد، متد ExtractAllTo ماژول adm-zip را با نام دایرکتوری ذخیره شده در outputDir برای استخراج محتویات در دایرکتوری فراخوانی می کنید. پس از آن، برای ثبت یک پیام موفقیت آمیز، console.log() را فراخوانی می کنید.

در نهایت، تابع extractArchive() را با مسیر آرشیو ZIP فراخوانی می کنید.

فایل خود را ذخیره کنید و از ویرایشگر خارج شوید، سپس فایل extractArchive.js را با دستور زیر اجرا کنید:

node extractArchive.js

خروجی زیر را دریافت می کنید:

 

Output

Extracted to "test_extracted" successfully

تأیید کنید که دایرکتوری حاوی محتویات ZIP ایجاد شده است:

ls

خروجی زیر را دریافت خواهید کرد:

 

Output

createArchive.js   file4.txt   package-lock.json
readArchive.js  test.zip        updateArchive.js
extractArchive.js  node_modules  package.json
test           test_extracted

اکنون به دایرکتوری حاوی محتویات استخراج شده بروید:

cd test_extracted

فهرست مطالب در دایرکتوری:

ls

خروجی زیر را دریافت خواهید کرد:

 

Output

file1.txt  file2.txt  file3.txt  file4.txt  underwater.png

اکنون می توانید ببینید که دایرکتوری دارای تمام فایل هایی است که در دایرکتوری اصلی بودند.

شما اکنون محتوای آرشیو ZIP را در یک فهرست استخراج کرده اید.

نتیجه

در این آموزش، شما یک بایگانی ZIP ایجاد کردید، محتویات آن را فهرست کردید، یک فایل جدید به آرشیو اضافه کردید و تمام محتوای آن را با استفاده از ماژول adm-zip در یک فهرست استخراج کردید. این به عنوان پایه خوبی برای کار با آرشیوهای ZIP در Node.js خواهد بود.

 

https://vpsgol.net/product/vps-germany/

 

https://vpsgol.net/product/vps-usa/

 

https://vpsgol.net/product/vps-france/

 

https://vpsgol.net/product/vps-canada/

 

https://vpsgol.net/product/vps-poland/

 

https://vpsgol.net/product/vps-netherlands/

 

https://vpsgol.net/product/vps-england/

 

برچسب‌ها:Node.jsپلتفرم جاواجاواخرید سرور مجازیسرورسرور مجازیفشرده سازی در Node.jsنصب Node.js

  • behnam gol mohamadi