p1: add forward without author option
All checks were successful
CI / test (push) Successful in 21s

This commit is contained in:
2026-03-08 14:11:04 +03:00
parent 5ae5821c20
commit 33e467d2a5
5 changed files with 27 additions and 9 deletions

View File

@@ -42,10 +42,12 @@ class MessageStatusUpdateRequest(BaseModel):
class MessageForwardRequest(BaseModel):
target_chat_id: int
include_author: bool = True
class MessageForwardBulkRequest(BaseModel):
target_chat_ids: list[int] = Field(min_length=1, max_length=20)
include_author: bool = True
class MessageReactionToggleRequest(BaseModel):

View File

@@ -362,7 +362,7 @@ async def forward_message(
chat_id=payload.target_chat_id,
sender_id=sender_id,
reply_to_message_id=None,
forwarded_from_message_id=source.id,
forwarded_from_message_id=source.id if payload.include_author else None,
message_type=source.type,
text=source.text,
)
@@ -403,7 +403,7 @@ async def forward_message_bulk(
chat_id=target_chat_id,
sender_id=sender_id,
reply_to_message_id=None,
forwarded_from_message_id=source.id,
forwarded_from_message_id=source.id if payload.include_author else None,
message_type=source.type,
text=source.text,
)

View File

@@ -279,7 +279,8 @@ Rules:
```json
{
"target_chat_id": 20
"target_chat_id": 20,
"include_author": true
}
```
@@ -287,7 +288,8 @@ Rules:
```json
{
"target_chat_ids": [20, 21]
"target_chat_ids": [20, 21],
"include_author": true
}
```

View File

@@ -182,16 +182,18 @@ export async function updateMessageStatus(
});
}
export async function forwardMessage(messageId: number, targetChatId: number): Promise<Message> {
export async function forwardMessage(messageId: number, targetChatId: number, includeAuthor = true): Promise<Message> {
const { data } = await http.post<Message>(`/messages/${messageId}/forward`, {
target_chat_id: targetChatId
target_chat_id: targetChatId,
include_author: includeAuthor
});
return data;
}
export async function forwardMessageBulk(messageId: number, targetChatIds: number[]): Promise<Message[]> {
export async function forwardMessageBulk(messageId: number, targetChatIds: number[], includeAuthor = true): Promise<Message[]> {
const { data } = await http.post<Message[]>(`/messages/${messageId}/forward-bulk`, {
target_chat_ids: targetChatIds
target_chat_ids: targetChatIds,
include_author: includeAuthor
});
return data;
}

View File

@@ -64,6 +64,7 @@ export function MessageList() {
const [forwardError, setForwardError] = useState<string | null>(null);
const [isForwarding, setIsForwarding] = useState(false);
const [forwardSelectedChatIds, setForwardSelectedChatIds] = useState<Set<number>>(new Set());
const [forwardIncludeAuthor, setForwardIncludeAuthor] = useState(true);
const [deleteMessageId, setDeleteMessageId] = useState<number | null>(null);
const [deleteError, setDeleteError] = useState<string | null>(null);
const [selectedIds, setSelectedIds] = useState<Set<number>>(new Set());
@@ -169,6 +170,7 @@ export function MessageList() {
setDeleteMessageId(null);
setForwardMessageId(null);
setForwardSelectedChatIds(new Set());
setForwardIncludeAuthor(true);
if (activeChatId) {
setEditingMessage(activeChatId, null);
}
@@ -287,9 +289,10 @@ export function MessageList() {
setIsForwarding(true);
setForwardError(null);
try {
await forwardMessageBulk(forwardMessageId, targetChatIds);
await forwardMessageBulk(forwardMessageId, targetChatIds, forwardIncludeAuthor);
setForwardMessageId(null);
setForwardSelectedChatIds(new Set());
setForwardIncludeAuthor(true);
setForwardQuery("");
} catch {
setForwardError("Failed to forward message");
@@ -674,6 +677,7 @@ export function MessageList() {
setForwardQuery("");
setForwardError(null);
setForwardSelectedChatIds(new Set());
setForwardIncludeAuthor(true);
setCtx(null);
}}
>
@@ -802,6 +806,14 @@ export function MessageList() {
))}
{forwardTargets.length === 0 ? <p className="px-1 py-2 text-xs text-slate-400">No chats found</p> : null}
</div>
<label className="mt-2 flex items-center gap-2 rounded bg-slate-800/70 px-3 py-2 text-xs text-slate-200">
<input
checked={forwardIncludeAuthor}
onChange={(event) => setForwardIncludeAuthor(event.target.checked)}
type="checkbox"
/>
Show original author
</label>
{forwardError ? <p className="mt-2 text-xs text-red-400">{forwardError}</p> : null}
<div className="mt-3 flex gap-2">
<button className="w-full rounded bg-sky-500 px-3 py-2 text-sm font-semibold text-slate-950" onClick={() => void handleForwardSubmit()}>