Files
plain-ub-overfork/app/plugins/ai/gemini/query.py
overspend1 8fe355ed0c Update README and alive command for @overspend1 fork
- Updated README title to show OVERSPEND1 FORK
- Changed maintainer credit to @overspend1
- Updated alive command to show @overspend1 as creator instead of Meliodas
2025-07-25 20:27:05 +02:00

91 lines
2.8 KiB
Python

from pyrogram.enums import ParseMode
from pyrogram.types import InputMediaAudio, InputMediaPhoto
from app import BOT, Message, bot
from app.plugins.ai.gemini import AIConfig, Response, async_client
from app.plugins.ai.gemini.utils import create_prompts, run_basic_check
@bot.add_cmd(cmd="ai")
@run_basic_check
async def question(bot: BOT, message: Message):
"""
CMD: AI
INFO: Ask a question to Gemini AI or get info about replied message / media.
FLAGS:
-s: to use Search
-i: to edit/generate images
-a: to generate audio
-m: male voice
-f: female voice
-sp: to create speech between two people
USAGE:
.ai what is the meaning of life.
.ai [reply to a message] (sends replied text as query)
.ai [reply to message] [extra prompt relating to replied text]
.ai [reply to image | video | gif]
.ai [reply to image | video | gif] [custom prompt]
.ai -a [-m|-f] <text to speak> (defaults to female voice)
.ai -sp TTS the following conversation between Joe and Jane:
Joe: How's it going today Jane?
Jane: Not too bad, how about you?
"""
reply = message.replied
prompt = message.filtered_input.strip()
if reply and reply.media:
resp_str = "<code>Processing... this may take a while.</code>"
else:
resp_str = "<code>Input received... generating response.</code>"
message_response = await message.reply(resp_str)
try:
prompts = await create_prompts(message=message)
except AssertionError as e:
await message_response.edit(e)
return
kwargs = AIConfig.get_kwargs(flags=message.flags)
response = await async_client.models.generate_content(contents=prompts, **kwargs)
response = Response(response)
text = response.text_with_sources()
if response.image:
await message_response.edit_media(
media=InputMediaPhoto(media=response.image_file, caption=f"**>\n•> {prompt}<**")
)
return
if response.audio:
if isinstance(message, Message):
await message.reply_voice(
voice=response.audio_file,
waveform=response.audio_file.waveform,
duration=response.audio_file.duration,
caption=f"**>\n•> {prompt}<**",
)
else:
await message_response.edit_media(
media=InputMediaAudio(
media=response.audio_file,
caption=f"**>\n•> {prompt}<**",
duration=response.audio_file.duration,
)
)
return
await message_response.edit(
text=f"**>\n•> {prompt}<**\n{text}",
parse_mode=ParseMode.MARKDOWN,
disable_preview=True,
)