Архив: выбор чата в личке, отрицательные номера, стирание всего архива

- /archive в личке с ботом показывает список чатов с архивом (название и количество), дальше — листание и удаление
- Номера сообщений могут быть отрицательными (история группы до перехода в супергруппу) — кнопки и /archive_del их понимают
- /archive_del all — стереть весь архив чата с подтверждением; в личке первым аргументом ID чата
- В callback_data кнопок передаётся ID чата, поэтому архив группы можно чистить из лички

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
yunogasai
2026-09-25 15:11:19 +02:00
parent 622cb5706a
commit f5d1ea6be2
5 changed files with 161 additions and 52 deletions

View File

@@ -29,7 +29,13 @@ export const createChatHistoryService = ({ messageRepository, historyLimit }: Ch
const remove = (chatId: number, ranges: { from: number; to: number }[]): number =>
ranges.reduce((sum, { from, to }) => sum + messageRepository.deleteRange(chatId, from, to), 0);
return { record, latest, latestByUser, find, stats, page, remove };
/** Стереть весь архив чата. */
const removeAll = (chatId: number): number => messageRepository.deleteByChat(chatId);
/** Чаты с архивом — для выбора в личке с ботом. */
const chats = (): { chatId: number; count: number }[] => messageRepository.countsByChat();
return { record, latest, latestByUser, find, stats, page, remove, removeAll, chats };
};
export type ChatHistoryService = ReturnType<typeof createChatHistoryService>;