2026-05-22 19:34:48 +03:00
|
|
|
# from aiogram.methods import SendMessageDraft
|
|
|
|
|
from aiogram import F
|
|
|
|
|
from aiogram.types import (
|
|
|
|
|
CallbackQuery,
|
|
|
|
|
InlineKeyboardButton,
|
|
|
|
|
InlineKeyboardMarkup,
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
from commands import *
|
|
|
|
|
from config import *
|
|
|
|
|
from supergenerator import *
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@router.callback_query(F.data.startswith("prov%"))
|
|
|
|
|
async def select_provider_callback(callback: CallbackQuery):
|
|
|
|
|
current_user_id = str(callback.from_user.id)
|
|
|
|
|
data = callback.data.split("%", 3)
|
2026-07-09 17:59:26 +03:00
|
|
|
user_id, provider = data[1], data[2]
|
2026-05-22 19:34:48 +03:00
|
|
|
|
|
|
|
|
if user_id != current_user_id:
|
|
|
|
|
await callback.answer("не для тебя.")
|
|
|
|
|
return
|
|
|
|
|
|
2026-07-09 17:59:26 +03:00
|
|
|
config = get_user_config(user_id)
|
|
|
|
|
user_model = config.get("model")
|
|
|
|
|
|
2026-05-22 19:34:48 +03:00
|
|
|
buttons = []
|
|
|
|
|
|
2026-07-14 20:45:25 +03:00
|
|
|
i = 0
|
|
|
|
|
|
2026-05-22 19:34:48 +03:00
|
|
|
for model in MODELS.get(provider):
|
2026-07-14 20:45:25 +03:00
|
|
|
i += 1
|
2026-05-22 19:34:48 +03:00
|
|
|
if f"{provider}*{model}" == user_model:
|
|
|
|
|
text = f"{model} ✅"
|
|
|
|
|
else:
|
|
|
|
|
text = model
|
2026-07-09 17:59:26 +03:00
|
|
|
|
|
|
|
|
if MODELS[provider][model].get("alias"):
|
|
|
|
|
model = MODELS[provider][model].get("alias")
|
2026-07-14 20:45:25 +03:00
|
|
|
|
|
|
|
|
if not i % 2:
|
|
|
|
|
buttons[len(buttons)-1] +=[
|
2026-05-22 19:34:48 +03:00
|
|
|
InlineKeyboardButton(
|
|
|
|
|
text=text, callback_data=f"set_model%{user_id}%{provider}*{model}"
|
|
|
|
|
)
|
|
|
|
|
]
|
2026-07-14 20:45:25 +03:00
|
|
|
else:
|
|
|
|
|
buttons.append(
|
|
|
|
|
[
|
|
|
|
|
InlineKeyboardButton(
|
|
|
|
|
text=text, callback_data=f"set_model%{user_id}%{provider}*{model}"
|
|
|
|
|
)
|
|
|
|
|
]
|
|
|
|
|
)
|
2026-05-22 19:34:48 +03:00
|
|
|
|
|
|
|
|
if not buttons:
|
|
|
|
|
buttons = [
|
|
|
|
|
[
|
|
|
|
|
InlineKeyboardButton(
|
|
|
|
|
text="🚫 нет моделей", callback_data=f"models%{user_id}"
|
|
|
|
|
)
|
|
|
|
|
]
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
buttons.append(
|
2026-07-14 20:45:25 +03:00
|
|
|
[InlineKeyboardButton(text="⬅️ назад", callback_data=f"models%{user_id}")]
|
2026-05-22 19:34:48 +03:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
await callback.message.edit_text(
|
|
|
|
|
f"выбран провайдер: {PROVIDERS.get(provider).get('name')}\nвыбери модель:",
|
|
|
|
|
reply_markup=InlineKeyboardMarkup(inline_keyboard=buttons),
|
|
|
|
|
)
|
|
|
|
|
await callback.answer()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@router.callback_query(F.data.startswith("models%"))
|
|
|
|
|
async def models_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)
|
|
|
|
|
|
|
|
|
|
buttons = []
|
2026-07-14 20:45:25 +03:00
|
|
|
|
|
|
|
|
i = 0
|
2026-05-22 21:40:49 +03:00
|
|
|
|
2026-05-22 19:34:48 +03:00
|
|
|
for provider in MODELS:
|
2026-07-14 20:45:25 +03:00
|
|
|
i += 1
|
|
|
|
|
if not i % 2:
|
|
|
|
|
buttons[len(buttons)-1] +=[
|
2026-05-22 19:34:48 +03:00
|
|
|
InlineKeyboardButton(
|
2026-07-14 20:45:25 +03:00
|
|
|
text=PROVIDERS.get(provider).get("name"),
|
|
|
|
|
callback_data=f"prov%{user_id}%{provider}"
|
2026-05-22 19:34:48 +03:00
|
|
|
)
|
|
|
|
|
]
|
2026-07-14 20:45:25 +03:00
|
|
|
else:
|
|
|
|
|
buttons.append(
|
|
|
|
|
[
|
|
|
|
|
InlineKeyboardButton(
|
|
|
|
|
text=PROVIDERS.get(provider).get("name"),
|
|
|
|
|
callback_data=f"prov%{user_id}%{provider}",
|
|
|
|
|
)
|
|
|
|
|
]
|
|
|
|
|
)
|
2026-05-22 19:34:48 +03:00
|
|
|
|
|
|
|
|
if not buttons:
|
|
|
|
|
buttons.append(
|
|
|
|
|
[
|
|
|
|
|
InlineKeyboardButton(
|
|
|
|
|
text="🚫 нет провайдеров!", callback_data=f"settings%{user_id}"
|
|
|
|
|
)
|
|
|
|
|
]
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
buttons.append(
|
2026-07-14 20:45:25 +03:00
|
|
|
[InlineKeyboardButton(text="⬅️ назад", callback_data=f"settings%{user_id}")]
|
2026-05-22 19:34:48 +03:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
await callback.message.edit_text(
|
|
|
|
|
"выбери провайдера:",
|
|
|
|
|
reply_markup=InlineKeyboardMarkup(inline_keyboard=buttons),
|
|
|
|
|
)
|
|
|
|
|
await callback.answer()
|
|
|
|
|
else:
|
|
|
|
|
await callback.answer("не тыкай. это не для тебя.")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@router.callback_query(F.data.startswith("set_model%"))
|
|
|
|
|
async def set_model_callback(callback: CallbackQuery):
|
|
|
|
|
current_user_id = str(callback.from_user.id)
|
|
|
|
|
data = callback.data.split("%", 2)
|
|
|
|
|
user_id, new_model = data[1], data[2]
|
2026-07-09 17:59:26 +03:00
|
|
|
provider = data[2].split("*", 1)[0]
|
|
|
|
|
amodel = data[2].split("*", 1)[1]
|
|
|
|
|
new_model = provider + "*" + amodel
|
|
|
|
|
|
|
|
|
|
for model in MODELS.get(provider):
|
|
|
|
|
nmodel = MODELS[provider][model].get("alias") or None
|
|
|
|
|
if nmodel == amodel:
|
|
|
|
|
new_model = provider + "*" + model
|
|
|
|
|
|
2026-05-22 19:34:48 +03:00
|
|
|
if user_id == current_user_id:
|
|
|
|
|
current_config = get_user_config(user_id)
|
2026-07-14 08:23:17 +03:00
|
|
|
set_user_config(
|
|
|
|
|
user_id,
|
|
|
|
|
new_model,
|
|
|
|
|
current_config.get("stream", True),
|
|
|
|
|
current_config.get("call"),
|
|
|
|
|
current_config.get("prompt"),
|
|
|
|
|
current_config.get("notify"),
|
|
|
|
|
current_config.get("markdown")
|
|
|
|
|
)
|
2026-05-22 19:34:48 +03:00
|
|
|
await callback.message.edit_text(f"выбрана модель: `{new_model}`")
|
|
|
|
|
await callback.answer(f"выбрано: {new_model}")
|
|
|
|
|
else:
|
|
|
|
|
await callback.answer("нет, не трогай")
|
|
|
|
|
|
|
|
|
|
|
2026-07-05 17:06:11 +03:00
|
|
|
|
|
|
|
|
@router.callback_query(F.data.startswith("prompts%"))
|
|
|
|
|
async def 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 = []
|
2026-07-14 20:45:25 +03:00
|
|
|
i = 0
|
2026-07-05 17:06:11 +03:00
|
|
|
|
|
|
|
|
for name in SYSTEM_PROMPTS:
|
2026-07-14 20:45:25 +03:00
|
|
|
i += 1
|
2026-07-05 17:06:11 +03:00
|
|
|
text = name
|
|
|
|
|
if prompt == name:
|
|
|
|
|
text += " ✅"
|
2026-07-14 20:45:25 +03:00
|
|
|
|
|
|
|
|
if not i % 2:
|
|
|
|
|
buttons[len(buttons)-1] +=[
|
2026-07-05 17:06:11 +03:00
|
|
|
InlineKeyboardButton(
|
2026-07-14 20:45:25 +03:00
|
|
|
text=text,
|
|
|
|
|
callback_data=f"set_prompt%{user_id}%{name}"
|
2026-07-05 17:06:11 +03:00
|
|
|
)
|
|
|
|
|
]
|
2026-07-14 20:45:25 +03:00
|
|
|
else:
|
|
|
|
|
buttons.append(
|
|
|
|
|
[
|
|
|
|
|
InlineKeyboardButton(
|
|
|
|
|
text=text,
|
|
|
|
|
callback_data=f"set_prompt%{user_id}%{name}",
|
|
|
|
|
)
|
|
|
|
|
]
|
|
|
|
|
)
|
2026-07-05 17:06:11 +03:00
|
|
|
|
|
|
|
|
if not buttons:
|
|
|
|
|
buttons.append(
|
|
|
|
|
[
|
|
|
|
|
InlineKeyboardButton(
|
|
|
|
|
text="🚫 нет промптов!", callback_data=f"settings%{user_id}"
|
|
|
|
|
)
|
|
|
|
|
]
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
buttons.append(
|
2026-07-14 20:45:25 +03:00
|
|
|
[InlineKeyboardButton(text="⬅️ назад", callback_data=f"settings%{user_id}")]
|
2026-07-05 17:06:11 +03:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
await callback.message.edit_text(
|
|
|
|
|
"выбери системный промпт:",
|
|
|
|
|
reply_markup=InlineKeyboardMarkup(inline_keyboard=buttons),
|
|
|
|
|
)
|
|
|
|
|
await callback.answer()
|
|
|
|
|
else:
|
|
|
|
|
await callback.answer("не тыкай. это не для тебя.")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@router.callback_query(F.data.startswith("set_prompt%"))
|
|
|
|
|
async def set_prompt_callback(callback: CallbackQuery):
|
|
|
|
|
current_user_id = str(callback.from_user.id)
|
|
|
|
|
data = callback.data.split("%", 2)
|
|
|
|
|
user_id = data[1]
|
|
|
|
|
if user_id != current_user_id:
|
|
|
|
|
await callback.answer("нет, не трогай это не твое")
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
new_status = callback.data.split("%")[2]
|
|
|
|
|
|
|
|
|
|
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"),
|
|
|
|
|
new_status,
|
|
|
|
|
config.get("notify"),
|
|
|
|
|
config.get("markdown")
|
|
|
|
|
)
|
2026-07-05 17:27:44 +03:00
|
|
|
await callback.answer("da поменял на " + new_status)
|
2026-07-05 17:06:11 +03:00
|
|
|
await settings_handler(callback)
|
|
|
|
|
|
|
|
|
|
|
2026-05-22 19:34:48 +03:00
|
|
|
@router.callback_query(F.data.startswith("settings%"))
|
|
|
|
|
async def settings_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:
|
|
|
|
|
await callback.answer("нет, не трогай")
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
await settings_handler(callback)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@router.callback_query(F.data.startswith("set_stream%"))
|
|
|
|
|
async def set_stream_callback(callback: CallbackQuery):
|
|
|
|
|
current_user_id = str(callback.from_user.id)
|
|
|
|
|
data = callback.data.split("%", 2)
|
|
|
|
|
user_id = data[1]
|
|
|
|
|
if user_id != current_user_id:
|
|
|
|
|
await callback.answer("нет, не трогай это не твое")
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
new_status = callback.data.split("%")[2]
|
|
|
|
|
|
|
|
|
|
config = get_user_config(user_id)
|
2026-07-14 08:23:17 +03:00
|
|
|
if new_status == "native" or new_status == "edit":
|
|
|
|
|
set_user_config(
|
|
|
|
|
user_id,
|
|
|
|
|
config.get("model"),
|
|
|
|
|
new_status,
|
|
|
|
|
config.get("call"),
|
|
|
|
|
config.get("prompt"),
|
|
|
|
|
config.get("notify"),
|
|
|
|
|
config.get("markdown"),
|
|
|
|
|
)
|
2026-05-22 19:34:48 +03:00
|
|
|
else:
|
2026-07-14 08:23:17 +03:00
|
|
|
set_user_config(
|
|
|
|
|
user_id,
|
|
|
|
|
config.get("model"),
|
|
|
|
|
"none",
|
|
|
|
|
config.get("call"),
|
|
|
|
|
config.get("prompt"),
|
|
|
|
|
config.get("notify"),
|
|
|
|
|
config.get("markdown"),
|
|
|
|
|
)
|
2026-05-22 19:34:48 +03:00
|
|
|
await settings_handler(callback)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@router.callback_query(F.data.startswith("set_call%"))
|
|
|
|
|
async def set_call_callback(callback: CallbackQuery):
|
|
|
|
|
current_user_id = str(callback.from_user.id)
|
|
|
|
|
data = callback.data.split("%", 2)
|
|
|
|
|
user_id = data[1]
|
|
|
|
|
if user_id != current_user_id:
|
|
|
|
|
await callback.answer("нет, не трогай это не твое")
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
new_status = callback.data.split("%")[2]
|
|
|
|
|
|
|
|
|
|
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"),
|
|
|
|
|
new_status,
|
|
|
|
|
config.get("prompt"),
|
|
|
|
|
config.get("notify"),
|
|
|
|
|
config.get("markdown"),
|
|
|
|
|
)
|
2026-07-05 17:06:11 +03:00
|
|
|
await settings_handler(callback)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@router.callback_query(F.data.startswith("set_notify%"))
|
|
|
|
|
async def set_notify_callback(callback: CallbackQuery):
|
|
|
|
|
current_user_id = str(callback.from_user.id)
|
|
|
|
|
data = callback.data.split("%", 2)
|
|
|
|
|
user_id = data[1]
|
|
|
|
|
if user_id != current_user_id:
|
|
|
|
|
await callback.answer("нет, не трогай это не твое")
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
new_status = callback.data.split("%")[2]
|
|
|
|
|
|
|
|
|
|
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"),
|
|
|
|
|
new_status,
|
|
|
|
|
config.get("markdown"),
|
|
|
|
|
)
|
|
|
|
|
await settings_handler(callback)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@router.callback_query(F.data.startswith("set_markdown%"))
|
|
|
|
|
async def set_markdown_callback(callback: CallbackQuery):
|
|
|
|
|
current_user_id = str(callback.from_user.id)
|
|
|
|
|
data = callback.data.split("%", 2)
|
|
|
|
|
user_id = data[1]
|
|
|
|
|
if user_id != current_user_id:
|
|
|
|
|
await callback.answer("нет, не трогай это не твое")
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
new_status = data[2]
|
|
|
|
|
|
|
|
|
|
config = get_user_config(user_id)
|
|
|
|
|
set_user_config(
|
|
|
|
|
user_id,
|
|
|
|
|
config.get("model"),
|
|
|
|
|
config.get("stream"),
|
|
|
|
|
config.get("call"),
|
|
|
|
|
config.get("prompt"),
|
|
|
|
|
config.get("notify"),
|
|
|
|
|
new_status,
|
|
|
|
|
)
|
2026-05-22 19:34:48 +03:00
|
|
|
await settings_handler(callback)
|
|
|
|
|
|
|
|
|
|
|
2026-07-14 08:23:17 +03:00
|
|
|
@router.callback_query(F.data.startswith("new_md%"))
|
2026-07-15 21:27:04 +03:00
|
|
|
async def set_markdown_callback(callback: CallbackQuery, message=None):
|
2026-07-14 08:23:17 +03:00
|
|
|
current_user_id = str(callback.from_user.id)
|
|
|
|
|
data = callback.data.split("%", 2)
|
|
|
|
|
user_id = data[1]
|
|
|
|
|
if user_id != current_user_id:
|
|
|
|
|
await callback.answer("нет, не трогай это не твое")
|
|
|
|
|
return
|
|
|
|
|
config = get_user_config(user_id)
|
|
|
|
|
set_user_config(
|
|
|
|
|
user_id,
|
|
|
|
|
config.get("model"),
|
|
|
|
|
config.get("stream"),
|
|
|
|
|
config.get("call"),
|
|
|
|
|
config.get("prompt"),
|
|
|
|
|
config.get("notify"),
|
|
|
|
|
"new",
|
|
|
|
|
)
|
2026-07-15 21:27:04 +03:00
|
|
|
if message:
|
|
|
|
|
await message.delete()
|
2026-07-14 08:23:17 +03:00
|
|
|
await callback.answer("выбран новый стиль!!")
|
2026-07-15 21:27:04 +03:00
|
|
|
await callback.message.delete()
|
2026-07-14 08:23:17 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
@router.callback_query(F.data.startswith("old_md%"))
|
2026-07-15 21:27:04 +03:00
|
|
|
async def set_markdown_callback(callback: CallbackQuery, message=None):
|
2026-07-14 08:23:17 +03:00
|
|
|
current_user_id = str(callback.from_user.id)
|
|
|
|
|
data = callback.data.split("%", 2)
|
|
|
|
|
user_id = data[1]
|
|
|
|
|
if user_id != current_user_id:
|
|
|
|
|
await callback.answer("нет, не трогай это не твое")
|
|
|
|
|
return
|
|
|
|
|
config = get_user_config(user_id)
|
|
|
|
|
set_user_config(
|
|
|
|
|
user_id,
|
|
|
|
|
config.get("model"),
|
|
|
|
|
config.get("stream"),
|
|
|
|
|
config.get("call"),
|
|
|
|
|
config.get("prompt"),
|
|
|
|
|
config.get("notify"),
|
|
|
|
|
"old",
|
|
|
|
|
)
|
2026-07-15 21:27:04 +03:00
|
|
|
if message:
|
|
|
|
|
await message.delete()
|
2026-07-14 08:23:17 +03:00
|
|
|
await callback.answer("выбран старый стиль!!")
|
2026-07-15 21:27:04 +03:00
|
|
|
await callback.message.delete()
|
2026-07-14 08:23:17 +03:00
|
|
|
|
|
|
|
|
|
2026-05-22 19:34:48 +03:00
|
|
|
@router.callback_query(F.data == "start")
|
|
|
|
|
async def start_callback(callback: CallbackQuery):
|
|
|
|
|
await callback.message.edit_text(
|
|
|
|
|
"✅ я рад что вас заинтересовать✅✅ а теперь напише любое сообщение и свободный узбек вам ответит✅\n\n"
|
|
|
|
|
"/start - ага старт\n"
|
|
|
|
|
"/clear - очистить контекст✅\n"
|
|
|
|
|
"/settings - настройки✅\n"
|
|
|
|
|
"/prompt - системный промпт узбека"
|
|
|
|
|
)
|
|
|
|
|
await callback.answer()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@router.callback_query(F.data.startswith("about%"))
|
|
|
|
|
async def about_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:
|
|
|
|
|
await callback.answer("нет, не трогай")
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
buttons = [
|
|
|
|
|
[InlineKeyboardButton(text="назад", callback_data=f"settings%{user_id}")]
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
await callback.message.edit_text(
|
2026-06-18 22:04:23 +03:00
|
|
|
ABOUT_BOT,
|
|
|
|
|
reply_markup=InlineKeyboardMarkup(inline_keyboard=buttons),
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
await callback.answer()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@router.callback_query(F.data.startswith("donate%"))
|
|
|
|
|
async def donate_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:
|
|
|
|
|
await callback.answer("нет, не трогай")
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
buttons = [
|
|
|
|
|
[InlineKeyboardButton(text="назад", callback_data=f"settings%{user_id}")],
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
await callback.message.edit_text(
|
|
|
|
|
"слушай сюда✅ если хочешь чтобы я не сдох от голода и не начал "
|
|
|
|
|
"писать на китайском✅ кидай сюда монеты👍\n\n"
|
|
|
|
|
"наполни чан узбекгпта на плов✅ а то мозги скрипят как старый таган ✅\n\n"
|
|
|
|
|
"ссылка внизу👍 whoever хочет быть красавчиком✅ кидай сколько не жалко👍\n\n"
|
|
|
|
|
f"{DONATE_LINK}",
|
2026-05-22 19:34:48 +03:00
|
|
|
reply_markup=InlineKeyboardMarkup(inline_keyboard=buttons),
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
await callback.answer()
|