مفاهیم پایه¶
در این بخش مفاهیم اساسی SPlusthon را یاد خواهید گرفت. درک این مفاهیم برای استفاده مؤثر از کتابخانه ضروری است.
فهرست مطالب¶
-
:material-account-group:{ .lg .middle } Entity (موجودیت)
توضیحات جامع درباره Entity و نحوه استفاده از آن.
-
:material-database:{ .lg .middle } Session (نشست)
توضیحات درباره Session و نحوه مدیریت آن.
-
:material-bell-ring:{ .lg .middle } رویدادها (Events)
سیستم قدرتمند رویدادها برای پاسخ خودکار.
-
:material-key:{ .lg .middle } String Sessions
راهنمای استفاده از String Sessions.
-
:material-alert-circle:{ .lg .middle } مدیریت خطاها
راهنمای مدیریت خطاها و عیبیابی.
-
:material-api:{ .lg .middle } API کامل
استفاده از API کامل سروشپلاس.
-
:material-compare:{ .lg .middle } مقایسه Bot API و MTProto
مقایسه روشهای مختلف توسعه ربات.
-
:material-language-python:{ .lg .middle } Mastering asyncio
راهنمای جامع asyncio برای استفاده مؤثر.
مفهوم Entity¶
Entity به هر شیء User، Chat یا Channel اشاره دارد که API در پاسخ به متدهای خاصی مانند GetUsersRequest برمیگرداند.
چه چیزی به عنوان Entity استفاده میشود؟¶
- یوزرنیمها: مانند
username - شماره تلفنها: مانند
+989123456789 - لینکهای چت: مانند
t.me/username - لینکهای دعوت: مانند
t.me/joinchat/AAAAAFFszQPyPEZ7wgxLtd - شناسهها: مانند
123456 - آبجکتهای خود: مانند
User،ChatیاChannel
ترتیب استفاده از Entity¶
از بهترین به بدترین استفاده کنید:
- Input Entities: مانند
event.input_chatیاmessage.input_sender - Entities: مانند
userیاchannel(اگر از قبل دارید) - شناسهها: از کش session استفاده میشود
- یوزرنیمها، شماره تلفنها و لینکها: کش استفاده میشود مگر اینکه
client.get_entity()را فراخوانی کنید
مفهوم Session¶
Session بخش مهمی از کتابخانه است که اطلاعات احراز هویت و کش entity را ذخیره میکند.
انواع Session¶
- SQLiteSession: پیشفرض. اطلاعات در فایل SQLite ذخیره میشود.
- MemorySession: اطلاعات در حافظه ذخیره میشود.
- StringSession: اطلاعات در حافظه ذخیره میشود اما میتواند به صورت رشته ذخیره شود.
فایل Session¶
وقتی SoroushClient('anon') ایجاد میکنید، فایل anon.session در دایرکتوری جاری ایجاد میشود. این فایل شامل:
- آدرس IP سرور و پورت
- کلید احراز هویت
- اطلاعات entityهای مشاهده شده
- access_hash کاربران و کانالها
مفهوم رویدادها (Events)¶
رویدادها برای دریافت نوتیفیکیشن از پیامهای جدید، عضویت اعضا، تایپ کردن و غیره استفاده میشوند.
انواع رویدادهای اصلی¶
- NewMessage: پیام جدید دریافت شد
- MessageEdited: پیام ویرایش شد
- MessageDeleted: پیام حذف شد
- CallbackQuery: کلیک روی دکمه اینلاین
- ChatAction: عضو جدید وارد شد یا خارج شد
- InlineQuery: کوئری اینلاین دریافت شد
- UserUpdate: اطلاعات کاربر تغییر کرد
مثال استفاده از رویداد¶
from splusthon import SoroushClient, events
client = SoroushClient('anon', api_id, api_hash)
@client.on(events.NewMessage)
async def my_event_handler(event):
if 'hello' in event.raw_text:
await event.reply('hi!')
client.start()
client.run_until_disconnected()
درک Entity در رویدادها¶
وقتی نیاز به کاربر یا چتی دارید که رویداد در آن رخ داده است، حتماً از متدهای زیر استفاده کنید:
async def handler(event):
# درست
chat = await event.get_chat()
sender = await event.get_sender()
chat_id = event.chat_id
sender_id = event.sender_id
# اشتباه - این کار را نکنید
chat = event.chat
sender = event.sender
chat_id = event.chat.id
sender_id = event.sender.id
رویدادها مانند پیامها هستند اما تمام اطلاعات پیام را ندارند! وقتی به صورت دستی پیامی را دریافت میکنید، تمام اطلاعات لازم را دارد. اما وقتی آپدیتی درباره پیام دریافت میکنید، تمام اطلاعات را ندارد، بنابراین باید از متدها استفاده کنید، نه ویژگیها.
API کامل¶
SPlusthon از API کامل سروشپلاس پشتیبانی میکند. میتوانید از متدهای پیشرفته برای کنترل دقیقتر استفاده کنید.
مثال استفاده از API خام¶
from splusthon.tl.functions.messages import SendMessageRequest
await client(SendMessageRequest(
peer='username',
message='سلام!',
random_id=client._get_request_msg_id()
))
مقایسه Bot API و MTProto¶
| ویژگی | Bot API | MTProto (UserBot) |
|---|---|---|
| نوع حساب | ربات | کاربر عادی |
| محدودیت پیام | محدود | نامحدود |
| دسترسی به اطلاعات | محدود | کامل |
| API | ساده | پیچیده |
| نیاز به اجازه کاربر | بله | خیر |
Mastering asyncio¶
SPlusthon بر پایه asyncio ساخته شده است. برای استفاده مؤثر، باید مفاهیم پایه asyncio را درک کنید.
مبانی¶
import asyncio
from splusthon import SoroushClient
async def main():
client = SoroushClient('anon', api_id, api_hash)
# استفاده از await برای عملیات ناهمگام
me = await client.get_me()
print(me.stringify())
# اجرای حلقه رویداد
await client.run_until_disconnected()
# اجرای حلقه اصلی
asyncio.run(main())
نکات مهم¶
- تمام متدهایی که با شبکه کار میکنند باید با
awaitفراخوانی شوند - handlerهای رویداد باید
async defباشند - از
client.loop.run_until_complete()برای اجرای کد ناهمگام در کد همگام استفاده کنید
مرحله بعدی¶
برای یادگیری بیشتر، بخشهای زیر را مطالعه کنید: