# Combot Automation Compact v3: LLM uchun ko‘rsatmalar va format ma’lumotnomasi

Bu faylni to‘liq holda qoida haqidagi so‘rovingiz bilan birga modelga bering. U Avtomatlashtirish muharriri import qiladigan formatni tasvirlaydi. Qoidalar tili — Compact v3 JSON; Python, YAML, JavaScript, eski Triggers v2 yoki ixtiyoriy «agar → unda» psevdokodi emas.
Interfeysdagi nomlar tarjima qilinadi, JSON qiymatlari esa oʻzgarmaydi. Masalan, `Known Combot links` tahrirchidagi “Combot taklif havolalari”, `Combot custom admins` esa “Combot administratorlari” bandiga mos keladi. JSON qiymatlarini interfeys nomlari bilan almashtirmang.

Hujjat tahriri: 2026-yil 9-sentabr. Ma’lumotnoma Avtomatlashtirish muharriri va hodisalarni qayta ishlovchi kod bilan solishtirilgan. Bajarilgan import va Telegram tekshiruvlari oxirida alohida sanalgan: manba kodini ko‘rish ishlayotgan xizmat versiyasini tasdiqlamaydi.

## 1. Model uchun ko‘rsatmalar

Foydalanuvchining so‘rovini ma’nosini o‘zgartirmasdan Avtomatlashtirish qoidasiga aylantiring.

1. Hodisa, shartlar, istisnolar, amal, amal qo‘llanadigan odam va javob manzilini aniqlang. Jadval uchun vaqt mintaqasini; buyruq uchun esa alohida yoki javob sifatida yuborilishini aniqlang. So‘ralmagan bo‘lsa, moderatsiya, mukofot, tasodifiy tanlash yoki o‘chirishni qo‘shmang.
2. Foydalanuvchi ID’lari, mavzular, chat manzillari, takliflar, darajalar yoki yoqilgan funksiyalarni taxmin qilmang. Mavzu nomi uning ID’si emas. Muhim ma’lumot yetishmasa, savol bering. Javob matniga oid taxminlarni alohida taklif qilishingiz mumkin, lekin to‘liq bo‘lmagan qoidani aniq yechim deb ko‘rsatmang.
3. Yangi qoidalarni doim `en: false` bilan yarating. Bu xavfsiz tayyorlash odati, Avtomatlashtirish cheklovi emas. `en` yozilmasa, qoida yoqilgan hisoblanadi.
4. Faqat hujjatlashtirilgan maydonlardan foydalaning. «Eksportdan foydalaning» deb belgilangan ichma-ich filtrlar uchun o‘xshash sozlamaning haqiqiy eksportini so‘rang; tuzilmani o‘ylab topmang. Vaziyat qo‘llab-quvvatlanmasa, shartlarni olib tashlab yashirish o‘rniga cheklovni tushuntiring.
5. Javob tartibi: qisqa tushuntirish → import qilinadigan bitta JSON bloki → qo‘lda sozlash va tekshirishlar. JSON’da izohlar, ko‘p nuqtalar, vaqtinchalik ID’lar, maydonlardan tashqaridagi tushuntirish qatorlari, oxirgi elementdan keyingi vergullar yoki `when`, `if`, `then`, `conditions`, `actions`, `event` kabi o‘ylab topilgan kalitlar bo‘lmasin.
6. Natijani berishdan oldin bitta mos va bitta mos kelmaydigan holatni fikran tekshiring. Javob buyrug‘ida buyruq yuboruvchini asl xabar muallifidan alohida tekshiring. Qoidani Combot’da amalda sinamagan bo‘lsangiz, sinalgan deb aytmang.

Biriktirilgan JSON Schema yangi o‘chiq qoidalarni yaratishga yordam beradi. Uning majburiy maydonlari ataylab importnikidan qat’iyroq va u barcha eski eksportlarni qabul qilmaydi. Murakkab ichma-ich filtrlar faqat obyekt ekanligi bo‘yicha tekshiriladi. Sxemadan o‘tish shartlar mosligi, resurslar mavjudligi, tarifga muvofiqlik yoki Telegram amallari muvaffaqiyatini isbotlamaydi.

## 2. Import oynasiga nimani joylash kerak

Eng yuqori daraja — raqamli `v: 3` va `t` qoidalar massivi bo‘lgan obyekt. Odatda bitta qoida qaytaring. Alohida massiv yoki `{"triggers": [...]}` qaytarmang: ular import oynasining formati emas.

To‘liq minimal misol:

```json
{
  "v": 3,
  "t": [
    {
      "n": "Kurs ma’lumotlari buyrug‘i",
      "en": false,
      "k": "c",
      "ctm": "p",
      "cm": ["/course_info"],
      "a": {
        "m": "a",
        "r": [
          {
            "i": "course_reply",
            "t": "s",
            "v": {
              "tx": "Dars yozuvlari chatning mahkamlangan xabarida.",
              "rp": "r"
            }
          }
        ]
      }
    }
  ]
}
```

`dv: "t3.compact.3"` — ixtiyoriy sxema belgisi. Yangi natijalar uchun `v` va `t` yetarli. Mavjud import `bundle` o‘ramini taniydi, lekin yaratishda u kerak emas.

Import to‘plamiga server `id`’si, `revision`, `chat_id`, hisoblangan `ck` yoki `$schema` qo‘shmang. Server qoidaga yangi ID beradi. Amaldagi `i` esa boshqa narsa: `course_reply` kabi mahalliy qator identifikatori. U shu qoidadagi amallar orasida yagona bo‘lishi va 1–80 ta lotin harfi, raqam, `_` yoki `-` dan iborat bo‘lishi kerak.

Bir xil qisqa kalit turli darajalarda turli ma’noga ega: ildizdagi `t` — qoidalar ro‘yxati, `a.r[].t` — amal turi, `a.r[].v` esa amal parametrlarini saqlaydi. Darajalarni aralashtirmang.

## 3. Qoidaning asosiy maydonlari

| Maydon | Ma’nosi |
| --- | --- |
| `n` | Bo‘sh bo‘lmagan nom, muharrirda 80 belgigacha |
| `d` | Ixtiyoriy tavsif, muharrirda 280 belgigacha |
| `en` | Yangi o‘chiq qoida uchun `false` |
| `e` | Agar bu buyruq bo‘lmasa, hodisa kodlari massivi |
| `k`, `cm`, `ctm` | Buyruq rejimi; quyiga qarang |
| `a` | Amallar rejasi: `{"m":"a","r":[...]}` yoki `{"m":"r","r":[...]}` |
| `s`, `ti` | Hodisani qayerda tekshirish: Manba chat, Umumiy mavzu yoki Tanlangan mavzular |
| `at` | Mos kelishni qachon tekshirish mumkin; vaqt filtri, taymer emas |
| `wh`, `wx`, `wm` | Hodisani boshlagan odam: kiritilgan guruhlar, istisnolar va guruhlarni birlashtirish usuli |
| `cgr` | Raqamli shartlar: chatdagi vaqt, xabarlar, ogohlantirishlar, XP, obro‘ |
| `ua`, `ux`, `uar`, `ul`, `ulx` | A’zo xususiyatlari, maydon qiymatlari va til |
| `twh`, `twx`, `tcg`, `tua`, `tux`, `tur`, `tlg`, `tlx` | Hodisadagi boshqa foydalanuvchi, masalan, javob berilayotgan xabar muallifi yoki kirayotgan a’zo uchun tekshiruvlar |
| `tv`, `tr`, `ty`, `cs`, `lmin`, `lmax` | Matn shartlari |
| `mti`, `mtx`, `me`, `mex` | Xabar turlari va matn elementlari |
| `il`, `ilc`, `ilx` | Kirish so‘rovlari uchun taklif havolalari |
| `rct`, `rnt`, `rnx`, `rcy`, `rcx`, `rcn`, `rcm` | Reaksiya shartlari |
| `chl` | Vazifalari o‘zgarishi hodisalari uchun muayyan vazifalar ro‘yxatiga to‘g‘ridan-to‘g‘ri havola |
| `cl` | Oldingi javobni tozalashning standart sozlamasi: `n` yoki `ps` |
| `ov` | Muqobil OR shartlar to‘plamlari; murakkab holatlarda eksportdan foydalaning |

Har bir maydonni to‘ldirmang. Faqat tanlangan hodisaga tegishli va so‘ralgan shartlarni qo‘shing. Masalan, kirish hodisasi uchun xabardagi kalit so‘zlar kerak emas, umumiy reaksiya hisoblagichida esa avtomatik mukofotlanadigan aniq foydalanuvchi yo‘q.

## 4. Hodisalar

| `e` | Qachon ishga tushadi |
| --- | --- |
| `["m"]` | Chatdagi yangi xabar |
| `["em"]` | Xabar tahriri |
| `["m","em"]` | Yangi xabar yoki tahrir |
| `["lc"]`, `["el"]`, `["lc","el"]` | Bog‘langan kanal izohi, uning tahriri yoki ikkalasi |
| `["cp"]`, `["ec"]`, `["cp","ec"]` | Bog‘langan kanal kontekstidagi post, uning tahriri yoki ikkalasi |
| `["jr"]` | Kirish so‘rovi |
| `["nm"]` | A’zo kirdi |
| `["ml"]` | A’zo chiqdi yoki chiqarildi |
| `["cb"]`, `["rb"]` | Boost qo‘shildi yoki olib tashlandi |
| `["mr"]` | Muayyan foydalanuvchining reaksiyalari o‘zgardi |
| `["rc"]` | Bog‘langan kanal kontekstida anonim reaksiyalarning umumiy hisoblagichlari yangilandi |
| `["ck"]` | Yangi vazifalar ro‘yxati |
| `["cd"]` | Ro‘yxatdagi vazifalar bajarildi deb belgilandi |
| `["ca"]` | Ro‘yxatga vazifalar qo‘shildi |

`["m","nm"]` kabi aloqasiz hodisa turlarini birlashtirmang; alohida qoidalar ishlating. Ro‘yxatda berilgan yangi-va-tahrir juftliklari mumkin. Yashirin mehmon bot rejimi `gm`’ni yaratmang.

Tahrir — alohida ishga tushish. Uni XP, obro‘, ogohlantirish yoki foydalanuvchi bir marta bajarilishini kutadigan amallarga avtomatik qo‘shmang.

## 5. Oddiy buyruqlar va javob buyruqlari

Oddiy buyruq (Plain command), masalan, ma’lumotli javob:

```json
{"k":"c","ctm":"p","cm":["/course_info"]}
```

Moderator a’zoning xabariga javob sifatida yuboradigan buyruq — Javobdagi foydalanuvchi (Reply target):

```json
{"k":"c","cm":["/team_pause"]}
```

Bular qoidaning maydon parchalari, mustaqil import to‘plamlari emas.

Buyruqqa `e` qo‘shmang. `cm` ichida kichik lotin harflari, raqamlar va `_` ishlatilgan maxsus slash buyruqlarining bo‘sh bo‘lmagan ro‘yxatini bering. O‘ylab topilgan buyruqni Combot’ga o‘rnatilgan deb ko‘rsatmang. Javob buyruqlarida `ctm`’ni yozmang; u yerga `reply_target`, `r` yoki odamning ismini yozmang.

Oddiy buyruqda foydalanuvchi amallari uchun oluvchi yo‘q. Xabar yuborishdan va faqat ochiq so‘ralgan bo‘lsa, buyruq xabarini o‘chirishdan foydalaning. Yozishni cheklash, ogohlantirish, XP va odamga ta’sir qiladigan boshqa amallar uchun javob buyrug‘i kerak.

Javob buyrug‘ida `wh` buyruq yuboruvchini tekshiradi, `twh` va boshqa `t...` maydonlar esa javob berilgan xabar muallifini tekshiradi. Ikkinchisiga amal qo‘llash uchun `v.tg: "t"` ishlating. Aziza Ilhomga javoban `/team_pause` yuborsa, Azizani emas, Ilhomni cheklang.

Faqat `twh`’ni tekshirish buyruqni kim chaqira olishini cheklamaydi. Moderator buyrug‘ida so‘rovga muvofiq `wh` bo‘lishi kerak. `d` amali Ilhomning xabarini emas, buyruqning o‘zini o‘chiradi.

Buyruq rejimini `tv` ichida `/team_pause` satrini qidirish bilan almashtirmang. Tasdiqlangan eksport bo‘lmasa, muharrir buyruq uchun ko‘rsatmaydigan shartlarni, masalan, jadvalni qo‘shmang.

## 6. A’zolar va istisnolar

`wh` va `wx` tarjima qilingan yorliqlarni emas, aynan shu satrlarni ishlatadi:

`New members`, `Regular members`, `Ex-members`, `Whitelisted users`, `Admins`, `Telegram admins`, `Combot custom admins`, `Owner`.

Bo‘sh kiritish ro‘yxati guruh bo‘yicha cheklov qo‘ymaydi. Odatda `Anyone`’ni yozmaslik mumkin. `wm: "o"` bitta mos guruhni, `wm: "a"` esa barcha tanlangan guruhlarni talab qiladi. `wx` istisnolari ijobiy guruhlardan qat’i nazar mos kelishni to‘sadi.

Misol: administratorlardan tashqari istalgan odam mos xabar yuborishi mumkin:

```json
{"wx":["Telegram admins","Combot custom admins","Owner"]}
```

Misol: buyruqni faqat Telegram administratori yoki chat egasi chaqira oladi:

```json
{"wh":["Telegram admins","Owner"],"wm":"o"}
```

Rollarni aralashtirmang. `Combot custom admins` Telegram administratorlarini emas, Combot ruxsatlarini bildiradi. Qayta ishlovchi kodda `Admins`, xuddi `Telegram admins` kabi, chat egasini ham qo‘shgan holda Telegram administratorlarini tekshiradi; Combot administratorlarini qo‘shmaydi. Ikkala guruhga ham ruxsat berish uchun `Telegram admins` va `Combot custom admins`’ni `wm: "o"` bilan yozing. `Regular members` — hozir chatda ekani ma’lum a’zolar, uzoq vaqtdan beri bor yoki ko‘p yozgan odamlar emas. `New members` chatning mavjud yangi a’zo sozlamalari va istisnolaridan foydalanadi; bu qat’iy «dastlabki yetti kun» emas. Aniq davomiylik uchun `cgr` ishlating.

`Core members` yoki `Non-members` yaratmang: yangi qoidalar uchun ishonchli ta’riflar berilmagan. A’zo haqida ma’lumot yo‘qligi uning hech qachon chatda bo‘lmaganini isbotlamaydi.

Amal yo‘naltirilgan foydalanuvchi uchun `twh`, `twx` va `twm` ishlating. `Target self`, `Target bots`, `Target Combot` va `Target linked channel post` kabi qo‘shimcha kontekst qiymatlarini mos eksportdan oling; ularni yuboruvchi filtrlarida taxmin qilmang.

`nm` va `ml` uchun `wh`/`wx` kirish yoki chiqarishni boshlagan odamni; `twh`/`twx` esa holati o‘zgargan a’zoni tasvirlaydi. Aziza Ilhomni qo‘shsa, yangi a’zo shartlari Azizaga emas, `t...` orqali Ilhomga tegishli. Amalda `v.tg` tanlash bu shartlarni almashtirmaydi.

`am: "o"` Telegram administratori ekanini tekshiradi; `am: "n"` uni istisno qiladi. Bu `wh`/`wx` ichida rollarni birlashtirishning o‘rnini bosmaydi. Yangi qoidalar uchun guruhlarni ochiq ko‘rsatishni afzal biling.

## 7. Chatdagi vaqt, faollik, XP va obro‘

Raqamli shartlar `cgr` ichiga, amal yo‘naltirilgan foydalanuvchi uchun esa `tcg` ichiga yoziladi. Bu parcha a’zo chatda ko‘pi bilan bir soatdan beri borligini va qayd etilgan xabarlari ko‘pi bilan beshta ekanini bildiradi:

```json
{
  "cgr": {
    "logic": "All",
    "statistics": {
      "rules": [
        {"metric":"joinedDays","unit":"h","op":"lte","value":"1"},
        {"metric":"messageCount","unit":"c","join":"and","op":"lte","value":"5"}
      ]
    }
  }
}
```

Operatorlar: `eq` — teng, `gte` — kamida, `lte` — ko‘pi bilan. Operatorni doim ochiq ko‘rsating. «Beshtadan kam»ni `lte: 5` deb ifodalamang: butun sonli hisoblagich uchun bu `lte: 4`. Foydalanuvchi «kamida»ni nazarda tutganda aniq davomiylikka `eq` tekshiruvini ishlatmang: vaqt o‘tishda davom etadi.

Statistika ko‘rsatkichlari:

- `joinedDays`: shu chatga kirganidan beri o‘tgan vaqt, akkaunt yoki odamning yoshi emas. Birliklar: `s`, `m`, `h`, `d`, `w`, `mo`. Bir kun 24 soat, hafta 7 kun, oy esa bu yerda 30 kun. Yangi qoidalarda birlik doim ko‘rsatilishi kerak.
- `messageCount`: shu chatda qayd etilgan xabarlar; birlik `c`.
- `warns`: faol ogohlantirishlar; birlik `c`.

«Bitta qayd etilgan xabar» — `{"metric":"messageCount","unit":"c","op":"eq","value":"1"}`. Bu aynan bir martalik bajarilishni kafolatlamaydi: hisoblagich yangilanishi va hodisani qayta ishlash alohida yuz berishi mumkin.

Boshqa bo‘limlar:

```json
{
  "cgr": {
    "logic": "All",
    "xp": {
      "xp": {"rules":[{"op":"gte","value":"100"}]}
    },
    "reputation": {
      "reputation": {"rules":[{"op":"gte","value":"5"}]}
    }
  }
}
```

Daraja chegaralari `cgr.xp.rank.rules`’dan foydalanadi, lekin qiymatlar o‘ylab topilgan nomlardan emas, chatning haqiqiy darajalaridan olinishi kerak. Qatorlar `join: "and" | "or"` va `mode: "include" | "exclude"`’ni qo‘llaydi. Oddiy shartlar uchun aniq AND, murakkab AND/OR zanjirlari uchun haqiqiy eksport ishlating. `cgr.logic: "All" | "Any"` bo‘limlarni birlashtiradi. Istisno qiluvchi raqamli qator — taqiq: ayni shart variantining boshqa bo‘limidagi ijobiy moslik uni chetlab o‘ta olmaydi.

Birinchi xabar yoki birinchi boshqa faollikdan beri o‘tgan vaqt tekshiruvlarini yaratmang: `firstMessageAge` va `firstOtherActivityAge` mavjud emas. Umumiy `messageCount` orqali «o‘tgan haftadagi faollik»ni va’da qilmang. Mavjud bo‘lmagan ma’lumot avtomatik nolga aylanmasligi kerak.

## 8. Foydalanuvchi xususiyatlari va maydonlari

`ua` xususiyatlarni talab qiladi; `ux` ularni istisno qiladi. Aniq qiymatlar: `Any username`, `Telegram Premium`, `Bot account`, `Any last name`. Masalan, `{"ux":["Bot account"]}` botlarni istisno qiladi.

`ul` va `ulx` Telegram bergan bo‘lsa, foydalanuvchi til kodlarini kiritadi va istisno qiladi. Bu xabar tili yoki millat emas. A’zoning ismiga qarab tilni aniqlamang.

Muayyan qiymatlar shartlari `uar` ichiga, amal yo‘naltirilgan foydalanuvchi uchun esa `tur` ichiga yoziladi. Qo‘llanadigan maydonlar: `user_id`, `name`, `username`, `last_name`, `bio`. Bio kirish so‘rovi kontekstiga tegishli; har bir a’zo uchun doim mavjud profil maydoni emas.

Foydalanuvchi nomi sharti quyidagi shaklda:

```json
{
  "uar": {
    "username": {
      "rules": [
        {"mode":"include","matchType":"Exact match","values":["example_member"]}
      ]
    }
  }
}
```

Bu haqiqiy a’zoni emas, tuzilmani ko‘rsatadi. Haqiqiy so‘rov uchun faqat foydalanuvchi bergan username’ni `@` belgisiz ishlating; yetishmasa so‘rang. ID’larni `values` ichida satr sifatida bering. Kirish nazoratida ochiq berilgan ID’ni afzal biling: ism va username o‘zgarishi mumkin.

Bu yerda `matchType` xabar matnining `f`, `p`, `r` kodlarini emas, to‘liq `Exact match`, `Partial match`, `Regular expression` satrlarini ishlatadi. Bitta qatordagi qiymatlar muqobil variantlar; qatorlarda `join` bor. Bu maydonlar uchun `Starts with` yoki `Ends with` o‘ylab topmang.

`ual` va `tul`: `a` — barcha qoidalar; `o` — istalgan guruh. Ushbu yaratish profilida `uag` va `tug` guruh tuzilmalari uchun eksportdan foydalaning.

## 9. Matn va xabar turi

Iboralarni qidirish uchun satrlar massivi `tv`’dan foydalaning. Bitta satr mos kelishi yetarli. Masalan:

```json
{"tv":["yozuv qayerda","dars yozuvi"],"tr":"p","ty":"p","cs":false}
```

`tr`: `p` — iboralar, `w` — so‘zlar, `r` — muntazam ifodalar. So‘z rejimi sanalgan har bir so‘zni talab qilmaydi. Oddiy qisman moslik ham so‘z chegaralarini kafolatlamaydi: «kitob» «kitobxon» ichida mos kelishi mumkin.

`ty`: `f` — butun matn, `p` — matnning bir qismi, `s` — boshlanishi, `e` — oxiri, `r` — muntazam ifoda. `cs: true` katta-kichik harflarni farqlaydi; `false` yoki maydonni yozmaslik bu farqlashni o‘chiradi. Oddiy FAQ uchun faqat `tv` yetarli: standart qidiruv iboralarni katta-kichik harflarni farqlamasdan izlaydi.

`lmin` va `lmax` matn uzunligini cheklaydi. Bo‘sh yoki nol chegara o‘sha tomonda cheklov qo‘ymaydi. Matn uzunligini so‘zlar soni bilan aralashtirmang.

Muntazam ifodalarni faqat oddiy moslik yetarli bo‘lmaganda ishlating. Andozani JSON satri sifatida, teskari qiya chiziqlarni kerakli tarzda ekranlab bering; JavaScript’dagi `/.../i` ajratkichlarini avtomatik qo‘shmang. Aniq so‘z yoki murakkab inkor talablari uchun mos va mos kelmaydigan misollarni tushuntiring.

`mti` xabar turlarini kiritadi; `mtx` istisno qiladi. Asosiy qiymatlar: `photo`, `video`, `animation`, `audio`, `document`, `sticker`, `voice`, `video_note`, `contact`, `location`, `poll`, `dice`, `game`, `paid_media`. Masalan, `{"mti":["voice"]}` ovozli xabarlarni; `{"mti":["photo","video"]}` esa bir vaqtda ikkala biriktirma emas, surat YOKI videoni bildiradi.

Muharrirda `text` va `caption` ham bor. Ular matn mazmuni sozlamalarida qatnashadi; `caption`’ni mustaqil Telegram biriktirma turi deb hisoblamang. «Faqat surat ostidagi izohlar» yoki matn va media izohlarini qat’iy ajratish uchun shu sozlamaning eksportini oling. Kodek standart qiymatlarni, jumladan yakka `text`’ni tashlab ketishi mumkin; kiruvchi JSON’da bu qiymat borligining o‘zi cheklov importdan keyin saqlanishini isbotlamaydi.

`me` va `mex` matn elementlarini talab qiladi yoki istisno qiladi. Qiymatlar: `bot_command`, `url`, `text_link`, `mention`, `hashtag`, `cashtag`, `email`, `phone_number`, `emoji`, `custom_emoji`, `bold`, `italic`, `underline`, `strikethrough`, `code`, `pre`, `spoiler`, `blockquote`, `expandable_blockquote`. `mel: "a"` barcha kiritilgan elementlarni; `"o"` kamida bittasini talab qiladi. Har qanday ochiq yoki matnga yashirilgan havola uchun: `{"me":["url","text_link"],"mel":"o"}`.

`mef` muayyan havolalar, buyruqlar va boshqa elementlarni aniqlashtiradi; `mmo` media xususiyatlarini tasvirlaydi; `mtg` va `mog` — shart guruhlari; `csx`/`cse` — belgilar to‘plamlari. Bu murakkab maydonlarni haqiqiy eksport asosida yarating. `max_file_size`, `allowed_domains`, `mime`, `language` yoki `contains_all` kabi o‘rinbosarlar o‘ylab topmang.

## 10. Vaqt va chat mavzulari

`s`: `sc` — Manba chat (Source chat), `gn` — Umumiy mavzu (General topic), `st` — Tanlangan mavzular (Selected topics). Oxirgisi uchun `ti` musbat mavzu ID’larini saqlaydi.

