Meta-AI / main.py
randydev's picture
Update main.py
a8d50f1 verified
raw
history blame
8.36 kB
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)