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.
- .NET 8
- Telegram.Bot 22.6.0
- Dicebear API
ILogger<T>HttpClientRegex
Bot foydalanuvchiga quyidagi bosqichma-bosqich tanlovlar asosida avatar yaratadi:
/start— boshlang‘ich buyruq.- Avatar uslubini tanlash (
style) - Rasm formatini tanlash (
pngyokisvg) - Fon turini tanlash (
transparentyokisolid) - Agar
solidbo'lsa, foydalanuvchidan HTML rang kodi yoki rang nomi so‘raladi. - Seed (ixtiyoriy identifikator) kiritiladi.
- Dicebear API’dan avatar olinib, foydalanuvchiga yuboriladi.
public class BotUpdateHandler(ILogger<BotUpdateHandler> logger) : IUpdateHandlerBu sinf IUpdateHandler interfeysini implement qiladi va Telegram bot uchun HandleUpdateAsync va HandleErrorAsync metodlarini beradi.
private readonly Dictionary<long, UserSession> _sessions = new();Har bir foydalanuvchi uchun alohida UserSession obyekt yaratiladi va u orqali foydalanuvchining tanlovlari saqlab boriladi.
private static readonly Dictionary<string, string> ColorNameToHex = ..."qizil", "yashil" kabi rang nomlarini avtomatik HTML rang kodiga aylantirish uchun ishlatiladi.
public Task HandleErrorAsync(...) { ... }Bot ishlashida xatolik yuz bersa, logga yoziladi.
Telegram’dan kelayotgan xabarlar va tugmalarni boshqaradi:
/startkomandasi tanlansa, style tugmalari yuboriladi.- Tugma bosilganda
callback.Dataorqali qaysi bosqichdaligi aniqlanadi. - Agar fon turi
solidbo‘lsa, foydalanuvchidan HTML rang kodi yoki rang nomi so‘raladi. - Oxirida
SendAvatar(...)metodi chaqirilib, Dicebear API orqali avatar yuboriladi.
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)
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
solidbo‘lsa,&backgroundColor=...parametri qo‘shiladi png→SendPhoto,svg→SendDocumentorqali yuboriladi
private class UserSessionBu 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 |
/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
Ushbu loyiha yordamida:
Generic Hostarxitekturasi bilan Telegram bot yaratishIUpdateHandlerinterfeysi 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.
- Foydalanuvchi noto‘g‘ri rang kiritsa, yordamchi xabar chiqariladi.
- Har bir foydalanuvchi uchun
UserSessionalohida ishlaydi. - Kodni kengaytirish oson: yangi uslublar, ranglar yoki sozlamalar qo‘shish mumkin.