Import tanlangan manba mavzularini butun manba chatga, tanlangan yuborish mavzularini esa joriy mavzuga qaytaradi. ID’lar to‘g‘ri bo‘lsa ham shunday bo‘ladi; bu OR variantlariga ham tegishli. Vaziyat mavzuga bog‘liq bo‘lsa, tushuntirishda va majburiy qo‘lda sozlashlar orasida uning nomini ayting. Mavzular qaytadan tanlanmaguncha natijani yoqishga tayyor deb atamang.

`at` hodisa uchun ruxsat etilgan vaqtni belgilaydi; mustaqil yuborishni rejalashtirmaydi. «Kechqurun savolga javob berish» mumkin. «Kiruvchi hodisasiz har kuni 19:00 da post yuborish» uchun bu trigger emas, xabarlar rejalashtiruvchisi kerak.

Bot asl xabarning vaqt belgisini emas, hodisani qayta ishlash paytidagi joriy vaqtni tekshiradi. Asl xabar kechasi yozilgan bo‘lsa ham, ertalabgi tahrir ertalabgi vaqtga ko‘ra tekshiriladi.

Haftalik oraliq, dushanba–juma, 09:00–18:00 UTC:

```json
{"at":{"m":"w","wd":[0,1,2,3,4],"tw":[{"startMinute":540,"endMinute":1080}]}}
```

`wd`: 0 — dushanba, 6 — yakshanba. Vaqt UTC bo‘yicha yarim tundan boshlab butun daqiqalarda, 0 dan 1439 gacha yoziladi. Haftalik oraliqlar oxirgi daqiqani ham o‘z ichiga oladi. Tun oshadigan oraliqda boshlanish oxiridan katta bo‘lishi mumkin; hafta kuni «navbatchilik» boshlangan kun emas, joriy UTC sana bo‘yicha olinadi. Kerakli kunlarni taxmin qilish o‘rniga yarim tunning ikki tomonini ham tekshiring.

Moskvadagi 09:00 va 18:00 UTC bo‘yicha 06:00 va 15:00 ga teng: 360 va 900 daqiqa. Aynan 18:00 da mos kelishni to‘xtatish uchun oxirgi ruxsat etilgan daqiqa 14:59 UTC, ya’ni `endMinute: 899`. Boshqa vaqt mintaqalarida siljish va yozgi vaqtga o‘tish ehtimolini hisobga oling. Mahalliy vaqtni aylantirmasdan UTC sifatida yozmang.

Sanalar oralig‘i:

```json
{"at":{"m":"d","s":"2026-10-01T00:00:00Z","e":"2026-10-07T23:59:59Z"}}
```

Bular foydalanuvchi kampaniyasining sanalarini emas, shaklni ko‘rsatadi. Boshlanish tugashdan oldin bo‘lishi kerak. Bu rejimda ikkala chegara ham kiradi. `Z` — UTC degani.

Yopilish vaqti (Closing hours) chatning mavjud sozlamalaridan foydalanadi: `{"at":{"m":"c"}}`; shu vaqtlardan tashqari: `{"at":{"m":"c","i":true}}`. Yopilish vaqti rejimi boshlanishni kiritadi, tugashni esa kiritmaydi. Trigger chatning yopilish jadvalini sozlamaydi. Yaroqli jadval bo‘lmasa, to‘g‘ridan-to‘g‘ri yoki teskari shartning ishlashini va’da qilmang.

## 11. Taklif havolalari, reaksiyalar va vazifalar ro‘yxatlari

### Takliflar

Kirish so‘rovlari `["jr"]` uchun `il` quyidagilarni qabul qiladi: `Known Combot links`, `External invite link` yoki `Any source`. Cheklov kerak bo‘lmasa, uni yozmang.

`Known Combot links` shu chatning Combot katalogidagi havolalarni bildiradi. `ilc` va `ilx` shu katalogdagi kiritilgan va istisno qilingan havola kodlarini sanaydi; aniq kodlarni eksportdan yoki berilgan ma’lumotdan oling. Bo‘sh ro‘yxatlar umumiy toifa tekshiruvini saqlaydi.

`External invite link` «men tanlagan ikkita havoladan boshqa hamma narsa» emas, butun Combot katalogidan tashqarida ekani aniqlangan havola degani. Noma’lum manba yoki mavjud bo‘lmagan katalogni tashqi havola deb hisoblab bo‘lmaydi. Bu shart ma’lum taklifsiz kelgan har bir so‘rovni ushlashini va’da qilmang.

### Foydalanuvchi reaksiyalari

Hodisa `["mr"]`. `rct` ichida `added` va/yoki `removed` bo‘ladi. `rnt` va `rnx` foydalanuvchining yangi holatidagi reaksiyalarni kiritadi va istisno qiladi. Ulardan biri to‘ldirilsa, `rct` ichida `added` bo‘lishi shart.

Qayta ishlovchi kod `mr`’ni faqat Telegram `user` berganda ishga tushiradi. `actor_chat` bilan kanal yoki anonim administrator nomidan yuborilgan reaksiya bu hodisani ishga tushirmaydi. Bu umumiy reaksiya hisoblagichlari `rc`’dan farq qiladi.

```json
{"e":["mr"],"rct":["added"],"rnt":["👍"]}
```

Reaksiya qiymatlari oddiy emoji, satr shaklidagi maxsus emoji ID’lari yoki `paid` bo‘ladi. `rnt` faqat farqni emas, yangi holatni to‘liq tekshiradi. 👍 oldindan bor bo‘lib, foydalanuvchi yana bir reaksiya qo‘shsa, shart qayta mos kelishi mumkin. Bu yerda amal oluvchisi `u` — reaksiyani o‘zgartirgan odam; u xabar muallifini avtomatik mukofotlamaydi.

### Umumiy reaksiya hisoblagichlari

Hodisa `["rc"]`. `rcy`/`rcx` sanaladigan reaksiya turlarini tanlaydi. `rcn`/`rcm` manfiy bo‘lmagan butun sonlarda quyi va yuqori chegaralarni belgilaydi. Nol yoki maydonni yozmaslik o‘sha tomonda chegara yo‘qligini bildiradi.

```json
{"e":["rc"],"rcy":["👍"],"rcn":10}
```

Bu «birinchi marta o‘ntaga yetdi»ni emas, yangilanishdagi joriy qiymatni tekshiradi. Yana bir mos yangilanish amalni qayta bajarishi mumkin. Anonim umumiy hisoblagichda reaksiya qo‘ygan muayyan foydalanuvchi yo‘q.

### Vazifalar ro‘yxatlari

