Упрощение: общие хелперы, команды и упоминания по entities, фото только для моделей со зрением
- Одна formatUtc и один displayName(profile) вместо копий в разных слоях
- commandOf/mentionsUser/textWithoutMention работают по entities для текста и подписей;
убраны askInCaption, regex-поиск упоминаний и отдельный composer.command("ask")
- Фото скачиваются только если модель их видит; пустой вопрос с картинкой формулирует промпт
- Поддержка фото задаётся явно для моделей по умолчанию, для своей AI_MODEL — через AI_IMAGE_INPUT
- Активность участников считается по сохранённой истории, а не отдельными счётчиками;
один хендлер для message и edited_message, упоминания не пишутся дважды
- SQLite: synchronous = NORMAL для WAL
- Кнопки не-админов отклоняются через bot.drop(isAdmin)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,14 +1,12 @@
|
||||
import { formatUtc } from "../../libs/time.js";
|
||||
import type { ChatMessage } from "../../types.js";
|
||||
|
||||
export const formatTime = (unixSeconds: number): string =>
|
||||
new Date(unixSeconds * 1000).toISOString().slice(0, 16).replace("T", " ");
|
||||
|
||||
/** Сообщения чата в текстовом виде для контекста модели. */
|
||||
export const formatChatMessages = (messages: ChatMessage[]): string =>
|
||||
messages
|
||||
.map((m) => {
|
||||
const reply = m.replyToMessageId ? ` (ответ на #${m.replyToMessageId})` : "";
|
||||
|
||||
return `#${m.messageId} [${formatTime(m.date)} UTC] ${m.author}${reply}: ${m.text}`;
|
||||
return `#${m.messageId} [${formatUtc(m.date)}] ${m.author}${reply}: ${m.text}`;
|
||||
})
|
||||
.join("\n");
|
||||
|
||||
Reference in New Issue
Block a user