from pydurian.db.utils import Depends, User, get_user, inject from pydurian.emails import send_unban_email from pydurian.sms import ApiError, EmptyCode, SmsService from pyrogram import Client, filters from pyrogram.types import CallbackQuery, InlineKeyboardButton, InlineKeyboardMarkup async def send_phone_number(client: Client, user_id: int, phone_number: str) -> None: await client.send_message( user_id, text="☑️ ⁞ تم توفير رقم جديد\n" f"☎️ ⁞ الرقم : `{phone_number}`", reply_markup=InlineKeyboardMarkup( [ [ InlineKeyboardButton( text="عرض في تيليجرام 👤", url=f"https://t.me/{phone_number}" ), ], [InlineKeyboardButton(text="فكّ الحظر 🗝", callback_data=f"unban_{phone_number}")], [ InlineKeyboardButton( text="طلب رمز التحقّق ✉️", callback_data=f"otp_{phone_number}" ) ], [InlineKeyboardButton(text="حظر الرقم 🚫", callback_data=f"block_{phone_number}")], ] ), ) @Client.on_callback_query(filters.regex(r"^unban_(?P\+\d+)$")) @inject async def send_email_to_recover( client: Client, update: CallbackQuery, user: User = Depends(get_user) ) -> None: phone_number = update.matches[0].group("number") await send_unban_email(user.config.email.email, user.config.email.password, phone_number) await update.answer(text=f"تم إرسال طلب لفكّ حظر الرّقم [{phone_number}]") @Client.on_callback_query(filters.regex(r"^otp_(?P\+\d+)$")) @inject async def request_otp_code( client: Client, update: CallbackQuery, user: User = Depends(get_user) ) -> None: phone_number = update.matches[0].group("number") sms = SmsService(user.config.sms.user, "0257", user.config.sms.api_key) try: code = await sms.get_code(phone_number) await update.edit_message_text( f"✅: تم استلام الرّمز\n☎️رقم الهاتف: `{phone_number}`\n✉️الرمز: `{code}`\n\n#نجح_الطلب", ) await sms.release_phone_number(phone_number) except EmptyCode: await update.answer("لم يصل الرمز بعد ☹️") except ApiError as e: await update.answer(f"حدث هذا الخطأ، راجع المطوّر: {e.msg}") @Client.on_callback_query(filters.regex(r"^block_(?P\+\d+)$")) @inject async def add_phone_number_to_blacklist( client: Client, update: CallbackQuery, user: User = Depends(get_user) ) -> None: phone_number = update.matches[0].group("number") sms = SmsService(user.config.sms.user, "0257", user.config.sms.api_key) try: await sms.ban_phone_number(phone_number) await update.edit_message_text(text="تم حظر الرقم بنجاح 🚫 !...") except ApiError as e: await update.answer(f"حدث هذا الخطأ، راجع المطوّر: {e.msg}")