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 | |
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}") | |
async def hello(): | |
return {"success": "hello world!"} | |
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 | |
} | |
async def get_author_chat_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] = { | |
"first_name": m.user.first_name, | |
"username": m.user.username if m.user else None | |
} | |
return { | |
"admin_list": same_user | |
} | |
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 | |
}, | |
} | |
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) |