آموزش ساده ساخت ربات تلگرام روی Cloudflare با TypeScript

سرویس Cloudflare Workers محیطی قدرتمند به شما میده تا برنامه‌هاتون رو به صورت رایگان اجرا کنید و اون‌ها رو با بقیه به اشتراک بگذارید. توی این آموزش به شما نشون ممیدم که چطور ربات تلگرام خودتون رو به سادگی روی این سرویس اجرا کنید. برای این کار به دانش کلی از زبان JavaScript یا TypeScript نیاز دارید.

ساخت یک پروژه‌ی Worker جدید

۱. آماده کردن محیط توسعه برنامه

قبل از اینکه شروع کنیم باید wrangler رو نصب کنید. برای اینکار توی cmd دستور زیر رو اجرا کنید:

npm install wrangler
نکته: اگر نیاز به نصب npm دارید، به سایت nodejs.org برید و Node.js رو نصب کنید.

۲. یا استفاده از قالب تلگرام Cloudflare یک پروژه بسازید.

برای اینکار، بعد از نصب wrangler به فولدری که می‌خواید پروژه رو ایجاد کنید برید، cmd رو اونجا باز کنید و دستور زیر رو اجرا کنید:

npm create cloudflare@latest MY_WORKER_NAME

به جای MY_WORKER_NAME اسم دلخواهتون رو بنویسید. اگر اولین باره که این دستور رو اجرا می‌کنید، یک پنجره جدید توی مرورگر باز میشه که باید وارد حساب Cloudflare بشید و مراحلی که میگه رو طی کنید تا به سایت Cloudflare و حسابتون متصل بشه.

وقتی این پیغام رو نشون داد: What would you like to start with این آدرس رو وارد کنید و اینتر رو بزنید:

https://github.com/m-sarabi/cloudflare-telegram-bot

و بعدش Typescript رو انتخاب کنید.

در ادامه ازتون می‌پرسه که آیا میخواید به git وصل بشید و یا پروژه‌تون رو پیاده کنید. در هر دو مورد گزینه No رو بزنید. وقتی پیغام SUCCESS Application created successfully ظاهر شد یعنی پروژه با موفقیت ساخته شده.

ساخت یک بات جدید در ربات BotFather

۱. حالا به ربات BotFather تو تلگرام برید و با دستور newbot یک ربات جدید بسازید.

۲. مراحلی که نشون میده رو طی کنید تا کد API Token رو بهتون بده.

۳. حالا به پوشه‌ای که پروژه رو ساختید برید و فایل wrangler.toml رو باز کنید و چند خط زیر رو بهش اضافه کنید:

[vars]
SECRET = &quot<SECRET>&quot
TOKEN = &quot<API_TOKEN>&quot
  • به جای <SECRET> یک کد دلخواه بنویسید. این کد برای اطمینان از اینکه درخواست‌ها از جانب شما هست استفاده میشه (مثل رمز عبور) فقط از حروف انگلیسی، اعداد، _ و - می‌تونید استفاده کنید.
  • به جای <API_TOKEN> کد API که از BotFather گرفتید رو وارد کنید.

بعد از این توی فولدر پروژه cmd رو باز کنید و دستور زیر رو اجرا کنید تا کدهایی که بالا وارد کردید به فایل worker-configuration.d.ts اضافه بشن.

نوشتن دستورات بات تلگرام

حالا به جای جذابش رسیدیم. توی این مقاله یک نمونه ربات خیلی ساده رو پیاده می‌کنید:

وقتی کاربری وارد ربات شد و دکمه شروع رو زد یا دستور start رو وارد کرد، ربات یک پیغام با یک دکمه نشون میده. وقتی کاربر دکمه‌ی پیغام رو زد، دکمه حذف میشه و ربات یک پیغام دیگه می‌فرسته.

نمایش پیغام در شروع ربات

تمام توابعی که برای مدیریت update های ربات وجود دارن داخل پوشه src/telegram/handlers هستن. به این پوشه برید و handleMessage.ts رو طبق کد زیر تغییر بدید:

import { tg } from '../lib/methods';

export async function handleMessage(message: tgTypes.Message) {
    const messageText = message.text;
    const chatId = message.chat.id;
    if (messageText === '/start') {
        await tg.sendMessage({
            text: 'به ربات من خوش آمدید. برای شروع قوانین ربات را قبول کنید',
            chat_id: chatId,
            reply_markup: {
                inline_keyboard: [
                    [{
                        text: 'قبول می‌کنم',
                        callback_data: 'accept_rules'
                    }]
                ]
            }
        });
    }
}

اینجا بعد از راف دستور start با استفاده از تابع tg.sendMessage یک پیغام با یک دکمه به کاربر می‌فرستیم.

نمایش پیغام دوم بعد بعد از فشردن دکمه پیغام

برای نمایش پیغام وقتی کاربر دکمه‌ای که به پیغام وصل هست رو فشار داد، فایل handleCallbackQuery.ts رو مطابق کد زیر تغییر بدید:

import { tg } from '../lib/methods';

export async function handleCallbackQuery(callbackQuery: tgTypes.CallbackQuery) {
    const data = callbackQuery.data;
    const messageId = callbackQuery.message?.message_id;
    const chatId = callbackQuery.message?.chat.id;
    if (messageId && chatId) {
        if (data === 'accept_rules') {
            await tg.editMessageReplyMarkup({
                chat_id: chatId,
                message_id: messageId,
                reply_markup: undefined
            });
            await tg.sendMessage({
                chat_id: chatId,
                text: 'برای قبول قوانین متشکرم'
            });
        }
    }
}

رجیستر کردن ربات و پیاده سازی روی Cloudflare

۱. حالا cmd رو توی پوشه اصلی پروژه باز کنید و دستور زیر رو اجرا کنید:

wrangler deploy

۲. به داشبورد حساب cloudflare خودتون dash.cloudflare.com برید و از منوی کناری گزینه Workers & Pages رو انتخاب کنید.

۳. کنار اسم پروژه‌ای که ساختید Visit رو بزنید. یک صفحه‌ی دیگه توی مرورگر باز میشه.

۴. عبارت زیر رو به آخر آدرس اضافه کنید و دکه اینتر رو بزنید:

/registerWebhook

اگر پیغام Webhook registered نمایش داده شد یعنی موفقیت‌آمیز بوده.

حالا می‌تونید به رباتی که ساختید برید و دکمه Start یا دستور start/ رو وارد کنید تا ربا پیغامی که ساختیم رو بفرسته.

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

اگر این مطلب مفید بود لطفا به آدرس GitHub قالب تلگرام برید و یک ستاره بهش بدید.

از اینکه این مطلب رو تا آخر خوندید سپاسگذارم.