`["cd"]` va `["ca"]` uchun `chl` qoidani bitta ro‘yxat bilan cheklaydi. Foydalanuvchi muayyan ro‘yxatni istasa, uning xabariga to‘g‘ridan-to‘g‘ri havolani so‘rang. Chat yoki mavzudagi barcha mos ro‘yxatlarni istasa, `chl` qo‘shmang.

To‘g‘ridan-to‘g‘ri Telegram havolalari, jumladan mavzu raqami bor havolalar qo‘llanadi; `?comment=` bor havolalar qo‘llanmaydi. Manzilni o‘ylab topmang. Ochiq havola uchun hodisani qayta ishlovchi kod chat username’ini bilishi kerak; tashqi ko‘rinishidan to‘g‘ri URL’ning o‘zi moslikni tasdiqlamaydi.

## 12. Amallar

`a.m: "a"` — Barchasini bajarish (Run all): har bir qatorni tartib bo‘yicha bajaradi. `a.m: "r"` — Bitta tasodifiy (Random one): Doim (Always), ya’ni `fr: 1` bilan belgilangan barcha qatorlarni va agar mavjud bo‘lsa, belgilanmagan qatorlardan aynan bitta tasodifiy qatorni bajaradi. Tanlangan qatorlar asl tartibini saqlaydi. Tasodifiylik so‘ralmasa, `a` rejimini ishlating; tasodifiy rejimdan tashqarida `fr` qo‘shmang.

| `a.r[].t` kodi | Amal | `v` parametrlari |
| --- | --- | --- |
| `s` | Xabar yuborish | `tx` va formatlash; quyiga qarang |
| `d` | Qoidani ishga tushirgan xabarni o‘chirish | Parametrlar yo‘q |
| `w` | Ogohlantirishlar qo‘shish | `tg`, musbat `c`, odatda 1 |
| `rw` | Ogohlantirishlarni olib tashlash | `tg`, musbat `c`, odatda 1 |
| `m` | Xabar yozishni cheklash | `tg`, soniyalarda `du` davomiyligi |
| `b` | Ban qilish | `tg`, soniyalarda `du` davomiyligi |
| `k` | Qayta kirishga ruxsat bergan holda chatdan chiqarish | `tg` |
| `um` | Yozish cheklovlarini olib tashlash | `tg` |
| `ub` | Banni olib tashlash | `tg` |
| `du` | Botga mavjud saqlangan foydalanuvchi xabarlarini o‘chirish | `tg` |
| `x` | XP’ni o‘zgartirish | `tg`, −99999 dan 99999 gacha nol bo‘lmagan butun `v` |
| `r` | Obro‘ni o‘zgartirish | `tg`, −999 dan 999 gacha nol bo‘lmagan butun `v` |
| `ja` | Kirish so‘rovini tasdiqlash | Faqat `jr` hodisasi, parametrlar yo‘q |
| `jd` | Kirish so‘rovini rad etish | Faqat `jr` hodisasi, parametrlar yo‘q |

`du` amal kodini `v.du` davomiylik maydoni bilan aralashtirmang. Davomiylik daqiqalarda emas, soniyalarda: bir soat — 3600. Yozishni cheklash yoki ban uchun nol tugash vaqti ko‘rsatilmaganini anglatadi; uni noma’lum davomiylik o‘rniga hech qachon ishlatmang. So‘ralgan bo‘lsa, sababni alohida xabarda yozish mumkin; hujjatlashtirilmagan maydon orqali sanksiya sababini sozlashni va’da qilmang.

Foydalanuvchi amali kimga qo‘llanishi — `v.tg`:

- `u`: hodisaga sabab bo‘lgan ishtirokchi.
- `t`: kontekst belgilaydigan odam, masalan, javob berilgan xabar muallifi. Oddiy ID emas.
- `l`: kirish so‘rovi kontekstida Combot katalogidagi taklif havolasining yaratuvchisi.
- `b`: tegishli kontekstda mavjud ikkala ishtirokchi. «Chatdagi hamma» emas.

Amal oluvchisini doim ko‘rsating. Oddiy buyruqlar foydalanuvchi amallarini qo‘llamaydi. Javob buyruqlari yuboruvchi, javobdagi foydalanuvchi va ikkalasini qo‘llaydi. Kirish so‘rovida so‘rovchi (`u`) va havolaning ma’lum yaratuvchisi (`l`) ikkalasi kerak bo‘lsa, alohida amallar ishlating: `b` so‘rovchi va havola yaratuvchisini birgalikda anglatmaydi. Muharrir havola yaratuvchisini kirish so‘rovlari uchun taklif qiladi; a’zo kirishi haqidagi bosqichma-bosqich ko‘rsatmalarda shu tanlovni taklif qilmang. Boshqa hodisalar uchun faqat o‘sha hodisada mavjud oluvchilarni ishlating.

Noma’lum oluvchi amalni buyruq yuboruvchini jazolashga aylantirmasligi kerak. Boshqa odamga avtomatik o‘tishni va’da qilmang. `du` amali a’zoning butun tarixini o‘chirishni kafolatlamaydi: bot mavjud xabarlar va Telegram imkoniyatlari bilan cheklangan.

Vaziyat ogohlantirishlar, darajalar yoki obro‘ga bog‘liq bo‘lsa, ular yoqilgan bo‘lishi kerak; moderatsiya uchun esa botning tegishli ruxsatlari zarur. Yozish cheklovini olib tashlash, banni olib tashlash va kirish so‘rovini tasdiqlash — alohida amallar.

Kirish so‘rovi hodisalari xabar yuborish, mavjud foydalanuvchilarga amallar va `ja`/`jd`’ni qo‘llaydi; xabarni o‘chirish `d` mos emas. Xabarsiz hodisalarga o‘chirish yoki mavjud bo‘lmagan xabarga javob berishni qo‘shmang.

## 13. Javob matni va manzili

`s` amali parametrlari:

| Maydon | Ma’nosi |
| --- | --- |
| `tx` | 4096 belgigacha bo‘sh bo‘lmagan matn; Telegram qo‘llaydigan HTML mumkin |
| `d` | `sc`: manba chat; `lg`: sozlangan jurnal kanali; standart `sc` |
| `tp` | `ct`: Joriy mavzu; `gn`: Umumiy mavzu; `st`: Tanlangan mavzular; standart `ct` |
| `to` | Tanlangan mavzularning musbat ID’lari; importda qayta o‘rnatiladi |
| `rp` | `r`: qoidani ishga tushirgan xabarga javob; yozilmasa: alohida xabar |
| `cl` | `n`: oldingi javobni saqlash; `ps`: shu qatorning oldingi javobini o‘chirish |
| `bt` | URL tugmalari qatorlari: `text` va `url` bor obyektlar massivlarining massivi |
| `ph` | Havola ko‘rinishlari uchun rasm URL’lari massivi |
| `pa` | `true`: havola ko‘rinishini matn ustiga joylash |

