{"id":23103302,"url":"https://github.com/themusharraf/referral-bot","last_synced_at":"2025-04-03T21:27:36.378Z","repository":{"id":261230836,"uuid":"883683031","full_name":"themusharraf/referral-bot","owner":"themusharraf","description":"Creating unique link for telegram bot with python @themusharraf","archived":false,"fork":false,"pushed_at":"2024-11-05T12:08:43.000Z","size":7,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-09T09:29:08.541Z","etag":null,"topics":["aiogram","aiogram3","bot","python","referral-system","tortoise-orm"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/themusharraf.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-11-05T11:52:21.000Z","updated_at":"2024-11-05T12:08:46.000Z","dependencies_parsed_at":"2024-11-05T13:13:56.157Z","dependency_job_id":null,"html_url":"https://github.com/themusharraf/referral-bot","commit_stats":null,"previous_names":["themusharraf/referral-bot"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/themusharraf%2Freferral-bot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/themusharraf%2Freferral-bot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/themusharraf%2Freferral-bot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/themusharraf%2Freferral-bot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/themusharraf","download_url":"https://codeload.github.com/themusharraf/referral-bot/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247081228,"owners_count":20880394,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aiogram","aiogram3","bot","python","referral-system","tortoise-orm"],"created_at":"2024-12-17T00:13:29.852Z","updated_at":"2025-04-03T21:27:36.361Z","avatar_url":"https://github.com/themusharraf.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Python bilan telegram bot uchun noyob havola yaratish\n## 1. User Modeli Ta'rifi\nUser modeli har bir foydalanuvchini ma'lumotlar bazasida ifodalaydi va asosiy ma'lumotlarni saqlash uchun maydonlarga ega:\n\nid: Har bir foydalanuvchi uchun noyob integer identifikatori, asosiy kalit `(pk=True)` sifatida belgilangan.\n`user_id:` Foydalanuvchining noyob identifikatori, bu Telegram user_id yoki boshqa noyob ID bo'lishi mumkin.` unique=True` bilan yagona bo'lishi ta'minlangan.\n`referral_code`: 36 belgigacha bo'lgan noyob satr `(CharField)` maydoni. Bu kod foydalanuvchining `referal identifikatori` sifatida xizmat qiladi.\n`referred_by:` Boshqa bir foydalanuvchiga ishora qiluvchi xorijiy kalit. Bu maydon foydalanuvchini boshqa bir foydalanuvchi tomonidan taklif qilinganligini ko'rsatadi. Agar foydalanuvchi hech kim tomonidan taklif qilinmagan bo'lsa, bu maydon null=True bo'lib qoladi.\n`referral_count:` 0 ga teng bo'lgan boshlang'ich qiymatga ega integer maydoni. Bu har bir foydalanuvchi tomonidan taklif qilingan odamlar sonini kuzatib boradi.\nMeta Klass\nMeta klassida model uchun jadval nomi \"`users`\" deb belgilangan.\n`generate_unique_referral_code` Metodi\nBu sinf usuli `(@classmethod) `bo'lib, har bir foydalanuvchi uchun noyob referal kodini yaratadi.\nMetod random `UUID (universial noyob identifikator)` yaratadi va bazada bunday kod mavjudligini tekshiradi` (await cls.filter(referral_code=referral_code).exists()).`\nAgar noyob kod topilsa, u qaytariladi.\n## 2. add_user Funksiyasi\nadd_user funksiyasi yangi foydalanuvchini tizimga ro'yxatdan o'tkazadi va agar kerak bo'lsa, uni referal orqali o'rnatadi.\n\n`user_id:` Foydalanuvchining noyob identifikatori (ehtimol, Telegram orqali olingan).\n`referred_by_code:` Bu ixtiyoriy parametr bo'lib, foydalanuvchini taklif qilgan boshqa foydalanuvchining referal kodi hisoblanadi. Agar bu berilgan bo'lsa, funksiyada taklif qiluvchining `referral_count` qiymati oshiriladi.\nQadamlar:\n\nReferal Kod Yaratish: generate_unique_referral_code chaqirilib, yangi noyob referal kodi yaratiladi.\nFoydalanuvchi Yaratish: Yangi `User` obyekti `user_id, referral_code, va referred_by` `None` bo'lgan holda yaratiladi.\nTaklif Qiluvchini Tekshirish: Agar `referred_by_code` berilgan bo'lsa:\nMazkur referal kodiga ega User yozuvini olib keladi.\nAgar taklif qiluvchi foydalanuvchi topilsa (`referrer)`, unda `user.referred_by` qiymati shu taklif qiluvchiga o'rnatiladi va taklif qiluvchi foydalanuvchining `referral_count` qiymati 1 ga oshiriladi va saqlanadi.\n\nFoydalanuvchini Saqlash: Yaratilgan yangi user ma'lumotlar bazasida saqlanadi.\n## 3. startup Funktsiyasi\nstartup funksiyasi Tortoise ORM ni ishga tushiradi va ma'lumotlar bazasidagi sxemani yaratadi.\n\n`await Tortoise.init(...): sqlite://db.sqlite3` bilan `SQLite` ma'lumotlar bazasiga ulanadi va model aniqlamalarini __main__ dan olishini bildiradi.\n`await Tortoise.generate_schemas():` Kerakli jadval tuzilmalarini yaratadi (User modeli uchun \"users\" jadvalini yaratadi).\nIshlash Jarayonining Qisqacha Tavsifi\nFoydalanuvchini Ro'yxatdan O'tkazish: Yangi foydalanuvchi ro'yxatdan o'tganida, add_user chaqiriladi. Agar foydalanuvchi boshqa bir foydalanuvchi tomonidan taklif qilingan bo'lsa, `referred_by` maydoni o'rnatiladi va taklif qiluvchining referral_count qiymati oshiriladi.\nReferallarni Kuzatish: Har bir foydalanuvchi noyob `referral_code` ga ega bo'lib, boshqalar bu kod orqali ro'yxatdan o'tishi mumkin.\nMa'lumotlar Bazasini Sozlash: `startup` ma'lumotlar bazasiga ulanishni ishga tushiradi va kerakli jadval tuzilmalari yaratadi.\nBu kod har bir foydalanuvchiga noyob `referal` kod berishni, referallarni kuzatishni va referal sonini dinamik tarzda yangilashni ta'minlaydi.\n### database architecture\n![Screenshot 2024-11-05 at 16 47 16](https://github.com/user-attachments/assets/d8b11345-799c-4676-8a14-e6dda9d8cd3c)\n![Screenshot 2024-11-05 at 16 46 00](https://github.com/user-attachments/assets/fc46745e-4c2f-4a03-b45f-aa96c7c29bdc)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthemusharraf%2Freferral-bot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthemusharraf%2Freferral-bot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthemusharraf%2Freferral-bot/lists"}