import logging
import asyncio
from aiogram import Bot, Dispatcher, types, F
from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton, ChatMemberUpdated
from aiogram.filters import Command
from collections import defaultdict
API_TOKEN = "botingiz_tokeni"
CHANNEL_USERNAME = "test_uchun" # Kanal username (@ belgisisiz)
bot = Bot(token=API_TOKEN)
dp = Dispatcher()
logging.basicConfig(level=logging.INFO)
user_activity = defaultdict(int)
visited_users = set()
async def check_subscription(user_id):
try:
member = await bot.get_chat_member(f"@{CHANNEL_USERNAME}", user_id)
return member.status in ["member", "administrator", "creator"]
except Exception as e:
logging.error(f"Obuna tekshirishda xatolik: {e}")
return False
@dp.message(Command("start"))
async def handle_start(message: types.Message):
user_id = message.from_user.id
subscribed = await check_subscription(user_id)
if not subscribed:
keyboard = InlineKeyboardMarkup(inline_keyboard=[
[InlineKeyboardButton(text="🔔 Kanalga obuna bo‘lish", url=f"https://t.me/{CHANNEL_USERNAME}")]
])
await message.answer("Botdan foydalanish uchun kanalga a’zo bo‘ling!", reply_markup=keyboard)
return
if user_id not in visited_users:
visited_users.add(user_id)
await message.answer("🎉 Xush kelibsiz! Bot tayyor.")
@dp.chat_member(ChatMemberUpdated)
async def member_handler(update: ChatMemberUpdated):
if update.new_chat_member.status == "member":
await bot.send_message(update.chat.id, f"👋 {update.new_chat_member.user.full_name} kanalga qo‘shildi!")
@dp.message()
async def track_activity(message: types.Message):
user_id = message.from_user.id
user_activity[user_id] += 1
@dp.message(Command("top1"))
async def most_active_user(message: types.Message):
if not user_activity:
await message.answer("📊 Hali hech kim faol emas.")
return
top_user = max(user_activity, key=user_activity.get)
await message.answer(f"🏆 Eng faol foydalanuvchi: [{top_user}](tg://user?id={top_user}) \\({user_activity[top_user]} xabar\\)", parse_mode="Markdown")
@dp.message(Command("top10"))
async def top_10_users(message: types.Message):
if not user_activity:
await message.answer("📊 Hali hech kim faol emas.")
return
sorted_users = sorted(user_activity.items(), key=lambda x: x[1], reverse=True)[:10]
ranking = "\n".join([f"{i + 1}. [{user_id}](tg://user?id={user_id}) - {count} xabar" for i, (user_id, count) in
enumerate(sorted_users)])
await message.answer(f"🏆 **Eng faol 10 ta foydalanuvchi:**\n{ranking}", parse_mode="Markdown")
@dp.message(Command("stats"))
async def stats(message: types.Message):
chat = await bot.get_chat(f"@{CHANNEL_USERNAME}")
members_count = await chat.get_member_count()
await message.answer(f"📊 Kanal obunachilari soni: {members_count}")
async def main():
await dp.start_polling(bot)
if __name__ == "__main__":
asyncio.run(main())
🔹 Telegram kanallaringiz uchun maxsus bot kodi ! 🚀
✅ Bepul va qulay yechim !