aboutsummaryrefslogtreecommitdiff
path: root/callbacks.py
diff options
context:
space:
mode:
authorhuker667 <huker@tuta.io>2026-08-03 09:37:10 +0300
committerhuker667 <huker@tuta.io>2026-08-03 09:37:10 +0300
commita14713a286e5e3ea14f47226472689ebcffe49d9 (patch)
tree674a17b6e058285f791ba9dcccaeea5a055e87b3 /callbacks.py
parente3116d490eb764b5c23edfcd6f2674432d31bcea (diff)
downloaduzbekgpt-a14713a286e5e3ea14f47226472689ebcffe49d9.tar.gz
uzbekgpt-a14713a286e5e3ea14f47226472689ebcffe49d9.tar.bz2
uzbekgpt-a14713a286e5e3ea14f47226472689ebcffe49d9.zip
пиздец обнова конечно
Diffstat (limited to 'callbacks.py')
-rw-r--r--callbacks.py596
1 files changed, 581 insertions, 15 deletions
diff --git a/callbacks.py b/callbacks.py
index f6649a7..a5e31cf 100644
--- a/callbacks.py
+++ b/callbacks.py
@@ -1,4 +1,5 @@
-# from aiogram.methods import SendMessageDraft
+import random
+
from aiogram import F
from aiogram.types import (
CallbackQuery,
@@ -149,7 +150,8 @@ async def set_model_callback(callback: CallbackQuery):
current_config.get("call"),
current_config.get("prompt"),
current_config.get("notify"),
- current_config.get("markdown")
+ current_config.get("markdown"),
+ current_config.get("prompts")
)
await callback.message.edit_text(f"выбрана модель: `{new_model}`")
await callback.answer(f"выбрано: {new_model}")
@@ -157,7 +159,6 @@ async def set_model_callback(callback: CallbackQuery):
await callback.answer("нет, не трогай")
-
@router.callback_query(F.data.startswith("prompts%"))
async def prompts_callback(callback: CallbackQuery):
current_user_id = str(callback.from_user.id)
@@ -165,22 +166,507 @@ async def prompts_callback(callback: CallbackQuery):
user_id = data[1]
if user_id == current_user_id:
config = get_user_config(user_id)
+
+ user_prompts_count = len(config["prompts"])
+ system_prompts_count = len(SYSTEM_PROMPTS)
+
+ buttons = [
+ [
+ InlineKeyboardButton(text=f"✅ стандартные промпты ({system_prompts_count})", callback_data=f"system_prompts%{user_id}"),
+ ],
+ [
+ InlineKeyboardButton(text=f"🤝 твои промпты ({user_prompts_count})", callback_data=f"user_prompts%{user_id}"),
+ ],
+ [
+ InlineKeyboardButton(text="⬅️ назад", callback_data=f"settings%{user_id}"),
+ ]
+ ]
+
+ await callback.message.edit_text(
+ "da:",
+ reply_markup=InlineKeyboardMarkup(inline_keyboard=buttons),
+ )
+ await callback.answer()
+ else:
+ await callback.answer("не тыкай. это не для тебя.")
+
+
+@router.callback_query(F.data.startswith("vps%"))
+async def view_system_prompt_callback(callback: CallbackQuery, dataalo=""):
+ current_user_id = str(callback.from_user.id)
+ if dataalo != "":
+ data = dataalo
+ else:
+ data = callback.data
+
+ data = data.split("%", 3)
+
+ user_id = data[1]
+ prompt_id = data[2]
+ if user_id != current_user_id:
+ await callback.answer("pashol naxxuy")
+ return
+
+ config = get_user_config(user_id)
+ prompt = config.get("prompt", "")
+
+ if prompt_id in SYSTEM_PROMPTS:
+ p = SYSTEM_PROMPTS.get(prompt_id)
+ else:
+ await callback.answer("не нашёл такого промпта!")
+ return
+
+ prompt_name = p.get("name")
+ prompt_text = p.get("text")
+
+ if prompt == prompt_id:
+ prompt_apply_t = "✅ установлен"
+ else:
+ prompt_apply_t = "✅ установить"
+
+ buttons = [
+ [
+ InlineKeyboardButton(text=prompt_apply_t, callback_data=f"sp%{user_id}%0%{prompt_id}%3"),
+ ],
+ [
+ InlineKeyboardButton(text="⬅️ назад", callback_data=f"system_prompts%{user_id}"),
+ ]
+ ]
+
+ await callback.message.edit_text(
+ f"название: `{prompt_name}`\n"
+ f"id: `{prompt_id}`\n"
+ f"```prompt\n{prompt_text}\n```",
+ reply_markup=InlineKeyboardMarkup(inline_keyboard=buttons),
+ )
+ await callback.answer()
+
+
+
+@router.callback_query(F.data.startswith("vp%"))
+async def view_prompt_callback(callback: CallbackQuery, dataalo=""):
+ current_user_id = str(callback.from_user.id)
+ if dataalo != "":
+ data = dataalo
+ else:
+ data = callback.data
+ data = data.split("%", 2)
+ user_id = data[1]
+ prompt_id = data[2]
+ if user_id != current_user_id:
+ await callback.answer("pashol naxxuy")
+ return
+
+ config = get_user_config(user_id)
+ prompt = config.get("prompt", "")
+ prompts = config.get("prompts", {})
+
+ if prompt_id in prompts:
+ p = prompts.get(prompt_id)
+ else:
+ await callback.answer("промпта нет у тебя такого")
+ return
+
+ prompt_pub = p.get("public")
+ prompt_f = p.get("filer")
+ prompt_name = p.get("name")
+
+ if prompt == prompt_id:
+ prompt_apply_t = "✅ установлен"
+ else:
+ prompt_apply_t = "✅ установить"
+
+ if prompt_pub:
+ prompt_pub_t = "✅ публичный"
+ prompt_pub_t2 = "🚫 сделать приватным"
+ else:
+ prompt_pub_t = "🚫 приватный"
+ prompt_pub_t2 = "✅ сделать публичным"
+
+ if prompt_f:
+ prompt_f_t = "как файл"
+ else:
+ prompt_f_t = "как сообщение"
+
+ buttons = [
+ [
+ InlineKeyboardButton(text="✏️ изменить", callback_data=f"ed%{user_id}%{prompt_id}"),
+
+ ],
+ [
+ InlineKeyboardButton(text=prompt_pub_t2, callback_data=f"eds%{user_id}%{prompt_id}"),
+ InlineKeyboardButton(text=f"📂 {prompt_f_t}", callback_data=f"edf%{user_id}%{prompt_id}"),
+ ],
+ [
+ InlineKeyboardButton(text="💬 текст", callback_data=f"vt%{user_id}%{prompt_id}"),
+ InlineKeyboardButton(text=prompt_apply_t, callback_data=f"sp%{user_id}%0%{prompt_id}%1"),
+ ],
+ [
+ InlineKeyboardButton(text="⬅️ назад", callback_data=f"user_prompts%{user_id}"),
+ ]
+ ]
+
+ try:
+ await callback.message.edit_text(
+ f"название: `{prompt_name}`\n"
+ f"id: `{prompt_id}`\n"
+ f"url: `t.me/{BOT_USERNAME}?start=prompt-{user_id}-{prompt_id}`\n"
+ f"отправка: `{prompt_f_t}`\n"
+ f"статус: `{prompt_pub_t}`\n",
+ reply_markup=InlineKeyboardMarkup(inline_keyboard=buttons),
+ )
+ except:
+ pass
+ await callback.answer()
+
+
+
+@router.callback_query(F.data.startswith("user_prompts%"))
+async def user_prompts_callback(callback: CallbackQuery, dataalo=""):
+ current_user_id = str(callback.from_user.id)
+ if dataalo != "":
+ data = dataalo
+ else:
+ data = callback.data
+
+ data = data.split("%", 1)
+
+ user_id = data[1]
+ if user_id == current_user_id:
+ config = get_user_config(user_id)
+ prompt = config.get("prompt", "")
+ prompts = config.get("prompts", {})
+
+ buttons = []
+ i = 0
+
+ for name in prompts:
+ alo = name
+ name = prompts[name].get("name") + " (" + alo[:4] + ")"
+ i += 1
+ text = name
+ if prompt == alo:
+ text += " ✅"
+
+ if not i % 2:
+ buttons[len(buttons)-1] +=[
+ InlineKeyboardButton(
+ text=f"{text}",
+ callback_data=f"vp%{user_id}%{alo}"
+ )
+ ]
+ else:
+ buttons.append(
+ [
+ InlineKeyboardButton(
+ text=f"{text}",
+ callback_data=f"vp%{user_id}%{alo}",
+ )
+ ]
+ )
+
+ if not buttons:
+ buttons.append(
+ [
+ InlineKeyboardButton(
+ text="🚫 нет промптов!", callback_data=f"prompts%{user_id}"
+ )
+ ]
+ )
+
+ buttons.append(
+ [
+ InlineKeyboardButton(text="⬅️ назад", callback_data=f"prompts%{user_id}"),
+ InlineKeyboardButton(text="📝 создать", callback_data=f"create%{user_id}"),
+ ]
+ )
+
+ await callback.message.edit_text(
+ "выбери пользовательский системный промпт:",
+ reply_markup=InlineKeyboardMarkup(inline_keyboard=buttons),
+ )
+ await callback.answer()
+ else:
+ await callback.answer("не тыкай. это не для тебя.")
+
+
+@router.callback_query(F.data.startswith("p_cancel%"))
+async def cancel_prompt_callback(callback: CallbackQuery):
+ current_user_id = str(callback.from_user.id)
+ data = callback.data.split("%", 1)
+ user_id = data[1]
+ if user_id != current_user_id:
+ return await callback.answer("pashol naxxuy. иди наxuy.")
+
+ alo_command[int(user_id)] = {"action": None, "chat_id": callback.message.chat.id, "message_id": callback.message.message_id}
+
+ await user_prompts_callback(callback, dataalo=f"user_prompts%{user_id}")
+
+
+@router.callback_query(F.data.startswith("vt%"))
+async def view_text_callback(callback: CallbackQuery, dataalo=""):
+ current_user_id = str(callback.from_user.id)
+ if dataalo != "":
+ data = dataalo
+ else:
+ data = callback.data
+
+ data = data.split("%", 2)
+
+ user_id = data[1]
+ prompt_id = data[2]
+ if user_id != current_user_id:
+ await callback.answer("нет, не трогай это не твое")
+ return
+
+ config = get_user_config(user_id)
+
+ prompts = config["prompts"]
+
+ prompt = prompts.get(prompt_id)
+
+
+ buttons = [
+ [
+ InlineKeyboardButton(
+ text="⬅️ назад", callback_data=f"vp%{user_id}%{prompt_id}"
+ )
+ ]
+ ]
+
+ await callback.message.edit_text(
+ f"текст промпта `{prompt['name']}`:\n```prompt\n{prompt['text'][:3980]}\n```",
+ reply_markup=InlineKeyboardMarkup(inline_keyboard=buttons),
+ )
+
+
+@router.callback_query(F.data.startswith("edf%"))
+async def edit_filer_callback(callback: CallbackQuery, dataalo=""):
+ current_user_id = str(callback.from_user.id)
+ if dataalo != "":
+ data = dataalo
+ else:
+ data = callback.data
+
+ data = data.split("%", 2)
+
+ user_id = data[1]
+ prompt_id = data[2]
+ if user_id != current_user_id:
+ await callback.answer("нет, не трогай это не твое")
+ return
+
+ config = get_user_config(user_id)
+
+ prompts = config["prompts"]
+
+ prompt = prompts.get(prompt_id)
+
+ if prompt["filer"]:
+ prompt["filer"] = False
+ else:
+ prompt["filer"] = True
+
+ new_prompts = prompts | {prompt_id: prompt}
+
+ set_user_config(
+ user_id,
+ config.get("model"),
+ config.get("stream"),
+ config.get("call"),
+ config.get("prompt"),
+ config.get("notify"),
+ config.get("markdown"),
+ new_prompts
+ )
+
+ return await view_prompt_callback(callback, dataalo=f"0%{user_id}%{prompt_id}")
+
+@router.callback_query(F.data.startswith("eds%"))
+async def edit_status_callback(callback: CallbackQuery, dataalo=""):
+ current_user_id = str(callback.from_user.id)
+ if dataalo != "":
+ data = dataalo
+ else:
+ data = callback.data
+
+ data = data.split("%", 2)
+
+ user_id = data[1]
+ prompt_id = data[2]
+ if user_id != current_user_id:
+ await callback.answer("нет, не трогай это не твое")
+ return
+
+ config = get_user_config(user_id)
+
+ prompts = config["prompts"]
+
+ prompt = prompts.get(prompt_id)
+
+ if prompt["public"]:
+ prompt["public"] = False
+ else:
+ prompt["public"] = True
+
+ new_prompts = prompts | {prompt_id: prompt}
+
+ set_user_config(
+ user_id,
+ config.get("model"),
+ config.get("stream"),
+ config.get("call"),
+ config.get("prompt"),
+ config.get("notify"),
+ config.get("markdown"),
+ new_prompts
+ )
+
+ return await view_prompt_callback(callback, dataalo=f"0%{user_id}%{prompt_id}")
+
+
+@router.callback_query(F.data.startswith("edn%"))
+async def edit_prompt_name_callback(callback: CallbackQuery):
+ current_user_id = str(callback.from_user.id)
+ data = callback.data.split("%", 2)
+ user_id = data[1]
+ prompt_id = data[2]
+ if user_id != current_user_id:
+ return await callback.answer("pashol naxxuy. иди наxuy.")
+
+ config = get_user_config(user_id)
+
+ buttons = [
+ [
+ InlineKeyboardButton(
+ text="❌ отменить", callback_data=f"p_cancel%{user_id}"
+ )
+ ]
+ ]
+
+ alo_command[int(user_id)] = {"action": "p_e_name", "chat_id": callback.message.chat.id, "message_id": callback.message.message_id, "prompt_id": prompt_id}
+
+ await callback.message.edit_text(
+ "установи новое название:",
+ reply_markup=InlineKeyboardMarkup(inline_keyboard=buttons),
+ )
+
+
+@router.callback_query(F.data.startswith("edp%"))
+async def edit_prompt_prompt_callback(callback: CallbackQuery):
+ current_user_id = str(callback.from_user.id)
+ data = callback.data.split("%", 2)
+ user_id = data[1]
+ prompt_id = data[2]
+ if user_id != current_user_id:
+ return await callback.answer("pashol naxxuy. иди наxuy.")
+
+ config = get_user_config(user_id)
+
+ buttons = [
+ [
+ InlineKeyboardButton(
+ text="❌ отменить", callback_data=f"p_cancel%{user_id}"
+ )
+ ]
+ ]
+
+ alo_command[int(user_id)] = {"action": "p_e_prompt", "chat_id": callback.message.chat.id, "message_id": callback.message.message_id, "prompt_id": prompt_id}
+
+ await callback.message.edit_text(
+ "установи новый промпт:",
+ reply_markup=InlineKeyboardMarkup(inline_keyboard=buttons),
+ )
+
+
+@router.callback_query(F.data.startswith("ed%"))
+async def edit_prompt_callback(callback: CallbackQuery):
+ current_user_id = str(callback.from_user.id)
+ data = callback.data.split("%", 2)
+ user_id = data[1]
+ prompt_id = data[2]
+ if user_id != current_user_id:
+ return await callback.answer("pashol naxxuy. иди наxuy.")
+
+ config = get_user_config(user_id)
+
+ buttons = [
+ [
+ InlineKeyboardButton(
+ text="💬 промпт", callback_data=f"edp%{user_id}%{prompt_id}"
+ ),
+ InlineKeyboardButton(
+ text="📝 название", callback_data=f"edn%{user_id}%{prompt_id}"
+ ),
+ ],
+ [
+ InlineKeyboardButton(
+ text="⬅️ назад", callback_data=f"vp%{user_id}%{prompt_id}"
+ ),
+ ]
+ ]
+
+ alo_command[int(user_id)] = {"action": "p_e_name", "chat_id": callback.message.chat.id, "message_id": callback.message.message_id, "prompt_id": prompt_id}
+
+ await callback.message.edit_text(
+ "установи новый промпт:",
+ reply_markup=InlineKeyboardMarkup(inline_keyboard=buttons),
+ )
+
+
+@router.callback_query(F.data.startswith("create%"))
+async def create_prompt_callback(callback: CallbackQuery):
+ current_user_id = str(callback.from_user.id)
+ data = callback.data.split("%", 1)
+ user_id = data[1]
+ if user_id != current_user_id:
+ return await callback.answer("pashol naxxuy. иди наxuy.")
+
+ config = get_user_config(user_id)
+ if len(config["prompts"]) >= MAX_PROMPTS:
+ return await callback.answer("ты превысил максимальное количество промптов!!!")
+
+ buttons = [
+ [
+ InlineKeyboardButton(
+ text="❌ отменить", callback_data=f"p_cancel%{user_id}"
+ )
+ ]
+ ]
+
+ alo_command[int(user_id)] = {"action": "p_name", "chat_id": callback.message.chat.id, "message_id": callback.message.message_id}
+
+ await callback.message.edit_text(
+ "установи отображаемое имя промпта:",
+ reply_markup=InlineKeyboardMarkup(inline_keyboard=buttons),
+ )
+
+
+@router.callback_query(F.data.startswith("system_prompts%"))
+async def system_prompts_callback(callback: CallbackQuery):
+ current_user_id = str(callback.from_user.id)
+ data = callback.data.split("%", 1)
+ user_id = data[1]
+ if user_id == current_user_id:
+ config = get_user_config(user_id)
prompt = config.get("prompt")
buttons = []
i = 0
for name in SYSTEM_PROMPTS:
+ alo = name
+ name = SYSTEM_PROMPTS[name].get("name")
i += 1
text = name
- if prompt == name:
+ if prompt == alo:
text += " ✅"
if not i % 2:
buttons[len(buttons)-1] +=[
InlineKeyboardButton(
text=text,
- callback_data=f"set_prompt%{user_id}%{name}"
+ callback_data=f"vps%{user_id}%{alo}"
)
]
else:
@@ -188,7 +674,7 @@ async def prompts_callback(callback: CallbackQuery):
[
InlineKeyboardButton(
text=text,
- callback_data=f"set_prompt%{user_id}%{name}",
+ callback_data=f"vps%{user_id}%{alo}",
)
]
)
@@ -197,13 +683,15 @@ async def prompts_callback(callback: CallbackQuery):
buttons.append(
[
InlineKeyboardButton(
- text="🚫 нет промптов!", callback_data=f"settings%{user_id}"
+ text="🚫 нет промптов!", callback_data=f"prompts%{user_id}"
)
]
)
buttons.append(
- [InlineKeyboardButton(text="⬅️ назад", callback_data=f"settings%{user_id}")]
+ [
+ InlineKeyboardButton(text="⬅️ назад", callback_data=f"prompts%{user_id}"),
+ ]
)
await callback.message.edit_text(
@@ -216,17 +704,31 @@ async def prompts_callback(callback: CallbackQuery):
-@router.callback_query(F.data.startswith("set_prompt%"))
+@router.callback_query(F.data.startswith("sp%"))
async def set_prompt_callback(callback: CallbackQuery):
+ # КАЛбек: sp%айди%промпт_айди%промпт%тип
+ # 0 - answer + настройки
+ # 1 - answer + открыть prompt view
+ # 2 - answer
+ # 3 - answer + открыть system prompt view
+
current_user_id = str(callback.from_user.id)
- data = callback.data.split("%", 2)
+ data = callback.data.split("%", 4)
user_id = data[1]
+ prompt_user_id = int(data[2])
+ msg_type = 0
+ new_status = data[3]
+
+ if len(data) == 5:
+ msg_type = int(data[4])
+
if user_id != current_user_id:
await callback.answer("нет, не трогай это не твое")
return
- new_status = callback.data.split("%")[2]
-
+ if prompt_user_id != 0:
+ await add_prompt_callback(callback, f"0%{user_id}%{prompt_user_id}%{data[3]}", alo=False)
+
config = get_user_config(user_id)
set_user_config(
user_id,
@@ -235,10 +737,67 @@ async def set_prompt_callback(callback: CallbackQuery):
config.get("call"),
new_status,
config.get("notify"),
- config.get("markdown")
+ config.get("markdown"),
+ config.get("prompts")
)
- await callback.answer("da поменял на " + new_status)
- await settings_handler(callback)
+ if msg_type == 0:
+ await callback.answer("da поменял на " + new_status)
+ await settings_handler(callback)
+ elif msg_type == 1:
+ await callback.answer("установил промпт " + new_status)
+ await view_prompt_callback(callback, dataalo=f"0%{user_id}%{new_status}")
+ elif msg_type == 2:
+ await callback.answer("установил " + new_status)
+ elif msg_type == 3:
+ await callback.answer("установил промпт " + new_status)
+ await view_system_prompt_callback(callback, dataalo=f"0%{user_id}%{new_status}")
+
+
+@router.callback_query(F.data.startswith("ap%"))
+async def add_prompt_callback(callback: CallbackQuery, dataalo="", alo=True):
+ current_user_id = str(callback.from_user.id)
+ if dataalo != "":
+ data = dataalo
+ else:
+ data = callback.data
+
+ data = data.split("%", 3)
+
+ user_id = data[1]
+ prompt_user_id = int(data[2])
+ if user_id != current_user_id:
+ await callback.answer("нет, не трогай это не твое")
+ return
+
+ if prompt_user_id == 0:
+ return await callback.answer("это стандартный промпт suka.")
+
+ config = get_user_config(user_id)
+
+ new_prompts = config["prompts"]
+
+ prompt = get_user_config(prompt_user_id)["prompts"].get(data[3], {})
+ if not prompt:
+ return await callback.answer("pashol naxxuy промпта нет")
+ prompt_pub = prompt.get("public", False)
+ if not prompt_pub:
+ return await callback.answer("pashol naxxuy промпт стал приватным")
+ new_prompt = prompt
+ new_prompt["public"] = False
+ new_prompts = new_prompts | {data[3]: new_prompt}
+
+ set_user_config(
+ user_id,
+ config.get("model"),
+ config.get("stream"),
+ config.get("call"),
+ config.get("prompt"),
+ config.get("notify"),
+ config.get("markdown"),
+ new_prompts
+ )
+ if alo:
+ return await callback.answer("добавил твой промпт da.")
@router.callback_query(F.data.startswith("settings%"))
@@ -274,6 +833,7 @@ async def set_stream_callback(callback: CallbackQuery):
config.get("prompt"),
config.get("notify"),
config.get("markdown"),
+ config.get("prompts"),
)
else:
set_user_config(
@@ -284,6 +844,7 @@ async def set_stream_callback(callback: CallbackQuery):
config.get("prompt"),
config.get("notify"),
config.get("markdown"),
+ config.get("prompts"),
)
await settings_handler(callback)
@@ -308,6 +869,7 @@ async def set_call_callback(callback: CallbackQuery):
config.get("prompt"),
config.get("notify"),
config.get("markdown"),
+ config.get("prompts")
)
await settings_handler(callback)
@@ -332,6 +894,7 @@ async def set_notify_callback(callback: CallbackQuery):
config.get("prompt"),
new_status,
config.get("markdown"),
+ config.get("prompts")
)
await settings_handler(callback)
@@ -356,6 +919,7 @@ async def set_markdown_callback(callback: CallbackQuery):
config.get("prompt"),
config.get("notify"),
new_status,
+ config.get("prompts")
)
await settings_handler(callback)
@@ -377,6 +941,7 @@ async def set_markdown_callback(callback: CallbackQuery, message=None):
config.get("prompt"),
config.get("notify"),
"new",
+ config.get("prompts")
)
if message:
await message.delete()
@@ -401,6 +966,7 @@ async def set_markdown_callback(callback: CallbackQuery, message=None):
config.get("prompt"),
config.get("notify"),
"old",
+ config.get("prompts")
)
if message:
await message.delete()