An open API service indexing awesome lists of open source software.

https://github.com/alsheroziy/web-app


https://github.com/alsheroziy/web-app

bot rash-model

Last synced: about 1 month ago
JSON representation

Awesome Lists containing this project

README

          

# Onatili RASH Test - Telegram Mini App

Ona tili (O'zbek tili) bilimini tekshirish uchun Telegram Mini App.

## Loyiha haqida

Bu loyiha Telegram bot orqali foydalanuvchilarning ona tilidan bilim darajasini tekshirish uchun mo'ljallangan. Foydalanuvchilar Telegram botga o'z ism va familiyalarini kiritib, test topshirishlari mumkin.

## Texnologiyalar

- **Next.js 15** - React framework
- **TypeScript** - Type safety
- **Tailwind CSS v4** - Styling
- **ShadCN UI** - UI komponentlar
- **Telegram WebApp API** - Telegram integratsiyasi

## O'rnatish

1. Dependencies o'rnatish:
```bash
npm install
```

2. Development serverni ishga tushirish:
```bash
npm run dev
```

3. Production build:
```bash
npm run build
npm start
```

## Telegram Bot sozlash

### 1. Bot yaratish

1. Telegram'da [@BotFather](https://t.me/BotFather) botini oching
2. `/newbot` buyrug'ini yuboring
3. Bot nomini kiriting (masalan: "Onatili RASH Test")
4. Bot username'ini kiriting (masalan: "onatili_rash_bot")
5. BotFather sizga **API token** beradi, uni saqlang

### 2. Bot kodini yozish

Python uchun misol (telebot yoki aiogram kutubxonasidan foydalanish mumkin):

```python
import telebot
from telebot import types

# Bot tokenini kiriting
BOT_TOKEN = "YOUR_BOT_TOKEN_HERE"
# Web App URL'ingizni kiriting
WEB_APP_URL = "https://your-domain.vercel.app" # yoki localhost:3000

bot = telebot.TeleBot(BOT_TOKEN)

# Foydalanuvchi ma'lumotlarini saqlash
user_data = {}

@bot.message_handler(commands=['start'])
def start(message):
chat_id = message.chat.id
bot.send_message(
chat_id,
"👋 Assalomu alaykum! Onatili RASH testiga xush kelibsiz.\n\n"
"Testni boshlash uchun ismingizni kiriting:"
)
bot.register_next_step_handler(message, get_first_name)

def get_first_name(message):
chat_id = message.chat.id
first_name = message.text.strip()

if not first_name:
bot.send_message(chat_id, "❌ Ism bo'sh bo'lishi mumkin emas. Qaytadan kiriting:")
bot.register_next_step_handler(message, get_first_name)
return

user_data[chat_id] = {'first_name': first_name}
bot.send_message(chat_id, "Familiyangizni kiriting:")
bot.register_next_step_handler(message, get_last_name)

def get_last_name(message):
chat_id = message.chat.id
last_name = message.text.strip()

if not last_name:
bot.send_message(chat_id, "❌ Familiya bo'sh bo'lishi mumkin emas. Qaytadan kiriting:")
bot.register_next_step_handler(message, get_last_name)
return

user_data[chat_id]['last_name'] = last_name

# Web App tugmasini yaratish
markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
web_app = types.WebAppInfo(url=WEB_APP_URL)
button = types.KeyboardButton(text="🎯 Testni ishlash", web_app=web_app)
markup.add(button)

bot.send_message(
chat_id,
f"✅ Ma'lumotlar saqlandi!\n\n"
f"👤 Ism: {user_data[chat_id]['first_name']}\n"
f"👤 Familiya: {user_data[chat_id]['last_name']}\n\n"
f"Testni boshlash uchun tugmani bosing:",
reply_markup=markup
)

@bot.message_handler(commands=['reset'])
def reset(message):
chat_id = message.chat.id
if chat_id in user_data:
del user_data[chat_id]
bot.send_message(chat_id, "🔄 Ma'lumotlar o'chirildi. /start buyrug'i bilan qaytadan boshlang.")

# Botni ishga tushirish
print("Bot ishga tushdi...")
bot.infinity_polling()
```

### 3. Bot ishga tushirish

1. Python va kerakli kutubxonalarni o'rnating:
```bash
pip install pytelegrambotapi
```

2. Bot kodini fayl ichiga saqlang (masalan: `bot.py`)

3. `BOT_TOKEN` va `WEB_APP_URL` qiymatlarini o'zgartiring

4. Botni ishga tushiring:
```bash
python bot.py
```

### 4. Mini App sozlash

1. [@BotFather](https://t.me/BotFather) ga `/mybots` buyrug'ini yuboring
2. O'z botingizni tanlang
3. "Bot Settings" → "Menu Button" → "Configure Menu Button"
4. Web App URL'ini kiriting (masalan: `https://your-domain.vercel.app`)

## Deploy qilish

### Vercel'ga deploy

1. Vercel'ga push qiling:
```bash
npm install -g vercel
vercel
```

2. Deploy URL'ni oling va bot kodida `WEB_APP_URL` ga qo'ying

### Domain sozlash

Deploy qilingandan so'ng, URL'ni bot konfiguratsiyasiga qo'shishni unutmang.

## Xususiyatlar

### ✅ Tayyor

- [x] Telegram WebApp integratsiyasi
- [x] Foydalanuvchi profili (ism, familiya)
- [x] Test interfeysi (20 savol)
- [x] Timer (30 daqiqa)
- [x] Savollarga javob berish
- [x] Natijalarni ko'rsatish
- [x] Responsiv dizayn
- [x] Dark/Light mode qo'llab-quvvatlash

### 🚧 Keyingi qadamlar

- [ ] Backend API yaratish
- [ ] Savollar bazasi
- [ ] Natijalarni saqlash
- [ ] Statistika va tahlil
- [ ] Leaderboard (reyting)
- [ ] Turli xil test turlari

## Fayl strukturasi

```
rash-onatili/
├── app/
│ ├── (root)/
│ │ ├── page.tsx # Bosh sahifa (profil + test)
│ │ ├── layout.tsx # Telegram Provider
│ │ └── test/
│ │ ├── page.tsx # Test sahifasi
│ │ └── result/
│ │ └── page.tsx # Natijalar sahifasi
│ ├── layout.tsx # Root layout
│ └── globals.css # Global CSS
├── components/
│ ├── telegram-provider.tsx # Telegram context
│ ├── profile-card.tsx # Profil kartasi
│ ├── test-card.tsx # Test kartasi
│ └── ui/
│ └── button.tsx # UI komponent
├── lib/
│ ├── telegram.ts # Telegram utilities
│ └── utils.ts # Helper functions
└── package.json
```

## Development

```bash
# Development
npm run dev

# Lint & format
npm run lint
npm run format

# Build
npm run build
```

## Murojaat

Savollar yoki muammolar bo'lsa, issue oching.