`rp: "r"` manba chat va joriy mavzu uchun saqlanadi. Jurnal kanali (Log channel) yoki boshqa mavzuda ham xuddi shu javob bog‘lanishini va’da qilmang. `d` ichiga ixtiyoriy tashqi chat, kanal yoki shaxsiy xabarlarni yozmang.

Qator darajasida `cl` bo‘lmasa, u qoida sozlamasini oladi. Qoida darajasidagi `cl: "ps"` oldingi javobni tozalashni yoqadi; qatordagi ochiq `cl: "n"` undan ustun turadi. Tozalash muayyan qoida, amal qatori va manzilga tegishli. Turli tasodifiy qatorlar bitta umumiy «oxirgi salomlashuv»ga aylanmaydi.

Oddiy javob uchun `<b>Kurs ma’lumotlari</b>\nYozuvlar mahkamlangan xabarda.` ishlatishingiz mumkin. Markdown’ni HTML sifatida bermang. Havola va matnni to‘g‘ri ekranlang. Tugma va rasmlarni faqat foydalanuvchi bergan haqiqiy URL’lar bilan qo‘shing; `ph` suratlar albomini yubormaydi.

Xabar kontekstida tasdiqlangan o‘zgaruvchilar: `{name}`, `{uid}`, `{name_link}`, `{from.id}`, `{from.title}`, `{from.username}`, `{chat.id}`, `{chat.title}`, `{chat.username}`, `{message.id}`, `{message.timestamp}`, `{timestamp}`, `{group_name}`, `{reply_to_uid}`, `{reply_to_name}`, `{reply_to_name_link}`. Mavjudlik hodisaga bog‘liq. `{target.name}`, `{user.first_name}`, `{reaction_count}` yoki shunga o‘xshash o‘zgaruvchilarni o‘ylab topmang.

Javob buyrug‘ida `{from.title}` jazolangan yoki mukofotlangan a’zoni emas, buyruq yuboruvchini bildiradi. `tg: "t"` tanlash o‘zgaruvchilar ma’nosini o‘zgartirmaydi. Hodisa kerakli ismni berishiga ishonchingiz komil bo‘lmasa, betaraf matn ishlating.

Kirish paytida ham `{from.title}` yangi a’zoning ismini kafolatlamaydi: Aziza Ilhomni qo‘shsa, hodisani boshlagan odam — Aziza. Ismsiz umumiy salomlashuv ishlating, masalan, «{chat.title} chatiga xush kelibsiz!».

Amallar tranzaksiya emas. Yozish cheklovidan keyingi xabar Telegram bu cheklovni qo‘llaganini isbotlamaydi. Sanksiyaning shartsiz tasdig‘ini tekshirilgan natija sifatida yozmang: bu yerda muvaffaqiyatni alohida tekshirish sharti hujjatlashtirilmagan.

## 14. Muqobil variantlar, cheklovlar va qo‘llanmaydigan va’dalar

`ov` ayni qoidaning muqobil shartlarini saqlaydi. Ular mustaqil vaziyatlarni belgilamay, asosiy qoidaning hodisasi va amallarini bo‘lishadi. Bir variantdagi istisno umumiy emas. Taqiq doim amal qilishi kerak bo‘lsa, uni har bir variantda saqlang. `en: false` bo‘lgan variant moslikni tekshirishda qatnashmaydi.

Yangi murakkab `ov`, `mtg`, `mog`, `uag`, `tug`, `mef` va `mmo` uchun haqiqiy muharrir eksportlarini ishlating. Rekursiv OR daraxtlarini yaratmang yoki mustaqil bajarilishini kutib, variantlar ichiga alohida amal zanjirlarini qo‘ymang.

Eksportlarda moslik maydonlari `mt`, `mtl`, `t`, `rmi` va `rme` uchrashi mumkin. Sababsiz ularni hujjatlashtirilgan asosiy sozlamalar o‘rniga qo‘shmang. Oddiy javob cheklovlari uchun `rm` ishlating: `a` — istalgan xabar, `r` — faqat javoblar, `rb` — botga javoblar, `rc` — Combot’ga javoblar, `nr` — javob bo‘lmagan xabarlar. Yangi buyruq maydonlari o‘rniga `rm: "cr"` ishlatmang.

Eski yoki ichki `lf`, `fc`, `lo` maydonlarini, shuningdek UI maydonlari `actions`, `destination`, `topic`, `applyTarget` va `alwaysRun`’ni yaratmang. Compact format ularni boshqacha ifodalaydi, ayrim sozlamalar esa umuman faol imkoniyat emas.

Rejalashtirish cheklovlari:

- Free: 2 tagacha saqlangan qoida; Pro: 50 tagacha; Business: 100 tagacha. O‘chiq qoidalar ham hisoblanadi. Qolgan o‘rinlarni baholashda mavjud qoidalarni hisobga oling.
- Har bir qoida uchun qo‘shimcha OR variantlari: Free 0, Pro 2, Business 5.
- Har bir qoida uchun 100 tagacha amal qatori, rejaning har bir bajarilishida esa alohida hisoblangan 20 ta amal chegarasi.
- Yuborish har bir yagona manzil uchun 1, oldingi javobni tozalash bilan 2 turadi. Foydalanuvchiga ta’sir qiladigan Telegram amallari oluvchi bo‘yicha hisoblanadi, shuning uchun `b` ikki baravar joy ajratishi mumkin. XP va obro‘ bu hisobda 0 turadi. Tasodifiy rejim majburiy qatorlar va eng qimmat tasodifiy variantni hisoblaydi.
- Bu barcha yordamchi operatsiyalarni ham qo‘shgan holda aynan yigirmata tarmoq so‘rovining va’dasi emas, ichki hisob. Keyingi qator qolgan chegaradan oshsa, bajarilish to‘xtaydi; bajarilgan amallar bekor qilinmaydi.

