Files
uzbekgpt/commands.py
T

389 lines
13 KiB
Python
Raw Normal View History

2026-05-22 19:34:48 +03:00
from io import BytesIO
from typing import Optional, Union
from aiogram import Bot, Dispatcher, F, Router
2026-07-14 08:23:17 +03:00
from aiogram.methods import SendRichMessage
2026-05-22 19:34:48 +03:00
from aiogram.client.default import DefaultBotProperties
from aiogram.enums import ChatAction, ChatType
from aiogram.exceptions import TelegramForbiddenError
2026-07-14 08:23:17 +03:00
from aiogram.filters import Command, CommandStart, CommandObject
2026-05-22 19:34:48 +03:00
from aiogram.types import (
BufferedInputFile,
CallbackQuery,
ChosenInlineResult,
InlineKeyboardButton,
InlineKeyboardMarkup,
InlineQuery,
InlineQueryResultArticle,
2026-07-14 08:23:17 +03:00
InputRichMessage,
2026-05-22 19:34:48 +03:00
InputTextMessageContent,
Message,
User,
)
from aiogram.utils.deep_linking import create_start_link
2026-05-23 18:09:50 +03:00
from collections import Counter
2026-05-22 19:34:48 +03:00
from colors import *
from config import *
2026-05-23 18:09:50 +03:00
from statistics import *
2026-05-22 19:34:48 +03:00
from supergenerator import *
router = Router()
2026-07-14 08:23:17 +03:00
commands = ["/stats", "/broadcast", "/ben", "/reporn", "/start", "/prompt", "/config", "/settings", "/clear", "/stop", "/markpidor"]
2026-05-24 22:26:14 +03:00
2026-05-23 18:09:50 +03:00
@router.message(Command("stats"))
async def stats_handler(message: Message):
users = get_all_users()
total_users = len(users)
models = Counter()
streams = Counter()
calls = Counter()
2026-07-05 17:06:11 +03:00
prompts = Counter()
2026-05-23 18:09:50 +03:00
for data in users.values():
if isinstance(data, dict):
models[data.get("model")] += 1
streams[data.get("stream")] += 1
calls[data.get("call")] += 1
2026-07-05 17:06:11 +03:00
prompts[data.get("prompt")] += 1
2026-05-23 18:09:50 +03:00
2026-07-05 17:06:11 +03:00
top_models = models.most_common(5)
top_streams = streams.most_common(2)
top_prompts = prompts.most_common(5)
2026-05-23 18:09:50 +03:00
text = [
"✅ *общая статистика*",
f"☝️пользователей: {total_users}",
f"📞всего генераций: {get_stats('stats/gens')}",
f"👻ген в гостевом: {get_stats('stats/guest')}",
f"🙏ген в инлайне: {get_stats('stats/inline')}",
f"🤝ben: {get_stats('stats/ben')}",
f"🤝reporn: {get_stats('stats/reporn')}",
2026-07-05 17:06:11 +03:00
"🥺топ 5 моделей:",
2026-05-23 18:09:50 +03:00
*(f"- `{m}`: {c}" for m, c in top_models),
"✍️топ режимов стрима:",
*(f"- `{s}`: {c}" for s, c in top_streams),
"👀топ режимов вызова:",
*(f"- `{c}`: {n}" for c, n in calls.most_common()),
2026-07-05 17:06:11 +03:00
"📝топ 5 промптов:",
*(f"- `{c}`: {n}" for c, n in prompts.most_common()),
2026-05-23 18:09:50 +03:00
]
await message.reply("\n".join(text))
2026-05-22 19:34:48 +03:00
@router.message(Command("broadcast"))
async def broadcast_handler(message: Message):
if message.from_user.id != ADMIN_ID:
return await message.reply("🚫 pashol naxxuy.")
text = message.text.removeprefix("/broadcast").strip()
if not text:
return await message.reply("🚫 напиши текст после команды ало.")
2026-07-05 17:06:11 +03:00
users = get_all_user_ids(only_notify=True)
2026-05-22 19:34:48 +03:00
success = 0
failed = 0
for user_id in users:
try:
if user_id > 0:
await message.bot.send_message(user_id, text)
success += 1
except TelegramForbiddenError:
failed += 1
except Exception as e:
print(f"{RED} -- broadcast err - {e}{RESET}")
failed += 1
await message.reply(
f"✅ *готово врат.*\n- успешно: {success}\n- не удалось: {failed}"
)
2026-07-05 17:06:11 +03:00
@router.message(Command("stop"))
async def stop_handler(message: Message):
if message.sender_chat:
user_id = message.sender_chat.id
else:
user_id = message.from_user.id
config = get_user_config(user_id)
2026-07-14 08:23:17 +03:00
set_user_config(
user_id,
config.get("model"),
config.get("stream"),
config.get("call"),
config.get("prompt"),
"net",
config.get("markdown")
)
2026-07-05 17:06:11 +03:00
await message.reply("✅ *рассылка успешно отключена!* чтобы включить её обратно:\n/settings --> рассылка")
2026-05-22 21:06:49 +03:00
@router.message(Command("ben"))
2026-07-14 08:23:17 +03:00
async def ben_handler(message: Message):
2026-05-22 21:06:49 +03:00
if message.chat.type in [ChatType.GROUP, ChatType.SUPERGROUP]:
2026-05-24 22:43:22 +03:00
if message.chat.id in BEN_IDS:
replied = message.reply_to_message or None
if replied:
name = replied.from_user.first_name
ben_id = replied.from_user.id
else:
name = message.from_user.first_name
ben_id = message.from_user.id
await message.reply(
f"{name} ({ben_id}) заbenен за Botting, spamming, and coordinated inauthentic behavior.😡✅\n"
f"админ: Ben (958011829)✅"
)
add_one_to("stats/ben")
2026-05-22 21:06:49 +03:00
return
@router.message(Command("reporn"))
2026-07-14 08:23:17 +03:00
async def reporn_handler(message: Message):
2026-05-22 21:06:49 +03:00
user_name = message.from_user.first_name or message.sender_chat.title or "вы"
if message.chat.type in [ChatType.GROUP, ChatType.SUPERGROUP]:
2026-05-24 22:43:22 +03:00
if message.chat.id in REPORN_IDS:
replied = message.reply_to_message or None
if replied:
name = replied.from_user.first_name
ben_id = replied.from_user.id
else:
name = message.from_user.first_name
ben_id = message.from_user.id
await message.reply(
f"отправлен репорт на {name} ({ben_id})!📞"
)
add_one_to("stats/reporn")
2026-05-22 21:06:49 +03:00
return
2026-07-14 08:23:17 +03:00
@router.message(CommandStart())
async def start_handler(message: Message, command: CommandObject):
2026-05-22 19:34:48 +03:00
if message.chat.type in [ChatType.GROUP, ChatType.SUPERGROUP]:
await message.reply(
"привет, запусти эту команду в ЛиС (личные сообщения) бота✅"
)
return
if message.sender_chat:
user_id = message.sender_chat.id
else:
user_id = message.from_user.id
2026-07-14 08:23:17 +03:00
config = get_user_config(user_id)
payload = command.args
if payload == "new_md":
set_user_config(
user_id,
config.get("model"),
config.get("stream"),
config.get("call"),
config.get("prompt"),
config.get("notify"),
"new"
)
await message.answer("✅ установлен *новый* стиль выделения сообщений!")
elif payload == "old_md":
set_user_config(
user_id,
config.get("model"),
config.get("stream"),
config.get("call"),
config.get("prompt"),
config.get("notify"),
"old"
)
await message.answer("✅ установлен *старый* стиль выделения сообщений!")
2026-05-22 19:34:48 +03:00
invite_url = f"https://t.me/{BOT_USERNAME}?startgroup=start"
keyboard = InlineKeyboardMarkup(
inline_keyboard=[
[InlineKeyboardButton(text="команды", callback_data="start")],
[
InlineKeyboardButton(
text="настройки", callback_data=f"settings%{user_id}"
)
],
[InlineKeyboardButton(text="добавить в группу", url=invite_url)],
]
)
try:
await message.reply(
"Привет, я УзбекГПТ✅ национальный бот Узбикестан и я готов не помочь. Напиши любае сообщение или отправь файл чтоб я быстра ответил!1!1 Или нажми кнопку ниже чтоба посмотрет мои команды..",
reply_markup=keyboard,
)
except Exception as e:
print(f"{RED} -- {e}{RESET}")
@router.message(Command("prompt"))
async def prompt_handler(message: Message):
2026-07-05 17:06:11 +03:00
if message.sender_chat:
user_id = message.sender_chat.id
else:
user_id = message.from_user.id
config = get_user_config(user_id)
system_prompt_name = config["prompt"]
if system_prompt_name in SYSTEM_PROMPTS:
system_prompt = SYSTEM_PROMPTS[system_prompt_name]
else:
await message.reply(
f"🤝 произошла ошибка при отображении промпта `{system_prompt_name}`\n*для фото*: ```prompt\n{IMAGE_PROMPT}```изменить системный промпт узбекгпт пока что нельзя."
)
return
2026-05-22 19:34:48 +03:00
if PROMPT_COMMAND:
await message.reply(
2026-07-05 17:06:11 +03:00
f"🤝 *ваш выбранный промпт* `{system_prompt_name}`: ```prompt\n{system_prompt}```\n*для фото*: ```prompt\n{IMAGE_PROMPT}```\nизменить системный промпт узбекгпт пока что нельзя."
2026-05-22 19:34:48 +03:00
)
else:
if SHOW_ACC_MSG:
await message.reply(
"🚫 *данный команда отключен в этом боте.* попросите владельца включить🤝"
)
2026-07-05 17:06:11 +03:00
return
2026-05-22 19:34:48 +03:00
@router.message(Command("config"))
async def config_handler(message: Message):
if CONFIG_COMMAND:
await message.reply(
f"🤝 *конфиг узбекгпт*:\n`MAX_CONTEXT` = `{MAX_CONTEXT}`\n`MAX_PROMPT` = `{MAX_PROMPT}`\n"
f"`DEFAULT_MODEL` = `{DEFAULT_MODEL}`\n`IMAGE_MODEL` = `{IMAGE_MODEL}`\n"
f"`DEFAULT_STREAM` = `{DEFAULT_STREAM}`\n"
2026-07-05 14:52:57 +03:00
"/settings для изменения настроек!"
2026-05-22 19:34:48 +03:00
)
else:
if SHOW_ACC_MSG:
await message.reply(
"🚫 *данный команда отключен в этом боте.* попросите владельца включить🤝"
)
async def settings_handler(event: Union[Message, CallbackQuery]):
user_id = (
event.sender_chat.id
if isinstance(event, Message) and event.sender_chat
else event.from_user.id
)
config = get_user_config(user_id)
models_count = sum(len(models) for models in MODELS.values())
2026-07-05 17:06:11 +03:00
prompts_count = len(SYSTEM_PROMPTS)
2026-05-22 19:34:48 +03:00
if config["stream"] == "native":
stream_status = "натив"
stream_cb = "edit"
elif config["stream"] == "edit":
stream_status = "редакт"
stream_cb = "none"
else:
stream_status = "net"
stream_cb = "native"
if config["call"] == "da":
call_status = "da"
call_cb = "net"
else:
call_status = "net"
call_cb = "da"
2026-07-05 17:06:11 +03:00
if config["notify"] == "da":
notify_status = "da"
notify_cb = "net"
else:
notify_status = "net"
notify_cb = "da"
2026-05-22 19:34:48 +03:00
keyboard = InlineKeyboardMarkup(
inline_keyboard=[
[
InlineKeyboardButton(
text=f"модели ({models_count})", callback_data=f"models%{user_id}"
)
],
2026-07-05 17:06:11 +03:00
[
InlineKeyboardButton(
text=f"промпты ({prompts_count})", callback_data=f"prompts%{user_id}"
)
],
2026-05-22 19:34:48 +03:00
[
InlineKeyboardButton(
text=f"стрим: {stream_status}",
callback_data=f"set_stream%{user_id}%{stream_cb}",
)
],
[
InlineKeyboardButton(
text=f"отклик: {call_status}",
callback_data=f"set_call%{user_id}%{call_cb}",
)
],
2026-07-05 17:06:11 +03:00
[
InlineKeyboardButton(
text=f"рассылка: {notify_status}",
callback_data=f"set_notify%{user_id}%{notify_cb}",
)
],
2026-06-18 22:04:23 +03:00
[InlineKeyboardButton(text="донат", callback_data=f"donate%{user_id}")],
2026-05-22 19:34:48 +03:00
[InlineKeyboardButton(text="о боте", callback_data=f"about%{user_id}")],
]
)
2026-07-05 17:27:44 +03:00
text = f"⚡ *алло узбекгпт настройки*\nтекущая модель: `{config.get('model')}`\n" \
f"текущий промпт: `{config.get('prompt')}`"
2026-05-22 19:34:48 +03:00
if isinstance(event, Message):
await event.reply(text, reply_markup=keyboard)
else:
await event.message.edit_text(text, reply_markup=keyboard)
await event.answer()
@router.message(Command("settings"))
async def settings_command(message: Message):
if not SETTINGS_COMMAND:
if SHOW_ACC_MSG:
await message.reply(
"🚫 *данный команда отключен в этом боте.* попросите владельца включить🤝"
)
return
await settings_handler(message)
@router.message(Command("clear"))
async def clear_handler(message: Message):
if not CLEAR_COMMAND:
if SHOW_ACC_MSG:
await message.reply(
"🚫 *данный команда отключен в этом боте.* попросите владельца включить🤝"
)
return
user_id = message.sender_chat.id if message.sender_chat else message.from_user.id
user_contexts[user_id] = []
try:
await message.reply("контекст очищен. ✅")
except TelegramForbiddenError as e:
user_contexts[user_id] = []
except Exception as e:
print(f"{RED} -- {e}{RESET}")
2026-07-14 08:23:17 +03:00
@router.message(Command("markpidor"))
async def alo(message: Message):
await message.reply_rich(InputRichMessage(markdown="# ало"))
return