import logging import base64 from contextlib import asynccontextmanager from akenoai import AkenoXToJs as js from akenoai.runner import run_fast from config import API_ID, API_HASH, BOT_TOKEN, SESSION from pyrogram.enums import ChatMembersFilter logger = logging.getLogger(__name__) LOGS = logging.getLogger("[akenox]") logger.setLevel(logging.DEBUG) fast_app = js.get_app() client = js.create_pyrogram( name="fastapi-bot", api_id=API_ID, api_hash=API_HASH, bot_token=BOT_TOKEN ) user_client = js.create_pyrogram( name="fastapi-user", api_id=API_ID, api_hash=API_HASH, session_string=SESSION ) def get_random_from_channel(link): clean_link = link.split("?")[0] target_link = clean_link.split("/c/") if "/c/" in clean_link else clean_link.split("/") random_id = int(target_link[-1].split("/")[-1]) if len(target_link) > 1 else None desired_username = target_link[3] if len(target_link) > 3 else None username = ( "@" + desired_username if desired_username else "-100" + target_link[1].split("/")[0] if len(target_link) > 1 else None ) return username, random_id @fast_app.on_event("startup") async def startup_event(): user = await client.start() userbot = await user_client.start() LOGS.info(f"Started Bot: {user.me.first_name}") LOGS.info(f"Started UserBot: {userbot.me.first_name}") @fast_app.get("/") async def hello(): return {"success": "hello world!"} @fast_app.get("/user/get_story") async def get_user_story(link: str = None): username, random_id = get_random_from_channel(link) try: stories = await user_client.get_stories(username, story_ids=[random_id]) except Exception as e: return {"error": str(e)} if stories: for story in stories: file_id = ( story.photo.file_id if story and story.photo else None or story.video.file_id if story and story.video else None ) caption = story.caption or f"By {user_client.me.mention}" if file_id: image_path = await user_client.download_media(file_id) with open(image_path, "rb") as f: base64_image = base64.b64encode(f.read()).decode("utf-8") return { "download": base64_image, "random_file_id": file_id, "caption": caption } return { "random_file_id": None, "caption": None } @fast_app.get("/user/author/admin") async def get_author_admin(username: str = None): same_user = {} async for m in user_client.get_chat_members(username, filter=ChatMembersFilter.ADMINISTRATORS): if not m.user.is_bot and not m.user.is_deleted: same_user[m.user.id] = m.user.first_name return { "admin_list": same_user } @fast_app.get("/user/raw/getchat") async def get_chat_raw(username: str = None): try: chat_raw = (await client.get_chat(username)).raw ok = await user_client.get_chat(username) response = await js.get_creation_date( api_key="akeno_OSrXhljIomunACd5JY18jFIeIuuB6Pdx", user_id=ok.pinned_message.from_user.id ) except Exception: return {"error": "Error try again invalid"} return { "id": chat_raw.id, "about": chat_raw.about, "title": ok.title, "username": ok.username if ok else None, "photo": { "id": chat_raw.chat_photo.id, "small_file_id": ok.photo.small_file_id, "small_photo_unique_id": ok.photo.small_photo_unique_id, "big_file_id": ok.photo.big_file_id, "big_photo_unique_id": ok.photo.big_photo_unique_id, "date": chat_raw.chat_photo.date, "dc_id": chat_raw.chat_photo.dc_id, "has_animation": ok.photo.has_animation, "is_personal": ok.photo.is_personal }, "from_user": { "id": ok.pinned_message.from_user.id if ok.pinned_message.from_user else None, "first_name": ok.pinned_message.from_user.first_name if ok.pinned_message.from_user else None, "last_name": ok.pinned_message.from_user.last_name if ok.pinned_message.from_user else None, "status": ok.pinned_message.from_user.status.name if ok.pinned_message.from_user.status else None, "last_online_date": ok.pinned_message.from_user.last_online_date if ok.pinned_message.from_user else None, "username": ok.pinned_message.from_user.username if ok.pinned_message.from_user else None, "is_premium": ok.pinned_message.from_user.is_premium if ok.pinned_message.from_user else None, "is_scam": ok.pinned_message.from_user.is_scam if ok.pinned_message.from_user else None, "creation_date": response }, "can_view_participants": chat_raw.can_view_participants, "can_set_username": chat_raw.can_set_username, "can_set_stickers": chat_raw.can_set_stickers, "hidden_prehistory": chat_raw.hidden_prehistory, "can_set_location": chat_raw.can_set_location, "has_scheduled": chat_raw.has_scheduled, "can_view_stats": chat_raw.can_view_stats, "blocked": chat_raw.blocked, "can_delete_channel": chat_raw.can_delete_channel, "antispam": chat_raw.antispam, "participants_hidden": chat_raw.participants_hidden, "translations_disabled": chat_raw.translations_disabled, "stories_pinned_available": chat_raw.stories_pinned_available, "view_forum_as_messages": chat_raw.view_forum_as_messages, "restricted_sponsored": chat_raw.restricted_sponsored, "can_view_revenue": chat_raw.can_view_revenue, "paid_media_allowed": chat_raw.paid_media_allowed, "can_view_stars_revenue": chat_raw.can_view_stars_revenue, "paid_reactions_available": chat_raw.paid_reactions_available, "stargifts_available": chat_raw.stargifts_available, "participants_count": chat_raw.participants_count, "online_count": chat_raw.online_count, "pinned_msg_id": chat_raw.pinned_msg_id, "linked_chat_id": chat_raw.linked_chat_id, "pending_suggestions": chat_raw.pending_suggestions, "recent_requesters": chat_raw.recent_requesters, "available_reactions": { "allow_custom": chat_raw.available_reactions.allow_custom }, } @fast_app.get("/user/get_user") async def get_user(user_id=None): try: get_users = await client.get_users(user_id) response = await js.get_creation_date( api_key="akeno_OSrXhljIomunACd5JY18jFIeIuuB6Pdx", user_id=get_users.id ) except Exception: return {"error": "Error try again invalid"} return { "id": get_users.id, "is_self": get_users.is_self, "is_contact": get_users.is_contact, "is_mutual_contact": get_users.is_mutual_contact, "is_deleted": get_users.is_deleted, "is_bot": get_users.is_bot, "is_verified": get_users.is_verified, "is_restricted": get_users.is_restricted, "is_scam": get_users.is_scam, "is_fake": get_users.is_fake, "is_support": get_users.is_support, "is_premium": get_users.is_premium, "is_contact_require_premium": get_users.is_contact_require_premium, "is_close_friend": get_users.is_close_friend, "is_stories_hidden": get_users.is_stories_hidden, "is_stories_unavailable": get_users.is_stories_unavailable, "is_business_bot": get_users.is_business_bot, "first_name": get_users.first_name, "status": get_users.status.name, "last_online_date": get_users.last_online_date, "dc_id": get_users.dc_id, "username": get_users.username if get_users else None, "photo": { "small_file_id": get_users.photo.small_file_id, "small_photo_unique_id": get_users.photo.small_photo_unique_id, "big_file_id": get_users.photo.big_file_id, "has_animation": get_users.photo.has_animation, "is_personal": get_users.photo.is_personal }, "creation_date": response } run_fast(build=fast_app, port=7860)