Hodisasiz faqat taymer bilan bajarilish, «soatiga ko‘pi bilan bir marta», reaksiya uchun bir martalik mukofot, takroriy hodisalar orqali mukofotni suiiste’mol qilishdan himoya, faqat chegaraga birinchi yetish, aynan bir martalik bajarilish, ixtiyoriy tashqi chatlarni qayta ishlash, akkaunt yoshi yoki o‘tmishdagi ixtiyoriy davr faolligi statistikasini va’da qilmang. Shulardan biri zarur bo‘lsa, tasvirlangan qoidaning o‘zi yetarli emasligini tushuntiring.

Import yangi qoida nusxalarini qo‘shadi; eski Triggers v2’ni ko‘chirmaydi. Eski qoidaning ma’nosini Compact v3’da qayta yozishingiz mumkin, lekin uning eski JSON’ini tayyor import sifatida ko‘rsata olmaysiz.

## 15. Misollarni qabul qilish ssenariylari

Biriktirilgan `examples` papkasida oltita mustaqil to‘plam bor, har birida bitta o‘chiq qoida:

| Fayl | Mos holat | Qo‘shimcha tekshiruvlar |
| --- | --- | --- |
| `01-course-command.json` | A’zo `/course_info` kiritadi | Buyruqsiz oddiy matn javobni ishga tushirmasligi kerak |
| `02-recording-faq.json` | Matnda «yozuv qayerda» bor | Aloqasiz savol javobni ishga tushirmasligi kerak; qisman qidiruv uzunroq iborada ham mos kelishi mumkin |
| `03-random-welcome.json` | Yangi a’zo kiradi | Uchalasini emas, bitta salomlashuvni tanlash kerak |
| `04-moderator-reply-mute.json` | Telegram administratori yoki chat egasi a’zoga javoban `/team_pause` yuboradi | Oddiy a’zolar chaqira olmaydi; administrator oluvchilar istisno qilingan; javobsiz buyruq yuboruvchining o‘zini cheklamasligi kerak |
| `05-known-link-join-request.json` | So‘rov Combot katalogidagi havoladan foydalanadi | Tashqi yoki noma’lum manbalar mos kelmasligi kerak; muayyan havolalar tanlanmasa, barcha ma’lum havolalar mos keladi |
| `06-thumbs-up-reaction.json` | Foydalanuvchi reaksiya qo‘shadi va yangi holatda 👍 bor | 👍 olib tashlash mos kelmaydi; takroriy mos o‘zgarishlar yana xabar yuborishi mumkin |

Bular chatingiz uchun qabul qilish ssenariylari, hammasi bajarilgan degan da’vo emas. Bajarilgan tekshiruvlar quyida. Har bir misolni yoqishdan oldin chatingizdagi sozlama va imkoniyatlarni tekshirish zarur.

## 16. Format manbalari va bajarilgan tekshiruvlar

Format Rails `0d80ce4788ef5adc5c7c1b79e85c6b8be27cc00e` va bot `ddc1a8a6b6ab99bd2517d783870495990c7058e5` bilan solishtirilgan. Asosiy tarmoqning bu reviziyalari muharrir va Avtomatlashtirishning muvofiqlashtirilgan tuzatishlarini o‘z ichiga oladi. Rails PR #78 va bot PR #56 birlashtirilgani Codeberg’da tasdiqlangan; joylashtirilgan jarayonlarning aniq reviziyalari mustaqil aniqlanmagan.

Asosiy manbalar: `trigger_compact_codec_helpers.js`, `trigger_import_export_helpers.js`, `trigger_validation_helpers.js`, hodisa va amal registrlari, `user_attribute_model_helpers.js`, `AutomationController`, `docs/MONGODB.md` ichidagi batafsil Avtomatlashtirish kontrakti hamda `automation.py` ichidagi shart va amallarni qayta ishlash kodi.

Oltita asl misol muharrirning manba kodeki yordamida xotirada tekshirilgan: dekodlash, qayta yig‘ish, qayta dekodlash va normallashtirilgan natijaning barqarorligi. Amallar va o‘chiq holat saqlangan. Kodek ayrim standart qiymatlarni tashlab ketadi, shuning uchun kiruvchi JSON bilan baytma-bayt tenglik emas, normallashtirilgan natijalar solishtirilgan.

8-sentabrda combot.org’dagi ishlab turgan muharrir orqali import, serverga saqlash va sahifani qayta yuklashdan keyin barcha oltita asl misolning o‘chiq holati tekshirilgan. Bu Telegram’da har bir shart va amalni tekshirishning o‘rnini bosmaydi.

Buyruq va FAQ holatlari Telegram’da tekshirilgan: mos so‘rovlar kutilgan javoblarni olgan, nazorat so‘rovlari esa olmagan. Faqat `/course_info` sinov vositasining himoya cheklovlari ruxsat bergan yagona sinov nomiga almashtirilgan; misollarning boshqa sozlamalari saqlangan. Bu natijalar boshqa hodisa va amallarni avtomatik tasdiqlamaydi.

`06-thumbs-up-reaction.json` uchun shaxsiy profildan 👍 qo‘shish bitta kutilgan javob bergan; uni olib tashlash hech qanday javob bermagan. Shaxs va reaksiyalarning eski/yangi to‘plamlari alohida Bot API kuzatuvchisi orqali tasdiqlangan. O‘sha sinovda kirishdagi tasodifiy salomlashuv, yozish cheklovining qo‘llanishi va haqiqiy kirish so‘rovining tasdiqlanishi sinalmagan; import amal bajarilganini isbotlamaydi.

Yaratilgan sinov qoidalari olib tashlangan va asl ro‘yxat tiklangani tekshirilgan; natija xabarlari sinov guruhida qolgan. JSON Schema — yordamchi hujjat; u mahsulotga ulanmagan va mavjud ichki validator sifatida taqdim etilmaydi.

9-sentabrda tahririy ma’lumotnoma Rails `0d80ce4788ef5adc5c7c1b79e85c6b8be27cc00e` va bot `0a491a6ee50c57e98c1d9de04819253d15214506` bilan solishtirilgan. Aniqlashtirishlar muharrirdagi nom chegarasi, administrator guruhlari, hodisa ishtirokchilari, amal oluvchilari va vazifalar ro‘yxatlarining ixtiyoriy havolalarini qamrab oladi. Bu manba kodiga tayangan hujjat tekshiruvi, Telegram’dagi yangi sinov emas. Mahalliylashtirilgan misol matnlari ishlayotgan tizimda mustaqil sinalmagan.
