This commit is contained in:
@@ -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):
|
||||
|
||||
@@ -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,
|
||||
)
|
||||
|
||||
@@ -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
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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()}>
|
||||
|
||||
Reference in New Issue
Block a user