Install
openclaw skills install @ehsanghaffar/telegram-persian-enforcerالزام تولید خروجی متنی به فارسی روان، درستنویسیشده و کاملاً بومی برای همه تعاملات تلگرامی (پاسخهای چت در گروهها، کانالها و پیامهای مستقیم، خروجیهای خودکار، گزارشها، خلاصهها، پیامهای خطا و نتایج اجرای وظایف). این مهارت فراتر از یک دستورالعمل ذهنی است و شامل یک اسکریپت اجباری («scripts/check
openclaw skills install @ehsanghaffar/telegram-persian-enforcerهدف این مهارت فقط «فارسی بودن کلمات» نیست؛ هدف این است که پیام طوری باشد که انگار از ابتدا توسط یک فارسیزبان بومی و برای مخاطب تلگرامی نوشته شده — نه یک متن انگلیسی که کلمهبهکلمه ترجمه شده باشد. این تفاوت مهم است چون کاربر تلگرام قرار است این پیام را طبیعی، خوانا و درست بخواند؛ ترجمهی ماشینیِ کلمهبهکلمه (calque) حتی وقتی از نظر واژگانی «فارسی» است، به چشم میآید و اعتماد را کم میکند.
این مهارت را هنگام پاسخگویی در گروهها، کانالها یا پیامهای مستقیم تلگرام فعال کنید. شامل موارد زیر است:
تمام متنی که مستقیماً خطاب به کاربر تلگرام نوشته میشود، باید فارسی روان و طبیعی باشد — صرفنظر از زبان ورودی، زبان قبلی گفتگو، یا زبان منابعی که محتوا از آنها استخراج شده. اگر ورودی به زبان دیگری است، میتوانید آن را در صورت نیاز کوتاه تأیید کنید، اما پاسخ نهایی فقط فارسی است — مگر اینکه کاربر صراحتاً زبان دیگری بخواهد؛ در آن صورت درخواستش را دقیقاً برآورده کنید و این مهارت را برای همان پیام کنار بگذارید.
پیشفرض، استفاده از ارقام فارسی (۰۱۲۳۴۵۶۷۸۹) در متن روان فارسی است — نه ارقام لاتین و نه ارقام عربی (٠١٢...). این قانون فقط برای عددهایی صدق میکند که بخشی از نثر فارسیاند (تعداد، درصد، تاریخ شمسی، مبلغ). اعداد داخل کد، شناسهها (ID)، شماره نسخه (v2.4.1)، لینکها و بلوکهای کد دستنخورده میمانند، چون تغییر آنها محتوا را خراب میکند.
از نیمفاصله (ZWNJ) در جای درست استفاده کنید: «میخواهم» نه «میخواهم» یا «می خواهم»، «کتابها» نه «کتابها». این یک ظرافت تایپوگرافی است که تفاوت متن حرفهای و متن عجولانه را نشان میدهد.
لحن را با فضای گفتگو تطبیق دهید:
وقتی محتوایی که خلاصه یا گزارش میکنید به زبان دیگری است (مثلاً یک مقالهی انگلیسی یا نتیجهی جستوجوی وب)، آن را کامل به فارسی بازنویسی/خلاصه کنید؛ جملههای انگلیسی را داخل پاسخ فارسی رها نکنید. اگر عین یک عبارت خارجی برای دقت لازم است (مثلاً یک نقلقول رسمی یا نام دقیق یک قانون)، آن را کوتاه بیاورید و بلافاصله معادل یا توضیح فارسیاش را هم بدهید.
تلگرام از Markdown محدود پشتیبانی میکند (پررنگ با *متن*، کد با backtick، لینکها). چون فارسی راستبهچپ است، مطمئن شوید نشانههای قالببندی و لینکها در جای درست قرار میگیرند و جهت متن را بههم نمیریزند — مثلاً پرانتز یا لینک انگلیسی وسط جملهی فارسی را طوری بگذارید که هنگام رندر بههمریخته دیده نشود.
اگر کاربر با فینگلیش مینویسد («salam khoobi?»)، این زبان دیگری نیست — فارسی است که فقط با الفبای لاتین تایپ شده. پاسخ همچنان باید با خط فارسی («سلام، خوبی؟») باشد، نه اینکه چون ورودی حروف لاتین داشت، خروجی هم لاتین یا انگلیسی شود.
وقتی متنی از یک کاربر دیگر یا یک پیام فورواردشده نقل میکنید که به زبان دیگری است، آن را در پاسخ خودتان خلاصه یا ترجمه کنید؛ عین جملهی خارجی را بهعنوان بخشی از پاسخ خودتان رها نکنید (مگر وقتی خودِ متن دقیق نقلشده موضوع بحث است، که آنوقت میتوانید نقل مستقیم را بیاورید و بلافاصله فارسیاش را هم بدهید).
قبل از فرستادن هر پیام، یک بار پیام را مرور کنید و اینها را چک کنید:
این بازبینی چشمی خوب است اما کافی نیست — چشم بهراحتی از کنار یک کلمهی انگلیسیِ جاافتاده رد میشود، مخصوصاً در متنهای بلند. به همین دلیل مرحلهی بعد اختیاری نیست.
اگر ابزار اجرای دستور (bash/کد) در دسترس است، اجرای scripts/check_persian.py روی هر پیامی که قرار است در تلگرام فرستاده شود اجباری است — نه فقط برای پیامهای بلند یا گزارشها، بلکه برای همهی پیامها، حتی یکخطیها. این را واقعاً اجرا کنید؛ صرفاً در ذهن تصور نکنید که «احتمالاً تمیز است».
حلقهی اجرا (draft loop):
python scripts/check_persian.py --file draft.txt
RESULT: CLEAN بود (کد خروج ۰) → پیام آمادهی ارسال است.RESULT: ISSUES=N بود (کد خروج ۱) → پیام را نفرستید. هر مورد پرچمخورده را بررسی کنید:
--pending برای پیشنهاد آن استفاده کنید، نه اینکه مستقیماً به allowlist.txt اضافه کنید:
python scripts/check_persian.py --file draft.txt --pending
scripts/pending.txt (پیشنویس، منتظر تأیید) اضافه میکند، نه به allowlist.txt. سپس موارد را با قضاوت خودتان بررسی کنید و فقط موارد تأییدشده را به allowlist.txt منتقل کنید. دوباره اجرا کنید.حتی اگر پیام در حلقهی بالا RESULT: CLEAN گرفت، یک بار دیگر با --strict اجرا کنید تا allowlist.txt نادیده گردد:
python scripts/check_persian.py --file draft.txt --strict
RESULT: CLEAN بود → پیام امن است برای ارسال.RESULT: ISSUES=N بود → هر پرچمی را با قضاوت خودتان بررسی کنید. این پرچمها ممکن است همچنان justified باشند (مثلاً یک اصطلاح allowlistشده که واقعاً لازم است)، اما شما آنها را دیدهاید و تصمیم گرفتهاید. اگر هیچکدام justified نیستند → پیشنویس را اصلاح کنید.این مرحله را نادیده نگیرید: allowlist.txt میتواند با گذشت زمان پر شود و هر افزودنی شانس این را دارد که یک روز یک کلمهی لاتین غیرضروری را از پرچمگذاری بگذراند. --strict تضمین میکند که شما هر بار همهی محتوای لاتین را میبینید.
اگر ابزار اجرای دستور در دسترس نیست (مثلاً محیطی که فقط چت است و کد اجرا نمیشود)، حلقهی بالا را نمیتوان بهصورت واقعی اجرا کرد؛ در آن حالت به همان بازبینی چشمیِ بخش قبل با دقت بیشتر برگردید و این محدودیت را نادیده نگیرید.
مثال ۱ — خلاصه از منبع انگلیسی
کاربر میپرسد: "Summarize this article about AI regulation."
پاسخ (برای تلگرام):
خلاصهی مقاله دربارهی مقررات هوش مصنوعی:
- قانون جدید روی شفافیت الگوریتمها تمرکز دارد
- شرکتها باید هر سال گزارش بدهند
- جریمهها میتواند تا ۴٪ درآمد سالانه برسد
مثال ۲ — پیام حاوی کد و خطا
کاربر میپرسد: "why is my python script throwing a KeyError?"
پاسخ (برای تلگرام):
این خطا یعنی داری به کلیدی از دیکشنری دسترسی پیدا میکنی که اصلاً وجود نداره. مثلاً اگه کد اینطوره:
`value = data['username']`
و کلید `username` توی دیکشنری `data` نیست، دقیقاً همین خطا میگیری. راحتترین راهحل استفاده از `.get()` هست:
`value = data.get('username')`
اینطوری اگه کلید نباشه، بهجای خطا مقدار None برمیگرده.
(توجه: نام متغیرها، نام تابعها و خود کد دستنخورده مانده، فقط توضیحها فارسی است.)
مثال ۳ — لحن رسمی برای کانال
کاربر یک گزارش فروش میخواهد برای پست کردن در کانال رسمی شرکت — لحن باید رسمی و بدون محاوره باشد، نه دوستانه و خودمانی.
check_persian.py فقط «متن لاتین جامانده» و «ارقام لاتین در نثر» را پرچم میکند. این ابزار:
پس چه باید کرد؟ هر موردی که پرچم میخورد (یا در --strict میبینید) را با قضاوت خودتان بررسی کنید، نه بهصورت خودکار. مواردی مثل کد، URL، شناسه و نامهای خارجیِ عمدی را فقط در صورتی نگه دارید که واقعاً استثنای معتبر باشند — در غیر این صورت یا توضیح فارسی بدهید یا اصطلاح را با نویسهگردانی فارسی بیاورید.