آموزش ساخت ربات تلگرام
2.34K subscribers
1 photo
2 files
58 links
هر پنج‌شنبه یک آموزش در کانال یوتوب
🔻🔻🔻🔻
https://zaya.io/CodingWithAbdollah

گیت هاب 🔻
https://github.com/moradpoor
Download Telegram
آموزش ساخت ربات تلگرام
یه موقعی چیزی که بهم حس خوب میداد این بود که حتی اگر کدم رو توی نوت پد هم بنویسم میدونم ران میشه اما الان دیگه دوره هوش مصنوعیه ولی برخی چیزها تغییر نکرده هنوزم نیازه شما کدنویسی رو بلد باشید و از ai بعنوان ابزار استفاده کنید حتی اگر کدی که بهتون میده کار…
python 
import jdatetime
from datetime import datetime, timedelta, timezone

# تاریخ میلادی (UTC)
gregorian_date = datetime.now(timezone.utc)

# تبدیل به جلالی
jalali_date = jdatetime.datetime.fromgregorian(datetime=gregorian_date)

print(jalali_date.strftime("%Y/%m/%d %H:%M:%S"))


این کد رو ai داده برای تبدیل میلادی به جلالی, اشتباه کجاست ؟
تلگرام امکان راه اندازی ربات تلگرام بدون نیاز به سرور رو فعلا برای زبان جاوا اسکریپت فعال کرده, ببینیم در ادامه آیا برای سایر زبان ها از جمله پایتون هم اضافه میکنه یا نه, و اگر شد یک ویدیو در موردش قرار میدم

اطلاعات بیشتر در مورد روند اجرا با js
https://core.telegram.org/bots/serverless
در دو آپدیت اخیر تلگرام حالت مهمان (guest mode) و حالت پیام خصوصی Ephemeral Messages) اضافه شده که میتونید باهاش ربات های جالبی بسازید

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

حالت خصوصی برای گروهه که اگر ربات ادمین باشه کاربر میتونه با ارسال یک دستور پیام خودش و ربات رو توی همون گروه خصوصی کنه که اعضای دیگه نبینن

هردو این قابلیت رو من در یک ترجمه گنجوندم که تست کنید

۱۴۰۴/۰۴/۳۰

@TrjmeBot
حریم خصوصی : طبق محدودیت تلگرام ربات نمیتونه به پیام های غیر از اونی که روش منشن شده دسترسی داشته باشه و در گروه هم علاوه بر این مورد، به اعضای گروه هم دسترسی نداره
@dp.guest_message()
async def GuestMode(message: Message)


با این دکوریتور توی aiogram میتونید کسانی که شمارو در حالت مهمان (در شخصی خودشون با دیگران یا گروه هایی که ربات عضو نیست ) منشن میکنن رو ببینید

برای پاسخ هم از این دستور استفاده کنید
await message.answer(text=text, receiver_user_id=message.from_user.id) 


نکته مهم اینکه چک کنید که توی پیام guest_query_id باشه , با دستور زیر

is_guest = message.guest_query_id is not None
برای اضافه کردن دستور حالت خصوصی تنها چیز اضافه ای که داره گزینه is_ephemeral هست

به نمونه دقت کنید
BotCommand(command="ptrans", description="ترجمه خصوصی", is_ephemeral=True)


اینکه چه کسی از این دستور استفاده میکنه رو میتونید با همون دکوریتور عادی آیوگرام بگیرید


@dp.message(filters.Command("ptrans"))
قبل از استفاده حتما آیوگرام رو به نسخه 3.30.0 آپدیت کنید

pip install -U aiogram


اگر چندتا نسخه پایتون روی سرورتون دارید

python3.12 -m pip install -U aiogram
from aiogram import Bot, Dispatcher, filters
from aiogram.types import Message,InlineQueryResultArticle,\
InputRichMessage, CopyTextButton, InputRichMessageContent
import uuid


bot = Bot("TOKEN")
dp = Dispatcher()

@dp.message(filters.Command("ptrans"))
async def incoming_handler(message: Message):
print("یکی دستور حالت خصوصی فرستاده .")
await message.answer(text="این پیامو فقط خودت میبینی", receiver_user_id=message.from_user.id)

@dp.guest_message()
async def GuestMode(message: Message):
print("یکی در حالت مهمان پیام داده")

#برای اطمینان از اینکه مقدار مورد نیاز برای پاسخ رو داریم
is_guest = message.guest_query_id is not None
if is_guest:
rich = InputRichMessage(
format="markdown",
text="در حالت مهمان پیام دادی"
)
return await message.answer_guest_query(
result=InlineQueryResultArticle(
id=str(uuid.uuid4()),
title="ترجمه",
input_message_content=InputRichMessageContent(
rich_message=rich
)
)
)


async def main():
dp.start_polling(bot)

import asyncio
asyncio.run(main())


نمونه کد برای تست, کافیه توکن رباتتون رو جایگزین کنید

