Skip to content

Instantly share code, notes, and snippets.

@sirojiddin0198
Created July 22, 2025 05:41
Show Gist options
  • Select an option

  • Save sirojiddin0198/f2e22f478ef6252f134fdcd3ee7aa731 to your computer and use it in GitHub Desktop.

Select an option

Save sirojiddin0198/f2e22f478ef6252f134fdcd3ee7aa731 to your computer and use it in GitHub Desktop.
TelegramBot

🤖 Dicebear Telegram Bot — .NET 8 va Telegram.Bot yordamida Avatar Generator

Ushbu maqolada .NET 8 va Telegram.Bot kutubxonasi yordamida Telegram uchun avatar generator botini qanday tuzish mumkinligi haqida so‘z yuritiladi. Bot foydalanuvchidan bosqichma-bosqich tanlovlar qabul qiladi va Dicebear API yordamida unga shaxsiy avatar rasmini yuboradi.


🧱 Texnologiyalar


📦 Loyihaning qisqacha vazifasi

Bot foydalanuvchiga quyidagi bosqichma-bosqich tanlovlar asosida avatar yaratadi:

  1. /start — boshlang‘ich buyruq.
  2. Avatar uslubini tanlash (style)
  3. Rasm formatini tanlash (png yoki svg)
  4. Fon turini tanlash (transparent yoki solid)
  5. Agar solid bo'lsa, foydalanuvchidan HTML rang kodi yoki rang nomi so‘raladi.
  6. Seed (ixtiyoriy identifikator) kiritiladi.
  7. Dicebear API’dan avatar olinib, foydalanuvchiga yuboriladi.

🧠 Asosiy sinf: BotUpdateHandler

🔧 Konstruktor

public class BotUpdateHandler(ILogger<BotUpdateHandler> logger) : IUpdateHandler

Bu sinf IUpdateHandler interfeysini implement qiladi va Telegram bot uchun HandleUpdateAsync va HandleErrorAsync metodlarini beradi.


🧱 Sessionlar

private readonly Dictionary<long, UserSession> _sessions = new();

Har bir foydalanuvchi uchun alohida UserSession obyekt yaratiladi va u orqali foydalanuvchining tanlovlari saqlab boriladi.


🎨 Ranglarni nomdan aniqlash

private static readonly Dictionary<string, string> ColorNameToHex = ...

"qizil", "yashil" kabi rang nomlarini avtomatik HTML rang kodiga aylantirish uchun ishlatiladi.


⚙️ HandleErrorAsync

public Task HandleErrorAsync(...) { ... }

Bot ishlashida xatolik yuz bersa, logga yoziladi.


📩 HandleUpdateAsync

Telegram’dan kelayotgan xabarlar va tugmalarni boshqaradi:

  • /start komandasi tanlansa, style tugmalari yuboriladi.
  • Tugma bosilganda callback.Data orqali qaysi bosqichdaligi aniqlanadi.
  • Agar fon turi solid bo‘lsa, foydalanuvchidan HTML rang kodi yoki rang nomi so‘raladi.
  • Oxirida SendAvatar(...) metodi chaqirilib, Dicebear API orqali avatar yuboriladi.

🎨 TryParseColor metodi

private bool TryParseColor(string input, out string hex)

Foydalanuvchining kirityotgan rang qiymati quyidagilardan biri ekanini aniqlaydi:

  • HTML rang kodi (masalan: #34eb92)
  • Rang nomi (masalan: qizil, yashil)

🎁 Avatar yuboruvchi metod: SendAvatar

private async Task SendAvatar(...)

Foydalanuvchi tanlagan barcha sozlamalar asosida URL yaratiladi:

  • Dicebear API https://api.dicebear.com/8.x/{style}/{format}?seed=...
  • Agar fon rangi solid bo‘lsa, &backgroundColor=... parametri qo‘shiladi
  • pngSendPhoto, svgSendDocument orqali yuboriladi

🗃️ UserSession modeli

private class UserSession

Bu sinf foydalanuvchi tanlagan quyidagi ma’lumotlarni saqlaydi:

Field Turi Izoh
Style string Dicebear uslubi
Format string PNG yoki SVG
BackgroundType string Transparent yoki solid
HtmlColor string HTML rang kodi (#...)
Seed string Avatar identifikatori
ExpectingHtmlColor bool Rang kodi kutilmoqda
ExpectingSeed bool Seed kutilmoqda

🔄 Bosqichlar diagrammasi (ASCII)

/start bosildi
      ↓
Uslub tanlash (style)
      ↓
Rasm formati tanlash (png/svg)
      ↓
Fon turi tanlash (solid/transparent)
      ↓
  ┌───────────────┐
  │               │
transparent     solid
  ↓               ↓
Avatar          HTML rang kodi
 yuboriladi         ↓
                  Seed kiritish
                      ↓
                 Avatar yuboriladi


📌 Xulosa

Ushbu loyiha yordamida:

  • Generic Host arxitekturasi bilan Telegram bot yaratish
  • IUpdateHandler interfeysi orqali update va error'larni boshqarish
  • Bosqichma-bosqich foydalanuvchi bilan ishlash
  • Dicebear API orqali avatar generatsiya qilish
  • HTML rang kodlarini tanib olish kabi ko‘nikmalarni hosil qilasiz.

💡 Qo‘shimchalar

  • Foydalanuvchi noto‘g‘ri rang kiritsa, yordamchi xabar chiqariladi.
  • Har bir foydalanuvchi uchun UserSession alohida ishlaydi.
  • Kodni kengaytirish oson: yangi uslublar, ranglar yoki sozlamalar qo‘shish mumkin.

🔗 Foydali havolalar

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment