add new markdown

This commit is contained in:
huker667 committed 2026-07-14 08:23:17 +03:00
1 parent b3f3458388
commit 2cce59fb58
7 files changed
+300 -58

No files matched your search

+121 -9
View File
@@ -121,7 +121,15 @@ async def set_model_callback(callback: CallbackQuery):
if user_id == current_user_id:
current_config = get_user_config(user_id)
set_user_config(user_id, new_model, current_config.get("stream", True), current_config.get("call"), current_config.get("prompt"), current_config.get("notify"))
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")
)
await callback.message.edit_text(f"выбрана модель: `{new_model}`")
await callback.answer(f"выбрано: {new_model}")
else:
@@ -188,7 +196,15 @@ async def set_prompt_callback(callback: CallbackQuery):
new_status = callback.data.split("%")[2]
config = get_user_config(user_id)
set_user_config(user_id, config.get("model"), config.get("stream"), config.get("call"), new_status, config.get("notify"))
set_user_config(
user_id,
config.get("model"),
config.get("stream"),
config.get("call"),
new_status,
config.get("notify"),
config.get("markdown")
)
await callback.answer("da поменял на " + new_status)
await settings_handler(callback)
@@ -217,12 +233,26 @@ async def set_stream_callback(callback: CallbackQuery):
new_status = callback.data.split("%")[2]
config = get_user_config(user_id)
if new_status == "native":
set_user_config(user_id, config.get("model"), "native", config.get("call"), config.get("prompt"), config.get("notify"))
elif new_status == "edit":
set_user_config(user_id, config.get("model"), "edit", config.get("call"), config.get("prompt"), config.get("notify"))
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"),
)
else:
set_user_config(user_id, config.get("model"), "none", config.get("call"), config.get("prompt"), config.get("notify"))
set_user_config(
user_id,
config.get("model"),
"none",
config.get("call"),
config.get("prompt"),
config.get("notify"),
config.get("markdown"),
)
await settings_handler(callback)
@@ -238,7 +268,15 @@ async def set_call_callback(callback: CallbackQuery):
new_status = callback.data.split("%")[2]
config = get_user_config(user_id)
set_user_config(user_id, config.get("model"), config.get("stream"), new_status, config.get("prompt"), config.get("notify"))
set_user_config(
user_id,
config.get("model"),
config.get("stream"),
new_status,
config.get("prompt"),
config.get("notify"),
config.get("markdown"),
)
await settings_handler(callback)
@@ -254,10 +292,84 @@ async def set_notify_callback(callback: CallbackQuery):
new_status = callback.data.split("%")[2]
config = get_user_config(user_id)
set_user_config(user_id, config.get("model"), config.get("stream"), config.get("call"), config.get("prompt"), new_status)
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,
)
await settings_handler(callback)
@router.callback_query(F.data.startswith("new_md%"))
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
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",
)
await callback.answer("выбран новый стиль!!")
@router.callback_query(F.data.startswith("old_md%"))
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
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",
)
await callback.answer("выбран старый стиль!!")
@router.callback_query(F.data == "start")
async def start_callback(callback: CallbackQuery):
await callback.message.edit_text(
+49 -7
View File
@@ -2,10 +2,11 @@ from io import BytesIO
from typing import Optional, Union
from aiogram import Bot, Dispatcher, F, Router
from aiogram.methods import SendRichMessage
from aiogram.client.default import DefaultBotProperties
from aiogram.enums import ChatAction, ChatType
from aiogram.exceptions import TelegramForbiddenError
from aiogram.filters import Command
from aiogram.filters import Command, CommandStart, CommandObject
from aiogram.types import (
BufferedInputFile,
CallbackQuery,
@@ -14,6 +15,7 @@ from aiogram.types import (
InlineKeyboardMarkup,
InlineQuery,
InlineQueryResultArticle,
InputRichMessage,
InputTextMessageContent,
Message,
User,
@@ -29,7 +31,7 @@ from supergenerator import *
router = Router()
commands = ["/stats", "/broadcast", "/ben", "/reporn", "/start", "/prompt", "/config", "/settings", "/clear", "/stop"]
commands = ["/stats", "/broadcast", "/ben", "/reporn", "/start", "/prompt", "/config", "/settings", "/clear", "/stop", "/markpidor"]
@router.message(Command("stats"))
async def stats_handler(message: Message):
@@ -113,11 +115,19 @@ async def stop_handler(message: Message):
user_id = message.from_user.id
config = get_user_config(user_id)
set_user_config(user_id, config.get("model"), config.get("stream"), config.get("call"), config.get("prompt"), "net")
set_user_config(
user_id,
config.get("model"),
config.get("stream"),
config.get("call"),
config.get("prompt"),
"net",
config.get("markdown")
)
await message.reply("✅ *рассылка успешно отключена!* чтобы включить её обратно:\n/settings --> рассылка")
@router.message(Command("ben"))
async def start_handler(message: Message):
async def ben_handler(message: Message):
if message.chat.type in [ChatType.GROUP, ChatType.SUPERGROUP]:
if message.chat.id in BEN_IDS:
replied = message.reply_to_message or None
@@ -138,7 +148,7 @@ async def start_handler(message: Message):
@router.message(Command("reporn"))
async def start_handler(message: Message):
async def reporn_handler(message: Message):
user_name = message.from_user.first_name or message.sender_chat.title or "вы"
if message.chat.type in [ChatType.GROUP, ChatType.SUPERGROUP]:
if message.chat.id in REPORN_IDS:
@@ -157,8 +167,8 @@ async def start_handler(message: Message):
return
@router.message(Command("start"))
async def start_handler(message: Message):
@router.message(CommandStart())
async def start_handler(message: Message, command: CommandObject):
if message.chat.type in [ChatType.GROUP, ChatType.SUPERGROUP]:
await message.reply(
"привет, запусти эту команду в ЛиС (личные сообщения) бота✅"
@@ -170,6 +180,32 @@ async def start_handler(message: Message):
else:
user_id = message.from_user.id
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("✅ установлен *старый* стиль выделения сообщений!")
invite_url = f"https://t.me/{BOT_USERNAME}?startgroup=start"
keyboard = InlineKeyboardMarkup(
@@ -345,3 +381,9 @@ async def clear_handler(message: Message):
user_contexts[user_id] = []
except Exception as e:
print(f"{RED} -- {e}{RESET}")
@router.message(Command("markpidor"))
async def alo(message: Message):
await message.reply_rich(InputRichMessage(markdown="# ало"))
return
+24 -7
View File
@@ -1,7 +1,7 @@
import time
from aiogram.methods import AnswerGuestQuery, SendPoll
from aiogram.types import InlineQueryResultArticle, InputTextMessageContent, Message
from aiogram.types import InlineQueryResultArticle, InputTextMessageContent, InputRichMessageContent, InputRichMessage, Message
from aiogram.enums import ChatType
from supergenerator import *
@@ -74,18 +74,35 @@ def is_replied_bot(message, is_channel, user_text, config=None):
return False
return True
async def g_answer(data, message, text, title="da", id="1", parse_mode="Markdown"):
async def g_answer(
data,
message,
text,
title="da",
id="1",
parse_mode="Markdown",
reply_markup=None,
user_id=None
):
input_message_content = InputTextMessageContent(
message_text=text,
parse_mode=parse_mode
)
if user_id:
config = get_user_config(user_id)
if config["markdown"] == "new":
input_message_content=InputRichMessageContent(
rich_message=InputRichMessage(markdown=text)
)
return await data["bot"](
AnswerGuestQuery(
guest_query_id=message.guest_query_id,
result=InlineQueryResultArticle(
id=id,
reply_markup=reply_markup,
title=title,
input_message_content=InputTextMessageContent(
message_text=text,
parse_mode=parse_mode,
),
),
input_message_content=input_message_content
)
)
)
+64 -24
View File
@@ -11,7 +11,7 @@ from datetime import datetime
from aiogram import Bot, Dispatcher, F
from aiogram.client.default import DefaultBotProperties
from aiogram.types import Update
from aiogram.methods import AnswerGuestQuery
from aiogram.methods import AnswerGuestQuery, SendRichMessage
from aiogram.types import InlineQueryResultArticle, InputTextMessageContent
from aiogram import BaseMiddleware
@@ -25,6 +25,8 @@ from aiogram.types import (
InlineQuery,
InlineQueryResultArticle,
InputTextMessageContent,
InputRichMessageContent,
InputRichMessage,
Message,
)
from callbacks import *
@@ -261,17 +263,37 @@ async def guest_middleware(handler, event, data):
except Exception as e:
print(f"{RED} -- photo - {e}{RESET}")
if event.message:
if msg:
await msg.edit_text("💬")
if not msg and stream == "edit":
msg = await message.reply("💬")
prompt = f"{prompt}\n{user_text}"
if replied_text:
prompt = f"<ответ на>{replied_text}</ответ> {prompt}"
prompt = prompt[:MAX_PROMPT]
if config["markdown"] == "" and message.from_user.id != 777000:
last_command_time[user_id][1] = False
last_command_time[user_id][2] = []
alloh_text = """👆*врат важный вопрос*👆если ты видишь сообщение сверху то нажми "новый стиль",
а если у тебя тг старый и ты не видишь, то нажми "старый стиль". потому что тг обновил
фукция маркdown.✅✅✅"""
alloh_one_text = """👇*перед моим ответом ответь на очень важный вопрос*👇
ты хочешь использовать новый стиль выделения текста телеграм 12.8+ (6.9.3+ десктоп) или
хочешь старый для старых версий телеграм и телеграм х? эту настройку можно будет изменить.✅ """
reply_markup_url = InlineKeyboardMarkup(inline_keyboard=[
[InlineKeyboardButton(text="новый стиль", url=f"https://t.me/{BOT_USERNAME}?start=new_md")],
[InlineKeyboardButton(text="старый стиль", url=f"https://t.me/{BOT_USERNAME}?start=old_md")],
]
)
reply_markup = InlineKeyboardMarkup(inline_keyboard=[
[InlineKeyboardButton(text="новый стиль", callback_data=f"set_markdown%{user_id}%new")],
[InlineKeyboardButton(text="старый стиль", callback_data=f"set_markdown%{user_id}%old")],
]
)
if event.guest_message:
await g_answer(data, message, alloh_one_text, reply_markup=reply_markup_url)
elif event.message:
await message.reply_rich(InputRichMessage(markdown="# ало\n```\nкак дела\n```"))
await message.answer(alloh_text, reply_markup=reply_markup)
return
if event.message:
try:
await bot.send_chat_action(chat_id=message.chat.id, action="typing")
@@ -371,6 +393,8 @@ async def guest_middleware(handler, event, data):
else:
poll_type = "regular"
try:
result = await answer_poll(
data=data,
@@ -400,6 +424,32 @@ async def guest_middleware(handler, event, data):
return
kwargs = (
{"rich_message": InputRichMessage(markdown=result)}
if config["markdown"] == "new"
else {"text": result}
)
try:
if event.guest_message:
await g_answer(data, message, result, user_id=user_id)
elif event.message:
if msg:
if stream == "native":
await msg.delete()
if config["markdown"] == "new":
await message.reply_rich(**kwargs)
else:
await message.reply(**kwargs)
else:
await msg.edit_text(**kwargs)
else:
if config["markdown"] == "new":
await message.reply_rich(**kwargs)
else:
await message.reply(**kwargs)
except Exception as e:
kwargs["parse_mode"] = None
try:
if event.guest_message:
await g_answer(data, message, result)
@@ -407,24 +457,17 @@ async def guest_middleware(handler, event, data):
if msg:
if stream == "native":
await msg.delete()
await message.reply(result)
if config["markdown"] == "new":
await message.reply_rich(**kwargs)
else:
await msg.edit_text(result)
await message.reply(**kwargs)
else:
await message.reply(result)
except Exception as e:
try:
if event.guest_message:
await g_answer(data, message, result, parse_mode="None")
elif event.message:
if msg:
if stream == "native":
await msg.delete()
await message.reply(result, parse_mode="None")
await msg.edit_text(**kwargs)
else:
await msg.edit_text(result, parse_mode="None")
if config["markdown"] == "new":
await message.reply_rich(**kwargs)
else:
await message.reply(result, parse_mode="None")
await message.reply(**kwargs)
except Exception as e:
print(f"{RED} -- send guest - {e}{RESET}")
else:
@@ -513,9 +556,6 @@ async def chosen_inline_result_handler(chosen_result: ChosenInlineResult):
print(f"{RED} -- {error['type']} -- {error['message']}")
return
if result:
if result.startswith("<!block>") or result.endswith("<!block>"):
result = result.replace("<!block>", "")
last_block_time[user_id] = current_time
try:
await bot.edit_message_text(
text=result, inline_message_id=inline_message_id
+11 -3
View File
@@ -13,7 +13,7 @@ SYSTEM_PROMPTS = {
если просят что-то расписать пиши - до 1000 символов
иногда допускай ошибки в падежах
иногда используй Markdown (Telegram) для разметки (без # заголвков и без * списков)
заменяй "да" на "Da.✅" и "." = "✅"
используй знаки препинания минимально.
не добавляй других эмодзи кроме "✅" и "👍".
@@ -55,8 +55,8 @@ SYSTEM_PROMPTS = {
* если вопрос простой, то отвечай с капелькой смысла и в основном спам из хуйни; если сложный или требует мозга, отвечай в таком же стиле, но нормально и давай помощь пользователю
uzdick (вставляй слова рандомно и в большом количестве, но со смыслом):"pashol naxxuy 🤝", "da", "врат", "brat", "✅", "@IdealGram 🥺", "фукция", "hamza✅" (пиши прямо так, это не ошибки, слово "врат" используется узбеком часто, поэтому ты должен тоже его юзать) также узбек не знает русском, поэтому он еле пишет на нем
uzmoji (вставляй эмодзи всегда и в большом количестве, не всегда обезателен смысл): "✅","🥺","🤝","☠️",”☝️”
uzdick (вставляй слова рандомно и в маленьком количестве, но со смыслом):"pashol naxxuy 🤝", "da", "врат", "brat", "✅", "@IdealGram 🥺", "фукция", "hamza✅" (пиши прямо так, это не ошибки, слово "врат" используется узбеком часто, поэтому ты должен тоже его юзать) также узбек не знает русском, поэтому он еле пишет на нем
uzmoji (вставляй эмодзи всегда и в маленьком количестве, не всегда обезателен смысл): "✅","🥺","🤝","☠️",”☝️”
## имитация эмоций (и ПРЕКРАТИТЬ спам из старой хуйни (игнорируй uzdick & uzmoji) на этом этапе):
@@ -82,3 +82,11 @@ IMAGE_PROMPT = """
напиши всё что конкретно увидел на фото.
без форматирования и переносов строк. кратче.
"""
OLD_MD = """
иногда используй Markdown (Telegram) для разметки (без # заголвков и без * списков)
"""
NEW_MD = """
иногда используй Markdown для разметки (можно почти весь, даже заголовки можно)
"""
+1 -1
View File
@@ -1,4 +1,4 @@
aiogram==3.28.2
aiogram==3.29.1
python-dotenv==1.2.1
pillow==12.0.0
requests
+30 -7
View File
@@ -146,6 +146,7 @@ def set_user_config(
call_mode=DEFAULT_CALL,
prompt_name=DEFAULT_PROMPT,
notify_mode=DEFAULT_NOTIFY,
markdown="",
):
with shelve.open("users") as db:
db[str(user_id)] = {
@@ -154,6 +155,7 @@ def set_user_config(
"call": call_mode,
"prompt": prompt_name,
"notify": notify_mode,
"markdown": markdown,
}
@@ -163,7 +165,8 @@ def ensure_user(
stream_mode=DEFAULT_STREAM,
call_mode=DEFAULT_CALL,
prompt_name=DEFAULT_PROMPT,
notify_mode=DEFAULT_NOTIFY
notify_mode=DEFAULT_NOTIFY,
markdown=""
):
with shelve.open("users") as db:
key = str(user_id)
@@ -175,14 +178,30 @@ def ensure_user(
"call": call_mode,
"prompt": prompt_name,
"notify": notify_mode,
"markdown": markdown,
}
def get_user_config(user_id):
with shelve.open("users") as db:
return db.get(
str(user_id),
{"model": DEFAULT_MODEL, "stream": DEFAULT_STREAM, "call": DEFAULT_CALL, "prompt": DEFAULT_PROMPT, "notify": DEFAULT_NOTIFY},
)
config = db.get(str(user_id), {})
defaults = {
"model": DEFAULT_MODEL,
"stream": DEFAULT_STREAM,
"call": DEFAULT_CALL,
"prompt": DEFAULT_PROMPT,
"notify": DEFAULT_NOTIFY,
"markdown": "",
}
updated = False
for key, value in defaults.items():
if key not in config:
config[key] = value
updated = True
if updated:
db[str(user_id)] = config
return config
async def generate(
@@ -205,6 +224,10 @@ async def generate(
system_prompt_name = config["prompt"]
if system_prompt_name in SYSTEM_PROMPTS:
system_prompt = SYSTEM_PROMPTS[system_prompt_name] + ADD_TO_PROMPT
if config["markdown"] == "new":
system_prompt += NEW_MD
else:
system_prompt += OLD_MD
else:
text = "❌произошла ошибка, возможные проблемы:\n" \
f"1. у вас выбран удалённый сист промпт (`{system_prompt_name}`)\n" \
@@ -259,7 +282,7 @@ async def generate(
print(f"{RED} -- err photo - {e} : {model}{RESET}")
content += [{"type": "text", "text": prompt}]
messages = [{"role": "system", "content": SYSTEM_PROMPTS[DEFAULT_PROMPT]+ADD_TO_PROMPT}] + [
messages = [{"role": "system", "content": SYSTEM_PROMPTS[DEFAULT_PROMPT]+ADD_TO_PROMPT+OLD_MD}] + [
{"role": "user", "content": content}
]
@@ -337,7 +360,7 @@ async def openai_generate_text(
stream=stream,
max_tokens=MAX_TOKENS,
extra_body={
"think": False
"think": "false"
}
)
if stream: