From d3ece937e6e6e476610fc1d7eae085727d01ec95 Mon Sep 17 00:00:00 2001
From: TomatoCake <60300461+DEVTomatoCake@users.noreply.github.com>
Date: Wed, 17 Jul 2024 12:31:09 +0200
Subject: [PATCH] Make channel ID optional when replying
---
assets/schemas.json | Bin 19384340 -> 19589397 bytes
.../#channel_id/messages/#message_id/index.ts | 9 ++++-----
src/api/util/handlers/Message.ts | 8 ++++++++
src/util/schemas/MessageCreateSchema.ts | 2 +-
4 files changed, 13 insertions(+), 6 deletions(-)
diff --git a/assets/schemas.json b/assets/schemas.json
index c5a5bedd07b2152b4e838a52b78d7044697bf592..00f86b3604f19db3f1eb55db5e1432de30d7d2a5 100644
GIT binary patch
delta 23218
zcmds<`A<|=6vy*`fq645GpvK)Fvu=Yz$l=A0yY*&TT#KKVgVHwssgoYRjA_@u~r>B
z=!r395Lt>FNLp@HWY8jIKn2kdQ!8K*V@U+mKtxe`hex;n;GX_C%MYJ?-}jw!?)TpJ
z@-;gCSld~?(yLpvB5l>0bU6B5+5mL5dl>fjcVv_Pj?Z6N
d
zsPV6Wel-bNmhPAjs!Y#R$Z9b2Jl6G21kqM&E^F%+ZXv3W!&4@k#-^=;QzI)bgKC+3
zI%qlr{a_%>ZW@g42^2wlj>zk{wWHSfqa~zDZJdn%5P|GO$OK(il$eu)y7HnMDJ--y
z@T6$+KD{tjQ&2j(QBNO*~ONF<*j0*A^Z=+F;KUPjBAtItFpuc+#^@+KEEkm%m_8
zw2>!ay*5cG6s4@elWjdvlz~PbD65E!WY}9_5%>HV$I+`uOqKn6XT9w^
z8%Yx*SvLMASn4cgwbY&F-MM%Oy6}7%sQUd>pe~EHhPr)KGM&1~k~0I1T<)M%ivr<@
z+jb8au<>69I+=ecQC~}bR)fUs1xJJKB5Bk>SuKd`oe)1BvL1CvL9-)QuI-9aLRd!V
z$E5$)kQ6LUrgW;z4VISmxR3z%sm(~dBIsX~5;|S-U;PQyKk;WIh7YO;M>CnW_08x)
zGU$;-K~Z*CSgkT=S+LJKP#klznfbelQa17MCS;D3M825qj6zl#tWjW76s$B{J)Ir5
zoBbh=8o?L@SH-K@*Hsvv`(At)(8&A^HpU7mIrGJ&A#&azl3|Td;I~Lvt7{gXM}m61
zW}z8LdXqF0$vrm48xgU@m;L%B)C7y1PpXi3fh@n0EJHGO|0qw1!IG&A#imsvv4HNk
z>0(Ywl6J3*MUt$Li28IT`%|q@4BpDt{)EH{WNAW%If{)}ny{MYuit>hulDU5cOe-P
z$#hlr4HSMg@UXw$Wb*M0X}C6XuhJNzl7!Svttj9ddEM1KS58cB>Na1*MeNtP)eOnx
zsH>YR=d4JFa=R1>F*)>Ujtl#&(aw8XdFa#UIKY4z2_uCCU+qNEIB3x*yDOy|EtDEE
zAFIVMU}vou+kl~;=$?RAqRU^OWYFc6Xiq;WwKDl4;opVciMC|pWAzaGc{{yESxC
z8Bd}!3uoY?4yY(PgUZZ1`-&Yg)ig99TfuaTByQ^2JcQ-r5O{%+Ig@
zS%*1K&ILzZWk0480+n@=x(XzhgVfBup2vQBR;lY79x~saX-L`3lS7>igX}w1VD(cP
zd`08B(r2WdK{YSN9qQ(VyFo&at@}R*{Grw|R|T5A`ASgv@iLQMe$6;#ec-S4eM+7#}Vx7N@t3jJb9S<
z#FG7I>x7v?Q~DH#2dJ*AdwTuY_kf^lsOK{@HH%-_U&wwAC(P?frO&@?N3z)a;@wLu
zYYR|Ej9QTRs39LLH<%*lRWSRkW2S}bVYvckc0c++D=Qa~C0AazVHp$e43CJ}U&;$5
zms%LhNULAIo#Pbj+jneztarX-%88Kdd+4tZi?}W9hn9k}#s^YvS!;tcZA|H#3t?Ap
zpyFRCn=$k@zIITXz1&_%+kyjZ7mLTS@cjW?0x{s|2Py>tKo
delta 7258
zcmbW5eNdED7{%vxb{8(lvcQ6Zd@N$fr`k%W2!^6CmLZv81lnc^WuuWI)EFZoX$^rS
z$gL?_s3eR~$mEisOQV_^g=QtbQNL^0cQzaL4Vj^&1?o>SSm|~}XGCG+3+c4F^4&<*m*er5Kg$Zq
zZY8v!My8;4DN~);{q+;Nj)6GixQhXW){QC>P$jzNLt6zMTH;RF#|wy46ROGa!N<`g
zOnKJM8zE~vS_m6bt6oH*+C)bmBukS}aiXJ~T`g1Fp<=9Nz-9a>kYbI;8NxOPySg@_
z(DE%)!m;w+IRj~Q5q88%qYEw!V)T{1!3lSBShWyO#%wbGI!7FaQ`Tv
z6EuUNZRA_sjzFL~Gs84(!Iy!h;gFHAQx3D*fzA=oORKd0gboK(2hda(Yjt5?geR-l
zX{%0Hz6v56->MKfrcTuV*QH!HmOk)z(9q!sr9JEWC$tBcC)`gfVd*jR9$;l~Xm;NG
zOF-Phu(31335LpCBduU4`ISYTXs^->e@5Fe+5W|@upB4lF!W`}(jCCo5D{M5`s{XC
z$+PLXpwkw2XYIARHo|NiKWuU%Ow^*6v7SK`k4
zsxsXGjaiO2+6k+_z0HU$a7gxgV1-
zX99a&Kt1}r3cwR@)n5o((!YBm=82!p)q#7mu<|&xDy^s-D35#MP~%U<&Oq0hA)2^B
zp=9OOpXI^EMq)olUM!-;D2Z1=<`>OlofhZ71T=5-^qmG2x*6W)C#Sn#>zc?K7q#62
zT2P2?%IydSG7*r@c=jn6ig!MTtg|?4E_=Ca%j4OL(|30^Tb?F=oKL4ehR#cXF#*+T
zFWiOKEj8oUP(VrKp3-nB2!>WlmuJ9GRP^sSq|LoLA6A-S9JB+zqVOQ@0m~|KyP+Ej
zfD7y1cM}i$`1M<*z(g12O$+%uv)l4k70}u}BYvnS{qT?^S+Ny8qtj88g}IN-f}y}y
z@8caYy?opnonr=*GjKz75W}EWCQSld@uAd8497AQk_>qJnn#%-=a{v$33!tTs!nDr
zwJ513W}fpN#X{;CzRX+Stgw~rX>XE`k}i*K^U}u>Tgl6ya<-L5fH`FTeSK`1y+r6h
zuimpTPN_1CC)i1Our<+yJaSa%DU?KHwl>Xg4vm2CF6Hiya@-{9KrETIObG*z6)*
z24dpp@fKo8s+%k&0c8p*{ehdL04VdfS;PFr9uo5X+?=Mtba$@+R!&s7@0_=E1=s)&
lkD!KSlc!0@cOW5HyV_SmZj^#@|JqNA1cKyL6PaL>`7ao|)baoT
diff --git a/src/api/routes/channels/#channel_id/messages/#message_id/index.ts b/src/api/routes/channels/#channel_id/messages/#message_id/index.ts
index c4d2e1e8..211cf997 100644
--- a/src/api/routes/channels/#channel_id/messages/#message_id/index.ts
+++ b/src/api/routes/channels/#channel_id/messages/#message_id/index.ts
@@ -1,17 +1,17 @@
/*
Spacebar: A FOSS re-implementation and extension of the Discord.com backend.
Copyright (C) 2023 Spacebar and Spacebar Contributors
-
+
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published
by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
-
+
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
-
+
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
*/
@@ -91,11 +91,10 @@ router.patch(
}
} else rights.hasThrow("SELF_EDIT_MESSAGES");
+ // @ts-expect-error Something is wrong with message_reference here, TS complains since "channel_id" is optional in MessageCreateSchema
const new_message = await handleMessage({
...message,
// TODO: should message_reference be overridable?
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
- // @ts-ignore
message_reference: message.message_reference,
...body,
author_id: message.author_id,
diff --git a/src/api/util/handlers/Message.ts b/src/api/util/handlers/Message.ts
index 14efa95b..c3658668 100644
--- a/src/api/util/handlers/Message.ts
+++ b/src/api/util/handlers/Message.ts
@@ -117,6 +117,12 @@ export async function handleMessage(opts: MessageOptions): Promise {
const guild = await Guild.findOneOrFail({
where: { id: channel.guild_id },
});
+
+ if (!opts.message_reference.guild_id)
+ opts.message_reference.guild_id = channel.guild_id;
+ if (!opts.message_reference.channel_id)
+ opts.message_reference.channel_id = opts.channel_id;
+
if (!guild.features.includes("CROSS_CHANNEL_REPLIES")) {
if (opts.message_reference.guild_id !== channel.guild_id)
throw new HTTPError(
@@ -127,6 +133,8 @@ export async function handleMessage(opts: MessageOptions): Promise {
"You can only reference messages from this channel",
);
}
+
+ message.message_reference = opts.message_reference;
}
/** Q: should be checked if the referenced message exists? ANSWER: NO
otherwise backfilling won't work **/
diff --git a/src/util/schemas/MessageCreateSchema.ts b/src/util/schemas/MessageCreateSchema.ts
index 495e2ebd..014f6c87 100644
--- a/src/util/schemas/MessageCreateSchema.ts
+++ b/src/util/schemas/MessageCreateSchema.ts
@@ -42,7 +42,7 @@ export interface MessageCreateSchema {
};
message_reference?: {
message_id: string;
- channel_id: string;
+ channel_id?: string;
guild_id?: string;
fail_if_not_exists?: boolean;
};