البته این کد باز جای کار داره که باید خودتون بهترش کنید
آموزش ساخت ربات تلگرام
from aiogram import Bot, Dispatcher, filters from aiogram.types import Message,InlineQueryResultArticle,\ InputRichMessage, CopyTextButton, InputRichMessageContent import uuid bot = Bot("TOKEN") dp = Dispatcher() @dp.message(filters.Command("ptrans"))…
برای بخش مهمان دوتا چیز رو اضافه کردم
اول :
‍‍‍
rich = InputRichMessage(
format="markdown",
text="در حالت مهمان پیام دادی"
)

این برای اینه که اگر جواب کاربر طولانیه نیازه به پارت نباشه و از قابلیت جدید متن های طولانی تلگرام بهره ببره

دوم:
جواب حالت مهمان تقریبا شبیه جواب اینلاین کوئریه (همون که کاربر آیدی ربات رو تایپ میکنه یه فاصله میزاره و متن میزنه و همونجا هم لیست نتایج میاد )

پس پاسخ حالت مهمان شد :
return await message.answer_guest_query(
result=InlineQueryResultArticle(
id=str(uuid.uuid4()),
title="ترجمه",
input_message_content=InputRichMessageContent(
rich_message=rich
)
)
)
در چند وقت اخیر تلگرام آپدیت های زیادی اضافه کرده که باید طبق داکیومنت بخونید بگید کدوم بیشتر به کارتون میاد

این چند مورد رو خودم دوست داشتم و تست کردم
زرین پال به جز api که برای درگاه پرداختش استفاده میشه یه api دیگه برای خود مدیریت پنلش داره که با GraphQL ساخته شده, اگر درگاه زرین پال دارید پیشنهادمیکنم حتما بعنوان یک پروژه تمرینی برید سراغش

https://www.zarinpal.com/docs/apiDocs
آموزش ساخت ربات تلگرام
زرین پال به جز api که برای درگاه پرداختش استفاده میشه یه api دیگه برای خود مدیریت پنلش داره که با GraphQL ساخته شده, اگر درگاه زرین پال دارید پیشنهادمیکنم حتما بعنوان یک پروژه تمرینی برید سراغش https://www.zarinpal.com/docs/apiDocs
توی شاخه بک‌اند, api نویسی خودش یه مهارت خیلی خوبه, تمام کسب و کارهایی که سایت و اپلکیشن و چیزهای دیگه دارن, اولین چیزی که توسعه میدن یک api واحد هست و بعدش از اون api در سایت و برنامه ها استفاده میکنن
آموزش ساخت ربات تلگرام
زرین پال به جز api که برای درگاه پرداختش استفاده میشه یه api دیگه برای خود مدیریت پنلش داره که با GraphQL ساخته شده, اگر درگاه زرین پال دارید پیشنهادمیکنم حتما بعنوان یک پروژه تمرینی برید سراغش https://www.zarinpal.com/docs/apiDocs
import requests
import os
from dotenv import load_dotenv
load_dotenv()

ZARINPAL_ACCESS_TOKEN = os.getenv("ZARINPAL_ACCESS_TOKEN")

BASE_URL = "https://next.zarinpal.com/api/v4/graphql"

headers={
"Accept": "application/json",
"Authorization": f"Bearer {ZARINPAL_ACCESS_TOKEN}",
"Content-Type": "application/json",
}

dargahha = """
query{
Terminals {
id
status
preferred_bank_account_id
domain
support_phone
key
name
logo
created_at
updated_at
}
}
"""

req = requests.post(
BASE_URL,
headers=headers,
json={"query": dargahha}
)

print(req.json())



نمونه کد که برای گرفتن لیست درگاه ها استفاده میشه
نکته : من ZARINPAL_ACCESS_TOKEN روی توی یک فایل .env ذخیره کردم و خط ۱ تا ۳ برای لود کردن همون فایل .env هست و شما میتونید اونو مستقیم توی کدتون بیارید و لزومی نداره حتما از .env استفاده کنید
اگر شما یه عدد بالای ۹۹۹ داشته باشید نیازه که سمت کاربر اونو با جداکننده نشون بدید چی کار میکنید؟

لطفا بدون استفاده از ai جواب هاتون رو بنویسید اینجا داریم یاد میگیریم
ایموجی های پرمیوم چطور تو ربات میشه استفاده کرد؟


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

بعدش دو روش پیش رو دارید که متن با ایموجی پریمیوم باشه

روش اول : متن آماده با ایموجی پریمیوم رو در یک کانال خصوصی آماده بزارید و هرجا خواستید کپی مسیج بزنید

روش دوم : کل Entity مسیج رو ذخیره کنید و موقع ارسال پیام به entities پاس بدید
روش دوم احتمالا یکم گنگ باشه، کدش رو فردا یادم بمونه قرار میدم

ضمنا برای دکمه ها هم میتونید ایموجی پریمیوم استفاده کنید ، برای پیدا کردن آیدی ایموجی هم کافیه پست شامل ایموجی رو برای ربات زیر بفرستید
@AdsMarkdownBot
آیدی اون ایموجی رو بهتون میده و میتونید توی کیبرد استفاده کنید (اینم نمونه میزارم)