توسعه با GramJS

ساخت کلاینت و اتوماسیون تلگرام با Node.js و MTProto

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

در حالی که Telegram Bot API امکانات محدودی دارد، استفاده از MTProto به توسعه‌دهندگان اجازه می‌دهد تقریباً تمام قابلیت‌های کلاینت رسمی تلگرام را پیاده‌سازی کنند.

در اکوسیستم جاوااسکریپت، یکی از مهم‌ترین کتابخانه‌هایی که دسترسی به این پروتکل را فراهم می‌کند GramJS است.

GramJS یک کتابخانه متن‌باز برای Node.js و JavaScript است که امکان تعامل مستقیم با Telegram MTProto API را فراهم می‌کند و به توسعه‌دهندگان اجازه می‌دهد:

  • کلاینت تلگرام بسازند
  • اتوماسیون حساب کاربری انجام دهند
  • ربات‌های پیشرفته‌تر از Bot API ایجاد کنند
  • سیستم‌های مانیتورینگ یا مدیریت گروه‌ها بسازند

در این مقاله به‌صورت کامل با معماری، نصب، استفاده و قابلیت‌های پیشرفته GramJS آشنا می‌شویم.

 

GramJS چیست؟

GramJS یک کتابخانه MTProto برای JavaScript و TypeScript است که الهام‌گرفته از پروژه معروف Telethon (برای Python) ساخته شده است.

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

برخلاف Bot API که فقط با توکن بات کار می‌کند، GramJS از حساب واقعی کاربر استفاده می‌کند.

به همین دلیل امکانات بسیار بیشتری در اختیار شما قرار می‌گیرد.

 

تفاوت GramJS با Telegram Bot API

یکی از مهم‌ترین سوالات توسعه‌دهندگان این است که چرا باید از GramJS استفاده کنیم در حالی که Bot API وجود دارد.

Bot API

محدودیت‌های مهم Bot API:

  • دسترسی محدود به API تلگرام
  • عدم دسترسی به پیام‌های خصوصی کاربران
  • عدم دسترسی کامل به گروه‌ها
  • عدم امکان مدیریت کامل حساب کاربری

Bot API برای ساخت ربات‌های ساده طراحی شده است.

 

GramJS (MTProto)

GramJS تقریباً تمام قابلیت‌های کلاینت رسمی تلگرام را فراهم می‌کند.

قابلیت‌ها:

  • خواندن تمام پیام‌ها
  • مدیریت گروه‌ها
  • ارسال پیام از حساب کاربری
  • دریافت تمام Update ها
  • ساخت کلاینت تلگرام
  • دانلود و آپلود فایل
  • مدیریت کانال‌ها

در واقع GramJS به شما اجازه می‌دهد یک کلاینت تلگرام واقعی بسازید.

 

معماری GramJS

برای درک بهتر GramJS باید ابتدا ساختار MTProto را بدانیم.

معماری به صورت زیر است:

  • Application

  • GramJS Client

  • MTProto Protocol

  • Telegram Servers

در این ساختار:

Application

کدی است که شما می‌نویسید.

GramJS Client

کتابخانه‌ای است که ارتباط با MTProto را مدیریت می‌کند.

MTProto

پروتکل رمزنگاری و ارتباطی تلگرام است.

Telegram Servers

سرورهای اصلی تلگرام هستند.

 

پیش‌نیازهای استفاده از GramJS

برای استفاده از GramJS ابتدا باید از تلگرام API ID و API HASH دریافت کنید.

مراحل:

  1. ورود به سایت
 
https://my.telegram.org
  1. انتخاب گزینه
 
API Development Tools
  1. ساخت اپلیکیشن جدید

در این مرحله دو مقدار دریافت می‌کنید:

API_ID

API_HASH

این دو مقدار برای اتصال به سرورهای تلگرام ضروری هستند.

 

نصب GramJS

برای نصب GramJS از npm استفاده می‌کنیم.

 
npm install telegram

یا با yarn

 
yarn add telegram

این پکیج شامل تمام ابزارهای لازم برای ارتباط با MTProto است.

 

ساخت اولین کلاینت تلگرام

اکنون یک مثال ساده برای اتصال به تلگرام می‌نویسیم.

 
import { TelegramClient } from "telegram"
import { StringSession } from "telegram/sessions"
import input from "input"

const apiId = 123456
const apiHash = "YOUR_API_HASH"

const stringSession = new StringSession("")

const client = new TelegramClient(
  stringSession,
  apiId,
  apiHash,
  { connectionRetries: 5 }
)

async function start() {

  await client.start({
    phoneNumber: async () => await input.text("phone: "),
    password: async () => await input.text("password: "),
    phoneCode: async () => await input.text("code: "),
  })

  console.log("Connected to Telegram")

}

start()

این کد:

  1. به تلگرام متصل می‌شود
  2. شماره تلفن را دریافت می‌کند
  3. کد تایید را وارد می‌کند
  4. سشن را ایجاد می‌کند

 

Session در GramJS

یکی از مهم‌ترین مفاهیم در GramJS Session است.

Session اطلاعات احراز هویت شما را ذخیره می‌کند تا در اجرای بعدی نیاز به لاگین مجدد نباشد.

GramJS از String Session استفاده می‌کند.

نمونه:

 
console.log(client.session.save())

خروجی چیزی شبیه به این خواهد بود:

 
1AAgA....

این رشته را ذخیره می‌کنید و در اجرای بعدی استفاده می‌کنید.

 

 

ارسال پیام با GramJS

برای ارسال پیام از متد sendMessage استفاده می‌کنیم.

 
await client.sendMessage("username", {
  message: "Hello from GramJS"
})

این دستور یک پیام به کاربر مورد نظر ارسال می‌کند.

 

 

دریافت پیام‌ها

GramJS از سیستم Update Handler استفاده می‌کند.

 
client.addEventHandler(async (event) => {

  const message = event.message

  console.log(message.text)

})

این کد تمام پیام‌های دریافتی را چاپ می‌کند.

 

کار با گروه‌ها

با GramJS می‌توانید گروه‌ها را مدیریت کنید.

مثلاً گرفتن لیست دیالوگ‌ها:

 
const dialogs = await client.getDialogs()

console.log(dialogs)

یا ارسال پیام در گروه:

 
await client.sendMessage("group_username", {
  message: "Hello Group"
})

 

 

دانلود فایل‌ها

تلگرام امکان دانلود انواع فایل‌ها را فراهم می‌کند.

مثال:

await client.downloadMedia(message)

این متد:

  • عکس
  • ویدیو
  • فایل
  • ویس

را دانلود می‌کند.

 

آپلود فایل

 
await client.sendFile("username", {
  file: "photo.jpg",
  caption: "My photo"
})

 

 

مدیریت کانال‌ها

GramJS امکان مدیریت کامل کانال‌ها را فراهم می‌کند.

برای مثال:

  • ارسال پست
  • ویرایش پیام
  • حذف پیام
  • مدیریت اعضا

 

Update System در GramJS

تلگرام از یک سیستم به نام Update استفاده می‌کند.

هر اتفاقی که در تلگرام رخ دهد یک Update تولید می‌کند.

نمونه‌ها:

  • پیام جدید
  • عضو جدید
  • حذف پیام
  • تغییر نام گروه

GramJS این Update ها را دریافت و پردازش می‌کند.

 

ساخت ربات با حساب کاربری

یکی از کاربردهای GramJS ساخت Userbot است.

Userbot در واقع رباتی است که با حساب واقعی کاربر کار می‌کند.

کاربردها:

  • اتوماسیون گروه
  • پاسخ خودکار
  • مدیریت پیام‌ها
  • مانیتورینگ کانال‌ها

 

بهینه‌سازی عملکرد

برای پروژه‌های بزرگ باید به موارد زیر توجه کنید:

مدیریت Rate Limit

تلگرام محدودیت‌هایی برای درخواست‌ها دارد.

مدیریت اتصال

GramJS از reconnect پشتیبانی می‌کند.

مدیریت Update Queue

در پروژه‌های بزرگ باید Update ها را صف‌بندی کنید.

 

امنیت در GramJS

از آنجا که GramJS با حساب واقعی کار می‌کند، امنیت بسیار مهم است.

نکات مهم:

  • Session را امن نگه دارید
  • API Hash را منتشر نکنید
  • از rate limit تجاوز نکنید
  • درخواست‌های غیرطبیعی ارسال نکنید

 

 

مقایسه GramJS با Telethon

Telethon نسخه Python این کتابخانه است.

مقایسه:

زبان

GramJS → JavaScript

Telethon → Python

اکوسیستم

Node.js → مناسب برای backend و microservice

Python → مناسب برای اسکریپت‌ها و اتوماسیون

 

 

کاربردهای واقعی GramJS

GramJS در پروژه‌های زیادی استفاده می‌شود.

نمونه کاربردها:

  • ساخت کلاینت تلگرام
  • مانیتورینگ کانال‌ها
  • سیستم تحلیل پیام‌ها
  • مدیریت گروه‌های بزرگ
  • ساخت userbot

 

جمع‌بندی

GramJS یکی از قدرتمندترین ابزارهای توسعه برای تلگرام در اکوسیستم JavaScript است. این کتابخانه با استفاده از MTProto امکان دسترسی مستقیم به قابلیت‌های کامل تلگرام را فراهم می‌کند.

برخلاف Bot API که محدود است، GramJS اجازه می‌دهد توسعه‌دهندگان کلاینت‌ های کامل تلگرام یا سیستم‌ های اتوماسیون پیشرفته ایجاد کنند.

اگر قصد دارید پروژه‌هایی مانند:

  • userbot
  • سیستم مدیریت گروه
  • ابزار تحلیل پیام
  • یا حتی کلاینت تلگرام

بسازید، GramJS یکی از بهترین انتخاب‌ها در محیط Node.js است.